Version Description
- Fixed page/post parent rule issue
- More forms compatibility
Download this release
Release Info
Developer | timersys |
Plugin | Popups – WordPress Popup |
Version | 1.9.3.3 |
Comparing to | |
See all releases |
Code changes from version 1.9.3.2 to 1.9.3.3
- README.txt +6 -2
- admin/assets/css/editor-style.css +61 -61
- admin/assets/js/spu-tinymce.js +65 -65
- admin/class-social-popup-admin.php +952 -952
- admin/includes/class-spu-notices.php +46 -46
- admin/includes/class-spu-upgrader.php +28 -28
- admin/includes/tinymce-editor.php +38 -38
- admin/views/metaboxes/metabox-appearance.php +210 -210
- admin/views/metaboxes/metabox-donate.php +15 -15
- admin/views/metaboxes/metabox-help.php +67 -67
- admin/views/metaboxes/metabox-options.php +141 -141
- admin/views/metaboxes/metabox-premium.php +39 -39
- admin/views/metaboxes/metabox-rules.php +109 -109
- admin/views/metaboxes/metabox-support.php +5 -5
- admin/views/metaboxes/metabox-video.php +6 -6
- admin/views/settings-page.php +76 -76
- composer.json +8 -8
- composer.lock +166 -166
- includes/class-spu-helper.php +563 -563
- includes/updates-msg.html +7 -7
- languages/popups-de_DE.po +870 -870
- languages/popups-es_ES.po +814 -814
- languages/popups-fr_FR .po +864 -864
- languages/popups-ru_RU.po +730 -730
- languages/popups-sr_RS.po +821 -821
- popups.php +2 -2
- public/assets/js/public.js +1 -1
- public/class-social-popup.php +855 -855
- public/includes/class-spu-rules.php +1150 -1156
- uninstall.php +22 -22
- vendor/autoload.php +7 -7
- vendor/cbschuld/browser.php/.travis.yml +10 -10
- vendor/cbschuld/browser.php/LICENSE.md +7 -7
- vendor/cbschuld/browser.php/README.md +149 -149
- vendor/cbschuld/browser.php/composer.json +22 -22
- vendor/cbschuld/browser.php/lib/Browser.php +1732 -1732
- vendor/cbschuld/browser.php/phpunit.xml.dist +29 -29
- vendor/composer/ClassLoader.php +441 -441
- vendor/composer/LICENSE +21 -21
- vendor/composer/autoload_classmap.php +10 -10
- vendor/composer/autoload_files.php +10 -10
- vendor/composer/autoload_namespaces.php +10 -10
- vendor/composer/autoload_psr4.php +10 -10
- vendor/composer/autoload_real.php +70 -70
- vendor/composer/autoload_static.php +51 -51
- vendor/composer/installed.json +154 -154
- vendor/jaybizzle/crawler-detect/LICENSE +22 -22
- vendor/jaybizzle/crawler-detect/README.md +68 -68
- vendor/jaybizzle/crawler-detect/composer.json +30 -30
- vendor/jaybizzle/crawler-detect/export.php +41 -41
- vendor/jaybizzle/crawler-detect/raw/Crawlers.txt +1140 -1140
- vendor/jaybizzle/crawler-detect/raw/Exclusions.txt +41 -41
- vendor/jaybizzle/crawler-detect/raw/Headers.txt +9 -9
- vendor/jaybizzle/crawler-detect/src/CrawlerDetect.php +191 -191
- vendor/jaybizzle/crawler-detect/src/Fixtures/AbstractProvider.php +31 -31
- vendor/jaybizzle/crawler-detect/src/Fixtures/Crawlers.php +1162 -1162
- vendor/jaybizzle/crawler-detect/src/Fixtures/Exclusions.php +66 -66
- vendor/jaybizzle/crawler-detect/src/Fixtures/Headers.php +37 -37
- vendor/mobiledetect/mobiledetectlib/LICENSE.txt +48 -48
- vendor/mobiledetect/mobiledetectlib/Mobile_Detect.php +828 -1468
README.txt
CHANGED
@@ -3,8 +3,8 @@ Contributors: timersys
|
|
3 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=K4T6L69EV9G2Q
|
4 |
Tags: popup,twitter,google+,facebook,Popups,twitter follow,facebook like,mailchimp,Activecampaign,Mailpoet,Postmatic,Infusionsoft,mailerlite,constant contact,aweber,google plus,social boost,social splash,postmatic,mailpoet,facebook popup,scroll popups,popups,wordpress popup,wp popups,cf7,gf,gravity forms,contact form 7,ifs,infusion soft,subscribe,login popup,ajax login popups,popupmaker
|
5 |
Requires at least: 3.6
|
6 |
-
Tested up to: 4.9.
|
7 |
-
Stable tag: 1.9.3.
|
8 |
Requires PHP: 5.3
|
9 |
Text Domain: popups
|
10 |
License: GPLv2 or later
|
@@ -184,6 +184,10 @@ If you have cache be sure to enable AJAX mode in the plugin settings page
|
|
184 |
|
185 |
== Changelog ==
|
186 |
|
|
|
|
|
|
|
|
|
187 |
= 1.9.3.2 =
|
188 |
* Ninja forms fix
|
189 |
* Added new display rule "custom url"
|
3 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=K4T6L69EV9G2Q
|
4 |
Tags: popup,twitter,google+,facebook,Popups,twitter follow,facebook like,mailchimp,Activecampaign,Mailpoet,Postmatic,Infusionsoft,mailerlite,constant contact,aweber,google plus,social boost,social splash,postmatic,mailpoet,facebook popup,scroll popups,popups,wordpress popup,wp popups,cf7,gf,gravity forms,contact form 7,ifs,infusion soft,subscribe,login popup,ajax login popups,popupmaker
|
5 |
Requires at least: 3.6
|
6 |
+
Tested up to: 4.9.8
|
7 |
+
Stable tag: 1.9.3.3
|
8 |
Requires PHP: 5.3
|
9 |
Text Domain: popups
|
10 |
License: GPLv2 or later
|
184 |
|
185 |
== Changelog ==
|
186 |
|
187 |
+
= 1.9.3.3 =
|
188 |
+
* Fixed page/post parent rule issue
|
189 |
+
* More forms compatibility
|
190 |
+
|
191 |
= 1.9.3.2 =
|
192 |
* Ninja forms fix
|
193 |
* Added new display rule "custom url"
|
admin/assets/css/editor-style.css
CHANGED
@@ -1,62 +1,62 @@
|
|
1 |
-
/**
|
2 |
-
* Editor
|
3 |
-
*/
|
4 |
-
html{
|
5 |
-
background: #9C9B9B;
|
6 |
-
}
|
7 |
-
body#tinymce.wp-editor{
|
8 |
-
margin: 20px auto;
|
9 |
-
}
|
10 |
-
body#tinymce.wp-editor,
|
11 |
-
body#tinymce.wp-editor * {
|
12 |
-
box-sizing: border-box;
|
13 |
-
-webkit-box-sizing: border-box;
|
14 |
-
-moz-box-sizing: border-box;
|
15 |
-
}
|
16 |
-
body#tinymce.wp-editor{
|
17 |
-
max-width: 100%;
|
18 |
-
}
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Top position
|
22 |
-
*/
|
23 |
-
body#tinymce.spu-optin-editor.spu-position-top-bar,
|
24 |
-
body#tinymce.spu-position-top-bar {
|
25 |
-
margin-top: 0 !important;
|
26 |
-
border-top: none !important;
|
27 |
-
}
|
28 |
-
body#tinymce.spu-optin-editor.spu-position-top-bar,
|
29 |
-
body#tinymce.spu-position-top-bar ,
|
30 |
-
body#tinymce.spu-optin-editor.spu-position-bottom-bar,
|
31 |
-
body#tinymce.spu-position-bottom-bar {
|
32 |
-
padding-top: 10px !important;
|
33 |
-
padding-bottom: 10px !important;
|
34 |
-
width: 100% !important;
|
35 |
-
border-left: none !important;
|
36 |
-
border-right: none !important;
|
37 |
-
border-radius: 0;
|
38 |
-
}
|
39 |
-
body#tinymce.spu-optin-editor.spu-position-bottom-bar,
|
40 |
-
body#tinymce.spu-position-bottom-bar {
|
41 |
-
margin-bottom: 0 !important;
|
42 |
-
border-bottom: none !important;
|
43 |
-
position: absolute;
|
44 |
-
left: 0;
|
45 |
-
bottom: 0;
|
46 |
-
}
|
47 |
-
body#tinymce.spu-position-top-bar h1,
|
48 |
-
body#tinymce.spu-position-top-bar h2,
|
49 |
-
body#tinymce.spu-position-top-bar h3,
|
50 |
-
body#tinymce.spu-position-top-bar h4,
|
51 |
-
body#tinymce.spu-position-top-bar h5,
|
52 |
-
body#tinymce.spu-position-top-bar h6,
|
53 |
-
body#tinymce.spu-position-top-bar p,
|
54 |
-
body#tinymce.spu-position-bottom-bar h1,
|
55 |
-
body#tinymce.spu-position-bottom-bar h2,
|
56 |
-
body#tinymce.spu-position-bottom-bar h3,
|
57 |
-
body#tinymce.spu-position-bottom-bar h4,
|
58 |
-
body#tinymce.spu-position-bottom-bar h5,
|
59 |
-
body#tinymce.spu-position-bottom-bar h6,
|
60 |
-
body#tinymce.spu-position-bottom-bar p{
|
61 |
-
margin: 0;
|
62 |
}
|
1 |
+
/**
|
2 |
+
* Editor
|
3 |
+
*/
|
4 |
+
html{
|
5 |
+
background: #9C9B9B;
|
6 |
+
}
|
7 |
+
body#tinymce.wp-editor{
|
8 |
+
margin: 20px auto;
|
9 |
+
}
|
10 |
+
body#tinymce.wp-editor,
|
11 |
+
body#tinymce.wp-editor * {
|
12 |
+
box-sizing: border-box;
|
13 |
+
-webkit-box-sizing: border-box;
|
14 |
+
-moz-box-sizing: border-box;
|
15 |
+
}
|
16 |
+
body#tinymce.wp-editor{
|
17 |
+
max-width: 100%;
|
18 |
+
}
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Top position
|
22 |
+
*/
|
23 |
+
body#tinymce.spu-optin-editor.spu-position-top-bar,
|
24 |
+
body#tinymce.spu-position-top-bar {
|
25 |
+
margin-top: 0 !important;
|
26 |
+
border-top: none !important;
|
27 |
+
}
|
28 |
+
body#tinymce.spu-optin-editor.spu-position-top-bar,
|
29 |
+
body#tinymce.spu-position-top-bar ,
|
30 |
+
body#tinymce.spu-optin-editor.spu-position-bottom-bar,
|
31 |
+
body#tinymce.spu-position-bottom-bar {
|
32 |
+
padding-top: 10px !important;
|
33 |
+
padding-bottom: 10px !important;
|
34 |
+
width: 100% !important;
|
35 |
+
border-left: none !important;
|
36 |
+
border-right: none !important;
|
37 |
+
border-radius: 0;
|
38 |
+
}
|
39 |
+
body#tinymce.spu-optin-editor.spu-position-bottom-bar,
|
40 |
+
body#tinymce.spu-position-bottom-bar {
|
41 |
+
margin-bottom: 0 !important;
|
42 |
+
border-bottom: none !important;
|
43 |
+
position: absolute;
|
44 |
+
left: 0;
|
45 |
+
bottom: 0;
|
46 |
+
}
|
47 |
+
body#tinymce.spu-position-top-bar h1,
|
48 |
+
body#tinymce.spu-position-top-bar h2,
|
49 |
+
body#tinymce.spu-position-top-bar h3,
|
50 |
+
body#tinymce.spu-position-top-bar h4,
|
51 |
+
body#tinymce.spu-position-top-bar h5,
|
52 |
+
body#tinymce.spu-position-top-bar h6,
|
53 |
+
body#tinymce.spu-position-top-bar p,
|
54 |
+
body#tinymce.spu-position-bottom-bar h1,
|
55 |
+
body#tinymce.spu-position-bottom-bar h2,
|
56 |
+
body#tinymce.spu-position-bottom-bar h3,
|
57 |
+
body#tinymce.spu-position-bottom-bar h4,
|
58 |
+
body#tinymce.spu-position-bottom-bar h5,
|
59 |
+
body#tinymce.spu-position-bottom-bar h6,
|
60 |
+
body#tinymce.spu-position-bottom-bar p{
|
61 |
+
margin: 0;
|
62 |
}
|
admin/assets/js/spu-tinymce.js
CHANGED
@@ -1,65 +1,65 @@
|
|
1 |
-
(function( $ ) {
|
2 |
-
'use strict';
|
3 |
-
|
4 |
-
|
5 |
-
tinymce.create('tinymce.plugins.SPU', {
|
6 |
-
init : function(ed, url) {
|
7 |
-
ed.addButton('spu_button', {
|
8 |
-
title : 'Add Popup',
|
9 |
-
cmd : 'spu_button',
|
10 |
-
image : url+'/popup.png'
|
11 |
-
});
|
12 |
-
ed.addCommand('spu_button', function() {
|
13 |
-
|
14 |
-
jQuery('#spu_editor').dialog({
|
15 |
-
height: 500,
|
16 |
-
width: '600px',
|
17 |
-
buttons: {
|
18 |
-
"Insert Shortcode": function() {
|
19 |
-
|
20 |
-
var spu_id = jQuery('#spu-posts').val();
|
21 |
-
var str = "";
|
22 |
-
|
23 |
-
str = '[spu popup="'+spu_id+'"';
|
24 |
-
var selected_text = ed.selection.getContent();
|
25 |
-
if (selected_text) {
|
26 |
-
|
27 |
-
str += "]" + selected_text + "[/spu]";
|
28 |
-
|
29 |
-
} else {
|
30 |
-
|
31 |
-
str += "]YOUR TEXT OR IMG HERE[/spu]";
|
32 |
-
|
33 |
-
}
|
34 |
-
|
35 |
-
|
36 |
-
var Editor = tinyMCE.get('content');
|
37 |
-
Editor.focus();
|
38 |
-
Editor.selection.setContent(str);
|
39 |
-
|
40 |
-
|
41 |
-
jQuery( this ).dialog( "close" );
|
42 |
-
},
|
43 |
-
Cancel: function() {
|
44 |
-
jQuery( this ).dialog( "close" );
|
45 |
-
}
|
46 |
-
}
|
47 |
-
}).dialog('open');
|
48 |
-
|
49 |
-
});
|
50 |
-
},
|
51 |
-
createControl : function(n, cm) {
|
52 |
-
return null;
|
53 |
-
},
|
54 |
-
getInfo : function() {
|
55 |
-
return {
|
56 |
-
longname : 'Popups Button',
|
57 |
-
author : 'Damian Logghe',
|
58 |
-
authorurl : 'https://timersys.com',
|
59 |
-
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example',
|
60 |
-
version : "0.1"
|
61 |
-
};
|
62 |
-
}
|
63 |
-
});
|
64 |
-
tinymce.PluginManager.add('spu', tinymce.plugins.SPU);
|
65 |
-
})( jQuery );
|
1 |
+
(function( $ ) {
|
2 |
+
'use strict';
|
3 |
+
|
4 |
+
|
5 |
+
tinymce.create('tinymce.plugins.SPU', {
|
6 |
+
init : function(ed, url) {
|
7 |
+
ed.addButton('spu_button', {
|
8 |
+
title : 'Add Popup',
|
9 |
+
cmd : 'spu_button',
|
10 |
+
image : url+'/popup.png'
|
11 |
+
});
|
12 |
+
ed.addCommand('spu_button', function() {
|
13 |
+
|
14 |
+
jQuery('#spu_editor').dialog({
|
15 |
+
height: 500,
|
16 |
+
width: '600px',
|
17 |
+
buttons: {
|
18 |
+
"Insert Shortcode": function() {
|
19 |
+
|
20 |
+
var spu_id = jQuery('#spu-posts').val();
|
21 |
+
var str = "";
|
22 |
+
|
23 |
+
str = '[spu popup="'+spu_id+'"';
|
24 |
+
var selected_text = ed.selection.getContent();
|
25 |
+
if (selected_text) {
|
26 |
+
|
27 |
+
str += "]" + selected_text + "[/spu]";
|
28 |
+
|
29 |
+
} else {
|
30 |
+
|
31 |
+
str += "]YOUR TEXT OR IMG HERE[/spu]";
|
32 |
+
|
33 |
+
}
|
34 |
+
|
35 |
+
|
36 |
+
var Editor = tinyMCE.get('content');
|
37 |
+
Editor.focus();
|
38 |
+
Editor.selection.setContent(str);
|
39 |
+
|
40 |
+
|
41 |
+
jQuery( this ).dialog( "close" );
|
42 |
+
},
|
43 |
+
Cancel: function() {
|
44 |
+
jQuery( this ).dialog( "close" );
|
45 |
+
}
|
46 |
+
}
|
47 |
+
}).dialog('open');
|
48 |
+
|
49 |
+
});
|
50 |
+
},
|
51 |
+
createControl : function(n, cm) {
|
52 |
+
return null;
|
53 |
+
},
|
54 |
+
getInfo : function() {
|
55 |
+
return {
|
56 |
+
longname : 'Popups Button',
|
57 |
+
author : 'Damian Logghe',
|
58 |
+
authorurl : 'https://timersys.com',
|
59 |
+
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example',
|
60 |
+
version : "0.1"
|
61 |
+
};
|
62 |
+
}
|
63 |
+
});
|
64 |
+
tinymce.PluginManager.add('spu', tinymce.plugins.SPU);
|
65 |
+
})( jQuery );
|
admin/class-social-popup-admin.php
CHANGED
@@ -1,952 +1,952 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Popups.
|
4 |
-
*
|
5 |
-
* @package SocialPopup_Admin
|
6 |
-
* @author Damian Logghe <info@timersys.com>
|
7 |
-
* @license GPL-2.0+
|
8 |
-
* @link https://timersys.com
|
9 |
-
* @copyright 2014 Timersys
|
10 |
-
*/
|
11 |
-
|
12 |
-
|
13 |
-
define( 'SPU_ADMIN_DIR' , plugin_dir_path(__FILE__) );
|
14 |
-
|
15 |
-
|
16 |
-
/**
|
17 |
-
* Admin Class of the plugin
|
18 |
-
*
|
19 |
-
* @package SocialPopup_Admin
|
20 |
-
* @author Damian Logghe <info@timersys.com>
|
21 |
-
*/
|
22 |
-
class SocialPopup_Admin {
|
23 |
-
|
24 |
-
/**
|
25 |
-
* Instance of this class.
|
26 |
-
*
|
27 |
-
* @since 1.0.0
|
28 |
-
*
|
29 |
-
* @var object
|
30 |
-
*/
|
31 |
-
protected static $instance = null;
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Slug of the plugin screen.
|
35 |
-
*
|
36 |
-
* @since 1.0.0
|
37 |
-
*
|
38 |
-
* @var string
|
39 |
-
*/
|
40 |
-
protected $plugin_screen_hook_suffix = null;
|
41 |
-
|
42 |
-
/**
|
43 |
-
* Plugins settings
|
44 |
-
* @var array
|
45 |
-
*/
|
46 |
-
protected $spu_settings = array();
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Premium version is enabled
|
50 |
-
*
|
51 |
-
* @since 1.1
|
52 |
-
*
|
53 |
-
* @var bool
|
54 |
-
*/
|
55 |
-
protected $premium = false;
|
56 |
-
|
57 |
-
/**
|
58 |
-
* Helper function
|
59 |
-
*
|
60 |
-
* @since 1.1
|
61 |
-
*
|
62 |
-
* @var bool
|
63 |
-
*/
|
64 |
-
protected $helper = '';
|
65 |
-
|
66 |
-
/**
|
67 |
-
* Initialize the plugin by loading admin scripts & styles and adding a
|
68 |
-
* settings page and menu.
|
69 |
-
*
|
70 |
-
* @since 1.0.0
|
71 |
-
*/
|
72 |
-
private function __construct() {
|
73 |
-
|
74 |
-
|
75 |
-
$plugin = SocialPopup::get_instance();
|
76 |
-
$this->plugin_slug = $plugin->get_plugin_slug();
|
77 |
-
|
78 |
-
// helper funcs
|
79 |
-
$this->helper = new Spu_Helper;
|
80 |
-
|
81 |
-
//settings name
|
82 |
-
$this->options_name = $this->plugin_slug .'_settings';
|
83 |
-
|
84 |
-
//load settings
|
85 |
-
$this->spu_settings = $plugin->get_settings();
|
86 |
-
|
87 |
-
//premium version ?
|
88 |
-
$this->premium = defined('SPUP_PLUGIN_HOOK');
|
89 |
-
|
90 |
-
// add settings page
|
91 |
-
add_action('admin_menu' , array( $this, 'add_settings_menu' ) );
|
92 |
-
|
93 |
-
//Add our metaboxes
|
94 |
-
add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
|
95 |
-
|
96 |
-
//Save metaboxes
|
97 |
-
add_action( 'save_post_spucpt', array( $this, 'save_meta_options' ), 20 );
|
98 |
-
|
99 |
-
// Load admin style sheet and JavaScript.
|
100 |
-
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) );
|
101 |
-
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
|
102 |
-
|
103 |
-
// Add an action link pointing to the options page.
|
104 |
-
add_filter( 'plugin_action_links_' . SPU_PLUGIN_HOOK, array( $this, 'add_action_links' ) );
|
105 |
-
|
106 |
-
//Filters for rules
|
107 |
-
add_filter('spu/get_post_types', array($this, 'get_post_types'), 1, 3);
|
108 |
-
add_filter('spu/get_taxonomies', array($this, 'get_taxonomies'), 1, 3);
|
109 |
-
|
110 |
-
//AJAX Actions
|
111 |
-
add_action('wp_ajax_spu/field_group/render_rules', array( $this->helper, 'ajax_render_rules' ) );
|
112 |
-
add_action('wp_ajax_spu/field_group/render_operator', array( $this->helper, 'ajax_render_operator' ) );
|
113 |
-
add_action('wp_ajax_spu_enable_ajax_notice_handler', array( $this, 'ajax_notice_handler' ) );
|
114 |
-
|
115 |
-
//Tinymce
|
116 |
-
add_filter( 'tiny_mce_before_init', array($this, 'tinymce_init'), 9999 );
|
117 |
-
add_action( 'admin_init', array( $this, 'editor_styles' ) );
|
118 |
-
add_action( 'init', array( $this, 'register_tiny_buttons' ) );
|
119 |
-
|
120 |
-
//Columns in cpt
|
121 |
-
add_filter( 'manage_edit-spucpt_columns' , array( $this, 'set_custom_cpt_columns'), 10, 2 );
|
122 |
-
add_action( 'manage_spucpt_posts_custom_column' , array( $this, 'custom_columns'), 10, 2 );
|
123 |
-
add_action( 'admin_init' , array( $this, 'toggle_on_popup') );
|
124 |
-
|
125 |
-
add_action( 'admin_init' , array( $this, 'extra_checks') );
|
126 |
-
|
127 |
-
$this->set_rules_fields();
|
128 |
-
}
|
129 |
-
|
130 |
-
/**
|
131 |
-
* Return an instance of this class.
|
132 |
-
*
|
133 |
-
* @since 1.0.0
|
134 |
-
*
|
135 |
-
* @return object A single instance of this class.
|
136 |
-
*/
|
137 |
-
public static function get_instance() {
|
138 |
-
|
139 |
-
|
140 |
-
// If the single instance hasn't been set, set it now.
|
141 |
-
if ( null == self::$instance ) {
|
142 |
-
self::$instance = new self;
|
143 |
-
}
|
144 |
-
|
145 |
-
return self::$instance;
|
146 |
-
}
|
147 |
-
|
148 |
-
|
149 |
-
/**
|
150 |
-
* Add menu for Settings page of the plugin
|
151 |
-
* @since 1.1
|
152 |
-
* @return void
|
153 |
-
*/
|
154 |
-
public function add_settings_menu() {
|
155 |
-
|
156 |
-
add_submenu_page('edit.php?post_type=spucpt', __( 'Settings', 'popups' ), __( 'Settings', 'popups' ), apply_filters( 'spu/settings_page/roles', 'manage_options'), 'spu_settings', array( $this, 'settings_page' ) );
|
157 |
-
|
158 |
-
}
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
/**
|
163 |
-
* Settings page of the plugin
|
164 |
-
* @since 1.1
|
165 |
-
* @return void
|
166 |
-
*/
|
167 |
-
public function settings_page() {
|
168 |
-
|
169 |
-
$defaults = apply_filters( 'spu/settings_page/defaults_opts', array(
|
170 |
-
'aff_link' => '',
|
171 |
-
'ajax_mode' => '0',
|
172 |
-
'shortcodes_style' => '',
|
173 |
-
'facebook' => '',
|
174 |
-
'google' => '',
|
175 |
-
'twitter' => '',
|
176 |
-
'spu_license_key' => '',
|
177 |
-
'ua_code' => '',
|
178 |
-
'mc_api' => '',
|
179 |
-
));
|
180 |
-
$opts = apply_filters( 'spu/settings_page/opts', get_option( 'spu_settings', $defaults ) );
|
181 |
-
|
182 |
-
|
183 |
-
if ( isset( $_POST['spu_nonce'] ) && wp_verify_nonce( $_POST['spu_nonce'], 'spu_save_settings' ) ) {
|
184 |
-
$opts = esc_sql( @$_POST['spu_settings'] );
|
185 |
-
update_option( 'spu_settings' , $opts );
|
186 |
-
}
|
187 |
-
|
188 |
-
|
189 |
-
include 'views/settings-page.php';
|
190 |
-
|
191 |
-
}
|
192 |
-
|
193 |
-
/**
|
194 |
-
* Register the metaboxes for our cpt and remove others
|
195 |
-
*/
|
196 |
-
public function add_meta_boxes() {
|
197 |
-
|
198 |
-
|
199 |
-
add_meta_box(
|
200 |
-
'spu-video',
|
201 |
-
'<i class="spu-icon-info spu-icon"></i>' . __( 'Help video', 'popups' ),
|
202 |
-
array( $this, 'metabox_video' ),
|
203 |
-
'spucpt',
|
204 |
-
'normal',
|
205 |
-
'core'
|
206 |
-
);
|
207 |
-
|
208 |
-
add_meta_box(
|
209 |
-
'spu-appearance',
|
210 |
-
'<i class="spu-icon-magic spu-icon"></i>' . __( 'PopUp Appearance', 'popups' ),
|
211 |
-
array( $this, 'popup_appearance' ),
|
212 |
-
'spucpt',
|
213 |
-
'normal',
|
214 |
-
'core'
|
215 |
-
);
|
216 |
-
|
217 |
-
add_meta_box(
|
218 |
-
'spu-rules',
|
219 |
-
'<i class="spu-icon-eye spu-icon"></i>' . __( 'PopUp Display Rules', 'popups' ),
|
220 |
-
array( $this, 'popup_rules' ),
|
221 |
-
'spucpt',
|
222 |
-
'normal',
|
223 |
-
'core'
|
224 |
-
);
|
225 |
-
|
226 |
-
add_meta_box(
|
227 |
-
'spu-options',
|
228 |
-
'<i class="spu-icon-gears spu-icon"></i>' . __( 'Display Options', 'popups' ),
|
229 |
-
array( $this, 'popup_options' ),
|
230 |
-
'spucpt',
|
231 |
-
'normal',
|
232 |
-
'core'
|
233 |
-
);
|
234 |
-
if( !$this->premium ) {
|
235 |
-
|
236 |
-
add_meta_box(
|
237 |
-
'spu-premium',
|
238 |
-
__( 'Popups Premium', 'popups' ),
|
239 |
-
array( $this, 'popup_premium' ),
|
240 |
-
'spucpt',
|
241 |
-
'normal',
|
242 |
-
'core'
|
243 |
-
);
|
244 |
-
|
245 |
-
}
|
246 |
-
add_meta_box(
|
247 |
-
'spu-help',
|
248 |
-
'<i class="spu-icon-info spu-icon"></i>' . __( 'PopUp Shortcodes', 'popups' ),
|
249 |
-
array( $this, 'popup_help' ),
|
250 |
-
'spucpt',
|
251 |
-
'normal',
|
252 |
-
'core'
|
253 |
-
);
|
254 |
-
|
255 |
-
add_meta_box(
|
256 |
-
'spu-support',
|
257 |
-
__( 'Need support?', 'popups' ),
|
258 |
-
array( $this, 'metabox_support' ),
|
259 |
-
'spucpt',
|
260 |
-
'side'
|
261 |
-
);
|
262 |
-
|
263 |
-
add_meta_box(
|
264 |
-
'spu-donate',
|
265 |
-
__( 'Donate & support', 'popups' ),
|
266 |
-
array( $this, 'metabox_donate' ),
|
267 |
-
'spucpt',
|
268 |
-
'side'
|
269 |
-
);
|
270 |
-
|
271 |
-
}
|
272 |
-
|
273 |
-
/**
|
274 |
-
* Include the metabox view for popup premium
|
275 |
-
* @param object $post spucpt post object
|
276 |
-
* @param array $metabox full metabox items array
|
277 |
-
* @since 1.1
|
278 |
-
*/
|
279 |
-
public function popup_premium( $post, $metabox ) {
|
280 |
-
|
281 |
-
include 'views/metaboxes/metabox-premium.php';
|
282 |
-
}
|
283 |
-
|
284 |
-
/**
|
285 |
-
* Include the metabox view for popup help
|
286 |
-
* @param object $post spucpt post object
|
287 |
-
* @param array $metabox full metabox items array
|
288 |
-
* @since 1.1
|
289 |
-
*/
|
290 |
-
public function popup_help( $post, $metabox ) {
|
291 |
-
|
292 |
-
include 'views/metaboxes/metabox-help.php';
|
293 |
-
}
|
294 |
-
/**
|
295 |
-
* Include the metabox view for popup rules
|
296 |
-
* @param object $post spucpt post object
|
297 |
-
* @param array $metabox full metabox items array
|
298 |
-
* @since 1.1
|
299 |
-
*/
|
300 |
-
public function popup_rules( $post, $metabox ) {
|
301 |
-
|
302 |
-
$groups = apply_filters('spu/metaboxes/get_box_rules', $this->helper->get_box_rules( $post->ID ), $post->ID);
|
303 |
-
|
304 |
-
include 'views/metaboxes/metabox-rules.php';
|
305 |
-
}
|
306 |
-
/**
|
307 |
-
* Include the metabox view for popup options
|
308 |
-
* @param object $post spucpt post object
|
309 |
-
* @param array $metabox full metabox items array
|
310 |
-
* @since 1.1
|
311 |
-
*/
|
312 |
-
public function popup_options( $post, $metabox ) {
|
313 |
-
|
314 |
-
$opts = apply_filters('spu/metaboxes/get_box_options', $this->helper->get_box_options( $post->ID ), $post->ID );
|
315 |
-
|
316 |
-
include 'views/metaboxes/metabox-options.php';
|
317 |
-
}
|
318 |
-
/**
|
319 |
-
* Include the metabox view for popup appearance
|
320 |
-
* @param object $post spucpt post object
|
321 |
-
* @param array $metabox full metabox items array
|
322 |
-
* @since 1.1
|
323 |
-
*/
|
324 |
-
public function popup_appearance( $post, $metabox ) {
|
325 |
-
|
326 |
-
$opts = apply_filters('spu/metaboxes/get_box_options', $this->helper->get_box_options( $post->ID ), $post->ID );
|
327 |
-
|
328 |
-
include 'views/metaboxes/metabox-appearance.php';
|
329 |
-
}
|
330 |
-
|
331 |
-
/**
|
332 |
-
* Include the metabox view for donate box
|
333 |
-
* @param object $post spucpt post object
|
334 |
-
* @param array $metabox full metabox items array
|
335 |
-
* @since 1.1
|
336 |
-
*/
|
337 |
-
public function metabox_donate( $post, $metabox ) {
|
338 |
-
|
339 |
-
$donate_metabox = apply_filters( 'spu/metaboxes/donate_metabox', dirname(__FILE__) . '/views/metaboxes/metabox-donate.php' );
|
340 |
-
|
341 |
-
include $donate_metabox;
|
342 |
-
}
|
343 |
-
|
344 |
-
/**
|
345 |
-
* Include the metabox view for help video
|
346 |
-
* @param object $post spucpt post object
|
347 |
-
* @param array $metabox full metabox items array
|
348 |
-
* @since 1.1
|
349 |
-
*/
|
350 |
-
public function metabox_video( $post, $metabox ) {
|
351 |
-
|
352 |
-
$video_metabox = apply_filters( 'spu/metaboxes/video_metabox', dirname(__FILE__) . '/views/metaboxes/metabox-video.php' );
|
353 |
-
|
354 |
-
include $video_metabox;
|
355 |
-
}
|
356 |
-
/**
|
357 |
-
* Include the metabox view for support box
|
358 |
-
* @param object $post spucpt post object
|
359 |
-
* @param array $metabox full metabox items array
|
360 |
-
* @since 1.1
|
361 |
-
*/
|
362 |
-
public function metabox_support( $post, $metabox ) {
|
363 |
-
|
364 |
-
$support_metabox = apply_filters( 'spu/metaboxes/support_metabox', dirname(__FILE__) . '/views/metaboxes/metabox-support.php' );
|
365 |
-
|
366 |
-
include $support_metabox;
|
367 |
-
}
|
368 |
-
|
369 |
-
|
370 |
-
/**
|
371 |
-
* Saves popup options and rules
|
372 |
-
*
|
373 |
-
* @param $post_id
|
374 |
-
*
|
375 |
-
* @return mixed
|
376 |
-
*/
|
377 |
-
public function save_meta_options( $post_id ) {
|
378 |
-
static $spu_save = 0;
|
379 |
-
|
380 |
-
// For some reason sometimes this hook run twice, until I can find the reason and reproduce error
|
381 |
-
// let's use a static var to prevent this
|
382 |
-
if( $spu_save > 0 )
|
383 |
-
return $post_id;
|
384 |
-
|
385 |
-
// Verify that the nonce is set and valid.
|
386 |
-
if ( !isset( $_POST['spu_options_nonce'] ) || ! wp_verify_nonce( $_POST['spu_options_nonce'], 'spu_options' ) ) {
|
387 |
-
return $post_id;
|
388 |
-
}
|
389 |
-
// If this is an autosave, our form has not been submitted, so we don't want to do anything.
|
390 |
-
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
|
391 |
-
return $post_id;
|
392 |
-
}
|
393 |
-
// same for ajax
|
394 |
-
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
395 |
-
return $post_id;
|
396 |
-
}
|
397 |
-
// same for cron
|
398 |
-
if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
|
399 |
-
return $post_id;
|
400 |
-
}
|
401 |
-
// same for posts revisions
|
402 |
-
if ( wp_is_post_revision( $post_id ) ) {
|
403 |
-
return $post_id;
|
404 |
-
}
|
405 |
-
|
406 |
-
// can user edit this post?
|
407 |
-
if ( ! current_user_can( 'edit_post', $post_id ) ) {
|
408 |
-
return $post_id;
|
409 |
-
}
|
410 |
-
|
411 |
-
$opts = $_POST['spu'];
|
412 |
-
unset( $_POST['spu'] );
|
413 |
-
|
414 |
-
$post = get_post($post_id);
|
415 |
-
|
416 |
-
// sanitize settings
|
417 |
-
$opts['css']['bgopacity'] = sanitize_text_field( $opts['css']['bgopacity'] );
|
418 |
-
$opts['css']['overlay_color'] = sanitize_text_field( $opts['css']['overlay_color'] );
|
419 |
-
$opts['css']['background_color'] = sanitize_text_field( $opts['css']['background_color'] );
|
420 |
-
$opts['css']['background_opacity'] = sanitize_text_field( $opts['css']['background_opacity'] );
|
421 |
-
$opts['css']['width'] = sanitize_text_field( $opts['css']['width'] );
|
422 |
-
$opts['css']['padding'] = absint( sanitize_text_field( $opts['css']['padding'] ) );
|
423 |
-
$opts['css']['color'] = sanitize_text_field( $opts['css']['color'] );
|
424 |
-
$opts['css']['shadow_color'] = sanitize_text_field( $opts['css']['shadow_color'] );
|
425 |
-
$opts['css']['shadow_type'] = sanitize_text_field( $opts['css']['shadow_type'] );
|
426 |
-
$opts['css']['shadow_x_offset'] = absint( sanitize_text_field( $opts['css']['shadow_x_offset'] ) );
|
427 |
-
$opts['css']['shadow_y_offset'] = absint( sanitize_text_field( $opts['css']['shadow_y_offset'] ) );
|
428 |
-
$opts['css']['shadow_blur'] = absint( sanitize_text_field( $opts['css']['shadow_blur'] ) );
|
429 |
-
$opts['css']['shadow_spread'] = absint( sanitize_text_field( $opts['css']['shadow_spread'] ) );
|
430 |
-
$opts['css']['border_color'] = sanitize_text_field( $opts['css']['border_color'] );
|
431 |
-
$opts['css']['border_width'] = absint( sanitize_text_field( $opts['css']['border_width'] ) );
|
432 |
-
$opts['css']['border_radius'] = absint( sanitize_text_field( $opts['css']['border_radius'] ) );
|
433 |
-
$opts['css']['border_type'] = sanitize_text_field( $opts['css']['border_type'] );
|
434 |
-
$opts['css']['close_color'] = sanitize_text_field( $opts['css']['close_color'] );
|
435 |
-
$opts['css']['close_hover_color'] = sanitize_text_field( $opts['css']['close_hover_color'] );
|
436 |
-
$opts['css']['close_size'] = sanitize_text_field( $opts['css']['close_size'] );
|
437 |
-
$opts['css']['close_position'] = sanitize_text_field( $opts['css']['close_position'] );
|
438 |
-
$opts['css']['close_shadow_color'] = sanitize_text_field( $opts['css']['close_shadow_color'] );
|
439 |
-
$opts['css']['position'] = sanitize_text_field( $opts['css']['position'] );
|
440 |
-
|
441 |
-
$opts['name-convert-cookie'] = sanitize_text_field( $opts['name-convert-cookie'] ) ;
|
442 |
-
$opts['name-close-cookie'] = sanitize_text_field( $opts['name-close-cookie'] );
|
443 |
-
$opts['duration-convert-cookie'] = absint( sanitize_text_field( $opts['duration-convert-cookie'] ) );
|
444 |
-
$opts['duration-close-cookie'] = absint( sanitize_text_field( $opts['duration-close-cookie'] ) );
|
445 |
-
// add popup ID to make the unique
|
446 |
-
$opts['name-convert-cookie'] = $opts['name-convert-cookie'] == 'spu_conversion' ? 'spu_conversion_'.$post_id : $opts['name-convert-cookie'] ;
|
447 |
-
$opts['name-close-cookie'] = $opts['name-close-cookie'] == 'spu_closing' ? 'spu_closing_'.$post_id : $opts['name-close-cookie'];
|
448 |
-
|
449 |
-
$opts['trigger_number'] = absint( sanitize_text_field( $opts['trigger_number'] ) );
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
// Check for social shortcodes and update post meta ( we check later if we need to enqueue any social js)
|
454 |
-
$total_shortcodes =0;
|
455 |
-
if( has_shortcode( $post->post_content, 'spu-facebook' ) || has_shortcode( $post->post_content, 'spu-facebook-page' ) ){
|
456 |
-
$total_shortcodes++;
|
457 |
-
update_post_meta( $post_id, 'spu_fb', true );
|
458 |
-
} else {
|
459 |
-
delete_post_meta( $post_id, 'spu_fb');
|
460 |
-
}
|
461 |
-
if( has_shortcode( $post->post_content, 'spu-twitter' ) ){
|
462 |
-
$total_shortcodes++;
|
463 |
-
update_post_meta( $post_id, 'spu_tw', true );
|
464 |
-
} else {
|
465 |
-
delete_post_meta( $post_id, 'spu_tw');
|
466 |
-
}
|
467 |
-
if( has_shortcode( $post->post_content, 'spu-google' ) ){
|
468 |
-
$total_shortcodes++;
|
469 |
-
$opts['google'] = true;
|
470 |
-
update_post_meta( $post_id, 'spu_google', true );
|
471 |
-
} else {
|
472 |
-
delete_post_meta( $post_id, 'spu_google');
|
473 |
-
}
|
474 |
-
// save total shortcodes (for auto styling)
|
475 |
-
if( $total_shortcodes ){
|
476 |
-
update_post_meta( $post_id, 'spu_social', $total_shortcodes );
|
477 |
-
} else {
|
478 |
-
delete_post_meta( $post_id, 'spu_social' );
|
479 |
-
}
|
480 |
-
if( has_shortcode( $post->post_content, 'gravityform' ) ) {
|
481 |
-
preg_match('/\[gravityform id="([0-9]+)".*\]/i', $post->post_content, $matches);
|
482 |
-
if( !empty( $matches[1] ) )
|
483 |
-
update_post_meta( $post_id, 'spu_gravity', $matches[1]);
|
484 |
-
} else {
|
485 |
-
delete_post_meta( $post_id, 'spu_gravity' );
|
486 |
-
}
|
487 |
-
|
488 |
-
// save box settings
|
489 |
-
update_post_meta( $post_id, 'spu_options', apply_filters( 'spu/metaboxes/sanitized_options', $opts ) );
|
490 |
-
|
491 |
-
// Start with rules
|
492 |
-
if( isset($_POST['spu_rules']) && is_array($_POST['spu_rules']) )
|
493 |
-
{
|
494 |
-
// clean array keys
|
495 |
-
$groups = array_values( $_POST['spu_rules'] );
|
496 |
-
foreach($groups as $group_id => $group )
|
497 |
-
{
|
498 |
-
if( is_array($group) )
|
499 |
-
{
|
500 |
-
// clean array keys
|
501 |
-
$groups_a[] = array_values( $group );
|
502 |
-
|
503 |
-
}
|
504 |
-
}
|
505 |
-
|
506 |
-
update_post_meta( $post_id, 'spu_rules', apply_filters( 'spu/metaboxes/sanitized_rules', $groups_a ) );
|
507 |
-
unset( $_POST['spu_rules'] );
|
508 |
-
}
|
509 |
-
$spu_save++;
|
510 |
-
}
|
511 |
-
/**
|
512 |
-
* Register and enqueue admin-specific style sheet.
|
513 |
-
*
|
514 |
-
* @TODO:
|
515 |
-
*
|
516 |
-
* - Rename "Plugin_Name" to the name your plugin
|
517 |
-
*
|
518 |
-
* @since 1.0.0
|
519 |
-
*
|
520 |
-
* @return null Return early if no settings page is registered.
|
521 |
-
*/
|
522 |
-
public function enqueue_admin_styles() {
|
523 |
-
|
524 |
-
global $pagenow;
|
525 |
-
|
526 |
-
$post_type = isset($_GET['post_type']) ? $_GET['post_type'] : get_post_type();
|
527 |
-
|
528 |
-
if ( $post_type !== 'spucpt' || !in_array( $pagenow, array( 'post-new.php', 'post.php', 'edit.php' ) ) ) {
|
529 |
-
return;
|
530 |
-
}
|
531 |
-
wp_enqueue_style( 'spu-admin-css', plugins_url( 'assets/css/admin.css', __FILE__ ) , '', SocialPopup::VERSION );
|
532 |
-
wp_enqueue_style( 'wp-color-picker' );
|
533 |
-
|
534 |
-
}
|
535 |
-
|
536 |
-
/**
|
537 |
-
* Register and enqueue admin-specific JavaScript.
|
538 |
-
*
|
539 |
-
* @TODO:
|
540 |
-
*
|
541 |
-
* - Rename "Plugin_Name" to the name your plugin
|
542 |
-
*
|
543 |
-
* @since 1.0.0
|
544 |
-
*
|
545 |
-
* @return null Return early if no settings page is registered.
|
546 |
-
*/
|
547 |
-
public function enqueue_admin_scripts() {
|
548 |
-
global $pagenow, $post;
|
549 |
-
|
550 |
-
if ( get_post_type() !== 'spucpt' || !in_array( $pagenow, array( 'post-new.php', 'edit.php', 'post.php' ) ) ) {
|
551 |
-
return;
|
552 |
-
}
|
553 |
-
|
554 |
-
$box_id = isset( $post->ID ) ? $post->ID : '';
|
555 |
-
|
556 |
-
wp_enqueue_script( 'wp-color-picker' );
|
557 |
-
wp_enqueue_script( 'ace_code_highlighter_js', plugins_url( 'assets/js/ace.js', __FILE__ ) , '', '1.0.0', true );
|
558 |
-
wp_enqueue_script( 'ace_mode_js', plugins_url( 'assets/js/mode-css.js', __FILE__ ) , array( 'ace_code_highlighter_js' ), '1.0.0', true );
|
559 |
-
wp_enqueue_script( 'worker_css_js', plugins_url( 'assets/js/worker-css.js', __FILE__ ) , array( 'jquery', 'ace_code_highlighter_js' ), '1.0.0', true );
|
560 |
-
wp_enqueue_script( 'spu-admin-js', plugins_url( 'assets/js/admin.js', __FILE__ ) , '', SocialPopup::VERSION );
|
561 |
-
|
562 |
-
wp_localize_script( 'spu-admin-js', 'spu_js',
|
563 |
-
array(
|
564 |
-
'admin_url' => admin_url( ),
|
565 |
-
'nonce' => wp_create_nonce( 'spu_nonce' ),
|
566 |
-
'l10n' => array (
|
567 |
-
'or' => '<span>'.__('OR', 'popups' ).'</span>'
|
568 |
-
),
|
569 |
-
'opts' => $this->helper->get_box_options($box_id)
|
570 |
-
)
|
571 |
-
);
|
572 |
-
|
573 |
-
wp_localize_script( 'spup-admin-js' , 'spup_js' ,
|
574 |
-
array(
|
575 |
-
'opts' => $this->helper->get_box_options($box_id),
|
576 |
-
'spinner' => SPU_PLUGIN_URL . 'public/assets/img/ajax-loader.gif'
|
577 |
-
|
578 |
-
)
|
579 |
-
);
|
580 |
-
}
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
/**
|
586 |
-
* Add settings action link to the plugins page.
|
587 |
-
*
|
588 |
-
* @since 1.0.0
|
589 |
-
*/
|
590 |
-
public function add_action_links( $links ) {
|
591 |
-
|
592 |
-
return array_merge(
|
593 |
-
array(
|
594 |
-
'settings' => '<a href="' . admin_url( 'edit.php?post_type=spucpt' ) . '">' . __( 'Add a Popup', 'popups' ) . '</a>'
|
595 |
-
),
|
596 |
-
$links
|
597 |
-
);
|
598 |
-
|
599 |
-
}
|
600 |
-
|
601 |
-
/**
|
602 |
-
* Return available posts types. Used in filters
|
603 |
-
* @param array $post_types custom post types
|
604 |
-
* @param array $exclude cpt to explude
|
605 |
-
* @param array $include cpts to include
|
606 |
-
* @return array Resulting cpts
|
607 |
-
*/
|
608 |
-
function get_post_types( $post_types, $exclude = array(), $include = array() ) {
|
609 |
-
|
610 |
-
// get all custom post types
|
611 |
-
$post_types = array_merge($post_types, get_post_types());
|
612 |
-
|
613 |
-
|
614 |
-
// core include / exclude
|
615 |
-
$spu_includes = array_merge( array(), $include );
|
616 |
-
$spu_excludes = array_merge( array( 'spucpt', 'acf', 'revision', 'nav_menu_item','custom_css', 'customize_changeset', 'oembed_cache', 'wpvqgr_quiz_trivia', 'wpvqgr_quiz_perso', 'wpvqgr_user', 'popup', 'popup_theme', 'page_rating', 'sa_slider', 'faq', 'opanda-item', 'amn_smtp' ), $exclude );
|
617 |
-
|
618 |
-
foreach( $spu_includes as $p )
|
619 |
-
{
|
620 |
-
if( post_type_exists($p) )
|
621 |
-
{
|
622 |
-
$post_types[ $p ] = $p;
|
623 |
-
}
|
624 |
-
}
|
625 |
-
|
626 |
-
|
627 |
-
// exclude
|
628 |
-
foreach( $spu_excludes as $p )
|
629 |
-
{
|
630 |
-
unset( $post_types[ $p ] );
|
631 |
-
}
|
632 |
-
|
633 |
-
|
634 |
-
return $post_types;
|
635 |
-
|
636 |
-
}
|
637 |
-
|
638 |
-
/**
|
639 |
-
* Get taxonomies. Used in filters rules
|
640 |
-
*
|
641 |
-
* @param array $choices [description]
|
642 |
-
* @param boolean $simple_value [description]
|
643 |
-
*
|
644 |
-
* @return array [type] [description]
|
645 |
-
*/
|
646 |
-
function get_taxonomies( $choices, $simple_value = false ) {
|
647 |
-
|
648 |
-
// vars
|
649 |
-
$post_types = get_post_types();
|
650 |
-
|
651 |
-
|
652 |
-
if($post_types)
|
653 |
-
{
|
654 |
-
foreach($post_types as $post_type)
|
655 |
-
{
|
656 |
-
$post_type_object = get_post_type_object($post_type);
|
657 |
-
$taxonomies = get_object_taxonomies($post_type);
|
658 |
-
if($taxonomies)
|
659 |
-
{
|
660 |
-
foreach($taxonomies as $taxonomy)
|
661 |
-
{
|
662 |
-
if( 'nav_menu' == $taxonomy ) continue;
|
663 |
-
$terms = get_terms($taxonomy, array('hide_empty' => true));
|
664 |
-
if($terms)
|
665 |
-
{
|
666 |
-
foreach($terms as $term)
|
667 |
-
{
|
668 |
-
$value = $taxonomy . ':' . $term->term_id;
|
669 |
-
|
670 |
-
if( $simple_value )
|
671 |
-
{
|
672 |
-
$value = $term->term_id;
|
673 |
-
}
|
674 |
-
|
675 |
-
$choices[$post_type_object->label . ': ' . $taxonomy][$value] = $term->name;
|
676 |
-
}
|
677 |
-
}
|
678 |
-
}
|
679 |
-
}
|
680 |
-
}
|
681 |
-
}
|
682 |
-
|
683 |
-
return $choices;
|
684 |
-
}
|
685 |
-
|
686 |
-
/**
|
687 |
-
* Load tinymce style on load
|
688 |
-
* @param [type] $args [description]
|
689 |
-
* @return [type] [description]
|
690 |
-
*/
|
691 |
-
public function tinymce_init($args) {
|
692 |
-
|
693 |
-
if( get_post_type() !== 'spucpt') {
|
694 |
-
return $args;
|
695 |
-
}
|
696 |
-
$func = '';
|
697 |
-
// dirty hax, WPML replace our function so let's try to get theirs and add to ours
|
698 |
-
// same with follow up emails by woocommerce
|
699 |
-
if( array_key_exists('setup', $args) && strpos($args['setup'], 'function(ed)') !== false) {
|
700 |
-
if( $pos = strpos($args['setup'], 'function(ed){') !== false ) {
|
701 |
-
if( $pos < 15 ){
|
702 |
-
$func .= rtrim(substr_replace($args['setup'],'',$pos,strlen('function(ed){')),'}');
|
703 |
-
}
|
704 |
-
}
|
705 |
-
if( $pos = strpos($args['setup'], 'function(ed) {') !== false ) {
|
706 |
-
if( $pos < 15 ){
|
707 |
-
$func .= rtrim(substr_replace($args['setup'],'',$pos,strlen('function(ed) {')),'}');
|
708 |
-
}
|
709 |
-
}
|
710 |
-
|
711 |
-
}
|
712 |
-
|
713 |
-
$args['setup'] = 'function(ed) {
|
714 |
-
if(typeof SPU_ADMIN === \'undefined\') {
|
715 |
-
return;
|
716 |
-
}
|
717 |
-
ed.onInit.add(SPU_ADMIN.onTinyMceInit);
|
718 |
-
if(typeof SPUP_ADMIN === \'undefined\') {
|
719 |
-
return;
|
720 |
-
}
|
721 |
-
ed.onInit.add(SPUP_ADMIN.onTinyMceInit);
|
722 |
-
'.$func.'
|
723 |
-
}';
|
724 |
-
|
725 |
-
return $args;
|
726 |
-
}
|
727 |
-
|
728 |
-
/**
|
729 |
-
* Add the stylesheet for optin in editor
|
730 |
-
* @since 1.2.3.6
|
731 |
-
*/
|
732 |
-
function editor_styles() {
|
733 |
-
global $pagenow;
|
734 |
-
$post_type = isset($_GET['post']) ? get_post_type($_GET['post']) : '';
|
735 |
-
|
736 |
-
if( 'spucpt' == $post_type || get_post_type() == 'spucpt' || (isset( $_GET['post_type']) && $_GET['post_type'] == 'spucpt') ) {
|
737 |
-
add_editor_style( SPU_PLUGIN_URL . 'admin/assets/css/editor-style.css' );
|
738 |
-
}
|
739 |
-
// Add html for shortcodes popup
|
740 |
-
if( 'post.php' == $pagenow || 'post-new.php' == $pagenow ) {
|
741 |
-
wp_enqueue_script( 'jquery-ui-dialog' );
|
742 |
-
wp_enqueue_style( 'wp-jquery-ui-dialog' );
|
743 |
-
add_action( 'in_admin_footer', array($this, 'add_editor' ),100 );
|
744 |
-
|
745 |
-
}
|
746 |
-
}
|
747 |
-
|
748 |
-
function get_rules_choices() {
|
749 |
-
$choices = array(
|
750 |
-
__("User", 'popups' ) => array(
|
751 |
-
'user_type' => __("User role", 'popups' ),
|
752 |
-
'logged_user' => __("User is logged", 'popups' ),
|
753 |
-
'left_comment' => __("User never left a comment", 'popups' ),
|
754 |
-
'search_engine' => __("User came via a search engine", 'popups' ),
|
755 |
-
'same_site' => __("User did not arrive via another page on your site", 'popups' ),
|
756 |
-
),
|
757 |
-
__("Post", 'popups' ) => array(
|
758 |
-
'post' => __("Post", 'popups' ),
|
759 |
-
'post_id' => __("Post ID", 'popups' ),
|
760 |
-
'post_type' => __("Post Type", 'popups' ),
|
761 |
-
'post_category' => __("Post Category", 'popups' ),
|
762 |
-
'post_format' => __("Post Format", 'popups' ),
|
763 |
-
'post_status' => __("Post Status", 'popups' ),
|
764 |
-
'taxonomy' => __("Post Taxonomy", 'popups' ),
|
765 |
-
),
|
766 |
-
__("Page", 'popups' ) => array(
|
767 |
-
'page' => __("Page", 'popups' ),
|
768 |
-
'page_type' => __("Page Type", 'popups' ),
|
769 |
-
'page_parent' => __("Page Parent", 'popups' ),
|
770 |
-
'page_template' => __("Page Template", 'popups' ),
|
771 |
-
),
|
772 |
-
__("Other", 'popups' ) => array(
|
773 |
-
'referrer' => __("Referrer", 'popups' ),
|
774 |
-
'query_string' => __("Query String", 'popups' ),
|
775 |
-
'keyword_url' => __("Url contains keyword", 'popups' ),
|
776 |
-
'custom_url' => __("Custom Url", 'popups' ),
|
777 |
-
'mobiles' => __("Mobile Phone", 'popups' ),
|
778 |
-
'tablets' => __("Tablet", 'popups' ),
|
779 |
-
'desktop' => __("Dekstop", 'popups' ),
|
780 |
-
'crawlers' => __("Bots/Crawlers", 'popups' ),
|
781 |
-
'browser' => __("Browser", 'popups' ),
|
782 |
-
)
|
783 |
-
);
|
784 |
-
// allow custom rules rules
|
785 |
-
return apply_filters( 'spu/metaboxes/rule_types', $choices );
|
786 |
-
}
|
787 |
-
|
788 |
-
/**
|
789 |
-
* Hook each rule to a field to print
|
790 |
-
*/
|
791 |
-
private function set_rules_fields() {
|
792 |
-
|
793 |
-
// User
|
794 |
-
add_action('spu/rules/print_user_type_field', array('Spu_Helper', 'print_select'), 10, 2);
|
795 |
-
add_action('spu/rules/print_logged_user_field', array('Spu_Helper', 'print_select'), 10, 2);
|
796 |
-
add_action('spu/rules/print_left_comment_field', array('Spu_Helper', 'print_select'), 10, 2);
|
797 |
-
add_action('spu/rules/print_search_engine_field', array('Spu_Helper', 'print_select'), 10, 2);
|
798 |
-
add_action('spu/rules/print_same_site_field', array('Spu_Helper', 'print_select'), 10, 2);
|
799 |
-
|
800 |
-
// Post
|
801 |
-
add_action('spu/rules/print_post_type_field', array('Spu_Helper', 'print_select'), 10, 2);
|
802 |
-
add_action('spu/rules/print_post_id_field', array('Spu_Helper', 'print_textfield'), 10, 1);
|
803 |
-
add_action('spu/rules/print_post_field', array('Spu_Helper', 'print_select'), 10, 2);
|
804 |
-
add_action('spu/rules/print_post_category_field', array('Spu_Helper', 'print_select'), 10, 2);
|
805 |
-
add_action('spu/rules/print_post_format_field', array('Spu_Helper', 'print_select'), 10, 2);
|
806 |
-
add_action('spu/rules/print_post_status_field', array('Spu_Helper', 'print_select'), 10, 2);
|
807 |
-
add_action('spu/rules/print_taxonomy_field', array('Spu_Helper', 'print_select'), 10, 2);
|
808 |
-
|
809 |
-
// Page
|
810 |
-
add_action('spu/rules/print_page_field', array('Spu_Helper', 'print_select'), 10, 2);
|
811 |
-
add_action('spu/rules/print_page_type_field', array('Spu_Helper', 'print_select'), 10, 2);
|
812 |
-
add_action('spu/rules/print_page_parent_field', array('Spu_Helper', 'print_select'), 10, 2);
|
813 |
-
add_action('spu/rules/print_page_template_field', array('Spu_Helper', 'print_select'), 10, 2);
|
814 |
-
|
815 |
-
//Other
|
816 |
-
add_action('spu/rules/print_mobiles_field', array('Spu_Helper', 'print_select'), 10, 2);
|
817 |
-
add_action('spu/rules/print_desktop_field', array('Spu_Helper', 'print_select'), 10, 2);
|
818 |
-
add_action('spu/rules/print_tablets_field', array('Spu_Helper', 'print_select'), 10, 2);
|
819 |
-
add_action('spu/rules/print_crawlers_field', array('Spu_Helper', 'print_select'), 10, 2);
|
820 |
-
add_action('spu/rules/print_referrer_field', array('Spu_Helper', 'print_textfield'), 10, 1);
|
821 |
-
add_action('spu/rules/print_query_string_field', array('Spu_Helper', 'print_textfield'), 10, 1);
|
822 |
-
add_action('spu/rules/print_keyword_url_field', array('Spu_Helper', 'print_textfield'), 10, 1);
|
823 |
-
add_action('spu/rules/print_custom_url_field', array('Spu_Helper', 'print_textfield'), 10, 1);
|
824 |
-
add_action('spu/rules/print_browser_field', array('Spu_Helper', 'print_textfield'), 10, 1);
|
825 |
-
}
|
826 |
-
|
827 |
-
/**
|
828 |
-
* Add custom columns to spu cpt
|
829 |
-
*
|
830 |
-
* @param [type] $columns [description]
|
831 |
-
*
|
832 |
-
* @since 1.3.3
|
833 |
-
* @return array|int
|
834 |
-
*/
|
835 |
-
public function set_custom_cpt_columns( $columns ){
|
836 |
-
|
837 |
-
unset( $columns['date'] );
|
838 |
-
$spu_switch = array( 'spu_switch' => __( 'On / Off', 'popups' ) );
|
839 |
-
$columns = array_slice($columns, 0, 1, true) + $spu_switch + array_slice($columns, 1, count( $columns ) - 1, true) ;
|
840 |
-
$columns['spu_id'] = __( 'ID', 'popups' );
|
841 |
-
$columns['spu_trigger_class'] = __( 'Trigger class', 'popups' );
|
842 |
-
|
843 |
-
return $columns;
|
844 |
-
}
|
845 |
-
/**
|
846 |
-
* Add callbacks for custom colums
|
847 |
-
* @param array $column [description]
|
848 |
-
* @param int $post_id [description]
|
849 |
-
* @return echo html
|
850 |
-
* @since 1.3.3
|
851 |
-
*/
|
852 |
-
function custom_columns( $column, $post_id ) {
|
853 |
-
global $wpdb;
|
854 |
-
|
855 |
-
switch ( $column ) {
|
856 |
-
case 'spu_id' :
|
857 |
-
echo '#spu-'.$post_id;
|
858 |
-
break;
|
859 |
-
case 'spu_switch' :
|
860 |
-
echo '<a href="'. wp_nonce_url( admin_url('edit.php?post_type=spucpt&post='. $post_id . '&spu_action=spu_toggle_on'), 'spu_toggle_on', 'spu_nonce') .'"><i class="spu-icon spu-icon-';
|
861 |
-
echo get_post_status( $post_id ) == 'publish' ? 'toggle-on' : 'toggle-off';
|
862 |
-
echo '"></i></a>';
|
863 |
-
break;
|
864 |
-
case 'spu_trigger_class':
|
865 |
-
echo '.spu-open-' . $post_id;
|
866 |
-
break;
|
867 |
-
}
|
868 |
-
}
|
869 |
-
|
870 |
-
/**
|
871 |
-
* Catch the toggle on/off action and change post status
|
872 |
-
* Redirect to clear url once is completed
|
873 |
-
*/
|
874 |
-
function toggle_on_popup() {
|
875 |
-
//checks
|
876 |
-
if ( ! isset( $_GET['spu_action'] ) || $_GET['spu_action'] != 'spu_toggle_on' )
|
877 |
-
return;
|
878 |
-
if ( !isset( $_GET['spu_nonce'] ) || !wp_verify_nonce($_GET['spu_nonce'], 'spu_toggle_on') )
|
879 |
-
return;
|
880 |
-
if ( empty( $_GET['post'] ) )
|
881 |
-
return;
|
882 |
-
$post_id = esc_attr( $_GET['post'] );
|
883 |
-
$post_status = get_post_status( $post_id );
|
884 |
-
|
885 |
-
$post = array(
|
886 |
-
'ID' => $post_id,
|
887 |
-
'post_status' => $post_status != 'publish' ? 'publish' : 'draft'
|
888 |
-
);
|
889 |
-
wp_update_post( $post );
|
890 |
-
wp_safe_redirect( admin_url('edit.php?post_type=spucpt') );
|
891 |
-
exit;
|
892 |
-
}
|
893 |
-
|
894 |
-
/**
|
895 |
-
* Add filters for tinymce buttons
|
896 |
-
*/
|
897 |
-
public function register_tiny_buttons() {
|
898 |
-
add_filter( "mce_external_plugins", array( $this, "add_button" ) );
|
899 |
-
add_filter( 'mce_buttons', array( $this, 'register_button' ) );
|
900 |
-
}
|
901 |
-
|
902 |
-
/**
|
903 |
-
* Add buton js file
|
904 |
-
* @param [type] $plugin_array [description]
|
905 |
-
*/
|
906 |
-
function add_button( $plugin_array ) {
|
907 |
-
|
908 |
-
$plugin_array['spu'] = plugins_url( 'assets/js/spu-tinymce.js' , __FILE__ );
|
909 |
-
return $plugin_array;
|
910 |
-
|
911 |
-
}
|
912 |
-
|
913 |
-
/**
|
914 |
-
* Register button
|
915 |
-
* @param [type] $buttons [description]
|
916 |
-
* @return [type] [description]
|
917 |
-
*/
|
918 |
-
function register_button( $buttons ) {
|
919 |
-
array_push( $buttons, '|', 'spu_button' ); // dropcap', 'recentposts
|
920 |
-
return $buttons;
|
921 |
-
}
|
922 |
-
|
923 |
-
/**
|
924 |
-
* Add popup editor for
|
925 |
-
*/
|
926 |
-
function add_editor() {
|
927 |
-
|
928 |
-
include 'includes/tinymce-editor.php';
|
929 |
-
|
930 |
-
}
|
931 |
-
|
932 |
-
/**
|
933 |
-
* Save into db the dimissed notice
|
934 |
-
* @return [type] [description]
|
935 |
-
*/
|
936 |
-
function ajax_notice_handler() {
|
937 |
-
update_option( 'spu_enabled_cache', TRUE );
|
938 |
-
die();
|
939 |
-
}
|
940 |
-
|
941 |
-
/**
|
942 |
-
* Extra checks needed on admin init
|
943 |
-
*/
|
944 |
-
public function extra_checks(){
|
945 |
-
// second check it's because on 1.9 by mistake was not added SPUP_VERSION
|
946 |
-
if( ( defined('SPUP_VERSION') && version_compare(SPUP_VERSION, '1.9.1', '<') ) || ( defined( 'SPUP_PLUGIN_FILE') && ! defined('SPUP_VERSION') ) ){
|
947 |
-
deactivate_plugins( array('popups-premium/popups-premium.php'));
|
948 |
-
update_option('spu_pair_plugins',true);
|
949 |
-
add_action( 'admin_notices', array('SocialPopup_Notices','pair_plugins' ));
|
950 |
-
}
|
951 |
-
}
|
952 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Popups.
|
4 |
+
*
|
5 |
+
* @package SocialPopup_Admin
|
6 |
+
* @author Damian Logghe <info@timersys.com>
|
7 |
+
* @license GPL-2.0+
|
8 |
+
* @link https://timersys.com
|
9 |
+
* @copyright 2014 Timersys
|
10 |
+
*/
|
11 |
+
|
12 |
+
|
13 |
+
define( 'SPU_ADMIN_DIR' , plugin_dir_path(__FILE__) );
|
14 |
+
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Admin Class of the plugin
|
18 |
+
*
|
19 |
+
* @package SocialPopup_Admin
|
20 |
+
* @author Damian Logghe <info@timersys.com>
|
21 |
+
*/
|
22 |
+
class SocialPopup_Admin {
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Instance of this class.
|
26 |
+
*
|
27 |
+
* @since 1.0.0
|
28 |
+
*
|
29 |
+
* @var object
|
30 |
+
*/
|
31 |
+
protected static $instance = null;
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Slug of the plugin screen.
|
35 |
+
*
|
36 |
+
* @since 1.0.0
|
37 |
+
*
|
38 |
+
* @var string
|
39 |
+
*/
|
40 |
+
protected $plugin_screen_hook_suffix = null;
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Plugins settings
|
44 |
+
* @var array
|
45 |
+
*/
|
46 |
+
protected $spu_settings = array();
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Premium version is enabled
|
50 |
+
*
|
51 |
+
* @since 1.1
|
52 |
+
*
|
53 |
+
* @var bool
|
54 |
+
*/
|
55 |
+
protected $premium = false;
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Helper function
|
59 |
+
*
|
60 |
+
* @since 1.1
|
61 |
+
*
|
62 |
+
* @var bool
|
63 |
+
*/
|
64 |
+
protected $helper = '';
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Initialize the plugin by loading admin scripts & styles and adding a
|
68 |
+
* settings page and menu.
|
69 |
+
*
|
70 |
+
* @since 1.0.0
|
71 |
+
*/
|
72 |
+
private function __construct() {
|
73 |
+
|
74 |
+
|
75 |
+
$plugin = SocialPopup::get_instance();
|
76 |
+
$this->plugin_slug = $plugin->get_plugin_slug();
|
77 |
+
|
78 |
+
// helper funcs
|
79 |
+
$this->helper = new Spu_Helper;
|
80 |
+
|
81 |
+
//settings name
|
82 |
+
$this->options_name = $this->plugin_slug .'_settings';
|
83 |
+
|
84 |
+
//load settings
|
85 |
+
$this->spu_settings = $plugin->get_settings();
|
86 |
+
|
87 |
+
//premium version ?
|
88 |
+
$this->premium = defined('SPUP_PLUGIN_HOOK');
|
89 |
+
|
90 |
+
// add settings page
|
91 |
+
add_action('admin_menu' , array( $this, 'add_settings_menu' ) );
|
92 |
+
|
93 |
+
//Add our metaboxes
|
94 |
+
add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
|
95 |
+
|
96 |
+
//Save metaboxes
|
97 |
+
add_action( 'save_post_spucpt', array( $this, 'save_meta_options' ), 20 );
|
98 |
+
|
99 |
+
// Load admin style sheet and JavaScript.
|
100 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) );
|
101 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
|
102 |
+
|
103 |
+
// Add an action link pointing to the options page.
|
104 |
+
add_filter( 'plugin_action_links_' . SPU_PLUGIN_HOOK, array( $this, 'add_action_links' ) );
|
105 |
+
|
106 |
+
//Filters for rules
|
107 |
+
add_filter('spu/get_post_types', array($this, 'get_post_types'), 1, 3);
|
108 |
+
add_filter('spu/get_taxonomies', array($this, 'get_taxonomies'), 1, 3);
|
109 |
+
|
110 |
+
//AJAX Actions
|
111 |
+
add_action('wp_ajax_spu/field_group/render_rules', array( $this->helper, 'ajax_render_rules' ) );
|
112 |
+
add_action('wp_ajax_spu/field_group/render_operator', array( $this->helper, 'ajax_render_operator' ) );
|
113 |
+
add_action('wp_ajax_spu_enable_ajax_notice_handler', array( $this, 'ajax_notice_handler' ) );
|
114 |
+
|
115 |
+
//Tinymce
|
116 |
+
add_filter( 'tiny_mce_before_init', array($this, 'tinymce_init'), 9999 );
|
117 |
+
add_action( 'admin_init', array( $this, 'editor_styles' ) );
|
118 |
+
add_action( 'init', array( $this, 'register_tiny_buttons' ) );
|
119 |
+
|
120 |
+
//Columns in cpt
|
121 |
+
add_filter( 'manage_edit-spucpt_columns' , array( $this, 'set_custom_cpt_columns'), 10, 2 );
|
122 |
+
add_action( 'manage_spucpt_posts_custom_column' , array( $this, 'custom_columns'), 10, 2 );
|
123 |
+
add_action( 'admin_init' , array( $this, 'toggle_on_popup') );
|
124 |
+
|
125 |
+
add_action( 'admin_init' , array( $this, 'extra_checks') );
|
126 |
+
|
127 |
+
$this->set_rules_fields();
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Return an instance of this class.
|
132 |
+
*
|
133 |
+
* @since 1.0.0
|
134 |
+
*
|
135 |
+
* @return object A single instance of this class.
|
136 |
+
*/
|
137 |
+
public static function get_instance() {
|
138 |
+
|
139 |
+
|
140 |
+
// If the single instance hasn't been set, set it now.
|
141 |
+
if ( null == self::$instance ) {
|
142 |
+
self::$instance = new self;
|
143 |
+
}
|
144 |
+
|
145 |
+
return self::$instance;
|
146 |
+
}
|
147 |
+
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Add menu for Settings page of the plugin
|
151 |
+
* @since 1.1
|
152 |
+
* @return void
|
153 |
+
*/
|
154 |
+
public function add_settings_menu() {
|
155 |
+
|
156 |
+
add_submenu_page('edit.php?post_type=spucpt', __( 'Settings', 'popups' ), __( 'Settings', 'popups' ), apply_filters( 'spu/settings_page/roles', 'manage_options'), 'spu_settings', array( $this, 'settings_page' ) );
|
157 |
+
|
158 |
+
}
|
159 |
+
|
160 |
+
|
161 |
+
|
162 |
+
/**
|
163 |
+
* Settings page of the plugin
|
164 |
+
* @since 1.1
|
165 |
+
* @return void
|
166 |
+
*/
|
167 |
+
public function settings_page() {
|
168 |
+
|
169 |
+
$defaults = apply_filters( 'spu/settings_page/defaults_opts', array(
|
170 |
+
'aff_link' => '',
|
171 |
+
'ajax_mode' => '0',
|
172 |
+
'shortcodes_style' => '',
|
173 |
+
'facebook' => '',
|
174 |
+
'google' => '',
|
175 |
+
'twitter' => '',
|
176 |
+
'spu_license_key' => '',
|
177 |
+
'ua_code' => '',
|
178 |
+
'mc_api' => '',
|
179 |
+
));
|
180 |
+
$opts = apply_filters( 'spu/settings_page/opts', get_option( 'spu_settings', $defaults ) );
|
181 |
+
|
182 |
+
|
183 |
+
if ( isset( $_POST['spu_nonce'] ) && wp_verify_nonce( $_POST['spu_nonce'], 'spu_save_settings' ) ) {
|
184 |
+
$opts = esc_sql( @$_POST['spu_settings'] );
|
185 |
+
update_option( 'spu_settings' , $opts );
|
186 |
+
}
|
187 |
+
|
188 |
+
|
189 |
+
include 'views/settings-page.php';
|
190 |
+
|
191 |
+
}
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Register the metaboxes for our cpt and remove others
|
195 |
+
*/
|
196 |
+
public function add_meta_boxes() {
|
197 |
+
|
198 |
+
|
199 |
+
add_meta_box(
|
200 |
+
'spu-video',
|
201 |
+
'<i class="spu-icon-info spu-icon"></i>' . __( 'Help video', 'popups' ),
|
202 |
+
array( $this, 'metabox_video' ),
|
203 |
+
'spucpt',
|
204 |
+
'normal',
|
205 |
+
'core'
|
206 |
+
);
|
207 |
+
|
208 |
+
add_meta_box(
|
209 |
+
'spu-appearance',
|
210 |
+
'<i class="spu-icon-magic spu-icon"></i>' . __( 'PopUp Appearance', 'popups' ),
|
211 |
+
array( $this, 'popup_appearance' ),
|
212 |
+
'spucpt',
|
213 |
+
'normal',
|
214 |
+
'core'
|
215 |
+
);
|
216 |
+
|
217 |
+
add_meta_box(
|
218 |
+
'spu-rules',
|
219 |
+
'<i class="spu-icon-eye spu-icon"></i>' . __( 'PopUp Display Rules', 'popups' ),
|
220 |
+
array( $this, 'popup_rules' ),
|
221 |
+
'spucpt',
|
222 |
+
'normal',
|
223 |
+
'core'
|
224 |
+
);
|
225 |
+
|
226 |
+
add_meta_box(
|
227 |
+
'spu-options',
|
228 |
+
'<i class="spu-icon-gears spu-icon"></i>' . __( 'Display Options', 'popups' ),
|
229 |
+
array( $this, 'popup_options' ),
|
230 |
+
'spucpt',
|
231 |
+
'normal',
|
232 |
+
'core'
|
233 |
+
);
|
234 |
+
if( !$this->premium ) {
|
235 |
+
|
236 |
+
add_meta_box(
|
237 |
+
'spu-premium',
|
238 |
+
__( 'Popups Premium', 'popups' ),
|
239 |
+
array( $this, 'popup_premium' ),
|
240 |
+
'spucpt',
|
241 |
+
'normal',
|
242 |
+
'core'
|
243 |
+
);
|
244 |
+
|
245 |
+
}
|
246 |
+
add_meta_box(
|
247 |
+
'spu-help',
|
248 |
+
'<i class="spu-icon-info spu-icon"></i>' . __( 'PopUp Shortcodes', 'popups' ),
|
249 |
+
array( $this, 'popup_help' ),
|
250 |
+
'spucpt',
|
251 |
+
'normal',
|
252 |
+
'core'
|
253 |
+
);
|
254 |
+
|
255 |
+
add_meta_box(
|
256 |
+
'spu-support',
|
257 |
+
__( 'Need support?', 'popups' ),
|
258 |
+
array( $this, 'metabox_support' ),
|
259 |
+
'spucpt',
|
260 |
+
'side'
|
261 |
+
);
|
262 |
+
|
263 |
+
add_meta_box(
|
264 |
+
'spu-donate',
|
265 |
+
__( 'Donate & support', 'popups' ),
|
266 |
+
array( $this, 'metabox_donate' ),
|
267 |
+
'spucpt',
|
268 |
+
'side'
|
269 |
+
);
|
270 |
+
|
271 |
+
}
|
272 |
+
|
273 |
+
/**
|
274 |
+
* Include the metabox view for popup premium
|
275 |
+
* @param object $post spucpt post object
|
276 |
+
* @param array $metabox full metabox items array
|
277 |
+
* @since 1.1
|
278 |
+
*/
|
279 |
+
public function popup_premium( $post, $metabox ) {
|
280 |
+
|
281 |
+
include 'views/metaboxes/metabox-premium.php';
|
282 |
+
}
|
283 |
+
|
284 |
+
/**
|
285 |
+
* Include the metabox view for popup help
|
286 |
+
* @param object $post spucpt post object
|
287 |
+
* @param array $metabox full metabox items array
|
288 |
+
* @since 1.1
|
289 |
+
*/
|
290 |
+
public function popup_help( $post, $metabox ) {
|
291 |
+
|
292 |
+
include 'views/metaboxes/metabox-help.php';
|
293 |
+
}
|
294 |
+
/**
|
295 |
+
* Include the metabox view for popup rules
|
296 |
+
* @param object $post spucpt post object
|
297 |
+
* @param array $metabox full metabox items array
|
298 |
+
* @since 1.1
|
299 |
+
*/
|
300 |
+
public function popup_rules( $post, $metabox ) {
|
301 |
+
|
302 |
+
$groups = apply_filters('spu/metaboxes/get_box_rules', $this->helper->get_box_rules( $post->ID ), $post->ID);
|
303 |
+
|
304 |
+
include 'views/metaboxes/metabox-rules.php';
|
305 |
+
}
|
306 |
+
/**
|
307 |
+
* Include the metabox view for popup options
|
308 |
+
* @param object $post spucpt post object
|
309 |
+
* @param array $metabox full metabox items array
|
310 |
+
* @since 1.1
|
311 |
+
*/
|
312 |
+
public function popup_options( $post, $metabox ) {
|
313 |
+
|
314 |
+
$opts = apply_filters('spu/metaboxes/get_box_options', $this->helper->get_box_options( $post->ID ), $post->ID );
|
315 |
+
|
316 |
+
include 'views/metaboxes/metabox-options.php';
|
317 |
+
}
|
318 |
+
/**
|
319 |
+
* Include the metabox view for popup appearance
|
320 |
+
* @param object $post spucpt post object
|
321 |
+
* @param array $metabox full metabox items array
|
322 |
+
* @since 1.1
|
323 |
+
*/
|
324 |
+
public function popup_appearance( $post, $metabox ) {
|
325 |
+
|
326 |
+
$opts = apply_filters('spu/metaboxes/get_box_options', $this->helper->get_box_options( $post->ID ), $post->ID );
|
327 |
+
|
328 |
+
include 'views/metaboxes/metabox-appearance.php';
|
329 |
+
}
|
330 |
+
|
331 |
+
/**
|
332 |
+
* Include the metabox view for donate box
|
333 |
+
* @param object $post spucpt post object
|
334 |
+
* @param array $metabox full metabox items array
|
335 |
+
* @since 1.1
|
336 |
+
*/
|
337 |
+
public function metabox_donate( $post, $metabox ) {
|
338 |
+
|
339 |
+
$donate_metabox = apply_filters( 'spu/metaboxes/donate_metabox', dirname(__FILE__) . '/views/metaboxes/metabox-donate.php' );
|
340 |
+
|
341 |
+
include $donate_metabox;
|
342 |
+
}
|
343 |
+
|
344 |
+
/**
|
345 |
+
* Include the metabox view for help video
|
346 |
+
* @param object $post spucpt post object
|
347 |
+
* @param array $metabox full metabox items array
|
348 |
+
* @since 1.1
|
349 |
+
*/
|
350 |
+
public function metabox_video( $post, $metabox ) {
|
351 |
+
|
352 |
+
$video_metabox = apply_filters( 'spu/metaboxes/video_metabox', dirname(__FILE__) . '/views/metaboxes/metabox-video.php' );
|
353 |
+
|
354 |
+
include $video_metabox;
|
355 |
+
}
|
356 |
+
/**
|
357 |
+
* Include the metabox view for support box
|
358 |
+
* @param object $post spucpt post object
|
359 |
+
* @param array $metabox full metabox items array
|
360 |
+
* @since 1.1
|
361 |
+
*/
|
362 |
+
public function metabox_support( $post, $metabox ) {
|
363 |
+
|
364 |
+
$support_metabox = apply_filters( 'spu/metaboxes/support_metabox', dirname(__FILE__) . '/views/metaboxes/metabox-support.php' );
|
365 |
+
|
366 |
+
include $support_metabox;
|
367 |
+
}
|
368 |
+
|
369 |
+
|
370 |
+
/**
|
371 |
+
* Saves popup options and rules
|
372 |
+
*
|
373 |
+
* @param $post_id
|
374 |
+
*
|
375 |
+
* @return mixed
|
376 |
+
*/
|
377 |
+
public function save_meta_options( $post_id ) {
|
378 |
+
static $spu_save = 0;
|
379 |
+
|
380 |
+
// For some reason sometimes this hook run twice, until I can find the reason and reproduce error
|
381 |
+
// let's use a static var to prevent this
|
382 |
+
if( $spu_save > 0 )
|
383 |
+
return $post_id;
|
384 |
+
|
385 |
+
// Verify that the nonce is set and valid.
|
386 |
+
if ( !isset( $_POST['spu_options_nonce'] ) || ! wp_verify_nonce( $_POST['spu_options_nonce'], 'spu_options' ) ) {
|
387 |
+
return $post_id;
|
388 |
+
}
|
389 |
+
// If this is an autosave, our form has not been submitted, so we don't want to do anything.
|
390 |
+
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
|
391 |
+
return $post_id;
|
392 |
+
}
|
393 |
+
// same for ajax
|
394 |
+
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
395 |
+
return $post_id;
|
396 |
+
}
|
397 |
+
// same for cron
|
398 |
+
if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
|
399 |
+
return $post_id;
|
400 |
+
}
|
401 |
+
// same for posts revisions
|
402 |
+
if ( wp_is_post_revision( $post_id ) ) {
|
403 |
+
return $post_id;
|
404 |
+
}
|
405 |
+
|
406 |
+
// can user edit this post?
|
407 |
+
if ( ! current_user_can( 'edit_post', $post_id ) ) {
|
408 |
+
return $post_id;
|
409 |
+
}
|
410 |
+
|
411 |
+
$opts = $_POST['spu'];
|
412 |
+
unset( $_POST['spu'] );
|
413 |
+
|
414 |
+
$post = get_post($post_id);
|
415 |
+
|
416 |
+
// sanitize settings
|
417 |
+
$opts['css']['bgopacity'] = sanitize_text_field( $opts['css']['bgopacity'] );
|
418 |
+
$opts['css']['overlay_color'] = sanitize_text_field( $opts['css']['overlay_color'] );
|
419 |
+
$opts['css']['background_color'] = sanitize_text_field( $opts['css']['background_color'] );
|
420 |
+
$opts['css']['background_opacity'] = sanitize_text_field( $opts['css']['background_opacity'] );
|
421 |
+
$opts['css']['width'] = sanitize_text_field( $opts['css']['width'] );
|
422 |
+
$opts['css']['padding'] = absint( sanitize_text_field( $opts['css']['padding'] ) );
|
423 |
+
$opts['css']['color'] = sanitize_text_field( $opts['css']['color'] );
|
424 |
+
$opts['css']['shadow_color'] = sanitize_text_field( $opts['css']['shadow_color'] );
|
425 |
+
$opts['css']['shadow_type'] = sanitize_text_field( $opts['css']['shadow_type'] );
|
426 |
+
$opts['css']['shadow_x_offset'] = absint( sanitize_text_field( $opts['css']['shadow_x_offset'] ) );
|
427 |
+
$opts['css']['shadow_y_offset'] = absint( sanitize_text_field( $opts['css']['shadow_y_offset'] ) );
|
428 |
+
$opts['css']['shadow_blur'] = absint( sanitize_text_field( $opts['css']['shadow_blur'] ) );
|
429 |
+
$opts['css']['shadow_spread'] = absint( sanitize_text_field( $opts['css']['shadow_spread'] ) );
|
430 |
+
$opts['css']['border_color'] = sanitize_text_field( $opts['css']['border_color'] );
|
431 |
+
$opts['css']['border_width'] = absint( sanitize_text_field( $opts['css']['border_width'] ) );
|
432 |
+
$opts['css']['border_radius'] = absint( sanitize_text_field( $opts['css']['border_radius'] ) );
|
433 |
+
$opts['css']['border_type'] = sanitize_text_field( $opts['css']['border_type'] );
|
434 |
+
$opts['css']['close_color'] = sanitize_text_field( $opts['css']['close_color'] );
|
435 |
+
$opts['css']['close_hover_color'] = sanitize_text_field( $opts['css']['close_hover_color'] );
|
436 |
+
$opts['css']['close_size'] = sanitize_text_field( $opts['css']['close_size'] );
|
437 |
+
$opts['css']['close_position'] = sanitize_text_field( $opts['css']['close_position'] );
|
438 |
+
$opts['css']['close_shadow_color'] = sanitize_text_field( $opts['css']['close_shadow_color'] );
|
439 |
+
$opts['css']['position'] = sanitize_text_field( $opts['css']['position'] );
|
440 |
+
|
441 |
+
$opts['name-convert-cookie'] = sanitize_text_field( $opts['name-convert-cookie'] ) ;
|
442 |
+
$opts['name-close-cookie'] = sanitize_text_field( $opts['name-close-cookie'] );
|
443 |
+
$opts['duration-convert-cookie'] = absint( sanitize_text_field( $opts['duration-convert-cookie'] ) );
|
444 |
+
$opts['duration-close-cookie'] = absint( sanitize_text_field( $opts['duration-close-cookie'] ) );
|
445 |
+
// add popup ID to make the unique
|
446 |
+
$opts['name-convert-cookie'] = $opts['name-convert-cookie'] == 'spu_conversion' ? 'spu_conversion_'.$post_id : $opts['name-convert-cookie'] ;
|
447 |
+
$opts['name-close-cookie'] = $opts['name-close-cookie'] == 'spu_closing' ? 'spu_closing_'.$post_id : $opts['name-close-cookie'];
|
448 |
+
|
449 |
+
$opts['trigger_number'] = absint( sanitize_text_field( $opts['trigger_number'] ) );
|
450 |
+
|
451 |
+
|
452 |
+
|
453 |
+
// Check for social shortcodes and update post meta ( we check later if we need to enqueue any social js)
|
454 |
+
$total_shortcodes =0;
|
455 |
+
if( has_shortcode( $post->post_content, 'spu-facebook' ) || has_shortcode( $post->post_content, 'spu-facebook-page' ) ){
|
456 |
+
$total_shortcodes++;
|
457 |
+
update_post_meta( $post_id, 'spu_fb', true );
|
458 |
+
} else {
|
459 |
+
delete_post_meta( $post_id, 'spu_fb');
|
460 |
+
}
|
461 |
+
if( has_shortcode( $post->post_content, 'spu-twitter' ) ){
|
462 |
+
$total_shortcodes++;
|
463 |
+
update_post_meta( $post_id, 'spu_tw', true );
|
464 |
+
} else {
|
465 |
+
delete_post_meta( $post_id, 'spu_tw');
|
466 |
+
}
|
467 |
+
if( has_shortcode( $post->post_content, 'spu-google' ) ){
|
468 |
+
$total_shortcodes++;
|
469 |
+
$opts['google'] = true;
|
470 |
+
update_post_meta( $post_id, 'spu_google', true );
|
471 |
+
} else {
|
472 |
+
delete_post_meta( $post_id, 'spu_google');
|
473 |
+
}
|
474 |
+
// save total shortcodes (for auto styling)
|
475 |
+
if( $total_shortcodes ){
|
476 |
+
update_post_meta( $post_id, 'spu_social', $total_shortcodes );
|
477 |
+
} else {
|
478 |
+
delete_post_meta( $post_id, 'spu_social' );
|
479 |
+
}
|
480 |
+
if( has_shortcode( $post->post_content, 'gravityform' ) ) {
|
481 |
+
preg_match('/\[gravityform id="([0-9]+)".*\]/i', $post->post_content, $matches);
|
482 |
+
if( !empty( $matches[1] ) )
|
483 |
+
update_post_meta( $post_id, 'spu_gravity', $matches[1]);
|
484 |
+
} else {
|
485 |
+
delete_post_meta( $post_id, 'spu_gravity' );
|
486 |
+
}
|
487 |
+
|
488 |
+
// save box settings
|
489 |
+
update_post_meta( $post_id, 'spu_options', apply_filters( 'spu/metaboxes/sanitized_options', $opts ) );
|
490 |
+
|
491 |
+
// Start with rules
|
492 |
+
if( isset($_POST['spu_rules']) && is_array($_POST['spu_rules']) )
|
493 |
+
{
|
494 |
+
// clean array keys
|
495 |
+
$groups = array_values( $_POST['spu_rules'] );
|
496 |
+
foreach($groups as $group_id => $group )
|
497 |
+
{
|
498 |
+
if( is_array($group) )
|
499 |
+
{
|
500 |
+
// clean array keys
|
501 |
+
$groups_a[] = array_values( $group );
|
502 |
+
|
503 |
+
}
|
504 |
+
}
|
505 |
+
|
506 |
+
update_post_meta( $post_id, 'spu_rules', apply_filters( 'spu/metaboxes/sanitized_rules', $groups_a ) );
|
507 |
+
unset( $_POST['spu_rules'] );
|
508 |
+
}
|
509 |
+
$spu_save++;
|
510 |
+
}
|
511 |
+
/**
|
512 |
+
* Register and enqueue admin-specific style sheet.
|
513 |
+
*
|
514 |
+
* @TODO:
|
515 |
+
*
|
516 |
+
* - Rename "Plugin_Name" to the name your plugin
|
517 |
+
*
|
518 |
+
* @since 1.0.0
|
519 |
+
*
|
520 |
+
* @return null Return early if no settings page is registered.
|
521 |
+
*/
|
522 |
+
public function enqueue_admin_styles() {
|
523 |
+
|
524 |
+
global $pagenow;
|
525 |
+
|
526 |
+
$post_type = isset($_GET['post_type']) ? $_GET['post_type'] : get_post_type();
|
527 |
+
|
528 |
+
if ( $post_type !== 'spucpt' || !in_array( $pagenow, array( 'post-new.php', 'post.php', 'edit.php' ) ) ) {
|
529 |
+
return;
|
530 |
+
}
|
531 |
+
wp_enqueue_style( 'spu-admin-css', plugins_url( 'assets/css/admin.css', __FILE__ ) , '', SocialPopup::VERSION );
|
532 |
+
wp_enqueue_style( 'wp-color-picker' );
|
533 |
+
|
534 |
+
}
|
535 |
+
|
536 |
+
/**
|
537 |
+
* Register and enqueue admin-specific JavaScript.
|
538 |
+
*
|
539 |
+
* @TODO:
|
540 |
+
*
|
541 |
+
* - Rename "Plugin_Name" to the name your plugin
|
542 |
+
*
|
543 |
+
* @since 1.0.0
|
544 |
+
*
|
545 |
+
* @return null Return early if no settings page is registered.
|
546 |
+
*/
|
547 |
+
public function enqueue_admin_scripts() {
|
548 |
+
global $pagenow, $post;
|
549 |
+
|
550 |
+
if ( get_post_type() !== 'spucpt' || !in_array( $pagenow, array( 'post-new.php', 'edit.php', 'post.php' ) ) ) {
|
551 |
+
return;
|
552 |
+
}
|
553 |
+
|
554 |
+
$box_id = isset( $post->ID ) ? $post->ID : '';
|
555 |
+
|
556 |
+
wp_enqueue_script( 'wp-color-picker' );
|
557 |
+
wp_enqueue_script( 'ace_code_highlighter_js', plugins_url( 'assets/js/ace.js', __FILE__ ) , '', '1.0.0', true );
|
558 |
+
wp_enqueue_script( 'ace_mode_js', plugins_url( 'assets/js/mode-css.js', __FILE__ ) , array( 'ace_code_highlighter_js' ), '1.0.0', true );
|
559 |
+
wp_enqueue_script( 'worker_css_js', plugins_url( 'assets/js/worker-css.js', __FILE__ ) , array( 'jquery', 'ace_code_highlighter_js' ), '1.0.0', true );
|
560 |
+
wp_enqueue_script( 'spu-admin-js', plugins_url( 'assets/js/admin.js', __FILE__ ) , '', SocialPopup::VERSION );
|
561 |
+
|
562 |
+
wp_localize_script( 'spu-admin-js', 'spu_js',
|
563 |
+
array(
|
564 |
+
'admin_url' => admin_url( ),
|
565 |
+
'nonce' => wp_create_nonce( 'spu_nonce' ),
|
566 |
+
'l10n' => array (
|
567 |
+
'or' => '<span>'.__('OR', 'popups' ).'</span>'
|
568 |
+
),
|
569 |
+
'opts' => $this->helper->get_box_options($box_id)
|
570 |
+
)
|
571 |
+
);
|
572 |
+
|
573 |
+
wp_localize_script( 'spup-admin-js' , 'spup_js' ,
|
574 |
+
array(
|
575 |
+
'opts' => $this->helper->get_box_options($box_id),
|
576 |
+
'spinner' => SPU_PLUGIN_URL . 'public/assets/img/ajax-loader.gif'
|
577 |
+
|
578 |
+
)
|
579 |
+
);
|
580 |
+
}
|
581 |
+
|
582 |
+
|
583 |
+
|
584 |
+
|
585 |
+
/**
|
586 |
+
* Add settings action link to the plugins page.
|
587 |
+
*
|
588 |
+
* @since 1.0.0
|
589 |
+
*/
|
590 |
+
public function add_action_links( $links ) {
|
591 |
+
|
592 |
+
return array_merge(
|
593 |
+
array(
|
594 |
+
'settings' => '<a href="' . admin_url( 'edit.php?post_type=spucpt' ) . '">' . __( 'Add a Popup', 'popups' ) . '</a>'
|
595 |
+
),
|
596 |
+
$links
|
597 |
+
);
|
598 |
+
|
599 |
+
}
|
600 |
+
|
601 |
+
/**
|
602 |
+
* Return available posts types. Used in filters
|
603 |
+
* @param array $post_types custom post types
|
604 |
+
* @param array $exclude cpt to explude
|
605 |
+
* @param array $include cpts to include
|
606 |
+
* @return array Resulting cpts
|
607 |
+
*/
|
608 |
+
function get_post_types( $post_types, $exclude = array(), $include = array() ) {
|
609 |
+
|
610 |
+
// get all custom post types
|
611 |
+
$post_types = array_merge($post_types, get_post_types());
|
612 |
+
|
613 |
+
|
614 |
+
// core include / exclude
|
615 |
+
$spu_includes = array_merge( array(), $include );
|
616 |
+
$spu_excludes = array_merge( array( 'spucpt', 'acf', 'revision', 'nav_menu_item','custom_css', 'customize_changeset', 'oembed_cache', 'wpvqgr_quiz_trivia', 'wpvqgr_quiz_perso', 'wpvqgr_user', 'popup', 'popup_theme', 'page_rating', 'sa_slider', 'faq', 'opanda-item', 'amn_smtp' ), $exclude );
|
617 |
+
|
618 |
+
foreach( $spu_includes as $p )
|
619 |
+
{
|
620 |
+
if( post_type_exists($p) )
|
621 |
+
{
|
622 |
+
$post_types[ $p ] = $p;
|
623 |
+
}
|
624 |
+
}
|
625 |
+
|
626 |
+
|
627 |
+
// exclude
|
628 |
+
foreach( $spu_excludes as $p )
|
629 |
+
{
|
630 |
+
unset( $post_types[ $p ] );
|
631 |
+
}
|
632 |
+
|
633 |
+
|
634 |
+
return $post_types;
|
635 |
+
|
636 |
+
}
|
637 |
+
|
638 |
+
/**
|
639 |
+
* Get taxonomies. Used in filters rules
|
640 |
+
*
|
641 |
+
* @param array $choices [description]
|
642 |
+
* @param boolean $simple_value [description]
|
643 |
+
*
|
644 |
+
* @return array [type] [description]
|
645 |
+
*/
|
646 |
+
function get_taxonomies( $choices, $simple_value = false ) {
|
647 |
+
|
648 |
+
// vars
|
649 |
+
$post_types = get_post_types();
|
650 |
+
|
651 |
+
|
652 |
+
if($post_types)
|
653 |
+
{
|
654 |
+
foreach($post_types as $post_type)
|
655 |
+
{
|
656 |
+
$post_type_object = get_post_type_object($post_type);
|
657 |
+
$taxonomies = get_object_taxonomies($post_type);
|
658 |
+
if($taxonomies)
|
659 |
+
{
|
660 |
+
foreach($taxonomies as $taxonomy)
|
661 |
+
{
|
662 |
+
if( 'nav_menu' == $taxonomy ) continue;
|
663 |
+
$terms = get_terms($taxonomy, array('hide_empty' => true));
|
664 |
+
if($terms)
|
665 |
+
{
|
666 |
+
foreach($terms as $term)
|
667 |
+
{
|
668 |
+
$value = $taxonomy . ':' . $term->term_id;
|
669 |
+
|
670 |
+
if( $simple_value )
|
671 |
+
{
|
672 |
+
$value = $term->term_id;
|
673 |
+
}
|
674 |
+
|
675 |
+
$choices[$post_type_object->label . ': ' . $taxonomy][$value] = $term->name;
|
676 |
+
}
|
677 |
+
}
|
678 |
+
}
|
679 |
+
}
|
680 |
+
}
|
681 |
+
}
|
682 |
+
|
683 |
+
return $choices;
|
684 |
+
}
|
685 |
+
|
686 |
+
/**
|
687 |
+
* Load tinymce style on load
|
688 |
+
* @param [type] $args [description]
|
689 |
+
* @return [type] [description]
|
690 |
+
*/
|
691 |
+
public function tinymce_init($args) {
|
692 |
+
|
693 |
+
if( get_post_type() !== 'spucpt') {
|
694 |
+
return $args;
|
695 |
+
}
|
696 |
+
$func = '';
|
697 |
+
// dirty hax, WPML replace our function so let's try to get theirs and add to ours
|
698 |
+
// same with follow up emails by woocommerce
|
699 |
+
if( array_key_exists('setup', $args) && strpos($args['setup'], 'function(ed)') !== false) {
|
700 |
+
if( $pos = strpos($args['setup'], 'function(ed){') !== false ) {
|
701 |
+
if( $pos < 15 ){
|
702 |
+
$func .= rtrim(substr_replace($args['setup'],'',$pos,strlen('function(ed){')),'}');
|
703 |
+
}
|
704 |
+
}
|
705 |
+
if( $pos = strpos($args['setup'], 'function(ed) {') !== false ) {
|
706 |
+
if( $pos < 15 ){
|
707 |
+
$func .= rtrim(substr_replace($args['setup'],'',$pos,strlen('function(ed) {')),'}');
|
708 |
+
}
|
709 |
+
}
|
710 |
+
|
711 |
+
}
|
712 |
+
|
713 |
+
$args['setup'] = 'function(ed) {
|
714 |
+
if(typeof SPU_ADMIN === \'undefined\') {
|
715 |
+
return;
|
716 |
+
}
|
717 |
+
ed.onInit.add(SPU_ADMIN.onTinyMceInit);
|
718 |
+
if(typeof SPUP_ADMIN === \'undefined\') {
|
719 |
+
return;
|
720 |
+
}
|
721 |
+
ed.onInit.add(SPUP_ADMIN.onTinyMceInit);
|
722 |
+
'.$func.'
|
723 |
+
}';
|
724 |
+
|
725 |
+
return $args;
|
726 |
+
}
|
727 |
+
|
728 |
+
/**
|
729 |
+
* Add the stylesheet for optin in editor
|
730 |
+
* @since 1.2.3.6
|
731 |
+
*/
|
732 |
+
function editor_styles() {
|
733 |
+
global $pagenow;
|
734 |
+
$post_type = isset($_GET['post']) ? get_post_type($_GET['post']) : '';
|
735 |
+
|
736 |
+
if( 'spucpt' == $post_type || get_post_type() == 'spucpt' || (isset( $_GET['post_type']) && $_GET['post_type'] == 'spucpt') ) {
|
737 |
+
add_editor_style( SPU_PLUGIN_URL . 'admin/assets/css/editor-style.css' );
|
738 |
+
}
|
739 |
+
// Add html for shortcodes popup
|
740 |
+
if( 'post.php' == $pagenow || 'post-new.php' == $pagenow ) {
|
741 |
+
wp_enqueue_script( 'jquery-ui-dialog' );
|
742 |
+
wp_enqueue_style( 'wp-jquery-ui-dialog' );
|
743 |
+
add_action( 'in_admin_footer', array($this, 'add_editor' ),100 );
|
744 |
+
|
745 |
+
}
|
746 |
+
}
|
747 |
+
|
748 |
+
function get_rules_choices() {
|
749 |
+
$choices = array(
|
750 |
+
__("User", 'popups' ) => array(
|
751 |
+
'user_type' => __("User role", 'popups' ),
|
752 |
+
'logged_user' => __("User is logged", 'popups' ),
|
753 |
+
'left_comment' => __("User never left a comment", 'popups' ),
|
754 |
+
'search_engine' => __("User came via a search engine", 'popups' ),
|
755 |
+
'same_site' => __("User did not arrive via another page on your site", 'popups' ),
|
756 |
+
),
|
757 |
+
__("Post", 'popups' ) => array(
|
758 |
+
'post' => __("Post", 'popups' ),
|
759 |
+
'post_id' => __("Post ID", 'popups' ),
|
760 |
+
'post_type' => __("Post Type", 'popups' ),
|
761 |
+
'post_category' => __("Post Category", 'popups' ),
|
762 |
+
'post_format' => __("Post Format", 'popups' ),
|
763 |
+
'post_status' => __("Post Status", 'popups' ),
|
764 |
+
'taxonomy' => __("Post Taxonomy", 'popups' ),
|
765 |
+
),
|
766 |
+
__("Page", 'popups' ) => array(
|
767 |
+
'page' => __("Page", 'popups' ),
|
768 |
+
'page_type' => __("Page Type", 'popups' ),
|
769 |
+
'page_parent' => __("Page Parent", 'popups' ),
|
770 |
+
'page_template' => __("Page Template", 'popups' ),
|
771 |
+
),
|
772 |
+
__("Other", 'popups' ) => array(
|
773 |
+
'referrer' => __("Referrer", 'popups' ),
|
774 |
+
'query_string' => __("Query String", 'popups' ),
|
775 |
+
'keyword_url' => __("Url contains keyword", 'popups' ),
|
776 |
+
'custom_url' => __("Custom Url", 'popups' ),
|
777 |
+
'mobiles' => __("Mobile Phone", 'popups' ),
|
778 |
+
'tablets' => __("Tablet", 'popups' ),
|
779 |
+
'desktop' => __("Dekstop", 'popups' ),
|
780 |
+
'crawlers' => __("Bots/Crawlers", 'popups' ),
|
781 |
+
'browser' => __("Browser", 'popups' ),
|
782 |
+
)
|
783 |
+
);
|
784 |
+
// allow custom rules rules
|
785 |
+
return apply_filters( 'spu/metaboxes/rule_types', $choices );
|
786 |
+
}
|
787 |
+
|
788 |
+
/**
|
789 |
+
* Hook each rule to a field to print
|
790 |
+
*/
|
791 |
+
private function set_rules_fields() {
|
792 |
+
|
793 |
+
// User
|
794 |
+
add_action('spu/rules/print_user_type_field', array('Spu_Helper', 'print_select'), 10, 2);
|
795 |
+
add_action('spu/rules/print_logged_user_field', array('Spu_Helper', 'print_select'), 10, 2);
|
796 |
+
add_action('spu/rules/print_left_comment_field', array('Spu_Helper', 'print_select'), 10, 2);
|
797 |
+
add_action('spu/rules/print_search_engine_field', array('Spu_Helper', 'print_select'), 10, 2);
|
798 |
+
add_action('spu/rules/print_same_site_field', array('Spu_Helper', 'print_select'), 10, 2);
|
799 |
+
|
800 |
+
// Post
|
801 |
+
add_action('spu/rules/print_post_type_field', array('Spu_Helper', 'print_select'), 10, 2);
|
802 |
+
add_action('spu/rules/print_post_id_field', array('Spu_Helper', 'print_textfield'), 10, 1);
|
803 |
+
add_action('spu/rules/print_post_field', array('Spu_Helper', 'print_select'), 10, 2);
|
804 |
+
add_action('spu/rules/print_post_category_field', array('Spu_Helper', 'print_select'), 10, 2);
|
805 |
+
add_action('spu/rules/print_post_format_field', array('Spu_Helper', 'print_select'), 10, 2);
|
806 |
+
add_action('spu/rules/print_post_status_field', array('Spu_Helper', 'print_select'), 10, 2);
|
807 |
+
add_action('spu/rules/print_taxonomy_field', array('Spu_Helper', 'print_select'), 10, 2);
|
808 |
+
|
809 |
+
// Page
|
810 |
+
add_action('spu/rules/print_page_field', array('Spu_Helper', 'print_select'), 10, 2);
|
811 |
+
add_action('spu/rules/print_page_type_field', array('Spu_Helper', 'print_select'), 10, 2);
|
812 |
+
add_action('spu/rules/print_page_parent_field', array('Spu_Helper', 'print_select'), 10, 2);
|
813 |
+
add_action('spu/rules/print_page_template_field', array('Spu_Helper', 'print_select'), 10, 2);
|
814 |
+
|
815 |
+
//Other
|
816 |
+
add_action('spu/rules/print_mobiles_field', array('Spu_Helper', 'print_select'), 10, 2);
|
817 |
+
add_action('spu/rules/print_desktop_field', array('Spu_Helper', 'print_select'), 10, 2);
|
818 |
+
add_action('spu/rules/print_tablets_field', array('Spu_Helper', 'print_select'), 10, 2);
|
819 |
+
add_action('spu/rules/print_crawlers_field', array('Spu_Helper', 'print_select'), 10, 2);
|
820 |
+
add_action('spu/rules/print_referrer_field', array('Spu_Helper', 'print_textfield'), 10, 1);
|
821 |
+
add_action('spu/rules/print_query_string_field', array('Spu_Helper', 'print_textfield'), 10, 1);
|
822 |
+
add_action('spu/rules/print_keyword_url_field', array('Spu_Helper', 'print_textfield'), 10, 1);
|
823 |
+
add_action('spu/rules/print_custom_url_field', array('Spu_Helper', 'print_textfield'), 10, 1);
|
824 |
+
add_action('spu/rules/print_browser_field', array('Spu_Helper', 'print_textfield'), 10, 1);
|
825 |
+
}
|
826 |
+
|
827 |
+
/**
|
828 |
+
* Add custom columns to spu cpt
|
829 |
+
*
|
830 |
+
* @param [type] $columns [description]
|
831 |
+
*
|
832 |
+
* @since 1.3.3
|
833 |
+
* @return array|int
|
834 |
+
*/
|
835 |
+
public function set_custom_cpt_columns( $columns ){
|
836 |
+
|
837 |
+
unset( $columns['date'] );
|
838 |
+
$spu_switch = array( 'spu_switch' => __( 'On / Off', 'popups' ) );
|
839 |
+
$columns = array_slice($columns, 0, 1, true) + $spu_switch + array_slice($columns, 1, count( $columns ) - 1, true) ;
|
840 |
+
$columns['spu_id'] = __( 'ID', 'popups' );
|
841 |
+
$columns['spu_trigger_class'] = __( 'Trigger class', 'popups' );
|
842 |
+
|
843 |
+
return $columns;
|
844 |
+
}
|
845 |
+
/**
|
846 |
+
* Add callbacks for custom colums
|
847 |
+
* @param array $column [description]
|
848 |
+
* @param int $post_id [description]
|
849 |
+
* @return echo html
|
850 |
+
* @since 1.3.3
|
851 |
+
*/
|
852 |
+
function custom_columns( $column, $post_id ) {
|
853 |
+
global $wpdb;
|
854 |
+
|
855 |
+
switch ( $column ) {
|
856 |
+
case 'spu_id' :
|
857 |
+
echo '#spu-'.$post_id;
|
858 |
+
break;
|
859 |
+
case 'spu_switch' :
|
860 |
+
echo '<a href="'. wp_nonce_url( admin_url('edit.php?post_type=spucpt&post='. $post_id . '&spu_action=spu_toggle_on'), 'spu_toggle_on', 'spu_nonce') .'"><i class="spu-icon spu-icon-';
|
861 |
+
echo get_post_status( $post_id ) == 'publish' ? 'toggle-on' : 'toggle-off';
|
862 |
+
echo '"></i></a>';
|
863 |
+
break;
|
864 |
+
case 'spu_trigger_class':
|
865 |
+
echo '.spu-open-' . $post_id;
|
866 |
+
break;
|
867 |
+
}
|
868 |
+
}
|
869 |
+
|
870 |
+
/**
|
871 |
+
* Catch the toggle on/off action and change post status
|
872 |
+
* Redirect to clear url once is completed
|
873 |
+
*/
|
874 |
+
function toggle_on_popup() {
|
875 |
+
//checks
|
876 |
+
if ( ! isset( $_GET['spu_action'] ) || $_GET['spu_action'] != 'spu_toggle_on' )
|
877 |
+
return;
|
878 |
+
if ( !isset( $_GET['spu_nonce'] ) || !wp_verify_nonce($_GET['spu_nonce'], 'spu_toggle_on') )
|
879 |
+
return;
|
880 |
+
if ( empty( $_GET['post'] ) )
|
881 |
+
return;
|
882 |
+
$post_id = esc_attr( $_GET['post'] );
|
883 |
+
$post_status = get_post_status( $post_id );
|
884 |
+
|
885 |
+
$post = array(
|
886 |
+
'ID' => $post_id,
|
887 |
+
'post_status' => $post_status != 'publish' ? 'publish' : 'draft'
|
888 |
+
);
|
889 |
+
wp_update_post( $post );
|
890 |
+
wp_safe_redirect( admin_url('edit.php?post_type=spucpt') );
|
891 |
+
exit;
|
892 |
+
}
|
893 |
+
|
894 |
+
/**
|
895 |
+
* Add filters for tinymce buttons
|
896 |
+
*/
|
897 |
+
public function register_tiny_buttons() {
|
898 |
+
add_filter( "mce_external_plugins", array( $this, "add_button" ) );
|
899 |
+
add_filter( 'mce_buttons', array( $this, 'register_button' ) );
|
900 |
+
}
|
901 |
+
|
902 |
+
/**
|
903 |
+
* Add buton js file
|
904 |
+
* @param [type] $plugin_array [description]
|
905 |
+
*/
|
906 |
+
function add_button( $plugin_array ) {
|
907 |
+
|
908 |
+
$plugin_array['spu'] = plugins_url( 'assets/js/spu-tinymce.js' , __FILE__ );
|
909 |
+
return $plugin_array;
|
910 |
+
|
911 |
+
}
|
912 |
+
|
913 |
+
/**
|
914 |
+
* Register button
|
915 |
+
* @param [type] $buttons [description]
|
916 |
+
* @return [type] [description]
|
917 |
+
*/
|
918 |
+
function register_button( $buttons ) {
|
919 |
+
array_push( $buttons, '|', 'spu_button' ); // dropcap', 'recentposts
|
920 |
+
return $buttons;
|
921 |
+
}
|
922 |
+
|
923 |
+
/**
|
924 |
+
* Add popup editor for
|
925 |
+
*/
|
926 |
+
function add_editor() {
|
927 |
+
|
928 |
+
include 'includes/tinymce-editor.php';
|
929 |
+
|
930 |
+
}
|
931 |
+
|
932 |
+
/**
|
933 |
+
* Save into db the dimissed notice
|
934 |
+
* @return [type] [description]
|
935 |
+
*/
|
936 |
+
function ajax_notice_handler() {
|
937 |
+
update_option( 'spu_enabled_cache', TRUE );
|
938 |
+
die();
|
939 |
+
}
|
940 |
+
|
941 |
+
/**
|
942 |
+
* Extra checks needed on admin init
|
943 |
+
*/
|
944 |
+
public function extra_checks(){
|
945 |
+
// second check it's because on 1.9 by mistake was not added SPUP_VERSION
|
946 |
+
if( ( defined('SPUP_VERSION') && version_compare(SPUP_VERSION, '1.9.1', '<') ) || ( defined( 'SPUP_PLUGIN_FILE') && ! defined('SPUP_VERSION') ) ){
|
947 |
+
deactivate_plugins( array('popups-premium/popups-premium.php'));
|
948 |
+
update_option('spu_pair_plugins',true);
|
949 |
+
add_action( 'admin_notices', array('SocialPopup_Notices','pair_plugins' ));
|
950 |
+
}
|
951 |
+
}
|
952 |
+
}
|
admin/includes/class-spu-notices.php
CHANGED
@@ -1,46 +1,46 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Class that handle all admin notices
|
5 |
-
*
|
6 |
-
* @since 1.3.1
|
7 |
-
* @package SocialPopup
|
8 |
-
* @subpackage SocialPopup/Admin/Includes
|
9 |
-
* @author Damian Logghe <info@timersys.com>
|
10 |
-
*/
|
11 |
-
class SocialPopup_Notices {
|
12 |
-
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Initialize the class and set its properties.
|
16 |
-
*
|
17 |
-
* @since 1.3.1
|
18 |
-
*/
|
19 |
-
public function __construct( ) {
|
20 |
-
|
21 |
-
if( isset( $_GET['spu_notice'])){
|
22 |
-
update_option('spu_'.esc_attr($_GET['spu_notice']), true);
|
23 |
-
}
|
24 |
-
}
|
25 |
-
|
26 |
-
|
27 |
-
public function rate_plugin(){
|
28 |
-
?><div class="notice-info notice">
|
29 |
-
<h3><i class=" dashicons-before dashicons-share-alt"></i>WordPress Popups Plugin</h3>
|
30 |
-
<p><?php echo sprintf(__( 'We noticed that you have been using our plugin for a while and we would like to ask you a little favour. If you are happy with it and can take a minute please <a href="%s" target="_blank">leave a nice review</a> on WordPress. It will be a tremendous help for us!', 'spu' ), 'https://wordpress.org/support/view/plugin-reviews/popups?filter=5' ); ?></p>
|
31 |
-
<ul>
|
32 |
-
<li><?php echo sprintf(__('<a href="%s" target="_blank">Leave a nice review</a>'),'https://wordpress.org/support/view/plugin-reviews/popups?filter=5');?></li>
|
33 |
-
<li><?php echo sprintf(__('<a href="%s">I already did</a>'), admin_url('?spu_notice=rate_plugin'));?></li>
|
34 |
-
</ul>
|
35 |
-
</div><?php
|
36 |
-
}
|
37 |
-
|
38 |
-
public static function pair_plugins(){
|
39 |
-
?><div class="notice-info error">
|
40 |
-
<h3><i class=" dashicons-before dashicons-share-alt"></i>WordPress Popups Plugin error</h3>
|
41 |
-
<p><?php _e('The Popups premium was automatically deactivated.', 'spu');?></p>
|
42 |
-
<p><?php _e( 'Your current version of Popups premium it\'s not compatible with the core Popups plugin you just installed/updated. Please upgrade your premium version to at least 1.9.1 or downgrade the core version to 1.7.3 .', 'spu' ); ?></p>
|
43 |
-
<p><a href="<?= admin_url('?spu_notice=pair_plugins_dismiss');?>" class="button-primary"><?php _e('Dismiss','spu');?></a></p>
|
44 |
-
</div><?php
|
45 |
-
}
|
46 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Class that handle all admin notices
|
5 |
+
*
|
6 |
+
* @since 1.3.1
|
7 |
+
* @package SocialPopup
|
8 |
+
* @subpackage SocialPopup/Admin/Includes
|
9 |
+
* @author Damian Logghe <info@timersys.com>
|
10 |
+
*/
|
11 |
+
class SocialPopup_Notices {
|
12 |
+
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Initialize the class and set its properties.
|
16 |
+
*
|
17 |
+
* @since 1.3.1
|
18 |
+
*/
|
19 |
+
public function __construct( ) {
|
20 |
+
|
21 |
+
if( isset( $_GET['spu_notice'])){
|
22 |
+
update_option('spu_'.esc_attr($_GET['spu_notice']), true);
|
23 |
+
}
|
24 |
+
}
|
25 |
+
|
26 |
+
|
27 |
+
public function rate_plugin(){
|
28 |
+
?><div class="notice-info notice">
|
29 |
+
<h3><i class=" dashicons-before dashicons-share-alt"></i>WordPress Popups Plugin</h3>
|
30 |
+
<p><?php echo sprintf(__( 'We noticed that you have been using our plugin for a while and we would like to ask you a little favour. If you are happy with it and can take a minute please <a href="%s" target="_blank">leave a nice review</a> on WordPress. It will be a tremendous help for us!', 'spu' ), 'https://wordpress.org/support/view/plugin-reviews/popups?filter=5' ); ?></p>
|
31 |
+
<ul>
|
32 |
+
<li><?php echo sprintf(__('<a href="%s" target="_blank">Leave a nice review</a>'),'https://wordpress.org/support/view/plugin-reviews/popups?filter=5');?></li>
|
33 |
+
<li><?php echo sprintf(__('<a href="%s">I already did</a>'), admin_url('?spu_notice=rate_plugin'));?></li>
|
34 |
+
</ul>
|
35 |
+
</div><?php
|
36 |
+
}
|
37 |
+
|
38 |
+
public static function pair_plugins(){
|
39 |
+
?><div class="notice-info error">
|
40 |
+
<h3><i class=" dashicons-before dashicons-share-alt"></i>WordPress Popups Plugin error</h3>
|
41 |
+
<p><?php _e('The Popups premium was automatically deactivated.', 'spu');?></p>
|
42 |
+
<p><?php _e( 'Your current version of Popups premium it\'s not compatible with the core Popups plugin you just installed/updated. Please upgrade your premium version to at least 1.9.1 or downgrade the core version to 1.7.3 .', 'spu' ); ?></p>
|
43 |
+
<p><a href="<?= admin_url('?spu_notice=pair_plugins_dismiss');?>" class="button-primary"><?php _e('Dismiss','spu');?></a></p>
|
44 |
+
</div><?php
|
45 |
+
}
|
46 |
+
}
|
admin/includes/class-spu-upgrader.php
CHANGED
@@ -1,29 +1,29 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* Upgrader Class
|
5 |
-
*
|
6 |
-
* @description: Upgrade rutines and upgrade messages
|
7 |
-
* @since 1.3.1
|
8 |
-
* @version 1.0
|
9 |
-
*/
|
10 |
-
|
11 |
-
class SocialPopup_Upgrader {
|
12 |
-
|
13 |
-
public function upgrade_plugin() {
|
14 |
-
global $wpdb;
|
15 |
-
$current_version = get_option('spu-version');
|
16 |
-
|
17 |
-
if( !get_option('spu_plugin_updated') ) {
|
18 |
-
// show feedback box if updating plugin
|
19 |
-
if ( empty( $current_version ) ) {
|
20 |
-
$total = $wpdb->get_var( "SELECT count(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'spucpt'" );
|
21 |
-
if ( $total > 0 ) {
|
22 |
-
update_option( 'spu_plugin_updated', true );
|
23 |
-
}
|
24 |
-
} elseif ( ! empty( $current_version ) && version_compare( $current_version, SPU_VERSION, '<' ) ) {
|
25 |
-
update_option( 'spu_plugin_updated', true );
|
26 |
-
}
|
27 |
-
}
|
28 |
-
}
|
29 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* Upgrader Class
|
5 |
+
*
|
6 |
+
* @description: Upgrade rutines and upgrade messages
|
7 |
+
* @since 1.3.1
|
8 |
+
* @version 1.0
|
9 |
+
*/
|
10 |
+
|
11 |
+
class SocialPopup_Upgrader {
|
12 |
+
|
13 |
+
public function upgrade_plugin() {
|
14 |
+
global $wpdb;
|
15 |
+
$current_version = get_option('spu-version');
|
16 |
+
|
17 |
+
if( !get_option('spu_plugin_updated') ) {
|
18 |
+
// show feedback box if updating plugin
|
19 |
+
if ( empty( $current_version ) ) {
|
20 |
+
$total = $wpdb->get_var( "SELECT count(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'spucpt'" );
|
21 |
+
if ( $total > 0 ) {
|
22 |
+
update_option( 'spu_plugin_updated', true );
|
23 |
+
}
|
24 |
+
} elseif ( ! empty( $current_version ) && version_compare( $current_version, SPU_VERSION, '<' ) ) {
|
25 |
+
update_option( 'spu_plugin_updated', true );
|
26 |
+
}
|
27 |
+
}
|
28 |
+
}
|
29 |
}
|
admin/includes/tinymce-editor.php
CHANGED
@@ -1,38 +1,38 @@
|
|
1 |
-
<form name="form" autocomplete="off">
|
2 |
-
<div id="spu_editor" class="shortcode_editor" title="Insert popup link to page" style="display:none;height:500px">
|
3 |
-
<div style="display: none;"><!--hack for chrome-->
|
4 |
-
<input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
|
5 |
-
</div>
|
6 |
-
<table class="form-table">
|
7 |
-
<tr>
|
8 |
-
<td colspan="2">
|
9 |
-
<p>
|
10 |
-
<?php _e('Choose which popup you want to insert. This will generate an href link that you can use with text or images', 'spu');?>
|
11 |
-
</p>
|
12 |
-
</td>
|
13 |
-
</tr>
|
14 |
-
<tr>
|
15 |
-
<th><label for="spu_what"><?php _e( 'Choose:', 'spu' ); ?></label></th>
|
16 |
-
<td>
|
17 |
-
<select name="spu-post" id="spu-posts">
|
18 |
-
<option value=""><?php _e('Choose one','spu');?></option>
|
19 |
-
<?php
|
20 |
-
|
21 |
-
global $wpdb;
|
22 |
-
$popups = $wpdb->get_results( "SELECT post_title, ID FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'spucpt'");
|
23 |
-
|
24 |
-
// The Loop
|
25 |
-
if ( $popups ) {
|
26 |
-
foreach( $popups as $po ) {
|
27 |
-
echo '<option value="'.$po->ID.'">'.$po->post_title.'</option>"';
|
28 |
-
}
|
29 |
-
}
|
30 |
-
|
31 |
-
?>
|
32 |
-
</select>
|
33 |
-
</td>
|
34 |
-
</tr>
|
35 |
-
|
36 |
-
</table>
|
37 |
-
</div>
|
38 |
-
</form>
|
1 |
+
<form name="form" autocomplete="off">
|
2 |
+
<div id="spu_editor" class="shortcode_editor" title="Insert popup link to page" style="display:none;height:500px">
|
3 |
+
<div style="display: none;"><!--hack for chrome-->
|
4 |
+
<input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
|
5 |
+
</div>
|
6 |
+
<table class="form-table">
|
7 |
+
<tr>
|
8 |
+
<td colspan="2">
|
9 |
+
<p>
|
10 |
+
<?php _e('Choose which popup you want to insert. This will generate an href link that you can use with text or images', 'spu');?>
|
11 |
+
</p>
|
12 |
+
</td>
|
13 |
+
</tr>
|
14 |
+
<tr>
|
15 |
+
<th><label for="spu_what"><?php _e( 'Choose:', 'spu' ); ?></label></th>
|
16 |
+
<td>
|
17 |
+
<select name="spu-post" id="spu-posts">
|
18 |
+
<option value=""><?php _e('Choose one','spu');?></option>
|
19 |
+
<?php
|
20 |
+
|
21 |
+
global $wpdb;
|
22 |
+
$popups = $wpdb->get_results( "SELECT post_title, ID FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'spucpt'");
|
23 |
+
|
24 |
+
// The Loop
|
25 |
+
if ( $popups ) {
|
26 |
+
foreach( $popups as $po ) {
|
27 |
+
echo '<option value="'.$po->ID.'">'.$po->post_title.'</option>"';
|
28 |
+
}
|
29 |
+
}
|
30 |
+
|
31 |
+
?>
|
32 |
+
</select>
|
33 |
+
</td>
|
34 |
+
</tr>
|
35 |
+
|
36 |
+
</table>
|
37 |
+
</div>
|
38 |
+
</form>
|
admin/views/metaboxes/metabox-appearance.php
CHANGED
@@ -1,211 +1,211 @@
|
|
1 |
-
<?php
|
2 |
-
// Exit if accessed directly
|
3 |
-
if ( !defined( 'ABSPATH' ) ) exit;?>
|
4 |
-
|
5 |
-
<div class="spu-admin-options">
|
6 |
-
|
7 |
-
<?php do_action( 'spu/metaboxes/before_appearance_options', $opts );?>
|
8 |
-
<h3>Overlay</h3>
|
9 |
-
<table class="form-table">
|
10 |
-
<tr>
|
11 |
-
<th><label class="spu-label" for="spu_bgopacity"><?php _e( 'Overlay opacity', 'popups' ); ?></label></th>
|
12 |
-
<td>
|
13 |
-
<input type="number" id="spu_bgopacity" name="spu[css][bgopacity]" min="0" step="0.1" max="1" value="<?php echo esc_attr($opts['css']['bgopacity']); ?>" />
|
14 |
-
<p class="spu-help"><?php _e( 'Leave at 0 for no background. Max value is 1', 'popups' ); ?></p>
|
15 |
-
</td>
|
16 |
-
</tr>
|
17 |
-
<tr>
|
18 |
-
<th><label class="spu-label" for="spu_bgcolor"><?php _e( 'Overlay color', 'popups' ); ?></label></th>
|
19 |
-
<td>
|
20 |
-
<input id="spu_bgcolor" name="spu[css][overlay_color]" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['overlay_color']); ?>" />
|
21 |
-
</td>
|
22 |
-
</tr>
|
23 |
-
<?php do_action( 'spu/metaboxes/after_overlay_appearance', $opts );?>
|
24 |
-
<tr><th colspan="2"><?php if( ! defined('SPUP_VERSION') ) echo sprintf( __( 'On <a href="%s">Premium version</a> you can have full screen popups, or sticky popups, insert optin forms inside yours post and much more!','popups'), 'https://timersys.com/plugins/popups-premium/?utm_source=Plugin&utm_medium=appearance_overlay&utm_campaign=Popups%20Premium');?></th></tr>
|
25 |
-
</table>
|
26 |
-
<h3>Popup Background</h3>
|
27 |
-
<table class="form-table">
|
28 |
-
<tr>
|
29 |
-
<th><label class="spu-label" for="spu-background-color"><?php _e( 'Background color', 'popups' ); ?></label></th>
|
30 |
-
<td>
|
31 |
-
<input id="spu-background-color" name="spu[css][background_color]" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['background_color']); ?>" />
|
32 |
-
</td>
|
33 |
-
</tr>
|
34 |
-
<tr>
|
35 |
-
<th><label class="spu-label" for="spu_background_opacity"><?php _e( 'Background opacity', 'popups' ); ?></label></th>
|
36 |
-
<td>
|
37 |
-
<input type="number" id="spu_background_opacity" name="spu[css][background_opacity]" min="0" step="0.1" max="1" value="<?php echo esc_attr($opts['css']['background_opacity']); ?>" />
|
38 |
-
<p class="spu-help"><?php _e( 'Leave at 0 for no background. Max value is 1', 'popups' ); ?></p>
|
39 |
-
</td>
|
40 |
-
</tr>
|
41 |
-
<?php do_action( 'spu/metaboxes/after_background_appearance', $opts );?>
|
42 |
-
<tr><th colspan="2"><?php if( ! defined('SPUP_VERSION') ) echo sprintf( __( 'Check <a href="%s">Premium version</a> to add background images or choose a pre made optin theme!','popups'), 'https://timersys.com/plugins/popups-premium/?utm_source=Plugin&utm_medium=appearance_bg&utm_campaign=Popups%20Premium');?></th></tr>
|
43 |
-
</table>
|
44 |
-
<h3>Popup Box</h3>
|
45 |
-
<table class="form-table">
|
46 |
-
<tr class="hide-for-optins">
|
47 |
-
<th><label class="spu-label" for="spu-width"><?php _e( 'Box width', 'popups' ); ?></label></th>
|
48 |
-
<td>
|
49 |
-
<input id="spu-width" name="spu[css][width]" id="spu-box-width" type="text" class="small" value="<?php echo esc_attr($opts['css']['width']); ?>" />
|
50 |
-
<p class="spu-help"><?php _e( 'Max size the responsive popup will grow. You can use % or px.', 'popups' ); ?></p>
|
51 |
-
</td>
|
52 |
-
</tr>
|
53 |
-
<tr class="hide-for-optins">
|
54 |
-
<th><label class="spu-label" for="spu-padding"><?php _e( 'Padding', 'popups' ); ?></label></th>
|
55 |
-
<td>
|
56 |
-
<input id="spu-padding" name="spu[css][padding]" id="spu-box-padding" type="number" class="small" value="<?php echo esc_attr($opts['css']['padding']); ?>" />px
|
57 |
-
</td>
|
58 |
-
</tr>
|
59 |
-
<tr>
|
60 |
-
<th><label class="spu-label" for="spu-color"><?php _e( 'Text color', 'popups' ); ?></label></th>
|
61 |
-
<td>
|
62 |
-
<input id="spu-color" name="spu[css][color]" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['color']); ?>" />
|
63 |
-
</td>
|
64 |
-
</tr>
|
65 |
-
<?php do_action( 'spu/metaboxes/after_box_appearance', $opts );?>
|
66 |
-
</table>
|
67 |
-
<h3>Popup Shadow</h3>
|
68 |
-
<table class="form-table">
|
69 |
-
<tr>
|
70 |
-
<th><label class="spu-label" for="spu-shadow-color"><?php _e( 'Shadow Color', 'popups' ); ?></label></th>
|
71 |
-
<td>
|
72 |
-
<input id="spu-shadow-color" name="spu[css][shadow_color]" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['shadow_color']); ?>" />
|
73 |
-
</td>
|
74 |
-
</tr>
|
75 |
-
<tr>
|
76 |
-
<th><label class="spu-label" for="spu-shadow-type"><?php _e( 'Shadow Type', 'popups' ); ?></label></th>
|
77 |
-
<td>
|
78 |
-
<select name="spu[css][shadow_type]" id="spu-shadow-type">
|
79 |
-
<option value="inset" <?php selected('inset',esc_attr($opts['css']['shadow_type']));?>>Inset</option>
|
80 |
-
<option value="outset" <?php selected('outset',esc_attr($opts['css']['shadow_type']));?>>Outset</option>
|
81 |
-
</select>
|
82 |
-
</td>
|
83 |
-
</tr>
|
84 |
-
<tr>
|
85 |
-
<th><label class="spu-label" for="spu-shadow-x"><?php _e( 'X Offset', 'popups' ); ?></label></th>
|
86 |
-
<td>
|
87 |
-
<input id="spu-shadow-x" name="spu[css][shadow_x_offset]" type="number" step="1" class="small" value="<?php echo esc_attr($opts['css']['shadow_x_offset']); ?>" />px
|
88 |
-
</td>
|
89 |
-
</tr>
|
90 |
-
<tr>
|
91 |
-
<th><label class="spu-label" for="spu-shadow-y"><?php _e( 'Y Offset', 'popups' ); ?></label></th>
|
92 |
-
<td>
|
93 |
-
<input id="spu-shadow-y" name="spu[css][shadow_y_offset]" type="number" step="1" class="small" value="<?php echo esc_attr($opts['css']['shadow_y_offset']); ?>" />px
|
94 |
-
</td>
|
95 |
-
</tr>
|
96 |
-
<tr>
|
97 |
-
<th><label class="spu-label" for="spu-shadow-blur"><?php _e( 'Blur', 'popups' ); ?></label></th>
|
98 |
-
<td>
|
99 |
-
<input id="spu-shadow-blur" name="spu[css][shadow_blur]" type="number" step="1" class="small" value="<?php echo esc_attr($opts['css']['shadow_blur']); ?>" />px
|
100 |
-
</td>
|
101 |
-
</tr>
|
102 |
-
<tr>
|
103 |
-
<th><label class="spu-label" for="spu-shadow-spread"><?php _e( 'Spread', 'popups' ); ?></label></th>
|
104 |
-
<td>
|
105 |
-
<input id="spu-shadow-spread" name="spu[css][shadow_spread]" type="number" step="1" class="small" value="<?php echo esc_attr($opts['css']['shadow_spread']); ?>" />px
|
106 |
-
</td>
|
107 |
-
</tr>
|
108 |
-
<?php do_action( 'spu/metaboxes/after_shadow_appearance', $opts );?>
|
109 |
-
</table>
|
110 |
-
<h3>Border</h3>
|
111 |
-
|
112 |
-
<table class="form-table">
|
113 |
-
<tr>
|
114 |
-
<th><label class="spu-label" for="spu-border-color"><?php _e( 'Border color', 'popups' ); ?></label></th>
|
115 |
-
<td>
|
116 |
-
<input name="spu[css][border_color]" id="spu-border-color" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['border_color']); ?>" />
|
117 |
-
</td>
|
118 |
-
</tr>
|
119 |
-
<tr>
|
120 |
-
<th><label class="spu-label" for="spu-border-width"><?php _e( 'Border width', 'popups' ); ?></label></th>
|
121 |
-
<td>
|
122 |
-
<input name="spu[css][border_width]" id="spu-border-width" type="number" min="0" max="25" value="<?php echo esc_attr($opts['css']['border_width']); ?>" /> px
|
123 |
-
</td>
|
124 |
-
</tr>
|
125 |
-
<tr>
|
126 |
-
<th><label class="spu-label" for="spu-border-radius"><?php _e( 'Border radius', 'popups' ); ?></label></th>
|
127 |
-
<td>
|
128 |
-
<input name="spu[css][border_radius]" id="spu-border-radius" type="number" min="0" max="25" value="<?php echo esc_attr($opts['css']['border_radius']); ?>" /> px
|
129 |
-
</td>
|
130 |
-
</tr>
|
131 |
-
<tr>
|
132 |
-
<th><label class="spu-label" for="spu-border-type"><?php _e( 'Border type', 'popups' ); ?></label></th>
|
133 |
-
<td>
|
134 |
-
<select name="spu[css][border_type]" id="spu-border-type">
|
135 |
-
<option value="none" <?php selected('none',esc_attr($opts['css']['border_type']));?>>None</option>
|
136 |
-
<option value="solid" <?php selected('solid',esc_attr($opts['css']['border_type']));?>>Solid</option>
|
137 |
-
<option value="dotted" <?php selected('dotted',esc_attr($opts['css']['border_type']));?>>Dotted</option>
|
138 |
-
<option value="dashed" <?php selected('dashed',esc_attr($opts['css']['border_type']));?>>Dashed</option>
|
139 |
-
<option value="double" <?php selected('double',esc_attr($opts['css']['border_type']));?>>Double</option>
|
140 |
-
<option value="groove" <?php selected('groove',esc_attr($opts['css']['border_type']));?>>Groove</option>
|
141 |
-
<option value="inset" <?php selected('inset',esc_attr($opts['css']['border_type']));?>>Inset</option>
|
142 |
-
<option value="outset" <?php selected('outset',esc_attr($opts['css']['border_type']));?>>Outset</option>
|
143 |
-
<option value="ridge" <?php selected('ridge',esc_attr($opts['css']['border_type']));?>>Ridge</option>
|
144 |
-
</select>
|
145 |
-
</td>
|
146 |
-
</tr>
|
147 |
-
<?php do_action( 'spu/metaboxes/after_border_appearance', $opts );?>
|
148 |
-
</table>
|
149 |
-
<h3>Close</h3>
|
150 |
-
<table class="form-table">
|
151 |
-
<tr>
|
152 |
-
<th><label class="spu-label" for="spu-close-color"><?php _e( 'Color', 'popups' ); ?></label></th>
|
153 |
-
<td>
|
154 |
-
<input name="spu[css][close_color]" id="spu-close-color" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['close_color']); ?>" />
|
155 |
-
</td>
|
156 |
-
</tr>
|
157 |
-
<tr>
|
158 |
-
<th><label class="spu-label" for="spu-close-color"><?php _e( 'Hover Color', 'popups' ); ?></label></th>
|
159 |
-
<td>
|
160 |
-
<input name="spu[css][close_hover_color]" id="spu-close-color" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['close_hover_color']); ?>" />
|
161 |
-
</td>
|
162 |
-
</tr>
|
163 |
-
<tr>
|
164 |
-
<th><label class="spu-label" for="spu-close-color"><?php _e( 'Shadow Color', 'popups' ); ?></label></th>
|
165 |
-
<td>
|
166 |
-
<input name="spu[css][close_shadow_color]" id="spu-close-color" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['close_shadow_color']); ?>" />
|
167 |
-
</td>
|
168 |
-
</tr>
|
169 |
-
<tr>
|
170 |
-
<th><label class="spu-label" for="spu-close-size"><?php _e( 'Size', 'popups' ); ?></label></th>
|
171 |
-
<td>
|
172 |
-
<input name="spu[css][close_size]" id="spu-close-size" type="text" class="" value="<?php echo esc_attr($opts['css']['close_size']); ?>" />
|
173 |
-
<p class="spu-help"><?php _e( 'You can use px, em or rem units', 'popups' ); ?></p>
|
174 |
-
</td>
|
175 |
-
</tr>
|
176 |
-
<tr>
|
177 |
-
<th><label class="spu-label" for="spu-border-radius"><?php _e( 'Position', 'popups' ); ?></label></th>
|
178 |
-
<td>
|
179 |
-
<select name="spu[css][close_position]" id="spu-border-type">
|
180 |
-
<option value="top_right" <?php selected('top_right',esc_attr($opts['css']['close_position']));?>>Top right</option>
|
181 |
-
<option value="top_left" <?php selected('top_left',esc_attr($opts['css']['close_position']));?>>Top Left</option>
|
182 |
-
<option value="bottom_right" <?php selected('bottom_right',esc_attr($opts['css']['close_position']));?>>Bottom Right</option>
|
183 |
-
<option value="bottom_left" <?php selected('bottom_left',esc_attr($opts['css']['close_position']));?>>Bottom Left</option>
|
184 |
-
</select>
|
185 |
-
</td>
|
186 |
-
</tr>
|
187 |
-
<?php do_action( 'spu/metaboxes/after_close_appearance', $opts );?>
|
188 |
-
</table>
|
189 |
-
<h3>CSS</h3>
|
190 |
-
<table class="form-table">
|
191 |
-
<tr>
|
192 |
-
<th><label class="spu-label" for="spu-custom-css"><?php _e( 'Custom CSS', 'popups' ); ?></label></th>
|
193 |
-
<td>
|
194 |
-
<div id="custom_css_container">
|
195 |
-
<div name="custom_css" id="custom_css" style="border: 1px solid #DFDFDF; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; width: 100%; height: 200px; position: relative;"></div>
|
196 |
-
</div>
|
197 |
-
<?php
|
198 |
-
if( !isset( $opts['css']['custom_css'] ) ) {
|
199 |
-
$popup_id = get_the_id();
|
200 |
-
$opts['css']['custom_css'] = "/*
|
201 |
-
* Add custom CSS for this popup
|
202 |
-
* Be sure to start your rules with #spu-{$popup_id} { } and use !important when needed to override plugin rules
|
203 |
-
*/";
|
204 |
-
}
|
205 |
-
?>
|
206 |
-
<textarea name="spu[css][custom_css]" id="spu-custom-css" style="display: none;"><?php echo esc_attr($opts['css']['custom_css']); ?></textarea>
|
207 |
-
</td>
|
208 |
-
</tr>
|
209 |
-
</table>
|
210 |
-
<?php do_action( 'spu/metaboxes/after_appearance_options', $opts );?>
|
211 |
</div>
|
1 |
+
<?php
|
2 |
+
// Exit if accessed directly
|
3 |
+
if ( !defined( 'ABSPATH' ) ) exit;?>
|
4 |
+
|
5 |
+
<div class="spu-admin-options">
|
6 |
+
|
7 |
+
<?php do_action( 'spu/metaboxes/before_appearance_options', $opts );?>
|
8 |
+
<h3>Overlay</h3>
|
9 |
+
<table class="form-table">
|
10 |
+
<tr>
|
11 |
+
<th><label class="spu-label" for="spu_bgopacity"><?php _e( 'Overlay opacity', 'popups' ); ?></label></th>
|
12 |
+
<td>
|
13 |
+
<input type="number" id="spu_bgopacity" name="spu[css][bgopacity]" min="0" step="0.1" max="1" value="<?php echo esc_attr($opts['css']['bgopacity']); ?>" />
|
14 |
+
<p class="spu-help"><?php _e( 'Leave at 0 for no background. Max value is 1', 'popups' ); ?></p>
|
15 |
+
</td>
|
16 |
+
</tr>
|
17 |
+
<tr>
|
18 |
+
<th><label class="spu-label" for="spu_bgcolor"><?php _e( 'Overlay color', 'popups' ); ?></label></th>
|
19 |
+
<td>
|
20 |
+
<input id="spu_bgcolor" name="spu[css][overlay_color]" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['overlay_color']); ?>" />
|
21 |
+
</td>
|
22 |
+
</tr>
|
23 |
+
<?php do_action( 'spu/metaboxes/after_overlay_appearance', $opts );?>
|
24 |
+
<tr><th colspan="2"><?php if( ! defined('SPUP_VERSION') ) echo sprintf( __( 'On <a href="%s">Premium version</a> you can have full screen popups, or sticky popups, insert optin forms inside yours post and much more!','popups'), 'https://timersys.com/plugins/popups-premium/?utm_source=Plugin&utm_medium=appearance_overlay&utm_campaign=Popups%20Premium');?></th></tr>
|
25 |
+
</table>
|
26 |
+
<h3>Popup Background</h3>
|
27 |
+
<table class="form-table">
|
28 |
+
<tr>
|
29 |
+
<th><label class="spu-label" for="spu-background-color"><?php _e( 'Background color', 'popups' ); ?></label></th>
|
30 |
+
<td>
|
31 |
+
<input id="spu-background-color" name="spu[css][background_color]" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['background_color']); ?>" />
|
32 |
+
</td>
|
33 |
+
</tr>
|
34 |
+
<tr>
|
35 |
+
<th><label class="spu-label" for="spu_background_opacity"><?php _e( 'Background opacity', 'popups' ); ?></label></th>
|
36 |
+
<td>
|
37 |
+
<input type="number" id="spu_background_opacity" name="spu[css][background_opacity]" min="0" step="0.1" max="1" value="<?php echo esc_attr($opts['css']['background_opacity']); ?>" />
|
38 |
+
<p class="spu-help"><?php _e( 'Leave at 0 for no background. Max value is 1', 'popups' ); ?></p>
|
39 |
+
</td>
|
40 |
+
</tr>
|
41 |
+
<?php do_action( 'spu/metaboxes/after_background_appearance', $opts );?>
|
42 |
+
<tr><th colspan="2"><?php if( ! defined('SPUP_VERSION') ) echo sprintf( __( 'Check <a href="%s">Premium version</a> to add background images or choose a pre made optin theme!','popups'), 'https://timersys.com/plugins/popups-premium/?utm_source=Plugin&utm_medium=appearance_bg&utm_campaign=Popups%20Premium');?></th></tr>
|
43 |
+
</table>
|
44 |
+
<h3>Popup Box</h3>
|
45 |
+
<table class="form-table">
|
46 |
+
<tr class="hide-for-optins">
|
47 |
+
<th><label class="spu-label" for="spu-width"><?php _e( 'Box width', 'popups' ); ?></label></th>
|
48 |
+
<td>
|
49 |
+
<input id="spu-width" name="spu[css][width]" id="spu-box-width" type="text" class="small" value="<?php echo esc_attr($opts['css']['width']); ?>" />
|
50 |
+
<p class="spu-help"><?php _e( 'Max size the responsive popup will grow. You can use % or px.', 'popups' ); ?></p>
|
51 |
+
</td>
|
52 |
+
</tr>
|
53 |
+
<tr class="hide-for-optins">
|
54 |
+
<th><label class="spu-label" for="spu-padding"><?php _e( 'Padding', 'popups' ); ?></label></th>
|
55 |
+
<td>
|
56 |
+
<input id="spu-padding" name="spu[css][padding]" id="spu-box-padding" type="number" class="small" value="<?php echo esc_attr($opts['css']['padding']); ?>" />px
|
57 |
+
</td>
|
58 |
+
</tr>
|
59 |
+
<tr>
|
60 |
+
<th><label class="spu-label" for="spu-color"><?php _e( 'Text color', 'popups' ); ?></label></th>
|
61 |
+
<td>
|
62 |
+
<input id="spu-color" name="spu[css][color]" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['color']); ?>" />
|
63 |
+
</td>
|
64 |
+
</tr>
|
65 |
+
<?php do_action( 'spu/metaboxes/after_box_appearance', $opts );?>
|
66 |
+
</table>
|
67 |
+
<h3>Popup Shadow</h3>
|
68 |
+
<table class="form-table">
|
69 |
+
<tr>
|
70 |
+
<th><label class="spu-label" for="spu-shadow-color"><?php _e( 'Shadow Color', 'popups' ); ?></label></th>
|
71 |
+
<td>
|
72 |
+
<input id="spu-shadow-color" name="spu[css][shadow_color]" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['shadow_color']); ?>" />
|
73 |
+
</td>
|
74 |
+
</tr>
|
75 |
+
<tr>
|
76 |
+
<th><label class="spu-label" for="spu-shadow-type"><?php _e( 'Shadow Type', 'popups' ); ?></label></th>
|
77 |
+
<td>
|
78 |
+
<select name="spu[css][shadow_type]" id="spu-shadow-type">
|
79 |
+
<option value="inset" <?php selected('inset',esc_attr($opts['css']['shadow_type']));?>>Inset</option>
|
80 |
+
<option value="outset" <?php selected('outset',esc_attr($opts['css']['shadow_type']));?>>Outset</option>
|
81 |
+
</select>
|
82 |
+
</td>
|
83 |
+
</tr>
|
84 |
+
<tr>
|
85 |
+
<th><label class="spu-label" for="spu-shadow-x"><?php _e( 'X Offset', 'popups' ); ?></label></th>
|
86 |
+
<td>
|
87 |
+
<input id="spu-shadow-x" name="spu[css][shadow_x_offset]" type="number" step="1" class="small" value="<?php echo esc_attr($opts['css']['shadow_x_offset']); ?>" />px
|
88 |
+
</td>
|
89 |
+
</tr>
|
90 |
+
<tr>
|
91 |
+
<th><label class="spu-label" for="spu-shadow-y"><?php _e( 'Y Offset', 'popups' ); ?></label></th>
|
92 |
+
<td>
|
93 |
+
<input id="spu-shadow-y" name="spu[css][shadow_y_offset]" type="number" step="1" class="small" value="<?php echo esc_attr($opts['css']['shadow_y_offset']); ?>" />px
|
94 |
+
</td>
|
95 |
+
</tr>
|
96 |
+
<tr>
|
97 |
+
<th><label class="spu-label" for="spu-shadow-blur"><?php _e( 'Blur', 'popups' ); ?></label></th>
|
98 |
+
<td>
|
99 |
+
<input id="spu-shadow-blur" name="spu[css][shadow_blur]" type="number" step="1" class="small" value="<?php echo esc_attr($opts['css']['shadow_blur']); ?>" />px
|
100 |
+
</td>
|
101 |
+
</tr>
|
102 |
+
<tr>
|
103 |
+
<th><label class="spu-label" for="spu-shadow-spread"><?php _e( 'Spread', 'popups' ); ?></label></th>
|
104 |
+
<td>
|
105 |
+
<input id="spu-shadow-spread" name="spu[css][shadow_spread]" type="number" step="1" class="small" value="<?php echo esc_attr($opts['css']['shadow_spread']); ?>" />px
|
106 |
+
</td>
|
107 |
+
</tr>
|
108 |
+
<?php do_action( 'spu/metaboxes/after_shadow_appearance', $opts );?>
|
109 |
+
</table>
|
110 |
+
<h3>Border</h3>
|
111 |
+
|
112 |
+
<table class="form-table">
|
113 |
+
<tr>
|
114 |
+
<th><label class="spu-label" for="spu-border-color"><?php _e( 'Border color', 'popups' ); ?></label></th>
|
115 |
+
<td>
|
116 |
+
<input name="spu[css][border_color]" id="spu-border-color" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['border_color']); ?>" />
|
117 |
+
</td>
|
118 |
+
</tr>
|
119 |
+
<tr>
|
120 |
+
<th><label class="spu-label" for="spu-border-width"><?php _e( 'Border width', 'popups' ); ?></label></th>
|
121 |
+
<td>
|
122 |
+
<input name="spu[css][border_width]" id="spu-border-width" type="number" min="0" max="25" value="<?php echo esc_attr($opts['css']['border_width']); ?>" /> px
|
123 |
+
</td>
|
124 |
+
</tr>
|
125 |
+
<tr>
|
126 |
+
<th><label class="spu-label" for="spu-border-radius"><?php _e( 'Border radius', 'popups' ); ?></label></th>
|
127 |
+
<td>
|
128 |
+
<input name="spu[css][border_radius]" id="spu-border-radius" type="number" min="0" max="25" value="<?php echo esc_attr($opts['css']['border_radius']); ?>" /> px
|
129 |
+
</td>
|
130 |
+
</tr>
|
131 |
+
<tr>
|
132 |
+
<th><label class="spu-label" for="spu-border-type"><?php _e( 'Border type', 'popups' ); ?></label></th>
|
133 |
+
<td>
|
134 |
+
<select name="spu[css][border_type]" id="spu-border-type">
|
135 |
+
<option value="none" <?php selected('none',esc_attr($opts['css']['border_type']));?>>None</option>
|
136 |
+
<option value="solid" <?php selected('solid',esc_attr($opts['css']['border_type']));?>>Solid</option>
|
137 |
+
<option value="dotted" <?php selected('dotted',esc_attr($opts['css']['border_type']));?>>Dotted</option>
|
138 |
+
<option value="dashed" <?php selected('dashed',esc_attr($opts['css']['border_type']));?>>Dashed</option>
|
139 |
+
<option value="double" <?php selected('double',esc_attr($opts['css']['border_type']));?>>Double</option>
|
140 |
+
<option value="groove" <?php selected('groove',esc_attr($opts['css']['border_type']));?>>Groove</option>
|
141 |
+
<option value="inset" <?php selected('inset',esc_attr($opts['css']['border_type']));?>>Inset</option>
|
142 |
+
<option value="outset" <?php selected('outset',esc_attr($opts['css']['border_type']));?>>Outset</option>
|
143 |
+
<option value="ridge" <?php selected('ridge',esc_attr($opts['css']['border_type']));?>>Ridge</option>
|
144 |
+
</select>
|
145 |
+
</td>
|
146 |
+
</tr>
|
147 |
+
<?php do_action( 'spu/metaboxes/after_border_appearance', $opts );?>
|
148 |
+
</table>
|
149 |
+
<h3>Close</h3>
|
150 |
+
<table class="form-table">
|
151 |
+
<tr>
|
152 |
+
<th><label class="spu-label" for="spu-close-color"><?php _e( 'Color', 'popups' ); ?></label></th>
|
153 |
+
<td>
|
154 |
+
<input name="spu[css][close_color]" id="spu-close-color" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['close_color']); ?>" />
|
155 |
+
</td>
|
156 |
+
</tr>
|
157 |
+
<tr>
|
158 |
+
<th><label class="spu-label" for="spu-close-color"><?php _e( 'Hover Color', 'popups' ); ?></label></th>
|
159 |
+
<td>
|
160 |
+
<input name="spu[css][close_hover_color]" id="spu-close-color" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['close_hover_color']); ?>" />
|
161 |
+
</td>
|
162 |
+
</tr>
|
163 |
+
<tr>
|
164 |
+
<th><label class="spu-label" for="spu-close-color"><?php _e( 'Shadow Color', 'popups' ); ?></label></th>
|
165 |
+
<td>
|
166 |
+
<input name="spu[css][close_shadow_color]" id="spu-close-color" type="text" class="spu-color-field" value="<?php echo esc_attr($opts['css']['close_shadow_color']); ?>" />
|
167 |
+
</td>
|
168 |
+
</tr>
|
169 |
+
<tr>
|
170 |
+
<th><label class="spu-label" for="spu-close-size"><?php _e( 'Size', 'popups' ); ?></label></th>
|
171 |
+
<td>
|
172 |
+
<input name="spu[css][close_size]" id="spu-close-size" type="text" class="" value="<?php echo esc_attr($opts['css']['close_size']); ?>" />
|
173 |
+
<p class="spu-help"><?php _e( 'You can use px, em or rem units', 'popups' ); ?></p>
|
174 |
+
</td>
|
175 |
+
</tr>
|
176 |
+
<tr>
|
177 |
+
<th><label class="spu-label" for="spu-border-radius"><?php _e( 'Position', 'popups' ); ?></label></th>
|
178 |
+
<td>
|
179 |
+
<select name="spu[css][close_position]" id="spu-border-type">
|
180 |
+
<option value="top_right" <?php selected('top_right',esc_attr($opts['css']['close_position']));?>>Top right</option>
|
181 |
+
<option value="top_left" <?php selected('top_left',esc_attr($opts['css']['close_position']));?>>Top Left</option>
|
182 |
+
<option value="bottom_right" <?php selected('bottom_right',esc_attr($opts['css']['close_position']));?>>Bottom Right</option>
|
183 |
+
<option value="bottom_left" <?php selected('bottom_left',esc_attr($opts['css']['close_position']));?>>Bottom Left</option>
|
184 |
+
</select>
|
185 |
+
</td>
|
186 |
+
</tr>
|
187 |
+
<?php do_action( 'spu/metaboxes/after_close_appearance', $opts );?>
|
188 |
+
</table>
|
189 |
+
<h3>CSS</h3>
|
190 |
+
<table class="form-table">
|
191 |
+
<tr>
|
192 |
+
<th><label class="spu-label" for="spu-custom-css"><?php _e( 'Custom CSS', 'popups' ); ?></label></th>
|
193 |
+
<td>
|
194 |
+
<div id="custom_css_container">
|
195 |
+
<div name="custom_css" id="custom_css" style="border: 1px solid #DFDFDF; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; width: 100%; height: 200px; position: relative;"></div>
|
196 |
+
</div>
|
197 |
+
<?php
|
198 |
+
if( !isset( $opts['css']['custom_css'] ) ) {
|
199 |
+
$popup_id = get_the_id();
|
200 |
+
$opts['css']['custom_css'] = "/*
|
201 |
+
* Add custom CSS for this popup
|
202 |
+
* Be sure to start your rules with #spu-{$popup_id} { } and use !important when needed to override plugin rules
|
203 |
+
*/";
|
204 |
+
}
|
205 |
+
?>
|
206 |
+
<textarea name="spu[css][custom_css]" id="spu-custom-css" style="display: none;"><?php echo esc_attr($opts['css']['custom_css']); ?></textarea>
|
207 |
+
</td>
|
208 |
+
</tr>
|
209 |
+
</table>
|
210 |
+
<?php do_action( 'spu/metaboxes/after_appearance_options', $opts );?>
|
211 |
</div>
|
admin/views/metaboxes/metabox-donate.php
CHANGED
@@ -1,16 +1,16 @@
|
|
1 |
-
<?php
|
2 |
-
// Exit if accessed directly
|
3 |
-
if ( !defined( 'ABSPATH' ) ) exit;
|
4 |
-
?>
|
5 |
-
|
6 |
-
<p><?php _e( 'If you like this plugin, consider supporting it by donating.', 'popups' );?></p>
|
7 |
-
|
8 |
-
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=K4T6L69EV9G2Q" class="button-primary"><?php _e( 'Donate with PayPal', 'popups' );?></a>
|
9 |
-
|
10 |
-
<p><?php _e( 'Some other ways to support this plugin', 'popups' );?></p>
|
11 |
-
<ul class="ul-square">
|
12 |
-
<li><a href="http://wordpress.org/support/view/plugin-reviews/popups?rate=5#postform" target="_blank"><?php _e( 'Leave a ★★★★★ review on WordPress.org', 'popups' );?></a></li>
|
13 |
-
<li><a href="https://timersys.com/free-plugins/popups/" target="_blank"><?php _e( 'Write about Popups on your blog', 'popups' );?></a></li>
|
14 |
-
<li><a href="http://twitter.com/intent/tweet/?text=I+am+using+Social+PopUP+on+my+WordPress+site.+It%27s+great%21&via=chifliiii&url=http%3A%2F%2Fwordpress.org%2Fplugins%2Fpopups%2F" target="_blank"><?php _e( 'Tweet about Popups', 'popups' );?></a></li>
|
15 |
-
<li><a href="http://wordpress.org/plugins/popups/#compatibility"><?php _e( 'Vote "works" on the WordPress.org plugin page', 'popups' );?></a></li>
|
16 |
</ul>
|
1 |
+
<?php
|
2 |
+
// Exit if accessed directly
|
3 |
+
if ( !defined( 'ABSPATH' ) ) exit;
|
4 |
+
?>
|
5 |
+
|
6 |
+
<p><?php _e( 'If you like this plugin, consider supporting it by donating.', 'popups' );?></p>
|
7 |
+
|
8 |
+
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=K4T6L69EV9G2Q" class="button-primary"><?php _e( 'Donate with PayPal', 'popups' );?></a>
|
9 |
+
|
10 |
+
<p><?php _e( 'Some other ways to support this plugin', 'popups' );?></p>
|
11 |
+
<ul class="ul-square">
|
12 |
+
<li><a href="http://wordpress.org/support/view/plugin-reviews/popups?rate=5#postform" target="_blank"><?php _e( 'Leave a ★★★★★ review on WordPress.org', 'popups' );?></a></li>
|
13 |
+
<li><a href="https://timersys.com/free-plugins/popups/" target="_blank"><?php _e( 'Write about Popups on your blog', 'popups' );?></a></li>
|
14 |
+
<li><a href="http://twitter.com/intent/tweet/?text=I+am+using+Social+PopUP+on+my+WordPress+site.+It%27s+great%21&via=chifliiii&url=http%3A%2F%2Fwordpress.org%2Fplugins%2Fpopups%2F" target="_blank"><?php _e( 'Tweet about Popups', 'popups' );?></a></li>
|
15 |
+
<li><a href="http://wordpress.org/plugins/popups/#compatibility"><?php _e( 'Vote "works" on the WordPress.org plugin page', 'popups' );?></a></li>
|
16 |
</ul>
|
admin/views/metaboxes/metabox-help.php
CHANGED
@@ -1,67 +1,67 @@
|
|
1 |
-
<?php
|
2 |
-
// Exit if accessed directly
|
3 |
-
if ( !defined( 'ABSPATH' ) ) exit;
|
4 |
-
?>
|
5 |
-
|
6 |
-
<p><?php _e( 'You have some social shortcodes to use that will print a Facebook like, a Google+ Follow and a Twitter follow. Check the available options and <strong>configure them with your social accounts</strong>:', 'popups' );?></p>
|
7 |
-
|
8 |
-
<p><strong><?php _e( 'Facebook Page', 'popups' );?>:</strong></p>
|
9 |
-
<p>
|
10 |
-
[spu-facebook-page href="" name="" show_faces="" hide_cover="" width=""]
|
11 |
-
</p>
|
12 |
-
<a href="fb-opts" onclick="jQuery('#fbpage-opts').slideToggle();return false;"><?php _e( 'View Facebook Page Options', 'popups' );?></a>
|
13 |
-
<ul id="fbpage-opts" style="display:none;">
|
14 |
-
<li><b>href:</b> <?php _e( 'Your Facebook page url', 'popups' );?></li>
|
15 |
-
<li><b>name:</b> <?php _e( 'Your page name', 'popups' );?></li>
|
16 |
-
<li><b>show_faces:</b> <?php _e( 'true|false <b>Default value:</b> true', 'popups' );?></li>
|
17 |
-
<li><b>hide_cover:</b> <?php _e( 'true|false <b>Default value:</b> false', 'popups' );?></li>
|
18 |
-
<li><b>width:</b> <?php _e( 'number <b>Default value:</b> 500', 'popups' );?></b></li>
|
19 |
-
</ul>
|
20 |
-
|
21 |
-
<p><strong><?php _e( 'Facebook Button', 'popups' );?>:</strong></p>
|
22 |
-
<p>
|
23 |
-
[spu-facebook href="" layout="" show_faces="" share="" action="" width=""]
|
24 |
-
</p>
|
25 |
-
<a href="fb-opts" onclick="jQuery('#fb-opts').slideToggle();return false;"><?php _e( 'View Facebook Options', 'popups' );?></a>
|
26 |
-
<ul id="fb-opts" style="display:none;">
|
27 |
-
<li><b>href:</b> <?php _e( 'Your Facebook page url', 'popups' );?></li>
|
28 |
-
<li><b>layout:</b> <?php _e( 'standard, box_count, button <b>Default value:</b> button_count', 'popups' );?></li>
|
29 |
-
<li><b>show_faces:</b> <?php _e( 'true <b>Default value:</b> false', 'popups' );?></li>
|
30 |
-
<li><b>share:</b> <?php _e( 'true <b>Default value:</b> false', 'popups' );?></li>
|
31 |
-
<li><b>action:</b> <?php _e( 'recommend <b>Default value:</b> like', 'popups' );?></li>
|
32 |
-
<li><b>width:</b> <?php _e( 'number <b>Default value:</b>', 'popups' );?></li>
|
33 |
-
</ul>
|
34 |
-
<p><strong><?php _e( 'Google+ Button', 'popups' );?>:</strong></p>
|
35 |
-
<p>
|
36 |
-
[spu-google url="" size="" annotation=""]
|
37 |
-
</p>
|
38 |
-
<a href="go-opts" onclick="jQuery('#go-opts').slideToggle();return false;"><?php _e( 'View Google+ Options', 'popups' );?></a>
|
39 |
-
<ul id="go-opts" style="display:none;">
|
40 |
-
<li><b>url:</b> <?php _e( 'Your Google+ url', 'popups' );?></li>
|
41 |
-
<li><b>type:</b> g-plusone, g-follow <?php _e( '<b>Default value:</b>', 'popups' );?>g-plusone</li>
|
42 |
-
<li><b>size:</b> <?php _e( 'small, standard, tall <b>Default value:</b> medium', 'popups' );?></li>
|
43 |
-
<li><b>annotation:</b> <?php _e( 'inline, none <b>Default value:</b> bubble', 'popups' );?></li>
|
44 |
-
</ul>
|
45 |
-
<p><strong><?php _e( 'Twitter Button', 'popups' );?>:</strong></p>
|
46 |
-
<p>
|
47 |
-
[spu-twitter user="" show_count="" size="" lang=""]
|
48 |
-
</p>
|
49 |
-
<a href="tw-opts" onclick="jQuery('#tw-opts').slideToggle();return false;"><?php _e( 'View Twitter Options', 'popups' );?></a>
|
50 |
-
<ul id="tw-opts" style="display:none;">
|
51 |
-
<li><b>user:</b> <?php _e( 'Your Twitter user <b>Default value: </b>', 'popups' ); echo ' ' . apply_filters( 'spu/social/tw_user', 'chifliiiii' ); ?></li>
|
52 |
-
<li><b>show_count:</b> <?php _e( 'false <b>Default value:</b> true', 'popups' );?></li>
|
53 |
-
<li><b>size:</b> <?php _e( 'large <b>Default value:</b> ""', 'popups' );?></li>
|
54 |
-
<li><b>lang:</b> </li>
|
55 |
-
</ul>
|
56 |
-
<h3 style="padding-left:0;margin: 20px 0;"><strong><?php _e('Other available Shortcodes:', 'popups' );?></strong></h3>
|
57 |
-
<p><strong><?php _e( 'Close Button', 'popups' );?>:</strong></p>
|
58 |
-
<p>
|
59 |
-
[spu-close class="" text="" align="" conversion="false"]
|
60 |
-
</p>
|
61 |
-
<a href="close-opts" onclick="jQuery('#close-opts').slideToggle();return false;"><?php _e( 'View Close shortcode Options', 'popups' );?></a>
|
62 |
-
<ul id="close-opts" style="display:none;">
|
63 |
-
<li><b>class:</b> <?php _e( 'Pass a custom class to style your button', 'popups' );?></li>
|
64 |
-
<li><b>text:</b> <?php _e( 'Button label - <b>Default value:</b> Close', 'popups' );?></li>
|
65 |
-
<li><b>conversion:</b> <?php _e( 'Conversion button?- <b>Default value:</b> False', 'popups' );?></li>
|
66 |
-
<li><b>align:</b> <?php _e( 'left, right, center, none - <b>Default value:</b> center', 'popups' );?></li>
|
67 |
-
</ul>
|
1 |
+
<?php
|
2 |
+
// Exit if accessed directly
|
3 |
+
if ( !defined( 'ABSPATH' ) ) exit;
|
4 |
+
?>
|
5 |
+
|
6 |
+
<p><?php _e( 'You have some social shortcodes to use that will print a Facebook like, a Google+ Follow and a Twitter follow. Check the available options and <strong>configure them with your social accounts</strong>:', 'popups' );?></p>
|
7 |
+
|
8 |
+
<p><strong><?php _e( 'Facebook Page', 'popups' );?>:</strong></p>
|
9 |
+
<p>
|
10 |
+
[spu-facebook-page href="" name="" show_faces="" hide_cover="" width=""]
|
11 |
+
</p>
|
12 |
+
<a href="fb-opts" onclick="jQuery('#fbpage-opts').slideToggle();return false;"><?php _e( 'View Facebook Page Options', 'popups' );?></a>
|
13 |
+
<ul id="fbpage-opts" style="display:none;">
|
14 |
+
<li><b>href:</b> <?php _e( 'Your Facebook page url', 'popups' );?></li>
|
15 |
+
<li><b>name:</b> <?php _e( 'Your page name', 'popups' );?></li>
|
16 |
+
<li><b>show_faces:</b> <?php _e( 'true|false <b>Default value:</b> true', 'popups' );?></li>
|
17 |
+
<li><b>hide_cover:</b> <?php _e( 'true|false <b>Default value:</b> false', 'popups' );?></li>
|
18 |
+
<li><b>width:</b> <?php _e( 'number <b>Default value:</b> 500', 'popups' );?></b></li>
|
19 |
+
</ul>
|
20 |
+
|
21 |
+
<p><strong><?php _e( 'Facebook Button', 'popups' );?>:</strong></p>
|
22 |
+
<p>
|
23 |
+
[spu-facebook href="" layout="" show_faces="" share="" action="" width=""]
|
24 |
+
</p>
|
25 |
+
<a href="fb-opts" onclick="jQuery('#fb-opts').slideToggle();return false;"><?php _e( 'View Facebook Options', 'popups' );?></a>
|
26 |
+
<ul id="fb-opts" style="display:none;">
|
27 |
+
<li><b>href:</b> <?php _e( 'Your Facebook page url', 'popups' );?></li>
|
28 |
+
<li><b>layout:</b> <?php _e( 'standard, box_count, button <b>Default value:</b> button_count', 'popups' );?></li>
|
29 |
+
<li><b>show_faces:</b> <?php _e( 'true <b>Default value:</b> false', 'popups' );?></li>
|
30 |
+
<li><b>share:</b> <?php _e( 'true <b>Default value:</b> false', 'popups' );?></li>
|
31 |
+
<li><b>action:</b> <?php _e( 'recommend <b>Default value:</b> like', 'popups' );?></li>
|
32 |
+
<li><b>width:</b> <?php _e( 'number <b>Default value:</b>', 'popups' );?></li>
|
33 |
+
</ul>
|
34 |
+
<p><strong><?php _e( 'Google+ Button', 'popups' );?>:</strong></p>
|
35 |
+
<p>
|
36 |
+
[spu-google url="" size="" annotation=""]
|
37 |
+
</p>
|
38 |
+
<a href="go-opts" onclick="jQuery('#go-opts').slideToggle();return false;"><?php _e( 'View Google+ Options', 'popups' );?></a>
|
39 |
+
<ul id="go-opts" style="display:none;">
|
40 |
+
<li><b>url:</b> <?php _e( 'Your Google+ url', 'popups' );?></li>
|
41 |
+
<li><b>type:</b> g-plusone, g-follow <?php _e( '<b>Default value:</b>', 'popups' );?>g-plusone</li>
|
42 |
+
<li><b>size:</b> <?php _e( 'small, standard, tall <b>Default value:</b> medium', 'popups' );?></li>
|
43 |
+
<li><b>annotation:</b> <?php _e( 'inline, none <b>Default value:</b> bubble', 'popups' );?></li>
|
44 |
+
</ul>
|
45 |
+
<p><strong><?php _e( 'Twitter Button', 'popups' );?>:</strong></p>
|
46 |
+
<p>
|
47 |
+
[spu-twitter user="" show_count="" size="" lang=""]
|
48 |
+
</p>
|
49 |
+
<a href="tw-opts" onclick="jQuery('#tw-opts').slideToggle();return false;"><?php _e( 'View Twitter Options', 'popups' );?></a>
|
50 |
+
<ul id="tw-opts" style="display:none;">
|
51 |
+
<li><b>user:</b> <?php _e( 'Your Twitter user <b>Default value: </b>', 'popups' ); echo ' ' . apply_filters( 'spu/social/tw_user', 'chifliiiii' ); ?></li>
|
52 |
+
<li><b>show_count:</b> <?php _e( 'false <b>Default value:</b> true', 'popups' );?></li>
|
53 |
+
<li><b>size:</b> <?php _e( 'large <b>Default value:</b> ""', 'popups' );?></li>
|
54 |
+
<li><b>lang:</b> </li>
|
55 |
+
</ul>
|
56 |
+
<h3 style="padding-left:0;margin: 20px 0;"><strong><?php _e('Other available Shortcodes:', 'popups' );?></strong></h3>
|
57 |
+
<p><strong><?php _e( 'Close Button', 'popups' );?>:</strong></p>
|
58 |
+
<p>
|
59 |
+
[spu-close class="" text="" align="" conversion="false"]
|
60 |
+
</p>
|
61 |
+
<a href="close-opts" onclick="jQuery('#close-opts').slideToggle();return false;"><?php _e( 'View Close shortcode Options', 'popups' );?></a>
|
62 |
+
<ul id="close-opts" style="display:none;">
|
63 |
+
<li><b>class:</b> <?php _e( 'Pass a custom class to style your button', 'popups' );?></li>
|
64 |
+
<li><b>text:</b> <?php _e( 'Button label - <b>Default value:</b> Close', 'popups' );?></li>
|
65 |
+
<li><b>conversion:</b> <?php _e( 'Conversion button?- <b>Default value:</b> False', 'popups' );?></li>
|
66 |
+
<li><b>align:</b> <?php _e( 'left, right, center, none - <b>Default value:</b> center', 'popups' );?></li>
|
67 |
+
</ul>
|
admin/views/metaboxes/metabox-options.php
CHANGED
@@ -1,141 +1,141 @@
|
|
1 |
-
<?php
|
2 |
-
// Exit if accessed directly
|
3 |
-
if ( !defined( 'ABSPATH' ) ) exit;?>
|
4 |
-
<div class="spu-admin-options">
|
5 |
-
<h3>Position</h3>
|
6 |
-
<table class="form-table">
|
7 |
-
|
8 |
-
<?php do_action( 'spu/metaboxes/before_display_options', $opts );?>
|
9 |
-
<tr valign="top">
|
10 |
-
<th><label for="spu_position"><?php _e( 'Box Position', 'popups' ); ?></label></th>
|
11 |
-
<td>
|
12 |
-
<select id="spu_position" name="spu[css][position]" class="widefat">
|
13 |
-
<option value="centered" <?php selected($opts['css']['position'], 'centered'); ?>><?php _e( 'Centered', 'popups' ); ?></option>
|
14 |
-
<option value="top-left" <?php selected($opts['css']['position'], 'top-left'); ?>><?php _e( 'Top Left', 'popups' ); ?></option>
|
15 |
-
<option value="top-right" <?php selected($opts['css']['position'], 'top-right'); ?>><?php _e( 'Top Right', 'popups' ); ?></option>
|
16 |
-
<option value="bottom-left" <?php selected($opts['css']['position'], 'bottom-left'); ?>><?php _e( 'Bottom Left', 'popups' ); ?></option>
|
17 |
-
<option value="bottom-right" <?php selected($opts['css']['position'], 'bottom-right'); ?>><?php _e( 'Bottom Right', 'popups' ); ?></option>
|
18 |
-
<option value="top-bar" <?php selected($opts['css']['position'], 'top-bar'); ?>><?php _e( 'Top Bar', 'popups' ); ?></option>
|
19 |
-
<option value="bottom-bar" <?php selected($opts['css']['position'], 'bottom-bar'); ?>><?php _e( 'Bottom Bar', 'popups' ); ?></option>
|
20 |
-
<?php do_action( 'spu/metaboxes/positions', $opts );?>
|
21 |
-
</select>
|
22 |
-
</td>
|
23 |
-
<td colspan="2"></td>
|
24 |
-
</tr>
|
25 |
-
<tr><th colspan="2"><?php if( ! defined('SPUP_VERSION') ) echo sprintf( __( 'On <a href="%s">Premium version</a> there are more cool positions and popup styles.','popups'), 'https://timersys.com/plugins/popups-premium/?utm_source=Plugin&utm_medium=options_position&utm_campaign=Popups%20Premium');?></th></tr>
|
26 |
-
<?php do_action( 'spu/metaboxes/after_position_options', $opts );?>
|
27 |
-
</table>
|
28 |
-
<h3>Trigger</h3>
|
29 |
-
<table class="form-table">
|
30 |
-
<tr valign="top">
|
31 |
-
<th><label for="spu_trigger"><?php _e( 'Trigger action', 'popups' ); ?></label></th>
|
32 |
-
<td class="spu-sm">
|
33 |
-
<select id="spu_trigger" name="spu[trigger]" class="widefat">
|
34 |
-
|
35 |
-
<option value="seconds" <?php selected($opts['trigger'], 'seconds'); ?>><?php _e( 'seconds after page load', 'popups' ); ?></option>
|
36 |
-
<option value="percentage" <?php selected($opts['trigger'], 'percentage'); ?>>% <?php _e( 'of page height', 'popups' ); ?></option>
|
37 |
-
<option value="pixels" <?php selected($opts['trigger'], 'pixels'); ?>><?php _e( 'Scrolled down pixels', 'popups' ); ?></option>
|
38 |
-
<option value="manual" <?php selected($opts['trigger'], 'manual'); ?>><?php _e( 'Manual Triggering', 'popups' ); ?></option>
|
39 |
-
<?php do_action( 'spu/metaboxes/trigger_options', $opts );?>
|
40 |
-
</select>
|
41 |
-
</td>
|
42 |
-
<td>
|
43 |
-
<input type="number" class="spu-trigger-number" name="spu[trigger_number]" min="0" value="<?php echo esc_attr($opts['trigger_number']); ?>" />
|
44 |
-
<?php do_action( 'spu/metaboxes/trigger_values', $opts );?>
|
45 |
-
</td>
|
46 |
-
</tr>
|
47 |
-
<tr>
|
48 |
-
<td style="margin:0;padding:0"></td><td style="position: relative;top: -15px;margin:0;padding:0 0 0 10px"><p class="help"><?php _e( 'Choose how the popup will be triggered on the page', 'popups' ); ?></p></td>
|
49 |
-
</tr>
|
50 |
-
<tr><th colspan="2"><?php if( ! defined('SPUP_VERSION') ) echo sprintf( __( 'On <a href="%s">Premium version</a> you can use exit intent trigger technology, or attach to any element that appears in the viewport.','popups'), 'https://timersys.com/plugins/popups-premium/?utm_source=Plugin&utm_medium=options_trigger&utm_campaign=Popups%20Premium');?></th></tr>
|
51 |
-
<?php do_action( 'spu/metaboxes/after_trigger_options', $opts );?>
|
52 |
-
</table>
|
53 |
-
<h3><?php _e( 'Cookies', 'popups');?></h3>
|
54 |
-
<p><?php _e( 'We use PHP cookies to prevent popups opening for users after they closed it.', 'popups');?></p>
|
55 |
-
<table class="form-table">
|
56 |
-
<tr valign="top">
|
57 |
-
<th><label for="spu_name_conversion_cookie"><?php _e( 'Conversion cookie name', 'popups' ); ?></label></th>
|
58 |
-
<td colspan="3">
|
59 |
-
<input type="text" id="spu_name_conversion_cookie" name="spu[name-convert-cookie]" value="<?php echo esc_attr($opts['name-convert-cookie']); ?>" />
|
60 |
-
<p class="help"><?php _e( 'The name that the popup will use for convertion cookie. Changing this name will reset the cookie, so all users will see popup again.', 'popups' ); ?></p>
|
61 |
-
</td>
|
62 |
-
</tr>
|
63 |
-
<tr valign="top">
|
64 |
-
<th><label for="spu_duration_conversion_cookie"><?php _e( 'Conversion cookie Duration', 'popups' ); ?></label></th>
|
65 |
-
<td colspan="3">
|
66 |
-
<input type="number" id="spu_duration_conversion_cookie" name="spu[duration-convert-cookie]" min="0" value="<?php echo esc_attr($opts['duration-convert-cookie']); ?>" />
|
67 |
-
<p class="help"><?php _e( 'When a user do a conversion like for example a click or form submission, how many days should it stay hidden?', 'popups' ); ?></p>
|
68 |
-
</td>
|
69 |
-
</tr>
|
70 |
-
<tr valign="top">
|
71 |
-
<th><label for="spu_name_closing_cookie"><?php _e( 'Closing cookie name', 'popups' ); ?></label></th>
|
72 |
-
<td colspan="3">
|
73 |
-
<input type="text" id="spu_name_closing_cookie" name="spu[name-close-cookie]" value="<?php echo esc_attr($opts['name-close-cookie']); ?>" />
|
74 |
-
<p class="help"><?php _e( 'The name that the popup will use for closing cookie. Changing this name will reset the cookie, so all users will see popup again.', 'popups' ); ?></p>
|
75 |
-
</td>
|
76 |
-
</tr>
|
77 |
-
<tr valign="top">
|
78 |
-
<th><label for="spu_duration_close_cookie"><?php _e( 'Closing cookie duration', 'popups' ); ?></label></th>
|
79 |
-
<td colspan="3">
|
80 |
-
<input type="number" id="spu_duration_close_cookie" name="spu[duration-close-cookie]" min="0" value="<?php echo isset( $opts['duration-close-cookie'] ) ? esc_attr($opts['duration-close-cookie']) : esc_attr($opts['duration-convert-cookie']); ?>" />
|
81 |
-
<p class="help"><?php _e( 'After closing the popup, how many days should it stay hidden?', 'popups' ); ?></p>
|
82 |
-
</td>
|
83 |
-
</tr>
|
84 |
-
<?php do_action( 'spu/metaboxes/after_cookie_options', $opts );?>
|
85 |
-
</table>
|
86 |
-
<h3>Close options</h3>
|
87 |
-
<table class="form-table">
|
88 |
-
<tr valign="top" class="conversion_close">
|
89 |
-
<th><label for="spu_conversion_close"><?php _e( 'Close on conversion?', 'popups' ); ?></label></th>
|
90 |
-
<td colspan="3">
|
91 |
-
<label><input type="radio" id="spu_conversion_close_1" name="spu[conversion_close]" value="1" <?php checked($opts['conversion_close'], 1); ?> /> <?php _e( 'Yes' ); ?></label>
|
92 |
-
<label><input type="radio" id="spu_conversion_close_0" name="spu[conversion_close]" value="0" <?php checked($opts['conversion_close'], 0); ?> /> <?php _e( 'No' ); ?></label>
|
93 |
-
<p class="help"><?php _e( 'If you have a form or social shortcode, by default popup will close on submission/conversion', 'popups' ); ?></p>
|
94 |
-
</td>
|
95 |
-
</tr>
|
96 |
-
<?php do_action( 'spu/metaboxes/after_close_options', $opts );?>
|
97 |
-
</table>
|
98 |
-
<h3>Other options</h3>
|
99 |
-
<table class="form-table">
|
100 |
-
<tr valign="top" class="auto_hide">
|
101 |
-
<th><label for="spu_auto_hide"><?php _e( 'Auto-hide?', 'popups' ); ?></label></th>
|
102 |
-
<td colspan="3">
|
103 |
-
<label><input type="radio" id="spu_auto_hide_1" name="spu[auto_hide]" value="1" <?php checked($opts['auto_hide'], 1); ?> /> <?php _e( 'Yes' ); ?></label>
|
104 |
-
<label><input type="radio" id="spu_auto_hide_0" name="spu[auto_hide]" value="0" <?php checked($opts['auto_hide'], 0); ?> /> <?php _e( 'No' ); ?></label>
|
105 |
-
<p class="help"><?php _e( 'Hide box again when visitors scroll back up?', 'popups' ); ?></p>
|
106 |
-
</td>
|
107 |
-
</tr>
|
108 |
-
<tr valign="top">
|
109 |
-
<th><label for="spu_test_mode"><?php _e( 'Enable test mode?', 'popups' ); ?></label></th>
|
110 |
-
<td colspan="3">
|
111 |
-
<label><input type="radio" id="spu_test_mode_1" name="spu[test_mode]" value="1" <?php checked($opts['test_mode'], 1); ?> /> <?php _e( 'Yes' ); ?></label>
|
112 |
-
<label><input type="radio" id="spu_test_mode_0" name="spu[test_mode]" value="0" <?php checked($opts['test_mode'], 0); ?> /> <?php _e( 'No' ); ?></label>
|
113 |
-
<p class="help"><?php _e( 'If test mode is enabled, the box will show up regardless of whether a cookie has been set. (To admins only)', 'popups' ); ?></p>
|
114 |
-
</td>
|
115 |
-
</tr>
|
116 |
-
<tr valign="top">
|
117 |
-
<th><label><?php _e( 'Animation', 'popups' ); ?></label></th>
|
118 |
-
<td colspan="3">
|
119 |
-
<select id="spu_animation" name="spu[animation]" class="widefat">
|
120 |
-
<option value="fade" <?php selected($opts['animation'], 'fade'); ?> > <?php _e( 'Fade In', 'popups' ); ?></option>
|
121 |
-
<option value="slide" <?php selected($opts['animation'], 'slide'); ?> > <?php _e( 'Slide In', 'popups' ); ?></option>
|
122 |
-
<?php do_action( 'spu/metaboxes/animations', $opts );?>
|
123 |
-
<option value="disable" <?php selected($opts['animation'], 'disable'); ?> > <?php _e( 'Disable animations', 'popups' ); ?></option>
|
124 |
-
</select>
|
125 |
-
<p class="help"><?php _e( 'Slide will only apply when popup is on the corners', 'popups' ); ?></p>
|
126 |
-
</td>
|
127 |
-
</tr>
|
128 |
-
<tr><th colspan="2"><?php if( ! defined('SPUP_VERSION') ) echo sprintf( __( 'On <a href="%s">Premium version</a> you have 8 new animations to play with!','popups'), 'https://timersys.com/plugins/popups-premium/?utm_source=Plugin&utm_medium=options_trigger&utm_campaign=Popups%20Premium');?></th></tr>
|
129 |
-
<tr valign="top" class="powered_link">
|
130 |
-
<th><label for="spu_powered_link"><?php _e( 'Show powered by link?', 'popups' ); ?></label></th>
|
131 |
-
<td colspan="3">
|
132 |
-
<label><input type="radio" id="spu_powered_link_1" name="spu[powered_link]" value="1" <?php checked($opts['powered_link'], 1); ?> /> <?php _e( 'Yes' ); ?></label>
|
133 |
-
<label><input type="radio" id="spu_powered_link_0" name="spu[powered_link]" value="0" <?php checked($opts['powered_link'], 0); ?> /> <?php _e( 'No' ); ?></label>
|
134 |
-
<p class="help"><?php echo sprintf(__( 'Shows a "powered by" link below your popup. If your affiliate link is set in the <a href="%s">settings</a>, it will be used.', 'popups' ), admin_url('edit.php?post_type=spucpt&page=spu_settings')); ?></p>
|
135 |
-
</td>
|
136 |
-
</tr>
|
137 |
-
<?php do_action( 'spu/metaboxes/after_other_options', $opts );?>
|
138 |
-
</table>
|
139 |
-
<?php do_action( 'spu/metaboxes/after_options', $opts );?>
|
140 |
-
</div>
|
141 |
-
<?php wp_nonce_field( 'spu_options', 'spu_options_nonce' ); ?>
|
1 |
+
<?php
|
2 |
+
// Exit if accessed directly
|
3 |
+
if ( !defined( 'ABSPATH' ) ) exit;?>
|
4 |
+
<div class="spu-admin-options">
|
5 |
+
<h3>Position</h3>
|
6 |
+
<table class="form-table">
|
7 |
+
|
8 |
+
<?php do_action( 'spu/metaboxes/before_display_options', $opts );?>
|
9 |
+
<tr valign="top">
|
10 |
+
<th><label for="spu_position"><?php _e( 'Box Position', 'popups' ); ?></label></th>
|
11 |
+
<td>
|
12 |
+
<select id="spu_position" name="spu[css][position]" class="widefat">
|
13 |
+
<option value="centered" <?php selected($opts['css']['position'], 'centered'); ?>><?php _e( 'Centered', 'popups' ); ?></option>
|
14 |
+
<option value="top-left" <?php selected($opts['css']['position'], 'top-left'); ?>><?php _e( 'Top Left', 'popups' ); ?></option>
|
15 |
+
<option value="top-right" <?php selected($opts['css']['position'], 'top-right'); ?>><?php _e( 'Top Right', 'popups' ); ?></option>
|
16 |
+
<option value="bottom-left" <?php selected($opts['css']['position'], 'bottom-left'); ?>><?php _e( 'Bottom Left', 'popups' ); ?></option>
|
17 |
+
<option value="bottom-right" <?php selected($opts['css']['position'], 'bottom-right'); ?>><?php _e( 'Bottom Right', 'popups' ); ?></option>
|
18 |
+
<option value="top-bar" <?php selected($opts['css']['position'], 'top-bar'); ?>><?php _e( 'Top Bar', 'popups' ); ?></option>
|
19 |
+
<option value="bottom-bar" <?php selected($opts['css']['position'], 'bottom-bar'); ?>><?php _e( 'Bottom Bar', 'popups' ); ?></option>
|
20 |
+
<?php do_action( 'spu/metaboxes/positions', $opts );?>
|
21 |
+
</select>
|
22 |
+
</td>
|
23 |
+
<td colspan="2"></td>
|
24 |
+
</tr>
|
25 |
+
<tr><th colspan="2"><?php if( ! defined('SPUP_VERSION') ) echo sprintf( __( 'On <a href="%s">Premium version</a> there are more cool positions and popup styles.','popups'), 'https://timersys.com/plugins/popups-premium/?utm_source=Plugin&utm_medium=options_position&utm_campaign=Popups%20Premium');?></th></tr>
|
26 |
+
<?php do_action( 'spu/metaboxes/after_position_options', $opts );?>
|
27 |
+
</table>
|
28 |
+
<h3>Trigger</h3>
|
29 |
+
<table class="form-table">
|
30 |
+
<tr valign="top">
|
31 |
+
<th><label for="spu_trigger"><?php _e( 'Trigger action', 'popups' ); ?></label></th>
|
32 |
+
<td class="spu-sm">
|
33 |
+
<select id="spu_trigger" name="spu[trigger]" class="widefat">
|
34 |
+
|
35 |
+
<option value="seconds" <?php selected($opts['trigger'], 'seconds'); ?>><?php _e( 'seconds after page load', 'popups' ); ?></option>
|
36 |
+
<option value="percentage" <?php selected($opts['trigger'], 'percentage'); ?>>% <?php _e( 'of page height', 'popups' ); ?></option>
|
37 |
+
<option value="pixels" <?php selected($opts['trigger'], 'pixels'); ?>><?php _e( 'Scrolled down pixels', 'popups' ); ?></option>
|
38 |
+
<option value="manual" <?php selected($opts['trigger'], 'manual'); ?>><?php _e( 'Manual Triggering', 'popups' ); ?></option>
|
39 |
+
<?php do_action( 'spu/metaboxes/trigger_options', $opts );?>
|
40 |
+
</select>
|
41 |
+
</td>
|
42 |
+
<td>
|
43 |
+
<input type="number" class="spu-trigger-number" name="spu[trigger_number]" min="0" value="<?php echo esc_attr($opts['trigger_number']); ?>" />
|
44 |
+
<?php do_action( 'spu/metaboxes/trigger_values', $opts );?>
|
45 |
+
</td>
|
46 |
+
</tr>
|
47 |
+
<tr>
|
48 |
+
<td style="margin:0;padding:0"></td><td style="position: relative;top: -15px;margin:0;padding:0 0 0 10px"><p class="help"><?php _e( 'Choose how the popup will be triggered on the page', 'popups' ); ?></p></td>
|
49 |
+
</tr>
|
50 |
+
<tr><th colspan="2"><?php if( ! defined('SPUP_VERSION') ) echo sprintf( __( 'On <a href="%s">Premium version</a> you can use exit intent trigger technology, or attach to any element that appears in the viewport.','popups'), 'https://timersys.com/plugins/popups-premium/?utm_source=Plugin&utm_medium=options_trigger&utm_campaign=Popups%20Premium');?></th></tr>
|
51 |
+
<?php do_action( 'spu/metaboxes/after_trigger_options', $opts );?>
|
52 |
+
</table>
|
53 |
+
<h3><?php _e( 'Cookies', 'popups');?></h3>
|
54 |
+
<p><?php _e( 'We use PHP cookies to prevent popups opening for users after they closed it.', 'popups');?></p>
|
55 |
+
<table class="form-table">
|
56 |
+
<tr valign="top">
|
57 |
+
<th><label for="spu_name_conversion_cookie"><?php _e( 'Conversion cookie name', 'popups' ); ?></label></th>
|
58 |
+
<td colspan="3">
|
59 |
+
<input type="text" id="spu_name_conversion_cookie" name="spu[name-convert-cookie]" value="<?php echo esc_attr($opts['name-convert-cookie']); ?>" />
|
60 |
+
<p class="help"><?php _e( 'The name that the popup will use for convertion cookie. Changing this name will reset the cookie, so all users will see popup again.', 'popups' ); ?></p>
|
61 |
+
</td>
|
62 |
+
</tr>
|
63 |
+
<tr valign="top">
|
64 |
+
<th><label for="spu_duration_conversion_cookie"><?php _e( 'Conversion cookie Duration', 'popups' ); ?></label></th>
|
65 |
+
<td colspan="3">
|
66 |
+
<input type="number" id="spu_duration_conversion_cookie" name="spu[duration-convert-cookie]" min="0" value="<?php echo esc_attr($opts['duration-convert-cookie']); ?>" />
|
67 |
+
<p class="help"><?php _e( 'When a user do a conversion like for example a click or form submission, how many days should it stay hidden?', 'popups' ); ?></p>
|
68 |
+
</td>
|
69 |
+
</tr>
|
70 |
+
<tr valign="top">
|
71 |
+
<th><label for="spu_name_closing_cookie"><?php _e( 'Closing cookie name', 'popups' ); ?></label></th>
|
72 |
+
<td colspan="3">
|
73 |
+
<input type="text" id="spu_name_closing_cookie" name="spu[name-close-cookie]" value="<?php echo esc_attr($opts['name-close-cookie']); ?>" />
|
74 |
+
<p class="help"><?php _e( 'The name that the popup will use for closing cookie. Changing this name will reset the cookie, so all users will see popup again.', 'popups' ); ?></p>
|
75 |
+
</td>
|
76 |
+
</tr>
|
77 |
+
<tr valign="top">
|
78 |
+
<th><label for="spu_duration_close_cookie"><?php _e( 'Closing cookie duration', 'popups' ); ?></label></th>
|
79 |
+
<td colspan="3">
|
80 |
+
<input type="number" id="spu_duration_close_cookie" name="spu[duration-close-cookie]" min="0" value="<?php echo isset( $opts['duration-close-cookie'] ) ? esc_attr($opts['duration-close-cookie']) : esc_attr($opts['duration-convert-cookie']); ?>" />
|
81 |
+
<p class="help"><?php _e( 'After closing the popup, how many days should it stay hidden?', 'popups' ); ?></p>
|
82 |
+
</td>
|
83 |
+
</tr>
|
84 |
+
<?php do_action( 'spu/metaboxes/after_cookie_options', $opts );?>
|
85 |
+
</table>
|
86 |
+
<h3>Close options</h3>
|
87 |
+
<table class="form-table">
|
88 |
+
<tr valign="top" class="conversion_close">
|
89 |
+
<th><label for="spu_conversion_close"><?php _e( 'Close on conversion?', 'popups' ); ?></label></th>
|
90 |
+
<td colspan="3">
|
91 |
+
<label><input type="radio" id="spu_conversion_close_1" name="spu[conversion_close]" value="1" <?php checked($opts['conversion_close'], 1); ?> /> <?php _e( 'Yes' ); ?></label>
|
92 |
+
<label><input type="radio" id="spu_conversion_close_0" name="spu[conversion_close]" value="0" <?php checked($opts['conversion_close'], 0); ?> /> <?php _e( 'No' ); ?></label>
|
93 |
+
<p class="help"><?php _e( 'If you have a form or social shortcode, by default popup will close on submission/conversion', 'popups' ); ?></p>
|
94 |
+
</td>
|
95 |
+
</tr>
|
96 |
+
<?php do_action( 'spu/metaboxes/after_close_options', $opts );?>
|
97 |
+
</table>
|
98 |
+
<h3>Other options</h3>
|
99 |
+
<table class="form-table">
|
100 |
+
<tr valign="top" class="auto_hide">
|
101 |
+
<th><label for="spu_auto_hide"><?php _e( 'Auto-hide?', 'popups' ); ?></label></th>
|
102 |
+
<td colspan="3">
|
103 |
+
<label><input type="radio" id="spu_auto_hide_1" name="spu[auto_hide]" value="1" <?php checked($opts['auto_hide'], 1); ?> /> <?php _e( 'Yes' ); ?></label>
|
104 |
+
<label><input type="radio" id="spu_auto_hide_0" name="spu[auto_hide]" value="0" <?php checked($opts['auto_hide'], 0); ?> /> <?php _e( 'No' ); ?></label>
|
105 |
+
<p class="help"><?php _e( 'Hide box again when visitors scroll back up?', 'popups' ); ?></p>
|
106 |
+
</td>
|
107 |
+
</tr>
|
108 |
+
<tr valign="top">
|
109 |
+
<th><label for="spu_test_mode"><?php _e( 'Enable test mode?', 'popups' ); ?></label></th>
|
110 |
+
<td colspan="3">
|
111 |
+
<label><input type="radio" id="spu_test_mode_1" name="spu[test_mode]" value="1" <?php checked($opts['test_mode'], 1); ?> /> <?php _e( 'Yes' ); ?></label>
|
112 |
+
<label><input type="radio" id="spu_test_mode_0" name="spu[test_mode]" value="0" <?php checked($opts['test_mode'], 0); ?> /> <?php _e( 'No' ); ?></label>
|
113 |
+
<p class="help"><?php _e( 'If test mode is enabled, the box will show up regardless of whether a cookie has been set. (To admins only)', 'popups' ); ?></p>
|
114 |
+
</td>
|
115 |
+
</tr>
|
116 |
+
<tr valign="top">
|
117 |
+
<th><label><?php _e( 'Animation', 'popups' ); ?></label></th>
|
118 |
+
<td colspan="3">
|
119 |
+
<select id="spu_animation" name="spu[animation]" class="widefat">
|
120 |
+
<option value="fade" <?php selected($opts['animation'], 'fade'); ?> > <?php _e( 'Fade In', 'popups' ); ?></option>
|
121 |
+
<option value="slide" <?php selected($opts['animation'], 'slide'); ?> > <?php _e( 'Slide In', 'popups' ); ?></option>
|
122 |
+
<?php do_action( 'spu/metaboxes/animations', $opts );?>
|
123 |
+
<option value="disable" <?php selected($opts['animation'], 'disable'); ?> > <?php _e( 'Disable animations', 'popups' ); ?></option>
|
124 |
+
</select>
|
125 |
+
<p class="help"><?php _e( 'Slide will only apply when popup is on the corners', 'popups' ); ?></p>
|
126 |
+
</td>
|
127 |
+
</tr>
|
128 |
+
<tr><th colspan="2"><?php if( ! defined('SPUP_VERSION') ) echo sprintf( __( 'On <a href="%s">Premium version</a> you have 8 new animations to play with!','popups'), 'https://timersys.com/plugins/popups-premium/?utm_source=Plugin&utm_medium=options_trigger&utm_campaign=Popups%20Premium');?></th></tr>
|
129 |
+
<tr valign="top" class="powered_link">
|
130 |
+
<th><label for="spu_powered_link"><?php _e( 'Show powered by link?', 'popups' ); ?></label></th>
|
131 |
+
<td colspan="3">
|
132 |
+
<label><input type="radio" id="spu_powered_link_1" name="spu[powered_link]" value="1" <?php checked($opts['powered_link'], 1); ?> /> <?php _e( 'Yes' ); ?></label>
|
133 |
+
<label><input type="radio" id="spu_powered_link_0" name="spu[powered_link]" value="0" <?php checked($opts['powered_link'], 0); ?> /> <?php _e( 'No' ); ?></label>
|
134 |
+
<p class="help"><?php echo sprintf(__( 'Shows a "powered by" link below your popup. If your affiliate link is set in the <a href="%s">settings</a>, it will be used.', 'popups' ), admin_url('edit.php?post_type=spucpt&page=spu_settings')); ?></p>
|
135 |
+
</td>
|
136 |
+
</tr>
|
137 |
+
<?php do_action( 'spu/metaboxes/after_other_options', $opts );?>
|
138 |
+
</table>
|
139 |
+
<?php do_action( 'spu/metaboxes/after_options', $opts );?>
|
140 |
+
</div>
|
141 |
+
<?php wp_nonce_field( 'spu_options', 'spu_options_nonce' ); ?>
|
admin/views/metaboxes/metabox-premium.php
CHANGED
@@ -1,40 +1,40 @@
|
|
1 |
-
<?php
|
2 |
-
// Exit if accessed directly
|
3 |
-
if ( !defined( 'ABSPATH' ) ) exit;
|
4 |
-
?>
|
5 |
-
<?php
|
6 |
-
|
7 |
-
$today = strtotime(date("Y-m-d H:i:s"));
|
8 |
-
$blackbegin = strtotime("2014-11-28");
|
9 |
-
$blackend = strtotime("2014-12-02");
|
10 |
-
if($today > $blackbegin && $today < $blackend) : ?>
|
11 |
-
<div class="alert-premium">
|
12 |
-
<p><strong>Happy Black Friday!</strong> Get any Timersys Plugin with a 40% discount using the <code>BLACKFRIDAY</code> coupon code </p>
|
13 |
-
</div>
|
14 |
-
<?php endif;?>
|
15 |
-
|
16 |
-
<p><?php _e( 'Take the best WordPress Popups plugin to the next level with Popups Premium extension.', 'popups' );?></p>
|
17 |
-
<h2><?php _e( 'Popups Premium Features:', 'popups' );?></h2>
|
18 |
-
<ul>
|
19 |
-
<li><?php _e( 'Beautiful optin forms for popular mail providers', 'popups' );?></li>
|
20 |
-
<li><?php _e( 'Currently supporting MailChimp, Aweber, Postmatic, Mailpoet, Constant Contact, ActiveCampaign, Newsletter plugin, InfusionSoft, etc', 'popups' );?></li>
|
21 |
-
<li><?php _e( 'A/B testing. Explore which popup perform better for you.', 'popups' );?></li>
|
22 |
-
<li><?php _e( 'Track impressions and Conversions of social likes and forms submissions like Contact Form 7, Gravity forms, etc', 'popups' );?></li>
|
23 |
-
<li><?php _e( 'Track impressions and Conversions in Google Analytics ande define custom events', 'popups' );?></li>
|
24 |
-
<li><?php _e( 'Exit Intent technology', 'popups' );?></li>
|
25 |
-
<li><?php _e( 'New popup positions: top/bottoms bars , fullscreen mode, after post content', 'popups' );?></li>
|
26 |
-
<li><?php _e( '8 New animations effects', 'popups' );?> - <a href="https://timersys.com/popups/?utm_source=Plugin&utm_medium=demo-button&utm_campaign=Popups%20Premium">Online demo</a></li>
|
27 |
-
<li><?php _e( 'New trigger methods', 'popups' );?></li>
|
28 |
-
<li><?php _e( 'More Display Rules: Show after N(numbers) of pages viewed', 'popups' );?></li>
|
29 |
-
<li><?php _e( 'More Display Rules: Show popup at certain time', 'popups' );?></li>
|
30 |
-
<li><?php _e( 'More Display Rules: Show popup at certain day', 'popups' );?></li>
|
31 |
-
<li><?php _e( 'More Display Rules: Show/hide if another popup already converted', 'popups' );?></li>
|
32 |
-
<li><?php _e( 'Timer for auto closing', 'popups' );?></li>
|
33 |
-
<li><?php _e( 'Ability to disable close button', 'popups' );?></li>
|
34 |
-
<li><?php _e( 'Ability to disable Advanced close methods like esc or clicking outside of the popup', 'popups' );?></li>
|
35 |
-
<li><?php _e( 'Premium support', 'popups' );?></li>
|
36 |
-
</ul>
|
37 |
-
<p><strong>Hurry up and get your copy!</strong> Take advantage of this <span style="color:red">launch offer</span> before the price goes up. We have a <strong>lot of new features</strong> to be added soon!</p>
|
38 |
-
<p style="text-align:center">
|
39 |
-
<a class="button-primary" href="https://timersys.com/downloads/popups-premium/?utm_source=Plugin&utm_medium=buy-button&utm_campaign=Popups%20Premium"><?php _e( 'Buy Now!', 'popups' );?></a>
|
40 |
</p>
|
1 |
+
<?php
|
2 |
+
// Exit if accessed directly
|
3 |
+
if ( !defined( 'ABSPATH' ) ) exit;
|
4 |
+
?>
|
5 |
+
<?php
|
6 |
+
|
7 |
+
$today = strtotime(date("Y-m-d H:i:s"));
|
8 |
+
$blackbegin = strtotime("2014-11-28");
|
9 |
+
$blackend = strtotime("2014-12-02");
|
10 |
+
if($today > $blackbegin && $today < $blackend) : ?>
|
11 |
+
<div class="alert-premium">
|
12 |
+
<p><strong>Happy Black Friday!</strong> Get any Timersys Plugin with a 40% discount using the <code>BLACKFRIDAY</code> coupon code </p>
|
13 |
+
</div>
|
14 |
+
<?php endif;?>
|
15 |
+
|
16 |
+
<p><?php _e( 'Take the best WordPress Popups plugin to the next level with Popups Premium extension.', 'popups' );?></p>
|
17 |
+
<h2><?php _e( 'Popups Premium Features:', 'popups' );?></h2>
|
18 |
+
<ul>
|
19 |
+
<li><?php _e( 'Beautiful optin forms for popular mail providers', 'popups' );?></li>
|
20 |
+
<li><?php _e( 'Currently supporting MailChimp, Aweber, Postmatic, Mailpoet, Constant Contact, ActiveCampaign, Newsletter plugin, InfusionSoft, etc', 'popups' );?></li>
|
21 |
+
<li><?php _e( 'A/B testing. Explore which popup perform better for you.', 'popups' );?></li>
|
22 |
+
<li><?php _e( 'Track impressions and Conversions of social likes and forms submissions like Contact Form 7, Gravity forms, etc', 'popups' );?></li>
|
23 |
+
<li><?php _e( 'Track impressions and Conversions in Google Analytics ande define custom events', 'popups' );?></li>
|
24 |
+
<li><?php _e( 'Exit Intent technology', 'popups' );?></li>
|
25 |
+
<li><?php _e( 'New popup positions: top/bottoms bars , fullscreen mode, after post content', 'popups' );?></li>
|
26 |
+
<li><?php _e( '8 New animations effects', 'popups' );?> - <a href="https://timersys.com/popups/?utm_source=Plugin&utm_medium=demo-button&utm_campaign=Popups%20Premium">Online demo</a></li>
|
27 |
+
<li><?php _e( 'New trigger methods', 'popups' );?></li>
|
28 |
+
<li><?php _e( 'More Display Rules: Show after N(numbers) of pages viewed', 'popups' );?></li>
|
29 |
+
<li><?php _e( 'More Display Rules: Show popup at certain time', 'popups' );?></li>
|
30 |
+
<li><?php _e( 'More Display Rules: Show popup at certain day', 'popups' );?></li>
|
31 |
+
<li><?php _e( 'More Display Rules: Show/hide if another popup already converted', 'popups' );?></li>
|
32 |
+
<li><?php _e( 'Timer for auto closing', 'popups' );?></li>
|
33 |
+
<li><?php _e( 'Ability to disable close button', 'popups' );?></li>
|
34 |
+
<li><?php _e( 'Ability to disable Advanced close methods like esc or clicking outside of the popup', 'popups' );?></li>
|
35 |
+
<li><?php _e( 'Premium support', 'popups' );?></li>
|
36 |
+
</ul>
|
37 |
+
<p><strong>Hurry up and get your copy!</strong> Take advantage of this <span style="color:red">launch offer</span> before the price goes up. We have a <strong>lot of new features</strong> to be added soon!</p>
|
38 |
+
<p style="text-align:center">
|
39 |
+
<a class="button-primary" href="https://timersys.com/downloads/popups-premium/?utm_source=Plugin&utm_medium=buy-button&utm_campaign=Popups%20Premium"><?php _e( 'Buy Now!', 'popups' );?></a>
|
40 |
</p>
|
admin/views/metaboxes/metabox-rules.php
CHANGED
@@ -1,109 +1,109 @@
|
|
1 |
-
<?php
|
2 |
-
// Exit if accessed directly
|
3 |
-
if ( !defined( 'ABSPATH' ) ) exit;
|
4 |
-
|
5 |
-
/*
|
6 |
-
* Meta box - Rules
|
7 |
-
*
|
8 |
-
* This template file is used when editing a popup and creates the interface for editing popup rules.
|
9 |
-
*
|
10 |
-
* @type template
|
11 |
-
* @since 2.0
|
12 |
-
*/
|
13 |
-
do_action( 'spu/metaboxes/before_rules', $post );
|
14 |
-
?>
|
15 |
-
|
16 |
-
<table class="spu_table widefat" id="spu_rules">
|
17 |
-
<tbody>
|
18 |
-
<tr>
|
19 |
-
<td class="label">
|
20 |
-
<label for="post_type"><?php _e("Rules", 'popups' ); ?></label>
|
21 |
-
<p class="description"><?php _e("Create a set of rules to determine where the popup will show", 'popups' ); ?></p>
|
22 |
-
</td>
|
23 |
-
<td>
|
24 |
-
<div class="rules-groups">
|
25 |
-
|
26 |
-
<?php if( is_array($groups) ): ?>
|
27 |
-
<?php foreach( $groups as $group_id => $group ):
|
28 |
-
$group_id = 'group_' . $group_id;
|
29 |
-
?>
|
30 |
-
<div class="rules-group" data-id="<?php echo $group_id; ?>">
|
31 |
-
<?php if( $group_id == 'group_0' ): ?>
|
32 |
-
<h4><?php _e("Show this popup if", 'popups' ); ?></h4>
|
33 |
-
<?php else: ?>
|
34 |
-
<h4 class="rules-or"><span><?php _e("OR", 'popups' ); ?></span></h4>
|
35 |
-
<?php endif; ?>
|
36 |
-
<?php if( is_array($group) ): ?>
|
37 |
-
<table class="spu_table widefat">
|
38 |
-
<tbody>
|
39 |
-
<?php foreach( $group as $rule_id => $rule ):
|
40 |
-
$rule_id = 'rule_' . $rule_id;
|
41 |
-
?>
|
42 |
-
<tr data-id="<?php echo $rule_id; ?>">
|
43 |
-
<td class="param"><?php
|
44 |
-
|
45 |
-
$choices = $this->get_rules_choices();
|
46 |
-
|
47 |
-
// create field
|
48 |
-
$args = array(
|
49 |
-
'group_id' => $group_id,
|
50 |
-
'rule_id' => $rule_id,
|
51 |
-
'name' => 'spu_rules[' . $group_id . '][' . $rule_id . '][param]',
|
52 |
-
'value' => $rule['param']
|
53 |
-
);
|
54 |
-
|
55 |
-
Spu_Helper::print_select( $args, $choices );
|
56 |
-
|
57 |
-
|
58 |
-
?></td>
|
59 |
-
<td class="operator"><?php
|
60 |
-
|
61 |
-
$args = array(
|
62 |
-
'group_id' => $group_id,
|
63 |
-
'rule_id' => $rule_id,
|
64 |
-
'name' => 'spu_rules[' . $group_id . '][' . $rule_id . '][operator]',
|
65 |
-
'value' => $rule['operator'],
|
66 |
-
'param' => $rule['param'],
|
67 |
-
|
68 |
-
);
|
69 |
-
Spu_Helper::ajax_render_operator( $args );
|
70 |
-
|
71 |
-
?></td>
|
72 |
-
<td class="value"><?php
|
73 |
-
$args = array(
|
74 |
-
'group_id' => $group_id,
|
75 |
-
'rule_id' => $rule_id,
|
76 |
-
'value' => !empty($rule['value']) ? $rule['value'] : '',
|
77 |
-
'name' => 'spu_rules[' . $group_id . '][' . $rule_id . '][value]',
|
78 |
-
'param' => $rule['param'],
|
79 |
-
);
|
80 |
-
Spu_Helper::ajax_render_rules( $args );
|
81 |
-
|
82 |
-
?></td>
|
83 |
-
<td class="add">
|
84 |
-
<a href="#" class="rules-add-rule button"><?php _e("+ AND", 'popups' ); ?></a>
|
85 |
-
</td>
|
86 |
-
<td class="remove">
|
87 |
-
<a href="#" class="rules-remove-rule rules-remove-rule">-</a>
|
88 |
-
</td>
|
89 |
-
</tr>
|
90 |
-
<?php endforeach; ?>
|
91 |
-
</tbody>
|
92 |
-
</table>
|
93 |
-
<?php endif; ?>
|
94 |
-
</div>
|
95 |
-
<?php endforeach; ?>
|
96 |
-
|
97 |
-
<h4 class="rules-or"><span><?php _e("OR", 'popups' ); ?></span></h4>
|
98 |
-
|
99 |
-
<a class="button rules-add-group" href="#"><?php _e("Add rule group (+ OR)", 'popups' ); ?></a>
|
100 |
-
<p style="margin-top:30px">
|
101 |
-
<?php echo sprintf(__('<strong>Hint</strong>: If you are planning to open the popup with a button, simple leave this set to "All Pages" and change trigger method below to "Manual triggering". Then inside the page you want to open the popup add the following shortcode [spu popup="%s"]Click here[/spu]','spu'),$post->ID);?>
|
102 |
-
</p>
|
103 |
-
<?php endif; ?>
|
104 |
-
|
105 |
-
</div>
|
106 |
-
</td>
|
107 |
-
</tr>
|
108 |
-
</tbody>
|
109 |
-
</table>
|
1 |
+
<?php
|
2 |
+
// Exit if accessed directly
|
3 |
+
if ( !defined( 'ABSPATH' ) ) exit;
|
4 |
+
|
5 |
+
/*
|
6 |
+
* Meta box - Rules
|
7 |
+
*
|
8 |
+
* This template file is used when editing a popup and creates the interface for editing popup rules.
|
9 |
+
*
|
10 |
+
* @type template
|
11 |
+
* @since 2.0
|
12 |
+
*/
|
13 |
+
do_action( 'spu/metaboxes/before_rules', $post );
|
14 |
+
?>
|
15 |
+
|
16 |
+
<table class="spu_table widefat" id="spu_rules">
|
17 |
+
<tbody>
|
18 |
+
<tr>
|
19 |
+
<td class="label">
|
20 |
+
<label for="post_type"><?php _e("Rules", 'popups' ); ?></label>
|
21 |
+
<p class="description"><?php _e("Create a set of rules to determine where the popup will show", 'popups' ); ?></p>
|
22 |
+
</td>
|
23 |
+
<td>
|
24 |
+
<div class="rules-groups">
|
25 |
+
|
26 |
+
<?php if( is_array($groups) ): ?>
|
27 |
+
<?php foreach( $groups as $group_id => $group ):
|
28 |
+
$group_id = 'group_' . $group_id;
|
29 |
+
?>
|
30 |
+
<div class="rules-group" data-id="<?php echo $group_id; ?>">
|
31 |
+
<?php if( $group_id == 'group_0' ): ?>
|
32 |
+
<h4><?php _e("Show this popup if", 'popups' ); ?></h4>
|
33 |
+
<?php else: ?>
|
34 |
+
<h4 class="rules-or"><span><?php _e("OR", 'popups' ); ?></span></h4>
|
35 |
+
<?php endif; ?>
|
36 |
+
<?php if( is_array($group) ): ?>
|
37 |
+
<table class="spu_table widefat">
|
38 |
+
<tbody>
|
39 |
+
<?php foreach( $group as $rule_id => $rule ):
|
40 |
+
$rule_id = 'rule_' . $rule_id;
|
41 |
+
?>
|
42 |
+
<tr data-id="<?php echo $rule_id; ?>">
|
43 |
+
<td class="param"><?php
|
44 |
+
|
45 |
+
$choices = $this->get_rules_choices();
|
46 |
+
|
47 |
+
// create field
|
48 |
+
$args = array(
|
49 |
+
'group_id' => $group_id,
|
50 |
+
'rule_id' => $rule_id,
|
51 |
+
'name' => 'spu_rules[' . $group_id . '][' . $rule_id . '][param]',
|
52 |
+
'value' => $rule['param']
|
53 |
+
);
|
54 |
+
|
55 |
+
Spu_Helper::print_select( $args, $choices );
|
56 |
+
|
57 |
+
|
58 |
+
?></td>
|
59 |
+
<td class="operator"><?php
|
60 |
+
|
61 |
+
$args = array(
|
62 |
+
'group_id' => $group_id,
|
63 |
+
'rule_id' => $rule_id,
|
64 |
+
'name' => 'spu_rules[' . $group_id . '][' . $rule_id . '][operator]',
|
65 |
+
'value' => $rule['operator'],
|
66 |
+
'param' => $rule['param'],
|
67 |
+
|
68 |
+
);
|
69 |
+
Spu_Helper::ajax_render_operator( $args );
|
70 |
+
|
71 |
+
?></td>
|
72 |
+
<td class="value"><?php
|
73 |
+
$args = array(
|
74 |
+
'group_id' => $group_id,
|
75 |
+
'rule_id' => $rule_id,
|
76 |
+
'value' => !empty($rule['value']) ? $rule['value'] : '',
|
77 |
+
'name' => 'spu_rules[' . $group_id . '][' . $rule_id . '][value]',
|
78 |
+
'param' => $rule['param'],
|
79 |
+
);
|
80 |
+
Spu_Helper::ajax_render_rules( $args );
|
81 |
+
|
82 |
+
?></td>
|
83 |
+
<td class="add">
|
84 |
+
<a href="#" class="rules-add-rule button"><?php _e("+ AND", 'popups' ); ?></a>
|
85 |
+
</td>
|
86 |
+
<td class="remove">
|
87 |
+
<a href="#" class="rules-remove-rule rules-remove-rule">-</a>
|
88 |
+
</td>
|
89 |
+
</tr>
|
90 |
+
<?php endforeach; ?>
|
91 |
+
</tbody>
|
92 |
+
</table>
|
93 |
+
<?php endif; ?>
|
94 |
+
</div>
|
95 |
+
<?php endforeach; ?>
|
96 |
+
|
97 |
+
<h4 class="rules-or"><span><?php _e("OR", 'popups' ); ?></span></h4>
|
98 |
+
|
99 |
+
<a class="button rules-add-group" href="#"><?php _e("Add rule group (+ OR)", 'popups' ); ?></a>
|
100 |
+
<p style="margin-top:30px">
|
101 |
+
<?php echo sprintf(__('<strong>Hint</strong>: If you are planning to open the popup with a button, simple leave this set to "All Pages" and change trigger method below to "Manual triggering". Then inside the page you want to open the popup add the following shortcode [spu popup="%s"]Click here[/spu]','spu'),$post->ID);?>
|
102 |
+
</p>
|
103 |
+
<?php endif; ?>
|
104 |
+
|
105 |
+
</div>
|
106 |
+
</td>
|
107 |
+
</tr>
|
108 |
+
</tbody>
|
109 |
+
</table>
|
admin/views/metaboxes/metabox-support.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
-
<?php
|
2 |
-
// Exit if accessed directly
|
3 |
-
if ( !defined( 'ABSPATH' ) ) exit;
|
4 |
-
?>
|
5 |
-
<p><?php echo sprintf( __( 'You are using Popups plugin v%s', 'popups' ), SocialPopup::VERSION );?></p>
|
6 |
<p><?php echo sprintf( __( 'If you need support please go to the WordPress.org <a href="%s">support forums</a>', 'popups' ), 'http://wordpress.org/support/plugin/popups/');?></p>
|
1 |
+
<?php
|
2 |
+
// Exit if accessed directly
|
3 |
+
if ( !defined( 'ABSPATH' ) ) exit;
|
4 |
+
?>
|
5 |
+
<p><?php echo sprintf( __( 'You are using Popups plugin v%s', 'popups' ), SocialPopup::VERSION );?></p>
|
6 |
<p><?php echo sprintf( __( 'If you need support please go to the WordPress.org <a href="%s">support forums</a>', 'popups' ), 'http://wordpress.org/support/plugin/popups/');?></p>
|
admin/views/metaboxes/metabox-video.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
-
<?php
|
2 |
-
// Exit if accessed directly
|
3 |
-
if ( !defined( 'ABSPATH' ) ) exit;
|
4 |
-
?>
|
5 |
-
<p><?= __('Take a look to this "How to add a Popup" help video to better understand how the plugin works. Remember you can minimize this box click clicking on the top right arrow.');?></p>
|
6 |
-
<iframe width="100%" height="315" style="max-width:550px;display: block;margin:10px auto;" src="https://www.youtube.com/embed/S_MfZne6X2I??rel=0&showinfo=0" frameborder="0" allowfullscreen></iframe>
|
1 |
+
<?php
|
2 |
+
// Exit if accessed directly
|
3 |
+
if ( !defined( 'ABSPATH' ) ) exit;
|
4 |
+
?>
|
5 |
+
<p><?= __('Take a look to this "How to add a Popup" help video to better understand how the plugin works. Remember you can minimize this box click clicking on the top right arrow.');?></p>
|
6 |
+
<iframe width="100%" height="315" style="max-width:550px;display: block;margin:10px auto;" src="https://www.youtube.com/embed/S_MfZne6X2I??rel=0&showinfo=0" frameborder="0" allowfullscreen></iframe>
|
admin/views/settings-page.php
CHANGED
@@ -1,77 +1,77 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Settings page template
|
4 |
-
* @since 1.1
|
5 |
-
*/
|
6 |
-
?>
|
7 |
-
<div class="wrap">
|
8 |
-
<h2>Popups <?php echo SocialPopup::VERSION;
|
9 |
-
if( class_exists('PopupsP') ){
|
10 |
-
echo ' - Premium v', PopupsP::VERSION;
|
11 |
-
}
|
12 |
-
?></h2>
|
13 |
-
<form name="spu-settings" method="post">
|
14 |
-
<table class="form-table">
|
15 |
-
<?php do_action( 'spu/settings_page/before' ); ?>
|
16 |
-
<tr valign="top" class="">
|
17 |
-
<th><label for="add_link"><?php _e( 'Affiliate link', 'popups' ); ?></label></th>
|
18 |
-
<td colspan="3">
|
19 |
-
<label><input type="text" id="add_link" name="spu_settings[aff_link]" value="<?php echo isset($opts['aff_link']) ? $opts['aff_link'] :'';?>" class="regular-text" />
|
20 |
-
<p class="help"><?php echo sprintf(__( 'You can earn money by promoting the plugin! Join <a href="%s">our affiliate program</a> and paste your affiliate link here to earn 35% in commissions . Once entered, it will replace the default "Powered by" on the popups.', 'popups' ) , 'https://timersys.com/affiliates/'); ?></p>
|
21 |
-
</td>
|
22 |
-
</tr>
|
23 |
-
<tr valign="top" class="">
|
24 |
-
<th><label for="ajax_mode"><?php _e( 'Ajax mode?', 'popups' ); ?></label></th>
|
25 |
-
<td colspan="3">
|
26 |
-
<label><input type="checkbox" id="ajax_mode" name="spu_settings[ajax_mode]" value="1" <?php isset($opts['ajax_mode']) && checked($opts['ajax_mode'], 1); ?> />
|
27 |
-
<p class="help"><?php _e( 'Load popups using ajax. Compatible with cache plugins, but might not work with all plugins', 'popups' ); ?></p>
|
28 |
-
</td>
|
29 |
-
</tr>
|
30 |
-
|
31 |
-
<tr valign="top" class="">
|
32 |
-
<th><label for="style"><?php _e( 'Remove shortcodes style', 'popups' ); ?></label></th>
|
33 |
-
<td colspan="3">
|
34 |
-
<label><input type="checkbox" id="style" name="spu_settings[shortcodes_style]" value="1" <?php isset($opts['shortcodes_style']) && checked($opts['shortcodes_style'], 1); ?> />
|
35 |
-
<p class="help"><?php _e( 'By default the plugin will apply some style to shortcodes. Check here if you want to manually style them', 'popups' ); ?></p>
|
36 |
-
</td>
|
37 |
-
|
38 |
-
</tr>
|
39 |
-
<tr valign="top" class="">
|
40 |
-
<th><label for="style"><?php _e( 'Unload Facebook javascript', 'popups' ); ?></label></th>
|
41 |
-
<td colspan="3">
|
42 |
-
<label><input type="checkbox" id="style" name="spu_settings[facebook]" value="1" <?php isset($opts['facebook']) && checked($opts['facebook'], 1); ?> />
|
43 |
-
<p class="help"><?php _e( 'If you use your own Facebook script, check this', 'popups' ); ?></p>
|
44 |
-
</td>
|
45 |
-
|
46 |
-
</tr>
|
47 |
-
<tr valign="top" class="">
|
48 |
-
<th><label for="style"><?php _e( 'Unload Google javascript', 'popups' ); ?></label></th>
|
49 |
-
<td colspan="3">
|
50 |
-
<label><input type="checkbox" id="style" name="spu_settings[google]" value="1" <?php isset($opts['google']) && checked($opts['google'], 1); ?> />
|
51 |
-
<p class="help"><?php _e( 'If you use your own Google script, check this', 'popups' ); ?></p>
|
52 |
-
</td>
|
53 |
-
|
54 |
-
</tr>
|
55 |
-
<tr valign="top" class="">
|
56 |
-
<th><label for="style"><?php _e( 'Unload Twitter javascript', 'popups' ); ?></label></th>
|
57 |
-
<td colspan="3">
|
58 |
-
<label><input type="checkbox" id="style" name="spu_settings[twitter]" value="1" <?php isset($opts['twitter']) && checked($opts['twitter'], 1); ?> />
|
59 |
-
<p class="help"><?php _e( 'If you use your own Twitter script, check this', 'popups' ); ?></p>
|
60 |
-
</td>
|
61 |
-
|
62 |
-
</tr>
|
63 |
-
<?php do_action( 'spu/settings_page/after' ); ?>
|
64 |
-
|
65 |
-
<tr valign="top" class="">
|
66 |
-
<th><label for="uninstall"><?php _e( 'Delete all data on Uninstall', 'popups' ); ?></label></th>
|
67 |
-
<td colspan="3">
|
68 |
-
<label><input type="checkbox" id="uninstall" name="spu_settings[uninstall]" value="1" <?php isset($opts['uninstall']) && checked($opts['uninstall'], 1); ?> />
|
69 |
-
<p class="help"><?php _e( 'When you uninstall the plugin all popups, settings and stats will be deleted from your db', 'popups' ); ?></p>
|
70 |
-
</td>
|
71 |
-
|
72 |
-
</tr>
|
73 |
-
<tr><td><input type="submit" class="button-primary" value="<?php _e( 'Save settings', 'popups' );?>"/></td>
|
74 |
-
<?php wp_nonce_field('spu_save_settings','spu_nonce'); ?>
|
75 |
-
</table>
|
76 |
-
</form>
|
77 |
</div>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Settings page template
|
4 |
+
* @since 1.1
|
5 |
+
*/
|
6 |
+
?>
|
7 |
+
<div class="wrap">
|
8 |
+
<h2>Popups <?php echo SocialPopup::VERSION;
|
9 |
+
if( class_exists('PopupsP') ){
|
10 |
+
echo ' - Premium v', PopupsP::VERSION;
|
11 |
+
}
|
12 |
+
?></h2>
|
13 |
+
<form name="spu-settings" method="post">
|
14 |
+
<table class="form-table">
|
15 |
+
<?php do_action( 'spu/settings_page/before' ); ?>
|
16 |
+
<tr valign="top" class="">
|
17 |
+
<th><label for="add_link"><?php _e( 'Affiliate link', 'popups' ); ?></label></th>
|
18 |
+
<td colspan="3">
|
19 |
+
<label><input type="text" id="add_link" name="spu_settings[aff_link]" value="<?php echo isset($opts['aff_link']) ? $opts['aff_link'] :'';?>" class="regular-text" />
|
20 |
+
<p class="help"><?php echo sprintf(__( 'You can earn money by promoting the plugin! Join <a href="%s">our affiliate program</a> and paste your affiliate link here to earn 35% in commissions . Once entered, it will replace the default "Powered by" on the popups.', 'popups' ) , 'https://timersys.com/affiliates/'); ?></p>
|
21 |
+
</td>
|
22 |
+
</tr>
|
23 |
+
<tr valign="top" class="">
|
24 |
+
<th><label for="ajax_mode"><?php _e( 'Ajax mode?', 'popups' ); ?></label></th>
|
25 |
+
<td colspan="3">
|
26 |
+
<label><input type="checkbox" id="ajax_mode" name="spu_settings[ajax_mode]" value="1" <?php isset($opts['ajax_mode']) && checked($opts['ajax_mode'], 1); ?> />
|
27 |
+
<p class="help"><?php _e( 'Load popups using ajax. Compatible with cache plugins, but might not work with all plugins', 'popups' ); ?></p>
|
28 |
+
</td>
|
29 |
+
</tr>
|
30 |
+
|
31 |
+
<tr valign="top" class="">
|
32 |
+
<th><label for="style"><?php _e( 'Remove shortcodes style', 'popups' ); ?></label></th>
|
33 |
+
<td colspan="3">
|
34 |
+
<label><input type="checkbox" id="style" name="spu_settings[shortcodes_style]" value="1" <?php isset($opts['shortcodes_style']) && checked($opts['shortcodes_style'], 1); ?> />
|
35 |
+
<p class="help"><?php _e( 'By default the plugin will apply some style to shortcodes. Check here if you want to manually style them', 'popups' ); ?></p>
|
36 |
+
</td>
|
37 |
+
|
38 |
+
</tr>
|
39 |
+
<tr valign="top" class="">
|
40 |
+
<th><label for="style"><?php _e( 'Unload Facebook javascript', 'popups' ); ?></label></th>
|
41 |
+
<td colspan="3">
|
42 |
+
<label><input type="checkbox" id="style" name="spu_settings[facebook]" value="1" <?php isset($opts['facebook']) && checked($opts['facebook'], 1); ?> />
|
43 |
+
<p class="help"><?php _e( 'If you use your own Facebook script, check this', 'popups' ); ?></p>
|
44 |
+
</td>
|
45 |
+
|
46 |
+
</tr>
|
47 |
+
<tr valign="top" class="">
|
48 |
+
<th><label for="style"><?php _e( 'Unload Google javascript', 'popups' ); ?></label></th>
|
49 |
+
<td colspan="3">
|
50 |
+
<label><input type="checkbox" id="style" name="spu_settings[google]" value="1" <?php isset($opts['google']) && checked($opts['google'], 1); ?> />
|
51 |
+
<p class="help"><?php _e( 'If you use your own Google script, check this', 'popups' ); ?></p>
|
52 |
+
</td>
|
53 |
+
|
54 |
+
</tr>
|
55 |
+
<tr valign="top" class="">
|
56 |
+
<th><label for="style"><?php _e( 'Unload Twitter javascript', 'popups' ); ?></label></th>
|
57 |
+
<td colspan="3">
|
58 |
+
<label><input type="checkbox" id="style" name="spu_settings[twitter]" value="1" <?php isset($opts['twitter']) && checked($opts['twitter'], 1); ?> />
|
59 |
+
<p class="help"><?php _e( 'If you use your own Twitter script, check this', 'popups' ); ?></p>
|
60 |
+
</td>
|
61 |
+
|
62 |
+
</tr>
|
63 |
+
<?php do_action( 'spu/settings_page/after' ); ?>
|
64 |
+
|
65 |
+
<tr valign="top" class="">
|
66 |
+
<th><label for="uninstall"><?php _e( 'Delete all data on Uninstall', 'popups' ); ?></label></th>
|
67 |
+
<td colspan="3">
|
68 |
+
<label><input type="checkbox" id="uninstall" name="spu_settings[uninstall]" value="1" <?php isset($opts['uninstall']) && checked($opts['uninstall'], 1); ?> />
|
69 |
+
<p class="help"><?php _e( 'When you uninstall the plugin all popups, settings and stats will be deleted from your db', 'popups' ); ?></p>
|
70 |
+
</td>
|
71 |
+
|
72 |
+
</tr>
|
73 |
+
<tr><td><input type="submit" class="button-primary" value="<?php _e( 'Save settings', 'popups' );?>"/></td>
|
74 |
+
<?php wp_nonce_field('spu_save_settings','spu_nonce'); ?>
|
75 |
+
</table>
|
76 |
+
</form>
|
77 |
</div>
|
composer.json
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
-
{
|
2 |
-
"minimum-stability": "dev",
|
3 |
-
"require": {
|
4 |
-
"jaybizzle/crawler-detect": "1.*",
|
5 |
-
"mobiledetect/mobiledetectlib": "^2.8",
|
6 |
-
"cbschuld/browser.php": "^1.95@dev"
|
7 |
-
}
|
8 |
-
}
|
1 |
+
{
|
2 |
+
"minimum-stability": "dev",
|
3 |
+
"require": {
|
4 |
+
"jaybizzle/crawler-detect": "1.*",
|
5 |
+
"mobiledetect/mobiledetectlib": "^2.8",
|
6 |
+
"cbschuld/browser.php": "^1.95@dev"
|
7 |
+
}
|
8 |
+
}
|
composer.lock
CHANGED
@@ -1,166 +1,166 @@
|
|
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 |
-
"content-hash": "fe7213eeccfa0dd003c369f624314b84",
|
8 |
-
"packages": [
|
9 |
-
{
|
10 |
-
"name": "cbschuld/browser.php",
|
11 |
-
"version": "dev-master",
|
12 |
-
"source": {
|
13 |
-
"type": "git",
|
14 |
-
"url": "https://github.com/cbschuld/Browser.php.git",
|
15 |
-
"reference": "6bde9efb0b14a4917affe741500c29149419e491"
|
16 |
-
},
|
17 |
-
"dist": {
|
18 |
-
"type": "zip",
|
19 |
-
"url": "https://api.github.com/repos/cbschuld/Browser.php/zipball/6bde9efb0b14a4917affe741500c29149419e491",
|
20 |
-
"reference": "6bde9efb0b14a4917affe741500c29149419e491",
|
21 |
-
"shasum": ""
|
22 |
-
},
|
23 |
-
"type": "library",
|
24 |
-
"extra": {
|
25 |
-
"branch-alias": {
|
26 |
-
"dev-master": "1.95-dev"
|
27 |
-
}
|
28 |
-
},
|
29 |
-
"autoload": {
|
30 |
-
"files": [
|
31 |
-
"lib/Browser.php"
|
32 |
-
]
|
33 |
-
},
|
34 |
-
"notification-url": "https://packagist.org/downloads/",
|
35 |
-
"license": [
|
36 |
-
"MIT"
|
37 |
-
],
|
38 |
-
"authors": [
|
39 |
-
{
|
40 |
-
"name": "Chris Schuld",
|
41 |
-
"email": "chris@chrisschuld.com",
|
42 |
-
"homepage": "http://chrisschuld.com"
|
43 |
-
}
|
44 |
-
],
|
45 |
-
"description": "A PHP Class to detect a user's Browser",
|
46 |
-
"homepage": "http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php.html",
|
47 |
-
"keywords": [
|
48 |
-
"browser",
|
49 |
-
"detection",
|
50 |
-
"user agent"
|
51 |
-
],
|
52 |
-
"time": "2017-07-31T23:43:17+00:00"
|
53 |
-
},
|
54 |
-
{
|
55 |
-
"name": "jaybizzle/crawler-detect",
|
56 |
-
"version": "v1.2.63",
|
57 |
-
"source": {
|
58 |
-
"type": "git",
|
59 |
-
"url": "https://github.com/JayBizzle/Crawler-Detect.git",
|
60 |
-
"reference": "3566bc69d0839ab2dfd739a660b00f25a6f02031"
|
61 |
-
},
|
62 |
-
"dist": {
|
63 |
-
"type": "zip",
|
64 |
-
"url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/3566bc69d0839ab2dfd739a660b00f25a6f02031",
|
65 |
-
"reference": "3566bc69d0839ab2dfd739a660b00f25a6f02031",
|
66 |
-
"shasum": ""
|
67 |
-
},
|
68 |
-
"require": {
|
69 |
-
"php": ">=5.3.0"
|
70 |
-
},
|
71 |
-
"require-dev": {
|
72 |
-
"phpunit/phpunit": "^4.8|^5.5|^6.5",
|
73 |
-
"satooshi/php-coveralls": "1.*"
|
74 |
-
},
|
75 |
-
"type": "library",
|
76 |
-
"autoload": {
|
77 |
-
"psr-4": {
|
78 |
-
"Jaybizzle\\CrawlerDetect\\": "src/"
|
79 |
-
}
|
80 |
-
},
|
81 |
-
"notification-url": "https://packagist.org/downloads/",
|
82 |
-
"license": [
|
83 |
-
"MIT"
|
84 |
-
],
|
85 |
-
"authors": [
|
86 |
-
{
|
87 |
-
"name": "Mark Beech",
|
88 |
-
"email": "m@rkbee.ch",
|
89 |
-
"role": "Developer"
|
90 |
-
}
|
91 |
-
],
|
92 |
-
"description": "CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent",
|
93 |
-
"homepage": "https://github.com/JayBizzle/Crawler-Detect/",
|
94 |
-
"keywords": [
|
95 |
-
"crawler",
|
96 |
-
"crawler detect",
|
97 |
-
"crawler detector",
|
98 |
-
"crawlerdetect",
|
99 |
-
"php crawler detect"
|
100 |
-
],
|
101 |
-
"time": "2018-05-21T19:56:44+00:00"
|
102 |
-
},
|
103 |
-
{
|
104 |
-
"name": "mobiledetect/mobiledetectlib",
|
105 |
-
"version": "2.8.31",
|
106 |
-
"source": {
|
107 |
-
"type": "git",
|
108 |
-
"url": "https://github.com/serbanghita/Mobile-Detect.git",
|
109 |
-
"reference": "adb882ea3b9d154f087ecb2c333180dad6f4dd37"
|
110 |
-
},
|
111 |
-
"dist": {
|
112 |
-
"type": "zip",
|
113 |
-
"url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/adb882ea3b9d154f087ecb2c333180dad6f4dd37",
|
114 |
-
"reference": "adb882ea3b9d154f087ecb2c333180dad6f4dd37",
|
115 |
-
"shasum": ""
|
116 |
-
},
|
117 |
-
"require": {
|
118 |
-
"php": ">=5.0.0"
|
119 |
-
},
|
120 |
-
"require-dev": {
|
121 |
-
"phpunit/phpunit": "~4.8.35||~5.7"
|
122 |
-
},
|
123 |
-
"type": "library",
|
124 |
-
"autoload": {
|
125 |
-
"classmap": [
|
126 |
-
"Mobile_Detect.php"
|
127 |
-
],
|
128 |
-
"psr-0": {
|
129 |
-
"Detection": "namespaced/"
|
130 |
-
}
|
131 |
-
},
|
132 |
-
"notification-url": "https://packagist.org/downloads/",
|
133 |
-
"license": [
|
134 |
-
"MIT"
|
135 |
-
],
|
136 |
-
"authors": [
|
137 |
-
{
|
138 |
-
"name": "Serban Ghita",
|
139 |
-
"email": "serbanghita@gmail.com",
|
140 |
-
"homepage": "http://mobiledetect.net",
|
141 |
-
"role": "Developer"
|
142 |
-
}
|
143 |
-
],
|
144 |
-
"description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.",
|
145 |
-
"homepage": "https://github.com/serbanghita/Mobile-Detect",
|
146 |
-
"keywords": [
|
147 |
-
"detect mobile devices",
|
148 |
-
"mobile",
|
149 |
-
"mobile detect",
|
150 |
-
"mobile detector",
|
151 |
-
"php mobile detect"
|
152 |
-
],
|
153 |
-
"time": "2018-02-26T19:39:55+00:00"
|
154 |
-
}
|
155 |
-
],
|
156 |
-
"packages-dev": [],
|
157 |
-
"aliases": [],
|
158 |
-
"minimum-stability": "dev",
|
159 |
-
"stability-flags": {
|
160 |
-
"cbschuld/browser.php": 20
|
161 |
-
},
|
162 |
-
"prefer-stable": false,
|
163 |
-
"prefer-lowest": false,
|
164 |
-
"platform": [],
|
165 |
-
"platform-dev": []
|
166 |
-
}
|
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 |
+
"content-hash": "fe7213eeccfa0dd003c369f624314b84",
|
8 |
+
"packages": [
|
9 |
+
{
|
10 |
+
"name": "cbschuld/browser.php",
|
11 |
+
"version": "dev-master",
|
12 |
+
"source": {
|
13 |
+
"type": "git",
|
14 |
+
"url": "https://github.com/cbschuld/Browser.php.git",
|
15 |
+
"reference": "6bde9efb0b14a4917affe741500c29149419e491"
|
16 |
+
},
|
17 |
+
"dist": {
|
18 |
+
"type": "zip",
|
19 |
+
"url": "https://api.github.com/repos/cbschuld/Browser.php/zipball/6bde9efb0b14a4917affe741500c29149419e491",
|
20 |
+
"reference": "6bde9efb0b14a4917affe741500c29149419e491",
|
21 |
+
"shasum": ""
|
22 |
+
},
|
23 |
+
"type": "library",
|
24 |
+
"extra": {
|
25 |
+
"branch-alias": {
|
26 |
+
"dev-master": "1.95-dev"
|
27 |
+
}
|
28 |
+
},
|
29 |
+
"autoload": {
|
30 |
+
"files": [
|
31 |
+
"lib/Browser.php"
|
32 |
+
]
|
33 |
+
},
|
34 |
+
"notification-url": "https://packagist.org/downloads/",
|
35 |
+
"license": [
|
36 |
+
"MIT"
|
37 |
+
],
|
38 |
+
"authors": [
|
39 |
+
{
|
40 |
+
"name": "Chris Schuld",
|
41 |
+
"email": "chris@chrisschuld.com",
|
42 |
+
"homepage": "http://chrisschuld.com"
|
43 |
+
}
|
44 |
+
],
|
45 |
+
"description": "A PHP Class to detect a user's Browser",
|
46 |
+
"homepage": "http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php.html",
|
47 |
+
"keywords": [
|
48 |
+
"browser",
|
49 |
+
"detection",
|
50 |
+
"user agent"
|
51 |
+
],
|
52 |
+
"time": "2017-07-31T23:43:17+00:00"
|
53 |
+
},
|
54 |
+
{
|
55 |
+
"name": "jaybizzle/crawler-detect",
|
56 |
+
"version": "v1.2.63",
|
57 |
+
"source": {
|
58 |
+
"type": "git",
|
59 |
+
"url": "https://github.com/JayBizzle/Crawler-Detect.git",
|
60 |
+
"reference": "3566bc69d0839ab2dfd739a660b00f25a6f02031"
|
61 |
+
},
|
62 |
+
"dist": {
|
63 |
+
"type": "zip",
|
64 |
+
"url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/3566bc69d0839ab2dfd739a660b00f25a6f02031",
|
65 |
+
"reference": "3566bc69d0839ab2dfd739a660b00f25a6f02031",
|
66 |
+
"shasum": ""
|
67 |
+
},
|
68 |
+
"require": {
|
69 |
+
"php": ">=5.3.0"
|
70 |
+
},
|
71 |
+
"require-dev": {
|
72 |
+
"phpunit/phpunit": "^4.8|^5.5|^6.5",
|
73 |
+
"satooshi/php-coveralls": "1.*"
|
74 |
+
},
|
75 |
+
"type": "library",
|
76 |
+
"autoload": {
|
77 |
+
"psr-4": {
|
78 |
+
"Jaybizzle\\CrawlerDetect\\": "src/"
|
79 |
+
}
|
80 |
+
},
|
81 |
+
"notification-url": "https://packagist.org/downloads/",
|
82 |
+
"license": [
|
83 |
+
"MIT"
|
84 |
+
],
|
85 |
+
"authors": [
|
86 |
+
{
|
87 |
+
"name": "Mark Beech",
|
88 |
+
"email": "m@rkbee.ch",
|
89 |
+
"role": "Developer"
|
90 |
+
}
|
91 |
+
],
|
92 |
+
"description": "CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent",
|
93 |
+
"homepage": "https://github.com/JayBizzle/Crawler-Detect/",
|
94 |
+
"keywords": [
|
95 |
+
"crawler",
|
96 |
+
"crawler detect",
|
97 |
+
"crawler detector",
|
98 |
+
"crawlerdetect",
|
99 |
+
"php crawler detect"
|
100 |
+
],
|
101 |
+
"time": "2018-05-21T19:56:44+00:00"
|
102 |
+
},
|
103 |
+
{
|
104 |
+
"name": "mobiledetect/mobiledetectlib",
|
105 |
+
"version": "2.8.31",
|
106 |
+
"source": {
|
107 |
+
"type": "git",
|
108 |
+
"url": "https://github.com/serbanghita/Mobile-Detect.git",
|
109 |
+
"reference": "adb882ea3b9d154f087ecb2c333180dad6f4dd37"
|
110 |
+
},
|
111 |
+
"dist": {
|
112 |
+
"type": "zip",
|
113 |
+
"url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/adb882ea3b9d154f087ecb2c333180dad6f4dd37",
|
114 |
+
"reference": "adb882ea3b9d154f087ecb2c333180dad6f4dd37",
|
115 |
+
"shasum": ""
|
116 |
+
},
|
117 |
+
"require": {
|
118 |
+
"php": ">=5.0.0"
|
119 |
+
},
|
120 |
+
"require-dev": {
|
121 |
+
"phpunit/phpunit": "~4.8.35||~5.7"
|
122 |
+
},
|
123 |
+
"type": "library",
|
124 |
+
"autoload": {
|
125 |
+
"classmap": [
|
126 |
+
"Mobile_Detect.php"
|
127 |
+
],
|
128 |
+
"psr-0": {
|
129 |
+
"Detection": "namespaced/"
|
130 |
+
}
|
131 |
+
},
|
132 |
+
"notification-url": "https://packagist.org/downloads/",
|
133 |
+
"license": [
|
134 |
+
"MIT"
|
135 |
+
],
|
136 |
+
"authors": [
|
137 |
+
{
|
138 |
+
"name": "Serban Ghita",
|
139 |
+
"email": "serbanghita@gmail.com",
|
140 |
+
"homepage": "http://mobiledetect.net",
|
141 |
+
"role": "Developer"
|
142 |
+
}
|
143 |
+
],
|
144 |
+
"description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.",
|
145 |
+
"homepage": "https://github.com/serbanghita/Mobile-Detect",
|
146 |
+
"keywords": [
|
147 |
+
"detect mobile devices",
|
148 |
+
"mobile",
|
149 |
+
"mobile detect",
|
150 |
+
"mobile detector",
|
151 |
+
"php mobile detect"
|
152 |
+
],
|
153 |
+
"time": "2018-02-26T19:39:55+00:00"
|
154 |
+
}
|
155 |
+
],
|
156 |
+
"packages-dev": [],
|
157 |
+
"aliases": [],
|
158 |
+
"minimum-stability": "dev",
|
159 |
+
"stability-flags": {
|
160 |
+
"cbschuld/browser.php": 20
|
161 |
+
},
|
162 |
+
"prefer-stable": false,
|
163 |
+
"prefer-lowest": false,
|
164 |
+
"platform": [],
|
165 |
+
"platform-dev": []
|
166 |
+
}
|
includes/class-spu-helper.php
CHANGED
@@ -1,564 +1,564 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Helper class of SPu for admin
|
5 |
-
*
|
6 |
-
* @package SocialPopup_Admin
|
7 |
-
* @author Damian Logghe <info@timersys.com>
|
8 |
-
*/
|
9 |
-
class Spu_Helper {
|
10 |
-
/**
|
11 |
-
* Plugin slug
|
12 |
-
* @var string
|
13 |
-
*/
|
14 |
-
protected static $plugin_slug = '';
|
15 |
-
|
16 |
-
/**
|
17 |
-
* ajax_render_operator
|
18 |
-
*
|
19 |
-
* @description creates the HTML for the field group operator metabox. Called from both Ajax and PHP
|
20 |
-
* @since 1.4.6
|
21 |
-
* I took this functions from the awesome Advanced custom fields plugin http://www.advancedcustomfields.com/
|
22 |
-
*/
|
23 |
-
|
24 |
-
public static function ajax_render_operator( $options = array() ) {
|
25 |
-
// defaults
|
26 |
-
$defaults = array(
|
27 |
-
'group_id' => 0,
|
28 |
-
'rule_id' => 0,
|
29 |
-
'value' => null,
|
30 |
-
'param' => null,
|
31 |
-
);
|
32 |
-
|
33 |
-
$is_ajax = false;
|
34 |
-
|
35 |
-
if( isset($_POST['nonce']) && wp_verify_nonce($_POST['nonce'], 'spu_nonce') )
|
36 |
-
{
|
37 |
-
$is_ajax = true;
|
38 |
-
}
|
39 |
-
|
40 |
-
// Is AJAX call?
|
41 |
-
if( $is_ajax )
|
42 |
-
{
|
43 |
-
$options = array_merge($defaults, $_POST);
|
44 |
-
$options['name'] = 'spu_rules[' . $options['group_id'] . '][' . $options['rule_id'] . '][operator]';
|
45 |
-
}
|
46 |
-
else
|
47 |
-
{
|
48 |
-
$options = array_merge($defaults, $options);
|
49 |
-
}
|
50 |
-
// default for all rules
|
51 |
-
$choices = array(
|
52 |
-
'==' => __("is equal to", 'popups' ),
|
53 |
-
'!=' => __("is not equal to", 'popups' ),
|
54 |
-
);
|
55 |
-
if( $options['param'] == 'local_time' ) {
|
56 |
-
$choices = array(
|
57 |
-
'<' => __("less than", 'popups' ),
|
58 |
-
'>' => __("greater than", 'popups' ),
|
59 |
-
);
|
60 |
-
}
|
61 |
-
|
62 |
-
if( $options['param'] == 'date' ) {
|
63 |
-
$choices = array_merge( $choices,array(
|
64 |
-
'<' => __("less than", 'popups' ),
|
65 |
-
'>' => __("greater than", 'popups' ),
|
66 |
-
));
|
67 |
-
}
|
68 |
-
|
69 |
-
// allow custom operators
|
70 |
-
$choices = apply_filters( 'spu/metaboxes/rule_operators', $choices, $options );
|
71 |
-
|
72 |
-
self::print_select( $options, $choices );
|
73 |
-
|
74 |
-
// ajax?
|
75 |
-
if( $is_ajax )
|
76 |
-
{
|
77 |
-
die();
|
78 |
-
}
|
79 |
-
}
|
80 |
-
|
81 |
-
/**
|
82 |
-
* ajax_render_rules
|
83 |
-
*
|
84 |
-
* @description creates the HTML for the field group rules metabox. Called from both Ajax and PHP
|
85 |
-
* @since 2.0
|
86 |
-
* I took this functions from the awesome Advanced custom fields plugin http://www.advancedcustomfields.com/
|
87 |
-
*/
|
88 |
-
|
89 |
-
public static function ajax_render_rules( $options = array() )
|
90 |
-
{
|
91 |
-
|
92 |
-
// defaults
|
93 |
-
$defaults = array(
|
94 |
-
'group_id' => 0,
|
95 |
-
'rule_id' => 0,
|
96 |
-
'value' => null,
|
97 |
-
'param' => null,
|
98 |
-
);
|
99 |
-
|
100 |
-
$is_ajax = false;
|
101 |
-
|
102 |
-
if( isset($_POST['nonce']) && wp_verify_nonce($_POST['nonce'], 'spu_nonce') )
|
103 |
-
{
|
104 |
-
$is_ajax = true;
|
105 |
-
}
|
106 |
-
|
107 |
-
// Is AJAX call?
|
108 |
-
if( $is_ajax )
|
109 |
-
{
|
110 |
-
$options = array_merge($defaults, $_POST);
|
111 |
-
$options['name'] = 'spu_rules[' . $options['group_id'] . '][' . $options['rule_id'] . '][value]';
|
112 |
-
}
|
113 |
-
else
|
114 |
-
{
|
115 |
-
$options = array_merge($defaults, $options);
|
116 |
-
}
|
117 |
-
|
118 |
-
// vars
|
119 |
-
$choices = array();
|
120 |
-
|
121 |
-
|
122 |
-
// some case's have the same outcome
|
123 |
-
if($options['param'] == "page_parent")
|
124 |
-
{
|
125 |
-
$options['param'] = "page";
|
126 |
-
}
|
127 |
-
|
128 |
-
|
129 |
-
switch($options['param'])
|
130 |
-
{
|
131 |
-
case "post_type":
|
132 |
-
|
133 |
-
// all post types except attachment
|
134 |
-
$choices = apply_filters('spu/get_post_types', array(), array('attachment') );
|
135 |
-
|
136 |
-
break;
|
137 |
-
|
138 |
-
|
139 |
-
case "page":
|
140 |
-
|
141 |
-
$post_type = 'page';
|
142 |
-
$args = array(
|
143 |
-
'posts_per_page' => -1,
|
144 |
-
'post_type' => $post_type,
|
145 |
-
'orderby' => 'menu_order title',
|
146 |
-
'order' => 'ASC',
|
147 |
-
'post_status' => 'any',
|
148 |
-
'suppress_filters' => false,
|
149 |
-
'update_post_meta_cache' => false,
|
150 |
-
);
|
151 |
-
|
152 |
-
$posts = get_posts( apply_filters('spu/rules/page_args', $args ) );
|
153 |
-
|
154 |
-
if( $posts )
|
155 |
-
{
|
156 |
-
// sort into hierachial order!
|
157 |
-
if( is_post_type_hierarchical( $post_type ) )
|
158 |
-
{
|
159 |
-
$posts = get_page_children( 0, $posts );
|
160 |
-
}
|
161 |
-
|
162 |
-
foreach( $posts as $page )
|
163 |
-
{
|
164 |
-
$title = '';
|
165 |
-
$ancestors = get_ancestors($page->ID, 'page');
|
166 |
-
if($ancestors)
|
167 |
-
{
|
168 |
-
foreach($ancestors as $a)
|
169 |
-
{
|
170 |
-
$title .= '- ';
|
171 |
-
}
|
172 |
-
}
|
173 |
-
|
174 |
-
$title .= apply_filters( 'the_title', $page->post_title, $page->ID );
|
175 |
-
|
176 |
-
|
177 |
-
// status
|
178 |
-
if($page->post_status != "publish")
|
179 |
-
{
|
180 |
-
$title .= " ($page->post_status)";
|
181 |
-
}
|
182 |
-
|
183 |
-
$choices[ $page->ID ] = $title;
|
184 |
-
|
185 |
-
}
|
186 |
-
// foreach($pages as $page)
|
187 |
-
|
188 |
-
}
|
189 |
-
|
190 |
-
break;
|
191 |
-
|
192 |
-
|
193 |
-
case "page_type" :
|
194 |
-
|
195 |
-
$choices = array(
|
196 |
-
'all_pages' => __("All Pages", 'popups'),
|
197 |
-
'front_page' => __("Front Page", 'popups'),
|
198 |
-
'posts_page' => __("Posts Page", 'popups'),
|
199 |
-
'category_page' => __("Category Page", 'popups'),
|
200 |
-
'search_page' => __("Search Page", 'popups'),
|
201 |
-
'archive_page' => __("Archives Page", 'popups'),
|
202 |
-
'top_level' => __("Top Level Page (parent of 0)", 'popups'),
|
203 |
-
'parent' => __("Parent Page (has children)", 'popups'),
|
204 |
-
'child' => __("Child Page (has parent)", 'popups'),
|
205 |
-
);
|
206 |
-
|
207 |
-
break;
|
208 |
-
|
209 |
-
case "page_template" :
|
210 |
-
|
211 |
-
$choices = array(
|
212 |
-
'default' => __("Default Template", 'popups'),
|
213 |
-
);
|
214 |
-
|
215 |
-
$templates = get_page_templates();
|
216 |
-
foreach($templates as $k => $v)
|
217 |
-
{
|
218 |
-
$choices[$v] = $k;
|
219 |
-
}
|
220 |
-
|
221 |
-
break;
|
222 |
-
|
223 |
-
case "post" :
|
224 |
-
$post_types = apply_filters('spu/get_post_types', array());
|
225 |
-
unset( $post_types['page'], $post_types['attachment'], $post_types['revision'] , $post_types['nav_menu_item'], $post_types['spucpt'] );
|
226 |
-
if( $post_types )
|
227 |
-
{
|
228 |
-
foreach( $post_types as $post_type )
|
229 |
-
{
|
230 |
-
$args = array(
|
231 |
-
'numberposts' => '-1',
|
232 |
-
'post_type' => $post_type,
|
233 |
-
'post_status' => array('publish', 'private', 'draft', 'inherit', 'future'),
|
234 |
-
'suppress_filters' => false,
|
235 |
-
'update_post_meta_cache' => false,
|
236 |
-
'update_post_term_cache' => false,
|
237 |
-
);
|
238 |
-
$posts = get_posts(apply_filters('spu/rules/post_args', $args ));
|
239 |
-
|
240 |
-
if( $posts)
|
241 |
-
{
|
242 |
-
$choices[$post_type] = array();
|
243 |
-
|
244 |
-
foreach($posts as $post)
|
245 |
-
{
|
246 |
-
$title = apply_filters( 'the_title', $post->post_title, $post->ID );
|
247 |
-
|
248 |
-
// status
|
249 |
-
if($post->post_status != "publish")
|
250 |
-
{
|
251 |
-
$title .= " ($post->post_status)";
|
252 |
-
}
|
253 |
-
|
254 |
-
$choices[$post_type][$post->ID] = $title;
|
255 |
-
|
256 |
-
}
|
257 |
-
// foreach($posts as $post)
|
258 |
-
}
|
259 |
-
// if( $posts )
|
260 |
-
}
|
261 |
-
// foreach( $post_types as $post_type )
|
262 |
-
}
|
263 |
-
// if( $post_types )
|
264 |
-
|
265 |
-
|
266 |
-
break;
|
267 |
-
|
268 |
-
case "post_category" :
|
269 |
-
|
270 |
-
$categories = get_terms('category', array('get' => 'all', 'fields' => 'id=>name' ) );
|
271 |
-
$choices = apply_filters('spu/rules/categories', $categories );
|
272 |
-
|
273 |
-
break;
|
274 |
-
|
275 |
-
case "post_format" :
|
276 |
-
|
277 |
-
$choices = get_post_format_strings();
|
278 |
-
|
279 |
-
break;
|
280 |
-
|
281 |
-
case "post_status" :
|
282 |
-
|
283 |
-
$choices = get_post_stati();
|
284 |
-
|
285 |
-
break;
|
286 |
-
|
287 |
-
case "user_type" :
|
288 |
-
|
289 |
-
global $wp_roles;
|
290 |
-
|
291 |
-
$choices = $wp_roles->get_names();
|
292 |
-
|
293 |
-
if( is_multisite() )
|
294 |
-
{
|
295 |
-
$choices['super_admin'] = __('Super Admin');
|
296 |
-
}
|
297 |
-
|
298 |
-
break;
|
299 |
-
|
300 |
-
case "taxonomy" :
|
301 |
-
|
302 |
-
$choices = array();
|
303 |
-
$simple_value = true;
|
304 |
-
$choices = apply_filters('spu/get_taxonomies', $choices, $simple_value);
|
305 |
-
|
306 |
-
break;
|
307 |
-
|
308 |
-
case "logged_user" :
|
309 |
-
case "mobiles" :
|
310 |
-
case "tablets" :
|
311 |
-
case "desktop" :
|
312 |
-
case "crawlers" :
|
313 |
-
case "left_comment" :
|
314 |
-
case "search_engine" :
|
315 |
-
case "same_site" :
|
316 |
-
|
317 |
-
$choices = array('true' => __( 'True', 'popups' ) );
|
318 |
-
|
319 |
-
break;
|
320 |
-
|
321 |
-
|
322 |
-
}
|
323 |
-
|
324 |
-
|
325 |
-
// allow custom rules rules
|
326 |
-
$choices = apply_filters( 'spu/rules/rule_values/' . $options['param'], $choices );
|
327 |
-
|
328 |
-
// Custom fields for rules
|
329 |
-
do_action( 'spu/rules/print_' . $options['param'] . '_field', $options, $choices );
|
330 |
-
|
331 |
-
// ajax?
|
332 |
-
if( $is_ajax )
|
333 |
-
{
|
334 |
-
die();
|
335 |
-
}
|
336 |
-
}
|
337 |
-
|
338 |
-
/**
|
339 |
-
* Helper function to print select fields for rules
|
340 |
-
* @since 2.0
|
341 |
-
* @param array $choices options values for select
|
342 |
-
* @param array $options array to pass group, id, rule_id etc
|
343 |
-
* @return echo the select field
|
344 |
-
*/
|
345 |
-
static function print_select( $options, $choices ) {
|
346 |
-
|
347 |
-
// value must be array
|
348 |
-
if( !is_array($options['value']) )
|
349 |
-
{
|
350 |
-
// perhaps this is a default value with new lines in it?
|
351 |
-
if( strpos($options['value'], "\n") !== false )
|
352 |
-
{
|
353 |
-
// found multiple lines, explode it
|
354 |
-
$options['value'] = explode("\n", $options['value']);
|
355 |
-
}
|
356 |
-
else
|
357 |
-
{
|
358 |
-
$options['value'] = array( $options['value'] );
|
359 |
-
}
|
360 |
-
}
|
361 |
-
|
362 |
-
|
363 |
-
// trim value
|
364 |
-
$options['value'] = array_map('trim', $options['value']);
|
365 |
-
// determin if choices are grouped (2 levels of array)
|
366 |
-
if( is_array($choices) )
|
367 |
-
{
|
368 |
-
foreach( $choices as $k => $v )
|
369 |
-
{
|
370 |
-
if( is_array($v) )
|
371 |
-
{
|
372 |
-
$optgroup = true;
|
373 |
-
}
|
374 |
-
}
|
375 |
-
}
|
376 |
-
|
377 |
-
echo '<select id="spu_rule_'.$options['group_id'].'_rule_'.$options['rule_id'].'" class="select" name="'.$options['name'].'">';
|
378 |
-
|
379 |
-
// loop through values and add them as options
|
380 |
-
if( is_array($choices) )
|
381 |
-
{
|
382 |
-
foreach( $choices as $key => $value )
|
383 |
-
{
|
384 |
-
if( isset($optgroup) )
|
385 |
-
{
|
386 |
-
// this select is grouped with optgroup
|
387 |
-
if($key != '') echo '<optgroup label="'.$key.'">';
|
388 |
-
|
389 |
-
if( is_array($value) )
|
390 |
-
{
|
391 |
-
foreach($value as $id => $label)
|
392 |
-
{
|
393 |
-
|
394 |
-
$selected = in_array($id, $options['value']) ? 'selected="selected"' : '';
|
395 |
-
|
396 |
-
echo '<option value="'.$id.'" '.$selected.'>'.$label.'</option>';
|
397 |
-
}
|
398 |
-
}
|
399 |
-
|
400 |
-
if($key != '') echo '</optgroup>';
|
401 |
-
}
|
402 |
-
else
|
403 |
-
{
|
404 |
-
$selected = in_array($key, $options['value']) ? 'selected="selected"' : '';
|
405 |
-
echo '<option value="'.$key.'" '.$selected.'>'.$value.'</option>';
|
406 |
-
}
|
407 |
-
}
|
408 |
-
}
|
409 |
-
|
410 |
-
|
411 |
-
echo '</select>';
|
412 |
-
|
413 |
-
}
|
414 |
-
|
415 |
-
/**
|
416 |
-
* Prints a text field rule
|
417 |
-
* @param $options
|
418 |
-
*/
|
419 |
-
static function print_textfield( $options ) {
|
420 |
-
echo '<input type="text" name="'.$options['name'].'" value="'.$options['value'].'" id="spu_rule_'.$options['group_id'].'_rule_'.$options['rule_id'].'" />';
|
421 |
-
}
|
422 |
-
|
423 |
-
/**
|
424 |
-
* Return the box options
|
425 |
-
* @param int $id spucpt id
|
426 |
-
* @since 2.0
|
427 |
-
* @return array metadata values
|
428 |
-
*/
|
429 |
-
function get_box_options( $id )
|
430 |
-
{
|
431 |
-
$defaults = array(
|
432 |
-
'css' => array(
|
433 |
-
'bgopacity' => '0.5',
|
434 |
-
'overlay_color' => '#000',
|
435 |
-
'background_color' => '#eeeeee',
|
436 |
-
'background_opacity'=> '1',
|
437 |
-
'width' => '600px',
|
438 |
-
'padding' => '25',
|
439 |
-
'color' => '#333',
|
440 |
-
'shadow_color' => '#666',
|
441 |
-
'shadow_type' => 'outset',
|
442 |
-
'shadow_x_offset' => '0',
|
443 |
-
'shadow_y_offset' => '0',
|
444 |
-
'shadow_blur' => '10',
|
445 |
-
'shadow_spread' => '1',
|
446 |
-
'border_color' => '#eee',
|
447 |
-
'border_width' => '8',
|
448 |
-
'border_radius' => '0',
|
449 |
-
'border_type' => 'none',
|
450 |
-
'close_color' => '#666',
|
451 |
-
'close_hover_color' => '#000',
|
452 |
-
'close_size' => '30px',
|
453 |
-
'close_position' => 'top_right',
|
454 |
-
'close_shadow_color'=> '#fff',
|
455 |
-
'position' => 'centered',
|
456 |
-
),
|
457 |
-
'trigger' => 'seconds',
|
458 |
-
'trigger_number' => '5',
|
459 |
-
'animation' => 'fade',
|
460 |
-
'duration-convert-cookie' => '999',
|
461 |
-
'duration-close-cookie' => '30',
|
462 |
-
'name-convert-cookie' => 'spu_conversion',
|
463 |
-
'name-close-cookie' => 'spu_closing',
|
464 |
-
'auto_hide' => 0,
|
465 |
-
'test_mode' => 0,
|
466 |
-
'conversion_close' => '1',
|
467 |
-
'powered_link' => '0',
|
468 |
-
);
|
469 |
-
|
470 |
-
$opts = apply_filters( 'spu/metaboxes/box_options', get_post_meta( $id, 'spu_options', true ), $id );
|
471 |
-
|
472 |
-
$opts = wp_parse_args( $opts, apply_filters( 'spu/metaboxes/default_options', $defaults ) );
|
473 |
-
// we added new rules as we can't merge recursively, so manual check them
|
474 |
-
foreach ( $defaults['css'] as $key => $value ) {
|
475 |
-
if( ! isset($opts['css'][$key] ) )
|
476 |
-
$opts['css'][$key] = $value;
|
477 |
-
}
|
478 |
-
|
479 |
-
return $opts;
|
480 |
-
}
|
481 |
-
|
482 |
-
/**
|
483 |
-
* Return the box rules
|
484 |
-
* @param int $id spucpt id
|
485 |
-
* @since 2.0
|
486 |
-
* @return array metadata values
|
487 |
-
*/
|
488 |
-
function get_box_rules( $id )
|
489 |
-
{
|
490 |
-
$defaults = array(
|
491 |
-
// group_0
|
492 |
-
array(
|
493 |
-
|
494 |
-
// rule_0
|
495 |
-
array(
|
496 |
-
'param' => 'page_type',
|
497 |
-
'operator' => '==',
|
498 |
-
'value' => 'all_pages',
|
499 |
-
'order_no' => 0,
|
500 |
-
'group_no' => 0
|
501 |
-
)
|
502 |
-
)
|
503 |
-
);
|
504 |
-
|
505 |
-
$rules = get_post_meta( $id, 'spu_rules', true );
|
506 |
-
|
507 |
-
if( empty( $rules ) ) {
|
508 |
-
|
509 |
-
return apply_filters( 'spu/metaboxes/default_rules', $defaults );
|
510 |
-
|
511 |
-
} else {
|
512 |
-
|
513 |
-
return $rules;
|
514 |
-
|
515 |
-
}
|
516 |
-
|
517 |
-
|
518 |
-
}
|
519 |
-
|
520 |
-
/**
|
521 |
-
* Simple HEX TO RGBA converter
|
522 |
-
* @param $color
|
523 |
-
* @param bool $opacity
|
524 |
-
*
|
525 |
-
* @return string
|
526 |
-
*/
|
527 |
-
public static function hex2rgba($color, $opacity = false) {
|
528 |
-
|
529 |
-
$default = 'rgb(0,0,0)';
|
530 |
-
|
531 |
-
//Return default if no color provided
|
532 |
-
if(empty($color))
|
533 |
-
return $default;
|
534 |
-
|
535 |
-
//Sanitize $color if "#" is provided
|
536 |
-
if ($color[0] == '#' ) {
|
537 |
-
$color = substr( $color, 1 );
|
538 |
-
}
|
539 |
-
|
540 |
-
//Check if color has 6 or 3 characters and get values
|
541 |
-
if (strlen($color) == 6) {
|
542 |
-
$hex = array( $color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5] );
|
543 |
-
} elseif ( strlen( $color ) == 3 ) {
|
544 |
-
$hex = array( $color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2] );
|
545 |
-
} else {
|
546 |
-
return $default;
|
547 |
-
}
|
548 |
-
|
549 |
-
//Convert hexadec to rgb
|
550 |
-
$rgb = array_map('hexdec', $hex);
|
551 |
-
|
552 |
-
//Check if opacity is set(rgba or rgb)
|
553 |
-
if($opacity){
|
554 |
-
if(abs($opacity) > 1)
|
555 |
-
$opacity = 1.0;
|
556 |
-
$output = 'rgba('.implode(",",$rgb).','.$opacity.')';
|
557 |
-
} else {
|
558 |
-
$output = 'rgb('.implode(",",$rgb).')';
|
559 |
-
}
|
560 |
-
|
561 |
-
//Return rgb(a) color string
|
562 |
-
return $output;
|
563 |
-
}
|
564 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Helper class of SPu for admin
|
5 |
+
*
|
6 |
+
* @package SocialPopup_Admin
|
7 |
+
* @author Damian Logghe <info@timersys.com>
|
8 |
+
*/
|
9 |
+
class Spu_Helper {
|
10 |
+
/**
|
11 |
+
* Plugin slug
|
12 |
+
* @var string
|
13 |
+
*/
|
14 |
+
protected static $plugin_slug = '';
|
15 |
+
|
16 |
+
/**
|
17 |
+
* ajax_render_operator
|
18 |
+
*
|
19 |
+
* @description creates the HTML for the field group operator metabox. Called from both Ajax and PHP
|
20 |
+
* @since 1.4.6
|
21 |
+
* I took this functions from the awesome Advanced custom fields plugin http://www.advancedcustomfields.com/
|
22 |
+
*/
|
23 |
+
|
24 |
+
public static function ajax_render_operator( $options = array() ) {
|
25 |
+
// defaults
|
26 |
+
$defaults = array(
|
27 |
+
'group_id' => 0,
|
28 |
+
'rule_id' => 0,
|
29 |
+
'value' => null,
|
30 |
+
'param' => null,
|
31 |
+
);
|
32 |
+
|
33 |
+
$is_ajax = false;
|
34 |
+
|
35 |
+
if( isset($_POST['nonce']) && wp_verify_nonce($_POST['nonce'], 'spu_nonce') )
|
36 |
+
{
|
37 |
+
$is_ajax = true;
|
38 |
+
}
|
39 |
+
|
40 |
+
// Is AJAX call?
|
41 |
+
if( $is_ajax )
|
42 |
+
{
|
43 |
+
$options = array_merge($defaults, $_POST);
|
44 |
+
$options['name'] = 'spu_rules[' . $options['group_id'] . '][' . $options['rule_id'] . '][operator]';
|
45 |
+
}
|
46 |
+
else
|
47 |
+
{
|
48 |
+
$options = array_merge($defaults, $options);
|
49 |
+
}
|
50 |
+
// default for all rules
|
51 |
+
$choices = array(
|
52 |
+
'==' => __("is equal to", 'popups' ),
|
53 |
+
'!=' => __("is not equal to", 'popups' ),
|
54 |
+
);
|
55 |
+
if( $options['param'] == 'local_time' ) {
|
56 |
+
$choices = array(
|
57 |
+
'<' => __("less than", 'popups' ),
|
58 |
+
'>' => __("greater than", 'popups' ),
|
59 |
+
);
|
60 |
+
}
|
61 |
+
|
62 |
+
if( $options['param'] == 'date' ) {
|
63 |
+
$choices = array_merge( $choices,array(
|
64 |
+
'<' => __("less than", 'popups' ),
|
65 |
+
'>' => __("greater than", 'popups' ),
|
66 |
+
));
|
67 |
+
}
|
68 |
+
|
69 |
+
// allow custom operators
|
70 |
+
$choices = apply_filters( 'spu/metaboxes/rule_operators', $choices, $options );
|
71 |
+
|
72 |
+
self::print_select( $options, $choices );
|
73 |
+
|
74 |
+
// ajax?
|
75 |
+
if( $is_ajax )
|
76 |
+
{
|
77 |
+
die();
|
78 |
+
}
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* ajax_render_rules
|
83 |
+
*
|
84 |
+
* @description creates the HTML for the field group rules metabox. Called from both Ajax and PHP
|
85 |
+
* @since 2.0
|
86 |
+
* I took this functions from the awesome Advanced custom fields plugin http://www.advancedcustomfields.com/
|
87 |
+
*/
|
88 |
+
|
89 |
+
public static function ajax_render_rules( $options = array() )
|
90 |
+
{
|
91 |
+
|
92 |
+
// defaults
|
93 |
+
$defaults = array(
|
94 |
+
'group_id' => 0,
|
95 |
+
'rule_id' => 0,
|
96 |
+
'value' => null,
|
97 |
+
'param' => null,
|
98 |
+
);
|
99 |
+
|
100 |
+
$is_ajax = false;
|
101 |
+
|
102 |
+
if( isset($_POST['nonce']) && wp_verify_nonce($_POST['nonce'], 'spu_nonce') )
|
103 |
+
{
|
104 |
+
$is_ajax = true;
|
105 |
+
}
|
106 |
+
|
107 |
+
// Is AJAX call?
|
108 |
+
if( $is_ajax )
|
109 |
+
{
|
110 |
+
$options = array_merge($defaults, $_POST);
|
111 |
+
$options['name'] = 'spu_rules[' . $options['group_id'] . '][' . $options['rule_id'] . '][value]';
|
112 |
+
}
|
113 |
+
else
|
114 |
+
{
|
115 |
+
$options = array_merge($defaults, $options);
|
116 |
+
}
|
117 |
+
|
118 |
+
// vars
|
119 |
+
$choices = array();
|
120 |
+
|
121 |
+
|
122 |
+
// some case's have the same outcome
|
123 |
+
if($options['param'] == "page_parent")
|
124 |
+
{
|
125 |
+
$options['param'] = "page";
|
126 |
+
}
|
127 |
+
|
128 |
+
|
129 |
+
switch($options['param'])
|
130 |
+
{
|
131 |
+
case "post_type":
|
132 |
+
|
133 |
+
// all post types except attachment
|
134 |
+
$choices = apply_filters('spu/get_post_types', array(), array('attachment') );
|
135 |
+
|
136 |
+
break;
|
137 |
+
|
138 |
+
|
139 |
+
case "page":
|
140 |
+
|
141 |
+
$post_type = 'page';
|
142 |
+
$args = array(
|
143 |
+
'posts_per_page' => -1,
|
144 |
+
'post_type' => $post_type,
|
145 |
+
'orderby' => 'menu_order title',
|
146 |
+
'order' => 'ASC',
|
147 |
+
'post_status' => 'any',
|
148 |
+
'suppress_filters' => false,
|
149 |
+
'update_post_meta_cache' => false,
|
150 |
+
);
|
151 |
+
|
152 |
+
$posts = get_posts( apply_filters('spu/rules/page_args', $args ) );
|
153 |
+
|
154 |
+
if( $posts )
|
155 |
+
{
|
156 |
+
// sort into hierachial order!
|
157 |
+
if( is_post_type_hierarchical( $post_type ) )
|
158 |
+
{
|
159 |
+
$posts = get_page_children( 0, $posts );
|
160 |
+
}
|
161 |
+
|
162 |
+
foreach( $posts as $page )
|
163 |
+
{
|
164 |
+
$title = '';
|
165 |
+
$ancestors = get_ancestors($page->ID, 'page');
|
166 |
+
if($ancestors)
|
167 |
+
{
|
168 |
+
foreach($ancestors as $a)
|
169 |
+
{
|
170 |
+
$title .= '- ';
|
171 |
+
}
|
172 |
+
}
|
173 |
+
|
174 |
+
$title .= apply_filters( 'the_title', $page->post_title, $page->ID );
|
175 |
+
|
176 |
+
|
177 |
+
// status
|
178 |
+
if($page->post_status != "publish")
|
179 |
+
{
|
180 |
+
$title .= " ($page->post_status)";
|
181 |
+
}
|
182 |
+
|
183 |
+
$choices[ $page->ID ] = $title;
|
184 |
+
|
185 |
+
}
|
186 |
+
// foreach($pages as $page)
|
187 |
+
|
188 |
+
}
|
189 |
+
|
190 |
+
break;
|
191 |
+
|
192 |
+
|
193 |
+
case "page_type" :
|
194 |
+
|
195 |
+
$choices = array(
|
196 |
+
'all_pages' => __("All Pages", 'popups'),
|
197 |
+
'front_page' => __("Front Page", 'popups'),
|
198 |
+
'posts_page' => __("Posts Page", 'popups'),
|
199 |
+
'category_page' => __("Category Page", 'popups'),
|
200 |
+
'search_page' => __("Search Page", 'popups'),
|
201 |
+
'archive_page' => __("Archives Page", 'popups'),
|
202 |
+
'top_level' => __("Top Level Page (parent of 0)", 'popups'),
|
203 |
+
'parent' => __("Parent Page (has children)", 'popups'),
|
204 |
+
'child' => __("Child Page (has parent)", 'popups'),
|
205 |
+
);
|
206 |
+
|
207 |
+
break;
|
208 |
+
|
209 |
+
case "page_template" :
|
210 |
+
|
211 |
+
$choices = array(
|
212 |
+
'default' => __("Default Template", 'popups'),
|
213 |
+
);
|
214 |
+
|
215 |
+
$templates = get_page_templates();
|
216 |
+
foreach($templates as $k => $v)
|
217 |
+
{
|
218 |
+
$choices[$v] = $k;
|
219 |
+
}
|
220 |
+
|
221 |
+
break;
|
222 |
+
|
223 |
+
case "post" :
|
224 |
+
$post_types = apply_filters('spu/get_post_types', array());
|
225 |
+
unset( $post_types['page'], $post_types['attachment'], $post_types['revision'] , $post_types['nav_menu_item'], $post_types['spucpt'] );
|
226 |
+
if( $post_types )
|
227 |
+
{
|
228 |
+
foreach( $post_types as $post_type )
|
229 |
+
{
|
230 |
+
$args = array(
|
231 |
+
'numberposts' => '-1',
|
232 |
+
'post_type' => $post_type,
|
233 |
+
'post_status' => array('publish', 'private', 'draft', 'inherit', 'future'),
|
234 |
+
'suppress_filters' => false,
|
235 |
+
'update_post_meta_cache' => false,
|
236 |
+
'update_post_term_cache' => false,
|
237 |
+
);
|
238 |
+
$posts = get_posts(apply_filters('spu/rules/post_args', $args ));
|
239 |
+
|
240 |
+
if( $posts)
|
241 |
+
{
|
242 |
+
$choices[$post_type] = array();
|
243 |
+
|
244 |
+
foreach($posts as $post)
|
245 |
+
{
|
246 |
+
$title = apply_filters( 'the_title', $post->post_title, $post->ID );
|
247 |
+
|
248 |
+
// status
|
249 |
+
if($post->post_status != "publish")
|
250 |
+
{
|
251 |
+
$title .= " ($post->post_status)";
|
252 |
+
}
|
253 |
+
|
254 |
+
$choices[$post_type][$post->ID] = $title;
|
255 |
+
|
256 |
+
}
|
257 |
+
// foreach($posts as $post)
|
258 |
+
}
|
259 |
+
// if( $posts )
|
260 |
+
}
|
261 |
+
// foreach( $post_types as $post_type )
|
262 |
+
}
|
263 |
+
// if( $post_types )
|
264 |
+
|
265 |
+
|
266 |
+
break;
|
267 |
+
|
268 |
+
case "post_category" :
|
269 |
+
|
270 |
+
$categories = get_terms('category', array('get' => 'all', 'fields' => 'id=>name' ) );
|
271 |
+
$choices = apply_filters('spu/rules/categories', $categories );
|
272 |
+
|
273 |
+
break;
|
274 |
+
|
275 |
+
case "post_format" :
|
276 |
+
|
277 |
+
$choices = get_post_format_strings();
|
278 |
+
|
279 |
+
break;
|
280 |
+
|
281 |
+
case "post_status" :
|
282 |
+
|
283 |
+
$choices = get_post_stati();
|
284 |
+
|
285 |
+
break;
|
286 |
+
|
287 |
+
case "user_type" :
|
288 |
+
|
289 |
+
global $wp_roles;
|
290 |
+
|
291 |
+
$choices = $wp_roles->get_names();
|
292 |
+
|
293 |
+
if( is_multisite() )
|
294 |
+
{
|
295 |
+
$choices['super_admin'] = __('Super Admin');
|
296 |
+
}
|
297 |
+
|
298 |
+
break;
|
299 |
+
|
300 |
+
case "taxonomy" :
|
301 |
+
|
302 |
+
$choices = array();
|
303 |
+
$simple_value = true;
|
304 |
+
$choices = apply_filters('spu/get_taxonomies', $choices, $simple_value);
|
305 |
+
|
306 |
+
break;
|
307 |
+
|
308 |
+
case "logged_user" :
|
309 |
+
case "mobiles" :
|
310 |
+
case "tablets" :
|
311 |
+
case "desktop" :
|
312 |
+
case "crawlers" :
|
313 |
+
case "left_comment" :
|
314 |
+
case "search_engine" :
|
315 |
+
case "same_site" :
|
316 |
+
|
317 |
+
$choices = array('true' => __( 'True', 'popups' ) );
|
318 |
+
|
319 |
+
break;
|
320 |
+
|
321 |
+
|
322 |
+
}
|
323 |
+
|
324 |
+
|
325 |
+
// allow custom rules rules
|
326 |
+
$choices = apply_filters( 'spu/rules/rule_values/' . $options['param'], $choices );
|
327 |
+
|
328 |
+
// Custom fields for rules
|
329 |
+
do_action( 'spu/rules/print_' . $options['param'] . '_field', $options, $choices );
|
330 |
+
|
331 |
+
// ajax?
|
332 |
+
if( $is_ajax )
|
333 |
+
{
|
334 |
+
die();
|
335 |
+
}
|
336 |
+
}
|
337 |
+
|
338 |
+
/**
|
339 |
+
* Helper function to print select fields for rules
|
340 |
+
* @since 2.0
|
341 |
+
* @param array $choices options values for select
|
342 |
+
* @param array $options array to pass group, id, rule_id etc
|
343 |
+
* @return echo the select field
|
344 |
+
*/
|
345 |
+
static function print_select( $options, $choices ) {
|
346 |
+
|
347 |
+
// value must be array
|
348 |
+
if( !is_array($options['value']) )
|
349 |
+
{
|
350 |
+
// perhaps this is a default value with new lines in it?
|
351 |
+
if( strpos($options['value'], "\n") !== false )
|
352 |
+
{
|
353 |
+
// found multiple lines, explode it
|
354 |
+
$options['value'] = explode("\n", $options['value']);
|
355 |
+
}
|
356 |
+
else
|
357 |
+
{
|
358 |
+
$options['value'] = array( $options['value'] );
|
359 |
+
}
|
360 |
+
}
|
361 |
+
|
362 |
+
|
363 |
+
// trim value
|
364 |
+
$options['value'] = array_map('trim', $options['value']);
|
365 |
+
// determin if choices are grouped (2 levels of array)
|
366 |
+
if( is_array($choices) )
|
367 |
+
{
|
368 |
+
foreach( $choices as $k => $v )
|
369 |
+
{
|
370 |
+
if( is_array($v) )
|
371 |
+
{
|
372 |
+
$optgroup = true;
|
373 |
+
}
|
374 |
+
}
|
375 |
+
}
|
376 |
+
|
377 |
+
echo '<select id="spu_rule_'.$options['group_id'].'_rule_'.$options['rule_id'].'" class="select" name="'.$options['name'].'">';
|
378 |
+
|
379 |
+
// loop through values and add them as options
|
380 |
+
if( is_array($choices) )
|
381 |
+
{
|
382 |
+
foreach( $choices as $key => $value )
|
383 |
+
{
|
384 |
+
if( isset($optgroup) )
|
385 |
+
{
|
386 |
+
// this select is grouped with optgroup
|
387 |
+
if($key != '') echo '<optgroup label="'.$key.'">';
|
388 |
+
|
389 |
+
if( is_array($value) )
|
390 |
+
{
|
391 |
+
foreach($value as $id => $label)
|
392 |
+
{
|
393 |
+
|
394 |
+
$selected = in_array($id, $options['value']) ? 'selected="selected"' : '';
|
395 |
+
|
396 |
+
echo '<option value="'.$id.'" '.$selected.'>'.$label.'</option>';
|
397 |
+
}
|
398 |
+
}
|
399 |
+
|
400 |
+
if($key != '') echo '</optgroup>';
|
401 |
+
}
|
402 |
+
else
|
403 |
+
{
|
404 |
+
$selected = in_array($key, $options['value']) ? 'selected="selected"' : '';
|
405 |
+
echo '<option value="'.$key.'" '.$selected.'>'.$value.'</option>';
|
406 |
+
}
|
407 |
+
}
|
408 |
+
}
|
409 |
+
|
410 |
+
|
411 |
+
echo '</select>';
|
412 |
+
|
413 |
+
}
|
414 |
+
|
415 |
+
/**
|
416 |
+
* Prints a text field rule
|
417 |
+
* @param $options
|
418 |
+
*/
|
419 |
+
static function print_textfield( $options ) {
|
420 |
+
echo '<input type="text" name="'.$options['name'].'" value="'.$options['value'].'" id="spu_rule_'.$options['group_id'].'_rule_'.$options['rule_id'].'" />';
|
421 |
+
}
|
422 |
+
|
423 |
+
/**
|
424 |
+
* Return the box options
|
425 |
+
* @param int $id spucpt id
|
426 |
+
* @since 2.0
|
427 |
+
* @return array metadata values
|
428 |
+
*/
|
429 |
+
function get_box_options( $id )
|
430 |
+
{
|
431 |
+
$defaults = array(
|
432 |
+
'css' => array(
|
433 |
+
'bgopacity' => '0.5',
|
434 |
+
'overlay_color' => '#000',
|
435 |
+
'background_color' => '#eeeeee',
|
436 |
+
'background_opacity'=> '1',
|
437 |
+
'width' => '600px',
|
438 |
+
'padding' => '25',
|
439 |
+
'color' => '#333',
|
440 |
+
'shadow_color' => '#666',
|
441 |
+
'shadow_type' => 'outset',
|
442 |
+
'shadow_x_offset' => '0',
|
443 |
+
'shadow_y_offset' => '0',
|
444 |
+
'shadow_blur' => '10',
|
445 |
+
'shadow_spread' => '1',
|
446 |
+
'border_color' => '#eee',
|
447 |
+
'border_width' => '8',
|
448 |
+
'border_radius' => '0',
|
449 |
+
'border_type' => 'none',
|
450 |
+
'close_color' => '#666',
|
451 |
+
'close_hover_color' => '#000',
|
452 |
+
'close_size' => '30px',
|
453 |
+
'close_position' => 'top_right',
|
454 |
+
'close_shadow_color'=> '#fff',
|
455 |
+
'position' => 'centered',
|
456 |
+
),
|
457 |
+
'trigger' => 'seconds',
|
458 |
+
'trigger_number' => '5',
|
459 |
+
'animation' => 'fade',
|
460 |
+
'duration-convert-cookie' => '999',
|
461 |
+
'duration-close-cookie' => '30',
|
462 |
+
'name-convert-cookie' => 'spu_conversion',
|
463 |
+
'name-close-cookie' => 'spu_closing',
|
464 |
+
'auto_hide' => 0,
|
465 |
+
'test_mode' => 0,
|
466 |
+
'conversion_close' => '1',
|
467 |
+
'powered_link' => '0',
|
468 |
+
);
|
469 |
+
|
470 |
+
$opts = apply_filters( 'spu/metaboxes/box_options', get_post_meta( $id, 'spu_options', true ), $id );
|
471 |
+
|
472 |
+
$opts = wp_parse_args( $opts, apply_filters( 'spu/metaboxes/default_options', $defaults ) );
|
473 |
+
// we added new rules as we can't merge recursively, so manual check them
|
474 |
+
foreach ( $defaults['css'] as $key => $value ) {
|
475 |
+
if( ! isset($opts['css'][$key] ) )
|
476 |
+
$opts['css'][$key] = $value;
|
477 |
+
}
|
478 |
+
|
479 |
+
return $opts;
|
480 |
+
}
|
481 |
+
|
482 |
+
/**
|
483 |
+
* Return the box rules
|
484 |
+
* @param int $id spucpt id
|
485 |
+
* @since 2.0
|
486 |
+
* @return array metadata values
|
487 |
+
*/
|
488 |
+
function get_box_rules( $id )
|
489 |
+
{
|
490 |
+
$defaults = array(
|
491 |
+
// group_0
|
492 |
+
array(
|
493 |
+
|
494 |
+
// rule_0
|
495 |
+
array(
|
496 |
+
'param' => 'page_type',
|
497 |
+
'operator' => '==',
|
498 |
+
'value' => 'all_pages',
|
499 |
+
'order_no' => 0,
|
500 |
+
'group_no' => 0
|
501 |
+
)
|
502 |
+
)
|
503 |
+
);
|
504 |
+
|
505 |
+
$rules = get_post_meta( $id, 'spu_rules', true );
|
506 |
+
|
507 |
+
if( empty( $rules ) ) {
|
508 |
+
|
509 |
+
return apply_filters( 'spu/metaboxes/default_rules', $defaults );
|
510 |
+
|
511 |
+
} else {
|
512 |
+
|
513 |
+
return $rules;
|
514 |
+
|
515 |
+
}
|
516 |
+
|
517 |
+
|
518 |
+
}
|
519 |
+
|
520 |
+
/**
|
521 |
+
* Simple HEX TO RGBA converter
|
522 |
+
* @param $color
|
523 |
+
* @param bool $opacity
|
524 |
+
*
|
525 |
+
* @return string
|
526 |
+
*/
|
527 |
+
public static function hex2rgba($color, $opacity = false) {
|
528 |
+
|
529 |
+
$default = 'rgb(0,0,0)';
|
530 |
+
|
531 |
+
//Return default if no color provided
|
532 |
+
if(empty($color))
|
533 |
+
return $default;
|
534 |
+
|
535 |
+
//Sanitize $color if "#" is provided
|
536 |
+
if ($color[0] == '#' ) {
|
537 |
+
$color = substr( $color, 1 );
|
538 |
+
}
|
539 |
+
|
540 |
+
//Check if color has 6 or 3 characters and get values
|
541 |
+
if (strlen($color) == 6) {
|
542 |
+
$hex = array( $color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5] );
|
543 |
+
} elseif ( strlen( $color ) == 3 ) {
|
544 |
+
$hex = array( $color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2] );
|
545 |
+
} else {
|
546 |
+
return $default;
|
547 |
+
}
|
548 |
+
|
549 |
+
//Convert hexadec to rgb
|
550 |
+
$rgb = array_map('hexdec', $hex);
|
551 |
+
|
552 |
+
//Check if opacity is set(rgba or rgb)
|
553 |
+
if($opacity){
|
554 |
+
if(abs($opacity) > 1)
|
555 |
+
$opacity = 1.0;
|
556 |
+
$output = 'rgba('.implode(",",$rgb).','.$opacity.')';
|
557 |
+
} else {
|
558 |
+
$output = 'rgb('.implode(",",$rgb).')';
|
559 |
+
}
|
560 |
+
|
561 |
+
//Return rgb(a) color string
|
562 |
+
return $output;
|
563 |
+
}
|
564 |
}
|
includes/updates-msg.html
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
-
<div class="warning">
|
2 |
-
<p><strong>Warning:</strong></p>
|
3 |
-
<p>Popups v1.0.0 it's a totally new version of the plugin. Previous version are deprecated as the plugin was totally recoded from scracth. Please save your popups if you have custom text on them because the <strong>will be lost after update</strong></p>
|
4 |
-
</div>
|
5 |
-
<div class="error">
|
6 |
-
<p><strong>Warning:</strong></p>
|
7 |
-
<p>Popups v1.0.0 it's a totally new version of the plugin. Previous version are deprecated as the plugin was totally recoded from scracth. Please save your popups if you have custom text on them because the <strong>will be lost after update</strong></p>
|
8 |
</div>
|
1 |
+
<div class="warning">
|
2 |
+
<p><strong>Warning:</strong></p>
|
3 |
+
<p>Popups v1.0.0 it's a totally new version of the plugin. Previous version are deprecated as the plugin was totally recoded from scracth. Please save your popups if you have custom text on them because the <strong>will be lost after update</strong></p>
|
4 |
+
</div>
|
5 |
+
<div class="error">
|
6 |
+
<p><strong>Warning:</strong></p>
|
7 |
+
<p>Popups v1.0.0 it's a totally new version of the plugin. Previous version are deprecated as the plugin was totally recoded from scracth. Please save your popups if you have custom text on them because the <strong>will be lost after update</strong></p>
|
8 |
</div>
|
languages/popups-de_DE.po
CHANGED
@@ -1,870 +1,870 @@
|
|
1 |
-
# Copyright (C) 2013 TODO
|
2 |
-
# This file is distributed under the same license as the TODO package.
|
3 |
-
msgid ""
|
4 |
-
msgstr ""
|
5 |
-
"Project-Id-Version: Popups\n"
|
6 |
-
"Report-Msgid-Bugs-To: http://wordpress.org/plugins/plugin-name\n"
|
7 |
-
"POT-Creation-Date: 2016-02-04 13:02+0100\n"
|
8 |
-
"PO-Revision-Date: 2018-01-22 16:35+0000\n"
|
9 |
-
"Language-Team: Timersys <info@timersys.com>\n"
|
10 |
-
"MIME-Version: 1.0\n"
|
11 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
-
"Content-Transfer-Encoding: 8bit\n"
|
13 |
-
"X-Generator: Poedit 2.0.6\n"
|
14 |
-
"X-Poedit-KeywordsList: __;_e;_n;_x;esc_html_e;esc_html__;esc_attr_e;"
|
15 |
-
"esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2\n"
|
16 |
-
"X-Poedit-Basepath: ..\n"
|
17 |
-
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18 |
-
"Last-Translator: \n"
|
19 |
-
"Language: de_DE@formal\n"
|
20 |
-
"X-Poedit-SearchPath-0: .\n"
|
21 |
-
|
22 |
-
#: admin/class-social-popup-admin.php:159
|
23 |
-
msgctxt "post type singular name"
|
24 |
-
msgid "Popups"
|
25 |
-
msgstr "PopUps"
|
26 |
-
|
27 |
-
#: admin/class-social-popup-admin.php:160
|
28 |
-
msgctxt "admin menu"
|
29 |
-
msgid "Popups"
|
30 |
-
msgstr "PopUps"
|
31 |
-
|
32 |
-
#: admin/class-social-popup-admin.php:161
|
33 |
-
msgctxt "add new on admin bar"
|
34 |
-
msgid "Popups"
|
35 |
-
msgstr "PopUps"
|
36 |
-
|
37 |
-
#: admin/class-social-popup-admin.php:162
|
38 |
-
msgctxt "Popups"
|
39 |
-
msgid "Add New"
|
40 |
-
msgstr "Neues hinzufügen"
|
41 |
-
|
42 |
-
#: admin/class-social-popup-admin.php:163
|
43 |
-
msgid "Add New Popups"
|
44 |
-
msgstr "Neue Popups hinzufügen"
|
45 |
-
|
46 |
-
#: admin/class-social-popup-admin.php:164
|
47 |
-
msgid "New Popups"
|
48 |
-
msgstr "Neue Popups"
|
49 |
-
|
50 |
-
#: admin/class-social-popup-admin.php:165
|
51 |
-
msgid "Edit Popups"
|
52 |
-
msgstr "Popups bearbeiten"
|
53 |
-
|
54 |
-
#: admin/class-social-popup-admin.php:166
|
55 |
-
msgid "View Popups"
|
56 |
-
msgstr "Popups anzeigen"
|
57 |
-
|
58 |
-
#: admin/class-social-popup-admin.php:167
|
59 |
-
msgid "All Popups"
|
60 |
-
msgstr "Alle Popups"
|
61 |
-
|
62 |
-
#: admin/class-social-popup-admin.php:168
|
63 |
-
msgid "Search Popups"
|
64 |
-
msgstr "Suche Popups"
|
65 |
-
|
66 |
-
#: admin/class-social-popup-admin.php:169
|
67 |
-
msgid "Parent Popups:"
|
68 |
-
msgstr "Übergeordnete Popups:"
|
69 |
-
|
70 |
-
#: admin/class-social-popup-admin.php:170
|
71 |
-
msgid "No Popups found."
|
72 |
-
msgstr "Keine Popups gefunden."
|
73 |
-
|
74 |
-
#: admin/class-social-popup-admin.php:171
|
75 |
-
msgid "No Popups found in Trash."
|
76 |
-
msgstr "Keine Popups im Papierkorb gefunden."
|
77 |
-
|
78 |
-
#: admin/class-social-popup-admin.php:212
|
79 |
-
msgid "Settings"
|
80 |
-
msgstr "Einstellungen"
|
81 |
-
|
82 |
-
#: admin/class-social-popup-admin.php:260
|
83 |
-
msgid "Popups Premium"
|
84 |
-
msgstr "Popups Premium"
|
85 |
-
|
86 |
-
#: admin/class-social-popup-admin.php:271
|
87 |
-
msgid "PopUp Shortcodes"
|
88 |
-
msgstr "PopUp Shortcodes"
|
89 |
-
|
90 |
-
#: admin/class-social-popup-admin.php:280
|
91 |
-
msgid "PopUp Appearance"
|
92 |
-
msgstr "Popup Stil"
|
93 |
-
|
94 |
-
#: admin/class-social-popup-admin.php:289
|
95 |
-
msgid "PopUp Display Rules"
|
96 |
-
msgstr "Popup-Anzeigeregeln"
|
97 |
-
|
98 |
-
#: admin/class-social-popup-admin.php:298
|
99 |
-
msgid "Display Options"
|
100 |
-
msgstr "Anzeige-Optionen"
|
101 |
-
|
102 |
-
#: admin/class-social-popup-admin.php:307
|
103 |
-
msgid "Need support?"
|
104 |
-
msgstr "Unterstützung benötigt?"
|
105 |
-
|
106 |
-
#: admin/class-social-popup-admin.php:315
|
107 |
-
msgid "Donate & support"
|
108 |
-
msgstr "Spenden & unterstützen"
|
109 |
-
|
110 |
-
#: admin/class-social-popup-admin.php:323
|
111 |
-
msgid "About the developer"
|
112 |
-
msgstr "Über den Hersteller"
|
113 |
-
|
114 |
-
#: admin/class-social-popup-admin.php:589
|
115 |
-
#: admin/views/metaboxes/metabox-rules.php:33
|
116 |
-
#: admin/views/metaboxes/metabox-rules.php:106
|
117 |
-
msgid "or"
|
118 |
-
msgstr "oder"
|
119 |
-
|
120 |
-
#: admin/class-social-popup-admin.php:616
|
121 |
-
msgid "Add a Popup"
|
122 |
-
msgstr "Ein PopUp zufügen"
|
123 |
-
|
124 |
-
#: admin/class-social-popup-admin.php:740
|
125 |
-
msgid "User"
|
126 |
-
msgstr "Benutzer"
|
127 |
-
|
128 |
-
#: admin/class-social-popup-admin.php:741
|
129 |
-
msgid "User role"
|
130 |
-
msgstr "Benutzer Rolle"
|
131 |
-
|
132 |
-
#: admin/class-social-popup-admin.php:742
|
133 |
-
msgid "User is logged"
|
134 |
-
msgstr "Benutzer ist angemeldet"
|
135 |
-
|
136 |
-
#: admin/class-social-popup-admin.php:743
|
137 |
-
msgid "User never left a comment"
|
138 |
-
msgstr "Benutzer hat nie einen Kommentar verfasst"
|
139 |
-
|
140 |
-
#: admin/class-social-popup-admin.php:744
|
141 |
-
msgid "User came via a search engine"
|
142 |
-
msgstr "Benutzer kam über eine Suchmaschine"
|
143 |
-
|
144 |
-
#: admin/class-social-popup-admin.php:745
|
145 |
-
msgid "User did not arrive via another page on your site"
|
146 |
-
msgstr "Benutzer kam nicht über eine andere Seite Ihrer Webseite"
|
147 |
-
|
148 |
-
#: admin/class-social-popup-admin.php:747
|
149 |
-
#: admin/class-social-popup-admin.php:748
|
150 |
-
msgid "Post"
|
151 |
-
msgstr "Beitrag"
|
152 |
-
|
153 |
-
#: admin/class-social-popup-admin.php:749
|
154 |
-
msgid "Post ID"
|
155 |
-
msgstr "Beitrags ID"
|
156 |
-
|
157 |
-
#: admin/class-social-popup-admin.php:750
|
158 |
-
msgid "Post Type"
|
159 |
-
msgstr "Beitragstyp"
|
160 |
-
|
161 |
-
#: admin/class-social-popup-admin.php:751
|
162 |
-
msgid "Post Category"
|
163 |
-
msgstr "Beitragskategorie"
|
164 |
-
|
165 |
-
#: admin/class-social-popup-admin.php:752
|
166 |
-
msgid "Post Format"
|
167 |
-
msgstr "Beitragsformat"
|
168 |
-
|
169 |
-
#: admin/class-social-popup-admin.php:753
|
170 |
-
msgid "Post Status"
|
171 |
-
msgstr "Veröffentlichungsstatus"
|
172 |
-
|
173 |
-
#: admin/class-social-popup-admin.php:754
|
174 |
-
msgid "Post Taxonomy"
|
175 |
-
msgstr "Beitragsklassifizierung"
|
176 |
-
|
177 |
-
#: admin/class-social-popup-admin.php:756
|
178 |
-
#: admin/class-social-popup-admin.php:757
|
179 |
-
msgid "Page"
|
180 |
-
msgstr "Seite"
|
181 |
-
|
182 |
-
#: admin/class-social-popup-admin.php:758
|
183 |
-
msgid "Page Type"
|
184 |
-
msgstr "Seitentyp"
|
185 |
-
|
186 |
-
#: admin/class-social-popup-admin.php:759
|
187 |
-
msgid "Page Parent"
|
188 |
-
msgstr "Übergeordnete Seite"
|
189 |
-
|
190 |
-
#: admin/class-social-popup-admin.php:760
|
191 |
-
msgid "Page Template"
|
192 |
-
msgstr "Seitentemplate"
|
193 |
-
|
194 |
-
#: admin/class-social-popup-admin.php:762
|
195 |
-
msgid "Other"
|
196 |
-
msgstr "Sonstiges"
|
197 |
-
|
198 |
-
#: admin/class-social-popup-admin.php:763
|
199 |
-
msgid "Referrer"
|
200 |
-
msgstr "Empfehler"
|
201 |
-
|
202 |
-
#: admin/class-social-popup-admin.php:764
|
203 |
-
msgid "Mobile Phone"
|
204 |
-
msgstr "Mobil Nummer"
|
205 |
-
|
206 |
-
#: admin/class-social-popup-admin.php:765
|
207 |
-
msgid "Tablet"
|
208 |
-
msgstr "Tablet"
|
209 |
-
|
210 |
-
#: admin/class-social-popup-admin.php:813
|
211 |
-
msgid "ID"
|
212 |
-
msgstr "ID"
|
213 |
-
|
214 |
-
#: admin/includes/class-spu-notices.php:30
|
215 |
-
#, php-format
|
216 |
-
msgid ""
|
217 |
-
"We noticed that you have been using our plugin for a while and we would like "
|
218 |
-
"to ask you a little favour. If you are happy with it and can take a minute "
|
219 |
-
"please <a href=\"%s\" target=\"_blank\">leave a nice review</a> on "
|
220 |
-
"WordPress. It will be a tremendous help for us!"
|
221 |
-
msgstr ""
|
222 |
-
"Wir haben festgestellt, dass Sie unser Plugin bereits für eine Weile "
|
223 |
-
"verwendet haben und möchten Sie um einen Gefallen bitten. Wenn Sie mit "
|
224 |
-
"unserem Plugin zufrieden sind, nehmen Sie sich bitte eine Minute Zeit und <a "
|
225 |
-
"href=\"%s\" target=\"_blank\">hinterlassen eine positive Rezension</a> auf "
|
226 |
-
"WordPress. Es wird für uns eine große Hilfe sein!"
|
227 |
-
|
228 |
-
#: admin/includes/class-spu-notices.php:32
|
229 |
-
#, php-format
|
230 |
-
msgid "<a href=\"%s\" target=\"_blank\">Leave a nice review</a>"
|
231 |
-
msgstr "<a href=\"%s\" target=\"_blank\">Eine positive Rezension verfassen</a>"
|
232 |
-
|
233 |
-
#: admin/includes/class-spu-notices.php:33
|
234 |
-
#, php-format
|
235 |
-
msgid "<a href=\"%s\">No, thanks</a>"
|
236 |
-
msgstr "<a href=\"%s\">Nein Danke!</a>"
|
237 |
-
|
238 |
-
#: admin/views/metaboxes/metabox-appearance.php:10
|
239 |
-
msgid "Background opacity"
|
240 |
-
msgstr "Hintergrund Transparenz"
|
241 |
-
|
242 |
-
#: admin/views/metaboxes/metabox-appearance.php:12
|
243 |
-
msgid "Leave at 0 for no background. Max value is 1"
|
244 |
-
msgstr "0 für keinen Hintergrund. Max ist 1"
|
245 |
-
|
246 |
-
#: admin/views/metaboxes/metabox-appearance.php:18
|
247 |
-
msgid "Background color"
|
248 |
-
msgstr "Hintergrundfarbe"
|
249 |
-
|
250 |
-
#: admin/views/metaboxes/metabox-appearance.php:22
|
251 |
-
msgid "Text color"
|
252 |
-
msgstr "Text Farbe"
|
253 |
-
|
254 |
-
#: admin/views/metaboxes/metabox-appearance.php:26
|
255 |
-
msgid "Box width"
|
256 |
-
msgstr "Breite des Inhalts-Blocks"
|
257 |
-
|
258 |
-
#: admin/views/metaboxes/metabox-appearance.php:32
|
259 |
-
msgid "Border color"
|
260 |
-
msgstr "Rahmenfarbe"
|
261 |
-
|
262 |
-
#: admin/views/metaboxes/metabox-appearance.php:36
|
263 |
-
msgid "Border width"
|
264 |
-
msgstr "Rahmenbreite"
|
265 |
-
|
266 |
-
#: admin/views/metaboxes/metabox-donate.php:6
|
267 |
-
msgid "If you like this plugin, consider supporting it by donating."
|
268 |
-
msgstr ""
|
269 |
-
"Wenn Ihnen dieses Plugin gefällt, unterstützen Sie es mit einer Spende."
|
270 |
-
|
271 |
-
#: admin/views/metaboxes/metabox-donate.php:8
|
272 |
-
msgid "Donate with PayPal"
|
273 |
-
msgstr "Mit PayPal spenden"
|
274 |
-
|
275 |
-
#: admin/views/metaboxes/metabox-donate.php:10
|
276 |
-
msgid "Some other ways to support this plugin"
|
277 |
-
msgstr "Einige andere Möglichkeiten, dieses Plugin zu unterstützen"
|
278 |
-
|
279 |
-
#: admin/views/metaboxes/metabox-donate.php:12
|
280 |
-
msgid "Leave a ★★★★★ review on WordPress.org"
|
281 |
-
msgstr ""
|
282 |
-
"Hinterlassen Sie eine ★★★★★ Bewertung auf "
|
283 |
-
"WordPress.org"
|
284 |
-
|
285 |
-
#: admin/views/metaboxes/metabox-donate.php:13
|
286 |
-
msgid "Write about Popups on your blog"
|
287 |
-
msgstr "Über Popups in Ihrem Blog schreiben"
|
288 |
-
|
289 |
-
#: admin/views/metaboxes/metabox-donate.php:14
|
290 |
-
msgid "Tweet about Popups"
|
291 |
-
msgstr "Tweet über Popups"
|
292 |
-
|
293 |
-
#: admin/views/metaboxes/metabox-donate.php:15
|
294 |
-
msgid "Vote \"works\" on the WordPress.org plugin page"
|
295 |
-
msgstr ""
|
296 |
-
"Stimmen Sie mit "funktioniert" auf der WordPress.org Plugin Seite"
|
297 |
-
|
298 |
-
#: admin/views/metaboxes/metabox-help.php:6
|
299 |
-
msgid ""
|
300 |
-
"You have some social shortcodes to use that will print a Facebook like, a "
|
301 |
-
"Google+ Follow and a Twitter follow. Check the available options and "
|
302 |
-
"<strong>configure them with your social accounts</strong>:"
|
303 |
-
msgstr ""
|
304 |
-
"Sie haben einige Shortcodes zur Verfügung, die: Facebook like, Google + "
|
305 |
-
"folgen und ein Twitter folgen auf der Seite anzeigen können. Überprüfen Sie "
|
306 |
-
"die verfügbaren Optionen um <strong>sie mit Ihren sozialen Netzwerkkonten zu "
|
307 |
-
"konfigurieren</strong>:"
|
308 |
-
|
309 |
-
#: admin/views/metaboxes/metabox-help.php:8
|
310 |
-
msgid "Facebook Page"
|
311 |
-
msgstr "Facebook-Seite"
|
312 |
-
|
313 |
-
#: admin/views/metaboxes/metabox-help.php:12
|
314 |
-
msgid "View Facebook Page Options"
|
315 |
-
msgstr "Zeige Facebook-Seitenoptionen"
|
316 |
-
|
317 |
-
#: admin/views/metaboxes/metabox-help.php:14
|
318 |
-
#: admin/views/metaboxes/metabox-help.php:27
|
319 |
-
msgid "Your Facebook page url"
|
320 |
-
msgstr "Ihre Facebook-URL"
|
321 |
-
|
322 |
-
#: admin/views/metaboxes/metabox-help.php:15
|
323 |
-
msgid "Your page name"
|
324 |
-
msgstr "Ihr Seitenname"
|
325 |
-
|
326 |
-
#: admin/views/metaboxes/metabox-help.php:16
|
327 |
-
msgid "true|false <b>Default value:</b> true"
|
328 |
-
msgstr "richtig|falsch <b>Standart-Einstellung</b> richtig"
|
329 |
-
|
330 |
-
#: admin/views/metaboxes/metabox-help.php:17
|
331 |
-
msgid "true|false <b>Default value:</b> false"
|
332 |
-
msgstr "richtig|falsch <b>Standart-Einstellung</b> falsch"
|
333 |
-
|
334 |
-
#: admin/views/metaboxes/metabox-help.php:18
|
335 |
-
msgid "number <b>Default value:</b> 500"
|
336 |
-
msgstr "Anzahl <b>Standart-Wert:</b> 500"
|
337 |
-
|
338 |
-
#: admin/views/metaboxes/metabox-help.php:21
|
339 |
-
msgid "Facebook Button"
|
340 |
-
msgstr "Facebook Taste"
|
341 |
-
|
342 |
-
#: admin/views/metaboxes/metabox-help.php:25
|
343 |
-
msgid "View Facebook Options"
|
344 |
-
msgstr "Zeige Facebook-Optionen"
|
345 |
-
|
346 |
-
#: admin/views/metaboxes/metabox-help.php:28
|
347 |
-
msgid "standard, box_count, button <b>Default value:</b> button_count"
|
348 |
-
msgstr "standart, box_drücke, taste <b>Standard Wert:</b> tasten_drücke"
|
349 |
-
|
350 |
-
#: admin/views/metaboxes/metabox-help.php:29
|
351 |
-
#: admin/views/metaboxes/metabox-help.php:30
|
352 |
-
msgid "true <b>Default value:</b> false"
|
353 |
-
msgstr "richtig <b>Standart-Einstellung</b> falsch"
|
354 |
-
|
355 |
-
#: admin/views/metaboxes/metabox-help.php:31
|
356 |
-
msgid "recommend <b>Default value:</b> like"
|
357 |
-
msgstr "empfohlen <b>Default-Wert:</b> like"
|
358 |
-
|
359 |
-
#: admin/views/metaboxes/metabox-help.php:32
|
360 |
-
msgid "number <b>Default value:</b>"
|
361 |
-
msgstr "Anzahl <b>Standart-Wert:</b>"
|
362 |
-
|
363 |
-
#: admin/views/metaboxes/metabox-help.php:34
|
364 |
-
msgid "Google+ Button"
|
365 |
-
msgstr "Google+Taste"
|
366 |
-
|
367 |
-
#: admin/views/metaboxes/metabox-help.php:38
|
368 |
-
msgid "View Google+ Options"
|
369 |
-
msgstr "Zeige Google +-Optionen"
|
370 |
-
|
371 |
-
#: admin/views/metaboxes/metabox-help.php:40
|
372 |
-
msgid "Your Google+ url"
|
373 |
-
msgstr "Geben Sie Ihren Google+-Link an."
|
374 |
-
|
375 |
-
#: admin/views/metaboxes/metabox-help.php:41
|
376 |
-
msgid "small, standard, tall <b>Default value:</b> medium"
|
377 |
-
msgstr "klein, standart, groß <b>Standart-Wert:</b> medium"
|
378 |
-
|
379 |
-
#: admin/views/metaboxes/metabox-help.php:42
|
380 |
-
msgid "inline, none <b>Default value:</b> bubble"
|
381 |
-
msgstr "inline, none <b>Standartt-Wert:</b> bubble"
|
382 |
-
|
383 |
-
#: admin/views/metaboxes/metabox-help.php:44
|
384 |
-
msgid "Twitter Button"
|
385 |
-
msgstr "Twitter Taste"
|
386 |
-
|
387 |
-
#: admin/views/metaboxes/metabox-help.php:48
|
388 |
-
msgid "View Twitter Options"
|
389 |
-
msgstr "Zeige Twitter Optionen"
|
390 |
-
|
391 |
-
#: admin/views/metaboxes/metabox-help.php:50
|
392 |
-
msgid "Your Twitter user <b>Default chifliiiii</b>"
|
393 |
-
msgstr "Ihr Twitter Benutzername <b>Standard-chifliiiii</b>"
|
394 |
-
|
395 |
-
#: admin/views/metaboxes/metabox-help.php:51
|
396 |
-
msgid "false <b>Default value:</b> true"
|
397 |
-
msgstr "falsch <b>Standart-Einstellung</b> richtig"
|
398 |
-
|
399 |
-
#: admin/views/metaboxes/metabox-help.php:52
|
400 |
-
msgid "large <b>Default value:</b> \"\""
|
401 |
-
msgstr "groß <b>Standart-Wert:</b> \"\""
|
402 |
-
|
403 |
-
#: admin/views/metaboxes/metabox-help.php:55
|
404 |
-
msgid "Other available Shortcodes:"
|
405 |
-
msgstr "Weitere Shortcodes:"
|
406 |
-
|
407 |
-
#: admin/views/metaboxes/metabox-help.php:56
|
408 |
-
msgid "Close Button"
|
409 |
-
msgstr "Schließen-Schaltfläche"
|
410 |
-
|
411 |
-
#: admin/views/metaboxes/metabox-help.php:60
|
412 |
-
msgid "View Close shortcode Options"
|
413 |
-
msgstr "Zeige Shortcodes-Optionen zu: Schließen"
|
414 |
-
|
415 |
-
#: admin/views/metaboxes/metabox-help.php:62
|
416 |
-
msgid "Pass a custom class to style your button"
|
417 |
-
msgstr ""
|
418 |
-
"Bestimmen Sie eine benutzerdefinierte CSS-Klasse, zu Ihrer Schaltfläche"
|
419 |
-
|
420 |
-
#: admin/views/metaboxes/metabox-help.php:63
|
421 |
-
msgid "Button label - <b>Default value:</b> Close"
|
422 |
-
msgstr "Schaltflächentext - <b>Default-Wert:</b> Schließen"
|
423 |
-
|
424 |
-
#: admin/views/metaboxes/metabox-help.php:64
|
425 |
-
msgid "left, right, center, none - <b>Default value:</b> center"
|
426 |
-
msgstr "links, rechts, mittig, ohne - <b>Default-Wert:</b> mittig"
|
427 |
-
|
428 |
-
#: admin/views/metaboxes/metabox-links.php:6
|
429 |
-
msgid "My name is"
|
430 |
-
msgstr "Mein Name ist"
|
431 |
-
|
432 |
-
#: admin/views/metaboxes/metabox-links.php:6
|
433 |
-
msgid "I develop WordPress plugins and themes."
|
434 |
-
msgstr "Ich entwickle WordPress Plugins und Themes."
|
435 |
-
|
436 |
-
#: admin/views/metaboxes/metabox-links.php:7
|
437 |
-
#, php-format
|
438 |
-
msgid ""
|
439 |
-
"Take a look at my <a href=\"%s\">site</a> to see my other plugins or hire "
|
440 |
-
"me. Subscribe to get updates!"
|
441 |
-
msgstr ""
|
442 |
-
"Werfen Sie einen Blick auf meine <a href=\"%s\">Website</a>, um andere "
|
443 |
-
"Plugins von mir zu sehen oder mir direkt einen Kundenauftrag zu erteilen. "
|
444 |
-
"Abonnieren Sie meine Newsletter für Updates!"
|
445 |
-
|
446 |
-
#: admin/views/metaboxes/metabox-links.php:8
|
447 |
-
msgid "Other plugins I built:"
|
448 |
-
msgstr "Andere Plugins von mir:"
|
449 |
-
|
450 |
-
#: admin/views/metaboxes/metabox-links.php:10
|
451 |
-
msgid "Install multiple plugins and create collections"
|
452 |
-
msgstr "Mehrere Plugins installieren und Sammlungen erstellen"
|
453 |
-
|
454 |
-
#: admin/views/metaboxes/metabox-links.php:11
|
455 |
-
msgid "Geotarget your content"
|
456 |
-
msgstr "Geotarget Ihrer Inhalte"
|
457 |
-
|
458 |
-
#: admin/views/metaboxes/metabox-links.php:12
|
459 |
-
msgid "Invite your network friends and import contacts"
|
460 |
-
msgstr "Lade Freunde ein und importiere Kontakte"
|
461 |
-
|
462 |
-
#: admin/views/metaboxes/metabox-options.php:9
|
463 |
-
msgid "Box Position"
|
464 |
-
msgstr "Position der Box"
|
465 |
-
|
466 |
-
#: admin/views/metaboxes/metabox-options.php:12
|
467 |
-
msgid "Centered"
|
468 |
-
msgstr "Zentriert"
|
469 |
-
|
470 |
-
#: admin/views/metaboxes/metabox-options.php:13
|
471 |
-
msgid "Top Left"
|
472 |
-
msgstr "Oben links"
|
473 |
-
|
474 |
-
#: admin/views/metaboxes/metabox-options.php:14
|
475 |
-
msgid "Top Right"
|
476 |
-
msgstr "Oben rechts"
|
477 |
-
|
478 |
-
#: admin/views/metaboxes/metabox-options.php:15
|
479 |
-
msgid "Bottom Left"
|
480 |
-
msgstr "Unten links"
|
481 |
-
|
482 |
-
#: admin/views/metaboxes/metabox-options.php:16
|
483 |
-
msgid "Bottom Right"
|
484 |
-
msgstr "Unten rechts"
|
485 |
-
|
486 |
-
#: admin/views/metaboxes/metabox-options.php:23
|
487 |
-
msgid "Trigger action"
|
488 |
-
msgstr "Auslöseaktion"
|
489 |
-
|
490 |
-
#: admin/views/metaboxes/metabox-options.php:27
|
491 |
-
msgid "seconds after page load"
|
492 |
-
msgstr "Sekunden nach dem Laden der Seite"
|
493 |
-
|
494 |
-
#: admin/views/metaboxes/metabox-options.php:28
|
495 |
-
msgid "of page height"
|
496 |
-
msgstr "der Seitenhöhe"
|
497 |
-
|
498 |
-
#: admin/views/metaboxes/metabox-options.php:38
|
499 |
-
msgid "Auto-hide?"
|
500 |
-
msgstr "Automatisch ausblenden?"
|
501 |
-
|
502 |
-
#: admin/views/metaboxes/metabox-options.php:40
|
503 |
-
#: admin/views/metaboxes/metabox-options.php:68
|
504 |
-
#: admin/views/metaboxes/metabox-options.php:76
|
505 |
-
#: admin/views/metaboxes/metabox-options.php:84
|
506 |
-
msgid "Yes"
|
507 |
-
msgstr "Ja"
|
508 |
-
|
509 |
-
#: admin/views/metaboxes/metabox-options.php:41
|
510 |
-
#: admin/views/metaboxes/metabox-options.php:69
|
511 |
-
#: admin/views/metaboxes/metabox-options.php:77
|
512 |
-
#: admin/views/metaboxes/metabox-options.php:85
|
513 |
-
msgid "No"
|
514 |
-
msgstr "Nein"
|
515 |
-
|
516 |
-
#: admin/views/metaboxes/metabox-options.php:42
|
517 |
-
msgid "Hide box again when visitors scroll back up?"
|
518 |
-
msgstr ""
|
519 |
-
"Soll die Box wieder versteckt werden, wenn Besucher zurück nach oben "
|
520 |
-
"scrollen?"
|
521 |
-
|
522 |
-
#: admin/views/metaboxes/metabox-options.php:46
|
523 |
-
msgid "Animation"
|
524 |
-
msgstr "Animieren"
|
525 |
-
|
526 |
-
#: admin/views/metaboxes/metabox-options.php:49
|
527 |
-
msgid "Fade In"
|
528 |
-
msgstr "Einblenden"
|
529 |
-
|
530 |
-
#: admin/views/metaboxes/metabox-options.php:50
|
531 |
-
msgid "Slide In"
|
532 |
-
msgstr "Seitlich einfahren"
|
533 |
-
|
534 |
-
#: admin/views/metaboxes/metabox-options.php:53
|
535 |
-
msgid "Slide will only apply when popup is on the corners"
|
536 |
-
msgstr "Seitliches Einfahren nur: wenn das Popup in den Ecken platziert ist"
|
537 |
-
|
538 |
-
#: admin/views/metaboxes/metabox-options.php:58
|
539 |
-
msgid "Cookie expiration days"
|
540 |
-
msgstr "Cookie läuft aus in Tagen"
|
541 |
-
|
542 |
-
#: admin/views/metaboxes/metabox-options.php:61
|
543 |
-
msgid "After closing the box, how many days should it stay hidden?"
|
544 |
-
msgstr "Wie viele Tage sollte das Popup nach Schließen nicht angezeigt werden?"
|
545 |
-
|
546 |
-
#: admin/views/metaboxes/metabox-options.php:66
|
547 |
-
msgid "Enable test mode?"
|
548 |
-
msgstr "Testmodus aktivieren?"
|
549 |
-
|
550 |
-
#: admin/views/metaboxes/metabox-options.php:70
|
551 |
-
msgid ""
|
552 |
-
"If test mode is enabled, the box will show up regardless of whether a cookie "
|
553 |
-
"has been set. (To admins only)"
|
554 |
-
msgstr ""
|
555 |
-
"Wenn Test-Modus aktiviert ist, wird das Popup angezeigt. Unabhängig davon, "
|
556 |
-
"ob ein Cookie festgelegt wurde. (Nur für Admins)"
|
557 |
-
|
558 |
-
#: admin/views/metaboxes/metabox-options.php:74
|
559 |
-
msgid "Close on conversion?"
|
560 |
-
msgstr "Schließen nach Konvertierung?"
|
561 |
-
|
562 |
-
#: admin/views/metaboxes/metabox-options.php:78
|
563 |
-
msgid ""
|
564 |
-
"If you have a form or social shortcode, by default popup will close on "
|
565 |
-
"submission/conversion"
|
566 |
-
msgstr ""
|
567 |
-
"Wenn Sie ein Formular oder ein Shortcode für soziale Netzwerkehaben, wird "
|
568 |
-
"standardmäßig das Popup nach Anmeldung/Konversion geschlossen"
|
569 |
-
|
570 |
-
#: admin/views/metaboxes/metabox-options.php:82
|
571 |
-
msgid "Show powered by link?"
|
572 |
-
msgstr "Mit Unterstützung von Link anzeigen?"
|
573 |
-
|
574 |
-
#: admin/views/metaboxes/metabox-options.php:86
|
575 |
-
#, php-format
|
576 |
-
msgid ""
|
577 |
-
"Shows a \"powered by\" link below your popup. If your affiliate link is set "
|
578 |
-
"in the <a href=\"%s\">settings</a>, it will be used."
|
579 |
-
msgstr ""
|
580 |
-
"Zeigt einen \"powered by\" Link unten in Ihrem Popup. Wenn Ihr Affiliate-"
|
581 |
-
"Link in den <a href=\"%s\">Einstellungen</a> festgelegt ist, wird dieser "
|
582 |
-
"verwendet."
|
583 |
-
|
584 |
-
#: admin/views/metaboxes/metabox-premium.php:16
|
585 |
-
msgid ""
|
586 |
-
"Take the best WordPress Popups plugin to the next level with Popups Premium "
|
587 |
-
"extension."
|
588 |
-
msgstr ""
|
589 |
-
"Bringen Sie das beste WordPress Popups-Plugin auf den nächsten Level mit der "
|
590 |
-
"Popups Premium-Erweiterung."
|
591 |
-
|
592 |
-
#: admin/views/metaboxes/metabox-premium.php:17
|
593 |
-
msgid "Popups Premium Features:"
|
594 |
-
msgstr "Popups Premium Features:"
|
595 |
-
|
596 |
-
#: admin/views/metaboxes/metabox-premium.php:19
|
597 |
-
msgid "Beautiful optin forms for popular mail providers"
|
598 |
-
msgstr "Schöne Opt-In Formulare für die bekanntesten E-Mail-Anbieter"
|
599 |
-
|
600 |
-
#: admin/views/metaboxes/metabox-premium.php:20
|
601 |
-
msgid "Currently supporting MailChimp, Aweber, Postmatic, Mailpoet"
|
602 |
-
msgstr "Aktuell unterstützt: MailChimp, Aweber, Postmatic, Mailpoet"
|
603 |
-
|
604 |
-
#: admin/views/metaboxes/metabox-premium.php:21
|
605 |
-
msgid ""
|
606 |
-
"Track impressions and Conversions of social likes and forms submissions like "
|
607 |
-
"Contact Form 7, Gravity forms, etc"
|
608 |
-
msgstr ""
|
609 |
-
"Verfolge Impressionen und Konversionen von sozialen Likes und "
|
610 |
-
"Formularübermittlungen wie: Contact Form 7, Gravity forms, etc."
|
611 |
-
|
612 |
-
#: admin/views/metaboxes/metabox-premium.php:22
|
613 |
-
msgid "Track impressions and Conversions also in Google Analytics"
|
614 |
-
msgstr "Verfolge Impressionen und Conversions auch in Google Analytics"
|
615 |
-
|
616 |
-
#: admin/views/metaboxes/metabox-premium.php:23
|
617 |
-
#: admin/views/metaboxes/metabox-premium.php:25
|
618 |
-
msgid "Exit Intent technology"
|
619 |
-
msgstr "\"Beim Verlassen der Seite\" Technologie"
|
620 |
-
|
621 |
-
#: admin/views/metaboxes/metabox-premium.php:24
|
622 |
-
msgid "8 New animations effects"
|
623 |
-
msgstr "8 neue Animationen"
|
624 |
-
|
625 |
-
#: admin/views/metaboxes/metabox-premium.php:26
|
626 |
-
msgid "New trigger methods"
|
627 |
-
msgstr "Neue Trigger-Methoden"
|
628 |
-
|
629 |
-
#: admin/views/metaboxes/metabox-premium.php:27
|
630 |
-
msgid "Timer for auto closing"
|
631 |
-
msgstr "Timer für automatische Schließung"
|
632 |
-
|
633 |
-
#: admin/views/metaboxes/metabox-premium.php:28
|
634 |
-
msgid "Ability to disable close button"
|
635 |
-
msgstr "Möglichkeit zum Deaktivieren der Schaltfläche \"schließen\""
|
636 |
-
|
637 |
-
#: admin/views/metaboxes/metabox-premium.php:29
|
638 |
-
msgid ""
|
639 |
-
"Ability to disable Advanced close methods like esc or clicking outside of "
|
640 |
-
"the popup"
|
641 |
-
msgstr ""
|
642 |
-
"Möglichkeit, fortschrittliche \"Schließen\" Methoden wie ESC oder Klicken "
|
643 |
-
"außerhalb des Popups zu deaktivieren"
|
644 |
-
|
645 |
-
#: admin/views/metaboxes/metabox-premium.php:30
|
646 |
-
msgid "Premium support"
|
647 |
-
msgstr "Premium-Support"
|
648 |
-
|
649 |
-
#: admin/views/metaboxes/metabox-premium.php:34
|
650 |
-
msgid "Buy Now!"
|
651 |
-
msgstr "Sofort Kaufen!"
|
652 |
-
|
653 |
-
#: admin/views/metaboxes/metabox-rules.php:19
|
654 |
-
msgid "Rules"
|
655 |
-
msgstr "Regeln"
|
656 |
-
|
657 |
-
#: admin/views/metaboxes/metabox-rules.php:20
|
658 |
-
msgid "Create a set of rules to determine where the popup will show"
|
659 |
-
msgstr ""
|
660 |
-
"Erstellen Sie einen Satz von Regeln, um festzustellen, wo das Popup "
|
661 |
-
"angezeigt wird"
|
662 |
-
|
663 |
-
#: admin/views/metaboxes/metabox-rules.php:31
|
664 |
-
msgid "Show this popup if"
|
665 |
-
msgstr "Zeigen Sie dieses Popup wenn"
|
666 |
-
|
667 |
-
#: admin/views/metaboxes/metabox-rules.php:61
|
668 |
-
msgid "is equal to"
|
669 |
-
msgstr "ist gleich"
|
670 |
-
|
671 |
-
#: admin/views/metaboxes/metabox-rules.php:62
|
672 |
-
msgid "is not equal to"
|
673 |
-
msgstr "ist nicht gleich"
|
674 |
-
|
675 |
-
#: admin/views/metaboxes/metabox-rules.php:93
|
676 |
-
msgid "and"
|
677 |
-
msgstr "und"
|
678 |
-
|
679 |
-
#: admin/views/metaboxes/metabox-rules.php:108
|
680 |
-
msgid "Add rule group"
|
681 |
-
msgstr "Regelgruppe hinzufügen"
|
682 |
-
|
683 |
-
#: admin/views/metaboxes/metabox-support.php:6
|
684 |
-
#, php-format
|
685 |
-
msgid "You are using Popups plugin v%s"
|
686 |
-
msgstr "Sie verwenden Popups Plugin v%s"
|
687 |
-
|
688 |
-
#: admin/views/metaboxes/metabox-support.php:7
|
689 |
-
#, php-format
|
690 |
-
msgid ""
|
691 |
-
"If you need support please go to the WordPress.org <a href=\"%s\">support "
|
692 |
-
"forums</a>"
|
693 |
-
msgstr ""
|
694 |
-
"Wenn Sie Unterstützung benötigen, gehen Sie bitte auf WordPress.org <a href="
|
695 |
-
"\"%s\">Support-Foren</a>"
|
696 |
-
|
697 |
-
#: admin/views/settings-page.php:17
|
698 |
-
msgid "Affiliate link"
|
699 |
-
msgstr "Affiliate Link"
|
700 |
-
|
701 |
-
#: admin/views/settings-page.php:20
|
702 |
-
#, php-format
|
703 |
-
msgid ""
|
704 |
-
"You can earn money by promoting the plugin! Join <a href=\"%s\">our "
|
705 |
-
"affiliate program</a> and paste your affiliate link here to earn 35% in "
|
706 |
-
"commissions . Once entered, it will replace the default \"Powered by\" on "
|
707 |
-
"the popups."
|
708 |
-
msgstr ""
|
709 |
-
"Sie können Geld verdienen durch Promotion des Plugin! Treten Sie <a href=\"%s"
|
710 |
-
"\">unserem Affiliate-Programm</a> bei und fügen Sie Ihren Affiliate-Link "
|
711 |
-
"hier ein, um 35% an Provisionen zu verdienen. Einmal eingegeben, und der "
|
712 |
-
"Standardwert \"Powered by\" wird mit Ihrem Link in den Popups ersetzt."
|
713 |
-
|
714 |
-
#: admin/views/settings-page.php:24
|
715 |
-
msgid "Ajax mode?"
|
716 |
-
msgstr "Ajax-Modus?"
|
717 |
-
|
718 |
-
#: admin/views/settings-page.php:27
|
719 |
-
msgid ""
|
720 |
-
"Load popups using ajax. Compatible with cache plugins, but might not work "
|
721 |
-
"with all plugins"
|
722 |
-
msgstr ""
|
723 |
-
"Laden Sie Popups mit Ajax. Kompatibel mit Cache-Plugins, aber funktioniert "
|
724 |
-
"möglicherweise nicht mit allen Plugins"
|
725 |
-
|
726 |
-
#: admin/views/settings-page.php:32
|
727 |
-
msgid "Enable Debug mode?"
|
728 |
-
msgstr "Fehlersuche aktivieren?"
|
729 |
-
|
730 |
-
#: admin/views/settings-page.php:35
|
731 |
-
msgid "Will use uncompressed js"
|
732 |
-
msgstr "Unkomprimierte Js verwenden"
|
733 |
-
|
734 |
-
#: admin/views/settings-page.php:40
|
735 |
-
msgid "Enable safe mode?"
|
736 |
-
msgstr "Aktivieren abgesicherter Modus?"
|
737 |
-
|
738 |
-
#: admin/views/settings-page.php:43
|
739 |
-
msgid "Will move all popups to top of the screen."
|
740 |
-
msgstr "Alle Popups wird zum oberen Rand des Bildschirms verschoben werden."
|
741 |
-
|
742 |
-
#: admin/views/settings-page.php:48
|
743 |
-
msgid "Remove shortcodes style"
|
744 |
-
msgstr "Shortcodes Stil entfernen"
|
745 |
-
|
746 |
-
#: admin/views/settings-page.php:51
|
747 |
-
msgid ""
|
748 |
-
"By default the plugin will apply some style to shortcodes. Check here if you "
|
749 |
-
"want to manually style them"
|
750 |
-
msgstr ""
|
751 |
-
"Standardmäßig wird das Plugin eigene Stil-Shortcodes zuweisen. Aktivieren, "
|
752 |
-
"wenn Sie Stile manuell erzeugen wollen"
|
753 |
-
|
754 |
-
#: admin/views/settings-page.php:56
|
755 |
-
msgid "Unload Facebook javascript"
|
756 |
-
msgstr "Facebook Javascript nicht laden"
|
757 |
-
|
758 |
-
#: admin/views/settings-page.php:59
|
759 |
-
msgid "If you use your own Facebook script, check this"
|
760 |
-
msgstr ""
|
761 |
-
"Wenn Sie Ihr eigenes Facebook-Skript verwenden, aktivieren Sie dies hier"
|
762 |
-
|
763 |
-
#: admin/views/settings-page.php:64
|
764 |
-
msgid "Unload Google javascript"
|
765 |
-
msgstr "Google Javascript nicht laden"
|
766 |
-
|
767 |
-
#: admin/views/settings-page.php:67
|
768 |
-
msgid "If you use your own Google script, check this"
|
769 |
-
msgstr "Wenn Sie Ihre eigenes Google-Skript verwenden, aktivieren Sie dies"
|
770 |
-
|
771 |
-
#: admin/views/settings-page.php:72
|
772 |
-
msgid "Unload Twitter javascript"
|
773 |
-
msgstr "Twitter-Javascript nicht laden"
|
774 |
-
|
775 |
-
#: admin/views/settings-page.php:75
|
776 |
-
msgid "If you use your own Twitter script, check this"
|
777 |
-
msgstr ""
|
778 |
-
"Wenn Sie Ihr eigenes Twitter-Skript verwenden, aktivieren Sie dies hier"
|
779 |
-
|
780 |
-
#: admin/views/settings-page.php:82
|
781 |
-
msgid "Delete all data on Uninstall"
|
782 |
-
msgstr "Alle Daten bei der Deinstallation löschen"
|
783 |
-
|
784 |
-
#: admin/views/settings-page.php:85
|
785 |
-
msgid ""
|
786 |
-
"When you uninstall the plugin all popups, settings and stats will be deleted "
|
787 |
-
"from your db"
|
788 |
-
msgstr ""
|
789 |
-
"Wenn Sie das Plugin deinstallieren werden alle Popups, Einstellungen und "
|
790 |
-
"Statistiken aus der Datenbank gelöscht"
|
791 |
-
|
792 |
-
#: admin/views/settings-page.php:89
|
793 |
-
msgid "Save settings"
|
794 |
-
msgstr "Einstellungen speichern"
|
795 |
-
|
796 |
-
#: includes/class-spu-helper.php:131
|
797 |
-
msgid "All Pages"
|
798 |
-
msgstr "Alle Seiten"
|
799 |
-
|
800 |
-
#: includes/class-spu-helper.php:132
|
801 |
-
msgid "Front Page"
|
802 |
-
msgstr "Startseite"
|
803 |
-
|
804 |
-
#: includes/class-spu-helper.php:133
|
805 |
-
msgid "Posts Page"
|
806 |
-
msgstr "Beiträge Seite"
|
807 |
-
|
808 |
-
#: includes/class-spu-helper.php:134
|
809 |
-
msgid "Category Page"
|
810 |
-
msgstr "Kategorie Seite"
|
811 |
-
|
812 |
-
#: includes/class-spu-helper.php:135
|
813 |
-
msgid "Search Page"
|
814 |
-
msgstr "Suche-Seite"
|
815 |
-
|
816 |
-
#: includes/class-spu-helper.php:136
|
817 |
-
msgid "Archives Page"
|
818 |
-
msgstr "Archivseite"
|
819 |
-
|
820 |
-
#: includes/class-spu-helper.php:137
|
821 |
-
msgid "Top Level Page (parent of 0)"
|
822 |
-
msgstr "Hauptseite (nicht übergeordnet)"
|
823 |
-
|
824 |
-
#: includes/class-spu-helper.php:138
|
825 |
-
msgid "Parent Page (has children)"
|
826 |
-
msgstr "Eltern-Seite (mit Kind-Seiten darunter)"
|
827 |
-
|
828 |
-
#: includes/class-spu-helper.php:139
|
829 |
-
msgid "Child Page (has parent)"
|
830 |
-
msgstr "Kind-Seite (hat Eltern)"
|
831 |
-
|
832 |
-
#: includes/class-spu-helper.php:147
|
833 |
-
msgid "Default Template"
|
834 |
-
msgstr "Standardvorlage"
|
835 |
-
|
836 |
-
#: includes/class-spu-helper.php:220
|
837 |
-
msgid "Publish"
|
838 |
-
msgstr "Veröffentlichen"
|
839 |
-
|
840 |
-
#: includes/class-spu-helper.php:221
|
841 |
-
msgid "Pending Review"
|
842 |
-
msgstr "Ausstehende Bewertung"
|
843 |
-
|
844 |
-
#: includes/class-spu-helper.php:222
|
845 |
-
msgid "Draft"
|
846 |
-
msgstr "Entwurf"
|
847 |
-
|
848 |
-
#: includes/class-spu-helper.php:223
|
849 |
-
msgid "Future"
|
850 |
-
msgstr "Zukunft"
|
851 |
-
|
852 |
-
#: includes/class-spu-helper.php:224
|
853 |
-
msgid "Private"
|
854 |
-
msgstr "Privat"
|
855 |
-
|
856 |
-
#: includes/class-spu-helper.php:225
|
857 |
-
msgid "Revision"
|
858 |
-
msgstr "Revision"
|
859 |
-
|
860 |
-
#: includes/class-spu-helper.php:226
|
861 |
-
msgid "Trash"
|
862 |
-
msgstr "Papierkorb"
|
863 |
-
|
864 |
-
#: includes/class-spu-helper.php:239
|
865 |
-
msgid "Super Admin"
|
866 |
-
msgstr "Super Administrator"
|
867 |
-
|
868 |
-
#: includes/class-spu-helper.php:259
|
869 |
-
msgid "True"
|
870 |
-
msgstr "Richtig"
|
1 |
+
# Copyright (C) 2013 TODO
|
2 |
+
# This file is distributed under the same license as the TODO package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: Popups\n"
|
6 |
+
"Report-Msgid-Bugs-To: http://wordpress.org/plugins/plugin-name\n"
|
7 |
+
"POT-Creation-Date: 2016-02-04 13:02+0100\n"
|
8 |
+
"PO-Revision-Date: 2018-01-22 16:35+0000\n"
|
9 |
+
"Language-Team: Timersys <info@timersys.com>\n"
|
10 |
+
"MIME-Version: 1.0\n"
|
11 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
+
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"X-Generator: Poedit 2.0.6\n"
|
14 |
+
"X-Poedit-KeywordsList: __;_e;_n;_x;esc_html_e;esc_html__;esc_attr_e;"
|
15 |
+
"esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2\n"
|
16 |
+
"X-Poedit-Basepath: ..\n"
|
17 |
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18 |
+
"Last-Translator: \n"
|
19 |
+
"Language: de_DE@formal\n"
|
20 |
+
"X-Poedit-SearchPath-0: .\n"
|
21 |
+
|
22 |
+
#: admin/class-social-popup-admin.php:159
|
23 |
+
msgctxt "post type singular name"
|
24 |
+
msgid "Popups"
|
25 |
+
msgstr "PopUps"
|
26 |
+
|
27 |
+
#: admin/class-social-popup-admin.php:160
|
28 |
+
msgctxt "admin menu"
|
29 |
+
msgid "Popups"
|
30 |
+
msgstr "PopUps"
|
31 |
+
|
32 |
+
#: admin/class-social-popup-admin.php:161
|
33 |
+
msgctxt "add new on admin bar"
|
34 |
+
msgid "Popups"
|
35 |
+
msgstr "PopUps"
|
36 |
+
|
37 |
+
#: admin/class-social-popup-admin.php:162
|
38 |
+
msgctxt "Popups"
|
39 |
+
msgid "Add New"
|
40 |
+
msgstr "Neues hinzufügen"
|
41 |
+
|
42 |
+
#: admin/class-social-popup-admin.php:163
|
43 |
+
msgid "Add New Popups"
|
44 |
+
msgstr "Neue Popups hinzufügen"
|
45 |
+
|
46 |
+
#: admin/class-social-popup-admin.php:164
|
47 |
+
msgid "New Popups"
|
48 |
+
msgstr "Neue Popups"
|
49 |
+
|
50 |
+
#: admin/class-social-popup-admin.php:165
|
51 |
+
msgid "Edit Popups"
|
52 |
+
msgstr "Popups bearbeiten"
|
53 |
+
|
54 |
+
#: admin/class-social-popup-admin.php:166
|
55 |
+
msgid "View Popups"
|
56 |
+
msgstr "Popups anzeigen"
|
57 |
+
|
58 |
+
#: admin/class-social-popup-admin.php:167
|
59 |
+
msgid "All Popups"
|
60 |
+
msgstr "Alle Popups"
|
61 |
+
|
62 |
+
#: admin/class-social-popup-admin.php:168
|
63 |
+
msgid "Search Popups"
|
64 |
+
msgstr "Suche Popups"
|
65 |
+
|
66 |
+
#: admin/class-social-popup-admin.php:169
|
67 |
+
msgid "Parent Popups:"
|
68 |
+
msgstr "Übergeordnete Popups:"
|
69 |
+
|
70 |
+
#: admin/class-social-popup-admin.php:170
|
71 |
+
msgid "No Popups found."
|
72 |
+
msgstr "Keine Popups gefunden."
|
73 |
+
|
74 |
+
#: admin/class-social-popup-admin.php:171
|
75 |
+
msgid "No Popups found in Trash."
|
76 |
+
msgstr "Keine Popups im Papierkorb gefunden."
|
77 |
+
|
78 |
+
#: admin/class-social-popup-admin.php:212
|
79 |
+
msgid "Settings"
|
80 |
+
msgstr "Einstellungen"
|
81 |
+
|
82 |
+
#: admin/class-social-popup-admin.php:260
|
83 |
+
msgid "Popups Premium"
|
84 |
+
msgstr "Popups Premium"
|
85 |
+
|
86 |
+
#: admin/class-social-popup-admin.php:271
|
87 |
+
msgid "PopUp Shortcodes"
|
88 |
+
msgstr "PopUp Shortcodes"
|
89 |
+
|
90 |
+
#: admin/class-social-popup-admin.php:280
|
91 |
+
msgid "PopUp Appearance"
|
92 |
+
msgstr "Popup Stil"
|
93 |
+
|
94 |
+
#: admin/class-social-popup-admin.php:289
|
95 |
+
msgid "PopUp Display Rules"
|
96 |
+
msgstr "Popup-Anzeigeregeln"
|
97 |
+
|
98 |
+
#: admin/class-social-popup-admin.php:298
|
99 |
+
msgid "Display Options"
|
100 |
+
msgstr "Anzeige-Optionen"
|
101 |
+
|
102 |
+
#: admin/class-social-popup-admin.php:307
|
103 |
+
msgid "Need support?"
|
104 |
+
msgstr "Unterstützung benötigt?"
|
105 |
+
|
106 |
+
#: admin/class-social-popup-admin.php:315
|
107 |
+
msgid "Donate & support"
|
108 |
+
msgstr "Spenden & unterstützen"
|
109 |
+
|
110 |
+
#: admin/class-social-popup-admin.php:323
|
111 |
+
msgid "About the developer"
|
112 |
+
msgstr "Über den Hersteller"
|
113 |
+
|
114 |
+
#: admin/class-social-popup-admin.php:589
|
115 |
+
#: admin/views/metaboxes/metabox-rules.php:33
|
116 |
+
#: admin/views/metaboxes/metabox-rules.php:106
|
117 |
+
msgid "or"
|
118 |
+
msgstr "oder"
|
119 |
+
|
120 |
+
#: admin/class-social-popup-admin.php:616
|
121 |
+
msgid "Add a Popup"
|
122 |
+
msgstr "Ein PopUp zufügen"
|
123 |
+
|
124 |
+
#: admin/class-social-popup-admin.php:740
|
125 |
+
msgid "User"
|
126 |
+
msgstr "Benutzer"
|
127 |
+
|
128 |
+
#: admin/class-social-popup-admin.php:741
|
129 |
+
msgid "User role"
|
130 |
+
msgstr "Benutzer Rolle"
|
131 |
+
|
132 |
+
#: admin/class-social-popup-admin.php:742
|
133 |
+
msgid "User is logged"
|
134 |
+
msgstr "Benutzer ist angemeldet"
|
135 |
+
|
136 |
+
#: admin/class-social-popup-admin.php:743
|
137 |
+
msgid "User never left a comment"
|
138 |
+
msgstr "Benutzer hat nie einen Kommentar verfasst"
|
139 |
+
|
140 |
+
#: admin/class-social-popup-admin.php:744
|
141 |
+
msgid "User came via a search engine"
|
142 |
+
msgstr "Benutzer kam über eine Suchmaschine"
|
143 |
+
|
144 |
+
#: admin/class-social-popup-admin.php:745
|
145 |
+
msgid "User did not arrive via another page on your site"
|
146 |
+
msgstr "Benutzer kam nicht über eine andere Seite Ihrer Webseite"
|
147 |
+
|
148 |
+
#: admin/class-social-popup-admin.php:747
|
149 |
+
#: admin/class-social-popup-admin.php:748
|
150 |
+
msgid "Post"
|
151 |
+
msgstr "Beitrag"
|
152 |
+
|
153 |
+
#: admin/class-social-popup-admin.php:749
|
154 |
+
msgid "Post ID"
|
155 |
+
msgstr "Beitrags ID"
|
156 |
+
|
157 |
+
#: admin/class-social-popup-admin.php:750
|
158 |
+
msgid "Post Type"
|
159 |
+
msgstr "Beitragstyp"
|
160 |
+
|
161 |
+
#: admin/class-social-popup-admin.php:751
|
162 |
+
msgid "Post Category"
|
163 |
+
msgstr "Beitragskategorie"
|
164 |
+
|
165 |
+
#: admin/class-social-popup-admin.php:752
|
166 |
+
msgid "Post Format"
|
167 |
+
msgstr "Beitragsformat"
|
168 |
+
|
169 |
+
#: admin/class-social-popup-admin.php:753
|
170 |
+
msgid "Post Status"
|
171 |
+
msgstr "Veröffentlichungsstatus"
|
172 |
+
|
173 |
+
#: admin/class-social-popup-admin.php:754
|
174 |
+
msgid "Post Taxonomy"
|
175 |
+
msgstr "Beitragsklassifizierung"
|
176 |
+
|
177 |
+
#: admin/class-social-popup-admin.php:756
|
178 |
+
#: admin/class-social-popup-admin.php:757
|
179 |
+
msgid "Page"
|
180 |
+
msgstr "Seite"
|
181 |
+
|
182 |
+
#: admin/class-social-popup-admin.php:758
|
183 |
+
msgid "Page Type"
|
184 |
+
msgstr "Seitentyp"
|
185 |
+
|
186 |
+
#: admin/class-social-popup-admin.php:759
|
187 |
+
msgid "Page Parent"
|
188 |
+
msgstr "Übergeordnete Seite"
|
189 |
+
|
190 |
+
#: admin/class-social-popup-admin.php:760
|
191 |
+
msgid "Page Template"
|
192 |
+
msgstr "Seitentemplate"
|
193 |
+
|
194 |
+
#: admin/class-social-popup-admin.php:762
|
195 |
+
msgid "Other"
|
196 |
+
msgstr "Sonstiges"
|
197 |
+
|
198 |
+
#: admin/class-social-popup-admin.php:763
|
199 |
+
msgid "Referrer"
|
200 |
+
msgstr "Empfehler"
|
201 |
+
|
202 |
+
#: admin/class-social-popup-admin.php:764
|
203 |
+
msgid "Mobile Phone"
|
204 |
+
msgstr "Mobil Nummer"
|
205 |
+
|
206 |
+
#: admin/class-social-popup-admin.php:765
|
207 |
+
msgid "Tablet"
|
208 |
+
msgstr "Tablet"
|
209 |
+
|
210 |
+
#: admin/class-social-popup-admin.php:813
|
211 |
+
msgid "ID"
|
212 |
+
msgstr "ID"
|
213 |
+
|
214 |
+
#: admin/includes/class-spu-notices.php:30
|
215 |
+
#, php-format
|
216 |
+
msgid ""
|
217 |
+
"We noticed that you have been using our plugin for a while and we would like "
|
218 |
+
"to ask you a little favour. If you are happy with it and can take a minute "
|
219 |
+
"please <a href=\"%s\" target=\"_blank\">leave a nice review</a> on "
|
220 |
+
"WordPress. It will be a tremendous help for us!"
|
221 |
+
msgstr ""
|
222 |
+
"Wir haben festgestellt, dass Sie unser Plugin bereits für eine Weile "
|
223 |
+
"verwendet haben und möchten Sie um einen Gefallen bitten. Wenn Sie mit "
|
224 |
+
"unserem Plugin zufrieden sind, nehmen Sie sich bitte eine Minute Zeit und <a "
|
225 |
+
"href=\"%s\" target=\"_blank\">hinterlassen eine positive Rezension</a> auf "
|
226 |
+
"WordPress. Es wird für uns eine große Hilfe sein!"
|
227 |
+
|
228 |
+
#: admin/includes/class-spu-notices.php:32
|
229 |
+
#, php-format
|
230 |
+
msgid "<a href=\"%s\" target=\"_blank\">Leave a nice review</a>"
|
231 |
+
msgstr "<a href=\"%s\" target=\"_blank\">Eine positive Rezension verfassen</a>"
|
232 |
+
|
233 |
+
#: admin/includes/class-spu-notices.php:33
|
234 |
+
#, php-format
|
235 |
+
msgid "<a href=\"%s\">No, thanks</a>"
|
236 |
+
msgstr "<a href=\"%s\">Nein Danke!</a>"
|
237 |
+
|
238 |
+
#: admin/views/metaboxes/metabox-appearance.php:10
|
239 |
+
msgid "Background opacity"
|
240 |
+
msgstr "Hintergrund Transparenz"
|
241 |
+
|
242 |
+
#: admin/views/metaboxes/metabox-appearance.php:12
|
243 |
+
msgid "Leave at 0 for no background. Max value is 1"
|
244 |
+
msgstr "0 für keinen Hintergrund. Max ist 1"
|
245 |
+
|
246 |
+
#: admin/views/metaboxes/metabox-appearance.php:18
|
247 |
+
msgid "Background color"
|
248 |
+
msgstr "Hintergrundfarbe"
|
249 |
+
|
250 |
+
#: admin/views/metaboxes/metabox-appearance.php:22
|
251 |
+
msgid "Text color"
|
252 |
+
msgstr "Text Farbe"
|
253 |
+
|
254 |
+
#: admin/views/metaboxes/metabox-appearance.php:26
|
255 |
+
msgid "Box width"
|
256 |
+
msgstr "Breite des Inhalts-Blocks"
|
257 |
+
|
258 |
+
#: admin/views/metaboxes/metabox-appearance.php:32
|
259 |
+
msgid "Border color"
|
260 |
+
msgstr "Rahmenfarbe"
|
261 |
+
|
262 |
+
#: admin/views/metaboxes/metabox-appearance.php:36
|
263 |
+
msgid "Border width"
|
264 |
+
msgstr "Rahmenbreite"
|
265 |
+
|
266 |
+
#: admin/views/metaboxes/metabox-donate.php:6
|
267 |
+
msgid "If you like this plugin, consider supporting it by donating."
|
268 |
+
msgstr ""
|
269 |
+
"Wenn Ihnen dieses Plugin gefällt, unterstützen Sie es mit einer Spende."
|
270 |
+
|
271 |
+
#: admin/views/metaboxes/metabox-donate.php:8
|
272 |
+
msgid "Donate with PayPal"
|
273 |
+
msgstr "Mit PayPal spenden"
|
274 |
+
|
275 |
+
#: admin/views/metaboxes/metabox-donate.php:10
|
276 |
+
msgid "Some other ways to support this plugin"
|
277 |
+
msgstr "Einige andere Möglichkeiten, dieses Plugin zu unterstützen"
|
278 |
+
|
279 |
+
#: admin/views/metaboxes/metabox-donate.php:12
|
280 |
+
msgid "Leave a ★★★★★ review on WordPress.org"
|
281 |
+
msgstr ""
|
282 |
+
"Hinterlassen Sie eine ★★★★★ Bewertung auf "
|
283 |
+
"WordPress.org"
|
284 |
+
|
285 |
+
#: admin/views/metaboxes/metabox-donate.php:13
|
286 |
+
msgid "Write about Popups on your blog"
|
287 |
+
msgstr "Über Popups in Ihrem Blog schreiben"
|
288 |
+
|
289 |
+
#: admin/views/metaboxes/metabox-donate.php:14
|
290 |
+
msgid "Tweet about Popups"
|
291 |
+
msgstr "Tweet über Popups"
|
292 |
+
|
293 |
+
#: admin/views/metaboxes/metabox-donate.php:15
|
294 |
+
msgid "Vote \"works\" on the WordPress.org plugin page"
|
295 |
+
msgstr ""
|
296 |
+
"Stimmen Sie mit "funktioniert" auf der WordPress.org Plugin Seite"
|
297 |
+
|
298 |
+
#: admin/views/metaboxes/metabox-help.php:6
|
299 |
+
msgid ""
|
300 |
+
"You have some social shortcodes to use that will print a Facebook like, a "
|
301 |
+
"Google+ Follow and a Twitter follow. Check the available options and "
|
302 |
+
"<strong>configure them with your social accounts</strong>:"
|
303 |
+
msgstr ""
|
304 |
+
"Sie haben einige Shortcodes zur Verfügung, die: Facebook like, Google + "
|
305 |
+
"folgen und ein Twitter folgen auf der Seite anzeigen können. Überprüfen Sie "
|
306 |
+
"die verfügbaren Optionen um <strong>sie mit Ihren sozialen Netzwerkkonten zu "
|
307 |
+
"konfigurieren</strong>:"
|
308 |
+
|
309 |
+
#: admin/views/metaboxes/metabox-help.php:8
|
310 |
+
msgid "Facebook Page"
|
311 |
+
msgstr "Facebook-Seite"
|
312 |
+
|
313 |
+
#: admin/views/metaboxes/metabox-help.php:12
|
314 |
+
msgid "View Facebook Page Options"
|
315 |
+
msgstr "Zeige Facebook-Seitenoptionen"
|
316 |
+
|
317 |
+
#: admin/views/metaboxes/metabox-help.php:14
|
318 |
+
#: admin/views/metaboxes/metabox-help.php:27
|
319 |
+
msgid "Your Facebook page url"
|
320 |
+
msgstr "Ihre Facebook-URL"
|
321 |
+
|
322 |
+
#: admin/views/metaboxes/metabox-help.php:15
|
323 |
+
msgid "Your page name"
|
324 |
+
msgstr "Ihr Seitenname"
|
325 |
+
|
326 |
+
#: admin/views/metaboxes/metabox-help.php:16
|
327 |
+
msgid "true|false <b>Default value:</b> true"
|
328 |
+
msgstr "richtig|falsch <b>Standart-Einstellung</b> richtig"
|
329 |
+
|
330 |
+
#: admin/views/metaboxes/metabox-help.php:17
|
331 |
+
msgid "true|false <b>Default value:</b> false"
|
332 |
+
msgstr "richtig|falsch <b>Standart-Einstellung</b> falsch"
|
333 |
+
|
334 |
+
#: admin/views/metaboxes/metabox-help.php:18
|
335 |
+
msgid "number <b>Default value:</b> 500"
|
336 |
+
msgstr "Anzahl <b>Standart-Wert:</b> 500"
|
337 |
+
|
338 |
+
#: admin/views/metaboxes/metabox-help.php:21
|
339 |
+
msgid "Facebook Button"
|
340 |
+
msgstr "Facebook Taste"
|
341 |
+
|
342 |
+
#: admin/views/metaboxes/metabox-help.php:25
|
343 |
+
msgid "View Facebook Options"
|
344 |
+
msgstr "Zeige Facebook-Optionen"
|
345 |
+
|
346 |
+
#: admin/views/metaboxes/metabox-help.php:28
|
347 |
+
msgid "standard, box_count, button <b>Default value:</b> button_count"
|
348 |
+
msgstr "standart, box_drücke, taste <b>Standard Wert:</b> tasten_drücke"
|
349 |
+
|
350 |
+
#: admin/views/metaboxes/metabox-help.php:29
|
351 |
+
#: admin/views/metaboxes/metabox-help.php:30
|
352 |
+
msgid "true <b>Default value:</b> false"
|
353 |
+
msgstr "richtig <b>Standart-Einstellung</b> falsch"
|
354 |
+
|
355 |
+
#: admin/views/metaboxes/metabox-help.php:31
|
356 |
+
msgid "recommend <b>Default value:</b> like"
|
357 |
+
msgstr "empfohlen <b>Default-Wert:</b> like"
|
358 |
+
|
359 |
+
#: admin/views/metaboxes/metabox-help.php:32
|
360 |
+
msgid "number <b>Default value:</b>"
|
361 |
+
msgstr "Anzahl <b>Standart-Wert:</b>"
|
362 |
+
|
363 |
+
#: admin/views/metaboxes/metabox-help.php:34
|
364 |
+
msgid "Google+ Button"
|
365 |
+
msgstr "Google+Taste"
|
366 |
+
|
367 |
+
#: admin/views/metaboxes/metabox-help.php:38
|
368 |
+
msgid "View Google+ Options"
|
369 |
+
msgstr "Zeige Google +-Optionen"
|
370 |
+
|
371 |
+
#: admin/views/metaboxes/metabox-help.php:40
|
372 |
+
msgid "Your Google+ url"
|
373 |
+
msgstr "Geben Sie Ihren Google+-Link an."
|
374 |
+
|
375 |
+
#: admin/views/metaboxes/metabox-help.php:41
|
376 |
+
msgid "small, standard, tall <b>Default value:</b> medium"
|
377 |
+
msgstr "klein, standart, groß <b>Standart-Wert:</b> medium"
|
378 |
+
|
379 |
+
#: admin/views/metaboxes/metabox-help.php:42
|
380 |
+
msgid "inline, none <b>Default value:</b> bubble"
|
381 |
+
msgstr "inline, none <b>Standartt-Wert:</b> bubble"
|
382 |
+
|
383 |
+
#: admin/views/metaboxes/metabox-help.php:44
|
384 |
+
msgid "Twitter Button"
|
385 |
+
msgstr "Twitter Taste"
|
386 |
+
|
387 |
+
#: admin/views/metaboxes/metabox-help.php:48
|
388 |
+
msgid "View Twitter Options"
|
389 |
+
msgstr "Zeige Twitter Optionen"
|
390 |
+
|
391 |
+
#: admin/views/metaboxes/metabox-help.php:50
|
392 |
+
msgid "Your Twitter user <b>Default chifliiiii</b>"
|
393 |
+
msgstr "Ihr Twitter Benutzername <b>Standard-chifliiiii</b>"
|
394 |
+
|
395 |
+
#: admin/views/metaboxes/metabox-help.php:51
|
396 |
+
msgid "false <b>Default value:</b> true"
|
397 |
+
msgstr "falsch <b>Standart-Einstellung</b> richtig"
|
398 |
+
|
399 |
+
#: admin/views/metaboxes/metabox-help.php:52
|
400 |
+
msgid "large <b>Default value:</b> \"\""
|
401 |
+
msgstr "groß <b>Standart-Wert:</b> \"\""
|
402 |
+
|
403 |
+
#: admin/views/metaboxes/metabox-help.php:55
|
404 |
+
msgid "Other available Shortcodes:"
|
405 |
+
msgstr "Weitere Shortcodes:"
|
406 |
+
|
407 |
+
#: admin/views/metaboxes/metabox-help.php:56
|
408 |
+
msgid "Close Button"
|
409 |
+
msgstr "Schließen-Schaltfläche"
|
410 |
+
|
411 |
+
#: admin/views/metaboxes/metabox-help.php:60
|
412 |
+
msgid "View Close shortcode Options"
|
413 |
+
msgstr "Zeige Shortcodes-Optionen zu: Schließen"
|
414 |
+
|
415 |
+
#: admin/views/metaboxes/metabox-help.php:62
|
416 |
+
msgid "Pass a custom class to style your button"
|
417 |
+
msgstr ""
|
418 |
+
"Bestimmen Sie eine benutzerdefinierte CSS-Klasse, zu Ihrer Schaltfläche"
|
419 |
+
|
420 |
+
#: admin/views/metaboxes/metabox-help.php:63
|
421 |
+
msgid "Button label - <b>Default value:</b> Close"
|
422 |
+
msgstr "Schaltflächentext - <b>Default-Wert:</b> Schließen"
|
423 |
+
|
424 |
+
#: admin/views/metaboxes/metabox-help.php:64
|
425 |
+
msgid "left, right, center, none - <b>Default value:</b> center"
|
426 |
+
msgstr "links, rechts, mittig, ohne - <b>Default-Wert:</b> mittig"
|
427 |
+
|
428 |
+
#: admin/views/metaboxes/metabox-links.php:6
|
429 |
+
msgid "My name is"
|
430 |
+
msgstr "Mein Name ist"
|
431 |
+
|
432 |
+
#: admin/views/metaboxes/metabox-links.php:6
|
433 |
+
msgid "I develop WordPress plugins and themes."
|
434 |
+
msgstr "Ich entwickle WordPress Plugins und Themes."
|
435 |
+
|
436 |
+
#: admin/views/metaboxes/metabox-links.php:7
|
437 |
+
#, php-format
|
438 |
+
msgid ""
|
439 |
+
"Take a look at my <a href=\"%s\">site</a> to see my other plugins or hire "
|
440 |
+
"me. Subscribe to get updates!"
|
441 |
+
msgstr ""
|
442 |
+
"Werfen Sie einen Blick auf meine <a href=\"%s\">Website</a>, um andere "
|
443 |
+
"Plugins von mir zu sehen oder mir direkt einen Kundenauftrag zu erteilen. "
|
444 |
+
"Abonnieren Sie meine Newsletter für Updates!"
|
445 |
+
|
446 |
+
#: admin/views/metaboxes/metabox-links.php:8
|
447 |
+
msgid "Other plugins I built:"
|
448 |
+
msgstr "Andere Plugins von mir:"
|
449 |
+
|
450 |
+
#: admin/views/metaboxes/metabox-links.php:10
|
451 |
+
msgid "Install multiple plugins and create collections"
|
452 |
+
msgstr "Mehrere Plugins installieren und Sammlungen erstellen"
|
453 |
+
|
454 |
+
#: admin/views/metaboxes/metabox-links.php:11
|
455 |
+
msgid "Geotarget your content"
|
456 |
+
msgstr "Geotarget Ihrer Inhalte"
|
457 |
+
|
458 |
+
#: admin/views/metaboxes/metabox-links.php:12
|
459 |
+
msgid "Invite your network friends and import contacts"
|
460 |
+
msgstr "Lade Freunde ein und importiere Kontakte"
|
461 |
+
|
462 |
+
#: admin/views/metaboxes/metabox-options.php:9
|
463 |
+
msgid "Box Position"
|
464 |
+
msgstr "Position der Box"
|
465 |
+
|
466 |
+
#: admin/views/metaboxes/metabox-options.php:12
|
467 |
+
msgid "Centered"
|
468 |
+
msgstr "Zentriert"
|
469 |
+
|
470 |
+
#: admin/views/metaboxes/metabox-options.php:13
|
471 |
+
msgid "Top Left"
|
472 |
+
msgstr "Oben links"
|
473 |
+
|
474 |
+
#: admin/views/metaboxes/metabox-options.php:14
|
475 |
+
msgid "Top Right"
|
476 |
+
msgstr "Oben rechts"
|
477 |
+
|
478 |
+
#: admin/views/metaboxes/metabox-options.php:15
|
479 |
+
msgid "Bottom Left"
|
480 |
+
msgstr "Unten links"
|
481 |
+
|
482 |
+
#: admin/views/metaboxes/metabox-options.php:16
|
483 |
+
msgid "Bottom Right"
|
484 |
+
msgstr "Unten rechts"
|
485 |
+
|
486 |
+
#: admin/views/metaboxes/metabox-options.php:23
|
487 |
+
msgid "Trigger action"
|
488 |
+
msgstr "Auslöseaktion"
|
489 |
+
|
490 |
+
#: admin/views/metaboxes/metabox-options.php:27
|
491 |
+
msgid "seconds after page load"
|
492 |
+
msgstr "Sekunden nach dem Laden der Seite"
|
493 |
+
|
494 |
+
#: admin/views/metaboxes/metabox-options.php:28
|
495 |
+
msgid "of page height"
|
496 |
+
msgstr "der Seitenhöhe"
|
497 |
+
|
498 |
+
#: admin/views/metaboxes/metabox-options.php:38
|
499 |
+
msgid "Auto-hide?"
|
500 |
+
msgstr "Automatisch ausblenden?"
|
501 |
+
|
502 |
+
#: admin/views/metaboxes/metabox-options.php:40
|
503 |
+
#: admin/views/metaboxes/metabox-options.php:68
|
504 |
+
#: admin/views/metaboxes/metabox-options.php:76
|
505 |
+
#: admin/views/metaboxes/metabox-options.php:84
|
506 |
+
msgid "Yes"
|
507 |
+
msgstr "Ja"
|
508 |
+
|
509 |
+
#: admin/views/metaboxes/metabox-options.php:41
|
510 |
+
#: admin/views/metaboxes/metabox-options.php:69
|
511 |
+
#: admin/views/metaboxes/metabox-options.php:77
|
512 |
+
#: admin/views/metaboxes/metabox-options.php:85
|
513 |
+
msgid "No"
|
514 |
+
msgstr "Nein"
|
515 |
+
|
516 |
+
#: admin/views/metaboxes/metabox-options.php:42
|
517 |
+
msgid "Hide box again when visitors scroll back up?"
|
518 |
+
msgstr ""
|
519 |
+
"Soll die Box wieder versteckt werden, wenn Besucher zurück nach oben "
|
520 |
+
"scrollen?"
|
521 |
+
|
522 |
+
#: admin/views/metaboxes/metabox-options.php:46
|
523 |
+
msgid "Animation"
|
524 |
+
msgstr "Animieren"
|
525 |
+
|
526 |
+
#: admin/views/metaboxes/metabox-options.php:49
|
527 |
+
msgid "Fade In"
|
528 |
+
msgstr "Einblenden"
|
529 |
+
|
530 |
+
#: admin/views/metaboxes/metabox-options.php:50
|
531 |
+
msgid "Slide In"
|
532 |
+
msgstr "Seitlich einfahren"
|
533 |
+
|
534 |
+
#: admin/views/metaboxes/metabox-options.php:53
|
535 |
+
msgid "Slide will only apply when popup is on the corners"
|
536 |
+
msgstr "Seitliches Einfahren nur: wenn das Popup in den Ecken platziert ist"
|
537 |
+
|
538 |
+
#: admin/views/metaboxes/metabox-options.php:58
|
539 |
+
msgid "Cookie expiration days"
|
540 |
+
msgstr "Cookie läuft aus in Tagen"
|
541 |
+
|
542 |
+
#: admin/views/metaboxes/metabox-options.php:61
|
543 |
+
msgid "After closing the box, how many days should it stay hidden?"
|
544 |
+
msgstr "Wie viele Tage sollte das Popup nach Schließen nicht angezeigt werden?"
|
545 |
+
|
546 |
+
#: admin/views/metaboxes/metabox-options.php:66
|
547 |
+
msgid "Enable test mode?"
|
548 |
+
msgstr "Testmodus aktivieren?"
|
549 |
+
|
550 |
+
#: admin/views/metaboxes/metabox-options.php:70
|
551 |
+
msgid ""
|
552 |
+
"If test mode is enabled, the box will show up regardless of whether a cookie "
|
553 |
+
"has been set. (To admins only)"
|
554 |
+
msgstr ""
|
555 |
+
"Wenn Test-Modus aktiviert ist, wird das Popup angezeigt. Unabhängig davon, "
|
556 |
+
"ob ein Cookie festgelegt wurde. (Nur für Admins)"
|
557 |
+
|
558 |
+
#: admin/views/metaboxes/metabox-options.php:74
|
559 |
+
msgid "Close on conversion?"
|
560 |
+
msgstr "Schließen nach Konvertierung?"
|
561 |
+
|
562 |
+
#: admin/views/metaboxes/metabox-options.php:78
|
563 |
+
msgid ""
|
564 |
+
"If you have a form or social shortcode, by default popup will close on "
|
565 |
+
"submission/conversion"
|
566 |
+
msgstr ""
|
567 |
+
"Wenn Sie ein Formular oder ein Shortcode für soziale Netzwerkehaben, wird "
|
568 |
+
"standardmäßig das Popup nach Anmeldung/Konversion geschlossen"
|
569 |
+
|
570 |
+
#: admin/views/metaboxes/metabox-options.php:82
|
571 |
+
msgid "Show powered by link?"
|
572 |
+
msgstr "Mit Unterstützung von Link anzeigen?"
|
573 |
+
|
574 |
+
#: admin/views/metaboxes/metabox-options.php:86
|
575 |
+
#, php-format
|
576 |
+
msgid ""
|
577 |
+
"Shows a \"powered by\" link below your popup. If your affiliate link is set "
|
578 |
+
"in the <a href=\"%s\">settings</a>, it will be used."
|
579 |
+
msgstr ""
|
580 |
+
"Zeigt einen \"powered by\" Link unten in Ihrem Popup. Wenn Ihr Affiliate-"
|
581 |
+
"Link in den <a href=\"%s\">Einstellungen</a> festgelegt ist, wird dieser "
|
582 |
+
"verwendet."
|
583 |
+
|
584 |
+
#: admin/views/metaboxes/metabox-premium.php:16
|
585 |
+
msgid ""
|
586 |
+
"Take the best WordPress Popups plugin to the next level with Popups Premium "
|
587 |
+
"extension."
|
588 |
+
msgstr ""
|
589 |
+
"Bringen Sie das beste WordPress Popups-Plugin auf den nächsten Level mit der "
|
590 |
+
"Popups Premium-Erweiterung."
|
591 |
+
|
592 |
+
#: admin/views/metaboxes/metabox-premium.php:17
|
593 |
+
msgid "Popups Premium Features:"
|
594 |
+
msgstr "Popups Premium Features:"
|
595 |
+
|
596 |
+
#: admin/views/metaboxes/metabox-premium.php:19
|
597 |
+
msgid "Beautiful optin forms for popular mail providers"
|
598 |
+
msgstr "Schöne Opt-In Formulare für die bekanntesten E-Mail-Anbieter"
|
599 |
+
|
600 |
+
#: admin/views/metaboxes/metabox-premium.php:20
|
601 |
+
msgid "Currently supporting MailChimp, Aweber, Postmatic, Mailpoet"
|
602 |
+
msgstr "Aktuell unterstützt: MailChimp, Aweber, Postmatic, Mailpoet"
|
603 |
+
|
604 |
+
#: admin/views/metaboxes/metabox-premium.php:21
|
605 |
+
msgid ""
|
606 |
+
"Track impressions and Conversions of social likes and forms submissions like "
|
607 |
+
"Contact Form 7, Gravity forms, etc"
|
608 |
+
msgstr ""
|
609 |
+
"Verfolge Impressionen und Konversionen von sozialen Likes und "
|
610 |
+
"Formularübermittlungen wie: Contact Form 7, Gravity forms, etc."
|
611 |
+
|
612 |
+
#: admin/views/metaboxes/metabox-premium.php:22
|
613 |
+
msgid "Track impressions and Conversions also in Google Analytics"
|
614 |
+
msgstr "Verfolge Impressionen und Conversions auch in Google Analytics"
|
615 |
+
|
616 |
+
#: admin/views/metaboxes/metabox-premium.php:23
|
617 |
+
#: admin/views/metaboxes/metabox-premium.php:25
|
618 |
+
msgid "Exit Intent technology"
|
619 |
+
msgstr "\"Beim Verlassen der Seite\" Technologie"
|
620 |
+
|
621 |
+
#: admin/views/metaboxes/metabox-premium.php:24
|
622 |
+
msgid "8 New animations effects"
|
623 |
+
msgstr "8 neue Animationen"
|
624 |
+
|
625 |
+
#: admin/views/metaboxes/metabox-premium.php:26
|
626 |
+
msgid "New trigger methods"
|
627 |
+
msgstr "Neue Trigger-Methoden"
|
628 |
+
|
629 |
+
#: admin/views/metaboxes/metabox-premium.php:27
|
630 |
+
msgid "Timer for auto closing"
|
631 |
+
msgstr "Timer für automatische Schließung"
|
632 |
+
|
633 |
+
#: admin/views/metaboxes/metabox-premium.php:28
|
634 |
+
msgid "Ability to disable close button"
|
635 |
+
msgstr "Möglichkeit zum Deaktivieren der Schaltfläche \"schließen\""
|
636 |
+
|
637 |
+
#: admin/views/metaboxes/metabox-premium.php:29
|
638 |
+
msgid ""
|
639 |
+
"Ability to disable Advanced close methods like esc or clicking outside of "
|
640 |
+
"the popup"
|
641 |
+
msgstr ""
|
642 |
+
"Möglichkeit, fortschrittliche \"Schließen\" Methoden wie ESC oder Klicken "
|
643 |
+
"außerhalb des Popups zu deaktivieren"
|
644 |
+
|
645 |
+
#: admin/views/metaboxes/metabox-premium.php:30
|
646 |
+
msgid "Premium support"
|
647 |
+
msgstr "Premium-Support"
|
648 |
+
|
649 |
+
#: admin/views/metaboxes/metabox-premium.php:34
|
650 |
+
msgid "Buy Now!"
|
651 |
+
msgstr "Sofort Kaufen!"
|
652 |
+
|
653 |
+
#: admin/views/metaboxes/metabox-rules.php:19
|
654 |
+
msgid "Rules"
|
655 |
+
msgstr "Regeln"
|
656 |
+
|
657 |
+
#: admin/views/metaboxes/metabox-rules.php:20
|
658 |
+
msgid "Create a set of rules to determine where the popup will show"
|
659 |
+
msgstr ""
|
660 |
+
"Erstellen Sie einen Satz von Regeln, um festzustellen, wo das Popup "
|
661 |
+
"angezeigt wird"
|
662 |
+
|
663 |
+
#: admin/views/metaboxes/metabox-rules.php:31
|
664 |
+
msgid "Show this popup if"
|
665 |
+
msgstr "Zeigen Sie dieses Popup wenn"
|
666 |
+
|
667 |
+
#: admin/views/metaboxes/metabox-rules.php:61
|
668 |
+
msgid "is equal to"
|
669 |
+
msgstr "ist gleich"
|
670 |
+
|
671 |
+
#: admin/views/metaboxes/metabox-rules.php:62
|
672 |
+
msgid "is not equal to"
|
673 |
+
msgstr "ist nicht gleich"
|
674 |
+
|
675 |
+
#: admin/views/metaboxes/metabox-rules.php:93
|
676 |
+
msgid "and"
|
677 |
+
msgstr "und"
|
678 |
+
|
679 |
+
#: admin/views/metaboxes/metabox-rules.php:108
|
680 |
+
msgid "Add rule group"
|
681 |
+
msgstr "Regelgruppe hinzufügen"
|
682 |
+
|
683 |
+
#: admin/views/metaboxes/metabox-support.php:6
|
684 |
+
#, php-format
|
685 |
+
msgid "You are using Popups plugin v%s"
|
686 |
+
msgstr "Sie verwenden Popups Plugin v%s"
|
687 |
+
|
688 |
+
#: admin/views/metaboxes/metabox-support.php:7
|
689 |
+
#, php-format
|
690 |
+
msgid ""
|
691 |
+
"If you need support please go to the WordPress.org <a href=\"%s\">support "
|
692 |
+
"forums</a>"
|
693 |
+
msgstr ""
|
694 |
+
"Wenn Sie Unterstützung benötigen, gehen Sie bitte auf WordPress.org <a href="
|
695 |
+
"\"%s\">Support-Foren</a>"
|
696 |
+
|
697 |
+
#: admin/views/settings-page.php:17
|
698 |
+
msgid "Affiliate link"
|
699 |
+
msgstr "Affiliate Link"
|
700 |
+
|
701 |
+
#: admin/views/settings-page.php:20
|
702 |
+
#, php-format
|
703 |
+
msgid ""
|
704 |
+
"You can earn money by promoting the plugin! Join <a href=\"%s\">our "
|
705 |
+
"affiliate program</a> and paste your affiliate link here to earn 35% in "
|
706 |
+
"commissions . Once entered, it will replace the default \"Powered by\" on "
|
707 |
+
"the popups."
|
708 |
+
msgstr ""
|
709 |
+
"Sie können Geld verdienen durch Promotion des Plugin! Treten Sie <a href=\"%s"
|
710 |
+
"\">unserem Affiliate-Programm</a> bei und fügen Sie Ihren Affiliate-Link "
|
711 |
+
"hier ein, um 35% an Provisionen zu verdienen. Einmal eingegeben, und der "
|
712 |
+
"Standardwert \"Powered by\" wird mit Ihrem Link in den Popups ersetzt."
|
713 |
+
|
714 |
+
#: admin/views/settings-page.php:24
|
715 |
+
msgid "Ajax mode?"
|
716 |
+
msgstr "Ajax-Modus?"
|
717 |
+
|
718 |
+
#: admin/views/settings-page.php:27
|
719 |
+
msgid ""
|
720 |
+
"Load popups using ajax. Compatible with cache plugins, but might not work "
|
721 |
+
"with all plugins"
|
722 |
+
msgstr ""
|
723 |
+
"Laden Sie Popups mit Ajax. Kompatibel mit Cache-Plugins, aber funktioniert "
|
724 |
+
"möglicherweise nicht mit allen Plugins"
|
725 |
+
|
726 |
+
#: admin/views/settings-page.php:32
|
727 |
+
msgid "Enable Debug mode?"
|
728 |
+
msgstr "Fehlersuche aktivieren?"
|
729 |
+
|
730 |
+
#: admin/views/settings-page.php:35
|
731 |
+
msgid "Will use uncompressed js"
|
732 |
+
msgstr "Unkomprimierte Js verwenden"
|
733 |
+
|
734 |
+
#: admin/views/settings-page.php:40
|
735 |
+
msgid "Enable safe mode?"
|
736 |
+
msgstr "Aktivieren abgesicherter Modus?"
|
737 |
+
|
738 |
+
#: admin/views/settings-page.php:43
|
739 |
+
msgid "Will move all popups to top of the screen."
|
740 |
+
msgstr "Alle Popups wird zum oberen Rand des Bildschirms verschoben werden."
|
741 |
+
|
742 |
+
#: admin/views/settings-page.php:48
|
743 |
+
msgid "Remove shortcodes style"
|
744 |
+
msgstr "Shortcodes Stil entfernen"
|
745 |
+
|
746 |
+
#: admin/views/settings-page.php:51
|
747 |
+
msgid ""
|
748 |
+
"By default the plugin will apply some style to shortcodes. Check here if you "
|
749 |
+
"want to manually style them"
|
750 |
+
msgstr ""
|
751 |
+
"Standardmäßig wird das Plugin eigene Stil-Shortcodes zuweisen. Aktivieren, "
|
752 |
+
"wenn Sie Stile manuell erzeugen wollen"
|
753 |
+
|
754 |
+
#: admin/views/settings-page.php:56
|
755 |
+
msgid "Unload Facebook javascript"
|
756 |
+
msgstr "Facebook Javascript nicht laden"
|
757 |
+
|
758 |
+
#: admin/views/settings-page.php:59
|
759 |
+
msgid "If you use your own Facebook script, check this"
|
760 |
+
msgstr ""
|
761 |
+
"Wenn Sie Ihr eigenes Facebook-Skript verwenden, aktivieren Sie dies hier"
|
762 |
+
|
763 |
+
#: admin/views/settings-page.php:64
|
764 |
+
msgid "Unload Google javascript"
|
765 |
+
msgstr "Google Javascript nicht laden"
|
766 |
+
|
767 |
+
#: admin/views/settings-page.php:67
|
768 |
+
msgid "If you use your own Google script, check this"
|
769 |
+
msgstr "Wenn Sie Ihre eigenes Google-Skript verwenden, aktivieren Sie dies"
|
770 |
+
|
771 |
+
#: admin/views/settings-page.php:72
|
772 |
+
msgid "Unload Twitter javascript"
|
773 |
+
msgstr "Twitter-Javascript nicht laden"
|
774 |
+
|
775 |
+
#: admin/views/settings-page.php:75
|
776 |
+
msgid "If you use your own Twitter script, check this"
|
777 |
+
msgstr ""
|
778 |
+
"Wenn Sie Ihr eigenes Twitter-Skript verwenden, aktivieren Sie dies hier"
|
779 |
+
|
780 |
+
#: admin/views/settings-page.php:82
|
781 |
+
msgid "Delete all data on Uninstall"
|
782 |
+
msgstr "Alle Daten bei der Deinstallation löschen"
|
783 |
+
|
784 |
+
#: admin/views/settings-page.php:85
|
785 |
+
msgid ""
|
786 |
+
"When you uninstall the plugin all popups, settings and stats will be deleted "
|
787 |
+
"from your db"
|
788 |
+
msgstr ""
|
789 |
+
"Wenn Sie das Plugin deinstallieren werden alle Popups, Einstellungen und "
|
790 |
+
"Statistiken aus der Datenbank gelöscht"
|
791 |
+
|
792 |
+
#: admin/views/settings-page.php:89
|
793 |
+
msgid "Save settings"
|
794 |
+
msgstr "Einstellungen speichern"
|
795 |
+
|
796 |
+
#: includes/class-spu-helper.php:131
|
797 |
+
msgid "All Pages"
|
798 |
+
msgstr "Alle Seiten"
|
799 |
+
|
800 |
+
#: includes/class-spu-helper.php:132
|
801 |
+
msgid "Front Page"
|
802 |
+
msgstr "Startseite"
|
803 |
+
|
804 |
+
#: includes/class-spu-helper.php:133
|
805 |
+
msgid "Posts Page"
|
806 |
+
msgstr "Beiträge Seite"
|
807 |
+
|
808 |
+
#: includes/class-spu-helper.php:134
|
809 |
+
msgid "Category Page"
|
810 |
+
msgstr "Kategorie Seite"
|
811 |
+
|
812 |
+
#: includes/class-spu-helper.php:135
|
813 |
+
msgid "Search Page"
|
814 |
+
msgstr "Suche-Seite"
|
815 |
+
|
816 |
+
#: includes/class-spu-helper.php:136
|
817 |
+
msgid "Archives Page"
|
818 |
+
msgstr "Archivseite"
|
819 |
+
|
820 |
+
#: includes/class-spu-helper.php:137
|
821 |
+
msgid "Top Level Page (parent of 0)"
|
822 |
+
msgstr "Hauptseite (nicht übergeordnet)"
|
823 |
+
|
824 |
+
#: includes/class-spu-helper.php:138
|
825 |
+
msgid "Parent Page (has children)"
|
826 |
+
msgstr "Eltern-Seite (mit Kind-Seiten darunter)"
|
827 |
+
|
828 |
+
#: includes/class-spu-helper.php:139
|
829 |
+
msgid "Child Page (has parent)"
|
830 |
+
msgstr "Kind-Seite (hat Eltern)"
|
831 |
+
|
832 |
+
#: includes/class-spu-helper.php:147
|
833 |
+
msgid "Default Template"
|
834 |
+
msgstr "Standardvorlage"
|
835 |
+
|
836 |
+
#: includes/class-spu-helper.php:220
|
837 |
+
msgid "Publish"
|
838 |
+
msgstr "Veröffentlichen"
|
839 |
+
|
840 |
+
#: includes/class-spu-helper.php:221
|
841 |
+
msgid "Pending Review"
|
842 |
+
msgstr "Ausstehende Bewertung"
|
843 |
+
|
844 |
+
#: includes/class-spu-helper.php:222
|
845 |
+
msgid "Draft"
|
846 |
+
msgstr "Entwurf"
|
847 |
+
|
848 |
+
#: includes/class-spu-helper.php:223
|
849 |
+
msgid "Future"
|
850 |
+
msgstr "Zukunft"
|
851 |
+
|
852 |
+
#: includes/class-spu-helper.php:224
|
853 |
+
msgid "Private"
|
854 |
+
msgstr "Privat"
|
855 |
+
|
856 |
+
#: includes/class-spu-helper.php:225
|
857 |
+
msgid "Revision"
|
858 |
+
msgstr "Revision"
|
859 |
+
|
860 |
+
#: includes/class-spu-helper.php:226
|
861 |
+
msgid "Trash"
|
862 |
+
msgstr "Papierkorb"
|
863 |
+
|
864 |
+
#: includes/class-spu-helper.php:239
|
865 |
+
msgid "Super Admin"
|
866 |
+
msgstr "Super Administrator"
|
867 |
+
|
868 |
+
#: includes/class-spu-helper.php:259
|
869 |
+
msgid "True"
|
870 |
+
msgstr "Richtig"
|
languages/popups-es_ES.po
CHANGED
@@ -1,814 +1,814 @@
|
|
1 |
-
# Copyright (C) 2013 TODO
|
2 |
-
# This file is distributed under the same license as the TODO package.
|
3 |
-
msgid ""
|
4 |
-
msgstr ""
|
5 |
-
"Project-Id-Version: Popups\n"
|
6 |
-
"Report-Msgid-Bugs-To: http://wordpress.org/plugins/plugin-name\n"
|
7 |
-
"POT-Creation-Date: 2015-06-14 00:02-0300\n"
|
8 |
-
"PO-Revision-Date: 2015-10-01 15:15-0300\n"
|
9 |
-
"Last-Translator: Damian Logghe <info@timersys.com>\n"
|
10 |
-
"Language-Team: Timersys <info@timersys.com>\n"
|
11 |
-
"Language: es_ES\n"
|
12 |
-
"MIME-Version: 1.0\n"
|
13 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
-
"Content-Transfer-Encoding: 8bit\n"
|
15 |
-
"X-Generator: Poedit 1.7.4\n"
|
16 |
-
"X-Poedit-KeywordsList: __;_e;_n;_x;esc_html_e;esc_html__;esc_attr_e;"
|
17 |
-
"esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2\n"
|
18 |
-
"X-Poedit-Basepath: ../\n"
|
19 |
-
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
20 |
-
"X-Poedit-SearchPath-0: .\n"
|
21 |
-
|
22 |
-
#: admin/class-social-popup-admin.php:154
|
23 |
-
msgctxt "post type singular name"
|
24 |
-
msgid "Popups"
|
25 |
-
msgstr "Popups [postear nombre singular del tipo]"
|
26 |
-
|
27 |
-
#: admin/class-social-popup-admin.php:155
|
28 |
-
msgctxt "admin menu"
|
29 |
-
msgid "Popups"
|
30 |
-
msgstr "Popups [menú del admin]"
|
31 |
-
|
32 |
-
#: admin/class-social-popup-admin.php:156
|
33 |
-
msgctxt "add new on admin bar"
|
34 |
-
msgid "Popups"
|
35 |
-
msgstr "Popups [adicionar nuevo en la barra de admin]"
|
36 |
-
|
37 |
-
#: admin/class-social-popup-admin.php:157
|
38 |
-
msgctxt "Popups"
|
39 |
-
msgid "Add New"
|
40 |
-
msgstr "Adicionar nuevo [Popups]"
|
41 |
-
|
42 |
-
#: admin/class-social-popup-admin.php:158
|
43 |
-
msgid "Add New Popups"
|
44 |
-
msgstr "Adicionar Nuevo Popups"
|
45 |
-
|
46 |
-
#: admin/class-social-popup-admin.php:159
|
47 |
-
msgid "New Popups"
|
48 |
-
msgstr "Nuevo Popups"
|
49 |
-
|
50 |
-
#: admin/class-social-popup-admin.php:160
|
51 |
-
msgid "Edit Popups"
|
52 |
-
msgstr "Editar Popups"
|
53 |
-
|
54 |
-
#: admin/class-social-popup-admin.php:161
|
55 |
-
msgid "View Popups"
|
56 |
-
msgstr "Ver Popups"
|
57 |
-
|
58 |
-
#: admin/class-social-popup-admin.php:162
|
59 |
-
msgid "All Popups"
|
60 |
-
msgstr "Todos los Popups"
|
61 |
-
|
62 |
-
#: admin/class-social-popup-admin.php:163
|
63 |
-
msgid "Search Popups"
|
64 |
-
msgstr "Buscar Popups"
|
65 |
-
|
66 |
-
#: admin/class-social-popup-admin.php:164
|
67 |
-
msgid "Parent Popups:"
|
68 |
-
msgstr "Popups Padre:"
|
69 |
-
|
70 |
-
#: admin/class-social-popup-admin.php:165
|
71 |
-
msgid "No Popups found."
|
72 |
-
msgstr "No se encontraron Popups."
|
73 |
-
|
74 |
-
#: admin/class-social-popup-admin.php:166
|
75 |
-
msgid "No Popups found in Trash."
|
76 |
-
msgstr "No se encontraron Popups en la Papelera."
|
77 |
-
|
78 |
-
#: admin/class-social-popup-admin.php:255
|
79 |
-
msgid "Popups Premium"
|
80 |
-
msgstr "Popups Premium"
|
81 |
-
|
82 |
-
#: admin/class-social-popup-admin.php:266
|
83 |
-
msgid "PopUp Shortcodes"
|
84 |
-
msgstr "Códigos Cortos del PopUp"
|
85 |
-
|
86 |
-
#: admin/class-social-popup-admin.php:275
|
87 |
-
msgid "PopUp Display Rules"
|
88 |
-
msgstr "Reglas de Visualización del PopUp"
|
89 |
-
|
90 |
-
#: admin/class-social-popup-admin.php:284
|
91 |
-
msgid "Display Options"
|
92 |
-
msgstr "Opciones de Visualización"
|
93 |
-
|
94 |
-
#: admin/class-social-popup-admin.php:293
|
95 |
-
msgid "Need support?"
|
96 |
-
msgstr "¿Necesita soporte?"
|
97 |
-
|
98 |
-
#: admin/class-social-popup-admin.php:301
|
99 |
-
msgid "Donate & support"
|
100 |
-
msgstr "Donar y soporte"
|
101 |
-
|
102 |
-
#: admin/class-social-popup-admin.php:309
|
103 |
-
msgid "About the developer"
|
104 |
-
msgstr "Acerca del desarrollador"
|
105 |
-
|
106 |
-
#: admin/class-social-popup-admin.php:557
|
107 |
-
#: admin/views/metaboxes/metabox-rules.php:33
|
108 |
-
#: admin/views/metaboxes/metabox-rules.php:106
|
109 |
-
msgid "or"
|
110 |
-
msgstr "o"
|
111 |
-
|
112 |
-
#: admin/class-social-popup-admin.php:584
|
113 |
-
msgid "Add a Popup"
|
114 |
-
msgstr "Adicionar un Popup"
|
115 |
-
|
116 |
-
#: admin/class-social-popup-admin.php:708
|
117 |
-
msgid "User"
|
118 |
-
msgstr "Usuario"
|
119 |
-
|
120 |
-
#: admin/class-social-popup-admin.php:709
|
121 |
-
msgid "User role"
|
122 |
-
msgstr "Rol de Usuario"
|
123 |
-
|
124 |
-
#: admin/class-social-popup-admin.php:710
|
125 |
-
msgid "User is logged"
|
126 |
-
msgstr "El usuario está autenticado"
|
127 |
-
|
128 |
-
#: admin/class-social-popup-admin.php:711
|
129 |
-
msgid "User never left a comment"
|
130 |
-
msgstr "El usuario nunca dejó un comentario"
|
131 |
-
|
132 |
-
#: admin/class-social-popup-admin.php:712
|
133 |
-
msgid "User came via a search engine"
|
134 |
-
msgstr "El usuario vino via un motor de búsqueda"
|
135 |
-
|
136 |
-
#: admin/class-social-popup-admin.php:713
|
137 |
-
msgid "User did not arrive via another page on your site"
|
138 |
-
msgstr "El usuario no llegó via ninguna otra página de su sitio"
|
139 |
-
|
140 |
-
#: admin/class-social-popup-admin.php:715
|
141 |
-
#: admin/class-social-popup-admin.php:716
|
142 |
-
msgid "Post"
|
143 |
-
msgstr "Post"
|
144 |
-
|
145 |
-
#: admin/class-social-popup-admin.php:717
|
146 |
-
msgid "Post ID"
|
147 |
-
msgstr "ID del Post"
|
148 |
-
|
149 |
-
#: admin/class-social-popup-admin.php:718
|
150 |
-
msgid "Post Type"
|
151 |
-
msgstr "Tipo del Post"
|
152 |
-
|
153 |
-
#: admin/class-social-popup-admin.php:719
|
154 |
-
msgid "Post Category"
|
155 |
-
msgstr "Categoría del Post"
|
156 |
-
|
157 |
-
#: admin/class-social-popup-admin.php:720
|
158 |
-
msgid "Post Format"
|
159 |
-
msgstr "Formato del Post"
|
160 |
-
|
161 |
-
#: admin/class-social-popup-admin.php:721
|
162 |
-
msgid "Post Status"
|
163 |
-
msgstr "Estado del Post"
|
164 |
-
|
165 |
-
#: admin/class-social-popup-admin.php:722
|
166 |
-
msgid "Post Taxonomy"
|
167 |
-
msgstr "Taxonomía del Post"
|
168 |
-
|
169 |
-
#: admin/class-social-popup-admin.php:724
|
170 |
-
#: admin/class-social-popup-admin.php:725
|
171 |
-
msgid "Page"
|
172 |
-
msgstr "Página"
|
173 |
-
|
174 |
-
#: admin/class-social-popup-admin.php:726
|
175 |
-
msgid "Page Type"
|
176 |
-
msgstr "Tipo de Página"
|
177 |
-
|
178 |
-
#: admin/class-social-popup-admin.php:727
|
179 |
-
msgid "Page Parent"
|
180 |
-
msgstr "Padre de la Página"
|
181 |
-
|
182 |
-
#: admin/class-social-popup-admin.php:728
|
183 |
-
msgid "Page Template"
|
184 |
-
msgstr "Plantilla de la Página"
|
185 |
-
|
186 |
-
#: admin/class-social-popup-admin.php:730
|
187 |
-
msgid "Other"
|
188 |
-
msgstr "Otro"
|
189 |
-
|
190 |
-
#: admin/class-social-popup-admin.php:731
|
191 |
-
msgid "Referrer"
|
192 |
-
msgstr "Remitente"
|
193 |
-
|
194 |
-
#: admin/class-social-popup-admin.php:732
|
195 |
-
msgid "Mobile Phone"
|
196 |
-
msgstr "Teléfono Móvil"
|
197 |
-
|
198 |
-
#: admin/class-social-popup-admin.php:733
|
199 |
-
msgid "Tablet"
|
200 |
-
msgstr "Tablet"
|
201 |
-
|
202 |
-
#: admin/includes/class-spu-notices.php:30
|
203 |
-
#, php-format
|
204 |
-
msgid ""
|
205 |
-
"We noticed that you have been using our plugin for a while and we would like "
|
206 |
-
"to ask you a little favour. If you are happy with it and can take a minute "
|
207 |
-
"please <a href=\"%s\" target=\"_blank\">leave a nice review</a> on "
|
208 |
-
"WordPress. It will be a tremendous help for us!"
|
209 |
-
msgstr ""
|
210 |
-
|
211 |
-
#: admin/includes/class-spu-notices.php:32
|
212 |
-
#, php-format
|
213 |
-
msgid "<a href=\"%s\" target=\"_blank\">Leave a nice review</a>"
|
214 |
-
msgstr ""
|
215 |
-
|
216 |
-
#: admin/includes/class-spu-notices.php:33
|
217 |
-
#, php-format
|
218 |
-
msgid "<a href=\"%s\">No, thanks</a>"
|
219 |
-
msgstr ""
|
220 |
-
|
221 |
-
#: admin/views/metaboxes/metabox-donate.php:6
|
222 |
-
msgid "If you like this plugin, consider supporting it by donating."
|
223 |
-
msgstr "Si le gusta este plugin, considere soportarlo donando."
|
224 |
-
|
225 |
-
#: admin/views/metaboxes/metabox-donate.php:8
|
226 |
-
msgid "Donate with PayPal"
|
227 |
-
msgstr "Donar con PayPal"
|
228 |
-
|
229 |
-
#: admin/views/metaboxes/metabox-donate.php:10
|
230 |
-
msgid "Some other ways to support this plugin"
|
231 |
-
msgstr "Otras formas de soportar este plugin"
|
232 |
-
|
233 |
-
#: admin/views/metaboxes/metabox-donate.php:12
|
234 |
-
msgid "Leave a ★★★★★ review on WordPress.org"
|
235 |
-
msgstr ""
|
236 |
-
"Deje un ★★★★★ comentario en WordPress.org"
|
237 |
-
|
238 |
-
#: admin/views/metaboxes/metabox-donate.php:13
|
239 |
-
msgid "Write about Popups on your blog"
|
240 |
-
msgstr "Escriba acerca de Popups en su blog"
|
241 |
-
|
242 |
-
#: admin/views/metaboxes/metabox-donate.php:14
|
243 |
-
msgid "Tweet about Popups"
|
244 |
-
msgstr "Haga tweet acerca de Popups"
|
245 |
-
|
246 |
-
#: admin/views/metaboxes/metabox-donate.php:15
|
247 |
-
msgid "Vote \"works\" on the WordPress.org plugin page"
|
248 |
-
msgstr "Vote \"funciona\" en la página del plugin de WordPress.org"
|
249 |
-
|
250 |
-
#: admin/views/metaboxes/metabox-help.php:6
|
251 |
-
msgid ""
|
252 |
-
"You have three social shortcodes to use that will print a Facebook like, a "
|
253 |
-
"Google+ Follow and a Twitter follow. Check the available options and "
|
254 |
-
"<strong>configure them with your social accounts</strong>:"
|
255 |
-
msgstr ""
|
256 |
-
"Tiene tres códigos cortos sociales para usar que mostrarán un me gusta de "
|
257 |
-
"Facebook, un seguir de Google+ y un seguir de Twitter. Chequee las opciones "
|
258 |
-
"de disponibilidad y <strong>configúrelas con sus cuentas sociales</strong>:"
|
259 |
-
|
260 |
-
#: admin/views/metaboxes/metabox-help.php:12
|
261 |
-
msgid "View Facebook Page Options"
|
262 |
-
msgstr ""
|
263 |
-
|
264 |
-
#: admin/views/metaboxes/metabox-help.php:14
|
265 |
-
#: admin/views/metaboxes/metabox-help.php:27
|
266 |
-
msgid "Your facebook page url"
|
267 |
-
msgstr "La url de su página de Facebook"
|
268 |
-
|
269 |
-
#: admin/views/metaboxes/metabox-help.php:15
|
270 |
-
msgid "Your page name"
|
271 |
-
msgstr ""
|
272 |
-
|
273 |
-
#: admin/views/metaboxes/metabox-help.php:16
|
274 |
-
msgid "true|false <b>Default value:</b> true"
|
275 |
-
msgstr ""
|
276 |
-
|
277 |
-
#: admin/views/metaboxes/metabox-help.php:17
|
278 |
-
msgid "true|false <b>Default value:</b> false"
|
279 |
-
msgstr ""
|
280 |
-
|
281 |
-
#: admin/views/metaboxes/metabox-help.php:25
|
282 |
-
msgid "View Facebook Options"
|
283 |
-
msgstr "Ver Opciones de Facebook"
|
284 |
-
|
285 |
-
#: admin/views/metaboxes/metabox-help.php:28
|
286 |
-
msgid "standard, box_count, button <b>Default value:</b> button_count"
|
287 |
-
msgstr "standard, box_count, button <b> Valor por defecto:</b> button_count"
|
288 |
-
|
289 |
-
#: admin/views/metaboxes/metabox-help.php:29
|
290 |
-
#: admin/views/metaboxes/metabox-help.php:30
|
291 |
-
msgid "true <b>Default value:</b> false"
|
292 |
-
msgstr "true <b>Valor por defecto:</b> false"
|
293 |
-
|
294 |
-
#: admin/views/metaboxes/metabox-help.php:31
|
295 |
-
msgid "recommend <b>Default value:</b> like"
|
296 |
-
msgstr "recommend <b>Valor por defecto:</b> like"
|
297 |
-
|
298 |
-
#: admin/views/metaboxes/metabox-help.php:38
|
299 |
-
msgid "View Google+ Options"
|
300 |
-
msgstr "Ver Opciones de Google+"
|
301 |
-
|
302 |
-
#: admin/views/metaboxes/metabox-help.php:40
|
303 |
-
msgid "Your Google+ url"
|
304 |
-
msgstr "Su url de Google+"
|
305 |
-
|
306 |
-
#: admin/views/metaboxes/metabox-help.php:41
|
307 |
-
msgid "small, standard, tall <b>Default value:</b> medium"
|
308 |
-
msgstr "small, standard, tall <b>Valor por defecto:</b> medium"
|
309 |
-
|
310 |
-
#: admin/views/metaboxes/metabox-help.php:42
|
311 |
-
msgid "inline, none <b>Default value:</b> bubble"
|
312 |
-
msgstr "inline, none <b>Valor por defecto:</b> bubble"
|
313 |
-
|
314 |
-
#: admin/views/metaboxes/metabox-help.php:48
|
315 |
-
msgid "View Twitter Options"
|
316 |
-
msgstr "Ver Opciones de Twitter"
|
317 |
-
|
318 |
-
#: admin/views/metaboxes/metabox-help.php:50
|
319 |
-
msgid "Your Twitter user <b>Default chifli</b>iiii"
|
320 |
-
msgstr "Su <b>chifli</b>iiii Por Defecto de su usuario de Twitter "
|
321 |
-
|
322 |
-
#: admin/views/metaboxes/metabox-help.php:51
|
323 |
-
msgid "false <b>Default value:</b> true"
|
324 |
-
msgstr "false <b>Valor por defecto:</b> true"
|
325 |
-
|
326 |
-
#: admin/views/metaboxes/metabox-help.php:52
|
327 |
-
msgid "large <b>Default value:</b> \"\""
|
328 |
-
msgstr "large <b>Valor por defecto:</b> \"\""
|
329 |
-
|
330 |
-
#: admin/views/metaboxes/metabox-help.php:55
|
331 |
-
msgid "Other available Shortcodes:"
|
332 |
-
msgstr "Otros Códigos Cortos disponibles:"
|
333 |
-
|
334 |
-
#: admin/views/metaboxes/metabox-help.php:60
|
335 |
-
msgid "View Close shortcode Options"
|
336 |
-
msgstr "Ver Opciones Cerradas de códigos cortos "
|
337 |
-
|
338 |
-
#: admin/views/metaboxes/metabox-help.php:62
|
339 |
-
msgid "Pass a custom class to style your button"
|
340 |
-
msgstr "Pasar una clase personalizada para darle estilo a su botón"
|
341 |
-
|
342 |
-
#: admin/views/metaboxes/metabox-help.php:63
|
343 |
-
msgid "Button label - <b>Default value:</b> Close"
|
344 |
-
msgstr "Button label - <b>Valor por defecto:</b> Close"
|
345 |
-
|
346 |
-
#: admin/views/metaboxes/metabox-help.php:64
|
347 |
-
msgid "left, right, center, none - <b>Default value:</b> center"
|
348 |
-
msgstr "left, right, center, none - <b>Valor por defecto:</b> center"
|
349 |
-
|
350 |
-
#: admin/views/metaboxes/metabox-links.php:6
|
351 |
-
msgid "My name is"
|
352 |
-
msgstr "Mi nombre es"
|
353 |
-
|
354 |
-
#: admin/views/metaboxes/metabox-links.php:6
|
355 |
-
msgid "I develop WordPress plugins and themes."
|
356 |
-
msgstr "Yo desarrollo plugins y temas de WordPress."
|
357 |
-
|
358 |
-
#: admin/views/metaboxes/metabox-links.php:7
|
359 |
-
#, php-format
|
360 |
-
msgid ""
|
361 |
-
"Take a look at my <a href=\"%s\">site</a> to see my other plugins or hire "
|
362 |
-
"me. Subscribe to get updates!"
|
363 |
-
msgstr ""
|
364 |
-
"Eche una ojeada a mi <a href=\"%s\">sitio</a> para ver mis otros plugins o "
|
365 |
-
"contratarme. ¡Suscríbase para obtener actualizaciones!"
|
366 |
-
|
367 |
-
#: admin/views/metaboxes/metabox-links.php:8
|
368 |
-
msgid "Other plugins I built:"
|
369 |
-
msgstr "Otros plugins que hago:"
|
370 |
-
|
371 |
-
#: admin/views/metaboxes/metabox-links.php:10
|
372 |
-
msgid "Install multiple plugins and create collections"
|
373 |
-
msgstr "Instalar múltiples plugins y crear colecciones"
|
374 |
-
|
375 |
-
#: admin/views/metaboxes/metabox-links.php:11
|
376 |
-
msgid "Geotarget your content"
|
377 |
-
msgstr ""
|
378 |
-
|
379 |
-
#: admin/views/metaboxes/metabox-links.php:12
|
380 |
-
msgid "Invite your network friends and import contacts"
|
381 |
-
msgstr "Invitar a sus amigos de la red e importar contactos"
|
382 |
-
|
383 |
-
#: admin/views/metaboxes/metabox-options.php:9
|
384 |
-
msgid "Box Position"
|
385 |
-
msgstr "Posición de la Caja"
|
386 |
-
|
387 |
-
#: admin/views/metaboxes/metabox-options.php:12
|
388 |
-
msgid "Centered"
|
389 |
-
msgstr "Centrada"
|
390 |
-
|
391 |
-
#: admin/views/metaboxes/metabox-options.php:13
|
392 |
-
msgid "Top Left"
|
393 |
-
msgstr "Arriba a la Izquierda"
|
394 |
-
|
395 |
-
#: admin/views/metaboxes/metabox-options.php:14
|
396 |
-
msgid "Top Right"
|
397 |
-
msgstr "Arriba a la Derecha"
|
398 |
-
|
399 |
-
#: admin/views/metaboxes/metabox-options.php:15
|
400 |
-
msgid "Bottom Left"
|
401 |
-
msgstr "Debajo a la Izquierda"
|
402 |
-
|
403 |
-
#: admin/views/metaboxes/metabox-options.php:16
|
404 |
-
msgid "Bottom Right"
|
405 |
-
msgstr "Debajo a la Derecha"
|
406 |
-
|
407 |
-
#: admin/views/metaboxes/metabox-options.php:23
|
408 |
-
msgid "Trigger action"
|
409 |
-
msgstr "Acción que se desencadena"
|
410 |
-
|
411 |
-
#: admin/views/metaboxes/metabox-options.php:27
|
412 |
-
msgid "seconds after page load"
|
413 |
-
msgstr "segundos luego de la carga de la página"
|
414 |
-
|
415 |
-
#: admin/views/metaboxes/metabox-options.php:28
|
416 |
-
msgid "of page height"
|
417 |
-
msgstr "del largo de la página"
|
418 |
-
|
419 |
-
#: admin/views/metaboxes/metabox-options.php:38
|
420 |
-
msgid "Auto-hide?"
|
421 |
-
msgstr "¿Auto ocultar?"
|
422 |
-
|
423 |
-
#: admin/views/metaboxes/metabox-options.php:40
|
424 |
-
#: admin/views/metaboxes/metabox-options.php:68
|
425 |
-
#: admin/views/metaboxes/metabox-options.php:76
|
426 |
-
#: admin/views/metaboxes/metabox-options.php:84
|
427 |
-
msgid "Yes"
|
428 |
-
msgstr "Si"
|
429 |
-
|
430 |
-
#: admin/views/metaboxes/metabox-options.php:41
|
431 |
-
#: admin/views/metaboxes/metabox-options.php:69
|
432 |
-
#: admin/views/metaboxes/metabox-options.php:77
|
433 |
-
#: admin/views/metaboxes/metabox-options.php:85
|
434 |
-
msgid "No"
|
435 |
-
msgstr "No"
|
436 |
-
|
437 |
-
#: admin/views/metaboxes/metabox-options.php:42
|
438 |
-
#, php-format
|
439 |
-
msgid ""
|
440 |
-
"Hide box again when visitors scroll back up? Only works when Trigger action "
|
441 |
-
"is set to % of page height"
|
442 |
-
msgstr ""
|
443 |
-
"¿Ocultar la caja nuevamente cuando los visitantes se desplazan hacia arriba? "
|
444 |
-
"Solamente funciona cuando la acción Desencadenante se establece a % del "
|
445 |
-
"largo de la página"
|
446 |
-
|
447 |
-
#: admin/views/metaboxes/metabox-options.php:46
|
448 |
-
msgid "Animation"
|
449 |
-
msgstr "Animación"
|
450 |
-
|
451 |
-
#: admin/views/metaboxes/metabox-options.php:49
|
452 |
-
msgid "Fade In"
|
453 |
-
msgstr "Entrar apareciendo"
|
454 |
-
|
455 |
-
#: admin/views/metaboxes/metabox-options.php:50
|
456 |
-
msgid "Slide In"
|
457 |
-
msgstr "Entrar deslizándose"
|
458 |
-
|
459 |
-
#: admin/views/metaboxes/metabox-options.php:53
|
460 |
-
msgid "Slide will only apply when popup is on the corners"
|
461 |
-
msgstr ""
|
462 |
-
"El deslizado solamente se aplicará cuando el popup esté en las esquinas."
|
463 |
-
|
464 |
-
#: admin/views/metaboxes/metabox-options.php:58
|
465 |
-
msgid "Cookie expiration days"
|
466 |
-
msgstr "Días de expiración de la cookie"
|
467 |
-
|
468 |
-
#: admin/views/metaboxes/metabox-options.php:61
|
469 |
-
msgid "After closing the box, how many days should it stay hidden?"
|
470 |
-
msgstr "Luego de cerrar la caja, ¿cuántos días debería estar oculta?"
|
471 |
-
|
472 |
-
#: admin/views/metaboxes/metabox-options.php:66
|
473 |
-
msgid "Enable test mode?"
|
474 |
-
msgstr " ¿Habilitar modo de prueba?"
|
475 |
-
|
476 |
-
#: admin/views/metaboxes/metabox-options.php:70
|
477 |
-
msgid ""
|
478 |
-
"If test mode is enabled, the box will show up regardless of whether a cookie "
|
479 |
-
"has been set. (To admins only)"
|
480 |
-
msgstr ""
|
481 |
-
"el modo de prueba está habilitado, la caja se va a mostrar no importa si la "
|
482 |
-
"cookie ha sido enviada. (Para administradores solamente)"
|
483 |
-
|
484 |
-
#: admin/views/metaboxes/metabox-options.php:74
|
485 |
-
msgid "Close on conversion?"
|
486 |
-
msgstr ""
|
487 |
-
|
488 |
-
#: admin/views/metaboxes/metabox-options.php:78
|
489 |
-
msgid ""
|
490 |
-
"If you have a form or social shortcode, by default popup will close on "
|
491 |
-
"submission/conversion"
|
492 |
-
msgstr ""
|
493 |
-
|
494 |
-
#: admin/views/metaboxes/metabox-options.php:82
|
495 |
-
msgid "Show powered by link?"
|
496 |
-
msgstr ""
|
497 |
-
|
498 |
-
#: admin/views/metaboxes/metabox-options.php:86
|
499 |
-
#, php-format
|
500 |
-
msgid ""
|
501 |
-
"Shows a \"powered by\" link below your popup. If your affiliate link is set "
|
502 |
-
"in the <a href=\"%s\">settings</a>, it will be used."
|
503 |
-
msgstr ""
|
504 |
-
|
505 |
-
#: admin/views/metaboxes/metabox-options.php:91
|
506 |
-
msgid "Appearance"
|
507 |
-
msgstr "Apariencia"
|
508 |
-
|
509 |
-
#: admin/views/metaboxes/metabox-options.php:95
|
510 |
-
msgid "Background opacity"
|
511 |
-
msgstr "Opacidad de fondo"
|
512 |
-
|
513 |
-
#: admin/views/metaboxes/metabox-options.php:98
|
514 |
-
msgid "Leave at 0 for no background. Max value is 1"
|
515 |
-
msgstr "dejarlo en 0 para no tener fondo. El valor máx es 1"
|
516 |
-
|
517 |
-
#: admin/views/metaboxes/metabox-options.php:104
|
518 |
-
msgid "Background color"
|
519 |
-
msgstr "Color de fondo"
|
520 |
-
|
521 |
-
#: admin/views/metaboxes/metabox-options.php:108
|
522 |
-
msgid "Text color"
|
523 |
-
msgstr "Color de texto"
|
524 |
-
|
525 |
-
#: admin/views/metaboxes/metabox-options.php:112
|
526 |
-
msgid "Box width"
|
527 |
-
msgstr "Ancho de la caja"
|
528 |
-
|
529 |
-
#: admin/views/metaboxes/metabox-options.php:118
|
530 |
-
msgid "Border color"
|
531 |
-
msgstr "Color de borde"
|
532 |
-
|
533 |
-
#: admin/views/metaboxes/metabox-options.php:122
|
534 |
-
msgid "Border width"
|
535 |
-
msgstr "Color de borde"
|
536 |
-
|
537 |
-
#: admin/views/metaboxes/metabox-premium.php:16
|
538 |
-
msgid ""
|
539 |
-
"Take the best WordPress Popups plugin to the next level with Popups Premium "
|
540 |
-
"extension."
|
541 |
-
msgstr ""
|
542 |
-
"Obtenga el mejor plugin de Popups de WordPress al siguiente nivel con la "
|
543 |
-
"extensión Popups Premium."
|
544 |
-
|
545 |
-
#: admin/views/metaboxes/metabox-premium.php:17
|
546 |
-
msgid "Popups Premium Features:"
|
547 |
-
msgstr "Características de Popups Premium:"
|
548 |
-
|
549 |
-
#: admin/views/metaboxes/metabox-premium.php:19
|
550 |
-
msgid "Beautiful optin forms for popular mail providers"
|
551 |
-
msgstr ""
|
552 |
-
|
553 |
-
#: admin/views/metaboxes/metabox-premium.php:20
|
554 |
-
msgid "Currently supporting MailChimp, Aweber, Postmatic, Mailpoet"
|
555 |
-
msgstr ""
|
556 |
-
|
557 |
-
#: admin/views/metaboxes/metabox-premium.php:21
|
558 |
-
msgid ""
|
559 |
-
"Track impressions and Conversions of social likes and forms submissions like "
|
560 |
-
"Contact Form 7, Gravity forms, etc"
|
561 |
-
msgstr ""
|
562 |
-
|
563 |
-
#: admin/views/metaboxes/metabox-premium.php:22
|
564 |
-
msgid "Track impressions and Conversions also in Google Analytics"
|
565 |
-
msgstr "Track impressions and Conversions también en Google Analytics"
|
566 |
-
|
567 |
-
#: admin/views/metaboxes/metabox-premium.php:23
|
568 |
-
#: admin/views/metaboxes/metabox-premium.php:25
|
569 |
-
msgid "Exit Intent technology"
|
570 |
-
msgstr "Salir de la tecnología de Propósito"
|
571 |
-
|
572 |
-
#: admin/views/metaboxes/metabox-premium.php:24
|
573 |
-
msgid "8 New animations effects"
|
574 |
-
msgstr "8 efectos de nuevas animaciones"
|
575 |
-
|
576 |
-
#: admin/views/metaboxes/metabox-premium.php:26
|
577 |
-
msgid "New trigger methods"
|
578 |
-
msgstr " Nuevos métodos de desencadenamiento"
|
579 |
-
|
580 |
-
#: admin/views/metaboxes/metabox-premium.php:27
|
581 |
-
msgid "Timer for auto closing"
|
582 |
-
msgstr "Temporizador para auto cerrado"
|
583 |
-
|
584 |
-
#: admin/views/metaboxes/metabox-premium.php:28
|
585 |
-
msgid "Ability to disable close button"
|
586 |
-
msgstr "Habilidad para deshabilitar el botón de cerrado"
|
587 |
-
|
588 |
-
#: admin/views/metaboxes/metabox-premium.php:29
|
589 |
-
msgid ""
|
590 |
-
"Ability to disable Advanced close methods like esc or clicking outside of "
|
591 |
-
"the popup"
|
592 |
-
msgstr ""
|
593 |
-
"Habilidad para deshabilitar métodos de cerrado Avanzados como esc o "
|
594 |
-
"haciendo clic fuera del popup"
|
595 |
-
|
596 |
-
#: admin/views/metaboxes/metabox-premium.php:30
|
597 |
-
msgid "Premium support"
|
598 |
-
msgstr "Soporte Premium"
|
599 |
-
|
600 |
-
#: admin/views/metaboxes/metabox-premium.php:34
|
601 |
-
msgid "Buy Now!"
|
602 |
-
msgstr "¡Comprar Ahora!"
|
603 |
-
|
604 |
-
#: admin/views/metaboxes/metabox-rules.php:19
|
605 |
-
msgid "Rules"
|
606 |
-
msgstr "Reglas"
|
607 |
-
|
608 |
-
#: admin/views/metaboxes/metabox-rules.php:20
|
609 |
-
msgid "Create a set of rules to determine where the popup will show"
|
610 |
-
msgstr ""
|
611 |
-
"Crear un grupo de reglas para determinar dónde el popup se va a mostrar"
|
612 |
-
|
613 |
-
#: admin/views/metaboxes/metabox-rules.php:31
|
614 |
-
msgid "Show this popup if"
|
615 |
-
msgstr "Mostrar este popup si"
|
616 |
-
|
617 |
-
#: admin/views/metaboxes/metabox-rules.php:61
|
618 |
-
msgid "is equal to"
|
619 |
-
msgstr "es igual a"
|
620 |
-
|
621 |
-
#: admin/views/metaboxes/metabox-rules.php:62
|
622 |
-
msgid "is not equal to"
|
623 |
-
msgstr "no es igual a "
|
624 |
-
|
625 |
-
#: admin/views/metaboxes/metabox-rules.php:93
|
626 |
-
msgid "and"
|
627 |
-
msgstr "y"
|
628 |
-
|
629 |
-
#: admin/views/metaboxes/metabox-rules.php:108
|
630 |
-
msgid "Add rule group"
|
631 |
-
msgstr "Adicionar grupo de regla"
|
632 |
-
|
633 |
-
#: admin/views/metaboxes/metabox-support.php:6
|
634 |
-
#, php-format
|
635 |
-
msgid "You are using Popups plugin v%s"
|
636 |
-
msgstr "Usted está usando el plugin Popups v%s"
|
637 |
-
|
638 |
-
#: admin/views/metaboxes/metabox-support.php:7
|
639 |
-
#, php-format
|
640 |
-
msgid ""
|
641 |
-
"If you need support please go to the WordPress.org <a href=\"%s\">support "
|
642 |
-
"forums</a>"
|
643 |
-
msgstr ""
|
644 |
-
"Si usted necesita soporte por favor vaya a <a href=\"%s\">los foros de "
|
645 |
-
"soporte</a> de WordPress.org"
|
646 |
-
|
647 |
-
#: admin/views/settings-page.php:17
|
648 |
-
msgid "Affiliate link"
|
649 |
-
msgstr ""
|
650 |
-
|
651 |
-
#: admin/views/settings-page.php:20
|
652 |
-
#, php-format
|
653 |
-
msgid ""
|
654 |
-
"You can earn money by promoting the plugin! Join <a href=\"%s\">our "
|
655 |
-
"affiliate program</a> and paste your affiliate link here to earn 35% in "
|
656 |
-
"commissions . Once entered, it will replace the default \"Powered by\" on "
|
657 |
-
"the popups."
|
658 |
-
msgstr ""
|
659 |
-
|
660 |
-
#: admin/views/settings-page.php:24
|
661 |
-
msgid "Ajax mode?"
|
662 |
-
msgstr "¿Modo Ajax?"
|
663 |
-
|
664 |
-
#: admin/views/settings-page.php:27
|
665 |
-
msgid ""
|
666 |
-
"Load popups using ajax. Compatible with cache plugins, but might not work "
|
667 |
-
"with all plugins"
|
668 |
-
msgstr ""
|
669 |
-
"Cargar popups usando ajax. Compatible con plugins de caché, pero puede no "
|
670 |
-
"funcionar con todos los plugins"
|
671 |
-
|
672 |
-
#: admin/views/settings-page.php:32
|
673 |
-
msgid "Enable Debug mode?"
|
674 |
-
msgstr "¿Habilitar modo Debug?"
|
675 |
-
|
676 |
-
#: admin/views/settings-page.php:35
|
677 |
-
msgid "Will use uncompressed js"
|
678 |
-
msgstr "Va a usar js descomprimido"
|
679 |
-
|
680 |
-
#: admin/views/settings-page.php:40
|
681 |
-
msgid "Enable safe mode?"
|
682 |
-
msgstr "¿Habilitar modo seguro?"
|
683 |
-
|
684 |
-
#: admin/views/settings-page.php:43
|
685 |
-
msgid "Will move all popups to top of the screen."
|
686 |
-
msgstr "Moverá todos los popups hacia arriba de la pantalla."
|
687 |
-
|
688 |
-
#: admin/views/settings-page.php:48
|
689 |
-
msgid "Remove shortcodes style"
|
690 |
-
msgstr "Eliminar el estilo de los códigos cortos"
|
691 |
-
|
692 |
-
#: admin/views/settings-page.php:51
|
693 |
-
msgid ""
|
694 |
-
"By default the plugin will apply some style to shortcodes. Check here if you "
|
695 |
-
"want to manually style them"
|
696 |
-
msgstr ""
|
697 |
-
"Por defecto el plugin aplicará algún estilo a códigos cortos. Seleccione "
|
698 |
-
"aquí si quiere aplicarle el estilo manualmente"
|
699 |
-
|
700 |
-
#: admin/views/settings-page.php:56
|
701 |
-
msgid "Unload Facebook javascript"
|
702 |
-
msgstr "No cargar el javascript de Facebook"
|
703 |
-
|
704 |
-
#: admin/views/settings-page.php:59
|
705 |
-
msgid "If you use your own Facebook script, check this"
|
706 |
-
msgstr "Si usted usa su propio script de Facebook, seleccione aquí"
|
707 |
-
|
708 |
-
#: admin/views/settings-page.php:64
|
709 |
-
msgid "Unload Google javascript"
|
710 |
-
msgstr "No cargar javascript de Google"
|
711 |
-
|
712 |
-
#: admin/views/settings-page.php:67
|
713 |
-
msgid "If you use your own Google script, check this"
|
714 |
-
msgstr "Si usted usa su propio script de Google, seleccione aquí"
|
715 |
-
|
716 |
-
#: admin/views/settings-page.php:72
|
717 |
-
msgid "Unload Twitter javascript"
|
718 |
-
msgstr "No cargar javascript de Twitter"
|
719 |
-
|
720 |
-
#: admin/views/settings-page.php:75
|
721 |
-
msgid "If you use your own Twitter script, check this"
|
722 |
-
msgstr "Si usted usa su propio script de Twitter, seleccione aquí"
|
723 |
-
|
724 |
-
#: admin/views/settings-page.php:80
|
725 |
-
msgid "Save settings"
|
726 |
-
msgstr "Salvar ajustes"
|
727 |
-
|
728 |
-
#: includes/class-spu-helper.php:133
|
729 |
-
msgid "All Pages"
|
730 |
-
msgstr "Todas las Páginas"
|
731 |
-
|
732 |
-
#: includes/class-spu-helper.php:134
|
733 |
-
msgid "Front Page"
|
734 |
-
msgstr "Página Frontal"
|
735 |
-
|
736 |
-
#: includes/class-spu-helper.php:135
|
737 |
-
msgid "Posts Page"
|
738 |
-
msgstr "Página de Posts"
|
739 |
-
|
740 |
-
#: includes/class-spu-helper.php:136
|
741 |
-
msgid "Category Page"
|
742 |
-
msgstr "Página de Categoría"
|
743 |
-
|
744 |
-
#: includes/class-spu-helper.php:137
|
745 |
-
msgid "Archives Page"
|
746 |
-
msgstr "Página de Archivos"
|
747 |
-
|
748 |
-
#: includes/class-spu-helper.php:138
|
749 |
-
msgid "Top Level Page (parent of 0)"
|
750 |
-
msgstr "Página de Nivel Superior (padre de 0)"
|
751 |
-
|
752 |
-
#: includes/class-spu-helper.php:139
|
753 |
-
msgid "Parent Page (has children)"
|
754 |
-
msgstr "Página Padre (tiene hijos)"
|
755 |
-
|
756 |
-
#: includes/class-spu-helper.php:140
|
757 |
-
msgid "Child Page (has parent)"
|
758 |
-
msgstr "Página hija (tiene padre)"
|
759 |
-
|
760 |
-
#: includes/class-spu-helper.php:148
|
761 |
-
msgid "Default Template"
|
762 |
-
msgstr "Plantilla Por Defecto"
|
763 |
-
|
764 |
-
#: includes/class-spu-helper.php:221
|
765 |
-
msgid "Publish"
|
766 |
-
msgstr "Publicar"
|
767 |
-
|
768 |
-
#: includes/class-spu-helper.php:222
|
769 |
-
msgid "Pending Review"
|
770 |
-
msgstr "Revisión Pendiente"
|
771 |
-
|
772 |
-
#: includes/class-spu-helper.php:223
|
773 |
-
msgid "Draft"
|
774 |
-
msgstr "Borrador"
|
775 |
-
|
776 |
-
#: includes/class-spu-helper.php:224
|
777 |
-
msgid "Future"
|
778 |
-
msgstr "Futuro"
|
779 |
-
|
780 |
-
#: includes/class-spu-helper.php:225
|
781 |
-
msgid "Private"
|
782 |
-
msgstr "Privado"
|
783 |
-
|
784 |
-
#: includes/class-spu-helper.php:226
|
785 |
-
msgid "Revision"
|
786 |
-
msgstr "Revisión"
|
787 |
-
|
788 |
-
#: includes/class-spu-helper.php:227
|
789 |
-
msgid "Trash"
|
790 |
-
msgstr "Papelera"
|
791 |
-
|
792 |
-
#: includes/class-spu-helper.php:240
|
793 |
-
msgid "Super Admin"
|
794 |
-
msgstr "Super Admin"
|
795 |
-
|
796 |
-
#: includes/class-spu-helper.php:260
|
797 |
-
msgid "True"
|
798 |
-
msgstr "Verdadero"
|
799 |
-
|
800 |
-
#~ msgid "What's new"
|
801 |
-
#~ msgstr "Qué hay de nuevo"
|
802 |
-
|
803 |
-
#~ msgid "credits"
|
804 |
-
#~ msgstr "créditos"
|
805 |
-
|
806 |
-
#~ msgid "Like Facebook like box but for Twitter"
|
807 |
-
#~ msgstr "Caja de me gusta de Facebook pero para Twitter"
|
808 |
-
|
809 |
-
#~ msgid ""
|
810 |
-
#~ "Track impressions and Conversions of social likes/follow and forms "
|
811 |
-
#~ "submissions like Contact Form 7, Gravity forms, etc"
|
812 |
-
#~ msgstr ""
|
813 |
-
#~ "Track impressions and Conversions de likes/follow sociales y envíos de "
|
814 |
-
#~ "formas como Contact Form 7, Gravity forms, etc"
|
1 |
+
# Copyright (C) 2013 TODO
|
2 |
+
# This file is distributed under the same license as the TODO package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: Popups\n"
|
6 |
+
"Report-Msgid-Bugs-To: http://wordpress.org/plugins/plugin-name\n"
|
7 |
+
"POT-Creation-Date: 2015-06-14 00:02-0300\n"
|
8 |
+
"PO-Revision-Date: 2015-10-01 15:15-0300\n"
|
9 |
+
"Last-Translator: Damian Logghe <info@timersys.com>\n"
|
10 |
+
"Language-Team: Timersys <info@timersys.com>\n"
|
11 |
+
"Language: es_ES\n"
|
12 |
+
"MIME-Version: 1.0\n"
|
13 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
+
"Content-Transfer-Encoding: 8bit\n"
|
15 |
+
"X-Generator: Poedit 1.7.4\n"
|
16 |
+
"X-Poedit-KeywordsList: __;_e;_n;_x;esc_html_e;esc_html__;esc_attr_e;"
|
17 |
+
"esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2\n"
|
18 |
+
"X-Poedit-Basepath: ../\n"
|
19 |
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
20 |
+
"X-Poedit-SearchPath-0: .\n"
|
21 |
+
|
22 |
+
#: admin/class-social-popup-admin.php:154
|
23 |
+
msgctxt "post type singular name"
|
24 |
+
msgid "Popups"
|
25 |
+
msgstr "Popups [postear nombre singular del tipo]"
|
26 |
+
|
27 |
+
#: admin/class-social-popup-admin.php:155
|
28 |
+
msgctxt "admin menu"
|
29 |
+
msgid "Popups"
|
30 |
+
msgstr "Popups [menú del admin]"
|
31 |
+
|
32 |
+
#: admin/class-social-popup-admin.php:156
|
33 |
+
msgctxt "add new on admin bar"
|
34 |
+
msgid "Popups"
|
35 |
+
msgstr "Popups [adicionar nuevo en la barra de admin]"
|
36 |
+
|
37 |
+
#: admin/class-social-popup-admin.php:157
|
38 |
+
msgctxt "Popups"
|
39 |
+
msgid "Add New"
|
40 |
+
msgstr "Adicionar nuevo [Popups]"
|
41 |
+
|
42 |
+
#: admin/class-social-popup-admin.php:158
|
43 |
+
msgid "Add New Popups"
|
44 |
+
msgstr "Adicionar Nuevo Popups"
|
45 |
+
|
46 |
+
#: admin/class-social-popup-admin.php:159
|
47 |
+
msgid "New Popups"
|
48 |
+
msgstr "Nuevo Popups"
|
49 |
+
|
50 |
+
#: admin/class-social-popup-admin.php:160
|
51 |
+
msgid "Edit Popups"
|
52 |
+
msgstr "Editar Popups"
|
53 |
+
|
54 |
+
#: admin/class-social-popup-admin.php:161
|
55 |
+
msgid "View Popups"
|
56 |
+
msgstr "Ver Popups"
|
57 |
+
|
58 |
+
#: admin/class-social-popup-admin.php:162
|
59 |
+
msgid "All Popups"
|
60 |
+
msgstr "Todos los Popups"
|
61 |
+
|
62 |
+
#: admin/class-social-popup-admin.php:163
|
63 |
+
msgid "Search Popups"
|
64 |
+
msgstr "Buscar Popups"
|
65 |
+
|
66 |
+
#: admin/class-social-popup-admin.php:164
|
67 |
+
msgid "Parent Popups:"
|
68 |
+
msgstr "Popups Padre:"
|
69 |
+
|
70 |
+
#: admin/class-social-popup-admin.php:165
|
71 |
+
msgid "No Popups found."
|
72 |
+
msgstr "No se encontraron Popups."
|
73 |
+
|
74 |
+
#: admin/class-social-popup-admin.php:166
|
75 |
+
msgid "No Popups found in Trash."
|
76 |
+
msgstr "No se encontraron Popups en la Papelera."
|
77 |
+
|
78 |
+
#: admin/class-social-popup-admin.php:255
|
79 |
+
msgid "Popups Premium"
|
80 |
+
msgstr "Popups Premium"
|
81 |
+
|
82 |
+
#: admin/class-social-popup-admin.php:266
|
83 |
+
msgid "PopUp Shortcodes"
|
84 |
+
msgstr "Códigos Cortos del PopUp"
|
85 |
+
|
86 |
+
#: admin/class-social-popup-admin.php:275
|
87 |
+
msgid "PopUp Display Rules"
|
88 |
+
msgstr "Reglas de Visualización del PopUp"
|
89 |
+
|
90 |
+
#: admin/class-social-popup-admin.php:284
|
91 |
+
msgid "Display Options"
|
92 |
+
msgstr "Opciones de Visualización"
|
93 |
+
|
94 |
+
#: admin/class-social-popup-admin.php:293
|
95 |
+
msgid "Need support?"
|
96 |
+
msgstr "¿Necesita soporte?"
|
97 |
+
|
98 |
+
#: admin/class-social-popup-admin.php:301
|
99 |
+
msgid "Donate & support"
|
100 |
+
msgstr "Donar y soporte"
|
101 |
+
|
102 |
+
#: admin/class-social-popup-admin.php:309
|
103 |
+
msgid "About the developer"
|
104 |
+
msgstr "Acerca del desarrollador"
|
105 |
+
|
106 |
+
#: admin/class-social-popup-admin.php:557
|
107 |
+
#: admin/views/metaboxes/metabox-rules.php:33
|
108 |
+
#: admin/views/metaboxes/metabox-rules.php:106
|
109 |
+
msgid "or"
|
110 |
+
msgstr "o"
|
111 |
+
|
112 |
+
#: admin/class-social-popup-admin.php:584
|
113 |
+
msgid "Add a Popup"
|
114 |
+
msgstr "Adicionar un Popup"
|
115 |
+
|
116 |
+
#: admin/class-social-popup-admin.php:708
|
117 |
+
msgid "User"
|
118 |
+
msgstr "Usuario"
|
119 |
+
|
120 |
+
#: admin/class-social-popup-admin.php:709
|
121 |
+
msgid "User role"
|
122 |
+
msgstr "Rol de Usuario"
|
123 |
+
|
124 |
+
#: admin/class-social-popup-admin.php:710
|
125 |
+
msgid "User is logged"
|
126 |
+
msgstr "El usuario está autenticado"
|
127 |
+
|
128 |
+
#: admin/class-social-popup-admin.php:711
|
129 |
+
msgid "User never left a comment"
|
130 |
+
msgstr "El usuario nunca dejó un comentario"
|
131 |
+
|
132 |
+
#: admin/class-social-popup-admin.php:712
|
133 |
+
msgid "User came via a search engine"
|
134 |
+
msgstr "El usuario vino via un motor de búsqueda"
|
135 |
+
|
136 |
+
#: admin/class-social-popup-admin.php:713
|
137 |
+
msgid "User did not arrive via another page on your site"
|
138 |
+
msgstr "El usuario no llegó via ninguna otra página de su sitio"
|
139 |
+
|
140 |
+
#: admin/class-social-popup-admin.php:715
|
141 |
+
#: admin/class-social-popup-admin.php:716
|
142 |
+
msgid "Post"
|
143 |
+
msgstr "Post"
|
144 |
+
|
145 |
+
#: admin/class-social-popup-admin.php:717
|
146 |
+
msgid "Post ID"
|
147 |
+
msgstr "ID del Post"
|
148 |
+
|
149 |
+
#: admin/class-social-popup-admin.php:718
|
150 |
+
msgid "Post Type"
|
151 |
+
msgstr "Tipo del Post"
|
152 |
+
|
153 |
+
#: admin/class-social-popup-admin.php:719
|
154 |
+
msgid "Post Category"
|
155 |
+
msgstr "Categoría del Post"
|
156 |
+
|
157 |
+
#: admin/class-social-popup-admin.php:720
|
158 |
+
msgid "Post Format"
|
159 |
+
msgstr "Formato del Post"
|
160 |
+
|
161 |
+
#: admin/class-social-popup-admin.php:721
|
162 |
+
msgid "Post Status"
|
163 |
+
msgstr "Estado del Post"
|
164 |
+
|
165 |
+
#: admin/class-social-popup-admin.php:722
|
166 |
+
msgid "Post Taxonomy"
|
167 |
+
msgstr "Taxonomía del Post"
|
168 |
+
|
169 |
+
#: admin/class-social-popup-admin.php:724
|
170 |
+
#: admin/class-social-popup-admin.php:725
|
171 |
+
msgid "Page"
|
172 |
+
msgstr "Página"
|
173 |
+
|
174 |
+
#: admin/class-social-popup-admin.php:726
|
175 |
+
msgid "Page Type"
|
176 |
+
msgstr "Tipo de Página"
|
177 |
+
|
178 |
+
#: admin/class-social-popup-admin.php:727
|
179 |
+
msgid "Page Parent"
|
180 |
+
msgstr "Padre de la Página"
|
181 |
+
|
182 |
+
#: admin/class-social-popup-admin.php:728
|
183 |
+
msgid "Page Template"
|
184 |
+
msgstr "Plantilla de la Página"
|
185 |
+
|
186 |
+
#: admin/class-social-popup-admin.php:730
|
187 |
+
msgid "Other"
|
188 |
+
msgstr "Otro"
|
189 |
+
|
190 |
+
#: admin/class-social-popup-admin.php:731
|
191 |
+
msgid "Referrer"
|
192 |
+
msgstr "Remitente"
|
193 |
+
|
194 |
+
#: admin/class-social-popup-admin.php:732
|
195 |
+
msgid "Mobile Phone"
|
196 |
+
msgstr "Teléfono Móvil"
|
197 |
+
|
198 |
+
#: admin/class-social-popup-admin.php:733
|
199 |
+
msgid "Tablet"
|
200 |
+
msgstr "Tablet"
|
201 |
+
|
202 |
+
#: admin/includes/class-spu-notices.php:30
|
203 |
+
#, php-format
|
204 |
+
msgid ""
|
205 |
+
"We noticed that you have been using our plugin for a while and we would like "
|
206 |
+
"to ask you a little favour. If you are happy with it and can take a minute "
|
207 |
+
"please <a href=\"%s\" target=\"_blank\">leave a nice review</a> on "
|
208 |
+
"WordPress. It will be a tremendous help for us!"
|
209 |
+
msgstr ""
|
210 |
+
|
211 |
+
#: admin/includes/class-spu-notices.php:32
|
212 |
+
#, php-format
|
213 |
+
msgid "<a href=\"%s\" target=\"_blank\">Leave a nice review</a>"
|
214 |
+
msgstr ""
|
215 |
+
|
216 |
+
#: admin/includes/class-spu-notices.php:33
|
217 |
+
#, php-format
|
218 |
+
msgid "<a href=\"%s\">No, thanks</a>"
|
219 |
+
msgstr ""
|
220 |
+
|
221 |
+
#: admin/views/metaboxes/metabox-donate.php:6
|
222 |
+
msgid "If you like this plugin, consider supporting it by donating."
|
223 |
+
msgstr "Si le gusta este plugin, considere soportarlo donando."
|
224 |
+
|
225 |
+
#: admin/views/metaboxes/metabox-donate.php:8
|
226 |
+
msgid "Donate with PayPal"
|
227 |
+
msgstr "Donar con PayPal"
|
228 |
+
|
229 |
+
#: admin/views/metaboxes/metabox-donate.php:10
|
230 |
+
msgid "Some other ways to support this plugin"
|
231 |
+
msgstr "Otras formas de soportar este plugin"
|
232 |
+
|
233 |
+
#: admin/views/metaboxes/metabox-donate.php:12
|
234 |
+
msgid "Leave a ★★★★★ review on WordPress.org"
|
235 |
+
msgstr ""
|
236 |
+
"Deje un ★★★★★ comentario en WordPress.org"
|
237 |
+
|
238 |
+
#: admin/views/metaboxes/metabox-donate.php:13
|
239 |
+
msgid "Write about Popups on your blog"
|
240 |
+
msgstr "Escriba acerca de Popups en su blog"
|
241 |
+
|
242 |
+
#: admin/views/metaboxes/metabox-donate.php:14
|
243 |
+
msgid "Tweet about Popups"
|
244 |
+
msgstr "Haga tweet acerca de Popups"
|
245 |
+
|
246 |
+
#: admin/views/metaboxes/metabox-donate.php:15
|
247 |
+
msgid "Vote \"works\" on the WordPress.org plugin page"
|
248 |
+
msgstr "Vote \"funciona\" en la página del plugin de WordPress.org"
|
249 |
+
|
250 |
+
#: admin/views/metaboxes/metabox-help.php:6
|
251 |
+
msgid ""
|
252 |
+
"You have three social shortcodes to use that will print a Facebook like, a "
|
253 |
+
"Google+ Follow and a Twitter follow. Check the available options and "
|
254 |
+
"<strong>configure them with your social accounts</strong>:"
|
255 |
+
msgstr ""
|
256 |
+
"Tiene tres códigos cortos sociales para usar que mostrarán un me gusta de "
|
257 |
+
"Facebook, un seguir de Google+ y un seguir de Twitter. Chequee las opciones "
|
258 |
+
"de disponibilidad y <strong>configúrelas con sus cuentas sociales</strong>:"
|
259 |
+
|
260 |
+
#: admin/views/metaboxes/metabox-help.php:12
|
261 |
+
msgid "View Facebook Page Options"
|
262 |
+
msgstr ""
|
263 |
+
|
264 |
+
#: admin/views/metaboxes/metabox-help.php:14
|
265 |
+
#: admin/views/metaboxes/metabox-help.php:27
|
266 |
+
msgid "Your facebook page url"
|
267 |
+
msgstr "La url de su página de Facebook"
|
268 |
+
|
269 |
+
#: admin/views/metaboxes/metabox-help.php:15
|
270 |
+
msgid "Your page name"
|
271 |
+
msgstr ""
|
272 |
+
|
273 |
+
#: admin/views/metaboxes/metabox-help.php:16
|
274 |
+
msgid "true|false <b>Default value:</b> true"
|
275 |
+
msgstr ""
|
276 |
+
|
277 |
+
#: admin/views/metaboxes/metabox-help.php:17
|
278 |
+
msgid "true|false <b>Default value:</b> false"
|
279 |
+
msgstr ""
|
280 |
+
|
281 |
+
#: admin/views/metaboxes/metabox-help.php:25
|
282 |
+
msgid "View Facebook Options"
|
283 |
+
msgstr "Ver Opciones de Facebook"
|
284 |
+
|
285 |
+
#: admin/views/metaboxes/metabox-help.php:28
|
286 |
+
msgid "standard, box_count, button <b>Default value:</b> button_count"
|
287 |
+
msgstr "standard, box_count, button <b> Valor por defecto:</b> button_count"
|
288 |
+
|
289 |
+
#: admin/views/metaboxes/metabox-help.php:29
|
290 |
+
#: admin/views/metaboxes/metabox-help.php:30
|
291 |
+
msgid "true <b>Default value:</b> false"
|
292 |
+
msgstr "true <b>Valor por defecto:</b> false"
|
293 |
+
|
294 |
+
#: admin/views/metaboxes/metabox-help.php:31
|
295 |
+
msgid "recommend <b>Default value:</b> like"
|
296 |
+
msgstr "recommend <b>Valor por defecto:</b> like"
|
297 |
+
|
298 |
+
#: admin/views/metaboxes/metabox-help.php:38
|
299 |
+
msgid "View Google+ Options"
|
300 |
+
msgstr "Ver Opciones de Google+"
|
301 |
+
|
302 |
+
#: admin/views/metaboxes/metabox-help.php:40
|
303 |
+
msgid "Your Google+ url"
|
304 |
+
msgstr "Su url de Google+"
|
305 |
+
|
306 |
+
#: admin/views/metaboxes/metabox-help.php:41
|
307 |
+
msgid "small, standard, tall <b>Default value:</b> medium"
|
308 |
+
msgstr "small, standard, tall <b>Valor por defecto:</b> medium"
|
309 |
+
|
310 |
+
#: admin/views/metaboxes/metabox-help.php:42
|
311 |
+
msgid "inline, none <b>Default value:</b> bubble"
|
312 |
+
msgstr "inline, none <b>Valor por defecto:</b> bubble"
|
313 |
+
|
314 |
+
#: admin/views/metaboxes/metabox-help.php:48
|
315 |
+
msgid "View Twitter Options"
|
316 |
+
msgstr "Ver Opciones de Twitter"
|
317 |
+
|
318 |
+
#: admin/views/metaboxes/metabox-help.php:50
|
319 |
+
msgid "Your Twitter user <b>Default chifli</b>iiii"
|
320 |
+
msgstr "Su <b>chifli</b>iiii Por Defecto de su usuario de Twitter "
|
321 |
+
|
322 |
+
#: admin/views/metaboxes/metabox-help.php:51
|
323 |
+
msgid "false <b>Default value:</b> true"
|
324 |
+
msgstr "false <b>Valor por defecto:</b> true"
|
325 |
+
|
326 |
+
#: admin/views/metaboxes/metabox-help.php:52
|
327 |
+
msgid "large <b>Default value:</b> \"\""
|
328 |
+
msgstr "large <b>Valor por defecto:</b> \"\""
|
329 |
+
|
330 |
+
#: admin/views/metaboxes/metabox-help.php:55
|
331 |
+
msgid "Other available Shortcodes:"
|
332 |
+
msgstr "Otros Códigos Cortos disponibles:"
|
333 |
+
|
334 |
+
#: admin/views/metaboxes/metabox-help.php:60
|
335 |
+
msgid "View Close shortcode Options"
|
336 |
+
msgstr "Ver Opciones Cerradas de códigos cortos "
|
337 |
+
|
338 |
+
#: admin/views/metaboxes/metabox-help.php:62
|
339 |
+
msgid "Pass a custom class to style your button"
|
340 |
+
msgstr "Pasar una clase personalizada para darle estilo a su botón"
|
341 |
+
|
342 |
+
#: admin/views/metaboxes/metabox-help.php:63
|
343 |
+
msgid "Button label - <b>Default value:</b> Close"
|
344 |
+
msgstr "Button label - <b>Valor por defecto:</b> Close"
|
345 |
+
|
346 |
+
#: admin/views/metaboxes/metabox-help.php:64
|
347 |
+
msgid "left, right, center, none - <b>Default value:</b> center"
|
348 |
+
msgstr "left, right, center, none - <b>Valor por defecto:</b> center"
|
349 |
+
|
350 |
+
#: admin/views/metaboxes/metabox-links.php:6
|
351 |
+
msgid "My name is"
|
352 |
+
msgstr "Mi nombre es"
|
353 |
+
|
354 |
+
#: admin/views/metaboxes/metabox-links.php:6
|
355 |
+
msgid "I develop WordPress plugins and themes."
|
356 |
+
msgstr "Yo desarrollo plugins y temas de WordPress."
|
357 |
+
|
358 |
+
#: admin/views/metaboxes/metabox-links.php:7
|
359 |
+
#, php-format
|
360 |
+
msgid ""
|
361 |
+
"Take a look at my <a href=\"%s\">site</a> to see my other plugins or hire "
|
362 |
+
"me. Subscribe to get updates!"
|
363 |
+
msgstr ""
|
364 |
+
"Eche una ojeada a mi <a href=\"%s\">sitio</a> para ver mis otros plugins o "
|
365 |
+
"contratarme. ¡Suscríbase para obtener actualizaciones!"
|
366 |
+
|
367 |
+
#: admin/views/metaboxes/metabox-links.php:8
|
368 |
+
msgid "Other plugins I built:"
|
369 |
+
msgstr "Otros plugins que hago:"
|
370 |
+
|
371 |
+
#: admin/views/metaboxes/metabox-links.php:10
|
372 |
+
msgid "Install multiple plugins and create collections"
|
373 |
+
msgstr "Instalar múltiples plugins y crear colecciones"
|
374 |
+
|
375 |
+
#: admin/views/metaboxes/metabox-links.php:11
|
376 |
+
msgid "Geotarget your content"
|
377 |
+
msgstr ""
|
378 |
+
|
379 |
+
#: admin/views/metaboxes/metabox-links.php:12
|
380 |
+
msgid "Invite your network friends and import contacts"
|
381 |
+
msgstr "Invitar a sus amigos de la red e importar contactos"
|
382 |
+
|
383 |
+
#: admin/views/metaboxes/metabox-options.php:9
|
384 |
+
msgid "Box Position"
|
385 |
+
msgstr "Posición de la Caja"
|
386 |
+
|
387 |
+
#: admin/views/metaboxes/metabox-options.php:12
|
388 |
+
msgid "Centered"
|
389 |
+
msgstr "Centrada"
|
390 |
+
|
391 |
+
#: admin/views/metaboxes/metabox-options.php:13
|
392 |
+
msgid "Top Left"
|
393 |
+
msgstr "Arriba a la Izquierda"
|
394 |
+
|
395 |
+
#: admin/views/metaboxes/metabox-options.php:14
|
396 |
+
msgid "Top Right"
|
397 |
+
msgstr "Arriba a la Derecha"
|
398 |
+
|
399 |
+
#: admin/views/metaboxes/metabox-options.php:15
|
400 |
+
msgid "Bottom Left"
|
401 |
+
msgstr "Debajo a la Izquierda"
|
402 |
+
|
403 |
+
#: admin/views/metaboxes/metabox-options.php:16
|
404 |
+
msgid "Bottom Right"
|
405 |
+
msgstr "Debajo a la Derecha"
|
406 |
+
|
407 |
+
#: admin/views/metaboxes/metabox-options.php:23
|
408 |
+
msgid "Trigger action"
|
409 |
+
msgstr "Acción que se desencadena"
|
410 |
+
|
411 |
+
#: admin/views/metaboxes/metabox-options.php:27
|
412 |
+
msgid "seconds after page load"
|
413 |
+
msgstr "segundos luego de la carga de la página"
|
414 |
+
|
415 |
+
#: admin/views/metaboxes/metabox-options.php:28
|
416 |
+
msgid "of page height"
|
417 |
+
msgstr "del largo de la página"
|
418 |
+
|
419 |
+
#: admin/views/metaboxes/metabox-options.php:38
|
420 |
+
msgid "Auto-hide?"
|
421 |
+
msgstr "¿Auto ocultar?"
|
422 |
+
|
423 |
+
#: admin/views/metaboxes/metabox-options.php:40
|
424 |
+
#: admin/views/metaboxes/metabox-options.php:68
|
425 |
+
#: admin/views/metaboxes/metabox-options.php:76
|
426 |
+
#: admin/views/metaboxes/metabox-options.php:84
|
427 |
+
msgid "Yes"
|
428 |
+
msgstr "Si"
|
429 |
+
|
430 |
+
#: admin/views/metaboxes/metabox-options.php:41
|
431 |
+
#: admin/views/metaboxes/metabox-options.php:69
|
432 |
+
#: admin/views/metaboxes/metabox-options.php:77
|
433 |
+
#: admin/views/metaboxes/metabox-options.php:85
|
434 |
+
msgid "No"
|
435 |
+
msgstr "No"
|
436 |
+
|
437 |
+
#: admin/views/metaboxes/metabox-options.php:42
|
438 |
+
#, php-format
|
439 |
+
msgid ""
|
440 |
+
"Hide box again when visitors scroll back up? Only works when Trigger action "
|
441 |
+
"is set to % of page height"
|
442 |
+
msgstr ""
|
443 |
+
"¿Ocultar la caja nuevamente cuando los visitantes se desplazan hacia arriba? "
|
444 |
+
"Solamente funciona cuando la acción Desencadenante se establece a % del "
|
445 |
+
"largo de la página"
|
446 |
+
|
447 |
+
#: admin/views/metaboxes/metabox-options.php:46
|
448 |
+
msgid "Animation"
|
449 |
+
msgstr "Animación"
|
450 |
+
|
451 |
+
#: admin/views/metaboxes/metabox-options.php:49
|
452 |
+
msgid "Fade In"
|
453 |
+
msgstr "Entrar apareciendo"
|
454 |
+
|
455 |
+
#: admin/views/metaboxes/metabox-options.php:50
|
456 |
+
msgid "Slide In"
|
457 |
+
msgstr "Entrar deslizándose"
|
458 |
+
|
459 |
+
#: admin/views/metaboxes/metabox-options.php:53
|
460 |
+
msgid "Slide will only apply when popup is on the corners"
|
461 |
+
msgstr ""
|
462 |
+
"El deslizado solamente se aplicará cuando el popup esté en las esquinas."
|
463 |
+
|
464 |
+
#: admin/views/metaboxes/metabox-options.php:58
|
465 |
+
msgid "Cookie expiration days"
|
466 |
+
msgstr "Días de expiración de la cookie"
|
467 |
+
|
468 |
+
#: admin/views/metaboxes/metabox-options.php:61
|
469 |
+
msgid "After closing the box, how many days should it stay hidden?"
|
470 |
+
msgstr "Luego de cerrar la caja, ¿cuántos días debería estar oculta?"
|
471 |
+
|
472 |
+
#: admin/views/metaboxes/metabox-options.php:66
|
473 |
+
msgid "Enable test mode?"
|
474 |
+
msgstr " ¿Habilitar modo de prueba?"
|
475 |
+
|
476 |
+
#: admin/views/metaboxes/metabox-options.php:70
|
477 |
+
msgid ""
|
478 |
+
"If test mode is enabled, the box will show up regardless of whether a cookie "
|
479 |
+
"has been set. (To admins only)"
|
480 |
+
msgstr ""
|
481 |
+
"el modo de prueba está habilitado, la caja se va a mostrar no importa si la "
|
482 |
+
"cookie ha sido enviada. (Para administradores solamente)"
|
483 |
+
|
484 |
+
#: admin/views/metaboxes/metabox-options.php:74
|
485 |
+
msgid "Close on conversion?"
|
486 |
+
msgstr ""
|
487 |
+
|
488 |
+
#: admin/views/metaboxes/metabox-options.php:78
|
489 |
+
msgid ""
|
490 |
+
"If you have a form or social shortcode, by default popup will close on "
|
491 |
+
"submission/conversion"
|
492 |
+
msgstr ""
|
493 |
+
|
494 |
+
#: admin/views/metaboxes/metabox-options.php:82
|
495 |
+
msgid "Show powered by link?"
|
496 |
+
msgstr ""
|
497 |
+
|
498 |
+
#: admin/views/metaboxes/metabox-options.php:86
|
499 |
+
#, php-format
|
500 |
+
msgid ""
|
501 |
+
"Shows a \"powered by\" link below your popup. If your affiliate link is set "
|
502 |
+
"in the <a href=\"%s\">settings</a>, it will be used."
|
503 |
+
msgstr ""
|
504 |
+
|
505 |
+
#: admin/views/metaboxes/metabox-options.php:91
|
506 |
+
msgid "Appearance"
|
507 |
+
msgstr "Apariencia"
|
508 |
+
|
509 |
+
#: admin/views/metaboxes/metabox-options.php:95
|
510 |
+
msgid "Background opacity"
|
511 |
+
msgstr "Opacidad de fondo"
|
512 |
+
|
513 |
+
#: admin/views/metaboxes/metabox-options.php:98
|
514 |
+
msgid "Leave at 0 for no background. Max value is 1"
|
515 |
+
msgstr "dejarlo en 0 para no tener fondo. El valor máx es 1"
|
516 |
+
|
517 |
+
#: admin/views/metaboxes/metabox-options.php:104
|
518 |
+
msgid "Background color"
|
519 |
+
msgstr "Color de fondo"
|
520 |
+
|
521 |
+
#: admin/views/metaboxes/metabox-options.php:108
|
522 |
+
msgid "Text color"
|
523 |
+
msgstr "Color de texto"
|
524 |
+
|
525 |
+
#: admin/views/metaboxes/metabox-options.php:112
|
526 |
+
msgid "Box width"
|
527 |
+
msgstr "Ancho de la caja"
|
528 |
+
|
529 |
+
#: admin/views/metaboxes/metabox-options.php:118
|
530 |
+
msgid "Border color"
|
531 |
+
msgstr "Color de borde"
|
532 |
+
|
533 |
+
#: admin/views/metaboxes/metabox-options.php:122
|
534 |
+
msgid "Border width"
|
535 |
+
msgstr "Color de borde"
|
536 |
+
|
537 |
+
#: admin/views/metaboxes/metabox-premium.php:16
|
538 |
+
msgid ""
|
539 |
+
"Take the best WordPress Popups plugin to the next level with Popups Premium "
|
540 |
+
"extension."
|
541 |
+
msgstr ""
|
542 |
+
"Obtenga el mejor plugin de Popups de WordPress al siguiente nivel con la "
|
543 |
+
"extensión Popups Premium."
|
544 |
+
|
545 |
+
#: admin/views/metaboxes/metabox-premium.php:17
|
546 |
+
msgid "Popups Premium Features:"
|
547 |
+
msgstr "Características de Popups Premium:"
|
548 |
+
|
549 |
+
#: admin/views/metaboxes/metabox-premium.php:19
|
550 |
+
msgid "Beautiful optin forms for popular mail providers"
|
551 |
+
msgstr ""
|
552 |
+
|
553 |
+
#: admin/views/metaboxes/metabox-premium.php:20
|
554 |
+
msgid "Currently supporting MailChimp, Aweber, Postmatic, Mailpoet"
|
555 |
+
msgstr ""
|
556 |
+
|
557 |
+
#: admin/views/metaboxes/metabox-premium.php:21
|
558 |
+
msgid ""
|
559 |
+
"Track impressions and Conversions of social likes and forms submissions like "
|
560 |
+
"Contact Form 7, Gravity forms, etc"
|
561 |
+
msgstr ""
|
562 |
+
|
563 |
+
#: admin/views/metaboxes/metabox-premium.php:22
|
564 |
+
msgid "Track impressions and Conversions also in Google Analytics"
|
565 |
+
msgstr "Track impressions and Conversions también en Google Analytics"
|
566 |
+
|
567 |
+
#: admin/views/metaboxes/metabox-premium.php:23
|
568 |
+
#: admin/views/metaboxes/metabox-premium.php:25
|
569 |
+
msgid "Exit Intent technology"
|
570 |
+
msgstr "Salir de la tecnología de Propósito"
|
571 |
+
|
572 |
+
#: admin/views/metaboxes/metabox-premium.php:24
|
573 |
+
msgid "8 New animations effects"
|
574 |
+
msgstr "8 efectos de nuevas animaciones"
|
575 |
+
|
576 |
+
#: admin/views/metaboxes/metabox-premium.php:26
|
577 |
+
msgid "New trigger methods"
|
578 |
+
msgstr " Nuevos métodos de desencadenamiento"
|
579 |
+
|
580 |
+
#: admin/views/metaboxes/metabox-premium.php:27
|
581 |
+
msgid "Timer for auto closing"
|
582 |
+
msgstr "Temporizador para auto cerrado"
|
583 |
+
|
584 |
+
#: admin/views/metaboxes/metabox-premium.php:28
|
585 |
+
msgid "Ability to disable close button"
|
586 |
+
msgstr "Habilidad para deshabilitar el botón de cerrado"
|
587 |
+
|
588 |
+
#: admin/views/metaboxes/metabox-premium.php:29
|
589 |
+
msgid ""
|
590 |
+
"Ability to disable Advanced close methods like esc or clicking outside of "
|
591 |
+
"the popup"
|
592 |
+
msgstr ""
|
593 |
+
"Habilidad para deshabilitar métodos de cerrado Avanzados como esc o "
|
594 |
+
"haciendo clic fuera del popup"
|
595 |
+
|
596 |
+
#: admin/views/metaboxes/metabox-premium.php:30
|
597 |
+
msgid "Premium support"
|
598 |
+
msgstr "Soporte Premium"
|
599 |
+
|
600 |
+
#: admin/views/metaboxes/metabox-premium.php:34
|
601 |
+
msgid "Buy Now!"
|
602 |
+
msgstr "¡Comprar Ahora!"
|
603 |
+
|
604 |
+
#: admin/views/metaboxes/metabox-rules.php:19
|
605 |
+
msgid "Rules"
|
606 |
+
msgstr "Reglas"
|
607 |
+
|
608 |
+
#: admin/views/metaboxes/metabox-rules.php:20
|
609 |
+
msgid "Create a set of rules to determine where the popup will show"
|
610 |
+
msgstr ""
|
611 |
+
"Crear un grupo de reglas para determinar dónde el popup se va a mostrar"
|
612 |
+
|
613 |
+
#: admin/views/metaboxes/metabox-rules.php:31
|
614 |
+
msgid "Show this popup if"
|
615 |
+
msgstr "Mostrar este popup si"
|
616 |
+
|
617 |
+
#: admin/views/metaboxes/metabox-rules.php:61
|
618 |
+
msgid "is equal to"
|
619 |
+
msgstr "es igual a"
|
620 |
+
|
621 |
+
#: admin/views/metaboxes/metabox-rules.php:62
|
622 |
+
msgid "is not equal to"
|
623 |
+
msgstr "no es igual a "
|
624 |
+
|
625 |
+
#: admin/views/metaboxes/metabox-rules.php:93
|
626 |
+
msgid "and"
|
627 |
+
msgstr "y"
|
628 |
+
|
629 |
+
#: admin/views/metaboxes/metabox-rules.php:108
|
630 |
+
msgid "Add rule group"
|
631 |
+
msgstr "Adicionar grupo de regla"
|
632 |
+
|
633 |
+
#: admin/views/metaboxes/metabox-support.php:6
|
634 |
+
#, php-format
|
635 |
+
msgid "You are using Popups plugin v%s"
|
636 |
+
msgstr "Usted está usando el plugin Popups v%s"
|
637 |
+
|
638 |
+
#: admin/views/metaboxes/metabox-support.php:7
|
639 |
+
#, php-format
|
640 |
+
msgid ""
|
641 |
+
"If you need support please go to the WordPress.org <a href=\"%s\">support "
|
642 |
+
"forums</a>"
|
643 |
+
msgstr ""
|
644 |
+
"Si usted necesita soporte por favor vaya a <a href=\"%s\">los foros de "
|
645 |
+
"soporte</a> de WordPress.org"
|
646 |
+
|
647 |
+
#: admin/views/settings-page.php:17
|
648 |
+
msgid "Affiliate link"
|
649 |
+
msgstr ""
|
650 |
+
|
651 |
+
#: admin/views/settings-page.php:20
|
652 |
+
#, php-format
|
653 |
+
msgid ""
|
654 |
+
"You can earn money by promoting the plugin! Join <a href=\"%s\">our "
|
655 |
+
"affiliate program</a> and paste your affiliate link here to earn 35% in "
|
656 |
+
"commissions . Once entered, it will replace the default \"Powered by\" on "
|
657 |
+
"the popups."
|
658 |
+
msgstr ""
|
659 |
+
|
660 |
+
#: admin/views/settings-page.php:24
|
661 |
+
msgid "Ajax mode?"
|
662 |
+
msgstr "¿Modo Ajax?"
|
663 |
+
|
664 |
+
#: admin/views/settings-page.php:27
|
665 |
+
msgid ""
|
666 |
+
"Load popups using ajax. Compatible with cache plugins, but might not work "
|
667 |
+
"with all plugins"
|
668 |
+
msgstr ""
|
669 |
+
"Cargar popups usando ajax. Compatible con plugins de caché, pero puede no "
|
670 |
+
"funcionar con todos los plugins"
|
671 |
+
|
672 |
+
#: admin/views/settings-page.php:32
|
673 |
+
msgid "Enable Debug mode?"
|
674 |
+
msgstr "¿Habilitar modo Debug?"
|
675 |
+
|
676 |
+
#: admin/views/settings-page.php:35
|
677 |
+
msgid "Will use uncompressed js"
|
678 |
+
msgstr "Va a usar js descomprimido"
|
679 |
+
|
680 |
+
#: admin/views/settings-page.php:40
|
681 |
+
msgid "Enable safe mode?"
|
682 |
+
msgstr "¿Habilitar modo seguro?"
|
683 |
+
|
684 |
+
#: admin/views/settings-page.php:43
|
685 |
+
msgid "Will move all popups to top of the screen."
|
686 |
+
msgstr "Moverá todos los popups hacia arriba de la pantalla."
|
687 |
+
|
688 |
+
#: admin/views/settings-page.php:48
|
689 |
+
msgid "Remove shortcodes style"
|
690 |
+
msgstr "Eliminar el estilo de los códigos cortos"
|
691 |
+
|
692 |
+
#: admin/views/settings-page.php:51
|
693 |
+
msgid ""
|
694 |
+
"By default the plugin will apply some style to shortcodes. Check here if you "
|
695 |
+
"want to manually style them"
|
696 |
+
msgstr ""
|
697 |
+
"Por defecto el plugin aplicará algún estilo a códigos cortos. Seleccione "
|
698 |
+
"aquí si quiere aplicarle el estilo manualmente"
|
699 |
+
|
700 |
+
#: admin/views/settings-page.php:56
|
701 |
+
msgid "Unload Facebook javascript"
|
702 |
+
msgstr "No cargar el javascript de Facebook"
|
703 |
+
|
704 |
+
#: admin/views/settings-page.php:59
|
705 |
+
msgid "If you use your own Facebook script, check this"
|
706 |
+
msgstr "Si usted usa su propio script de Facebook, seleccione aquí"
|
707 |
+
|
708 |
+
#: admin/views/settings-page.php:64
|
709 |
+
msgid "Unload Google javascript"
|
710 |
+
msgstr "No cargar javascript de Google"
|
711 |
+
|
712 |
+
#: admin/views/settings-page.php:67
|
713 |
+
msgid "If you use your own Google script, check this"
|
714 |
+
msgstr "Si usted usa su propio script de Google, seleccione aquí"
|
715 |
+
|
716 |
+
#: admin/views/settings-page.php:72
|
717 |
+
msgid "Unload Twitter javascript"
|
718 |
+
msgstr "No cargar javascript de Twitter"
|
719 |
+
|
720 |
+
#: admin/views/settings-page.php:75
|
721 |
+
msgid "If you use your own Twitter script, check this"
|
722 |
+
msgstr "Si usted usa su propio script de Twitter, seleccione aquí"
|
723 |
+
|
724 |
+
#: admin/views/settings-page.php:80
|
725 |
+
msgid "Save settings"
|
726 |
+
msgstr "Salvar ajustes"
|
727 |
+
|
728 |
+
#: includes/class-spu-helper.php:133
|
729 |
+
msgid "All Pages"
|
730 |
+
msgstr "Todas las Páginas"
|
731 |
+
|
732 |
+
#: includes/class-spu-helper.php:134
|
733 |
+
msgid "Front Page"
|
734 |
+
msgstr "Página Frontal"
|
735 |
+
|
736 |
+
#: includes/class-spu-helper.php:135
|
737 |
+
msgid "Posts Page"
|
738 |
+
msgstr "Página de Posts"
|
739 |
+
|
740 |
+
#: includes/class-spu-helper.php:136
|
741 |
+
msgid "Category Page"
|
742 |
+
msgstr "Página de Categoría"
|
743 |
+
|
744 |
+
#: includes/class-spu-helper.php:137
|
745 |
+
msgid "Archives Page"
|
746 |
+
msgstr "Página de Archivos"
|
747 |
+
|
748 |
+
#: includes/class-spu-helper.php:138
|
749 |
+
msgid "Top Level Page (parent of 0)"
|
750 |
+
msgstr "Página de Nivel Superior (padre de 0)"
|
751 |
+
|
752 |
+
#: includes/class-spu-helper.php:139
|
753 |
+
msgid "Parent Page (has children)"
|
754 |
+
msgstr "Página Padre (tiene hijos)"
|
755 |
+
|
756 |
+
#: includes/class-spu-helper.php:140
|
757 |
+
msgid "Child Page (has parent)"
|
758 |
+
msgstr "Página hija (tiene padre)"
|
759 |
+
|
760 |
+
#: includes/class-spu-helper.php:148
|
761 |
+
msgid "Default Template"
|
762 |
+
msgstr "Plantilla Por Defecto"
|
763 |
+
|
764 |
+
#: includes/class-spu-helper.php:221
|
765 |
+
msgid "Publish"
|
766 |
+
msgstr "Publicar"
|
767 |
+
|
768 |
+
#: includes/class-spu-helper.php:222
|
769 |
+
msgid "Pending Review"
|
770 |
+
msgstr "Revisión Pendiente"
|
771 |
+
|
772 |
+
#: includes/class-spu-helper.php:223
|
773 |
+
msgid "Draft"
|
774 |
+
msgstr "Borrador"
|
775 |
+
|
776 |
+
#: includes/class-spu-helper.php:224
|
777 |
+
msgid "Future"
|
778 |
+
msgstr "Futuro"
|
779 |
+
|
780 |
+
#: includes/class-spu-helper.php:225
|
781 |
+
msgid "Private"
|
782 |
+
msgstr "Privado"
|
783 |
+
|
784 |
+
#: includes/class-spu-helper.php:226
|
785 |
+
msgid "Revision"
|
786 |
+
msgstr "Revisión"
|
787 |
+
|
788 |
+
#: includes/class-spu-helper.php:227
|
789 |
+
msgid "Trash"
|
790 |
+
msgstr "Papelera"
|
791 |
+
|
792 |
+
#: includes/class-spu-helper.php:240
|
793 |
+
msgid "Super Admin"
|
794 |
+
msgstr "Super Admin"
|
795 |
+
|
796 |
+
#: includes/class-spu-helper.php:260
|
797 |
+
msgid "True"
|
798 |
+
msgstr "Verdadero"
|
799 |
+
|
800 |
+
#~ msgid "What's new"
|
801 |
+
#~ msgstr "Qué hay de nuevo"
|
802 |
+
|
803 |
+
#~ msgid "credits"
|
804 |
+
#~ msgstr "créditos"
|
805 |
+
|
806 |
+
#~ msgid "Like Facebook like box but for Twitter"
|
807 |
+
#~ msgstr "Caja de me gusta de Facebook pero para Twitter"
|
808 |
+
|
809 |
+
#~ msgid ""
|
810 |
+
#~ "Track impressions and Conversions of social likes/follow and forms "
|
811 |
+
#~ "submissions like Contact Form 7, Gravity forms, etc"
|
812 |
+
#~ msgstr ""
|
813 |
+
#~ "Track impressions and Conversions de likes/follow sociales y envíos de "
|
814 |
+
#~ "formas como Contact Form 7, Gravity forms, etc"
|
languages/popups-fr_FR .po
CHANGED
@@ -1,864 +1,864 @@
|
|
1 |
-
# Copyright (C) 2013 TODO
|
2 |
-
# This file is distributed under the same license as the TODO package.
|
3 |
-
msgid ""
|
4 |
-
msgstr ""
|
5 |
-
"Project-Id-Version: Popups\n"
|
6 |
-
"Report-Msgid-Bugs-To: http://wordpress.org/plugins/plugin-name\n"
|
7 |
-
"POT-Creation-Date: 2017-05-20 10:47+0200\n"
|
8 |
-
"PO-Revision-Date: 2017-05-21 18:21+0200\n"
|
9 |
-
"Language-Team: Timersys <info@timersys.com>\n"
|
10 |
-
"MIME-Version: 1.0\n"
|
11 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
-
"Content-Transfer-Encoding: 8bit\n"
|
13 |
-
"X-Generator: Poedit 2.0.2\n"
|
14 |
-
"X-Poedit-KeywordsList: __;_e;_n;_x;esc_html_e;esc_html__;esc_attr_e;"
|
15 |
-
"esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2\n"
|
16 |
-
"X-Poedit-Basepath: ..\n"
|
17 |
-
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
18 |
-
"Last-Translator: Hubert Desrues <hdesrues@icloud.com>\n"
|
19 |
-
"Language: fr_FR\n"
|
20 |
-
"X-Poedit-SearchPath-0: .\n"
|
21 |
-
|
22 |
-
#: admin/class-social-popup-admin.php:159
|
23 |
-
msgctxt "post type singular name"
|
24 |
-
msgid "Popups"
|
25 |
-
msgstr "Popups"
|
26 |
-
|
27 |
-
#: admin/class-social-popup-admin.php:160
|
28 |
-
msgctxt "admin menu"
|
29 |
-
msgid "Popups"
|
30 |
-
msgstr "Popups"
|
31 |
-
|
32 |
-
#: admin/class-social-popup-admin.php:161
|
33 |
-
msgctxt "add new on admin bar"
|
34 |
-
msgid "Popups"
|
35 |
-
msgstr "Popups"
|
36 |
-
|
37 |
-
#: admin/class-social-popup-admin.php:162
|
38 |
-
msgctxt "Popups"
|
39 |
-
msgid "Add New"
|
40 |
-
msgstr "Ajouter"
|
41 |
-
|
42 |
-
#: admin/class-social-popup-admin.php:163
|
43 |
-
msgid "Add New Popups"
|
44 |
-
msgstr "Ajouter nouveaux Popups"
|
45 |
-
|
46 |
-
#: admin/class-social-popup-admin.php:164
|
47 |
-
msgid "New Popups"
|
48 |
-
msgstr "Nouveau Popups"
|
49 |
-
|
50 |
-
#: admin/class-social-popup-admin.php:165
|
51 |
-
msgid "Edit Popups"
|
52 |
-
msgstr "Éditer"
|
53 |
-
|
54 |
-
#: admin/class-social-popup-admin.php:166
|
55 |
-
msgid "View Popups"
|
56 |
-
msgstr "Visualiser"
|
57 |
-
|
58 |
-
#: admin/class-social-popup-admin.php:167
|
59 |
-
msgid "All Popups"
|
60 |
-
msgstr "Tous les Popups"
|
61 |
-
|
62 |
-
#: admin/class-social-popup-admin.php:168
|
63 |
-
msgid "Search Popups"
|
64 |
-
msgstr "Rechercher des Popups"
|
65 |
-
|
66 |
-
#: admin/class-social-popup-admin.php:169
|
67 |
-
msgid "Parent Popups:"
|
68 |
-
msgstr "Popups parent :"
|
69 |
-
|
70 |
-
#: admin/class-social-popup-admin.php:170
|
71 |
-
msgid "No Popups found."
|
72 |
-
msgstr "Pas de Popups trouvé."
|
73 |
-
|
74 |
-
#: admin/class-social-popup-admin.php:171
|
75 |
-
msgid "No Popups found in Trash."
|
76 |
-
msgstr "Pas de Popups dans la corbeille."
|
77 |
-
|
78 |
-
#: admin/class-social-popup-admin.php:212
|
79 |
-
msgid "Settings"
|
80 |
-
msgstr "Réglages"
|
81 |
-
|
82 |
-
#: admin/class-social-popup-admin.php:260
|
83 |
-
msgid "Popups Premium"
|
84 |
-
msgstr "Popups Premium"
|
85 |
-
|
86 |
-
#: admin/class-social-popup-admin.php:271
|
87 |
-
msgid "PopUp Shortcodes"
|
88 |
-
msgstr "Shortcodes Popups"
|
89 |
-
|
90 |
-
#: admin/class-social-popup-admin.php:280
|
91 |
-
msgid "PopUp Appearance"
|
92 |
-
msgstr "Apparence"
|
93 |
-
|
94 |
-
#: admin/class-social-popup-admin.php:289
|
95 |
-
msgid "PopUp Display Rules"
|
96 |
-
msgstr "Règles d’affichage"
|
97 |
-
|
98 |
-
#: admin/class-social-popup-admin.php:298
|
99 |
-
msgid "Display Options"
|
100 |
-
msgstr "Options de visualisation"
|
101 |
-
|
102 |
-
#: admin/class-social-popup-admin.php:307
|
103 |
-
msgid "Need support?"
|
104 |
-
msgstr "Besoin de support ?"
|
105 |
-
|
106 |
-
#: admin/class-social-popup-admin.php:315
|
107 |
-
msgid "Donate & support"
|
108 |
-
msgstr "Faites un don de soutien"
|
109 |
-
|
110 |
-
#: admin/class-social-popup-admin.php:323
|
111 |
-
msgid "About the developer"
|
112 |
-
msgstr "A propos du développeur"
|
113 |
-
|
114 |
-
#: admin/class-social-popup-admin.php:589
|
115 |
-
#: admin/views/metaboxes/metabox-rules.php:33
|
116 |
-
#: admin/views/metaboxes/metabox-rules.php:106
|
117 |
-
msgid "or"
|
118 |
-
msgstr "ou"
|
119 |
-
|
120 |
-
#: admin/class-social-popup-admin.php:616
|
121 |
-
msgid "Add a Popup"
|
122 |
-
msgstr "Ajouter un Popup"
|
123 |
-
|
124 |
-
#: admin/class-social-popup-admin.php:740
|
125 |
-
msgid "User"
|
126 |
-
msgstr "Utilisateur"
|
127 |
-
|
128 |
-
#: admin/class-social-popup-admin.php:741
|
129 |
-
msgid "User role"
|
130 |
-
msgstr "Rôle de l’utilisateur"
|
131 |
-
|
132 |
-
#: admin/class-social-popup-admin.php:742
|
133 |
-
msgid "User is logged"
|
134 |
-
msgstr "Utilisateur inscrit"
|
135 |
-
|
136 |
-
#: admin/class-social-popup-admin.php:743
|
137 |
-
msgid "User never left a comment"
|
138 |
-
msgstr "Utilisateur n’ayant jamais laissé de commentaire"
|
139 |
-
|
140 |
-
#: admin/class-social-popup-admin.php:744
|
141 |
-
msgid "User came via a search engine"
|
142 |
-
msgstr "Utilisateur venu par un moteur de recherche"
|
143 |
-
|
144 |
-
#: admin/class-social-popup-admin.php:745
|
145 |
-
msgid "User did not arrive via another page on your site"
|
146 |
-
msgstr "Utilisateur ne venant pas d’une autre page de votre site"
|
147 |
-
|
148 |
-
#: admin/class-social-popup-admin.php:747
|
149 |
-
#: admin/class-social-popup-admin.php:748
|
150 |
-
msgid "Post"
|
151 |
-
msgstr "Article"
|
152 |
-
|
153 |
-
#: admin/class-social-popup-admin.php:749
|
154 |
-
msgid "Post ID"
|
155 |
-
msgstr "ID de l’article"
|
156 |
-
|
157 |
-
#: admin/class-social-popup-admin.php:750
|
158 |
-
msgid "Post Type"
|
159 |
-
msgstr "Type d’articles"
|
160 |
-
|
161 |
-
#: admin/class-social-popup-admin.php:751
|
162 |
-
msgid "Post Category"
|
163 |
-
msgstr "Catégorie d’articles"
|
164 |
-
|
165 |
-
#: admin/class-social-popup-admin.php:752
|
166 |
-
msgid "Post Format"
|
167 |
-
msgstr "Format d’articles"
|
168 |
-
|
169 |
-
#: admin/class-social-popup-admin.php:753
|
170 |
-
msgid "Post Status"
|
171 |
-
msgstr "Statut d’articles"
|
172 |
-
|
173 |
-
#: admin/class-social-popup-admin.php:754
|
174 |
-
msgid "Post Taxonomy"
|
175 |
-
msgstr "Taxynomie d’articles"
|
176 |
-
|
177 |
-
#: admin/class-social-popup-admin.php:756
|
178 |
-
#: admin/class-social-popup-admin.php:757
|
179 |
-
msgid "Page"
|
180 |
-
msgstr "Page"
|
181 |
-
|
182 |
-
#: admin/class-social-popup-admin.php:758
|
183 |
-
msgid "Page Type"
|
184 |
-
msgstr "Type de pages"
|
185 |
-
|
186 |
-
#: admin/class-social-popup-admin.php:759
|
187 |
-
msgid "Page Parent"
|
188 |
-
msgstr "Parent de pages"
|
189 |
-
|
190 |
-
#: admin/class-social-popup-admin.php:760
|
191 |
-
msgid "Page Template"
|
192 |
-
msgstr "Modèle de pages"
|
193 |
-
|
194 |
-
#: admin/class-social-popup-admin.php:762
|
195 |
-
msgid "Other"
|
196 |
-
msgstr "Autres"
|
197 |
-
|
198 |
-
#: admin/class-social-popup-admin.php:763
|
199 |
-
msgid "Referrer"
|
200 |
-
msgstr "Référant"
|
201 |
-
|
202 |
-
#: admin/class-social-popup-admin.php:764
|
203 |
-
msgid "Mobile Phone"
|
204 |
-
msgstr "Téléphone mobile"
|
205 |
-
|
206 |
-
#: admin/class-social-popup-admin.php:765
|
207 |
-
msgid "Tablet"
|
208 |
-
msgstr "Tablette"
|
209 |
-
|
210 |
-
#: admin/class-social-popup-admin.php:813
|
211 |
-
msgid "ID"
|
212 |
-
msgstr "ID"
|
213 |
-
|
214 |
-
#: admin/includes/class-spu-notices.php:30
|
215 |
-
#, php-format
|
216 |
-
msgid ""
|
217 |
-
"We noticed that you have been using our plugin for a while and we would like "
|
218 |
-
"to ask you a little favour. If you are happy with it and can take a minute "
|
219 |
-
"please <a href=\"%s\" target=\"_blank\">leave a nice review</a> on "
|
220 |
-
"WordPress. It will be a tremendous help for us!"
|
221 |
-
msgstr ""
|
222 |
-
"Nous avons remarqué que vous avez utilisé notre plugin pendant un certain "
|
223 |
-
"temps et nous vous demandons une faveur. Si vous êtes satisfait de ce plugin "
|
224 |
-
"et si vous avez une minute, veuillez <a href=\"%s\" target=\"_blank\"> "
|
225 |
-
"laisser une bonne critique </a> sur WordPress. Ce sera une aide formidable "
|
226 |
-
"pour nous!"
|
227 |
-
|
228 |
-
#: admin/includes/class-spu-notices.php:32
|
229 |
-
#, php-format
|
230 |
-
msgid "<a href=\"%s\" target=\"_blank\">Leave a nice review</a>"
|
231 |
-
msgstr "<a href=\"%s\" target=\"_blank\">Laissez une bonne appréciation</a>"
|
232 |
-
|
233 |
-
#: admin/includes/class-spu-notices.php:33
|
234 |
-
#, php-format
|
235 |
-
msgid "<a href=\"%s\">No, thanks</a>"
|
236 |
-
msgstr "<a href=\"%s\">Non, merci</a>"
|
237 |
-
|
238 |
-
#: admin/views/metaboxes/metabox-appearance.php:10
|
239 |
-
msgid "Background opacity"
|
240 |
-
msgstr "Opacité du fond"
|
241 |
-
|
242 |
-
#: admin/views/metaboxes/metabox-appearance.php:12
|
243 |
-
msgid "Leave at 0 for no background. Max value is 1"
|
244 |
-
msgstr "Mettre 0 pour aucune opacité. Valeur maximale 1"
|
245 |
-
|
246 |
-
#: admin/views/metaboxes/metabox-appearance.php:18
|
247 |
-
msgid "Background color"
|
248 |
-
msgstr "Couleur du fond"
|
249 |
-
|
250 |
-
#: admin/views/metaboxes/metabox-appearance.php:22
|
251 |
-
msgid "Text color"
|
252 |
-
msgstr "Couleur du texte"
|
253 |
-
|
254 |
-
#: admin/views/metaboxes/metabox-appearance.php:26
|
255 |
-
msgid "Box width"
|
256 |
-
msgstr "Largeur du popup"
|
257 |
-
|
258 |
-
#: admin/views/metaboxes/metabox-appearance.php:32
|
259 |
-
msgid "Border color"
|
260 |
-
msgstr "Couleur du cadre"
|
261 |
-
|
262 |
-
#: admin/views/metaboxes/metabox-appearance.php:36
|
263 |
-
msgid "Border width"
|
264 |
-
msgstr "Épaisseur du cadre"
|
265 |
-
|
266 |
-
#: admin/views/metaboxes/metabox-donate.php:6
|
267 |
-
msgid "If you like this plugin, consider supporting it by donating."
|
268 |
-
msgstr "Si vous aimez ce plugin, manifestez-le par une donation."
|
269 |
-
|
270 |
-
#: admin/views/metaboxes/metabox-donate.php:8
|
271 |
-
msgid "Donate with PayPal"
|
272 |
-
msgstr "Donnez avec PayPal"
|
273 |
-
|
274 |
-
#: admin/views/metaboxes/metabox-donate.php:10
|
275 |
-
msgid "Some other ways to support this plugin"
|
276 |
-
msgstr "Quelques autres façons de supporter ce plugin"
|
277 |
-
|
278 |
-
#: admin/views/metaboxes/metabox-donate.php:12
|
279 |
-
msgid "Leave a ★★★★★ review on WordPress.org"
|
280 |
-
msgstr ""
|
281 |
-
"Laissez une ★★★★★ appréciation sur WordPress."
|
282 |
-
"org"
|
283 |
-
|
284 |
-
#: admin/views/metaboxes/metabox-donate.php:13
|
285 |
-
msgid "Write about Popups on your blog"
|
286 |
-
msgstr "Ecrivez un article à propos de Popups dans votre blog"
|
287 |
-
|
288 |
-
#: admin/views/metaboxes/metabox-donate.php:14
|
289 |
-
msgid "Tweet about Popups"
|
290 |
-
msgstr "Tweetez à propos de Popups"
|
291 |
-
|
292 |
-
#: admin/views/metaboxes/metabox-donate.php:15
|
293 |
-
msgid "Vote \"works\" on the WordPress.org plugin page"
|
294 |
-
msgstr "Votez « works » sur la page plugin de WordPress.org"
|
295 |
-
|
296 |
-
#: admin/views/metaboxes/metabox-help.php:6
|
297 |
-
msgid ""
|
298 |
-
"You have some social shortcodes to use that will print a Facebook like, a "
|
299 |
-
"Google+ Follow and a Twitter follow. Check the available options and "
|
300 |
-
"<strong>configure them with your social accounts</strong>:"
|
301 |
-
msgstr ""
|
302 |
-
"Vous avez des shortcodes pour imprimer des « like » dans Facebook, des "
|
303 |
-
"« Follow » dans Google+ ou dans Twitter. Vérifiez les options disponibles et "
|
304 |
-
"<strong> configurez-les avec vos comptes sociaux </strong> :"
|
305 |
-
|
306 |
-
#: admin/views/metaboxes/metabox-help.php:8
|
307 |
-
msgid "Facebook Page"
|
308 |
-
msgstr "Page Facebook"
|
309 |
-
|
310 |
-
#: admin/views/metaboxes/metabox-help.php:12
|
311 |
-
msgid "View Facebook Page Options"
|
312 |
-
msgstr "Voir les options pour les pages Facebook"
|
313 |
-
|
314 |
-
#: admin/views/metaboxes/metabox-help.php:14
|
315 |
-
#: admin/views/metaboxes/metabox-help.php:27
|
316 |
-
msgid "Your Facebook page url"
|
317 |
-
msgstr "L’url de votre page Facebook"
|
318 |
-
|
319 |
-
#: admin/views/metaboxes/metabox-help.php:15
|
320 |
-
msgid "Your page name"
|
321 |
-
msgstr "Le nom de votre page"
|
322 |
-
|
323 |
-
#: admin/views/metaboxes/metabox-help.php:16
|
324 |
-
msgid "true|false <b>Default value:</b> true"
|
325 |
-
msgstr "vrai|faux <b>valeur par défaut :</b> vrai"
|
326 |
-
|
327 |
-
#: admin/views/metaboxes/metabox-help.php:17
|
328 |
-
msgid "true|false <b>Default value:</b> false"
|
329 |
-
msgstr "vrai|faux <b>valeur par défaut :</b> faux"
|
330 |
-
|
331 |
-
#: admin/views/metaboxes/metabox-help.php:18
|
332 |
-
msgid "number <b>Default value:</b> 500"
|
333 |
-
msgstr "nombre <b>Valeur par défaut :</b> 500"
|
334 |
-
|
335 |
-
#: admin/views/metaboxes/metabox-help.php:21
|
336 |
-
msgid "Facebook Button"
|
337 |
-
msgstr "Bouton Facebook"
|
338 |
-
|
339 |
-
#: admin/views/metaboxes/metabox-help.php:25
|
340 |
-
msgid "View Facebook Options"
|
341 |
-
msgstr "Voir les options Facebook"
|
342 |
-
|
343 |
-
#: admin/views/metaboxes/metabox-help.php:28
|
344 |
-
msgid "standard, box_count, button <b>Default value:</b> button_count"
|
345 |
-
msgstr "standard, box_count, bouton <b> Valeur par défaut: </b> button_count"
|
346 |
-
|
347 |
-
#: admin/views/metaboxes/metabox-help.php:29
|
348 |
-
#: admin/views/metaboxes/metabox-help.php:30
|
349 |
-
msgid "true <b>Default value:</b> false"
|
350 |
-
msgstr "vrai <b>Valeur par défaut :</b> faux"
|
351 |
-
|
352 |
-
#: admin/views/metaboxes/metabox-help.php:31
|
353 |
-
msgid "recommend <b>Default value:</b> like"
|
354 |
-
msgstr "recommander <b>Valeur par défaut:</b> aimer"
|
355 |
-
|
356 |
-
#: admin/views/metaboxes/metabox-help.php:32
|
357 |
-
msgid "number <b>Default value:</b>"
|
358 |
-
msgstr "nombre <b>Valeur par défaut :</b>"
|
359 |
-
|
360 |
-
#: admin/views/metaboxes/metabox-help.php:34
|
361 |
-
msgid "Google+ Button"
|
362 |
-
msgstr "Bouton Google+"
|
363 |
-
|
364 |
-
#: admin/views/metaboxes/metabox-help.php:38
|
365 |
-
msgid "View Google+ Options"
|
366 |
-
msgstr "Voir les options Google+"
|
367 |
-
|
368 |
-
#: admin/views/metaboxes/metabox-help.php:40
|
369 |
-
msgid "Your Google+ url"
|
370 |
-
msgstr "Votre url Google+"
|
371 |
-
|
372 |
-
#: admin/views/metaboxes/metabox-help.php:41
|
373 |
-
msgid "small, standard, tall <b>Default value:</b> medium"
|
374 |
-
msgstr "petit, standard, grand <b>Valeur par défaut:</b> médium"
|
375 |
-
|
376 |
-
#: admin/views/metaboxes/metabox-help.php:42
|
377 |
-
msgid "inline, none <b>Default value:</b> bubble"
|
378 |
-
msgstr "en ligne, non <b>Valeur par défaut :</b> bulle"
|
379 |
-
|
380 |
-
#: admin/views/metaboxes/metabox-help.php:44
|
381 |
-
msgid "Twitter Button"
|
382 |
-
msgstr "Bouton twitter"
|
383 |
-
|
384 |
-
#: admin/views/metaboxes/metabox-help.php:48
|
385 |
-
msgid "View Twitter Options"
|
386 |
-
msgstr "Voir les options twitter"
|
387 |
-
|
388 |
-
#: admin/views/metaboxes/metabox-help.php:50
|
389 |
-
msgid "Your Twitter user <b>Default chifliiiii</b>"
|
390 |
-
msgstr "Votre nom d’utilisateur Twitter <b>Par défaut chifliiiii</b>"
|
391 |
-
|
392 |
-
#: admin/views/metaboxes/metabox-help.php:51
|
393 |
-
msgid "false <b>Default value:</b> true"
|
394 |
-
msgstr "faux <b>valeur par défaut:</b> vrai"
|
395 |
-
|
396 |
-
#: admin/views/metaboxes/metabox-help.php:52
|
397 |
-
msgid "large <b>Default value:</b> \"\""
|
398 |
-
msgstr "grans <b>Valeur par défaut :</b> \"\""
|
399 |
-
|
400 |
-
#: admin/views/metaboxes/metabox-help.php:55
|
401 |
-
msgid "Other available Shortcodes:"
|
402 |
-
msgstr "Autres Shortcodes utilisables :"
|
403 |
-
|
404 |
-
#: admin/views/metaboxes/metabox-help.php:56
|
405 |
-
msgid "Close Button"
|
406 |
-
msgstr "Bouton de fermeture"
|
407 |
-
|
408 |
-
#: admin/views/metaboxes/metabox-help.php:60
|
409 |
-
msgid "View Close shortcode Options"
|
410 |
-
msgstr "Voir les options shortcode de fermeture"
|
411 |
-
|
412 |
-
#: admin/views/metaboxes/metabox-help.php:62
|
413 |
-
msgid "Pass a custom class to style your button"
|
414 |
-
msgstr "Envoie une classe personnalisée pour styler votre bouton"
|
415 |
-
|
416 |
-
#: admin/views/metaboxes/metabox-help.php:63
|
417 |
-
msgid "Button label - <b>Default value:</b> Close"
|
418 |
-
msgstr "Nom du bouton - <b>valeur par défaut :</b> Fermer"
|
419 |
-
|
420 |
-
#: admin/views/metaboxes/metabox-help.php:64
|
421 |
-
msgid "left, right, center, none - <b>Default value:</b> center"
|
422 |
-
msgstr "gauche, droite, centré, aucun - <b>valeur par défaut:</b> centré"
|
423 |
-
|
424 |
-
#: admin/views/metaboxes/metabox-links.php:6
|
425 |
-
msgid "My name is"
|
426 |
-
msgstr "Mon nom est"
|
427 |
-
|
428 |
-
#: admin/views/metaboxes/metabox-links.php:6
|
429 |
-
msgid "I develop WordPress plugins and themes."
|
430 |
-
msgstr "Je développe des thèmes et des plugins pour WordPress."
|
431 |
-
|
432 |
-
#: admin/views/metaboxes/metabox-links.php:7
|
433 |
-
#, php-format
|
434 |
-
msgid ""
|
435 |
-
"Take a look at my <a href=\"%s\">site</a> to see my other plugins or hire "
|
436 |
-
"me. Subscribe to get updates!"
|
437 |
-
msgstr ""
|
438 |
-
"Jetez un coup d’œil à mon <a href=\"%s\">site</a> pour découvrir mes autres "
|
439 |
-
"plugins ou me passer une commande. Inscrivez-vous pour obtenir des mises à "
|
440 |
-
"jour !"
|
441 |
-
|
442 |
-
#: admin/views/metaboxes/metabox-links.php:8
|
443 |
-
msgid "Other plugins I built:"
|
444 |
-
msgstr "Mes autres plugins :"
|
445 |
-
|
446 |
-
#: admin/views/metaboxes/metabox-links.php:10
|
447 |
-
msgid "Install multiple plugins and create collections"
|
448 |
-
msgstr "Installez de multiples plugins et créez des ensembles"
|
449 |
-
|
450 |
-
#: admin/views/metaboxes/metabox-links.php:11
|
451 |
-
msgid "Geotarget your content"
|
452 |
-
msgstr "Ciblez géographiquement votre contenu"
|
453 |
-
|
454 |
-
#: admin/views/metaboxes/metabox-links.php:12
|
455 |
-
msgid "Invite your network friends and import contacts"
|
456 |
-
msgstr "Invitez vos amis et vos contacts importés"
|
457 |
-
|
458 |
-
#: admin/views/metaboxes/metabox-options.php:9
|
459 |
-
msgid "Box Position"
|
460 |
-
msgstr "Position du popup"
|
461 |
-
|
462 |
-
#: admin/views/metaboxes/metabox-options.php:12
|
463 |
-
msgid "Centered"
|
464 |
-
msgstr "Centré"
|
465 |
-
|
466 |
-
#: admin/views/metaboxes/metabox-options.php:13
|
467 |
-
msgid "Top Left"
|
468 |
-
msgstr "En haut à gauche"
|
469 |
-
|
470 |
-
#: admin/views/metaboxes/metabox-options.php:14
|
471 |
-
msgid "Top Right"
|
472 |
-
msgstr "En haut à droite"
|
473 |
-
|
474 |
-
#: admin/views/metaboxes/metabox-options.php:15
|
475 |
-
msgid "Bottom Left"
|
476 |
-
msgstr "En bas à gauche"
|
477 |
-
|
478 |
-
#: admin/views/metaboxes/metabox-options.php:16
|
479 |
-
msgid "Bottom Right"
|
480 |
-
msgstr "En bas à droite"
|
481 |
-
|
482 |
-
#: admin/views/metaboxes/metabox-options.php:23
|
483 |
-
msgid "Trigger action"
|
484 |
-
msgstr "Action de déclenchement"
|
485 |
-
|
486 |
-
#: admin/views/metaboxes/metabox-options.php:27
|
487 |
-
msgid "seconds after page load"
|
488 |
-
msgstr "secondes après chargement de la page"
|
489 |
-
|
490 |
-
#: admin/views/metaboxes/metabox-options.php:28
|
491 |
-
msgid "of page height"
|
492 |
-
msgstr "de hauteur de page"
|
493 |
-
|
494 |
-
#: admin/views/metaboxes/metabox-options.php:38
|
495 |
-
msgid "Auto-hide?"
|
496 |
-
msgstr "Auto-disparition ?"
|
497 |
-
|
498 |
-
#: admin/views/metaboxes/metabox-options.php:40
|
499 |
-
#: admin/views/metaboxes/metabox-options.php:68
|
500 |
-
#: admin/views/metaboxes/metabox-options.php:76
|
501 |
-
#: admin/views/metaboxes/metabox-options.php:84
|
502 |
-
msgid "Yes"
|
503 |
-
msgstr "Oui"
|
504 |
-
|
505 |
-
#: admin/views/metaboxes/metabox-options.php:41
|
506 |
-
#: admin/views/metaboxes/metabox-options.php:69
|
507 |
-
#: admin/views/metaboxes/metabox-options.php:77
|
508 |
-
#: admin/views/metaboxes/metabox-options.php:85
|
509 |
-
msgid "No"
|
510 |
-
msgstr "Non"
|
511 |
-
|
512 |
-
#: admin/views/metaboxes/metabox-options.php:42
|
513 |
-
msgid "Hide box again when visitors scroll back up?"
|
514 |
-
msgstr "Cacher le popup quand les visiteurs provoquent un défilement ?"
|
515 |
-
|
516 |
-
#: admin/views/metaboxes/metabox-options.php:46
|
517 |
-
msgid "Animation"
|
518 |
-
msgstr "Animation"
|
519 |
-
|
520 |
-
#: admin/views/metaboxes/metabox-options.php:49
|
521 |
-
msgid "Fade In"
|
522 |
-
msgstr "Par fondu"
|
523 |
-
|
524 |
-
#: admin/views/metaboxes/metabox-options.php:50
|
525 |
-
msgid "Slide In"
|
526 |
-
msgstr "Par glissement"
|
527 |
-
|
528 |
-
#: admin/views/metaboxes/metabox-options.php:53
|
529 |
-
msgid "Slide will only apply when popup is on the corners"
|
530 |
-
msgstr "Le glissement ne se fait que si le popup est dans un coin"
|
531 |
-
|
532 |
-
#: admin/views/metaboxes/metabox-options.php:58
|
533 |
-
msgid "Cookie expiration days"
|
534 |
-
msgstr "Durée du cookie en jours"
|
535 |
-
|
536 |
-
#: admin/views/metaboxes/metabox-options.php:61
|
537 |
-
msgid "After closing the box, how many days should it stay hidden?"
|
538 |
-
msgstr ""
|
539 |
-
"Après fermeture du popup pendant combien de jours ne doit-il pas reparaître ?"
|
540 |
-
|
541 |
-
#: admin/views/metaboxes/metabox-options.php:66
|
542 |
-
msgid "Enable test mode?"
|
543 |
-
msgstr "Activer le mode test ?"
|
544 |
-
|
545 |
-
#: admin/views/metaboxes/metabox-options.php:70
|
546 |
-
msgid ""
|
547 |
-
"If test mode is enabled, the box will show up regardless of whether a cookie "
|
548 |
-
"has been set. (To admins only)"
|
549 |
-
msgstr ""
|
550 |
-
"Si le mode test est activé, le popup ne tiendra pas compte des consignes du "
|
551 |
-
"cookie. (Administrateurs seulement)"
|
552 |
-
|
553 |
-
#: admin/views/metaboxes/metabox-options.php:74
|
554 |
-
msgid "Close on conversion?"
|
555 |
-
msgstr "Fermer sur conversion ?"
|
556 |
-
|
557 |
-
#: admin/views/metaboxes/metabox-options.php:78
|
558 |
-
msgid ""
|
559 |
-
"If you have a form or social shortcode, by default popup will close on "
|
560 |
-
"submission/conversion"
|
561 |
-
msgstr ""
|
562 |
-
"Si vous avez un formulaire ou un shortcode de réseau social, par défaut le "
|
563 |
-
"popup se fermera sur soumission/conversion"
|
564 |
-
|
565 |
-
#: admin/views/metaboxes/metabox-options.php:82
|
566 |
-
msgid "Show powered by link?"
|
567 |
-
msgstr "Afficher un lien « powered by » ?"
|
568 |
-
|
569 |
-
#: admin/views/metaboxes/metabox-options.php:86
|
570 |
-
#, php-format
|
571 |
-
msgid ""
|
572 |
-
"Shows a \"powered by\" link below your popup. If your affiliate link is set "
|
573 |
-
"in the <a href=\"%s\">settings</a>, it will be used."
|
574 |
-
msgstr ""
|
575 |
-
"Afficher un lien « Powered by » sous votre popup. Si vous êtes affilié le "
|
576 |
-
"lien est mis dans <a href=\"%s\">réglages</a>, pour être utilisé."
|
577 |
-
|
578 |
-
#: admin/views/metaboxes/metabox-premium.php:16
|
579 |
-
msgid ""
|
580 |
-
"Take the best WordPress Popups plugin to the next level with Popups Premium "
|
581 |
-
"extension."
|
582 |
-
msgstr ""
|
583 |
-
"Avec l’extension Popups Premium pour WordPress choisissez le meilleur plugin."
|
584 |
-
|
585 |
-
#: admin/views/metaboxes/metabox-premium.php:17
|
586 |
-
msgid "Popups Premium Features:"
|
587 |
-
msgstr "Fonctionnalités de Popups Premium :"
|
588 |
-
|
589 |
-
#: admin/views/metaboxes/metabox-premium.php:19
|
590 |
-
msgid "Beautiful optin forms for popular mail providers"
|
591 |
-
msgstr ""
|
592 |
-
"Élégants formulaires de souscription pour les plus populaires distributeurs "
|
593 |
-
"de mails"
|
594 |
-
|
595 |
-
#: admin/views/metaboxes/metabox-premium.php:20
|
596 |
-
msgid "Currently supporting MailChimp, Aweber, Postmatic, Mailpoet"
|
597 |
-
msgstr "Supporte MailChimp, Aweber, Postmatic, Mailpoet"
|
598 |
-
|
599 |
-
#: admin/views/metaboxes/metabox-premium.php:21
|
600 |
-
msgid ""
|
601 |
-
"Track impressions and Conversions of social likes and forms submissions like "
|
602 |
-
"Contact Form 7, Gravity forms, etc"
|
603 |
-
msgstr ""
|
604 |
-
"Enregistre les impressions et conversions à partir des réseaux sociaux ou "
|
605 |
-
"des formulaires de soumission comme Contac Form 7, Gravity Forms etc"
|
606 |
-
|
607 |
-
#: admin/views/metaboxes/metabox-premium.php:22
|
608 |
-
msgid "Track impressions and Conversions also in Google Analytics"
|
609 |
-
msgstr "Enregistre aussi les impressions et conversion dans Google Analytics"
|
610 |
-
|
611 |
-
#: admin/views/metaboxes/metabox-premium.php:23
|
612 |
-
#: admin/views/metaboxes/metabox-premium.php:25
|
613 |
-
msgid "Exit Intent technology"
|
614 |
-
msgstr ""
|
615 |
-
"Intégration de « Exit Intent technology » pour suivre les mouvements de la "
|
616 |
-
"souris de l’utilisateur et prévoir sa sortie"
|
617 |
-
|
618 |
-
#: admin/views/metaboxes/metabox-premium.php:24
|
619 |
-
msgid "8 New animations effects"
|
620 |
-
msgstr "8 nouvelles animations"
|
621 |
-
|
622 |
-
#: admin/views/metaboxes/metabox-premium.php:26
|
623 |
-
msgid "New trigger methods"
|
624 |
-
msgstr "Nouvelles méthodes de déclenchement"
|
625 |
-
|
626 |
-
#: admin/views/metaboxes/metabox-premium.php:27
|
627 |
-
msgid "Timer for auto closing"
|
628 |
-
msgstr "Minuteur pour fermeture automatique"
|
629 |
-
|
630 |
-
#: admin/views/metaboxes/metabox-premium.php:28
|
631 |
-
msgid "Ability to disable close button"
|
632 |
-
msgstr "Possibilité de désactiver le bouton de fermeture"
|
633 |
-
|
634 |
-
#: admin/views/metaboxes/metabox-premium.php:29
|
635 |
-
msgid ""
|
636 |
-
"Ability to disable Advanced close methods like esc or clicking outside of "
|
637 |
-
"the popup"
|
638 |
-
msgstr ""
|
639 |
-
"Possibilité de désactiver les méthodes avances de fermeture comme esc ou "
|
640 |
-
"clic à l’extérieur du popup"
|
641 |
-
|
642 |
-
#: admin/views/metaboxes/metabox-premium.php:30
|
643 |
-
msgid "Premium support"
|
644 |
-
msgstr "Support Premium"
|
645 |
-
|
646 |
-
#: admin/views/metaboxes/metabox-premium.php:34
|
647 |
-
msgid "Buy Now!"
|
648 |
-
msgstr "Achetez maintenant !"
|
649 |
-
|
650 |
-
#: admin/views/metaboxes/metabox-rules.php:19
|
651 |
-
msgid "Rules"
|
652 |
-
msgstr "Règles"
|
653 |
-
|
654 |
-
#: admin/views/metaboxes/metabox-rules.php:20
|
655 |
-
msgid "Create a set of rules to determine where the popup will show"
|
656 |
-
msgstr ""
|
657 |
-
"Créez un ensemble de règles pour déterminer quand le popup doit apparaître"
|
658 |
-
|
659 |
-
#: admin/views/metaboxes/metabox-rules.php:31
|
660 |
-
msgid "Show this popup if"
|
661 |
-
msgstr "Affichez le popup si"
|
662 |
-
|
663 |
-
#: admin/views/metaboxes/metabox-rules.php:61
|
664 |
-
msgid "is equal to"
|
665 |
-
msgstr "est égal à"
|
666 |
-
|
667 |
-
#: admin/views/metaboxes/metabox-rules.php:62
|
668 |
-
msgid "is not equal to"
|
669 |
-
msgstr "est différent de"
|
670 |
-
|
671 |
-
#: admin/views/metaboxes/metabox-rules.php:93
|
672 |
-
msgid "and"
|
673 |
-
msgstr "et"
|
674 |
-
|
675 |
-
#: admin/views/metaboxes/metabox-rules.php:108
|
676 |
-
msgid "Add rule group"
|
677 |
-
msgstr "Ajoutez une règle"
|
678 |
-
|
679 |
-
#: admin/views/metaboxes/metabox-support.php:6
|
680 |
-
#, php-format
|
681 |
-
msgid "You are using Popups plugin v%s"
|
682 |
-
msgstr "Vous utilisez la version v%s du plugin Popups"
|
683 |
-
|
684 |
-
#: admin/views/metaboxes/metabox-support.php:7
|
685 |
-
#, php-format
|
686 |
-
msgid ""
|
687 |
-
"If you need support please go to the WordPress.org <a href=\"%s\">support "
|
688 |
-
"forums</a>"
|
689 |
-
msgstr ""
|
690 |
-
"Si vous avez besoin d’une aide, d’un support, rendez-vous sur le <a href=\"%s"
|
691 |
-
"\">forum WordPress.org</a>"
|
692 |
-
|
693 |
-
#: admin/views/settings-page.php:17
|
694 |
-
msgid "Affiliate link"
|
695 |
-
msgstr "Lien affilié"
|
696 |
-
|
697 |
-
#: admin/views/settings-page.php:20
|
698 |
-
#, php-format
|
699 |
-
msgid ""
|
700 |
-
"You can earn money by promoting the plugin! Join <a href=\"%s\">our "
|
701 |
-
"affiliate program</a> and paste your affiliate link here to earn 35% in "
|
702 |
-
"commissions . Once entered, it will replace the default \"Powered by\" on "
|
703 |
-
"the popups."
|
704 |
-
msgstr ""
|
705 |
-
"Monétisez votre site en faisant la promotion du plugin ! Rejoignez <a "
|
706 |
-
"href=« %s »>notre programme d’affiliation</a> et collez votre lien d’affilié "
|
707 |
-
"ici pour percevoir 35% par commission . Une fois enregistrer il "
|
708 |
-
"remplacera la notation par défaut « Powered by » dans les popups."
|
709 |
-
|
710 |
-
#: admin/views/settings-page.php:24
|
711 |
-
msgid "Ajax mode?"
|
712 |
-
msgstr "Mode Ajax ?"
|
713 |
-
|
714 |
-
#: admin/views/settings-page.php:27
|
715 |
-
msgid ""
|
716 |
-
"Load popups using ajax. Compatible with cache plugins, but might not work "
|
717 |
-
"with all plugins"
|
718 |
-
msgstr ""
|
719 |
-
"Utilise Ajax pour charger les popups. Compatible avec les plugins de cache, "
|
720 |
-
"mais peut ne pas fonctionner avec tous les plugins"
|
721 |
-
|
722 |
-
#: admin/views/settings-page.php:32
|
723 |
-
msgid "Enable Debug mode?"
|
724 |
-
msgstr "Activer mode de débogage ?"
|
725 |
-
|
726 |
-
#: admin/views/settings-page.php:35
|
727 |
-
msgid "Will use uncompressed js"
|
728 |
-
msgstr "Utilisera des js non compressés"
|
729 |
-
|
730 |
-
#: admin/views/settings-page.php:40
|
731 |
-
msgid "Enable safe mode?"
|
732 |
-
msgstr "Activer mode sans échec ?"
|
733 |
-
|
734 |
-
#: admin/views/settings-page.php:43
|
735 |
-
msgid "Will move all popups to top of the screen."
|
736 |
-
msgstr "Ouvrira tous les popups en haut de l’écran."
|
737 |
-
|
738 |
-
#: admin/views/settings-page.php:48
|
739 |
-
msgid "Remove shortcodes style"
|
740 |
-
msgstr "Supprimer le style des shortcodes"
|
741 |
-
|
742 |
-
#: admin/views/settings-page.php:51
|
743 |
-
msgid ""
|
744 |
-
"By default the plugin will apply some style to shortcodes. Check here if you "
|
745 |
-
"want to manually style them"
|
746 |
-
msgstr ""
|
747 |
-
"Par défaut le plugin applique un style aux shortcodes. Cochez ici si vous "
|
748 |
-
"voulez les styler manuellement"
|
749 |
-
|
750 |
-
#: admin/views/settings-page.php:56
|
751 |
-
msgid "Unload Facebook javascript"
|
752 |
-
msgstr "Ne pas charger le javascript de Facebook"
|
753 |
-
|
754 |
-
#: admin/views/settings-page.php:59
|
755 |
-
msgid "If you use your own Facebook script, check this"
|
756 |
-
msgstr "Si vous utilisez votre propre script Facebook, cochez ici"
|
757 |
-
|
758 |
-
#: admin/views/settings-page.php:64
|
759 |
-
msgid "Unload Google javascript"
|
760 |
-
msgstr "Ne pas charger le javascript de Google"
|
761 |
-
|
762 |
-
#: admin/views/settings-page.php:67
|
763 |
-
msgid "If you use your own Google script, check this"
|
764 |
-
msgstr "Si vous utilisez votre propre script Google, cochez ici"
|
765 |
-
|
766 |
-
#: admin/views/settings-page.php:72
|
767 |
-
msgid "Unload Twitter javascript"
|
768 |
-
msgstr "Ne pas charger le javascript de Twitter"
|
769 |
-
|
770 |
-
#: admin/views/settings-page.php:75
|
771 |
-
msgid "If you use your own Twitter script, check this"
|
772 |
-
msgstr "Si vous utilisez votre propre script pour Twitter, cochez ici"
|
773 |
-
|
774 |
-
#: admin/views/settings-page.php:82
|
775 |
-
msgid "Delete all data on Uninstall"
|
776 |
-
msgstr "Effacez toutes les données en cas de désinstallation"
|
777 |
-
|
778 |
-
#: admin/views/settings-page.php:85
|
779 |
-
msgid ""
|
780 |
-
"When you uninstall the plugin all popups, settings and stats will be deleted "
|
781 |
-
"from your db"
|
782 |
-
msgstr ""
|
783 |
-
"Quand vous désinstallez le plugin tous les popups, les réglages et les "
|
784 |
-
"statistiques sont effacées de la base de données"
|
785 |
-
|
786 |
-
#: admin/views/settings-page.php:89
|
787 |
-
msgid "Save settings"
|
788 |
-
msgstr "Sauvegarder les réglages"
|
789 |
-
|
790 |
-
#: includes/class-spu-helper.php:131
|
791 |
-
msgid "All Pages"
|
792 |
-
msgstr "Toutes les pages"
|
793 |
-
|
794 |
-
#: includes/class-spu-helper.php:132
|
795 |
-
msgid "Front Page"
|
796 |
-
msgstr "Page de garde"
|
797 |
-
|
798 |
-
#: includes/class-spu-helper.php:133
|
799 |
-
msgid "Posts Page"
|
800 |
-
msgstr "Page des articles"
|
801 |
-
|
802 |
-
#: includes/class-spu-helper.php:134
|
803 |
-
msgid "Category Page"
|
804 |
-
msgstr "Page catégories"
|
805 |
-
|
806 |
-
#: includes/class-spu-helper.php:135
|
807 |
-
msgid "Search Page"
|
808 |
-
msgstr "Page recherche"
|
809 |
-
|
810 |
-
#: includes/class-spu-helper.php:136
|
811 |
-
msgid "Archives Page"
|
812 |
-
msgstr "Page archives"
|
813 |
-
|
814 |
-
#: includes/class-spu-helper.php:137
|
815 |
-
msgid "Top Level Page (parent of 0)"
|
816 |
-
msgstr "Page de premier niveau (parent de 0)"
|
817 |
-
|
818 |
-
#: includes/class-spu-helper.php:138
|
819 |
-
msgid "Parent Page (has children)"
|
820 |
-
msgstr "Page parent (a un enfant)"
|
821 |
-
|
822 |
-
#: includes/class-spu-helper.php:139
|
823 |
-
msgid "Child Page (has parent)"
|
824 |
-
msgstr "Page enfant (a un parent)"
|
825 |
-
|
826 |
-
#: includes/class-spu-helper.php:147
|
827 |
-
msgid "Default Template"
|
828 |
-
msgstr "Modèle par défaut"
|
829 |
-
|
830 |
-
#: includes/class-spu-helper.php:220
|
831 |
-
msgid "Publish"
|
832 |
-
msgstr "Publier"
|
833 |
-
|
834 |
-
#: includes/class-spu-helper.php:221
|
835 |
-
msgid "Pending Review"
|
836 |
-
msgstr "Révision en attente"
|
837 |
-
|
838 |
-
#: includes/class-spu-helper.php:222
|
839 |
-
msgid "Draft"
|
840 |
-
msgstr "Brouillon"
|
841 |
-
|
842 |
-
#: includes/class-spu-helper.php:223
|
843 |
-
msgid "Future"
|
844 |
-
msgstr "Avenir"
|
845 |
-
|
846 |
-
#: includes/class-spu-helper.php:224
|
847 |
-
msgid "Private"
|
848 |
-
msgstr "Privé"
|
849 |
-
|
850 |
-
#: includes/class-spu-helper.php:225
|
851 |
-
msgid "Revision"
|
852 |
-
msgstr "Révision"
|
853 |
-
|
854 |
-
#: includes/class-spu-helper.php:226
|
855 |
-
msgid "Trash"
|
856 |
-
msgstr "Corbeille"
|
857 |
-
|
858 |
-
#: includes/class-spu-helper.php:239
|
859 |
-
msgid "Super Admin"
|
860 |
-
msgstr "Super Administrateur"
|
861 |
-
|
862 |
-
#: includes/class-spu-helper.php:259
|
863 |
-
msgid "True"
|
864 |
-
msgstr "Vrai"
|
1 |
+
# Copyright (C) 2013 TODO
|
2 |
+
# This file is distributed under the same license as the TODO package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: Popups\n"
|
6 |
+
"Report-Msgid-Bugs-To: http://wordpress.org/plugins/plugin-name\n"
|
7 |
+
"POT-Creation-Date: 2017-05-20 10:47+0200\n"
|
8 |
+
"PO-Revision-Date: 2017-05-21 18:21+0200\n"
|
9 |
+
"Language-Team: Timersys <info@timersys.com>\n"
|
10 |
+
"MIME-Version: 1.0\n"
|
11 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
+
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"X-Generator: Poedit 2.0.2\n"
|
14 |
+
"X-Poedit-KeywordsList: __;_e;_n;_x;esc_html_e;esc_html__;esc_attr_e;"
|
15 |
+
"esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2\n"
|
16 |
+
"X-Poedit-Basepath: ..\n"
|
17 |
+
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
18 |
+
"Last-Translator: Hubert Desrues <hdesrues@icloud.com>\n"
|
19 |
+
"Language: fr_FR\n"
|
20 |
+
"X-Poedit-SearchPath-0: .\n"
|
21 |
+
|
22 |
+
#: admin/class-social-popup-admin.php:159
|
23 |
+
msgctxt "post type singular name"
|
24 |
+
msgid "Popups"
|
25 |
+
msgstr "Popups"
|
26 |
+
|
27 |
+
#: admin/class-social-popup-admin.php:160
|
28 |
+
msgctxt "admin menu"
|
29 |
+
msgid "Popups"
|
30 |
+
msgstr "Popups"
|
31 |
+
|
32 |
+
#: admin/class-social-popup-admin.php:161
|
33 |
+
msgctxt "add new on admin bar"
|
34 |
+
msgid "Popups"
|
35 |
+
msgstr "Popups"
|
36 |
+
|
37 |
+
#: admin/class-social-popup-admin.php:162
|
38 |
+
msgctxt "Popups"
|
39 |
+
msgid "Add New"
|
40 |
+
msgstr "Ajouter"
|
41 |
+
|
42 |
+
#: admin/class-social-popup-admin.php:163
|
43 |
+
msgid "Add New Popups"
|
44 |
+
msgstr "Ajouter nouveaux Popups"
|
45 |
+
|
46 |
+
#: admin/class-social-popup-admin.php:164
|
47 |
+
msgid "New Popups"
|
48 |
+
msgstr "Nouveau Popups"
|
49 |
+
|
50 |
+
#: admin/class-social-popup-admin.php:165
|
51 |
+
msgid "Edit Popups"
|
52 |
+
msgstr "Éditer"
|
53 |
+
|
54 |
+
#: admin/class-social-popup-admin.php:166
|
55 |
+
msgid "View Popups"
|
56 |
+
msgstr "Visualiser"
|
57 |
+
|
58 |
+
#: admin/class-social-popup-admin.php:167
|
59 |
+
msgid "All Popups"
|
60 |
+
msgstr "Tous les Popups"
|
61 |
+
|
62 |
+
#: admin/class-social-popup-admin.php:168
|
63 |
+
msgid "Search Popups"
|
64 |
+
msgstr "Rechercher des Popups"
|
65 |
+
|
66 |
+
#: admin/class-social-popup-admin.php:169
|
67 |
+
msgid "Parent Popups:"
|
68 |
+
msgstr "Popups parent :"
|
69 |
+
|
70 |
+
#: admin/class-social-popup-admin.php:170
|
71 |
+
msgid "No Popups found."
|
72 |
+
msgstr "Pas de Popups trouvé."
|
73 |
+
|
74 |
+
#: admin/class-social-popup-admin.php:171
|
75 |
+
msgid "No Popups found in Trash."
|
76 |
+
msgstr "Pas de Popups dans la corbeille."
|
77 |
+
|
78 |
+
#: admin/class-social-popup-admin.php:212
|
79 |
+
msgid "Settings"
|
80 |
+
msgstr "Réglages"
|
81 |
+
|
82 |
+
#: admin/class-social-popup-admin.php:260
|
83 |
+
msgid "Popups Premium"
|
84 |
+
msgstr "Popups Premium"
|
85 |
+
|
86 |
+
#: admin/class-social-popup-admin.php:271
|
87 |
+
msgid "PopUp Shortcodes"
|
88 |
+
msgstr "Shortcodes Popups"
|
89 |
+
|
90 |
+
#: admin/class-social-popup-admin.php:280
|
91 |
+
msgid "PopUp Appearance"
|
92 |
+
msgstr "Apparence"
|
93 |
+
|
94 |
+
#: admin/class-social-popup-admin.php:289
|
95 |
+
msgid "PopUp Display Rules"
|
96 |
+
msgstr "Règles d’affichage"
|
97 |
+
|
98 |
+
#: admin/class-social-popup-admin.php:298
|
99 |
+
msgid "Display Options"
|
100 |
+
msgstr "Options de visualisation"
|
101 |
+
|
102 |
+
#: admin/class-social-popup-admin.php:307
|
103 |
+
msgid "Need support?"
|
104 |
+
msgstr "Besoin de support ?"
|
105 |
+
|
106 |
+
#: admin/class-social-popup-admin.php:315
|
107 |
+
msgid "Donate & support"
|
108 |
+
msgstr "Faites un don de soutien"
|
109 |
+
|
110 |
+
#: admin/class-social-popup-admin.php:323
|
111 |
+
msgid "About the developer"
|
112 |
+
msgstr "A propos du développeur"
|
113 |
+
|
114 |
+
#: admin/class-social-popup-admin.php:589
|
115 |
+
#: admin/views/metaboxes/metabox-rules.php:33
|
116 |
+
#: admin/views/metaboxes/metabox-rules.php:106
|
117 |
+
msgid "or"
|
118 |
+
msgstr "ou"
|
119 |
+
|
120 |
+
#: admin/class-social-popup-admin.php:616
|
121 |
+
msgid "Add a Popup"
|
122 |
+
msgstr "Ajouter un Popup"
|
123 |
+
|
124 |
+
#: admin/class-social-popup-admin.php:740
|
125 |
+
msgid "User"
|
126 |
+
msgstr "Utilisateur"
|
127 |
+
|
128 |
+
#: admin/class-social-popup-admin.php:741
|
129 |
+
msgid "User role"
|
130 |
+
msgstr "Rôle de l’utilisateur"
|
131 |
+
|
132 |
+
#: admin/class-social-popup-admin.php:742
|
133 |
+
msgid "User is logged"
|
134 |
+
msgstr "Utilisateur inscrit"
|
135 |
+
|
136 |
+
#: admin/class-social-popup-admin.php:743
|
137 |
+
msgid "User never left a comment"
|
138 |
+
msgstr "Utilisateur n’ayant jamais laissé de commentaire"
|
139 |
+
|
140 |
+
#: admin/class-social-popup-admin.php:744
|
141 |
+
msgid "User came via a search engine"
|
142 |
+
msgstr "Utilisateur venu par un moteur de recherche"
|
143 |
+
|
144 |
+
#: admin/class-social-popup-admin.php:745
|
145 |
+
msgid "User did not arrive via another page on your site"
|
146 |
+
msgstr "Utilisateur ne venant pas d’une autre page de votre site"
|
147 |
+
|
148 |
+
#: admin/class-social-popup-admin.php:747
|
149 |
+
#: admin/class-social-popup-admin.php:748
|
150 |
+
msgid "Post"
|
151 |
+
msgstr "Article"
|
152 |
+
|
153 |
+
#: admin/class-social-popup-admin.php:749
|
154 |
+
msgid "Post ID"
|
155 |
+
msgstr "ID de l’article"
|
156 |
+
|
157 |
+
#: admin/class-social-popup-admin.php:750
|
158 |
+
msgid "Post Type"
|
159 |
+
msgstr "Type d’articles"
|
160 |
+
|
161 |
+
#: admin/class-social-popup-admin.php:751
|
162 |
+
msgid "Post Category"
|
163 |
+
msgstr "Catégorie d’articles"
|
164 |
+
|
165 |
+
#: admin/class-social-popup-admin.php:752
|
166 |
+
msgid "Post Format"
|
167 |
+
msgstr "Format d’articles"
|
168 |
+
|
169 |
+
#: admin/class-social-popup-admin.php:753
|
170 |
+
msgid "Post Status"
|
171 |
+
msgstr "Statut d’articles"
|
172 |
+
|
173 |
+
#: admin/class-social-popup-admin.php:754
|
174 |
+
msgid "Post Taxonomy"
|
175 |
+
msgstr "Taxynomie d’articles"
|
176 |
+
|
177 |
+
#: admin/class-social-popup-admin.php:756
|
178 |
+
#: admin/class-social-popup-admin.php:757
|
179 |
+
msgid "Page"
|
180 |
+
msgstr "Page"
|
181 |
+
|
182 |
+
#: admin/class-social-popup-admin.php:758
|
183 |
+
msgid "Page Type"
|
184 |
+
msgstr "Type de pages"
|
185 |
+
|
186 |
+
#: admin/class-social-popup-admin.php:759
|
187 |
+
msgid "Page Parent"
|
188 |
+
msgstr "Parent de pages"
|
189 |
+
|
190 |
+
#: admin/class-social-popup-admin.php:760
|
191 |
+
msgid "Page Template"
|
192 |
+
msgstr "Modèle de pages"
|
193 |
+
|
194 |
+
#: admin/class-social-popup-admin.php:762
|
195 |
+
msgid "Other"
|
196 |
+
msgstr "Autres"
|
197 |
+
|
198 |
+
#: admin/class-social-popup-admin.php:763
|
199 |
+
msgid "Referrer"
|
200 |
+
msgstr "Référant"
|
201 |
+
|
202 |
+
#: admin/class-social-popup-admin.php:764
|
203 |
+
msgid "Mobile Phone"
|
204 |
+
msgstr "Téléphone mobile"
|
205 |
+
|
206 |
+
#: admin/class-social-popup-admin.php:765
|
207 |
+
msgid "Tablet"
|
208 |
+
msgstr "Tablette"
|
209 |
+
|
210 |
+
#: admin/class-social-popup-admin.php:813
|
211 |
+
msgid "ID"
|
212 |
+
msgstr "ID"
|
213 |
+
|
214 |
+
#: admin/includes/class-spu-notices.php:30
|
215 |
+
#, php-format
|
216 |
+
msgid ""
|
217 |
+
"We noticed that you have been using our plugin for a while and we would like "
|
218 |
+
"to ask you a little favour. If you are happy with it and can take a minute "
|
219 |
+
"please <a href=\"%s\" target=\"_blank\">leave a nice review</a> on "
|
220 |
+
"WordPress. It will be a tremendous help for us!"
|
221 |
+
msgstr ""
|
222 |
+
"Nous avons remarqué que vous avez utilisé notre plugin pendant un certain "
|
223 |
+
"temps et nous vous demandons une faveur. Si vous êtes satisfait de ce plugin "
|
224 |
+
"et si vous avez une minute, veuillez <a href=\"%s\" target=\"_blank\"> "
|
225 |
+
"laisser une bonne critique </a> sur WordPress. Ce sera une aide formidable "
|
226 |
+
"pour nous!"
|
227 |
+
|
228 |
+
#: admin/includes/class-spu-notices.php:32
|
229 |
+
#, php-format
|
230 |
+
msgid "<a href=\"%s\" target=\"_blank\">Leave a nice review</a>"
|
231 |
+
msgstr "<a href=\"%s\" target=\"_blank\">Laissez une bonne appréciation</a>"
|
232 |
+
|
233 |
+
#: admin/includes/class-spu-notices.php:33
|
234 |
+
#, php-format
|
235 |
+
msgid "<a href=\"%s\">No, thanks</a>"
|
236 |
+
msgstr "<a href=\"%s\">Non, merci</a>"
|
237 |
+
|
238 |
+
#: admin/views/metaboxes/metabox-appearance.php:10
|
239 |
+
msgid "Background opacity"
|
240 |
+
msgstr "Opacité du fond"
|
241 |
+
|
242 |
+
#: admin/views/metaboxes/metabox-appearance.php:12
|
243 |
+
msgid "Leave at 0 for no background. Max value is 1"
|
244 |
+
msgstr "Mettre 0 pour aucune opacité. Valeur maximale 1"
|
245 |
+
|
246 |
+
#: admin/views/metaboxes/metabox-appearance.php:18
|
247 |
+
msgid "Background color"
|
248 |
+
msgstr "Couleur du fond"
|
249 |
+
|
250 |
+
#: admin/views/metaboxes/metabox-appearance.php:22
|
251 |
+
msgid "Text color"
|
252 |
+
msgstr "Couleur du texte"
|
253 |
+
|
254 |
+
#: admin/views/metaboxes/metabox-appearance.php:26
|
255 |
+
msgid "Box width"
|
256 |
+
msgstr "Largeur du popup"
|
257 |
+
|
258 |
+
#: admin/views/metaboxes/metabox-appearance.php:32
|
259 |
+
msgid "Border color"
|
260 |
+
msgstr "Couleur du cadre"
|
261 |
+
|
262 |
+
#: admin/views/metaboxes/metabox-appearance.php:36
|
263 |
+
msgid "Border width"
|
264 |
+
msgstr "Épaisseur du cadre"
|
265 |
+
|
266 |
+
#: admin/views/metaboxes/metabox-donate.php:6
|
267 |
+
msgid "If you like this plugin, consider supporting it by donating."
|
268 |
+
msgstr "Si vous aimez ce plugin, manifestez-le par une donation."
|
269 |
+
|
270 |
+
#: admin/views/metaboxes/metabox-donate.php:8
|
271 |
+
msgid "Donate with PayPal"
|
272 |
+
msgstr "Donnez avec PayPal"
|
273 |
+
|
274 |
+
#: admin/views/metaboxes/metabox-donate.php:10
|
275 |
+
msgid "Some other ways to support this plugin"
|
276 |
+
msgstr "Quelques autres façons de supporter ce plugin"
|
277 |
+
|
278 |
+
#: admin/views/metaboxes/metabox-donate.php:12
|
279 |
+
msgid "Leave a ★★★★★ review on WordPress.org"
|
280 |
+
msgstr ""
|
281 |
+
"Laissez une ★★★★★ appréciation sur WordPress."
|
282 |
+
"org"
|
283 |
+
|
284 |
+
#: admin/views/metaboxes/metabox-donate.php:13
|
285 |
+
msgid "Write about Popups on your blog"
|
286 |
+
msgstr "Ecrivez un article à propos de Popups dans votre blog"
|
287 |
+
|
288 |
+
#: admin/views/metaboxes/metabox-donate.php:14
|
289 |
+
msgid "Tweet about Popups"
|
290 |
+
msgstr "Tweetez à propos de Popups"
|
291 |
+
|
292 |
+
#: admin/views/metaboxes/metabox-donate.php:15
|
293 |
+
msgid "Vote \"works\" on the WordPress.org plugin page"
|
294 |
+
msgstr "Votez « works » sur la page plugin de WordPress.org"
|
295 |
+
|
296 |
+
#: admin/views/metaboxes/metabox-help.php:6
|
297 |
+
msgid ""
|
298 |
+
"You have some social shortcodes to use that will print a Facebook like, a "
|
299 |
+
"Google+ Follow and a Twitter follow. Check the available options and "
|
300 |
+
"<strong>configure them with your social accounts</strong>:"
|
301 |
+
msgstr ""
|
302 |
+
"Vous avez des shortcodes pour imprimer des « like » dans Facebook, des "
|
303 |
+
"« Follow » dans Google+ ou dans Twitter. Vérifiez les options disponibles et "
|
304 |
+
"<strong> configurez-les avec vos comptes sociaux </strong> :"
|
305 |
+
|
306 |
+
#: admin/views/metaboxes/metabox-help.php:8
|
307 |
+
msgid "Facebook Page"
|
308 |
+
msgstr "Page Facebook"
|
309 |
+
|
310 |
+
#: admin/views/metaboxes/metabox-help.php:12
|
311 |
+
msgid "View Facebook Page Options"
|
312 |
+
msgstr "Voir les options pour les pages Facebook"
|
313 |
+
|
314 |
+
#: admin/views/metaboxes/metabox-help.php:14
|
315 |
+
#: admin/views/metaboxes/metabox-help.php:27
|
316 |
+
msgid "Your Facebook page url"
|
317 |
+
msgstr "L’url de votre page Facebook"
|
318 |
+
|
319 |
+
#: admin/views/metaboxes/metabox-help.php:15
|
320 |
+
msgid "Your page name"
|
321 |
+
msgstr "Le nom de votre page"
|
322 |
+
|
323 |
+
#: admin/views/metaboxes/metabox-help.php:16
|
324 |
+
msgid "true|false <b>Default value:</b> true"
|
325 |
+
msgstr "vrai|faux <b>valeur par défaut :</b> vrai"
|
326 |
+
|
327 |
+
#: admin/views/metaboxes/metabox-help.php:17
|
328 |
+
msgid "true|false <b>Default value:</b> false"
|
329 |
+
msgstr "vrai|faux <b>valeur par défaut :</b> faux"
|
330 |
+
|
331 |
+
#: admin/views/metaboxes/metabox-help.php:18
|
332 |
+
msgid "number <b>Default value:</b> 500"
|
333 |
+
msgstr "nombre <b>Valeur par défaut :</b> 500"
|
334 |
+
|
335 |
+
#: admin/views/metaboxes/metabox-help.php:21
|
336 |
+
msgid "Facebook Button"
|
337 |
+
msgstr "Bouton Facebook"
|
338 |
+
|
339 |
+
#: admin/views/metaboxes/metabox-help.php:25
|
340 |
+
msgid "View Facebook Options"
|
341 |
+
msgstr "Voir les options Facebook"
|
342 |
+
|
343 |
+
#: admin/views/metaboxes/metabox-help.php:28
|
344 |
+
msgid "standard, box_count, button <b>Default value:</b> button_count"
|
345 |
+
msgstr "standard, box_count, bouton <b> Valeur par défaut: </b> button_count"
|
346 |
+
|
347 |
+
#: admin/views/metaboxes/metabox-help.php:29
|
348 |
+
#: admin/views/metaboxes/metabox-help.php:30
|
349 |
+
msgid "true <b>Default value:</b> false"
|
350 |
+
msgstr "vrai <b>Valeur par défaut :</b> faux"
|
351 |
+
|
352 |
+
#: admin/views/metaboxes/metabox-help.php:31
|
353 |
+
msgid "recommend <b>Default value:</b> like"
|
354 |
+
msgstr "recommander <b>Valeur par défaut:</b> aimer"
|
355 |
+
|
356 |
+
#: admin/views/metaboxes/metabox-help.php:32
|
357 |
+
msgid "number <b>Default value:</b>"
|
358 |
+
msgstr "nombre <b>Valeur par défaut :</b>"
|
359 |
+
|
360 |
+
#: admin/views/metaboxes/metabox-help.php:34
|
361 |
+
msgid "Google+ Button"
|
362 |
+
msgstr "Bouton Google+"
|
363 |
+
|
364 |
+
#: admin/views/metaboxes/metabox-help.php:38
|
365 |
+
msgid "View Google+ Options"
|
366 |
+
msgstr "Voir les options Google+"
|
367 |
+
|
368 |
+
#: admin/views/metaboxes/metabox-help.php:40
|
369 |
+
msgid "Your Google+ url"
|
370 |
+
msgstr "Votre url Google+"
|
371 |
+
|
372 |
+
#: admin/views/metaboxes/metabox-help.php:41
|
373 |
+
msgid "small, standard, tall <b>Default value:</b> medium"
|
374 |
+
msgstr "petit, standard, grand <b>Valeur par défaut:</b> médium"
|
375 |
+
|
376 |
+
#: admin/views/metaboxes/metabox-help.php:42
|
377 |
+
msgid "inline, none <b>Default value:</b> bubble"
|
378 |
+
msgstr "en ligne, non <b>Valeur par défaut :</b> bulle"
|
379 |
+
|
380 |
+
#: admin/views/metaboxes/metabox-help.php:44
|
381 |
+
msgid "Twitter Button"
|
382 |
+
msgstr "Bouton twitter"
|
383 |
+
|
384 |
+
#: admin/views/metaboxes/metabox-help.php:48
|
385 |
+
msgid "View Twitter Options"
|
386 |
+
msgstr "Voir les options twitter"
|
387 |
+
|
388 |
+
#: admin/views/metaboxes/metabox-help.php:50
|
389 |
+
msgid "Your Twitter user <b>Default chifliiiii</b>"
|
390 |
+
msgstr "Votre nom d’utilisateur Twitter <b>Par défaut chifliiiii</b>"
|
391 |
+
|
392 |
+
#: admin/views/metaboxes/metabox-help.php:51
|
393 |
+
msgid "false <b>Default value:</b> true"
|
394 |
+
msgstr "faux <b>valeur par défaut:</b> vrai"
|
395 |
+
|
396 |
+
#: admin/views/metaboxes/metabox-help.php:52
|
397 |
+
msgid "large <b>Default value:</b> \"\""
|
398 |
+
msgstr "grans <b>Valeur par défaut :</b> \"\""
|
399 |
+
|
400 |
+
#: admin/views/metaboxes/metabox-help.php:55
|
401 |
+
msgid "Other available Shortcodes:"
|
402 |
+
msgstr "Autres Shortcodes utilisables :"
|
403 |
+
|
404 |
+
#: admin/views/metaboxes/metabox-help.php:56
|
405 |
+
msgid "Close Button"
|
406 |
+
msgstr "Bouton de fermeture"
|
407 |
+
|
408 |
+
#: admin/views/metaboxes/metabox-help.php:60
|
409 |
+
msgid "View Close shortcode Options"
|
410 |
+
msgstr "Voir les options shortcode de fermeture"
|
411 |
+
|
412 |
+
#: admin/views/metaboxes/metabox-help.php:62
|
413 |
+
msgid "Pass a custom class to style your button"
|
414 |
+
msgstr "Envoie une classe personnalisée pour styler votre bouton"
|
415 |
+
|
416 |
+
#: admin/views/metaboxes/metabox-help.php:63
|
417 |
+
msgid "Button label - <b>Default value:</b> Close"
|
418 |
+
msgstr "Nom du bouton - <b>valeur par défaut :</b> Fermer"
|
419 |
+
|
420 |
+
#: admin/views/metaboxes/metabox-help.php:64
|
421 |
+
msgid "left, right, center, none - <b>Default value:</b> center"
|
422 |
+
msgstr "gauche, droite, centré, aucun - <b>valeur par défaut:</b> centré"
|
423 |
+
|
424 |
+
#: admin/views/metaboxes/metabox-links.php:6
|
425 |
+
msgid "My name is"
|
426 |
+
msgstr "Mon nom est"
|
427 |
+
|
428 |
+
#: admin/views/metaboxes/metabox-links.php:6
|
429 |
+
msgid "I develop WordPress plugins and themes."
|
430 |
+
msgstr "Je développe des thèmes et des plugins pour WordPress."
|
431 |
+
|
432 |
+
#: admin/views/metaboxes/metabox-links.php:7
|
433 |
+
#, php-format
|
434 |
+
msgid ""
|
435 |
+
"Take a look at my <a href=\"%s\">site</a> to see my other plugins or hire "
|
436 |
+
"me. Subscribe to get updates!"
|
437 |
+
msgstr ""
|
438 |
+
"Jetez un coup d’œil à mon <a href=\"%s\">site</a> pour découvrir mes autres "
|
439 |
+
"plugins ou me passer une commande. Inscrivez-vous pour obtenir des mises à "
|
440 |
+
"jour !"
|
441 |
+
|
442 |
+
#: admin/views/metaboxes/metabox-links.php:8
|
443 |
+
msgid "Other plugins I built:"
|
444 |
+
msgstr "Mes autres plugins :"
|
445 |
+
|
446 |
+
#: admin/views/metaboxes/metabox-links.php:10
|
447 |
+
msgid "Install multiple plugins and create collections"
|
448 |
+
msgstr "Installez de multiples plugins et créez des ensembles"
|
449 |
+
|
450 |
+
#: admin/views/metaboxes/metabox-links.php:11
|
451 |
+
msgid "Geotarget your content"
|
452 |
+
msgstr "Ciblez géographiquement votre contenu"
|
453 |
+
|
454 |
+
#: admin/views/metaboxes/metabox-links.php:12
|
455 |
+
msgid "Invite your network friends and import contacts"
|
456 |
+
msgstr "Invitez vos amis et vos contacts importés"
|
457 |
+
|
458 |
+
#: admin/views/metaboxes/metabox-options.php:9
|
459 |
+
msgid "Box Position"
|
460 |
+
msgstr "Position du popup"
|
461 |
+
|
462 |
+
#: admin/views/metaboxes/metabox-options.php:12
|
463 |
+
msgid "Centered"
|
464 |
+
msgstr "Centré"
|
465 |
+
|
466 |
+
#: admin/views/metaboxes/metabox-options.php:13
|
467 |
+
msgid "Top Left"
|
468 |
+
msgstr "En haut à gauche"
|
469 |
+
|
470 |
+
#: admin/views/metaboxes/metabox-options.php:14
|
471 |
+
msgid "Top Right"
|
472 |
+
msgstr "En haut à droite"
|
473 |
+
|
474 |
+
#: admin/views/metaboxes/metabox-options.php:15
|
475 |
+
msgid "Bottom Left"
|
476 |
+
msgstr "En bas à gauche"
|
477 |
+
|
478 |
+
#: admin/views/metaboxes/metabox-options.php:16
|
479 |
+
msgid "Bottom Right"
|
480 |
+
msgstr "En bas à droite"
|
481 |
+
|
482 |
+
#: admin/views/metaboxes/metabox-options.php:23
|
483 |
+
msgid "Trigger action"
|
484 |
+
msgstr "Action de déclenchement"
|
485 |
+
|
486 |
+
#: admin/views/metaboxes/metabox-options.php:27
|
487 |
+
msgid "seconds after page load"
|
488 |
+
msgstr "secondes après chargement de la page"
|
489 |
+
|
490 |
+
#: admin/views/metaboxes/metabox-options.php:28
|
491 |
+
msgid "of page height"
|
492 |
+
msgstr "de hauteur de page"
|
493 |
+
|
494 |
+
#: admin/views/metaboxes/metabox-options.php:38
|
495 |
+
msgid "Auto-hide?"
|
496 |
+
msgstr "Auto-disparition ?"
|
497 |
+
|
498 |
+
#: admin/views/metaboxes/metabox-options.php:40
|
499 |
+
#: admin/views/metaboxes/metabox-options.php:68
|
500 |
+
#: admin/views/metaboxes/metabox-options.php:76
|
501 |
+
#: admin/views/metaboxes/metabox-options.php:84
|
502 |
+
msgid "Yes"
|
503 |
+
msgstr "Oui"
|
504 |
+
|
505 |
+
#: admin/views/metaboxes/metabox-options.php:41
|
506 |
+
#: admin/views/metaboxes/metabox-options.php:69
|
507 |
+
#: admin/views/metaboxes/metabox-options.php:77
|
508 |
+
#: admin/views/metaboxes/metabox-options.php:85
|
509 |
+
msgid "No"
|
510 |
+
msgstr "Non"
|
511 |
+
|
512 |
+
#: admin/views/metaboxes/metabox-options.php:42
|
513 |
+
msgid "Hide box again when visitors scroll back up?"
|
514 |
+
msgstr "Cacher le popup quand les visiteurs provoquent un défilement ?"
|
515 |
+
|
516 |
+
#: admin/views/metaboxes/metabox-options.php:46
|
517 |
+
msgid "Animation"
|
518 |
+
msgstr "Animation"
|
519 |
+
|
520 |
+
#: admin/views/metaboxes/metabox-options.php:49
|
521 |
+
msgid "Fade In"
|
522 |
+
msgstr "Par fondu"
|
523 |
+
|
524 |
+
#: admin/views/metaboxes/metabox-options.php:50
|
525 |
+
msgid "Slide In"
|
526 |
+
msgstr "Par glissement"
|
527 |
+
|
528 |
+
#: admin/views/metaboxes/metabox-options.php:53
|
529 |
+
msgid "Slide will only apply when popup is on the corners"
|
530 |
+
msgstr "Le glissement ne se fait que si le popup est dans un coin"
|
531 |
+
|
532 |
+
#: admin/views/metaboxes/metabox-options.php:58
|
533 |
+
msgid "Cookie expiration days"
|
534 |
+
msgstr "Durée du cookie en jours"
|
535 |
+
|
536 |
+
#: admin/views/metaboxes/metabox-options.php:61
|
537 |
+
msgid "After closing the box, how many days should it stay hidden?"
|
538 |
+
msgstr ""
|
539 |
+
"Après fermeture du popup pendant combien de jours ne doit-il pas reparaître ?"
|
540 |
+
|
541 |
+
#: admin/views/metaboxes/metabox-options.php:66
|
542 |
+
msgid "Enable test mode?"
|
543 |
+
msgstr "Activer le mode test ?"
|
544 |
+
|
545 |
+
#: admin/views/metaboxes/metabox-options.php:70
|
546 |
+
msgid ""
|
547 |
+
"If test mode is enabled, the box will show up regardless of whether a cookie "
|
548 |
+
"has been set. (To admins only)"
|
549 |
+
msgstr ""
|
550 |
+
"Si le mode test est activé, le popup ne tiendra pas compte des consignes du "
|
551 |
+
"cookie. (Administrateurs seulement)"
|
552 |
+
|
553 |
+
#: admin/views/metaboxes/metabox-options.php:74
|
554 |
+
msgid "Close on conversion?"
|
555 |
+
msgstr "Fermer sur conversion ?"
|
556 |
+
|
557 |
+
#: admin/views/metaboxes/metabox-options.php:78
|
558 |
+
msgid ""
|
559 |
+
"If you have a form or social shortcode, by default popup will close on "
|
560 |
+
"submission/conversion"
|
561 |
+
msgstr ""
|
562 |
+
"Si vous avez un formulaire ou un shortcode de réseau social, par défaut le "
|
563 |
+
"popup se fermera sur soumission/conversion"
|
564 |
+
|
565 |
+
#: admin/views/metaboxes/metabox-options.php:82
|
566 |
+
msgid "Show powered by link?"
|
567 |
+
msgstr "Afficher un lien « powered by » ?"
|
568 |
+
|
569 |
+
#: admin/views/metaboxes/metabox-options.php:86
|
570 |
+
#, php-format
|
571 |
+
msgid ""
|
572 |
+
"Shows a \"powered by\" link below your popup. If your affiliate link is set "
|
573 |
+
"in the <a href=\"%s\">settings</a>, it will be used."
|
574 |
+
msgstr ""
|
575 |
+
"Afficher un lien « Powered by » sous votre popup. Si vous êtes affilié le "
|
576 |
+
"lien est mis dans <a href=\"%s\">réglages</a>, pour être utilisé."
|
577 |
+
|
578 |
+
#: admin/views/metaboxes/metabox-premium.php:16
|
579 |
+
msgid ""
|
580 |
+
"Take the best WordPress Popups plugin to the next level with Popups Premium "
|
581 |
+
"extension."
|
582 |
+
msgstr ""
|
583 |
+
"Avec l’extension Popups Premium pour WordPress choisissez le meilleur plugin."
|
584 |
+
|
585 |
+
#: admin/views/metaboxes/metabox-premium.php:17
|
586 |
+
msgid "Popups Premium Features:"
|
587 |
+
msgstr "Fonctionnalités de Popups Premium :"
|
588 |
+
|
589 |
+
#: admin/views/metaboxes/metabox-premium.php:19
|
590 |
+
msgid "Beautiful optin forms for popular mail providers"
|
591 |
+
msgstr ""
|
592 |
+
"Élégants formulaires de souscription pour les plus populaires distributeurs "
|
593 |
+
"de mails"
|
594 |
+
|
595 |
+
#: admin/views/metaboxes/metabox-premium.php:20
|
596 |
+
msgid "Currently supporting MailChimp, Aweber, Postmatic, Mailpoet"
|
597 |
+
msgstr "Supporte MailChimp, Aweber, Postmatic, Mailpoet"
|
598 |
+
|
599 |
+
#: admin/views/metaboxes/metabox-premium.php:21
|
600 |
+
msgid ""
|
601 |
+
"Track impressions and Conversions of social likes and forms submissions like "
|
602 |
+
"Contact Form 7, Gravity forms, etc"
|
603 |
+
msgstr ""
|
604 |
+
"Enregistre les impressions et conversions à partir des réseaux sociaux ou "
|
605 |
+
"des formulaires de soumission comme Contac Form 7, Gravity Forms etc"
|
606 |
+
|
607 |
+
#: admin/views/metaboxes/metabox-premium.php:22
|
608 |
+
msgid "Track impressions and Conversions also in Google Analytics"
|
609 |
+
msgstr "Enregistre aussi les impressions et conversion dans Google Analytics"
|
610 |
+
|
611 |
+
#: admin/views/metaboxes/metabox-premium.php:23
|
612 |
+
#: admin/views/metaboxes/metabox-premium.php:25
|
613 |
+
msgid "Exit Intent technology"
|
614 |
+
msgstr ""
|
615 |
+
"Intégration de « Exit Intent technology » pour suivre les mouvements de la "
|
616 |
+
"souris de l’utilisateur et prévoir sa sortie"
|
617 |
+
|
618 |
+
#: admin/views/metaboxes/metabox-premium.php:24
|
619 |
+
msgid "8 New animations effects"
|
620 |
+
msgstr "8 nouvelles animations"
|
621 |
+
|
622 |
+
#: admin/views/metaboxes/metabox-premium.php:26
|
623 |
+
msgid "New trigger methods"
|
624 |
+
msgstr "Nouvelles méthodes de déclenchement"
|
625 |
+
|
626 |
+
#: admin/views/metaboxes/metabox-premium.php:27
|
627 |
+
msgid "Timer for auto closing"
|
628 |
+
msgstr "Minuteur pour fermeture automatique"
|
629 |
+
|
630 |
+
#: admin/views/metaboxes/metabox-premium.php:28
|
631 |
+
msgid "Ability to disable close button"
|
632 |
+
msgstr "Possibilité de désactiver le bouton de fermeture"
|
633 |
+
|
634 |
+
#: admin/views/metaboxes/metabox-premium.php:29
|
635 |
+
msgid ""
|
636 |
+
"Ability to disable Advanced close methods like esc or clicking outside of "
|
637 |
+
"the popup"
|
638 |
+
msgstr ""
|
639 |
+
"Possibilité de désactiver les méthodes avances de fermeture comme esc ou "
|
640 |
+
"clic à l’extérieur du popup"
|
641 |
+
|
642 |
+
#: admin/views/metaboxes/metabox-premium.php:30
|
643 |
+
msgid "Premium support"
|
644 |
+
msgstr "Support Premium"
|
645 |
+
|
646 |
+
#: admin/views/metaboxes/metabox-premium.php:34
|
647 |
+
msgid "Buy Now!"
|
648 |
+
msgstr "Achetez maintenant !"
|
649 |
+
|
650 |
+
#: admin/views/metaboxes/metabox-rules.php:19
|
651 |
+
msgid "Rules"
|
652 |
+
msgstr "Règles"
|
653 |
+
|
654 |
+
#: admin/views/metaboxes/metabox-rules.php:20
|
655 |
+
msgid "Create a set of rules to determine where the popup will show"
|
656 |
+
msgstr ""
|
657 |
+
"Créez un ensemble de règles pour déterminer quand le popup doit apparaître"
|
658 |
+
|
659 |
+
#: admin/views/metaboxes/metabox-rules.php:31
|
660 |
+
msgid "Show this popup if"
|
661 |
+
msgstr "Affichez le popup si"
|
662 |
+
|
663 |
+
#: admin/views/metaboxes/metabox-rules.php:61
|
664 |
+
msgid "is equal to"
|
665 |
+
msgstr "est égal à"
|
666 |
+
|
667 |
+
#: admin/views/metaboxes/metabox-rules.php:62
|
668 |
+
msgid "is not equal to"
|
669 |
+
msgstr "est différent de"
|
670 |
+
|
671 |
+
#: admin/views/metaboxes/metabox-rules.php:93
|
672 |
+
msgid "and"
|
673 |
+
msgstr "et"
|
674 |
+
|
675 |
+
#: admin/views/metaboxes/metabox-rules.php:108
|
676 |
+
msgid "Add rule group"
|
677 |
+
msgstr "Ajoutez une règle"
|
678 |
+
|
679 |
+
#: admin/views/metaboxes/metabox-support.php:6
|
680 |
+
#, php-format
|
681 |
+
msgid "You are using Popups plugin v%s"
|
682 |
+
msgstr "Vous utilisez la version v%s du plugin Popups"
|
683 |
+
|
684 |
+
#: admin/views/metaboxes/metabox-support.php:7
|
685 |
+
#, php-format
|
686 |
+
msgid ""
|
687 |
+
"If you need support please go to the WordPress.org <a href=\"%s\">support "
|
688 |
+
"forums</a>"
|
689 |
+
msgstr ""
|
690 |
+
"Si vous avez besoin d’une aide, d’un support, rendez-vous sur le <a href=\"%s"
|
691 |
+
"\">forum WordPress.org</a>"
|
692 |
+
|
693 |
+
#: admin/views/settings-page.php:17
|
694 |
+
msgid "Affiliate link"
|
695 |
+
msgstr "Lien affilié"
|
696 |
+
|
697 |
+
#: admin/views/settings-page.php:20
|
698 |
+
#, php-format
|
699 |
+
msgid ""
|
700 |
+
"You can earn money by promoting the plugin! Join <a href=\"%s\">our "
|
701 |
+
"affiliate program</a> and paste your affiliate link here to earn 35% in "
|
702 |
+
"commissions . Once entered, it will replace the default \"Powered by\" on "
|
703 |
+
"the popups."
|
704 |
+
msgstr ""
|
705 |
+
"Monétisez votre site en faisant la promotion du plugin ! Rejoignez <a "
|
706 |
+
"href=« %s »>notre programme d’affiliation</a> et collez votre lien d’affilié "
|
707 |
+
"ici pour percevoir 35% par commission . Une fois enregistrer il "
|
708 |
+
"remplacera la notation par défaut « Powered by » dans les popups."
|
709 |
+
|
710 |
+
#: admin/views/settings-page.php:24
|
711 |
+
msgid "Ajax mode?"
|
712 |
+
msgstr "Mode Ajax ?"
|
713 |
+
|
714 |
+
#: admin/views/settings-page.php:27
|
715 |
+
msgid ""
|
716 |
+
"Load popups using ajax. Compatible with cache plugins, but might not work "
|
717 |
+
"with all plugins"
|
718 |
+
msgstr ""
|
719 |
+
"Utilise Ajax pour charger les popups. Compatible avec les plugins de cache, "
|
720 |
+
"mais peut ne pas fonctionner avec tous les plugins"
|
721 |
+
|
722 |
+
#: admin/views/settings-page.php:32
|
723 |
+
msgid "Enable Debug mode?"
|
724 |
+
msgstr "Activer mode de débogage ?"
|
725 |
+
|
726 |
+
#: admin/views/settings-page.php:35
|
727 |
+
msgid "Will use uncompressed js"
|
728 |
+
msgstr "Utilisera des js non compressés"
|
729 |
+
|
730 |
+
#: admin/views/settings-page.php:40
|
731 |
+
msgid "Enable safe mode?"
|
732 |
+
msgstr "Activer mode sans échec ?"
|
733 |
+
|
734 |
+
#: admin/views/settings-page.php:43
|
735 |
+
msgid "Will move all popups to top of the screen."
|
736 |
+
msgstr "Ouvrira tous les popups en haut de l’écran."
|
737 |
+
|
738 |
+
#: admin/views/settings-page.php:48
|
739 |
+
msgid "Remove shortcodes style"
|
740 |
+
msgstr "Supprimer le style des shortcodes"
|
741 |
+
|
742 |
+
#: admin/views/settings-page.php:51
|
743 |
+
msgid ""
|
744 |
+
"By default the plugin will apply some style to shortcodes. Check here if you "
|
745 |
+
"want to manually style them"
|
746 |
+
msgstr ""
|
747 |
+
"Par défaut le plugin applique un style aux shortcodes. Cochez ici si vous "
|
748 |
+
"voulez les styler manuellement"
|
749 |
+
|
750 |
+
#: admin/views/settings-page.php:56
|
751 |
+
msgid "Unload Facebook javascript"
|
752 |
+
msgstr "Ne pas charger le javascript de Facebook"
|
753 |
+
|
754 |
+
#: admin/views/settings-page.php:59
|
755 |
+
msgid "If you use your own Facebook script, check this"
|
756 |
+
msgstr "Si vous utilisez votre propre script Facebook, cochez ici"
|
757 |
+
|
758 |
+
#: admin/views/settings-page.php:64
|
759 |
+
msgid "Unload Google javascript"
|
760 |
+
msgstr "Ne pas charger le javascript de Google"
|
761 |
+
|
762 |
+
#: admin/views/settings-page.php:67
|
763 |
+
msgid "If you use your own Google script, check this"
|
764 |
+
msgstr "Si vous utilisez votre propre script Google, cochez ici"
|
765 |
+
|
766 |
+
#: admin/views/settings-page.php:72
|
767 |
+
msgid "Unload Twitter javascript"
|
768 |
+
msgstr "Ne pas charger le javascript de Twitter"
|
769 |
+
|
770 |
+
#: admin/views/settings-page.php:75
|
771 |
+
msgid "If you use your own Twitter script, check this"
|
772 |
+
msgstr "Si vous utilisez votre propre script pour Twitter, cochez ici"
|
773 |
+
|
774 |
+
#: admin/views/settings-page.php:82
|
775 |
+
msgid "Delete all data on Uninstall"
|
776 |
+
msgstr "Effacez toutes les données en cas de désinstallation"
|
777 |
+
|
778 |
+
#: admin/views/settings-page.php:85
|
779 |
+
msgid ""
|
780 |
+
"When you uninstall the plugin all popups, settings and stats will be deleted "
|
781 |
+
"from your db"
|
782 |
+
msgstr ""
|
783 |
+
"Quand vous désinstallez le plugin tous les popups, les réglages et les "
|
784 |
+
"statistiques sont effacées de la base de données"
|
785 |
+
|
786 |
+
#: admin/views/settings-page.php:89
|
787 |
+
msgid "Save settings"
|
788 |
+
msgstr "Sauvegarder les réglages"
|
789 |
+
|
790 |
+
#: includes/class-spu-helper.php:131
|
791 |
+
msgid "All Pages"
|
792 |
+
msgstr "Toutes les pages"
|
793 |
+
|
794 |
+
#: includes/class-spu-helper.php:132
|
795 |
+
msgid "Front Page"
|
796 |
+
msgstr "Page de garde"
|
797 |
+
|
798 |
+
#: includes/class-spu-helper.php:133
|
799 |
+
msgid "Posts Page"
|
800 |
+
msgstr "Page des articles"
|
801 |
+
|
802 |
+
#: includes/class-spu-helper.php:134
|
803 |
+
msgid "Category Page"
|
804 |
+
msgstr "Page catégories"
|
805 |
+
|
806 |
+
#: includes/class-spu-helper.php:135
|
807 |
+
msgid "Search Page"
|
808 |
+
msgstr "Page recherche"
|
809 |
+
|
810 |
+
#: includes/class-spu-helper.php:136
|
811 |
+
msgid "Archives Page"
|
812 |
+
msgstr "Page archives"
|
813 |
+
|
814 |
+
#: includes/class-spu-helper.php:137
|
815 |
+
msgid "Top Level Page (parent of 0)"
|
816 |
+
msgstr "Page de premier niveau (parent de 0)"
|
817 |
+
|
818 |
+
#: includes/class-spu-helper.php:138
|
819 |
+
msgid "Parent Page (has children)"
|
820 |
+
msgstr "Page parent (a un enfant)"
|
821 |
+
|
822 |
+
#: includes/class-spu-helper.php:139
|
823 |
+
msgid "Child Page (has parent)"
|
824 |
+
msgstr "Page enfant (a un parent)"
|
825 |
+
|
826 |
+
#: includes/class-spu-helper.php:147
|
827 |
+
msgid "Default Template"
|
828 |
+
msgstr "Modèle par défaut"
|
829 |
+
|
830 |
+
#: includes/class-spu-helper.php:220
|
831 |
+
msgid "Publish"
|
832 |
+
msgstr "Publier"
|
833 |
+
|
834 |
+
#: includes/class-spu-helper.php:221
|
835 |
+
msgid "Pending Review"
|
836 |
+
msgstr "Révision en attente"
|
837 |
+
|
838 |
+
#: includes/class-spu-helper.php:222
|
839 |
+
msgid "Draft"
|
840 |
+
msgstr "Brouillon"
|
841 |
+
|
842 |
+
#: includes/class-spu-helper.php:223
|
843 |
+
msgid "Future"
|
844 |
+
msgstr "Avenir"
|
845 |
+
|
846 |
+
#: includes/class-spu-helper.php:224
|
847 |
+
msgid "Private"
|
848 |
+
msgstr "Privé"
|
849 |
+
|
850 |
+
#: includes/class-spu-helper.php:225
|
851 |
+
msgid "Revision"
|
852 |
+
msgstr "Révision"
|
853 |
+
|
854 |
+
#: includes/class-spu-helper.php:226
|
855 |
+
msgid "Trash"
|
856 |
+
msgstr "Corbeille"
|
857 |
+
|
858 |
+
#: includes/class-spu-helper.php:239
|
859 |
+
msgid "Super Admin"
|
860 |
+
msgstr "Super Administrateur"
|
861 |
+
|
862 |
+
#: includes/class-spu-helper.php:259
|
863 |
+
msgid "True"
|
864 |
+
msgstr "Vrai"
|
languages/popups-ru_RU.po
CHANGED
@@ -1,730 +1,730 @@
|
|
1 |
-
# Copyright (C) 2013 TODO
|
2 |
-
# This file is distributed under the same license as the TODO package.
|
3 |
-
# Translators:
|
4 |
-
# Анатолий, 2015
|
5 |
-
msgid ""
|
6 |
-
msgstr ""
|
7 |
-
"Project-Id-Version: Popups\n"
|
8 |
-
"Report-Msgid-Bugs-To: http://wordpress.org/plugins/plugin-name\n"
|
9 |
-
"POT-Creation-Date: 2015-06-14 00:02-0300\n"
|
10 |
-
"PO-Revision-Date: 2015-10-01 11:18-0300\n"
|
11 |
-
"Last-Translator: Анатолий\n"
|
12 |
-
"Language-Team: Russian (Russia) (http://www.transifex.com/timersys/popups/language/ru_RU/)\n"
|
13 |
-
"MIME-Version: 1.0\n"
|
14 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
15 |
-
"Content-Transfer-Encoding: 8bit\n"
|
16 |
-
"Language: ru_RU\n"
|
17 |
-
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
18 |
-
"X-Generator: Poedit 1.7.4\n"
|
19 |
-
"X-Poedit-Basepath: ../\n"
|
20 |
-
"X-Poedit-KeywordsList: __;_e;_n;_x;esc_html_e;esc_html__;esc_attr_e;esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2\n"
|
21 |
-
"X-Poedit-SearchPath-0: .\n"
|
22 |
-
|
23 |
-
#: admin/class-social-popup-admin.php:154
|
24 |
-
msgctxt "post type singular name"
|
25 |
-
msgid "Popups"
|
26 |
-
msgstr "Popups"
|
27 |
-
|
28 |
-
#: admin/class-social-popup-admin.php:155
|
29 |
-
msgctxt "admin menu"
|
30 |
-
msgid "Popups"
|
31 |
-
msgstr "Popups"
|
32 |
-
|
33 |
-
#: admin/class-social-popup-admin.php:156
|
34 |
-
msgctxt "add new on admin bar"
|
35 |
-
msgid "Popups"
|
36 |
-
msgstr "Popups"
|
37 |
-
|
38 |
-
#: admin/class-social-popup-admin.php:157
|
39 |
-
msgctxt "Popups"
|
40 |
-
msgid "Add New"
|
41 |
-
msgstr "Добавить новый"
|
42 |
-
|
43 |
-
#: admin/class-social-popup-admin.php:158
|
44 |
-
msgid "Add New Popups"
|
45 |
-
msgstr "Добавить новый Popups"
|
46 |
-
|
47 |
-
#: admin/class-social-popup-admin.php:159
|
48 |
-
msgid "New Popups"
|
49 |
-
msgstr "Новый Popups"
|
50 |
-
|
51 |
-
#: admin/class-social-popup-admin.php:160
|
52 |
-
msgid "Edit Popups"
|
53 |
-
msgstr "Редактировать Popups"
|
54 |
-
|
55 |
-
#: admin/class-social-popup-admin.php:161
|
56 |
-
msgid "View Popups"
|
57 |
-
msgstr "Редактировать Popups"
|
58 |
-
|
59 |
-
#: admin/class-social-popup-admin.php:162
|
60 |
-
msgid "All Popups"
|
61 |
-
msgstr "Все Popups"
|
62 |
-
|
63 |
-
#: admin/class-social-popup-admin.php:163
|
64 |
-
msgid "Search Popups"
|
65 |
-
msgstr "Поиск Popups"
|
66 |
-
|
67 |
-
#: admin/class-social-popup-admin.php:164
|
68 |
-
msgid "Parent Popups:"
|
69 |
-
msgstr "Родительский Popups:"
|
70 |
-
|
71 |
-
#: admin/class-social-popup-admin.php:165
|
72 |
-
msgid "No Popups found."
|
73 |
-
msgstr "Не найден Popups"
|
74 |
-
|
75 |
-
#: admin/class-social-popup-admin.php:166
|
76 |
-
msgid "No Popups found in Trash."
|
77 |
-
msgstr "Не найден Popups в Корзине"
|
78 |
-
|
79 |
-
#: admin/class-social-popup-admin.php:255
|
80 |
-
msgid "Popups Premium"
|
81 |
-
msgstr "Премиум Popups"
|
82 |
-
|
83 |
-
#: admin/class-social-popup-admin.php:266
|
84 |
-
msgid "PopUp Shortcodes"
|
85 |
-
msgstr "Шорткоды PopUp"
|
86 |
-
|
87 |
-
#: admin/class-social-popup-admin.php:275
|
88 |
-
msgid "PopUp Display Rules"
|
89 |
-
msgstr "Отображать правила PopUp"
|
90 |
-
|
91 |
-
#: admin/class-social-popup-admin.php:284
|
92 |
-
msgid "Display Options"
|
93 |
-
msgstr "Отображать опции"
|
94 |
-
|
95 |
-
#: admin/class-social-popup-admin.php:293
|
96 |
-
msgid "Need support?"
|
97 |
-
msgstr "Нужна помощь?"
|
98 |
-
|
99 |
-
#: admin/class-social-popup-admin.php:301
|
100 |
-
msgid "Donate & support"
|
101 |
-
msgstr "Помощь и Поддержка"
|
102 |
-
|
103 |
-
#: admin/class-social-popup-admin.php:309
|
104 |
-
msgid "About the developer"
|
105 |
-
msgstr "О разработчике"
|
106 |
-
|
107 |
-
#: admin/class-social-popup-admin.php:557 admin/views/metaboxes/metabox-rules.php:33 admin/views/metaboxes/metabox-rules.php:106
|
108 |
-
msgid "or"
|
109 |
-
msgstr "или"
|
110 |
-
|
111 |
-
#: admin/class-social-popup-admin.php:584
|
112 |
-
msgid "Add a Popup"
|
113 |
-
msgstr "Добавить Popup"
|
114 |
-
|
115 |
-
#: admin/class-social-popup-admin.php:708
|
116 |
-
msgid "User"
|
117 |
-
msgstr "Пользователь"
|
118 |
-
|
119 |
-
#: admin/class-social-popup-admin.php:709
|
120 |
-
msgid "User role"
|
121 |
-
msgstr "Роль пользователя"
|
122 |
-
|
123 |
-
#: admin/class-social-popup-admin.php:710
|
124 |
-
msgid "User is logged"
|
125 |
-
msgstr "Пользователь залогинен"
|
126 |
-
|
127 |
-
#: admin/class-social-popup-admin.php:711
|
128 |
-
msgid "User never left a comment"
|
129 |
-
msgstr "Пользователь никогда не комментировал"
|
130 |
-
|
131 |
-
#: admin/class-social-popup-admin.php:712
|
132 |
-
msgid "User came via a search engine"
|
133 |
-
msgstr "Пользователь пришел из поисковых систем"
|
134 |
-
|
135 |
-
#: admin/class-social-popup-admin.php:713
|
136 |
-
msgid "User did not arrive via another page on your site"
|
137 |
-
msgstr "Пользователь не пришел с другой страницы на вашем сайте"
|
138 |
-
|
139 |
-
#: admin/class-social-popup-admin.php:715 admin/class-social-popup-admin.php:716
|
140 |
-
msgid "Post"
|
141 |
-
msgstr "Публикация"
|
142 |
-
|
143 |
-
#: admin/class-social-popup-admin.php:717
|
144 |
-
msgid "Post ID"
|
145 |
-
msgstr "ID публикации"
|
146 |
-
|
147 |
-
#: admin/class-social-popup-admin.php:718
|
148 |
-
msgid "Post Type"
|
149 |
-
msgstr "Тип публикации"
|
150 |
-
|
151 |
-
#: admin/class-social-popup-admin.php:719
|
152 |
-
msgid "Post Category"
|
153 |
-
msgstr "Категория публикации"
|
154 |
-
|
155 |
-
#: admin/class-social-popup-admin.php:720
|
156 |
-
msgid "Post Format"
|
157 |
-
msgstr "Формат публикации"
|
158 |
-
|
159 |
-
#: admin/class-social-popup-admin.php:721
|
160 |
-
msgid "Post Status"
|
161 |
-
msgstr "Статус публикации"
|
162 |
-
|
163 |
-
#: admin/class-social-popup-admin.php:722
|
164 |
-
msgid "Post Taxonomy"
|
165 |
-
msgstr "Таксономия публикации"
|
166 |
-
|
167 |
-
#: admin/class-social-popup-admin.php:724 admin/class-social-popup-admin.php:725
|
168 |
-
msgid "Page"
|
169 |
-
msgstr "Страница"
|
170 |
-
|
171 |
-
#: admin/class-social-popup-admin.php:726
|
172 |
-
msgid "Page Type"
|
173 |
-
msgstr "Тип страницы"
|
174 |
-
|
175 |
-
#: admin/class-social-popup-admin.php:727
|
176 |
-
msgid "Page Parent"
|
177 |
-
msgstr "Родительская страница"
|
178 |
-
|
179 |
-
#: admin/class-social-popup-admin.php:728
|
180 |
-
msgid "Page Template"
|
181 |
-
msgstr "Шаблон страницы"
|
182 |
-
|
183 |
-
#: admin/class-social-popup-admin.php:730
|
184 |
-
msgid "Other"
|
185 |
-
msgstr "Другие"
|
186 |
-
|
187 |
-
#: admin/class-social-popup-admin.php:731
|
188 |
-
msgid "Referrer"
|
189 |
-
msgstr "Реферер"
|
190 |
-
|
191 |
-
#: admin/class-social-popup-admin.php:732
|
192 |
-
msgid "Mobile Phone"
|
193 |
-
msgstr "Мобильный телефон"
|
194 |
-
|
195 |
-
#: admin/class-social-popup-admin.php:733
|
196 |
-
msgid "Tablet"
|
197 |
-
msgstr "Планшет"
|
198 |
-
|
199 |
-
#: admin/includes/class-spu-notices.php:30
|
200 |
-
#, php-format
|
201 |
-
msgid "We noticed that you have been using our plugin for a while and we would like to ask you a little favour. If you are happy with it and can take a minute please <a href=\"%s\" target=\"_blank\">leave a nice review</a> on WordPress. It will be a tremendous help for us!"
|
202 |
-
msgstr "Мы заметили, что вы использовали наш плагин некоторое время, и мы хотели бы попросить оказать нам небольшую услугу. Если вам понравился наш плагин и у вас есть свободная минутка, пожалуйста <a href=\"%s\" target=\"_blank\">оставьте хороший отзыв</a> на WordPress. Это будет огромная помощь для нас!"
|
203 |
-
|
204 |
-
#: admin/includes/class-spu-notices.php:32
|
205 |
-
#, php-format
|
206 |
-
msgid "<a href=\"%s\" target=\"_blank\">Leave a nice review</a>"
|
207 |
-
msgstr "<a href=\"%s\" target=\"_blank\">Оставьте хороший отзыв</a>"
|
208 |
-
|
209 |
-
#: admin/includes/class-spu-notices.php:33
|
210 |
-
#, php-format
|
211 |
-
msgid "<a href=\"%s\">No, thanks</a>"
|
212 |
-
msgstr "<a href=\"%s\">Нет, спасибо</a>"
|
213 |
-
|
214 |
-
#: admin/views/metaboxes/metabox-donate.php:6
|
215 |
-
msgid "If you like this plugin, consider supporting it by donating."
|
216 |
-
msgstr "Если вам нравится этот плагин, поддержите, пожалуйста, его."
|
217 |
-
|
218 |
-
#: admin/views/metaboxes/metabox-donate.php:8
|
219 |
-
msgid "Donate with PayPal"
|
220 |
-
msgstr "Помочь через PayPal"
|
221 |
-
|
222 |
-
#: admin/views/metaboxes/metabox-donate.php:10
|
223 |
-
msgid "Some other ways to support this plugin"
|
224 |
-
msgstr "Некоторые другие способы поддержки этого плагина"
|
225 |
-
|
226 |
-
#: admin/views/metaboxes/metabox-donate.php:12
|
227 |
-
msgid "Leave a ★★★★★ review on WordPress.org"
|
228 |
-
msgstr "Оставьте ★★★★★ отзыв на WordPress.org"
|
229 |
-
|
230 |
-
#: admin/views/metaboxes/metabox-donate.php:13
|
231 |
-
msgid "Write about Popups on your blog"
|
232 |
-
msgstr "Напишите о плагине Popups на своем блоге"
|
233 |
-
|
234 |
-
#: admin/views/metaboxes/metabox-donate.php:14
|
235 |
-
msgid "Tweet about Popups"
|
236 |
-
msgstr "Твитнуть о плагине Popups"
|
237 |
-
|
238 |
-
#: admin/views/metaboxes/metabox-donate.php:15
|
239 |
-
msgid "Vote \"works\" on the WordPress.org plugin page"
|
240 |
-
msgstr "Проголосовать \"работает\" на странице плагина в WordPress.org"
|
241 |
-
|
242 |
-
#: admin/views/metaboxes/metabox-help.php:6
|
243 |
-
msgid "You have three social shortcodes to use that will print a Facebook like, a Google+ Follow and a Twitter follow. Check the available options and <strong>configure them with your social accounts</strong>:"
|
244 |
-
msgstr "У вас есть возможность использовать три социальных Шорткода: Facebook Лайк, подписка на Google+ и следовать в Twitter. Проверьте доступные варианты и <strong>настройте их со своими социальными профилями</strong>:"
|
245 |
-
|
246 |
-
#: admin/views/metaboxes/metabox-help.php:12
|
247 |
-
msgid "View Facebook Page Options"
|
248 |
-
msgstr "Смотреть параметры страницы в Facebook"
|
249 |
-
|
250 |
-
#: admin/views/metaboxes/metabox-help.php:14 admin/views/metaboxes/metabox-help.php:27
|
251 |
-
msgid "Your facebook page url"
|
252 |
-
msgstr "Ссылка на вашу страницу Facebook"
|
253 |
-
|
254 |
-
#: admin/views/metaboxes/metabox-help.php:15
|
255 |
-
msgid "Your page name"
|
256 |
-
msgstr "Имя вашей страницы"
|
257 |
-
|
258 |
-
#: admin/views/metaboxes/metabox-help.php:16
|
259 |
-
msgid "true|false <b>Default value:</b> true"
|
260 |
-
msgstr "true|false <b>Значение по умолчанию:</b> true"
|
261 |
-
|
262 |
-
#: admin/views/metaboxes/metabox-help.php:17
|
263 |
-
msgid "true|false <b>Default value:</b> false"
|
264 |
-
msgstr "true|false <b>Значение по умолчанию:</b> false"
|
265 |
-
|
266 |
-
#: admin/views/metaboxes/metabox-help.php:25
|
267 |
-
msgid "View Facebook Options"
|
268 |
-
msgstr "Посмотреть опции Facebook"
|
269 |
-
|
270 |
-
#: admin/views/metaboxes/metabox-help.php:28
|
271 |
-
msgid "standard, box_count, button <b>Default value:</b> button_count"
|
272 |
-
msgstr "standard, box_count, button <b>Значение по умолчанию:</b> button_count"
|
273 |
-
|
274 |
-
#: admin/views/metaboxes/metabox-help.php:29 admin/views/metaboxes/metabox-help.php:30
|
275 |
-
msgid "true <b>Default value:</b> false"
|
276 |
-
msgstr "true <b>Значение по умолчанию:</b> false"
|
277 |
-
|
278 |
-
#: admin/views/metaboxes/metabox-help.php:31
|
279 |
-
msgid "recommend <b>Default value:</b> like"
|
280 |
-
msgstr "рекомендованное <b>Значение по умолчанию:</b> like"
|
281 |
-
|
282 |
-
#: admin/views/metaboxes/metabox-help.php:38
|
283 |
-
msgid "View Google+ Options"
|
284 |
-
msgstr "Посмотреть опции Google+"
|
285 |
-
|
286 |
-
#: admin/views/metaboxes/metabox-help.php:40
|
287 |
-
msgid "Your Google+ url"
|
288 |
-
msgstr "Ссылка на ваш Google+"
|
289 |
-
|
290 |
-
#: admin/views/metaboxes/metabox-help.php:41
|
291 |
-
msgid "small, standard, tall <b>Default value:</b> medium"
|
292 |
-
msgstr "small, standard, tall <b>Значение по умолчанию:</b> medium"
|
293 |
-
|
294 |
-
#: admin/views/metaboxes/metabox-help.php:42
|
295 |
-
msgid "inline, none <b>Default value:</b> bubble"
|
296 |
-
msgstr "inline, none <b>Значение по умолчанию:</b> bubble"
|
297 |
-
|
298 |
-
#: admin/views/metaboxes/metabox-help.php:48
|
299 |
-
msgid "View Twitter Options"
|
300 |
-
msgstr "Посмотреть опции в Twitter"
|
301 |
-
|
302 |
-
#: admin/views/metaboxes/metabox-help.php:50
|
303 |
-
msgid "Your Twitter user <b>Default chifli</b>iiii"
|
304 |
-
msgstr "Ваш пользователь в Twitter <b>chifli по умолчанию</b>iiii"
|
305 |
-
|
306 |
-
#: admin/views/metaboxes/metabox-help.php:51
|
307 |
-
msgid "false <b>Default value:</b> true"
|
308 |
-
msgstr "false <b>Значение по умолчанию:</b> true"
|
309 |
-
|
310 |
-
#: admin/views/metaboxes/metabox-help.php:52
|
311 |
-
msgid "large <b>Default value:</b> \"\""
|
312 |
-
msgstr "large <b>Значение по умолчанию:</b> \"\""
|
313 |
-
|
314 |
-
#: admin/views/metaboxes/metabox-help.php:55
|
315 |
-
msgid "Other available Shortcodes:"
|
316 |
-
msgstr "Другие доступные шорткоды:"
|
317 |
-
|
318 |
-
#: admin/views/metaboxes/metabox-help.php:60
|
319 |
-
msgid "View Close shortcode Options"
|
320 |
-
msgstr "Помостреть Закрыть опции шорткодов"
|
321 |
-
|
322 |
-
#: admin/views/metaboxes/metabox-help.php:62
|
323 |
-
msgid "Pass a custom class to style your button"
|
324 |
-
msgstr "Передайте собственный класс стиля для ваших кнопок"
|
325 |
-
|
326 |
-
#: admin/views/metaboxes/metabox-help.php:63
|
327 |
-
msgid "Button label - <b>Default value:</b> Close"
|
328 |
-
msgstr "Значение кнопки - <b>Значение по умолчанию:</b> Close"
|
329 |
-
|
330 |
-
#: admin/views/metaboxes/metabox-help.php:64
|
331 |
-
msgid "left, right, center, none - <b>Default value:</b> center"
|
332 |
-
msgstr "left, right, center, none - <b>Значение по умолчанию:</b> center"
|
333 |
-
|
334 |
-
#: admin/views/metaboxes/metabox-links.php:6
|
335 |
-
msgid "My name is"
|
336 |
-
msgstr "Меня зовут"
|
337 |
-
|
338 |
-
#: admin/views/metaboxes/metabox-links.php:6
|
339 |
-
msgid "I develop WordPress plugins and themes."
|
340 |
-
msgstr "Я разрабатываю плагины и темы для WordPress."
|
341 |
-
|
342 |
-
#: admin/views/metaboxes/metabox-links.php:7
|
343 |
-
#, php-format
|
344 |
-
msgid "Take a look at my <a href=\"%s\">site</a> to see my other plugins or hire me. Subscribe to get updates!"
|
345 |
-
msgstr "Взгляните на мой <a href=\"%s\">сайт</a> чтобы увидеть мои другие плагины или нанять меня. Подпишитесь на обновления!"
|
346 |
-
|
347 |
-
#: admin/views/metaboxes/metabox-links.php:8
|
348 |
-
msgid "Other plugins I built:"
|
349 |
-
msgstr "Другие плагины которые я разработал:"
|
350 |
-
|
351 |
-
#: admin/views/metaboxes/metabox-links.php:10
|
352 |
-
msgid "Install multiple plugins and create collections"
|
353 |
-
msgstr "Установка нескольких плагинов и создать коллекции"
|
354 |
-
|
355 |
-
#: admin/views/metaboxes/metabox-links.php:11
|
356 |
-
msgid "Geotarget your content"
|
357 |
-
msgstr "Геотаргетинг вашего контента"
|
358 |
-
|
359 |
-
#: admin/views/metaboxes/metabox-links.php:12
|
360 |
-
msgid "Invite your network friends and import contacts"
|
361 |
-
msgstr "Пригласить своих друзей из сети и импортировать контакты"
|
362 |
-
|
363 |
-
#: admin/views/metaboxes/metabox-options.php:9
|
364 |
-
msgid "Box Position"
|
365 |
-
msgstr "Позиция Box"
|
366 |
-
|
367 |
-
#: admin/views/metaboxes/metabox-options.php:12
|
368 |
-
msgid "Centered"
|
369 |
-
msgstr "По центру"
|
370 |
-
|
371 |
-
#: admin/views/metaboxes/metabox-options.php:13
|
372 |
-
msgid "Top Left"
|
373 |
-
msgstr "Слева вверху"
|
374 |
-
|
375 |
-
#: admin/views/metaboxes/metabox-options.php:14
|
376 |
-
msgid "Top Right"
|
377 |
-
msgstr "Справа вверху"
|
378 |
-
|
379 |
-
#: admin/views/metaboxes/metabox-options.php:15
|
380 |
-
msgid "Bottom Left"
|
381 |
-
msgstr "Внизу слева"
|
382 |
-
|
383 |
-
#: admin/views/metaboxes/metabox-options.php:16
|
384 |
-
msgid "Bottom Right"
|
385 |
-
msgstr "Внизу справа"
|
386 |
-
|
387 |
-
#: admin/views/metaboxes/metabox-options.php:23
|
388 |
-
msgid "Trigger action"
|
389 |
-
msgstr "Запуск действия"
|
390 |
-
|
391 |
-
#: admin/views/metaboxes/metabox-options.php:27
|
392 |
-
msgid "seconds after page load"
|
393 |
-
msgstr "секунд после загрузки страницы"
|
394 |
-
|
395 |
-
#: admin/views/metaboxes/metabox-options.php:28
|
396 |
-
msgid "of page height"
|
397 |
-
msgstr "высоты страницы"
|
398 |
-
|
399 |
-
#: admin/views/metaboxes/metabox-options.php:38
|
400 |
-
msgid "Auto-hide?"
|
401 |
-
msgstr "Авто-скрытие?"
|
402 |
-
|
403 |
-
#: admin/views/metaboxes/metabox-options.php:40 admin/views/metaboxes/metabox-options.php:68 admin/views/metaboxes/metabox-options.php:76 admin/views/metaboxes/metabox-options.php:84
|
404 |
-
msgid "Yes"
|
405 |
-
msgstr "Да"
|
406 |
-
|
407 |
-
#: admin/views/metaboxes/metabox-options.php:41 admin/views/metaboxes/metabox-options.php:69 admin/views/metaboxes/metabox-options.php:77 admin/views/metaboxes/metabox-options.php:85
|
408 |
-
msgid "No"
|
409 |
-
msgstr "Нет"
|
410 |
-
|
411 |
-
#: admin/views/metaboxes/metabox-options.php:42
|
412 |
-
#, php-format
|
413 |
-
msgid "Hide box again when visitors scroll back up? Only works when Trigger action is set to % of page height"
|
414 |
-
msgstr "Скрыть окно снова, когда посетители прокрутили обратно? Работает только когда действие триггера установлено % oт высоты страницы"
|
415 |
-
|
416 |
-
#: admin/views/metaboxes/metabox-options.php:46
|
417 |
-
msgid "Animation"
|
418 |
-
msgstr "Анимация"
|
419 |
-
|
420 |
-
#: admin/views/metaboxes/metabox-options.php:49
|
421 |
-
msgid "Fade In"
|
422 |
-
msgstr "Плавное появление"
|
423 |
-
|
424 |
-
#: admin/views/metaboxes/metabox-options.php:50
|
425 |
-
msgid "Slide In"
|
426 |
-
msgstr "Выдвижение"
|
427 |
-
|
428 |
-
#: admin/views/metaboxes/metabox-options.php:53
|
429 |
-
msgid "Slide will only apply when popup is on the corners"
|
430 |
-
msgstr "Выдвижение будет применяться только тогда, когда всплывающее окно находится по углах"
|
431 |
-
|
432 |
-
#: admin/views/metaboxes/metabox-options.php:58
|
433 |
-
msgid "Cookie expiration days"
|
434 |
-
msgstr "Куки действуют дней"
|
435 |
-
|
436 |
-
#: admin/views/metaboxes/metabox-options.php:61
|
437 |
-
msgid "After closing the box, how many days should it stay hidden?"
|
438 |
-
msgstr "После закрытия окна, сколько дней PopUp должен оставаться скрытым?"
|
439 |
-
|
440 |
-
#: admin/views/metaboxes/metabox-options.php:66
|
441 |
-
msgid "Enable test mode?"
|
442 |
-
msgstr "Включить тестовый режим?"
|
443 |
-
|
444 |
-
#: admin/views/metaboxes/metabox-options.php:70
|
445 |
-
msgid "If test mode is enabled, the box will show up regardless of whether a cookie has been set. (To admins only)"
|
446 |
-
msgstr "Если тестовый режим включен, окно будет отображаться независимо от того, были ли установлены куки. (только Админам)"
|
447 |
-
|
448 |
-
#: admin/views/metaboxes/metabox-options.php:74
|
449 |
-
msgid "Close on conversion?"
|
450 |
-
msgstr "Закрыть при конверсии?"
|
451 |
-
|
452 |
-
#: admin/views/metaboxes/metabox-options.php:78
|
453 |
-
msgid "If you have a form or social shortcode, by default popup will close on submission/conversion"
|
454 |
-
msgstr "Если у вас есть форма или социальной шорткод, по умолчанию всплывающие закроется при подтверждении/конверсии"
|
455 |
-
|
456 |
-
#: admin/views/metaboxes/metabox-options.php:82
|
457 |
-
msgid "Show powered by link?"
|
458 |
-
msgstr "Показать ссылку powered by?"
|
459 |
-
|
460 |
-
#: admin/views/metaboxes/metabox-options.php:86
|
461 |
-
#, php-format
|
462 |
-
msgid "Shows a \"powered by\" link below your popup. If your affiliate link is set in the <a href=\"%s\">settings</a>, it will be used."
|
463 |
-
msgstr "Показать ссылку \"powered by\" под вашим PopUp. Если ваша партнерская ссылка указана в <a href=\"%s\">настройках</a>, она будет использована."
|
464 |
-
|
465 |
-
#: admin/views/metaboxes/metabox-options.php:91
|
466 |
-
msgid "Appearance"
|
467 |
-
msgstr "Появление"
|
468 |
-
|
469 |
-
#: admin/views/metaboxes/metabox-options.php:95
|
470 |
-
msgid "Background opacity"
|
471 |
-
msgstr "Размытие фона"
|
472 |
-
|
473 |
-
#: admin/views/metaboxes/metabox-options.php:98
|
474 |
-
msgid "Leave at 0 for no background. Max value is 1"
|
475 |
-
msgstr "Оставьте 0 для без фона. Максимальное значение равно 1"
|
476 |
-
|
477 |
-
#: admin/views/metaboxes/metabox-options.php:104
|
478 |
-
msgid "Background color"
|
479 |
-
msgstr "Цвет фона"
|
480 |
-
|
481 |
-
#: admin/views/metaboxes/metabox-options.php:108
|
482 |
-
msgid "Text color"
|
483 |
-
msgstr "Цвет текста"
|
484 |
-
|
485 |
-
#: admin/views/metaboxes/metabox-options.php:112
|
486 |
-
msgid "Box width"
|
487 |
-
msgstr "Ширина Бокса"
|
488 |
-
|
489 |
-
#: admin/views/metaboxes/metabox-options.php:118
|
490 |
-
msgid "Border color"
|
491 |
-
msgstr "Цвет рамки"
|
492 |
-
|
493 |
-
#: admin/views/metaboxes/metabox-options.php:122
|
494 |
-
msgid "Border width"
|
495 |
-
msgstr "Ширина рамки"
|
496 |
-
|
497 |
-
#: admin/views/metaboxes/metabox-premium.php:16
|
498 |
-
msgid "Take the best WordPress Popups plugin to the next level with Popups Premium extension."
|
499 |
-
msgstr "Используйте максимум преимуществ плагина \"всплывающие окна\" для WordPress с расширением Popups Premium ."
|
500 |
-
|
501 |
-
#: admin/views/metaboxes/metabox-premium.php:17
|
502 |
-
msgid "Popups Premium Features:"
|
503 |
-
msgstr "Преимущества Popups Premium:"
|
504 |
-
|
505 |
-
#: admin/views/metaboxes/metabox-premium.php:19
|
506 |
-
msgid "Beautiful optin forms for popular mail providers"
|
507 |
-
msgstr "Красивые OptIn формы для популярных почтовых служб"
|
508 |
-
|
509 |
-
#: admin/views/metaboxes/metabox-premium.php:20
|
510 |
-
msgid "Currently supporting MailChimp, Aweber, Postmatic, Mailpoet"
|
511 |
-
msgstr "Сейчас поддерживаются MailChimp, Aweber, Postmatic, Mailpoet"
|
512 |
-
|
513 |
-
#: admin/views/metaboxes/metabox-premium.php:21
|
514 |
-
msgid "Track impressions and Conversions of social likes and forms submissions like Contact Form 7, Gravity forms, etc"
|
515 |
-
msgstr "Отслеживать показы и переходы из социальных сетей и формировать отчеты по действиям Contact Form 7, Gravity формы, и т.д."
|
516 |
-
|
517 |
-
#: admin/views/metaboxes/metabox-premium.php:22
|
518 |
-
msgid "Track impressions and Conversions also in Google Analytics"
|
519 |
-
msgstr "Отслеживать показы и переходы также и в Google Analytics"
|
520 |
-
|
521 |
-
#: admin/views/metaboxes/metabox-premium.php:23 admin/views/metaboxes/metabox-premium.php:25
|
522 |
-
msgid "Exit Intent technology"
|
523 |
-
msgstr "Выход Целевой технологии"
|
524 |
-
|
525 |
-
#: admin/views/metaboxes/metabox-premium.php:24
|
526 |
-
msgid "8 New animations effects"
|
527 |
-
msgstr "8 новых анимационных эффектов"
|
528 |
-
|
529 |
-
#: admin/views/metaboxes/metabox-premium.php:26
|
530 |
-
msgid "New trigger methods"
|
531 |
-
msgstr "Новые методы отслеживания"
|
532 |
-
|
533 |
-
#: admin/views/metaboxes/metabox-premium.php:27
|
534 |
-
msgid "Timer for auto closing"
|
535 |
-
msgstr "Таймер для автоматического закрытия"
|
536 |
-
|
537 |
-
#: admin/views/metaboxes/metabox-premium.php:28
|
538 |
-
msgid "Ability to disable close button"
|
539 |
-
msgstr "Возможность отключения кнопки закрытия"
|
540 |
-
|
541 |
-
#: admin/views/metaboxes/metabox-premium.php:29
|
542 |
-
msgid "Ability to disable Advanced close methods like esc or clicking outside of the popup"
|
543 |
-
msgstr "Возможность отключения расширенных методов закрытия, такие как нажатие ESC или клик снаружи всплывающего окна"
|
544 |
-
|
545 |
-
#: admin/views/metaboxes/metabox-premium.php:30
|
546 |
-
msgid "Premium support"
|
547 |
-
msgstr "Премиум поддержка"
|
548 |
-
|
549 |
-
#: admin/views/metaboxes/metabox-premium.php:34
|
550 |
-
msgid "Buy Now!"
|
551 |
-
msgstr "Купить сейчас!"
|
552 |
-
|
553 |
-
#: admin/views/metaboxes/metabox-rules.php:19
|
554 |
-
msgid "Rules"
|
555 |
-
msgstr "Правила"
|
556 |
-
|
557 |
-
#: admin/views/metaboxes/metabox-rules.php:20
|
558 |
-
msgid "Create a set of rules to determine where the popup will show"
|
559 |
-
msgstr "Создать набор правил для показа всплывающего окна"
|
560 |
-
|
561 |
-
#: admin/views/metaboxes/metabox-rules.php:31
|
562 |
-
msgid "Show this popup if"
|
563 |
-
msgstr "Показать это всплывающее окно, если"
|
564 |
-
|
565 |
-
#: admin/views/metaboxes/metabox-rules.php:61
|
566 |
-
msgid "is equal to"
|
567 |
-
msgstr "равно"
|
568 |
-
|
569 |
-
#: admin/views/metaboxes/metabox-rules.php:62
|
570 |
-
msgid "is not equal to"
|
571 |
-
msgstr "неравно"
|
572 |
-
|
573 |
-
#: admin/views/metaboxes/metabox-rules.php:93
|
574 |
-
msgid "and"
|
575 |
-
msgstr "и"
|
576 |
-
|
577 |
-
#: admin/views/metaboxes/metabox-rules.php:108
|
578 |
-
msgid "Add rule group"
|
579 |
-
msgstr "Добавить группу правил"
|
580 |
-
|
581 |
-
#: admin/views/metaboxes/metabox-support.php:6
|
582 |
-
#, php-format
|
583 |
-
msgid "You are using Popups plugin v%s"
|
584 |
-
msgstr "Вы используете плагин Popups v%s"
|
585 |
-
|
586 |
-
#: admin/views/metaboxes/metabox-support.php:7
|
587 |
-
#, php-format
|
588 |
-
msgid "If you need support please go to the WordPress.org <a href=\"%s\">support forums</a>"
|
589 |
-
msgstr "Если вам нужна поддержка, пожалуйста, перейдите на <a href=\"%s\">форум поддержки</a> WordPress.org"
|
590 |
-
|
591 |
-
#: admin/views/settings-page.php:17
|
592 |
-
msgid "Affiliate link"
|
593 |
-
msgstr "Партнерская ссылка"
|
594 |
-
|
595 |
-
#: admin/views/settings-page.php:20
|
596 |
-
#, php-format
|
597 |
-
msgid "You can earn money by promoting the plugin! Join <a href=\"%s\">our affiliate program</a> and paste your affiliate link here to earn 35% in commissions . Once entered, it will replace the default \"Powered by\" on the popups."
|
598 |
-
msgstr "Вы можете заработать деньги, продвигая плагин! Присоединяйтесь к <a href=\"%s\">нашей партнерской программе</a> и вставьте свою партнерскую ссылку, чтобы заработать 35% комиссионных . После того, как вы введете ее, она заменит значение по умолчанию \"Powered by\" во всплывающих окнах."
|
599 |
-
|
600 |
-
#: admin/views/settings-page.php:24
|
601 |
-
msgid "Ajax mode?"
|
602 |
-
msgstr "Режим Ajax?"
|
603 |
-
|
604 |
-
#: admin/views/settings-page.php:27
|
605 |
-
msgid "Load popups using ajax. Compatible with cache plugins, but might not work with all plugins"
|
606 |
-
msgstr "Загрузка всплывающего окна с помощью Ajax. Совместима с плагинами кэширования, но не может работать с некоторыми плагинами"
|
607 |
-
|
608 |
-
#: admin/views/settings-page.php:32
|
609 |
-
msgid "Enable Debug mode?"
|
610 |
-
msgstr "Включить режим отладки?"
|
611 |
-
|
612 |
-
#: admin/views/settings-page.php:35
|
613 |
-
msgid "Will use uncompressed js"
|
614 |
-
msgstr "Будут использоваться несжатые JS"
|
615 |
-
|
616 |
-
#: admin/views/settings-page.php:40
|
617 |
-
msgid "Enable safe mode?"
|
618 |
-
msgstr "Включить безопасный режим?"
|
619 |
-
|
620 |
-
#: admin/views/settings-page.php:43
|
621 |
-
msgid "Will move all popups to top of the screen."
|
622 |
-
msgstr "Будут передвинуты все всплывающие окна в верхнюю часть экрана."
|
623 |
-
|
624 |
-
#: admin/views/settings-page.php:48
|
625 |
-
msgid "Remove shortcodes style"
|
626 |
-
msgstr "Удалить стили Шорткодов"
|
627 |
-
|
628 |
-
#: admin/views/settings-page.php:51
|
629 |
-
msgid "By default the plugin will apply some style to shortcodes. Check here if you want to manually style them"
|
630 |
-
msgstr "По умолчанию плагин будет применять некоторые стили Шорткодов. Отметьте здесь, если вы хотите задать их стиль вручную"
|
631 |
-
|
632 |
-
#: admin/views/settings-page.php:56
|
633 |
-
msgid "Unload Facebook javascript"
|
634 |
-
msgstr "Выгрузка JavaScript Facebook"
|
635 |
-
|
636 |
-
#: admin/views/settings-page.php:59
|
637 |
-
msgid "If you use your own Facebook script, check this"
|
638 |
-
msgstr "Если вы используете свой собственный скрипт Facebook, отметьте это"
|
639 |
-
|
640 |
-
#: admin/views/settings-page.php:64
|
641 |
-
msgid "Unload Google javascript"
|
642 |
-
msgstr "Выгрузка JavaScript Google"
|
643 |
-
|
644 |
-
#: admin/views/settings-page.php:67
|
645 |
-
msgid "If you use your own Google script, check this"
|
646 |
-
msgstr "Если вы используете свой собственный скрипт Google, отметьте это"
|
647 |
-
|
648 |
-
#: admin/views/settings-page.php:72
|
649 |
-
msgid "Unload Twitter javascript"
|
650 |
-
msgstr "Выгрузка JavaScript Twitter"
|
651 |
-
|
652 |
-
#: admin/views/settings-page.php:75
|
653 |
-
msgid "If you use your own Twitter script, check this"
|
654 |
-
msgstr "Если вы используете свой собственный скрипт Twitter, отметьте это"
|
655 |
-
|
656 |
-
#: admin/views/settings-page.php:80
|
657 |
-
msgid "Save settings"
|
658 |
-
msgstr "Сохранить настройки"
|
659 |
-
|
660 |
-
#: includes/class-spu-helper.php:133
|
661 |
-
msgid "All Pages"
|
662 |
-
msgstr "Все страницы"
|
663 |
-
|
664 |
-
#: includes/class-spu-helper.php:134
|
665 |
-
msgid "Front Page"
|
666 |
-
msgstr "Титульная страница"
|
667 |
-
|
668 |
-
#: includes/class-spu-helper.php:135
|
669 |
-
msgid "Posts Page"
|
670 |
-
msgstr "Страница Публикаций"
|
671 |
-
|
672 |
-
#: includes/class-spu-helper.php:136
|
673 |
-
msgid "Category Page"
|
674 |
-
msgstr "Страница Категорий"
|
675 |
-
|
676 |
-
#: includes/class-spu-helper.php:137
|
677 |
-
msgid "Archives Page"
|
678 |
-
msgstr "Страница Архивов"
|
679 |
-
|
680 |
-
#: includes/class-spu-helper.php:138
|
681 |
-
msgid "Top Level Page (parent of 0)"
|
682 |
-
msgstr "Верхний уровень страницы (родителей 0)"
|
683 |
-
|
684 |
-
#: includes/class-spu-helper.php:139
|
685 |
-
msgid "Parent Page (has children)"
|
686 |
-
msgstr "Родительская страница (имеет потомков)"
|
687 |
-
|
688 |
-
#: includes/class-spu-helper.php:140
|
689 |
-
msgid "Child Page (has parent)"
|
690 |
-
msgstr "Дочерняя страница (имеет родителя)"
|
691 |
-
|
692 |
-
#: includes/class-spu-helper.php:148
|
693 |
-
msgid "Default Template"
|
694 |
-
msgstr "Шаблон по умолчанию"
|
695 |
-
|
696 |
-
#: includes/class-spu-helper.php:221
|
697 |
-
msgid "Publish"
|
698 |
-
msgstr "Опубликовать"
|
699 |
-
|
700 |
-
#: includes/class-spu-helper.php:222
|
701 |
-
msgid "Pending Review"
|
702 |
-
msgstr "Ожидает оценки"
|
703 |
-
|
704 |
-
#: includes/class-spu-helper.php:223
|
705 |
-
msgid "Draft"
|
706 |
-
msgstr "Черновик"
|
707 |
-
|
708 |
-
#: includes/class-spu-helper.php:224
|
709 |
-
msgid "Future"
|
710 |
-
msgstr "Запланировать"
|
711 |
-
|
712 |
-
#: includes/class-spu-helper.php:225
|
713 |
-
msgid "Private"
|
714 |
-
msgstr "Приватное"
|
715 |
-
|
716 |
-
#: includes/class-spu-helper.php:226
|
717 |
-
msgid "Revision"
|
718 |
-
msgstr "Ревизии"
|
719 |
-
|
720 |
-
#: includes/class-spu-helper.php:227
|
721 |
-
msgid "Trash"
|
722 |
-
msgstr "Корзина"
|
723 |
-
|
724 |
-
#: includes/class-spu-helper.php:240
|
725 |
-
msgid "Super Admin"
|
726 |
-
msgstr "Супер Админ"
|
727 |
-
|
728 |
-
#: includes/class-spu-helper.php:260
|
729 |
-
msgid "True"
|
730 |
-
msgstr "Правда"
|
1 |
+
# Copyright (C) 2013 TODO
|
2 |
+
# This file is distributed under the same license as the TODO package.
|
3 |
+
# Translators:
|
4 |
+
# Анатолий, 2015
|
5 |
+
msgid ""
|
6 |
+
msgstr ""
|
7 |
+
"Project-Id-Version: Popups\n"
|
8 |
+
"Report-Msgid-Bugs-To: http://wordpress.org/plugins/plugin-name\n"
|
9 |
+
"POT-Creation-Date: 2015-06-14 00:02-0300\n"
|
10 |
+
"PO-Revision-Date: 2015-10-01 11:18-0300\n"
|
11 |
+
"Last-Translator: Анатолий\n"
|
12 |
+
"Language-Team: Russian (Russia) (http://www.transifex.com/timersys/popups/language/ru_RU/)\n"
|
13 |
+
"MIME-Version: 1.0\n"
|
14 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
15 |
+
"Content-Transfer-Encoding: 8bit\n"
|
16 |
+
"Language: ru_RU\n"
|
17 |
+
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
18 |
+
"X-Generator: Poedit 1.7.4\n"
|
19 |
+
"X-Poedit-Basepath: ../\n"
|
20 |
+
"X-Poedit-KeywordsList: __;_e;_n;_x;esc_html_e;esc_html__;esc_attr_e;esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2\n"
|
21 |
+
"X-Poedit-SearchPath-0: .\n"
|
22 |
+
|
23 |
+
#: admin/class-social-popup-admin.php:154
|
24 |
+
msgctxt "post type singular name"
|
25 |
+
msgid "Popups"
|
26 |
+
msgstr "Popups"
|
27 |
+
|
28 |
+
#: admin/class-social-popup-admin.php:155
|
29 |
+
msgctxt "admin menu"
|
30 |
+
msgid "Popups"
|
31 |
+
msgstr "Popups"
|
32 |
+
|
33 |
+
#: admin/class-social-popup-admin.php:156
|
34 |
+
msgctxt "add new on admin bar"
|
35 |
+
msgid "Popups"
|
36 |
+
msgstr "Popups"
|
37 |
+
|
38 |
+
#: admin/class-social-popup-admin.php:157
|
39 |
+
msgctxt "Popups"
|
40 |
+
msgid "Add New"
|
41 |
+
msgstr "Добавить новый"
|
42 |
+
|
43 |
+
#: admin/class-social-popup-admin.php:158
|
44 |
+
msgid "Add New Popups"
|
45 |
+
msgstr "Добавить новый Popups"
|
46 |
+
|
47 |
+
#: admin/class-social-popup-admin.php:159
|
48 |
+
msgid "New Popups"
|
49 |
+
msgstr "Новый Popups"
|
50 |
+
|
51 |
+
#: admin/class-social-popup-admin.php:160
|
52 |
+
msgid "Edit Popups"
|
53 |
+
msgstr "Редактировать Popups"
|
54 |
+
|
55 |
+
#: admin/class-social-popup-admin.php:161
|
56 |
+
msgid "View Popups"
|
57 |
+
msgstr "Редактировать Popups"
|
58 |
+
|
59 |
+
#: admin/class-social-popup-admin.php:162
|
60 |
+
msgid "All Popups"
|
61 |
+
msgstr "Все Popups"
|
62 |
+
|
63 |
+
#: admin/class-social-popup-admin.php:163
|
64 |
+
msgid "Search Popups"
|
65 |
+
msgstr "Поиск Popups"
|
66 |
+
|
67 |
+
#: admin/class-social-popup-admin.php:164
|
68 |
+
msgid "Parent Popups:"
|
69 |
+
msgstr "Родительский Popups:"
|
70 |
+
|
71 |
+
#: admin/class-social-popup-admin.php:165
|
72 |
+
msgid "No Popups found."
|
73 |
+
msgstr "Не найден Popups"
|
74 |
+
|
75 |
+
#: admin/class-social-popup-admin.php:166
|
76 |
+
msgid "No Popups found in Trash."
|
77 |
+
msgstr "Не найден Popups в Корзине"
|
78 |
+
|
79 |
+
#: admin/class-social-popup-admin.php:255
|
80 |
+
msgid "Popups Premium"
|
81 |
+
msgstr "Премиум Popups"
|
82 |
+
|
83 |
+
#: admin/class-social-popup-admin.php:266
|
84 |
+
msgid "PopUp Shortcodes"
|
85 |
+
msgstr "Шорткоды PopUp"
|
86 |
+
|
87 |
+
#: admin/class-social-popup-admin.php:275
|
88 |
+
msgid "PopUp Display Rules"
|
89 |
+
msgstr "Отображать правила PopUp"
|
90 |
+
|
91 |
+
#: admin/class-social-popup-admin.php:284
|
92 |
+
msgid "Display Options"
|
93 |
+
msgstr "Отображать опции"
|
94 |
+
|
95 |
+
#: admin/class-social-popup-admin.php:293
|
96 |
+
msgid "Need support?"
|
97 |
+
msgstr "Нужна помощь?"
|
98 |
+
|
99 |
+
#: admin/class-social-popup-admin.php:301
|
100 |
+
msgid "Donate & support"
|
101 |
+
msgstr "Помощь и Поддержка"
|
102 |
+
|
103 |
+
#: admin/class-social-popup-admin.php:309
|
104 |
+
msgid "About the developer"
|
105 |
+
msgstr "О разработчике"
|
106 |
+
|
107 |
+
#: admin/class-social-popup-admin.php:557 admin/views/metaboxes/metabox-rules.php:33 admin/views/metaboxes/metabox-rules.php:106
|
108 |
+
msgid "or"
|
109 |
+
msgstr "или"
|
110 |
+
|
111 |
+
#: admin/class-social-popup-admin.php:584
|
112 |
+
msgid "Add a Popup"
|
113 |
+
msgstr "Добавить Popup"
|
114 |
+
|
115 |
+
#: admin/class-social-popup-admin.php:708
|
116 |
+
msgid "User"
|
117 |
+
msgstr "Пользователь"
|
118 |
+
|
119 |
+
#: admin/class-social-popup-admin.php:709
|
120 |
+
msgid "User role"
|
121 |
+
msgstr "Роль пользователя"
|
122 |
+
|
123 |
+
#: admin/class-social-popup-admin.php:710
|
124 |
+
msgid "User is logged"
|
125 |
+
msgstr "Пользователь залогинен"
|
126 |
+
|
127 |
+
#: admin/class-social-popup-admin.php:711
|
128 |
+
msgid "User never left a comment"
|
129 |
+
msgstr "Пользователь никогда не комментировал"
|
130 |
+
|
131 |
+
#: admin/class-social-popup-admin.php:712
|
132 |
+
msgid "User came via a search engine"
|
133 |
+
msgstr "Пользователь пришел из поисковых систем"
|
134 |
+
|
135 |
+
#: admin/class-social-popup-admin.php:713
|
136 |
+
msgid "User did not arrive via another page on your site"
|
137 |
+
msgstr "Пользователь не пришел с другой страницы на вашем сайте"
|
138 |
+
|
139 |
+
#: admin/class-social-popup-admin.php:715 admin/class-social-popup-admin.php:716
|
140 |
+
msgid "Post"
|
141 |
+
msgstr "Публикация"
|
142 |
+
|
143 |
+
#: admin/class-social-popup-admin.php:717
|
144 |
+
msgid "Post ID"
|
145 |
+
msgstr "ID публикации"
|
146 |
+
|
147 |
+
#: admin/class-social-popup-admin.php:718
|
148 |
+
msgid "Post Type"
|
149 |
+
msgstr "Тип публикации"
|
150 |
+
|
151 |
+
#: admin/class-social-popup-admin.php:719
|
152 |
+
msgid "Post Category"
|
153 |
+
msgstr "Категория публикации"
|
154 |
+
|
155 |
+
#: admin/class-social-popup-admin.php:720
|
156 |
+
msgid "Post Format"
|
157 |
+
msgstr "Формат публикации"
|
158 |
+
|
159 |
+
#: admin/class-social-popup-admin.php:721
|
160 |
+
msgid "Post Status"
|
161 |
+
msgstr "Статус публикации"
|
162 |
+
|
163 |
+
#: admin/class-social-popup-admin.php:722
|
164 |
+
msgid "Post Taxonomy"
|
165 |
+
msgstr "Таксономия публикации"
|
166 |
+
|
167 |
+
#: admin/class-social-popup-admin.php:724 admin/class-social-popup-admin.php:725
|
168 |
+
msgid "Page"
|
169 |
+
msgstr "Страница"
|
170 |
+
|
171 |
+
#: admin/class-social-popup-admin.php:726
|
172 |
+
msgid "Page Type"
|
173 |
+
msgstr "Тип страницы"
|
174 |
+
|
175 |
+
#: admin/class-social-popup-admin.php:727
|
176 |
+
msgid "Page Parent"
|
177 |
+
msgstr "Родительская страница"
|
178 |
+
|
179 |
+
#: admin/class-social-popup-admin.php:728
|
180 |
+
msgid "Page Template"
|
181 |
+
msgstr "Шаблон страницы"
|
182 |
+
|
183 |
+
#: admin/class-social-popup-admin.php:730
|
184 |
+
msgid "Other"
|
185 |
+
msgstr "Другие"
|
186 |
+
|
187 |
+
#: admin/class-social-popup-admin.php:731
|
188 |
+
msgid "Referrer"
|
189 |
+
msgstr "Реферер"
|
190 |
+
|
191 |
+
#: admin/class-social-popup-admin.php:732
|
192 |
+
msgid "Mobile Phone"
|
193 |
+
msgstr "Мобильный телефон"
|
194 |
+
|
195 |
+
#: admin/class-social-popup-admin.php:733
|
196 |
+
msgid "Tablet"
|
197 |
+
msgstr "Планшет"
|
198 |
+
|
199 |
+
#: admin/includes/class-spu-notices.php:30
|
200 |
+
#, php-format
|
201 |
+
msgid "We noticed that you have been using our plugin for a while and we would like to ask you a little favour. If you are happy with it and can take a minute please <a href=\"%s\" target=\"_blank\">leave a nice review</a> on WordPress. It will be a tremendous help for us!"
|
202 |
+
msgstr "Мы заметили, что вы использовали наш плагин некоторое время, и мы хотели бы попросить оказать нам небольшую услугу. Если вам понравился наш плагин и у вас есть свободная минутка, пожалуйста <a href=\"%s\" target=\"_blank\">оставьте хороший отзыв</a> на WordPress. Это будет огромная помощь для нас!"
|
203 |
+
|
204 |
+
#: admin/includes/class-spu-notices.php:32
|
205 |
+
#, php-format
|
206 |
+
msgid "<a href=\"%s\" target=\"_blank\">Leave a nice review</a>"
|
207 |
+
msgstr "<a href=\"%s\" target=\"_blank\">Оставьте хороший отзыв</a>"
|
208 |
+
|
209 |
+
#: admin/includes/class-spu-notices.php:33
|
210 |
+
#, php-format
|
211 |
+
msgid "<a href=\"%s\">No, thanks</a>"
|
212 |
+
msgstr "<a href=\"%s\">Нет, спасибо</a>"
|
213 |
+
|
214 |
+
#: admin/views/metaboxes/metabox-donate.php:6
|
215 |
+
msgid "If you like this plugin, consider supporting it by donating."
|
216 |
+
msgstr "Если вам нравится этот плагин, поддержите, пожалуйста, его."
|
217 |
+
|
218 |
+
#: admin/views/metaboxes/metabox-donate.php:8
|
219 |
+
msgid "Donate with PayPal"
|
220 |
+
msgstr "Помочь через PayPal"
|
221 |
+
|
222 |
+
#: admin/views/metaboxes/metabox-donate.php:10
|
223 |
+
msgid "Some other ways to support this plugin"
|
224 |
+
msgstr "Некоторые другие способы поддержки этого плагина"
|
225 |
+
|
226 |
+
#: admin/views/metaboxes/metabox-donate.php:12
|
227 |
+
msgid "Leave a ★★★★★ review on WordPress.org"
|
228 |
+
msgstr "Оставьте ★★★★★ отзыв на WordPress.org"
|
229 |
+
|
230 |
+
#: admin/views/metaboxes/metabox-donate.php:13
|
231 |
+
msgid "Write about Popups on your blog"
|
232 |
+
msgstr "Напишите о плагине Popups на своем блоге"
|
233 |
+
|
234 |
+
#: admin/views/metaboxes/metabox-donate.php:14
|
235 |
+
msgid "Tweet about Popups"
|
236 |
+
msgstr "Твитнуть о плагине Popups"
|
237 |
+
|
238 |
+
#: admin/views/metaboxes/metabox-donate.php:15
|
239 |
+
msgid "Vote \"works\" on the WordPress.org plugin page"
|
240 |
+
msgstr "Проголосовать \"работает\" на странице плагина в WordPress.org"
|
241 |
+
|
242 |
+
#: admin/views/metaboxes/metabox-help.php:6
|
243 |
+
msgid "You have three social shortcodes to use that will print a Facebook like, a Google+ Follow and a Twitter follow. Check the available options and <strong>configure them with your social accounts</strong>:"
|
244 |
+
msgstr "У вас есть возможность использовать три социальных Шорткода: Facebook Лайк, подписка на Google+ и следовать в Twitter. Проверьте доступные варианты и <strong>настройте их со своими социальными профилями</strong>:"
|
245 |
+
|
246 |
+
#: admin/views/metaboxes/metabox-help.php:12
|
247 |
+
msgid "View Facebook Page Options"
|
248 |
+
msgstr "Смотреть параметры страницы в Facebook"
|
249 |
+
|
250 |
+
#: admin/views/metaboxes/metabox-help.php:14 admin/views/metaboxes/metabox-help.php:27
|
251 |
+
msgid "Your facebook page url"
|
252 |
+
msgstr "Ссылка на вашу страницу Facebook"
|
253 |
+
|
254 |
+
#: admin/views/metaboxes/metabox-help.php:15
|
255 |
+
msgid "Your page name"
|
256 |
+
msgstr "Имя вашей страницы"
|
257 |
+
|
258 |
+
#: admin/views/metaboxes/metabox-help.php:16
|
259 |
+
msgid "true|false <b>Default value:</b> true"
|
260 |
+
msgstr "true|false <b>Значение по умолчанию:</b> true"
|
261 |
+
|
262 |
+
#: admin/views/metaboxes/metabox-help.php:17
|
263 |
+
msgid "true|false <b>Default value:</b> false"
|
264 |
+
msgstr "true|false <b>Значение по умолчанию:</b> false"
|
265 |
+
|
266 |
+
#: admin/views/metaboxes/metabox-help.php:25
|
267 |
+
msgid "View Facebook Options"
|
268 |
+
msgstr "Посмотреть опции Facebook"
|
269 |
+
|
270 |
+
#: admin/views/metaboxes/metabox-help.php:28
|
271 |
+
msgid "standard, box_count, button <b>Default value:</b> button_count"
|
272 |
+
msgstr "standard, box_count, button <b>Значение по умолчанию:</b> button_count"
|
273 |
+
|
274 |
+
#: admin/views/metaboxes/metabox-help.php:29 admin/views/metaboxes/metabox-help.php:30
|
275 |
+
msgid "true <b>Default value:</b> false"
|
276 |
+
msgstr "true <b>Значение по умолчанию:</b> false"
|
277 |
+
|
278 |
+
#: admin/views/metaboxes/metabox-help.php:31
|
279 |
+
msgid "recommend <b>Default value:</b> like"
|
280 |
+
msgstr "рекомендованное <b>Значение по умолчанию:</b> like"
|
281 |
+
|
282 |
+
#: admin/views/metaboxes/metabox-help.php:38
|
283 |
+
msgid "View Google+ Options"
|
284 |
+
msgstr "Посмотреть опции Google+"
|
285 |
+
|
286 |
+
#: admin/views/metaboxes/metabox-help.php:40
|
287 |
+
msgid "Your Google+ url"
|
288 |
+
msgstr "Ссылка на ваш Google+"
|
289 |
+
|
290 |
+
#: admin/views/metaboxes/metabox-help.php:41
|
291 |
+
msgid "small, standard, tall <b>Default value:</b> medium"
|
292 |
+
msgstr "small, standard, tall <b>Значение по умолчанию:</b> medium"
|
293 |
+
|
294 |
+
#: admin/views/metaboxes/metabox-help.php:42
|
295 |
+
msgid "inline, none <b>Default value:</b> bubble"
|
296 |
+
msgstr "inline, none <b>Значение по умолчанию:</b> bubble"
|
297 |
+
|
298 |
+
#: admin/views/metaboxes/metabox-help.php:48
|
299 |
+
msgid "View Twitter Options"
|
300 |
+
msgstr "Посмотреть опции в Twitter"
|
301 |
+
|
302 |
+
#: admin/views/metaboxes/metabox-help.php:50
|
303 |
+
msgid "Your Twitter user <b>Default chifli</b>iiii"
|
304 |
+
msgstr "Ваш пользователь в Twitter <b>chifli по умолчанию</b>iiii"
|
305 |
+
|
306 |
+
#: admin/views/metaboxes/metabox-help.php:51
|
307 |
+
msgid "false <b>Default value:</b> true"
|
308 |
+
msgstr "false <b>Значение по умолчанию:</b> true"
|
309 |
+
|
310 |
+
#: admin/views/metaboxes/metabox-help.php:52
|
311 |
+
msgid "large <b>Default value:</b> \"\""
|
312 |
+
msgstr "large <b>Значение по умолчанию:</b> \"\""
|
313 |
+
|
314 |
+
#: admin/views/metaboxes/metabox-help.php:55
|
315 |
+
msgid "Other available Shortcodes:"
|
316 |
+
msgstr "Другие доступные шорткоды:"
|
317 |
+
|
318 |
+
#: admin/views/metaboxes/metabox-help.php:60
|
319 |
+
msgid "View Close shortcode Options"
|
320 |
+
msgstr "Помостреть Закрыть опции шорткодов"
|
321 |
+
|
322 |
+
#: admin/views/metaboxes/metabox-help.php:62
|
323 |
+
msgid "Pass a custom class to style your button"
|
324 |
+
msgstr "Передайте собственный класс стиля для ваших кнопок"
|
325 |
+
|
326 |
+
#: admin/views/metaboxes/metabox-help.php:63
|
327 |
+
msgid "Button label - <b>Default value:</b> Close"
|
328 |
+
msgstr "Значение кнопки - <b>Значение по умолчанию:</b> Close"
|
329 |
+
|
330 |
+
#: admin/views/metaboxes/metabox-help.php:64
|
331 |
+
msgid "left, right, center, none - <b>Default value:</b> center"
|
332 |
+
msgstr "left, right, center, none - <b>Значение по умолчанию:</b> center"
|
333 |
+
|
334 |
+
#: admin/views/metaboxes/metabox-links.php:6
|
335 |
+
msgid "My name is"
|
336 |
+
msgstr "Меня зовут"
|
337 |
+
|
338 |
+
#: admin/views/metaboxes/metabox-links.php:6
|
339 |
+
msgid "I develop WordPress plugins and themes."
|
340 |
+
msgstr "Я разрабатываю плагины и темы для WordPress."
|
341 |
+
|
342 |
+
#: admin/views/metaboxes/metabox-links.php:7
|
343 |
+
#, php-format
|
344 |
+
msgid "Take a look at my <a href=\"%s\">site</a> to see my other plugins or hire me. Subscribe to get updates!"
|
345 |
+
msgstr "Взгляните на мой <a href=\"%s\">сайт</a> чтобы увидеть мои другие плагины или нанять меня. Подпишитесь на обновления!"
|
346 |
+
|
347 |
+
#: admin/views/metaboxes/metabox-links.php:8
|
348 |
+
msgid "Other plugins I built:"
|
349 |
+
msgstr "Другие плагины которые я разработал:"
|
350 |
+
|
351 |
+
#: admin/views/metaboxes/metabox-links.php:10
|
352 |
+
msgid "Install multiple plugins and create collections"
|
353 |
+
msgstr "Установка нескольких плагинов и создать коллекции"
|
354 |
+
|
355 |
+
#: admin/views/metaboxes/metabox-links.php:11
|
356 |
+
msgid "Geotarget your content"
|
357 |
+
msgstr "Геотаргетинг вашего контента"
|
358 |
+
|
359 |
+
#: admin/views/metaboxes/metabox-links.php:12
|
360 |
+
msgid "Invite your network friends and import contacts"
|
361 |
+
msgstr "Пригласить своих друзей из сети и импортировать контакты"
|
362 |
+
|
363 |
+
#: admin/views/metaboxes/metabox-options.php:9
|
364 |
+
msgid "Box Position"
|
365 |
+
msgstr "Позиция Box"
|
366 |
+
|
367 |
+
#: admin/views/metaboxes/metabox-options.php:12
|
368 |
+
msgid "Centered"
|
369 |
+
msgstr "По центру"
|
370 |
+
|
371 |
+
#: admin/views/metaboxes/metabox-options.php:13
|
372 |
+
msgid "Top Left"
|
373 |
+
msgstr "Слева вверху"
|
374 |
+
|
375 |
+
#: admin/views/metaboxes/metabox-options.php:14
|
376 |
+
msgid "Top Right"
|
377 |
+
msgstr "Справа вверху"
|
378 |
+
|
379 |
+
#: admin/views/metaboxes/metabox-options.php:15
|
380 |
+
msgid "Bottom Left"
|
381 |
+
msgstr "Внизу слева"
|
382 |
+
|
383 |
+
#: admin/views/metaboxes/metabox-options.php:16
|
384 |
+
msgid "Bottom Right"
|
385 |
+
msgstr "Внизу справа"
|
386 |
+
|
387 |
+
#: admin/views/metaboxes/metabox-options.php:23
|
388 |
+
msgid "Trigger action"
|
389 |
+
msgstr "Запуск действия"
|
390 |
+
|
391 |
+
#: admin/views/metaboxes/metabox-options.php:27
|
392 |
+
msgid "seconds after page load"
|
393 |
+
msgstr "секунд после загрузки страницы"
|
394 |
+
|
395 |
+
#: admin/views/metaboxes/metabox-options.php:28
|
396 |
+
msgid "of page height"
|
397 |
+
msgstr "высоты страницы"
|
398 |
+
|
399 |
+
#: admin/views/metaboxes/metabox-options.php:38
|
400 |
+
msgid "Auto-hide?"
|
401 |
+
msgstr "Авто-скрытие?"
|
402 |
+
|
403 |
+
#: admin/views/metaboxes/metabox-options.php:40 admin/views/metaboxes/metabox-options.php:68 admin/views/metaboxes/metabox-options.php:76 admin/views/metaboxes/metabox-options.php:84
|
404 |
+
msgid "Yes"
|
405 |
+
msgstr "Да"
|
406 |
+
|
407 |
+
#: admin/views/metaboxes/metabox-options.php:41 admin/views/metaboxes/metabox-options.php:69 admin/views/metaboxes/metabox-options.php:77 admin/views/metaboxes/metabox-options.php:85
|
408 |
+
msgid "No"
|
409 |
+
msgstr "Нет"
|
410 |
+
|
411 |
+
#: admin/views/metaboxes/metabox-options.php:42
|
412 |
+
#, php-format
|
413 |
+
msgid "Hide box again when visitors scroll back up? Only works when Trigger action is set to % of page height"
|
414 |
+
msgstr "Скрыть окно снова, когда посетители прокрутили обратно? Работает только когда действие триггера установлено % oт высоты страницы"
|
415 |
+
|
416 |
+
#: admin/views/metaboxes/metabox-options.php:46
|
417 |
+
msgid "Animation"
|
418 |
+
msgstr "Анимация"
|
419 |
+
|
420 |
+
#: admin/views/metaboxes/metabox-options.php:49
|
421 |
+
msgid "Fade In"
|
422 |
+
msgstr "Плавное появление"
|
423 |
+
|
424 |
+
#: admin/views/metaboxes/metabox-options.php:50
|
425 |
+
msgid "Slide In"
|
426 |
+
msgstr "Выдвижение"
|
427 |
+
|
428 |
+
#: admin/views/metaboxes/metabox-options.php:53
|
429 |
+
msgid "Slide will only apply when popup is on the corners"
|
430 |
+
msgstr "Выдвижение будет применяться только тогда, когда всплывающее окно находится по углах"
|
431 |
+
|
432 |
+
#: admin/views/metaboxes/metabox-options.php:58
|
433 |
+
msgid "Cookie expiration days"
|
434 |
+
msgstr "Куки действуют дней"
|
435 |
+
|
436 |
+
#: admin/views/metaboxes/metabox-options.php:61
|
437 |
+
msgid "After closing the box, how many days should it stay hidden?"
|
438 |
+
msgstr "После закрытия окна, сколько дней PopUp должен оставаться скрытым?"
|
439 |
+
|
440 |
+
#: admin/views/metaboxes/metabox-options.php:66
|
441 |
+
msgid "Enable test mode?"
|
442 |
+
msgstr "Включить тестовый режим?"
|
443 |
+
|
444 |
+
#: admin/views/metaboxes/metabox-options.php:70
|
445 |
+
msgid "If test mode is enabled, the box will show up regardless of whether a cookie has been set. (To admins only)"
|
446 |
+
msgstr "Если тестовый режим включен, окно будет отображаться независимо от того, были ли установлены куки. (только Админам)"
|
447 |
+
|
448 |
+
#: admin/views/metaboxes/metabox-options.php:74
|
449 |
+
msgid "Close on conversion?"
|
450 |
+
msgstr "Закрыть при конверсии?"
|
451 |
+
|
452 |
+
#: admin/views/metaboxes/metabox-options.php:78
|
453 |
+
msgid "If you have a form or social shortcode, by default popup will close on submission/conversion"
|
454 |
+
msgstr "Если у вас есть форма или социальной шорткод, по умолчанию всплывающие закроется при подтверждении/конверсии"
|
455 |
+
|
456 |
+
#: admin/views/metaboxes/metabox-options.php:82
|
457 |
+
msgid "Show powered by link?"
|
458 |
+
msgstr "Показать ссылку powered by?"
|
459 |
+
|
460 |
+
#: admin/views/metaboxes/metabox-options.php:86
|
461 |
+
#, php-format
|
462 |
+
msgid "Shows a \"powered by\" link below your popup. If your affiliate link is set in the <a href=\"%s\">settings</a>, it will be used."
|
463 |
+
msgstr "Показать ссылку \"powered by\" под вашим PopUp. Если ваша партнерская ссылка указана в <a href=\"%s\">настройках</a>, она будет использована."
|
464 |
+
|
465 |
+
#: admin/views/metaboxes/metabox-options.php:91
|
466 |
+
msgid "Appearance"
|
467 |
+
msgstr "Появление"
|
468 |
+
|
469 |
+
#: admin/views/metaboxes/metabox-options.php:95
|
470 |
+
msgid "Background opacity"
|
471 |
+
msgstr "Размытие фона"
|
472 |
+
|
473 |
+
#: admin/views/metaboxes/metabox-options.php:98
|
474 |
+
msgid "Leave at 0 for no background. Max value is 1"
|
475 |
+
msgstr "Оставьте 0 для без фона. Максимальное значение равно 1"
|
476 |
+
|
477 |
+
#: admin/views/metaboxes/metabox-options.php:104
|
478 |
+
msgid "Background color"
|
479 |
+
msgstr "Цвет фона"
|
480 |
+
|
481 |
+
#: admin/views/metaboxes/metabox-options.php:108
|
482 |
+
msgid "Text color"
|
483 |
+
msgstr "Цвет текста"
|
484 |
+
|
485 |
+
#: admin/views/metaboxes/metabox-options.php:112
|
486 |
+
msgid "Box width"
|
487 |
+
msgstr "Ширина Бокса"
|
488 |
+
|
489 |
+
#: admin/views/metaboxes/metabox-options.php:118
|
490 |
+
msgid "Border color"
|
491 |
+
msgstr "Цвет рамки"
|
492 |
+
|
493 |
+
#: admin/views/metaboxes/metabox-options.php:122
|
494 |
+
msgid "Border width"
|
495 |
+
msgstr "Ширина рамки"
|
496 |
+
|
497 |
+
#: admin/views/metaboxes/metabox-premium.php:16
|
498 |
+
msgid "Take the best WordPress Popups plugin to the next level with Popups Premium extension."
|
499 |
+
msgstr "Используйте максимум преимуществ плагина \"всплывающие окна\" для WordPress с расширением Popups Premium ."
|
500 |
+
|
501 |
+
#: admin/views/metaboxes/metabox-premium.php:17
|
502 |
+
msgid "Popups Premium Features:"
|
503 |
+
msgstr "Преимущества Popups Premium:"
|
504 |
+
|
505 |
+
#: admin/views/metaboxes/metabox-premium.php:19
|
506 |
+
msgid "Beautiful optin forms for popular mail providers"
|
507 |
+
msgstr "Красивые OptIn формы для популярных почтовых служб"
|
508 |
+
|
509 |
+
#: admin/views/metaboxes/metabox-premium.php:20
|
510 |
+
msgid "Currently supporting MailChimp, Aweber, Postmatic, Mailpoet"
|
511 |
+
msgstr "Сейчас поддерживаются MailChimp, Aweber, Postmatic, Mailpoet"
|
512 |
+
|
513 |
+
#: admin/views/metaboxes/metabox-premium.php:21
|
514 |
+
msgid "Track impressions and Conversions of social likes and forms submissions like Contact Form 7, Gravity forms, etc"
|
515 |
+
msgstr "Отслеживать показы и переходы из социальных сетей и формировать отчеты по действиям Contact Form 7, Gravity формы, и т.д."
|
516 |
+
|
517 |
+
#: admin/views/metaboxes/metabox-premium.php:22
|
518 |
+
msgid "Track impressions and Conversions also in Google Analytics"
|
519 |
+
msgstr "Отслеживать показы и переходы также и в Google Analytics"
|
520 |
+
|
521 |
+
#: admin/views/metaboxes/metabox-premium.php:23 admin/views/metaboxes/metabox-premium.php:25
|
522 |
+
msgid "Exit Intent technology"
|
523 |
+
msgstr "Выход Целевой технологии"
|
524 |
+
|
525 |
+
#: admin/views/metaboxes/metabox-premium.php:24
|
526 |
+
msgid "8 New animations effects"
|
527 |
+
msgstr "8 новых анимационных эффектов"
|
528 |
+
|
529 |
+
#: admin/views/metaboxes/metabox-premium.php:26
|
530 |
+
msgid "New trigger methods"
|
531 |
+
msgstr "Новые методы отслеживания"
|
532 |
+
|
533 |
+
#: admin/views/metaboxes/metabox-premium.php:27
|
534 |
+
msgid "Timer for auto closing"
|
535 |
+
msgstr "Таймер для автоматического закрытия"
|
536 |
+
|
537 |
+
#: admin/views/metaboxes/metabox-premium.php:28
|
538 |
+
msgid "Ability to disable close button"
|
539 |
+
msgstr "Возможность отключения кнопки закрытия"
|
540 |
+
|
541 |
+
#: admin/views/metaboxes/metabox-premium.php:29
|
542 |
+
msgid "Ability to disable Advanced close methods like esc or clicking outside of the popup"
|
543 |
+
msgstr "Возможность отключения расширенных методов закрытия, такие как нажатие ESC или клик снаружи всплывающего окна"
|
544 |
+
|
545 |
+
#: admin/views/metaboxes/metabox-premium.php:30
|
546 |
+
msgid "Premium support"
|
547 |
+
msgstr "Премиум поддержка"
|
548 |
+
|
549 |
+
#: admin/views/metaboxes/metabox-premium.php:34
|
550 |
+
msgid "Buy Now!"
|
551 |
+
msgstr "Купить сейчас!"
|
552 |
+
|
553 |
+
#: admin/views/metaboxes/metabox-rules.php:19
|
554 |
+
msgid "Rules"
|
555 |
+
msgstr "Правила"
|
556 |
+
|
557 |
+
#: admin/views/metaboxes/metabox-rules.php:20
|
558 |
+
msgid "Create a set of rules to determine where the popup will show"
|
559 |
+
msgstr "Создать набор правил для показа всплывающего окна"
|
560 |
+
|
561 |
+
#: admin/views/metaboxes/metabox-rules.php:31
|
562 |
+
msgid "Show this popup if"
|
563 |
+
msgstr "Показать это всплывающее окно, если"
|
564 |
+
|
565 |
+
#: admin/views/metaboxes/metabox-rules.php:61
|
566 |
+
msgid "is equal to"
|
567 |
+
msgstr "равно"
|
568 |
+
|
569 |
+
#: admin/views/metaboxes/metabox-rules.php:62
|
570 |
+
msgid "is not equal to"
|
571 |
+
msgstr "неравно"
|
572 |
+
|
573 |
+
#: admin/views/metaboxes/metabox-rules.php:93
|
574 |
+
msgid "and"
|
575 |
+
msgstr "и"
|
576 |
+
|
577 |
+
#: admin/views/metaboxes/metabox-rules.php:108
|
578 |
+
msgid "Add rule group"
|
579 |
+
msgstr "Добавить группу правил"
|
580 |
+
|
581 |
+
#: admin/views/metaboxes/metabox-support.php:6
|
582 |
+
#, php-format
|
583 |
+
msgid "You are using Popups plugin v%s"
|
584 |
+
msgstr "Вы используете плагин Popups v%s"
|
585 |
+
|
586 |
+
#: admin/views/metaboxes/metabox-support.php:7
|
587 |
+
#, php-format
|
588 |
+
msgid "If you need support please go to the WordPress.org <a href=\"%s\">support forums</a>"
|
589 |
+
msgstr "Если вам нужна поддержка, пожалуйста, перейдите на <a href=\"%s\">форум поддержки</a> WordPress.org"
|
590 |
+
|
591 |
+
#: admin/views/settings-page.php:17
|
592 |
+
msgid "Affiliate link"
|
593 |
+
msgstr "Партнерская ссылка"
|
594 |
+
|
595 |
+
#: admin/views/settings-page.php:20
|
596 |
+
#, php-format
|
597 |
+
msgid "You can earn money by promoting the plugin! Join <a href=\"%s\">our affiliate program</a> and paste your affiliate link here to earn 35% in commissions . Once entered, it will replace the default \"Powered by\" on the popups."
|
598 |
+
msgstr "Вы можете заработать деньги, продвигая плагин! Присоединяйтесь к <a href=\"%s\">нашей партнерской программе</a> и вставьте свою партнерскую ссылку, чтобы заработать 35% комиссионных . После того, как вы введете ее, она заменит значение по умолчанию \"Powered by\" во всплывающих окнах."
|
599 |
+
|
600 |
+
#: admin/views/settings-page.php:24
|
601 |
+
msgid "Ajax mode?"
|
602 |
+
msgstr "Режим Ajax?"
|
603 |
+
|
604 |
+
#: admin/views/settings-page.php:27
|
605 |
+
msgid "Load popups using ajax. Compatible with cache plugins, but might not work with all plugins"
|
606 |
+
msgstr "Загрузка всплывающего окна с помощью Ajax. Совместима с плагинами кэширования, но не может работать с некоторыми плагинами"
|
607 |
+
|
608 |
+
#: admin/views/settings-page.php:32
|
609 |
+
msgid "Enable Debug mode?"
|
610 |
+
msgstr "Включить режим отладки?"
|
611 |
+
|
612 |
+
#: admin/views/settings-page.php:35
|
613 |
+
msgid "Will use uncompressed js"
|
614 |
+
msgstr "Будут использоваться несжатые JS"
|
615 |
+
|
616 |
+
#: admin/views/settings-page.php:40
|
617 |
+
msgid "Enable safe mode?"
|
618 |
+
msgstr "Включить безопасный режим?"
|
619 |
+
|
620 |
+
#: admin/views/settings-page.php:43
|
621 |
+
msgid "Will move all popups to top of the screen."
|
622 |
+
msgstr "Будут передвинуты все всплывающие окна в верхнюю часть экрана."
|
623 |
+
|
624 |
+
#: admin/views/settings-page.php:48
|
625 |
+
msgid "Remove shortcodes style"
|
626 |
+
msgstr "Удалить стили Шорткодов"
|
627 |
+
|
628 |
+
#: admin/views/settings-page.php:51
|
629 |
+
msgid "By default the plugin will apply some style to shortcodes. Check here if you want to manually style them"
|
630 |
+
msgstr "По умолчанию плагин будет применять некоторые стили Шорткодов. Отметьте здесь, если вы хотите задать их стиль вручную"
|
631 |
+
|
632 |
+
#: admin/views/settings-page.php:56
|
633 |
+
msgid "Unload Facebook javascript"
|
634 |
+
msgstr "Выгрузка JavaScript Facebook"
|
635 |
+
|
636 |
+
#: admin/views/settings-page.php:59
|
637 |
+
msgid "If you use your own Facebook script, check this"
|
638 |
+
msgstr "Если вы используете свой собственный скрипт Facebook, отметьте это"
|
639 |
+
|
640 |
+
#: admin/views/settings-page.php:64
|
641 |
+
msgid "Unload Google javascript"
|
642 |
+
msgstr "Выгрузка JavaScript Google"
|
643 |
+
|
644 |
+
#: admin/views/settings-page.php:67
|
645 |
+
msgid "If you use your own Google script, check this"
|
646 |
+
msgstr "Если вы используете свой собственный скрипт Google, отметьте это"
|
647 |
+
|
648 |
+
#: admin/views/settings-page.php:72
|
649 |
+
msgid "Unload Twitter javascript"
|
650 |
+
msgstr "Выгрузка JavaScript Twitter"
|
651 |
+
|
652 |
+
#: admin/views/settings-page.php:75
|
653 |
+
msgid "If you use your own Twitter script, check this"
|
654 |
+
msgstr "Если вы используете свой собственный скрипт Twitter, отметьте это"
|
655 |
+
|
656 |
+
#: admin/views/settings-page.php:80
|
657 |
+
msgid "Save settings"
|
658 |
+
msgstr "Сохранить настройки"
|
659 |
+
|
660 |
+
#: includes/class-spu-helper.php:133
|
661 |
+
msgid "All Pages"
|
662 |
+
msgstr "Все страницы"
|
663 |
+
|
664 |
+
#: includes/class-spu-helper.php:134
|
665 |
+
msgid "Front Page"
|
666 |
+
msgstr "Титульная страница"
|
667 |
+
|
668 |
+
#: includes/class-spu-helper.php:135
|
669 |
+
msgid "Posts Page"
|
670 |
+
msgstr "Страница Публикаций"
|
671 |
+
|
672 |
+
#: includes/class-spu-helper.php:136
|
673 |
+
msgid "Category Page"
|
674 |
+
msgstr "Страница Категорий"
|
675 |
+
|
676 |
+
#: includes/class-spu-helper.php:137
|
677 |
+
msgid "Archives Page"
|
678 |
+
msgstr "Страница Архивов"
|
679 |
+
|
680 |
+
#: includes/class-spu-helper.php:138
|
681 |
+
msgid "Top Level Page (parent of 0)"
|
682 |
+
msgstr "Верхний уровень страницы (родителей 0)"
|
683 |
+
|
684 |
+
#: includes/class-spu-helper.php:139
|
685 |
+
msgid "Parent Page (has children)"
|
686 |
+
msgstr "Родительская страница (имеет потомков)"
|
687 |
+
|
688 |
+
#: includes/class-spu-helper.php:140
|
689 |
+
msgid "Child Page (has parent)"
|
690 |
+
msgstr "Дочерняя страница (имеет родителя)"
|
691 |
+
|
692 |
+
#: includes/class-spu-helper.php:148
|
693 |
+
msgid "Default Template"
|
694 |
+
msgstr "Шаблон по умолчанию"
|
695 |
+
|
696 |
+
#: includes/class-spu-helper.php:221
|
697 |
+
msgid "Publish"
|
698 |
+
msgstr "Опубликовать"
|
699 |
+
|
700 |
+
#: includes/class-spu-helper.php:222
|
701 |
+
msgid "Pending Review"
|
702 |
+
msgstr "Ожидает оценки"
|
703 |
+
|
704 |
+
#: includes/class-spu-helper.php:223
|
705 |
+
msgid "Draft"
|
706 |
+
msgstr "Черновик"
|
707 |
+
|
708 |
+
#: includes/class-spu-helper.php:224
|
709 |
+
msgid "Future"
|
710 |
+
msgstr "Запланировать"
|
711 |
+
|
712 |
+
#: includes/class-spu-helper.php:225
|
713 |
+
msgid "Private"
|
714 |
+
msgstr "Приватное"
|
715 |
+
|
716 |
+
#: includes/class-spu-helper.php:226
|
717 |
+
msgid "Revision"
|
718 |
+
msgstr "Ревизии"
|
719 |
+
|
720 |
+
#: includes/class-spu-helper.php:227
|
721 |
+
msgid "Trash"
|
722 |
+
msgstr "Корзина"
|
723 |
+
|
724 |
+
#: includes/class-spu-helper.php:240
|
725 |
+
msgid "Super Admin"
|
726 |
+
msgstr "Супер Админ"
|
727 |
+
|
728 |
+
#: includes/class-spu-helper.php:260
|
729 |
+
msgid "True"
|
730 |
+
msgstr "Правда"
|
languages/popups-sr_RS.po
CHANGED
@@ -1,821 +1,821 @@
|
|
1 |
-
# Copyright (C) 2013 TODO
|
2 |
-
# This file is distributed under the same license as the TODO package.
|
3 |
-
msgid ""
|
4 |
-
msgstr ""
|
5 |
-
"Project-Id-Version: Popups\n"
|
6 |
-
"Report-Msgid-Bugs-To: http://wordpress.org/plugins/plugin-name\n"
|
7 |
-
"POT-Creation-Date: 2015-06-14 10:53-0300\n"
|
8 |
-
"PO-Revision-Date: 2015-06-14 10:53-0300\n"
|
9 |
-
"Last-Translator: Damian Logghe <info@timersys.com>\n"
|
10 |
-
"Language-Team: Timersys <info@timersys.com>\n"
|
11 |
-
"Language: en_EN\n"
|
12 |
-
"MIME-Version: 1.0\n"
|
13 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
-
"Content-Transfer-Encoding: 8bit\n"
|
15 |
-
"X-Generator: Poedit 1.7.4\n"
|
16 |
-
"X-Poedit-KeywordsList: __;_e;_n;_x;esc_html_e;esc_html__;esc_attr_e;"
|
17 |
-
"esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2\n"
|
18 |
-
"X-Poedit-Basepath: ../\n"
|
19 |
-
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
20 |
-
"X-Poedit-SearchPath-0: .\n"
|
21 |
-
|
22 |
-
#: admin/class-social-popup-admin.php:154
|
23 |
-
msgctxt "post type singular name"
|
24 |
-
msgid "Popups"
|
25 |
-
msgstr "Popups [pojedinačni naziv vrste posta]"
|
26 |
-
|
27 |
-
#: admin/class-social-popup-admin.php:155
|
28 |
-
msgctxt "admin menu"
|
29 |
-
msgid "Popups"
|
30 |
-
msgstr "Iskačući prozori [meni administratora]"
|
31 |
-
|
32 |
-
#: admin/class-social-popup-admin.php:156
|
33 |
-
msgctxt "add new on admin bar"
|
34 |
-
msgid "Popups"
|
35 |
-
msgstr "Iskačući prozori [dodaj novi na traci sa menijem administratora]"
|
36 |
-
|
37 |
-
#: admin/class-social-popup-admin.php:157
|
38 |
-
msgctxt "Popups"
|
39 |
-
msgid "Add New"
|
40 |
-
msgstr "Dodaj nove [iskačuće prozore]"
|
41 |
-
|
42 |
-
#: admin/class-social-popup-admin.php:158
|
43 |
-
msgid "Add New Popups"
|
44 |
-
msgstr "Dodaj nove iskačuće prozore"
|
45 |
-
|
46 |
-
#: admin/class-social-popup-admin.php:159
|
47 |
-
msgid "New Popups"
|
48 |
-
msgstr "Novi iskačući prozori "
|
49 |
-
|
50 |
-
#: admin/class-social-popup-admin.php:160
|
51 |
-
msgid "Edit Popups"
|
52 |
-
msgstr "Uredi iskačuće prozore"
|
53 |
-
|
54 |
-
#: admin/class-social-popup-admin.php:161
|
55 |
-
msgid "View Popups"
|
56 |
-
msgstr "Vidi iskačuće prozore"
|
57 |
-
|
58 |
-
#: admin/class-social-popup-admin.php:162
|
59 |
-
msgid "All Popups"
|
60 |
-
msgstr "Svi iskačući prozori "
|
61 |
-
|
62 |
-
#: admin/class-social-popup-admin.php:163
|
63 |
-
msgid "Search Popups"
|
64 |
-
msgstr "Pretraži iskačuće prozore"
|
65 |
-
|
66 |
-
#: admin/class-social-popup-admin.php:164
|
67 |
-
msgid "Parent Popups:"
|
68 |
-
msgstr "Nadređeni iskačući prozori "
|
69 |
-
|
70 |
-
#: admin/class-social-popup-admin.php:165
|
71 |
-
msgid "No Popups found."
|
72 |
-
msgstr "Nisu pronađeni iskačući prozori "
|
73 |
-
|
74 |
-
#: admin/class-social-popup-admin.php:166
|
75 |
-
msgid "No Popups found in Trash."
|
76 |
-
msgstr "Nisu pronađeni iskačući prozori u korpi za otpatke"
|
77 |
-
|
78 |
-
#: admin/class-social-popup-admin.php:255
|
79 |
-
msgid "Popups Premium"
|
80 |
-
msgstr "Popups Premium"
|
81 |
-
|
82 |
-
#: admin/class-social-popup-admin.php:266
|
83 |
-
msgid "PopUp Shortcodes"
|
84 |
-
msgstr "PopUp Shortcodes"
|
85 |
-
|
86 |
-
#: admin/class-social-popup-admin.php:275
|
87 |
-
msgid "PopUp Display Rules"
|
88 |
-
msgstr "PopUp pravila prikazivanja"
|
89 |
-
|
90 |
-
#: admin/class-social-popup-admin.php:284
|
91 |
-
msgid "Display Options"
|
92 |
-
msgstr "Opcije prikazivanja"
|
93 |
-
|
94 |
-
#: admin/class-social-popup-admin.php:293
|
95 |
-
msgid "Need support?"
|
96 |
-
msgstr "Treba vam podrška?"
|
97 |
-
|
98 |
-
#: admin/class-social-popup-admin.php:301
|
99 |
-
msgid "Donate & support"
|
100 |
-
msgstr "Donirajte i podržite"
|
101 |
-
|
102 |
-
#: admin/class-social-popup-admin.php:309
|
103 |
-
msgid "About the developer"
|
104 |
-
msgstr "O programeru"
|
105 |
-
|
106 |
-
#: admin/class-social-popup-admin.php:557
|
107 |
-
#: admin/views/metaboxes/metabox-rules.php:33
|
108 |
-
#: admin/views/metaboxes/metabox-rules.php:106
|
109 |
-
msgid "or"
|
110 |
-
msgstr "ili"
|
111 |
-
|
112 |
-
#: admin/class-social-popup-admin.php:584
|
113 |
-
msgid "Add a Popup"
|
114 |
-
msgstr "Dodaj iskačući prozor"
|
115 |
-
|
116 |
-
#: admin/class-social-popup-admin.php:708
|
117 |
-
msgid "User"
|
118 |
-
msgstr "Korisnik"
|
119 |
-
|
120 |
-
#: admin/class-social-popup-admin.php:709
|
121 |
-
msgid "User role"
|
122 |
-
msgstr "Korisnička uloga"
|
123 |
-
|
124 |
-
#: admin/class-social-popup-admin.php:710
|
125 |
-
msgid "User is logged"
|
126 |
-
msgstr "Korisnik je prijavljen"
|
127 |
-
|
128 |
-
#: admin/class-social-popup-admin.php:711
|
129 |
-
msgid "User never left a comment"
|
130 |
-
msgstr "Korisnik nikad nije ostavio komentar"
|
131 |
-
|
132 |
-
#: admin/class-social-popup-admin.php:712
|
133 |
-
msgid "User came via a search engine"
|
134 |
-
msgstr "Korisnik je došao putem pretraživača"
|
135 |
-
|
136 |
-
#: admin/class-social-popup-admin.php:713
|
137 |
-
msgid "User did not arrive via another page on your site"
|
138 |
-
msgstr "Korisnik nije došao preko druge stranice na vašem site-u"
|
139 |
-
|
140 |
-
#: admin/class-social-popup-admin.php:715
|
141 |
-
#: admin/class-social-popup-admin.php:716
|
142 |
-
msgid "Post"
|
143 |
-
msgstr "Post"
|
144 |
-
|
145 |
-
#: admin/class-social-popup-admin.php:717
|
146 |
-
msgid "Post ID"
|
147 |
-
msgstr ""
|
148 |
-
|
149 |
-
#: admin/class-social-popup-admin.php:718
|
150 |
-
msgid "Post Type"
|
151 |
-
msgstr "Vrsta posta"
|
152 |
-
|
153 |
-
#: admin/class-social-popup-admin.php:719
|
154 |
-
msgid "Post Category"
|
155 |
-
msgstr "Kategorija posta"
|
156 |
-
|
157 |
-
#: admin/class-social-popup-admin.php:720
|
158 |
-
msgid "Post Format"
|
159 |
-
msgstr "Format posta"
|
160 |
-
|
161 |
-
#: admin/class-social-popup-admin.php:721
|
162 |
-
msgid "Post Status"
|
163 |
-
msgstr "Status posta"
|
164 |
-
|
165 |
-
#: admin/class-social-popup-admin.php:722
|
166 |
-
msgid "Post Taxonomy"
|
167 |
-
msgstr "Taksonomija posta"
|
168 |
-
|
169 |
-
#: admin/class-social-popup-admin.php:724
|
170 |
-
#: admin/class-social-popup-admin.php:725
|
171 |
-
msgid "Page"
|
172 |
-
msgstr "Stranica"
|
173 |
-
|
174 |
-
#: admin/class-social-popup-admin.php:726
|
175 |
-
msgid "Page Type"
|
176 |
-
msgstr "Vrsta stranice"
|
177 |
-
|
178 |
-
#: admin/class-social-popup-admin.php:727
|
179 |
-
msgid "Page Parent"
|
180 |
-
msgstr "Nadređena stranica"
|
181 |
-
|
182 |
-
#: admin/class-social-popup-admin.php:728
|
183 |
-
msgid "Page Template"
|
184 |
-
msgstr "Šablon stranice"
|
185 |
-
|
186 |
-
#: admin/class-social-popup-admin.php:730
|
187 |
-
msgid "Other"
|
188 |
-
msgstr "Drugi"
|
189 |
-
|
190 |
-
#: admin/class-social-popup-admin.php:731
|
191 |
-
msgid "Referrer"
|
192 |
-
msgstr ""
|
193 |
-
|
194 |
-
#: admin/class-social-popup-admin.php:732
|
195 |
-
msgid "Mobile Phone"
|
196 |
-
msgstr "Mobilni telefon"
|
197 |
-
|
198 |
-
#: admin/class-social-popup-admin.php:733
|
199 |
-
msgid "Tablet"
|
200 |
-
msgstr "Tablet"
|
201 |
-
|
202 |
-
#: admin/includes/class-spu-notices.php:30
|
203 |
-
#, php-format
|
204 |
-
msgid ""
|
205 |
-
"We noticed that you have been using our plugin for a while and we would like "
|
206 |
-
"to ask you a little favour. If you are happy with it and can take a minute "
|
207 |
-
"please <a href=\"%s\" target=\"_blank\">leave a nice review</a> on "
|
208 |
-
"WordPress. It will be a tremendous help for us!"
|
209 |
-
msgstr ""
|
210 |
-
|
211 |
-
#: admin/includes/class-spu-notices.php:32
|
212 |
-
#, php-format
|
213 |
-
msgid "<a href=\"%s\" target=\"_blank\">Leave a nice review</a>"
|
214 |
-
msgstr ""
|
215 |
-
|
216 |
-
#: admin/includes/class-spu-notices.php:33
|
217 |
-
#, php-format
|
218 |
-
msgid "<a href=\"%s\">No, thanks</a>"
|
219 |
-
msgstr ""
|
220 |
-
|
221 |
-
#: admin/views/metaboxes/metabox-donate.php:6
|
222 |
-
msgid "If you like this plugin, consider supporting it by donating."
|
223 |
-
msgstr ""
|
224 |
-
"Ako vam se sviđa ovaj plugin, razmislite o tome da ga podržite donacijom."
|
225 |
-
|
226 |
-
#: admin/views/metaboxes/metabox-donate.php:8
|
227 |
-
msgid "Donate with PayPal"
|
228 |
-
msgstr "Donirajte putem PayPal-a"
|
229 |
-
|
230 |
-
#: admin/views/metaboxes/metabox-donate.php:10
|
231 |
-
msgid "Some other ways to support this plugin"
|
232 |
-
msgstr "Drugi načini za podržavanje ovog plugin-a."
|
233 |
-
|
234 |
-
#: admin/views/metaboxes/metabox-donate.php:12
|
235 |
-
msgid "Leave a ★★★★★ review on WordPress.org"
|
236 |
-
msgstr "Ostavite komentar ★★★★★ na WordPress.org"
|
237 |
-
|
238 |
-
#: admin/views/metaboxes/metabox-donate.php:13
|
239 |
-
msgid "Write about Popups on your blog"
|
240 |
-
msgstr "Pišite o Popups plugin-u na svom blogu"
|
241 |
-
|
242 |
-
#: admin/views/metaboxes/metabox-donate.php:14
|
243 |
-
msgid "Tweet about Popups"
|
244 |
-
msgstr "Pišite na Twitter-u o Popups plugin-u"
|
245 |
-
|
246 |
-
#: admin/views/metaboxes/metabox-donate.php:15
|
247 |
-
msgid "Vote \"works\" on the WordPress.org plugin page"
|
248 |
-
msgstr "Glasajte da \"radi\" na WordPress.org plugin stranici."
|
249 |
-
|
250 |
-
#: admin/views/metaboxes/metabox-help.php:6
|
251 |
-
msgid ""
|
252 |
-
"You have three social shortcodes to use that will print a Facebook like, a "
|
253 |
-
"Google+ Follow and a Twitter follow. Check the available options and "
|
254 |
-
"<strong>configure them with your social accounts</strong>:"
|
255 |
-
msgstr ""
|
256 |
-
"Imate tri shortcode-a društvenih mreža na raspolaganju, koji će štampati "
|
257 |
-
"Facebook ‘sviđa mi se’, Google+ ‘prati’ i Twitter ‘prati’. Pogledajte "
|
258 |
-
"raspoložive opcije i <strong>uskladite ih sa svojim nalozima na društvenim "
|
259 |
-
"mrežama</strong>:"
|
260 |
-
|
261 |
-
#: admin/views/metaboxes/metabox-help.php:12
|
262 |
-
msgid "View Facebook Page Options"
|
263 |
-
msgstr ""
|
264 |
-
|
265 |
-
#: admin/views/metaboxes/metabox-help.php:14
|
266 |
-
#: admin/views/metaboxes/metabox-help.php:27
|
267 |
-
msgid "Your facebook page url"
|
268 |
-
msgstr "Url vaše Facebook stranice"
|
269 |
-
|
270 |
-
#: admin/views/metaboxes/metabox-help.php:15
|
271 |
-
msgid "Your page name"
|
272 |
-
msgstr ""
|
273 |
-
|
274 |
-
#: admin/views/metaboxes/metabox-help.php:16
|
275 |
-
msgid "true|false <b>Default value:</b> true"
|
276 |
-
msgstr ""
|
277 |
-
|
278 |
-
#: admin/views/metaboxes/metabox-help.php:17
|
279 |
-
msgid "true|false <b>Default value:</b> false"
|
280 |
-
msgstr ""
|
281 |
-
|
282 |
-
#: admin/views/metaboxes/metabox-help.php:25
|
283 |
-
msgid "View Facebook Options"
|
284 |
-
msgstr "Vidi Facebook opcije"
|
285 |
-
|
286 |
-
#: admin/views/metaboxes/metabox-help.php:28
|
287 |
-
msgid "standard, box_count, button <b>Default value:</b> button_count"
|
288 |
-
msgstr ""
|
289 |
-
"standardni, box_count, taster <b>Podrazumevana vrednost:</b> button_count"
|
290 |
-
|
291 |
-
#: admin/views/metaboxes/metabox-help.php:29
|
292 |
-
#: admin/views/metaboxes/metabox-help.php:30
|
293 |
-
msgid "true <b>Default value:</b> false"
|
294 |
-
msgstr "istina <b>Podrazumevana vrednost:</b> laž"
|
295 |
-
|
296 |
-
#: admin/views/metaboxes/metabox-help.php:31
|
297 |
-
msgid "recommend <b>Default value:</b> like"
|
298 |
-
msgstr "preporučena<b>Podrazumevana vrednost:</b> sviđa mi se"
|
299 |
-
|
300 |
-
#: admin/views/metaboxes/metabox-help.php:38
|
301 |
-
msgid "View Google+ Options"
|
302 |
-
msgstr "Vidi Google+ opcije "
|
303 |
-
|
304 |
-
#: admin/views/metaboxes/metabox-help.php:40
|
305 |
-
msgid "Your Google+ url"
|
306 |
-
msgstr "Url za vaš Google+"
|
307 |
-
|
308 |
-
#: admin/views/metaboxes/metabox-help.php:41
|
309 |
-
msgid "small, standard, tall <b>Default value:</b> medium"
|
310 |
-
msgstr "Mali, standardni, visok<b>Podrazumevana vrednost:</b> srednji"
|
311 |
-
|
312 |
-
#: admin/views/metaboxes/metabox-help.php:42
|
313 |
-
msgid "inline, none <b>Default value:</b> bubble"
|
314 |
-
msgstr "inline, nijedan <b>Podrazumevana vrednost:</b>balončić"
|
315 |
-
|
316 |
-
#: admin/views/metaboxes/metabox-help.php:48
|
317 |
-
msgid "View Twitter Options"
|
318 |
-
msgstr "Vidi Twitter opcije"
|
319 |
-
|
320 |
-
#: admin/views/metaboxes/metabox-help.php:50
|
321 |
-
msgid "Your Twitter user <b>Default chifli</b>iiii"
|
322 |
-
msgstr "Vaš Twitter korisnik <b>Podrazumevani chifli</b>iiii"
|
323 |
-
|
324 |
-
#: admin/views/metaboxes/metabox-help.php:51
|
325 |
-
msgid "false <b>Default value:</b> true"
|
326 |
-
msgstr "laž<b>Podrazumevana vrednost:</b> istina"
|
327 |
-
|
328 |
-
#: admin/views/metaboxes/metabox-help.php:52
|
329 |
-
msgid "large <b>Default value:</b> \"\""
|
330 |
-
msgstr "veliki <b>Podrazumevana vrednost:</b>\"\""
|
331 |
-
|
332 |
-
#: admin/views/metaboxes/metabox-help.php:55
|
333 |
-
msgid "Other available Shortcodes:"
|
334 |
-
msgstr "Drugi raspoloživi shortcode-ovi"
|
335 |
-
|
336 |
-
#: admin/views/metaboxes/metabox-help.php:60
|
337 |
-
msgid "View Close shortcode Options"
|
338 |
-
msgstr "Vidi: zatvori shortcode opcije "
|
339 |
-
|
340 |
-
#: admin/views/metaboxes/metabox-help.php:62
|
341 |
-
msgid "Pass a custom class to style your button"
|
342 |
-
msgstr "Dodajte prilagođenu klasu da biste stilizovali svoj taster"
|
343 |
-
|
344 |
-
#: admin/views/metaboxes/metabox-help.php:63
|
345 |
-
msgid "Button label - <b>Default value:</b> Close"
|
346 |
-
msgstr "Oznaka tastera <b>Podrazumevana vrednost:</b> Zatvori"
|
347 |
-
|
348 |
-
#: admin/views/metaboxes/metabox-help.php:64
|
349 |
-
msgid "left, right, center, none - <b>Default value:</b> center"
|
350 |
-
msgstr ""
|
351 |
-
"evo, desno, u sredini, nijedan <b>Podrazumevana vrednost:</b> u sredini"
|
352 |
-
|
353 |
-
#: admin/views/metaboxes/metabox-links.php:6
|
354 |
-
msgid "My name is"
|
355 |
-
msgstr "Zovem se"
|
356 |
-
|
357 |
-
#: admin/views/metaboxes/metabox-links.php:6
|
358 |
-
msgid "I develop WordPress plugins and themes."
|
359 |
-
msgstr "Programiram WordPress dodatke i teme."
|
360 |
-
|
361 |
-
#: admin/views/metaboxes/metabox-links.php:7
|
362 |
-
#, php-format
|
363 |
-
msgid ""
|
364 |
-
"Take a look at my <a href=\"%s\">site</a> to see my other plugins or hire "
|
365 |
-
"me. Subscribe to get updates!"
|
366 |
-
msgstr ""
|
367 |
-
"Pogledajte moj <a href=\"%s\">site</a> da biste videli ostale moje dodatke "
|
368 |
-
"ili da biste me angažovali. Pretplatite se da biste dobijali aržuriranja!"
|
369 |
-
|
370 |
-
#: admin/views/metaboxes/metabox-links.php:8
|
371 |
-
msgid "Other plugins I built:"
|
372 |
-
msgstr "Ostali dodaci koje sam napravio:"
|
373 |
-
|
374 |
-
#: admin/views/metaboxes/metabox-links.php:10
|
375 |
-
msgid "Install multiple plugins and create collections"
|
376 |
-
msgstr "Instaliraj višestruke dodatke i kreiraj zbirke"
|
377 |
-
|
378 |
-
#: admin/views/metaboxes/metabox-links.php:11
|
379 |
-
msgid "Geotarget your content"
|
380 |
-
msgstr ""
|
381 |
-
|
382 |
-
#: admin/views/metaboxes/metabox-links.php:12
|
383 |
-
msgid "Invite your network friends and import contacts"
|
384 |
-
msgstr "Pozovite svoje prijatelje sa mreže i uvezite kontakte"
|
385 |
-
|
386 |
-
#: admin/views/metaboxes/metabox-options.php:9
|
387 |
-
msgid "Box Position"
|
388 |
-
msgstr "Pozicija okvira"
|
389 |
-
|
390 |
-
#: admin/views/metaboxes/metabox-options.php:12
|
391 |
-
msgid "Centered"
|
392 |
-
msgstr "U sredini"
|
393 |
-
|
394 |
-
#: admin/views/metaboxes/metabox-options.php:13
|
395 |
-
msgid "Top Left"
|
396 |
-
msgstr "Gore levo"
|
397 |
-
|
398 |
-
#: admin/views/metaboxes/metabox-options.php:14
|
399 |
-
msgid "Top Right"
|
400 |
-
msgstr "Gore desno"
|
401 |
-
|
402 |
-
#: admin/views/metaboxes/metabox-options.php:15
|
403 |
-
msgid "Bottom Left"
|
404 |
-
msgstr "Dole levo"
|
405 |
-
|
406 |
-
#: admin/views/metaboxes/metabox-options.php:16
|
407 |
-
msgid "Bottom Right"
|
408 |
-
msgstr "Dole desno"
|
409 |
-
|
410 |
-
#: admin/views/metaboxes/metabox-options.php:23
|
411 |
-
msgid "Trigger action"
|
412 |
-
msgstr "Pokreni aktivnost"
|
413 |
-
|
414 |
-
#: admin/views/metaboxes/metabox-options.php:27
|
415 |
-
msgid "seconds after page load"
|
416 |
-
msgstr "sekundi nakon učitavanja stranice"
|
417 |
-
|
418 |
-
#: admin/views/metaboxes/metabox-options.php:28
|
419 |
-
msgid "of page height"
|
420 |
-
msgstr "ili visina stranice"
|
421 |
-
|
422 |
-
#: admin/views/metaboxes/metabox-options.php:38
|
423 |
-
msgid "Auto-hide?"
|
424 |
-
msgstr "Automatski sakrij?"
|
425 |
-
|
426 |
-
#: admin/views/metaboxes/metabox-options.php:40
|
427 |
-
#: admin/views/metaboxes/metabox-options.php:68
|
428 |
-
#: admin/views/metaboxes/metabox-options.php:76
|
429 |
-
#: admin/views/metaboxes/metabox-options.php:84
|
430 |
-
msgid "Yes"
|
431 |
-
msgstr "Da"
|
432 |
-
|
433 |
-
#: admin/views/metaboxes/metabox-options.php:41
|
434 |
-
#: admin/views/metaboxes/metabox-options.php:69
|
435 |
-
#: admin/views/metaboxes/metabox-options.php:77
|
436 |
-
#: admin/views/metaboxes/metabox-options.php:85
|
437 |
-
msgid "No"
|
438 |
-
msgstr "Ne"
|
439 |
-
|
440 |
-
#: admin/views/metaboxes/metabox-options.php:42
|
441 |
-
msgid ""
|
442 |
-
"Hide box again when visitors scroll back up? Only works when Trigger action "
|
443 |
-
"is set to % of page height"
|
444 |
-
msgstr ""
|
445 |
-
|
446 |
-
#: admin/views/metaboxes/metabox-options.php:46
|
447 |
-
msgid "Animation"
|
448 |
-
msgstr "Animacija"
|
449 |
-
|
450 |
-
#: admin/views/metaboxes/metabox-options.php:49
|
451 |
-
msgid "Fade In"
|
452 |
-
msgstr "Bledi"
|
453 |
-
|
454 |
-
#: admin/views/metaboxes/metabox-options.php:50
|
455 |
-
msgid "Slide In"
|
456 |
-
msgstr "Kliza"
|
457 |
-
|
458 |
-
#: admin/views/metaboxes/metabox-options.php:53
|
459 |
-
msgid "Slide will only apply when popup is on the corners"
|
460 |
-
msgstr "Klizanje će funkcionisati samo kad je iskačući prozor u ćoškovima"
|
461 |
-
|
462 |
-
#: admin/views/metaboxes/metabox-options.php:58
|
463 |
-
msgid "Cookie expiration days"
|
464 |
-
msgstr "Rok trajanja kolačića"
|
465 |
-
|
466 |
-
#: admin/views/metaboxes/metabox-options.php:61
|
467 |
-
msgid "After closing the box, how many days should it stay hidden?"
|
468 |
-
msgstr "Koliko dana okvir treba da ostane sakriven nakon zatvaranja?"
|
469 |
-
|
470 |
-
#: admin/views/metaboxes/metabox-options.php:66
|
471 |
-
msgid "Enable test mode?"
|
472 |
-
msgstr "Aktiviraj režim testa?"
|
473 |
-
|
474 |
-
#: admin/views/metaboxes/metabox-options.php:70
|
475 |
-
msgid ""
|
476 |
-
"If test mode is enabled, the box will show up regardless of whether a cookie "
|
477 |
-
"has been set. (To admins only)"
|
478 |
-
msgstr ""
|
479 |
-
"Ako je aktiviran režim testa, okvir će se prikazati bez obzira na "
|
480 |
-
"podešavanje kolačića (samo administratorima)."
|
481 |
-
|
482 |
-
#: admin/views/metaboxes/metabox-options.php:74
|
483 |
-
msgid "Close on conversion?"
|
484 |
-
msgstr ""
|
485 |
-
|
486 |
-
#: admin/views/metaboxes/metabox-options.php:78
|
487 |
-
msgid ""
|
488 |
-
"If you have a form or social shortcode, by default popup will close on "
|
489 |
-
"submission/conversion"
|
490 |
-
msgstr ""
|
491 |
-
|
492 |
-
#: admin/views/metaboxes/metabox-options.php:82
|
493 |
-
msgid "Show powered by link?"
|
494 |
-
msgstr ""
|
495 |
-
|
496 |
-
#: admin/views/metaboxes/metabox-options.php:86
|
497 |
-
#, php-format
|
498 |
-
msgid ""
|
499 |
-
"Shows a \"powered by\" link below your popup. If your affiliate link is set "
|
500 |
-
"in the <a href=\"%s\">settings</a>, it will be used."
|
501 |
-
msgstr ""
|
502 |
-
|
503 |
-
#: admin/views/metaboxes/metabox-options.php:91
|
504 |
-
msgid "Appearance"
|
505 |
-
msgstr "Izgled"
|
506 |
-
|
507 |
-
#: admin/views/metaboxes/metabox-options.php:95
|
508 |
-
msgid "Background opacity"
|
509 |
-
msgstr "Neprozirnost pozadine"
|
510 |
-
|
511 |
-
#: admin/views/metaboxes/metabox-options.php:98
|
512 |
-
msgid "Leave at 0 for no background. Max value is 1"
|
513 |
-
msgstr "Ostavite na 0 ako ne želite pozadinu. Maksimalna vrednost je 1."
|
514 |
-
|
515 |
-
#: admin/views/metaboxes/metabox-options.php:104
|
516 |
-
msgid "Background color"
|
517 |
-
msgstr "Boja pozadine"
|
518 |
-
|
519 |
-
#: admin/views/metaboxes/metabox-options.php:108
|
520 |
-
msgid "Text color"
|
521 |
-
msgstr "Boja teksta"
|
522 |
-
|
523 |
-
#: admin/views/metaboxes/metabox-options.php:112
|
524 |
-
msgid "Box width"
|
525 |
-
msgstr "Širina okvira"
|
526 |
-
|
527 |
-
#: admin/views/metaboxes/metabox-options.php:118
|
528 |
-
msgid "Border color"
|
529 |
-
msgstr "Boja ivice"
|
530 |
-
|
531 |
-
#: admin/views/metaboxes/metabox-options.php:122
|
532 |
-
msgid "Border width"
|
533 |
-
msgstr "Širina ivice"
|
534 |
-
|
535 |
-
#: admin/views/metaboxes/metabox-premium.php:16
|
536 |
-
msgid ""
|
537 |
-
"Take the best WordPress Popups plugin to the next level with Popups Premium "
|
538 |
-
"extension."
|
539 |
-
msgstr ""
|
540 |
-
"Podignite najbolji WordPress Popups plugin na viši nivo Popups Premium "
|
541 |
-
"ekstenzijom"
|
542 |
-
|
543 |
-
#: admin/views/metaboxes/metabox-premium.php:17
|
544 |
-
msgid "Popups Premium Features:"
|
545 |
-
msgstr "Popups Premium funkcionalnosti:"
|
546 |
-
|
547 |
-
#: admin/views/metaboxes/metabox-premium.php:19
|
548 |
-
msgid "Beautiful optin forms for popular mail providers"
|
549 |
-
msgstr ""
|
550 |
-
|
551 |
-
#: admin/views/metaboxes/metabox-premium.php:20
|
552 |
-
msgid "Currently supporting MailChimp, Aweber, Postmatic, Mailpoet"
|
553 |
-
msgstr ""
|
554 |
-
|
555 |
-
#: admin/views/metaboxes/metabox-premium.php:21
|
556 |
-
msgid ""
|
557 |
-
"Track impressions and Conversions of social likes and forms submissions like "
|
558 |
-
"Contact Form 7, Gravity forms, etc"
|
559 |
-
msgstr ""
|
560 |
-
|
561 |
-
#: admin/views/metaboxes/metabox-premium.php:22
|
562 |
-
msgid "Track impressions and Conversions also in Google Analytics"
|
563 |
-
msgstr "Praćenje utisaka i konverzija u Google analitici"
|
564 |
-
|
565 |
-
#: admin/views/metaboxes/metabox-premium.php:23
|
566 |
-
#: admin/views/metaboxes/metabox-premium.php:25
|
567 |
-
msgid "Exit Intent technology"
|
568 |
-
msgstr "Exit Intent tehnologija"
|
569 |
-
|
570 |
-
#: admin/views/metaboxes/metabox-premium.php:24
|
571 |
-
msgid "8 New animations effects"
|
572 |
-
msgstr "8 novih efekata animacije"
|
573 |
-
|
574 |
-
#: admin/views/metaboxes/metabox-premium.php:26
|
575 |
-
msgid "New trigger methods"
|
576 |
-
msgstr "Nove metode okidača"
|
577 |
-
|
578 |
-
#: admin/views/metaboxes/metabox-premium.php:27
|
579 |
-
msgid "Timer for auto closing"
|
580 |
-
msgstr "Vremensko podešavanje automatskog zatvaranja"
|
581 |
-
|
582 |
-
#: admin/views/metaboxes/metabox-premium.php:28
|
583 |
-
msgid "Ability to disable close button"
|
584 |
-
msgstr "Mogućnost deaktiviranja tastera za zatvaranje"
|
585 |
-
|
586 |
-
#: admin/views/metaboxes/metabox-premium.php:29
|
587 |
-
msgid ""
|
588 |
-
"Ability to disable Advanced close methods like esc or clicking outside of "
|
589 |
-
"the popup"
|
590 |
-
msgstr ""
|
591 |
-
"Mogućnost deaktiviranja naprednih metoda zatvaranja kao što su esc ili klik "
|
592 |
-
"izvan iskačućeg prozora"
|
593 |
-
|
594 |
-
#: admin/views/metaboxes/metabox-premium.php:30
|
595 |
-
msgid "Premium support"
|
596 |
-
msgstr "Premium podrška"
|
597 |
-
|
598 |
-
#: admin/views/metaboxes/metabox-premium.php:34
|
599 |
-
msgid "Buy Now!"
|
600 |
-
msgstr "Kupite sada!"
|
601 |
-
|
602 |
-
#: admin/views/metaboxes/metabox-rules.php:19
|
603 |
-
msgid "Rules"
|
604 |
-
msgstr "Pravila"
|
605 |
-
|
606 |
-
#: admin/views/metaboxes/metabox-rules.php:20
|
607 |
-
msgid "Create a set of rules to determine where the popup will show"
|
608 |
-
msgstr ""
|
609 |
-
"Kreirajte skup pravila da biste odredili gde će se pojaviti iskačući prozor"
|
610 |
-
|
611 |
-
#: admin/views/metaboxes/metabox-rules.php:31
|
612 |
-
msgid "Show this popup if"
|
613 |
-
msgstr "Prikaži ovaj iskačući prozor ako"
|
614 |
-
|
615 |
-
#: admin/views/metaboxes/metabox-rules.php:61
|
616 |
-
msgid "is equal to"
|
617 |
-
msgstr "jednak je"
|
618 |
-
|
619 |
-
#: admin/views/metaboxes/metabox-rules.php:62
|
620 |
-
msgid "is not equal to"
|
621 |
-
msgstr "nije jednak"
|
622 |
-
|
623 |
-
#: admin/views/metaboxes/metabox-rules.php:93
|
624 |
-
msgid "and"
|
625 |
-
msgstr "i"
|
626 |
-
|
627 |
-
#: admin/views/metaboxes/metabox-rules.php:108
|
628 |
-
msgid "Add rule group"
|
629 |
-
msgstr "Dodaj pravilo za grupu"
|
630 |
-
|
631 |
-
#: admin/views/metaboxes/metabox-support.php:6
|
632 |
-
#, php-format
|
633 |
-
msgid "You are using Popups plugin v%s"
|
634 |
-
msgstr "Koristite Popups plugin v%s"
|
635 |
-
|
636 |
-
#: admin/views/metaboxes/metabox-support.php:7
|
637 |
-
#, php-format
|
638 |
-
msgid ""
|
639 |
-
"If you need support please go to the WordPress.org <a href=\"%s\">support "
|
640 |
-
"forums</a>"
|
641 |
-
msgstr ""
|
642 |
-
"Ako vam je potrebna podrška, idite na WordPress.org <a href=\"%s\">forume za "
|
643 |
-
"podršku</a>"
|
644 |
-
|
645 |
-
#: admin/views/settings-page.php:17
|
646 |
-
msgid "Affiliate link"
|
647 |
-
msgstr ""
|
648 |
-
|
649 |
-
#: admin/views/settings-page.php:20
|
650 |
-
#, php-format
|
651 |
-
msgid ""
|
652 |
-
"You can earn money by promoting the plugin! Join <a href=\"%s\">our "
|
653 |
-
"affiliate program</a> and paste your affiliate link here to earn 35% in "
|
654 |
-
"commissions . Once entered, it will replace the default \"Powered by\" on "
|
655 |
-
"the popups."
|
656 |
-
msgstr ""
|
657 |
-
|
658 |
-
#: admin/views/settings-page.php:24
|
659 |
-
msgid "Ajax mode?"
|
660 |
-
msgstr "Ajax režim?"
|
661 |
-
|
662 |
-
#: admin/views/settings-page.php:27
|
663 |
-
msgid ""
|
664 |
-
"Load popups using ajax. Compatible with cache plugins, but might not work "
|
665 |
-
"with all plugins"
|
666 |
-
msgstr ""
|
667 |
-
"Koristi Ajax za učitavanje iskačućih prozora. Kompatibilan je sa keš "
|
668 |
-
"dodacima, ali možda neće raditi sa svim dodacima."
|
669 |
-
|
670 |
-
#: admin/views/settings-page.php:32
|
671 |
-
msgid "Enable Debug mode?"
|
672 |
-
msgstr "Aktiviraj režim za otklanjanje grešaka?"
|
673 |
-
|
674 |
-
#: admin/views/settings-page.php:35
|
675 |
-
msgid "Will use uncompressed js"
|
676 |
-
msgstr "Koristiće nekompresovan js"
|
677 |
-
|
678 |
-
#: admin/views/settings-page.php:40
|
679 |
-
msgid "Enable safe mode?"
|
680 |
-
msgstr "Aktiviraj bezbedni režim?"
|
681 |
-
|
682 |
-
#: admin/views/settings-page.php:43
|
683 |
-
msgid "Will move all popups to top of the screen."
|
684 |
-
msgstr "Pomeriće sve iskačuće prozore na vrh ekrana"
|
685 |
-
|
686 |
-
#: admin/views/settings-page.php:48
|
687 |
-
msgid "Remove shortcodes style"
|
688 |
-
msgstr "Ukloni shortcode stilove"
|
689 |
-
|
690 |
-
#: admin/views/settings-page.php:51
|
691 |
-
msgid ""
|
692 |
-
"By default the plugin will apply some style to shortcodes. Check here if you "
|
693 |
-
"want to manually style them"
|
694 |
-
msgstr ""
|
695 |
-
"Po standardu, plugin će primeniti neki stil na shortcode-ove. Štiklirajte "
|
696 |
-
"ovde ako želite da ih manuelno stilizujete "
|
697 |
-
|
698 |
-
#: admin/views/settings-page.php:56
|
699 |
-
msgid "Unload Facebook javascript"
|
700 |
-
msgstr "Ne učitavaj Facebook javascript"
|
701 |
-
|
702 |
-
#: admin/views/settings-page.php:59
|
703 |
-
msgid "If you use your own Facebook script, check this"
|
704 |
-
msgstr "Štiklirajte ovo ako koristite svoj Facebook script, proverite ovo"
|
705 |
-
|
706 |
-
#: admin/views/settings-page.php:64
|
707 |
-
msgid "Unload Google javascript"
|
708 |
-
msgstr "Ne učitavaj Google javascript"
|
709 |
-
|
710 |
-
#: admin/views/settings-page.php:67
|
711 |
-
msgid "If you use your own Google script, check this"
|
712 |
-
msgstr "Štiklirajte ovo ako koristite svoj Google script"
|
713 |
-
|
714 |
-
#: admin/views/settings-page.php:72
|
715 |
-
msgid "Unload Twitter javascript"
|
716 |
-
msgstr "Ne učitavaj Twitter javascript"
|
717 |
-
|
718 |
-
#: admin/views/settings-page.php:75
|
719 |
-
msgid "If you use your own Twitter script, check this"
|
720 |
-
msgstr "Ne učitavaj Twitter javascript"
|
721 |
-
|
722 |
-
#: admin/views/settings-page.php:80
|
723 |
-
msgid "Save settings"
|
724 |
-
msgstr "Sačuvaj podešavanja"
|
725 |
-
|
726 |
-
#: includes/class-spu-helper.php:133
|
727 |
-
msgid "All Pages"
|
728 |
-
msgstr "Sve stranice"
|
729 |
-
|
730 |
-
#: includes/class-spu-helper.php:134
|
731 |
-
msgid "Front Page"
|
732 |
-
msgstr "Prva stranica"
|
733 |
-
|
734 |
-
#: includes/class-spu-helper.php:135
|
735 |
-
msgid "Posts Page"
|
736 |
-
msgstr "Postovi na stranici"
|
737 |
-
|
738 |
-
#: includes/class-spu-helper.php:136
|
739 |
-
msgid "Category Page"
|
740 |
-
msgstr ""
|
741 |
-
|
742 |
-
#: includes/class-spu-helper.php:137
|
743 |
-
msgid "Archives Page"
|
744 |
-
msgstr ""
|
745 |
-
|
746 |
-
#: includes/class-spu-helper.php:138
|
747 |
-
msgid "Top Level Page (parent of 0)"
|
748 |
-
msgstr "Stranica vrhunskog nivoa (nadređena 0)"
|
749 |
-
|
750 |
-
#: includes/class-spu-helper.php:139
|
751 |
-
msgid "Parent Page (has children)"
|
752 |
-
msgstr "Nadređena stranica (ima podređene)"
|
753 |
-
|
754 |
-
#: includes/class-spu-helper.php:140
|
755 |
-
msgid "Child Page (has parent)"
|
756 |
-
msgstr "Podređena stranica (ima nadređene)"
|
757 |
-
|
758 |
-
#: includes/class-spu-helper.php:148
|
759 |
-
msgid "Default Template"
|
760 |
-
msgstr "Podređena stranica (ima nadređene)"
|
761 |
-
|
762 |
-
#: includes/class-spu-helper.php:221
|
763 |
-
msgid "Publish"
|
764 |
-
msgstr "Podrazumevani šablon"
|
765 |
-
|
766 |
-
#: includes/class-spu-helper.php:222
|
767 |
-
msgid "Pending Review"
|
768 |
-
msgstr "Objavi"
|
769 |
-
|
770 |
-
#: includes/class-spu-helper.php:223
|
771 |
-
msgid "Draft"
|
772 |
-
msgstr "Skica"
|
773 |
-
|
774 |
-
#: includes/class-spu-helper.php:224
|
775 |
-
msgid "Future"
|
776 |
-
msgstr "Buduci"
|
777 |
-
|
778 |
-
#: includes/class-spu-helper.php:225
|
779 |
-
msgid "Private"
|
780 |
-
msgstr "Privatni"
|
781 |
-
|
782 |
-
#: includes/class-spu-helper.php:226
|
783 |
-
msgid "Revision"
|
784 |
-
msgstr "Revizija"
|
785 |
-
|
786 |
-
#: includes/class-spu-helper.php:227
|
787 |
-
msgid "Trash"
|
788 |
-
msgstr "Korpa za otpatke"
|
789 |
-
|
790 |
-
#: includes/class-spu-helper.php:240
|
791 |
-
msgid "Super Admin"
|
792 |
-
msgstr "Super Admin"
|
793 |
-
|
794 |
-
#: includes/class-spu-helper.php:260
|
795 |
-
msgid "True"
|
796 |
-
msgstr "Super Admin"
|
797 |
-
|
798 |
-
#~ msgid ""
|
799 |
-
#~ "Hide box again when visitors scroll back up? Only works when Trigger "
|
800 |
-
#~ "action is set to % of page height"
|
801 |
-
#~ msgstr ""
|
802 |
-
#~ "Ponovo sakrij okvir kad se posetioci vrate na početak? Radi samo kad je "
|
803 |
-
#~ "okidač aktivnosti podešen na % visinu stranice"
|
804 |
-
|
805 |
-
#~ msgctxt "post type general name"
|
806 |
-
#~ msgid "Popups v"
|
807 |
-
#~ msgstr "Popups v [opšti naziv vrste posta]"
|
808 |
-
|
809 |
-
#~ msgid "What's new"
|
810 |
-
#~ msgstr "Šta ima novo"
|
811 |
-
|
812 |
-
#~ msgid "Like Facebook like box but for Twitter"
|
813 |
-
#~ msgstr "Kao Facebook taster ‘sviđa mi se’, samo za Twiter"
|
814 |
-
|
815 |
-
#~ msgid ""
|
816 |
-
#~ "Track impressions and Conversions of social likes/follow and forms "
|
817 |
-
#~ "submissions like Contact Form 7, Gravity forms, etc"
|
818 |
-
#~ msgstr ""
|
819 |
-
#~ "Praćenje utisaka, konverzija opcija ‘sviđa mi se’ i ‘prati me’ na "
|
820 |
-
#~ "društvenim mrežama, kao i podnošenje obrazaca, kao što je Obrazac "
|
821 |
-
#~ "kontakta br 7, obrazaca gravitacije itd."
|
1 |
+
# Copyright (C) 2013 TODO
|
2 |
+
# This file is distributed under the same license as the TODO package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: Popups\n"
|
6 |
+
"Report-Msgid-Bugs-To: http://wordpress.org/plugins/plugin-name\n"
|
7 |
+
"POT-Creation-Date: 2015-06-14 10:53-0300\n"
|
8 |
+
"PO-Revision-Date: 2015-06-14 10:53-0300\n"
|
9 |
+
"Last-Translator: Damian Logghe <info@timersys.com>\n"
|
10 |
+
"Language-Team: Timersys <info@timersys.com>\n"
|
11 |
+
"Language: en_EN\n"
|
12 |
+
"MIME-Version: 1.0\n"
|
13 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
14 |
+
"Content-Transfer-Encoding: 8bit\n"
|
15 |
+
"X-Generator: Poedit 1.7.4\n"
|
16 |
+
"X-Poedit-KeywordsList: __;_e;_n;_x;esc_html_e;esc_html__;esc_attr_e;"
|
17 |
+
"esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2\n"
|
18 |
+
"X-Poedit-Basepath: ../\n"
|
19 |
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
20 |
+
"X-Poedit-SearchPath-0: .\n"
|
21 |
+
|
22 |
+
#: admin/class-social-popup-admin.php:154
|
23 |
+
msgctxt "post type singular name"
|
24 |
+
msgid "Popups"
|
25 |
+
msgstr "Popups [pojedinačni naziv vrste posta]"
|
26 |
+
|
27 |
+
#: admin/class-social-popup-admin.php:155
|
28 |
+
msgctxt "admin menu"
|
29 |
+
msgid "Popups"
|
30 |
+
msgstr "Iskačući prozori [meni administratora]"
|
31 |
+
|
32 |
+
#: admin/class-social-popup-admin.php:156
|
33 |
+
msgctxt "add new on admin bar"
|
34 |
+
msgid "Popups"
|
35 |
+
msgstr "Iskačući prozori [dodaj novi na traci sa menijem administratora]"
|
36 |
+
|
37 |
+
#: admin/class-social-popup-admin.php:157
|
38 |
+
msgctxt "Popups"
|
39 |
+
msgid "Add New"
|
40 |
+
msgstr "Dodaj nove [iskačuće prozore]"
|
41 |
+
|
42 |
+
#: admin/class-social-popup-admin.php:158
|
43 |
+
msgid "Add New Popups"
|
44 |
+
msgstr "Dodaj nove iskačuće prozore"
|
45 |
+
|
46 |
+
#: admin/class-social-popup-admin.php:159
|
47 |
+
msgid "New Popups"
|
48 |
+
msgstr "Novi iskačući prozori "
|
49 |
+
|
50 |
+
#: admin/class-social-popup-admin.php:160
|
51 |
+
msgid "Edit Popups"
|
52 |
+
msgstr "Uredi iskačuće prozore"
|
53 |
+
|
54 |
+
#: admin/class-social-popup-admin.php:161
|
55 |
+
msgid "View Popups"
|
56 |
+
msgstr "Vidi iskačuće prozore"
|
57 |
+
|
58 |
+
#: admin/class-social-popup-admin.php:162
|
59 |
+
msgid "All Popups"
|
60 |
+
msgstr "Svi iskačući prozori "
|
61 |
+
|
62 |
+
#: admin/class-social-popup-admin.php:163
|
63 |
+
msgid "Search Popups"
|
64 |
+
msgstr "Pretraži iskačuće prozore"
|
65 |
+
|
66 |
+
#: admin/class-social-popup-admin.php:164
|
67 |
+
msgid "Parent Popups:"
|
68 |
+
msgstr "Nadređeni iskačući prozori "
|
69 |
+
|
70 |
+
#: admin/class-social-popup-admin.php:165
|
71 |
+
msgid "No Popups found."
|
72 |
+
msgstr "Nisu pronađeni iskačući prozori "
|
73 |
+
|
74 |
+
#: admin/class-social-popup-admin.php:166
|
75 |
+
msgid "No Popups found in Trash."
|
76 |
+
msgstr "Nisu pronađeni iskačući prozori u korpi za otpatke"
|
77 |
+
|
78 |
+
#: admin/class-social-popup-admin.php:255
|
79 |
+
msgid "Popups Premium"
|
80 |
+
msgstr "Popups Premium"
|
81 |
+
|
82 |
+
#: admin/class-social-popup-admin.php:266
|
83 |
+
msgid "PopUp Shortcodes"
|
84 |
+
msgstr "PopUp Shortcodes"
|
85 |
+
|
86 |
+
#: admin/class-social-popup-admin.php:275
|
87 |
+
msgid "PopUp Display Rules"
|
88 |
+
msgstr "PopUp pravila prikazivanja"
|
89 |
+
|
90 |
+
#: admin/class-social-popup-admin.php:284
|
91 |
+
msgid "Display Options"
|
92 |
+
msgstr "Opcije prikazivanja"
|
93 |
+
|
94 |
+
#: admin/class-social-popup-admin.php:293
|
95 |
+
msgid "Need support?"
|
96 |
+
msgstr "Treba vam podrška?"
|
97 |
+
|
98 |
+
#: admin/class-social-popup-admin.php:301
|
99 |
+
msgid "Donate & support"
|
100 |
+
msgstr "Donirajte i podržite"
|
101 |
+
|
102 |
+
#: admin/class-social-popup-admin.php:309
|
103 |
+
msgid "About the developer"
|
104 |
+
msgstr "O programeru"
|
105 |
+
|
106 |
+
#: admin/class-social-popup-admin.php:557
|
107 |
+
#: admin/views/metaboxes/metabox-rules.php:33
|
108 |
+
#: admin/views/metaboxes/metabox-rules.php:106
|
109 |
+
msgid "or"
|
110 |
+
msgstr "ili"
|
111 |
+
|
112 |
+
#: admin/class-social-popup-admin.php:584
|
113 |
+
msgid "Add a Popup"
|
114 |
+
msgstr "Dodaj iskačući prozor"
|
115 |
+
|
116 |
+
#: admin/class-social-popup-admin.php:708
|
117 |
+
msgid "User"
|
118 |
+
msgstr "Korisnik"
|
119 |
+
|
120 |
+
#: admin/class-social-popup-admin.php:709
|
121 |
+
msgid "User role"
|
122 |
+
msgstr "Korisnička uloga"
|
123 |
+
|
124 |
+
#: admin/class-social-popup-admin.php:710
|
125 |
+
msgid "User is logged"
|
126 |
+
msgstr "Korisnik je prijavljen"
|
127 |
+
|
128 |
+
#: admin/class-social-popup-admin.php:711
|
129 |
+
msgid "User never left a comment"
|
130 |
+
msgstr "Korisnik nikad nije ostavio komentar"
|
131 |
+
|
132 |
+
#: admin/class-social-popup-admin.php:712
|
133 |
+
msgid "User came via a search engine"
|
134 |
+
msgstr "Korisnik je došao putem pretraživača"
|
135 |
+
|
136 |
+
#: admin/class-social-popup-admin.php:713
|
137 |
+
msgid "User did not arrive via another page on your site"
|
138 |
+
msgstr "Korisnik nije došao preko druge stranice na vašem site-u"
|
139 |
+
|
140 |
+
#: admin/class-social-popup-admin.php:715
|
141 |
+
#: admin/class-social-popup-admin.php:716
|
142 |
+
msgid "Post"
|
143 |
+
msgstr "Post"
|
144 |
+
|
145 |
+
#: admin/class-social-popup-admin.php:717
|
146 |
+
msgid "Post ID"
|
147 |
+
msgstr ""
|
148 |
+
|
149 |
+
#: admin/class-social-popup-admin.php:718
|
150 |
+
msgid "Post Type"
|
151 |
+
msgstr "Vrsta posta"
|
152 |
+
|
153 |
+
#: admin/class-social-popup-admin.php:719
|
154 |
+
msgid "Post Category"
|
155 |
+
msgstr "Kategorija posta"
|
156 |
+
|
157 |
+
#: admin/class-social-popup-admin.php:720
|
158 |
+
msgid "Post Format"
|
159 |
+
msgstr "Format posta"
|
160 |
+
|
161 |
+
#: admin/class-social-popup-admin.php:721
|
162 |
+
msgid "Post Status"
|
163 |
+
msgstr "Status posta"
|
164 |
+
|
165 |
+
#: admin/class-social-popup-admin.php:722
|
166 |
+
msgid "Post Taxonomy"
|
167 |
+
msgstr "Taksonomija posta"
|
168 |
+
|
169 |
+
#: admin/class-social-popup-admin.php:724
|
170 |
+
#: admin/class-social-popup-admin.php:725
|
171 |
+
msgid "Page"
|
172 |
+
msgstr "Stranica"
|
173 |
+
|
174 |
+
#: admin/class-social-popup-admin.php:726
|
175 |
+
msgid "Page Type"
|
176 |
+
msgstr "Vrsta stranice"
|
177 |
+
|
178 |
+
#: admin/class-social-popup-admin.php:727
|
179 |
+
msgid "Page Parent"
|
180 |
+
msgstr "Nadređena stranica"
|
181 |
+
|
182 |
+
#: admin/class-social-popup-admin.php:728
|
183 |
+
msgid "Page Template"
|
184 |
+
msgstr "Šablon stranice"
|
185 |
+
|
186 |
+
#: admin/class-social-popup-admin.php:730
|
187 |
+
msgid "Other"
|
188 |
+
msgstr "Drugi"
|
189 |
+
|
190 |
+
#: admin/class-social-popup-admin.php:731
|
191 |
+
msgid "Referrer"
|
192 |
+
msgstr ""
|
193 |
+
|
194 |
+
#: admin/class-social-popup-admin.php:732
|
195 |
+
msgid "Mobile Phone"
|
196 |
+
msgstr "Mobilni telefon"
|
197 |
+
|
198 |
+
#: admin/class-social-popup-admin.php:733
|
199 |
+
msgid "Tablet"
|
200 |
+
msgstr "Tablet"
|
201 |
+
|
202 |
+
#: admin/includes/class-spu-notices.php:30
|
203 |
+
#, php-format
|
204 |
+
msgid ""
|
205 |
+
"We noticed that you have been using our plugin for a while and we would like "
|
206 |
+
"to ask you a little favour. If you are happy with it and can take a minute "
|
207 |
+
"please <a href=\"%s\" target=\"_blank\">leave a nice review</a> on "
|
208 |
+
"WordPress. It will be a tremendous help for us!"
|
209 |
+
msgstr ""
|
210 |
+
|
211 |
+
#: admin/includes/class-spu-notices.php:32
|
212 |
+
#, php-format
|
213 |
+
msgid "<a href=\"%s\" target=\"_blank\">Leave a nice review</a>"
|
214 |
+
msgstr ""
|
215 |
+
|
216 |
+
#: admin/includes/class-spu-notices.php:33
|
217 |
+
#, php-format
|
218 |
+
msgid "<a href=\"%s\">No, thanks</a>"
|
219 |
+
msgstr ""
|
220 |
+
|
221 |
+
#: admin/views/metaboxes/metabox-donate.php:6
|
222 |
+
msgid "If you like this plugin, consider supporting it by donating."
|
223 |
+
msgstr ""
|
224 |
+
"Ako vam se sviđa ovaj plugin, razmislite o tome da ga podržite donacijom."
|
225 |
+
|
226 |
+
#: admin/views/metaboxes/metabox-donate.php:8
|
227 |
+
msgid "Donate with PayPal"
|
228 |
+
msgstr "Donirajte putem PayPal-a"
|
229 |
+
|
230 |
+
#: admin/views/metaboxes/metabox-donate.php:10
|
231 |
+
msgid "Some other ways to support this plugin"
|
232 |
+
msgstr "Drugi načini za podržavanje ovog plugin-a."
|
233 |
+
|
234 |
+
#: admin/views/metaboxes/metabox-donate.php:12
|
235 |
+
msgid "Leave a ★★★★★ review on WordPress.org"
|
236 |
+
msgstr "Ostavite komentar ★★★★★ na WordPress.org"
|
237 |
+
|
238 |
+
#: admin/views/metaboxes/metabox-donate.php:13
|
239 |
+
msgid "Write about Popups on your blog"
|
240 |
+
msgstr "Pišite o Popups plugin-u na svom blogu"
|
241 |
+
|
242 |
+
#: admin/views/metaboxes/metabox-donate.php:14
|
243 |
+
msgid "Tweet about Popups"
|
244 |
+
msgstr "Pišite na Twitter-u o Popups plugin-u"
|
245 |
+
|
246 |
+
#: admin/views/metaboxes/metabox-donate.php:15
|
247 |
+
msgid "Vote \"works\" on the WordPress.org plugin page"
|
248 |
+
msgstr "Glasajte da \"radi\" na WordPress.org plugin stranici."
|
249 |
+
|
250 |
+
#: admin/views/metaboxes/metabox-help.php:6
|
251 |
+
msgid ""
|
252 |
+
"You have three social shortcodes to use that will print a Facebook like, a "
|
253 |
+
"Google+ Follow and a Twitter follow. Check the available options and "
|
254 |
+
"<strong>configure them with your social accounts</strong>:"
|
255 |
+
msgstr ""
|
256 |
+
"Imate tri shortcode-a društvenih mreža na raspolaganju, koji će štampati "
|
257 |
+
"Facebook ‘sviđa mi se’, Google+ ‘prati’ i Twitter ‘prati’. Pogledajte "
|
258 |
+
"raspoložive opcije i <strong>uskladite ih sa svojim nalozima na društvenim "
|
259 |
+
"mrežama</strong>:"
|
260 |
+
|
261 |
+
#: admin/views/metaboxes/metabox-help.php:12
|
262 |
+
msgid "View Facebook Page Options"
|
263 |
+
msgstr ""
|
264 |
+
|
265 |
+
#: admin/views/metaboxes/metabox-help.php:14
|
266 |
+
#: admin/views/metaboxes/metabox-help.php:27
|
267 |
+
msgid "Your facebook page url"
|
268 |
+
msgstr "Url vaše Facebook stranice"
|
269 |
+
|
270 |
+
#: admin/views/metaboxes/metabox-help.php:15
|
271 |
+
msgid "Your page name"
|
272 |
+
msgstr ""
|
273 |
+
|
274 |
+
#: admin/views/metaboxes/metabox-help.php:16
|
275 |
+
msgid "true|false <b>Default value:</b> true"
|
276 |
+
msgstr ""
|
277 |
+
|
278 |
+
#: admin/views/metaboxes/metabox-help.php:17
|
279 |
+
msgid "true|false <b>Default value:</b> false"
|
280 |
+
msgstr ""
|
281 |
+
|
282 |
+
#: admin/views/metaboxes/metabox-help.php:25
|
283 |
+
msgid "View Facebook Options"
|
284 |
+
msgstr "Vidi Facebook opcije"
|
285 |
+
|
286 |
+
#: admin/views/metaboxes/metabox-help.php:28
|
287 |
+
msgid "standard, box_count, button <b>Default value:</b> button_count"
|
288 |
+
msgstr ""
|
289 |
+
"standardni, box_count, taster <b>Podrazumevana vrednost:</b> button_count"
|
290 |
+
|
291 |
+
#: admin/views/metaboxes/metabox-help.php:29
|
292 |
+
#: admin/views/metaboxes/metabox-help.php:30
|
293 |
+
msgid "true <b>Default value:</b> false"
|
294 |
+
msgstr "istina <b>Podrazumevana vrednost:</b> laž"
|
295 |
+
|
296 |
+
#: admin/views/metaboxes/metabox-help.php:31
|
297 |
+
msgid "recommend <b>Default value:</b> like"
|
298 |
+
msgstr "preporučena<b>Podrazumevana vrednost:</b> sviđa mi se"
|
299 |
+
|
300 |
+
#: admin/views/metaboxes/metabox-help.php:38
|
301 |
+
msgid "View Google+ Options"
|
302 |
+
msgstr "Vidi Google+ opcije "
|
303 |
+
|
304 |
+
#: admin/views/metaboxes/metabox-help.php:40
|
305 |
+
msgid "Your Google+ url"
|
306 |
+
msgstr "Url za vaš Google+"
|
307 |
+
|
308 |
+
#: admin/views/metaboxes/metabox-help.php:41
|
309 |
+
msgid "small, standard, tall <b>Default value:</b> medium"
|
310 |
+
msgstr "Mali, standardni, visok<b>Podrazumevana vrednost:</b> srednji"
|
311 |
+
|
312 |
+
#: admin/views/metaboxes/metabox-help.php:42
|
313 |
+
msgid "inline, none <b>Default value:</b> bubble"
|
314 |
+
msgstr "inline, nijedan <b>Podrazumevana vrednost:</b>balončić"
|
315 |
+
|
316 |
+
#: admin/views/metaboxes/metabox-help.php:48
|
317 |
+
msgid "View Twitter Options"
|
318 |
+
msgstr "Vidi Twitter opcije"
|
319 |
+
|
320 |
+
#: admin/views/metaboxes/metabox-help.php:50
|
321 |
+
msgid "Your Twitter user <b>Default chifli</b>iiii"
|
322 |
+
msgstr "Vaš Twitter korisnik <b>Podrazumevani chifli</b>iiii"
|
323 |
+
|
324 |
+
#: admin/views/metaboxes/metabox-help.php:51
|
325 |
+
msgid "false <b>Default value:</b> true"
|
326 |
+
msgstr "laž<b>Podrazumevana vrednost:</b> istina"
|
327 |
+
|
328 |
+
#: admin/views/metaboxes/metabox-help.php:52
|
329 |
+
msgid "large <b>Default value:</b> \"\""
|
330 |
+
msgstr "veliki <b>Podrazumevana vrednost:</b>\"\""
|
331 |
+
|
332 |
+
#: admin/views/metaboxes/metabox-help.php:55
|
333 |
+
msgid "Other available Shortcodes:"
|
334 |
+
msgstr "Drugi raspoloživi shortcode-ovi"
|
335 |
+
|
336 |
+
#: admin/views/metaboxes/metabox-help.php:60
|
337 |
+
msgid "View Close shortcode Options"
|
338 |
+
msgstr "Vidi: zatvori shortcode opcije "
|
339 |
+
|
340 |
+
#: admin/views/metaboxes/metabox-help.php:62
|
341 |
+
msgid "Pass a custom class to style your button"
|
342 |
+
msgstr "Dodajte prilagođenu klasu da biste stilizovali svoj taster"
|
343 |
+
|
344 |
+
#: admin/views/metaboxes/metabox-help.php:63
|
345 |
+
msgid "Button label - <b>Default value:</b> Close"
|
346 |
+
msgstr "Oznaka tastera <b>Podrazumevana vrednost:</b> Zatvori"
|
347 |
+
|
348 |
+
#: admin/views/metaboxes/metabox-help.php:64
|
349 |
+
msgid "left, right, center, none - <b>Default value:</b> center"
|
350 |
+
msgstr ""
|
351 |
+
"evo, desno, u sredini, nijedan <b>Podrazumevana vrednost:</b> u sredini"
|
352 |
+
|
353 |
+
#: admin/views/metaboxes/metabox-links.php:6
|
354 |
+
msgid "My name is"
|
355 |
+
msgstr "Zovem se"
|
356 |
+
|
357 |
+
#: admin/views/metaboxes/metabox-links.php:6
|
358 |
+
msgid "I develop WordPress plugins and themes."
|
359 |
+
msgstr "Programiram WordPress dodatke i teme."
|
360 |
+
|
361 |
+
#: admin/views/metaboxes/metabox-links.php:7
|
362 |
+
#, php-format
|
363 |
+
msgid ""
|
364 |
+
"Take a look at my <a href=\"%s\">site</a> to see my other plugins or hire "
|
365 |
+
"me. Subscribe to get updates!"
|
366 |
+
msgstr ""
|
367 |
+
"Pogledajte moj <a href=\"%s\">site</a> da biste videli ostale moje dodatke "
|
368 |
+
"ili da biste me angažovali. Pretplatite se da biste dobijali aržuriranja!"
|
369 |
+
|
370 |
+
#: admin/views/metaboxes/metabox-links.php:8
|
371 |
+
msgid "Other plugins I built:"
|
372 |
+
msgstr "Ostali dodaci koje sam napravio:"
|
373 |
+
|
374 |
+
#: admin/views/metaboxes/metabox-links.php:10
|
375 |
+
msgid "Install multiple plugins and create collections"
|
376 |
+
msgstr "Instaliraj višestruke dodatke i kreiraj zbirke"
|
377 |
+
|
378 |
+
#: admin/views/metaboxes/metabox-links.php:11
|
379 |
+
msgid "Geotarget your content"
|
380 |
+
msgstr ""
|
381 |
+
|
382 |
+
#: admin/views/metaboxes/metabox-links.php:12
|
383 |
+
msgid "Invite your network friends and import contacts"
|
384 |
+
msgstr "Pozovite svoje prijatelje sa mreže i uvezite kontakte"
|
385 |
+
|
386 |
+
#: admin/views/metaboxes/metabox-options.php:9
|
387 |
+
msgid "Box Position"
|
388 |
+
msgstr "Pozicija okvira"
|
389 |
+
|
390 |
+
#: admin/views/metaboxes/metabox-options.php:12
|
391 |
+
msgid "Centered"
|
392 |
+
msgstr "U sredini"
|
393 |
+
|
394 |
+
#: admin/views/metaboxes/metabox-options.php:13
|
395 |
+
msgid "Top Left"
|
396 |
+
msgstr "Gore levo"
|
397 |
+
|
398 |
+
#: admin/views/metaboxes/metabox-options.php:14
|
399 |
+
msgid "Top Right"
|
400 |
+
msgstr "Gore desno"
|
401 |
+
|
402 |
+
#: admin/views/metaboxes/metabox-options.php:15
|
403 |
+
msgid "Bottom Left"
|
404 |
+
msgstr "Dole levo"
|
405 |
+
|
406 |
+
#: admin/views/metaboxes/metabox-options.php:16
|
407 |
+
msgid "Bottom Right"
|
408 |
+
msgstr "Dole desno"
|
409 |
+
|
410 |
+
#: admin/views/metaboxes/metabox-options.php:23
|
411 |
+
msgid "Trigger action"
|
412 |
+
msgstr "Pokreni aktivnost"
|
413 |
+
|
414 |
+
#: admin/views/metaboxes/metabox-options.php:27
|
415 |
+
msgid "seconds after page load"
|
416 |
+
msgstr "sekundi nakon učitavanja stranice"
|
417 |
+
|
418 |
+
#: admin/views/metaboxes/metabox-options.php:28
|
419 |
+
msgid "of page height"
|
420 |
+
msgstr "ili visina stranice"
|
421 |
+
|
422 |
+
#: admin/views/metaboxes/metabox-options.php:38
|
423 |
+
msgid "Auto-hide?"
|
424 |
+
msgstr "Automatski sakrij?"
|
425 |
+
|
426 |
+
#: admin/views/metaboxes/metabox-options.php:40
|
427 |
+
#: admin/views/metaboxes/metabox-options.php:68
|
428 |
+
#: admin/views/metaboxes/metabox-options.php:76
|
429 |
+
#: admin/views/metaboxes/metabox-options.php:84
|
430 |
+
msgid "Yes"
|
431 |
+
msgstr "Da"
|
432 |
+
|
433 |
+
#: admin/views/metaboxes/metabox-options.php:41
|
434 |
+
#: admin/views/metaboxes/metabox-options.php:69
|
435 |
+
#: admin/views/metaboxes/metabox-options.php:77
|
436 |
+
#: admin/views/metaboxes/metabox-options.php:85
|
437 |
+
msgid "No"
|
438 |
+
msgstr "Ne"
|
439 |
+
|
440 |
+
#: admin/views/metaboxes/metabox-options.php:42
|
441 |
+
msgid ""
|
442 |
+
"Hide box again when visitors scroll back up? Only works when Trigger action "
|
443 |
+
"is set to % of page height"
|
444 |
+
msgstr ""
|
445 |
+
|
446 |
+
#: admin/views/metaboxes/metabox-options.php:46
|
447 |
+
msgid "Animation"
|
448 |
+
msgstr "Animacija"
|
449 |
+
|
450 |
+
#: admin/views/metaboxes/metabox-options.php:49
|
451 |
+
msgid "Fade In"
|
452 |
+
msgstr "Bledi"
|
453 |
+
|
454 |
+
#: admin/views/metaboxes/metabox-options.php:50
|
455 |
+
msgid "Slide In"
|
456 |
+
msgstr "Kliza"
|
457 |
+
|
458 |
+
#: admin/views/metaboxes/metabox-options.php:53
|
459 |
+
msgid "Slide will only apply when popup is on the corners"
|
460 |
+
msgstr "Klizanje će funkcionisati samo kad je iskačući prozor u ćoškovima"
|
461 |
+
|
462 |
+
#: admin/views/metaboxes/metabox-options.php:58
|
463 |
+
msgid "Cookie expiration days"
|
464 |
+
msgstr "Rok trajanja kolačića"
|
465 |
+
|
466 |
+
#: admin/views/metaboxes/metabox-options.php:61
|
467 |
+
msgid "After closing the box, how many days should it stay hidden?"
|
468 |
+
msgstr "Koliko dana okvir treba da ostane sakriven nakon zatvaranja?"
|
469 |
+
|
470 |
+
#: admin/views/metaboxes/metabox-options.php:66
|
471 |
+
msgid "Enable test mode?"
|
472 |
+
msgstr "Aktiviraj režim testa?"
|
473 |
+
|
474 |
+
#: admin/views/metaboxes/metabox-options.php:70
|
475 |
+
msgid ""
|
476 |
+
"If test mode is enabled, the box will show up regardless of whether a cookie "
|
477 |
+
"has been set. (To admins only)"
|
478 |
+
msgstr ""
|
479 |
+
"Ako je aktiviran režim testa, okvir će se prikazati bez obzira na "
|
480 |
+
"podešavanje kolačića (samo administratorima)."
|
481 |
+
|
482 |
+
#: admin/views/metaboxes/metabox-options.php:74
|
483 |
+
msgid "Close on conversion?"
|
484 |
+
msgstr ""
|
485 |
+
|
486 |
+
#: admin/views/metaboxes/metabox-options.php:78
|
487 |
+
msgid ""
|
488 |
+
"If you have a form or social shortcode, by default popup will close on "
|
489 |
+
"submission/conversion"
|
490 |
+
msgstr ""
|
491 |
+
|
492 |
+
#: admin/views/metaboxes/metabox-options.php:82
|
493 |
+
msgid "Show powered by link?"
|
494 |
+
msgstr ""
|
495 |
+
|
496 |
+
#: admin/views/metaboxes/metabox-options.php:86
|
497 |
+
#, php-format
|
498 |
+
msgid ""
|
499 |
+
"Shows a \"powered by\" link below your popup. If your affiliate link is set "
|
500 |
+
"in the <a href=\"%s\">settings</a>, it will be used."
|
501 |
+
msgstr ""
|
502 |
+
|
503 |
+
#: admin/views/metaboxes/metabox-options.php:91
|
504 |
+
msgid "Appearance"
|
505 |
+
msgstr "Izgled"
|
506 |
+
|
507 |
+
#: admin/views/metaboxes/metabox-options.php:95
|
508 |
+
msgid "Background opacity"
|
509 |
+
msgstr "Neprozirnost pozadine"
|
510 |
+
|
511 |
+
#: admin/views/metaboxes/metabox-options.php:98
|
512 |
+
msgid "Leave at 0 for no background. Max value is 1"
|
513 |
+
msgstr "Ostavite na 0 ako ne želite pozadinu. Maksimalna vrednost je 1."
|
514 |
+
|
515 |
+
#: admin/views/metaboxes/metabox-options.php:104
|
516 |
+
msgid "Background color"
|
517 |
+
msgstr "Boja pozadine"
|
518 |
+
|
519 |
+
#: admin/views/metaboxes/metabox-options.php:108
|
520 |
+
msgid "Text color"
|
521 |
+
msgstr "Boja teksta"
|
522 |
+
|
523 |
+
#: admin/views/metaboxes/metabox-options.php:112
|
524 |
+
msgid "Box width"
|
525 |
+
msgstr "Širina okvira"
|
526 |
+
|
527 |
+
#: admin/views/metaboxes/metabox-options.php:118
|
528 |
+
msgid "Border color"
|
529 |
+
msgstr "Boja ivice"
|
530 |
+
|
531 |
+
#: admin/views/metaboxes/metabox-options.php:122
|
532 |
+
msgid "Border width"
|
533 |
+
msgstr "Širina ivice"
|
534 |
+
|
535 |
+
#: admin/views/metaboxes/metabox-premium.php:16
|
536 |
+
msgid ""
|
537 |
+
"Take the best WordPress Popups plugin to the next level with Popups Premium "
|
538 |
+
"extension."
|
539 |
+
msgstr ""
|
540 |
+
"Podignite najbolji WordPress Popups plugin na viši nivo Popups Premium "
|
541 |
+
"ekstenzijom"
|
542 |
+
|
543 |
+
#: admin/views/metaboxes/metabox-premium.php:17
|
544 |
+
msgid "Popups Premium Features:"
|
545 |
+
msgstr "Popups Premium funkcionalnosti:"
|
546 |
+
|
547 |
+
#: admin/views/metaboxes/metabox-premium.php:19
|
548 |
+
msgid "Beautiful optin forms for popular mail providers"
|
549 |
+
msgstr ""
|
550 |
+
|
551 |
+
#: admin/views/metaboxes/metabox-premium.php:20
|
552 |
+
msgid "Currently supporting MailChimp, Aweber, Postmatic, Mailpoet"
|
553 |
+
msgstr ""
|
554 |
+
|
555 |
+
#: admin/views/metaboxes/metabox-premium.php:21
|
556 |
+
msgid ""
|
557 |
+
"Track impressions and Conversions of social likes and forms submissions like "
|
558 |
+
"Contact Form 7, Gravity forms, etc"
|
559 |
+
msgstr ""
|
560 |
+
|
561 |
+
#: admin/views/metaboxes/metabox-premium.php:22
|
562 |
+
msgid "Track impressions and Conversions also in Google Analytics"
|
563 |
+
msgstr "Praćenje utisaka i konverzija u Google analitici"
|
564 |
+
|
565 |
+
#: admin/views/metaboxes/metabox-premium.php:23
|
566 |
+
#: admin/views/metaboxes/metabox-premium.php:25
|
567 |
+
msgid "Exit Intent technology"
|
568 |
+
msgstr "Exit Intent tehnologija"
|
569 |
+
|
570 |
+
#: admin/views/metaboxes/metabox-premium.php:24
|
571 |
+
msgid "8 New animations effects"
|
572 |
+
msgstr "8 novih efekata animacije"
|
573 |
+
|
574 |
+
#: admin/views/metaboxes/metabox-premium.php:26
|
575 |
+
msgid "New trigger methods"
|
576 |
+
msgstr "Nove metode okidača"
|
577 |
+
|
578 |
+
#: admin/views/metaboxes/metabox-premium.php:27
|
579 |
+
msgid "Timer for auto closing"
|
580 |
+
msgstr "Vremensko podešavanje automatskog zatvaranja"
|
581 |
+
|
582 |
+
#: admin/views/metaboxes/metabox-premium.php:28
|
583 |
+
msgid "Ability to disable close button"
|
584 |
+
msgstr "Mogućnost deaktiviranja tastera za zatvaranje"
|
585 |
+
|
586 |
+
#: admin/views/metaboxes/metabox-premium.php:29
|
587 |
+
msgid ""
|
588 |
+
"Ability to disable Advanced close methods like esc or clicking outside of "
|
589 |
+
"the popup"
|
590 |
+
msgstr ""
|
591 |
+
"Mogućnost deaktiviranja naprednih metoda zatvaranja kao što su esc ili klik "
|
592 |
+
"izvan iskačućeg prozora"
|
593 |
+
|
594 |
+
#: admin/views/metaboxes/metabox-premium.php:30
|
595 |
+
msgid "Premium support"
|
596 |
+
msgstr "Premium podrška"
|
597 |
+
|
598 |
+
#: admin/views/metaboxes/metabox-premium.php:34
|
599 |
+
msgid "Buy Now!"
|
600 |
+
msgstr "Kupite sada!"
|
601 |
+
|
602 |
+
#: admin/views/metaboxes/metabox-rules.php:19
|
603 |
+
msgid "Rules"
|
604 |
+
msgstr "Pravila"
|
605 |
+
|
606 |
+
#: admin/views/metaboxes/metabox-rules.php:20
|
607 |
+
msgid "Create a set of rules to determine where the popup will show"
|
608 |
+
msgstr ""
|
609 |
+
"Kreirajte skup pravila da biste odredili gde će se pojaviti iskačući prozor"
|
610 |
+
|
611 |
+
#: admin/views/metaboxes/metabox-rules.php:31
|
612 |
+
msgid "Show this popup if"
|
613 |
+
msgstr "Prikaži ovaj iskačući prozor ako"
|
614 |
+
|
615 |
+
#: admin/views/metaboxes/metabox-rules.php:61
|
616 |
+
msgid "is equal to"
|
617 |
+
msgstr "jednak je"
|
618 |
+
|
619 |
+
#: admin/views/metaboxes/metabox-rules.php:62
|
620 |
+
msgid "is not equal to"
|
621 |
+
msgstr "nije jednak"
|
622 |
+
|
623 |
+
#: admin/views/metaboxes/metabox-rules.php:93
|
624 |
+
msgid "and"
|
625 |
+
msgstr "i"
|
626 |
+
|
627 |
+
#: admin/views/metaboxes/metabox-rules.php:108
|
628 |
+
msgid "Add rule group"
|
629 |
+
msgstr "Dodaj pravilo za grupu"
|
630 |
+
|
631 |
+
#: admin/views/metaboxes/metabox-support.php:6
|
632 |
+
#, php-format
|
633 |
+
msgid "You are using Popups plugin v%s"
|
634 |
+
msgstr "Koristite Popups plugin v%s"
|
635 |
+
|
636 |
+
#: admin/views/metaboxes/metabox-support.php:7
|
637 |
+
#, php-format
|
638 |
+
msgid ""
|
639 |
+
"If you need support please go to the WordPress.org <a href=\"%s\">support "
|
640 |
+
"forums</a>"
|
641 |
+
msgstr ""
|
642 |
+
"Ako vam je potrebna podrška, idite na WordPress.org <a href=\"%s\">forume za "
|
643 |
+
"podršku</a>"
|
644 |
+
|
645 |
+
#: admin/views/settings-page.php:17
|
646 |
+
msgid "Affiliate link"
|
647 |
+
msgstr ""
|
648 |
+
|
649 |
+
#: admin/views/settings-page.php:20
|
650 |
+
#, php-format
|
651 |
+
msgid ""
|
652 |
+
"You can earn money by promoting the plugin! Join <a href=\"%s\">our "
|
653 |
+
"affiliate program</a> and paste your affiliate link here to earn 35% in "
|
654 |
+
"commissions . Once entered, it will replace the default \"Powered by\" on "
|
655 |
+
"the popups."
|
656 |
+
msgstr ""
|
657 |
+
|
658 |
+
#: admin/views/settings-page.php:24
|
659 |
+
msgid "Ajax mode?"
|
660 |
+
msgstr "Ajax režim?"
|
661 |
+
|
662 |
+
#: admin/views/settings-page.php:27
|
663 |
+
msgid ""
|
664 |
+
"Load popups using ajax. Compatible with cache plugins, but might not work "
|
665 |
+
"with all plugins"
|
666 |
+
msgstr ""
|
667 |
+
"Koristi Ajax za učitavanje iskačućih prozora. Kompatibilan je sa keš "
|
668 |
+
"dodacima, ali možda neće raditi sa svim dodacima."
|
669 |
+
|
670 |
+
#: admin/views/settings-page.php:32
|
671 |
+
msgid "Enable Debug mode?"
|
672 |
+
msgstr "Aktiviraj režim za otklanjanje grešaka?"
|
673 |
+
|
674 |
+
#: admin/views/settings-page.php:35
|
675 |
+
msgid "Will use uncompressed js"
|
676 |
+
msgstr "Koristiće nekompresovan js"
|
677 |
+
|
678 |
+
#: admin/views/settings-page.php:40
|
679 |
+
msgid "Enable safe mode?"
|
680 |
+
msgstr "Aktiviraj bezbedni režim?"
|
681 |
+
|
682 |
+
#: admin/views/settings-page.php:43
|
683 |
+
msgid "Will move all popups to top of the screen."
|
684 |
+
msgstr "Pomeriće sve iskačuće prozore na vrh ekrana"
|
685 |
+
|
686 |
+
#: admin/views/settings-page.php:48
|
687 |
+
msgid "Remove shortcodes style"
|
688 |
+
msgstr "Ukloni shortcode stilove"
|
689 |
+
|
690 |
+
#: admin/views/settings-page.php:51
|
691 |
+
msgid ""
|
692 |
+
"By default the plugin will apply some style to shortcodes. Check here if you "
|
693 |
+
"want to manually style them"
|
694 |
+
msgstr ""
|
695 |
+
"Po standardu, plugin će primeniti neki stil na shortcode-ove. Štiklirajte "
|
696 |
+
"ovde ako želite da ih manuelno stilizujete "
|
697 |
+
|
698 |
+
#: admin/views/settings-page.php:56
|
699 |
+
msgid "Unload Facebook javascript"
|
700 |
+
msgstr "Ne učitavaj Facebook javascript"
|
701 |
+
|
702 |
+
#: admin/views/settings-page.php:59
|
703 |
+
msgid "If you use your own Facebook script, check this"
|
704 |
+
msgstr "Štiklirajte ovo ako koristite svoj Facebook script, proverite ovo"
|
705 |
+
|
706 |
+
#: admin/views/settings-page.php:64
|
707 |
+
msgid "Unload Google javascript"
|
708 |
+
msgstr "Ne učitavaj Google javascript"
|
709 |
+
|
710 |
+
#: admin/views/settings-page.php:67
|
711 |
+
msgid "If you use your own Google script, check this"
|
712 |
+
msgstr "Štiklirajte ovo ako koristite svoj Google script"
|
713 |
+
|
714 |
+
#: admin/views/settings-page.php:72
|
715 |
+
msgid "Unload Twitter javascript"
|
716 |
+
msgstr "Ne učitavaj Twitter javascript"
|
717 |
+
|
718 |
+
#: admin/views/settings-page.php:75
|
719 |
+
msgid "If you use your own Twitter script, check this"
|
720 |
+
msgstr "Ne učitavaj Twitter javascript"
|
721 |
+
|
722 |
+
#: admin/views/settings-page.php:80
|
723 |
+
msgid "Save settings"
|
724 |
+
msgstr "Sačuvaj podešavanja"
|
725 |
+
|
726 |
+
#: includes/class-spu-helper.php:133
|
727 |
+
msgid "All Pages"
|
728 |
+
msgstr "Sve stranice"
|
729 |
+
|
730 |
+
#: includes/class-spu-helper.php:134
|
731 |
+
msgid "Front Page"
|
732 |
+
msgstr "Prva stranica"
|
733 |
+
|
734 |
+
#: includes/class-spu-helper.php:135
|
735 |
+
msgid "Posts Page"
|
736 |
+
msgstr "Postovi na stranici"
|
737 |
+
|
738 |
+
#: includes/class-spu-helper.php:136
|
739 |
+
msgid "Category Page"
|
740 |
+
msgstr ""
|
741 |
+
|
742 |
+
#: includes/class-spu-helper.php:137
|
743 |
+
msgid "Archives Page"
|
744 |
+
msgstr ""
|
745 |
+
|
746 |
+
#: includes/class-spu-helper.php:138
|
747 |
+
msgid "Top Level Page (parent of 0)"
|
748 |
+
msgstr "Stranica vrhunskog nivoa (nadređena 0)"
|
749 |
+
|
750 |
+
#: includes/class-spu-helper.php:139
|
751 |
+
msgid "Parent Page (has children)"
|
752 |
+
msgstr "Nadređena stranica (ima podređene)"
|
753 |
+
|
754 |
+
#: includes/class-spu-helper.php:140
|
755 |
+
msgid "Child Page (has parent)"
|
756 |
+
msgstr "Podređena stranica (ima nadređene)"
|
757 |
+
|
758 |
+
#: includes/class-spu-helper.php:148
|
759 |
+
msgid "Default Template"
|
760 |
+
msgstr "Podređena stranica (ima nadređene)"
|
761 |
+
|
762 |
+
#: includes/class-spu-helper.php:221
|
763 |
+
msgid "Publish"
|
764 |
+
msgstr "Podrazumevani šablon"
|
765 |
+
|
766 |
+
#: includes/class-spu-helper.php:222
|
767 |
+
msgid "Pending Review"
|
768 |
+
msgstr "Objavi"
|
769 |
+
|
770 |
+
#: includes/class-spu-helper.php:223
|
771 |
+
msgid "Draft"
|
772 |
+
msgstr "Skica"
|
773 |
+
|
774 |
+
#: includes/class-spu-helper.php:224
|
775 |
+
msgid "Future"
|
776 |
+
msgstr "Buduci"
|
777 |
+
|
778 |
+
#: includes/class-spu-helper.php:225
|
779 |
+
msgid "Private"
|
780 |
+
msgstr "Privatni"
|
781 |
+
|
782 |
+
#: includes/class-spu-helper.php:226
|
783 |
+
msgid "Revision"
|
784 |
+
msgstr "Revizija"
|
785 |
+
|
786 |
+
#: includes/class-spu-helper.php:227
|
787 |
+
msgid "Trash"
|
788 |
+
msgstr "Korpa za otpatke"
|
789 |
+
|
790 |
+
#: includes/class-spu-helper.php:240
|
791 |
+
msgid "Super Admin"
|
792 |
+
msgstr "Super Admin"
|
793 |
+
|
794 |
+
#: includes/class-spu-helper.php:260
|
795 |
+
msgid "True"
|
796 |
+
msgstr "Super Admin"
|
797 |
+
|
798 |
+
#~ msgid ""
|
799 |
+
#~ "Hide box again when visitors scroll back up? Only works when Trigger "
|
800 |
+
#~ "action is set to % of page height"
|
801 |
+
#~ msgstr ""
|
802 |
+
#~ "Ponovo sakrij okvir kad se posetioci vrate na početak? Radi samo kad je "
|
803 |
+
#~ "okidač aktivnosti podešen na % visinu stranice"
|
804 |
+
|
805 |
+
#~ msgctxt "post type general name"
|
806 |
+
#~ msgid "Popups v"
|
807 |
+
#~ msgstr "Popups v [opšti naziv vrste posta]"
|
808 |
+
|
809 |
+
#~ msgid "What's new"
|
810 |
+
#~ msgstr "Šta ima novo"
|
811 |
+
|
812 |
+
#~ msgid "Like Facebook like box but for Twitter"
|
813 |
+
#~ msgstr "Kao Facebook taster ‘sviđa mi se’, samo za Twiter"
|
814 |
+
|
815 |
+
#~ msgid ""
|
816 |
+
#~ "Track impressions and Conversions of social likes/follow and forms "
|
817 |
+
#~ "submissions like Contact Form 7, Gravity forms, etc"
|
818 |
+
#~ msgstr ""
|
819 |
+
#~ "Praćenje utisaka, konverzija opcija ‘sviđa mi se’ i ‘prati me’ na "
|
820 |
+
#~ "društvenim mrežama, kao i podnošenje obrazaca, kao što je Obrazac "
|
821 |
+
#~ "kontakta br 7, obrazaca gravitacije itd."
|
popups.php
CHANGED
@@ -11,7 +11,7 @@
|
|
11 |
* @socialpopup
|
12 |
* Plugin Name: Popups - WordPress Popup
|
13 |
* Plugin URI: http://www.timersys.com/free-plugins/social-popup/
|
14 |
-
* Version: 1.9.3.
|
15 |
* Description: Most complete free Popups plugin, scroll triggered popups, compatible with social networks, Gravity Forms, Ninja Forms, Contact form 7, Mailpoet, Mailchimp for WP, Postmatic, etc
|
16 |
* Author: timersys
|
17 |
* Author URI: https://timersys.com
|
@@ -30,7 +30,7 @@ if ( ! defined( 'WPINC' ) ) {
|
|
30 |
* Public-Facing Functionality
|
31 |
*----------------------------------------------------------------------------*/
|
32 |
|
33 |
-
define( 'SPU_VERSION' , '1.9.3.
|
34 |
define( 'SPU_PLUGIN_DIR' , plugin_dir_path(__FILE__) );
|
35 |
define( 'SPU_PLUGIN_URL' , plugin_dir_url(__FILE__) );
|
36 |
define( 'SPU_PLUGIN_HOOK' , basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ) );
|
11 |
* @socialpopup
|
12 |
* Plugin Name: Popups - WordPress Popup
|
13 |
* Plugin URI: http://www.timersys.com/free-plugins/social-popup/
|
14 |
+
* Version: 1.9.3.3
|
15 |
* Description: Most complete free Popups plugin, scroll triggered popups, compatible with social networks, Gravity Forms, Ninja Forms, Contact form 7, Mailpoet, Mailchimp for WP, Postmatic, etc
|
16 |
* Author: timersys
|
17 |
* Author URI: https://timersys.com
|
30 |
* Public-Facing Functionality
|
31 |
*----------------------------------------------------------------------------*/
|
32 |
|
33 |
+
define( 'SPU_VERSION' , '1.9.3.3' );
|
34 |
define( 'SPU_PLUGIN_DIR' , plugin_dir_path(__FILE__) );
|
35 |
define( 'SPU_PLUGIN_URL' , plugin_dir_url(__FILE__) );
|
36 |
define( 'SPU_PLUGIN_HOOK' , basename( dirname( __FILE__ ) ) . '/' . basename( __FILE__ ) );
|
public/assets/js/public.js
CHANGED
@@ -273,7 +273,7 @@ var SPU_master = function() {
|
|
273 |
tail = button ? button.attr('name')+'='+button.val() : 'button=send',
|
274 |
data = form.serialize()+"&"+tail,
|
275 |
referer = form.find('input[name="_wp_http_referer"]'),
|
276 |
-
urlref = referer ? spuvar.site_url+referer.val() : window.location.href,
|
277 |
action = form.attr('action') ? form.attr('action') : urlref,
|
278 |
url = form.hasClass('mc4wp-form') ? spuvar.site_url +'/' : action,
|
279 |
error_cb = function (data, error, errorThrown){
|
273 |
tail = button ? button.attr('name')+'='+button.val() : 'button=send',
|
274 |
data = form.serialize()+"&"+tail,
|
275 |
referer = form.find('input[name="_wp_http_referer"]'),
|
276 |
+
urlref = referer && referer.val() !== undefined ? spuvar.site_url+referer.val() : window.location.href,
|
277 |
action = form.attr('action') ? form.attr('action') : urlref,
|
278 |
url = form.hasClass('mc4wp-form') ? spuvar.site_url +'/' : action,
|
279 |
error_cb = function (data, error, errorThrown){
|
public/class-social-popup.php
CHANGED
@@ -1,855 +1,855 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Popups.
|
4 |
-
*
|
5 |
-
* @package Popups
|
6 |
-
* @author Damian Logghe <info@timersys.com>
|
7 |
-
* @license GPL-2.0+
|
8 |
-
* @link http://example.com
|
9 |
-
* @copyright 2014 Your Name or Company Name
|
10 |
-
*/
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Public Class of the plugin
|
14 |
-
* @package Popups
|
15 |
-
* @author Damian Logghe <info@timersys.com>
|
16 |
-
*/
|
17 |
-
class SocialPopup {
|
18 |
-
|
19 |
-
/**
|
20 |
-
* Plugin version, used for cache-busting of style and script file references.
|
21 |
-
*
|
22 |
-
* @since 1.0.0
|
23 |
-
*
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
const VERSION = SPU_VERSION;
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Popups to use acrros files
|
30 |
-
*
|
31 |
-
* @since 1.7
|
32 |
-
*
|
33 |
-
* @var string
|
34 |
-
*/
|
35 |
-
const PLUGIN_NAME = 'Popups';
|
36 |
-
|
37 |
-
/**
|
38 |
-
*
|
39 |
-
* The variable name is used as the text domain when internationalizing strings
|
40 |
-
* of text. Its value should match the Text Domain file header in the main
|
41 |
-
* plugin file.
|
42 |
-
*
|
43 |
-
* @since 1.0.0
|
44 |
-
*
|
45 |
-
* @var string
|
46 |
-
*/
|
47 |
-
protected $plugin_slug = 'spu';
|
48 |
-
|
49 |
-
/**
|
50 |
-
* Plugins settings
|
51 |
-
* @var array
|
52 |
-
*/
|
53 |
-
protected $spu_settings = array();
|
54 |
-
|
55 |
-
/**
|
56 |
-
* Instance of this class.
|
57 |
-
*
|
58 |
-
* @since 1.0.0
|
59 |
-
*
|
60 |
-
* @var object
|
61 |
-
*/
|
62 |
-
protected static $instance = null;
|
63 |
-
|
64 |
-
/**
|
65 |
-
* Plugin info accesible everywhere
|
66 |
-
* @var array
|
67 |
-
*
|
68 |
-
* @since 1.0.0
|
69 |
-
*/
|
70 |
-
public $info;
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Initialize the plugin by setting localization and loading public scripts
|
74 |
-
* and styles.
|
75 |
-
*
|
76 |
-
* @since 1.0.0
|
77 |
-
*/
|
78 |
-
private function __construct() {
|
79 |
-
|
80 |
-
// vars
|
81 |
-
$this->info = array(
|
82 |
-
'dir' => SPU_PLUGIN_DIR,
|
83 |
-
'url' => SPU_PLUGIN_URL,
|
84 |
-
'hook' => SPU_PLUGIN_HOOK,
|
85 |
-
'version' => self::VERSION,
|
86 |
-
'upgrade_version' => '1.6.4.3',
|
87 |
-
'wpml_lang' => defined('ICL_LANGUAGE_CODE') ? ICL_LANGUAGE_CODE : '',
|
88 |
-
);
|
89 |
-
// Load plugin text domain
|
90 |
-
$this->load_plugin_textdomain();
|
91 |
-
|
92 |
-
$this->load_dependencies();
|
93 |
-
|
94 |
-
$this->spu_settings = apply_filters('spu/settings_page/opts', get_option( 'spu_settings' ) );
|
95 |
-
//Register cpt
|
96 |
-
add_action( 'init', array( $this, 'register_cpt' ) );
|
97 |
-
|
98 |
-
// Add noindex to cpt
|
99 |
-
add_action('wp_head', array($this, 'add_no_index') );
|
100 |
-
|
101 |
-
// Activate plugin when new blog is added
|
102 |
-
add_action( 'wpmu_new_blog', array( $this, 'activate_new_site' ) );
|
103 |
-
|
104 |
-
// Register public-facing style sheet and JavaScript.
|
105 |
-
add_action( 'wp_enqueue_scripts', array( $this, 'register_scripts' ) );
|
106 |
-
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
|
107 |
-
|
108 |
-
if( empty($this->spu_settings['ajax_mode'] ) ) {
|
109 |
-
//print boxes
|
110 |
-
add_action( 'wp_footer', array( $this, 'print_boxes' ), 1 );
|
111 |
-
}
|
112 |
-
add_action( 'init', array( $this, 'register_spu_ajax' ), 11 );
|
113 |
-
|
114 |
-
//FILTERS
|
115 |
-
add_filter('spu/get_info', array($this, 'get_info'), 1, 1);
|
116 |
-
|
117 |
-
//spu content function
|
118 |
-
add_filter( 'spu/popup/content', 'wptexturize') ;
|
119 |
-
add_filter( 'spu/popup/content', 'convert_smilies' );
|
120 |
-
add_filter( 'spu/popup/content', 'convert_chars' );
|
121 |
-
add_filter( 'spu/popup/content', 'wpautop' );
|
122 |
-
add_filter( 'spu/popup/content', 'shortcode_unautop' );
|
123 |
-
add_filter( 'spu/popup/content', 'do_shortcode', 11 );
|
124 |
-
|
125 |
-
//Register shortcodes
|
126 |
-
add_shortcode( 'spu-facebook', array( $this, 'facebook_shortcode' ) );
|
127 |
-
add_shortcode( 'spu-facebook-page', array( $this, 'facebook_page_shortcode' ) );
|
128 |
-
add_shortcode( 'spu-twitter', array( $this, 'twitter_shortcode' ) );
|
129 |
-
add_shortcode( 'spu-google', array( $this, 'google_shortcode' ) );
|
130 |
-
add_shortcode( 'spu-close', array( $this, 'close_shortcode' ) );
|
131 |
-
add_shortcode( 'spu', array( $this, 'popup_link_shortcode' ) );
|
132 |
-
|
133 |
-
}
|
134 |
-
/**
|
135 |
-
* Return the plugin slug.
|
136 |
-
*
|
137 |
-
* @since 1.0.0
|
138 |
-
*
|
139 |
-
* @return Plugin slug variable.
|
140 |
-
*/
|
141 |
-
public function get_plugin_slug() {
|
142 |
-
return $this->plugin_slug;
|
143 |
-
}
|
144 |
-
|
145 |
-
/**
|
146 |
-
* Return an instance of this class.
|
147 |
-
*
|
148 |
-
* @since 1.0.0
|
149 |
-
*
|
150 |
-
* @return object A single instance of this class.
|
151 |
-
*/
|
152 |
-
public static function get_instance() {
|
153 |
-
|
154 |
-
// If the single instance hasn't been set, set it now.
|
155 |
-
if ( null == self::$instance ) {
|
156 |
-
self::$instance = new self;
|
157 |
-
}
|
158 |
-
|
159 |
-
return self::$instance;
|
160 |
-
}
|
161 |
-
|
162 |
-
/**
|
163 |
-
* Fired when the plugin is activated.
|
164 |
-
*
|
165 |
-
* @since 1.0.0
|
166 |
-
*
|
167 |
-
* @param boolean $network_wide True if WPMU superadmin uses
|
168 |
-
* "Network Activate" action, false if
|
169 |
-
* WPMU is disabled or plugin is
|
170 |
-
* activated on an individual blog.
|
171 |
-
*/
|
172 |
-
public static function activate( $network_wide ) {
|
173 |
-
|
174 |
-
if ( function_exists( 'is_multisite' ) && is_multisite() ) {
|
175 |
-
|
176 |
-
if ( $network_wide ) {
|
177 |
-
|
178 |
-
// Get all blog ids
|
179 |
-
$blog_ids = self::get_blog_ids();
|
180 |
-
|
181 |
-
foreach ( $blog_ids as $blog_id ) {
|
182 |
-
|
183 |
-
switch_to_blog( $blog_id );
|
184 |
-
self::single_activate();
|
185 |
-
}
|
186 |
-
|
187 |
-
restore_current_blog();
|
188 |
-
|
189 |
-
} else {
|
190 |
-
self::single_activate();
|
191 |
-
}
|
192 |
-
|
193 |
-
} else {
|
194 |
-
self::single_activate();
|
195 |
-
}
|
196 |
-
}
|
197 |
-
|
198 |
-
/**
|
199 |
-
* Fired when the plugin is deactivated.
|
200 |
-
*
|
201 |
-
* @since 1.0.0
|
202 |
-
*
|
203 |
-
* @param boolean $network_wide True if WPMU superadmin uses
|
204 |
-
* "Network Deactivate" action, false if
|
205 |
-
* WPMU is disabled or plugin is
|
206 |
-
* deactivated on an individual blog.
|
207 |
-
*/
|
208 |
-
public static function deactivate( $network_wide ) {
|
209 |
-
|
210 |
-
if ( function_exists( 'is_multisite' ) && is_multisite() ) {
|
211 |
-
|
212 |
-
if ( $network_wide ) {
|
213 |
-
|
214 |
-
// Get all blog ids
|
215 |
-
$blog_ids = self::get_blog_ids();
|
216 |
-
|
217 |
-
foreach ( $blog_ids as $blog_id ) {
|
218 |
-
|
219 |
-
switch_to_blog( $blog_id );
|
220 |
-
self::single_deactivate();
|
221 |
-
|
222 |
-
}
|
223 |
-
|
224 |
-
restore_current_blog();
|
225 |
-
|
226 |
-
} else {
|
227 |
-
self::single_deactivate();
|
228 |
-
}
|
229 |
-
|
230 |
-
} else {
|
231 |
-
self::single_deactivate();
|
232 |
-
}
|
233 |
-
|
234 |
-
}
|
235 |
-
|
236 |
-
/**
|
237 |
-
* Fired when a new site is activated with a WPMU environment.
|
238 |
-
*
|
239 |
-
* @since 1.0.0
|
240 |
-
*
|
241 |
-
* @param int $blog_id ID of the new blog.
|
242 |
-
*/
|
243 |
-
public function activate_new_site( $blog_id ) {
|
244 |
-
|
245 |
-
if ( 1 !== did_action( 'wpmu_new_blog' ) ) {
|
246 |
-
return;
|
247 |
-
}
|
248 |
-
|
249 |
-
switch_to_blog( $blog_id );
|
250 |
-
self::single_activate();
|
251 |
-
restore_current_blog();
|
252 |
-
|
253 |
-
}
|
254 |
-
|
255 |
-
/**
|
256 |
-
* Register custom post types
|
257 |
-
* @return void
|
258 |
-
*/
|
259 |
-
function register_cpt() {
|
260 |
-
|
261 |
-
$name = 'Popups v' . SocialPopup::VERSION;
|
262 |
-
if( class_exists('PopupsP') ){
|
263 |
-
$name .= ' - Premium v'. PopupsP::VERSION;
|
264 |
-
}
|
265 |
-
$name = apply_filters( 'spu/display/title', $name );
|
266 |
-
$labels = array(
|
267 |
-
'name' => $name,
|
268 |
-
'singular_name' => _x( 'Popups', 'post type singular name', 'popups' ),
|
269 |
-
'menu_name' => _x( 'Popups', 'admin menu', 'popups' ),
|
270 |
-
'name_admin_bar' => _x( 'Popups', 'add new on admin bar', 'popups' ),
|
271 |
-
'add_new' => _x( 'Add New', 'Popups', 'popups' ),
|
272 |
-
'add_new_item' => __( 'Add New Popups', 'popups' ),
|
273 |
-
'new_item' => __( 'New Popups', 'popups' ),
|
274 |
-
'edit_item' => __( 'Edit Popups', 'popups' ),
|
275 |
-
'view_item' => __( 'View Popups', 'popups' ),
|
276 |
-
'all_items' => __( 'All Popups', 'popups' ),
|
277 |
-
'search_items' => __( 'Search Popups', 'popups' ),
|
278 |
-
'parent_item_colon' => __( 'Parent Popups:', 'popups' ),
|
279 |
-
'not_found' => __( 'No Popups found.', 'popups' ),
|
280 |
-
'not_found_in_trash' => __( 'No Popups found in Trash.', 'popups' )
|
281 |
-
);
|
282 |
-
|
283 |
-
$args = array(
|
284 |
-
'labels' => $labels,
|
285 |
-
'public' => true,
|
286 |
-
'publicly_queryable' => true,
|
287 |
-
'show_ui' => true,
|
288 |
-
'show_in_menu' => true,
|
289 |
-
'query_var' => true,
|
290 |
-
'rewrite' => array( 'slug' => 'spucpt' ),
|
291 |
-
'capability_type' => 'post',
|
292 |
-
'capabilities' => array(
|
293 |
-
'publish_posts' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
294 |
-
'edit_posts' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
295 |
-
'edit_others_posts' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
296 |
-
'delete_posts' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
297 |
-
'delete_others_posts' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
298 |
-
'read_private_posts' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
299 |
-
'edit_post' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
300 |
-
'delete_post' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
301 |
-
'read_post' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
302 |
-
),
|
303 |
-
'has_archive' => true,
|
304 |
-
'hierarchical' => false,
|
305 |
-
'menu_position' => null,
|
306 |
-
'menu_icon' => 'dashicons-share-alt',
|
307 |
-
'supports' => array( 'title', 'editor','author' )
|
308 |
-
);
|
309 |
-
|
310 |
-
register_post_type( 'spucpt', $args );
|
311 |
-
|
312 |
-
}
|
313 |
-
|
314 |
-
|
315 |
-
function add_no_index() {
|
316 |
-
global $post;
|
317 |
-
|
318 |
-
if( get_post_type() == 'spucpt' && is_single() )
|
319 |
-
echo '<meta name="robots" content="noindex, nofollow" />';
|
320 |
-
}
|
321 |
-
|
322 |
-
/**
|
323 |
-
* Get all blog ids of blogs in the current network that are:
|
324 |
-
* - not archived
|
325 |
-
* - not spam
|
326 |
-
* - not deleted
|
327 |
-
*
|
328 |
-
* @since 1.0.0
|
329 |
-
*
|
330 |
-
* @return array|false The blog ids, false if no matches.
|
331 |
-
*/
|
332 |
-
private static function get_blog_ids() {
|
333 |
-
|
334 |
-
global $wpdb;
|
335 |
-
|
336 |
-
// get an array of blog ids
|
337 |
-
$sql = "SELECT blog_id FROM $wpdb->blogs
|
338 |
-
WHERE archived = '0' AND spam = '0'
|
339 |
-
AND deleted = '0'";
|
340 |
-
|
341 |
-
return $wpdb->get_col( $sql );
|
342 |
-
|
343 |
-
}
|
344 |
-
|
345 |
-
/**
|
346 |
-
* Fired for each blog when the plugin is activated.
|
347 |
-
*
|
348 |
-
* @since 1.0.0
|
349 |
-
*/
|
350 |
-
private static function single_activate() {
|
351 |
-
// If there are not popups created let's create a default one
|
352 |
-
global $wpdb;
|
353 |
-
|
354 |
-
$spus = $wpdb->get_results( "SELECT ID FROM $wpdb->posts WHERE post_type='spucpt'");
|
355 |
-
|
356 |
-
|
357 |
-
if ( empty( $spus) ) {
|
358 |
-
$post_content ='<h2 style="text-align:center">Welcome!</h2><p style="text-align:center">This is popup preview that you can fill with any content you want.</p><p style="text-align:center">The plugin include some shortcodes, you can read more about them at the bottom of this page. The main 3 sections to configure the popup are:</p><p>Appearance: Where you edit the look and feel of the popup.<br>Display Rules: Here you choose on which page to display the popup (Set to all by default)<br>Display options: Some important settings about the plugin, being the more important trigger action.</br></p>';
|
359 |
-
$defaults = array(
|
360 |
-
'post_status' => 'draft',
|
361 |
-
'post_type' => 'spucpt',
|
362 |
-
'post_content' => $post_content,
|
363 |
-
'post_title' => 'Popups Example'
|
364 |
-
);
|
365 |
-
wp_insert_post( $defaults, $wp_error );
|
366 |
-
}
|
367 |
-
|
368 |
-
$upgrader = new SocialPopup_Upgrader();
|
369 |
-
$upgrader->upgrade_plugin();
|
370 |
-
|
371 |
-
update_option('spu-version', SPU_VERSION);
|
372 |
-
|
373 |
-
do_action( 'spu/activate' );
|
374 |
-
|
375 |
-
}
|
376 |
-
|
377 |
-
/**
|
378 |
-
* Fired for each blog when the plugin is deactivated.
|
379 |
-
*
|
380 |
-
* @since 1.0.0
|
381 |
-
*/
|
382 |
-
private static function single_deactivate() {
|
383 |
-
// @TODO: Define deactivation functionality here
|
384 |
-
}
|
385 |
-
|
386 |
-
/**
|
387 |
-
* Load the plugin text domain for translation.
|
388 |
-
*
|
389 |
-
* @since 1.0.0
|
390 |
-
*/
|
391 |
-
public function load_plugin_textdomain() {
|
392 |
-
|
393 |
-
$domain = 'popups';
|
394 |
-
$locale = apply_filters( 'plugin_locale', get_locale(), $domain );
|
395 |
-
|
396 |
-
load_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain . '/' . $domain . '-' . $locale . '.mo' );
|
397 |
-
load_plugin_textdomain( $domain, FALSE, dirname( dirname( plugin_basename( __FILE__ ) ) ) . '/languages/' );
|
398 |
-
|
399 |
-
}
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
/**
|
404 |
-
* Register and enqueues public-facing JavaScript files.
|
405 |
-
*
|
406 |
-
* @since 1.0.0
|
407 |
-
*/
|
408 |
-
public function register_scripts() {
|
409 |
-
|
410 |
-
$js_url = plugins_url( 'assets/js/public.js', __FILE__ );
|
411 |
-
$handle = 'spu-public';
|
412 |
-
|
413 |
-
$opts = $this->spu_settings;
|
414 |
-
|
415 |
-
wp_register_style( 'spu-public-css', plugins_url( 'assets/css/public.css', __FILE__ ), array(), self::VERSION );
|
416 |
-
|
417 |
-
wp_register_script( $handle, $js_url, array( 'jquery' ), self::VERSION, true );
|
418 |
-
|
419 |
-
wp_register_script( 'spu-facebook', '//connect.facebook.net/'.get_locale().'/sdk.js#xfbml=1&version=v2.3', array('jquery'), null, FALSE);
|
420 |
-
|
421 |
-
wp_register_script( 'spu-twitter', '//platform.twitter.com/widgets.js', array('jquery'), self::VERSION, FALSE);
|
422 |
-
|
423 |
-
wp_register_script( 'spu-google', '//apis.google.com/js/platform.js', array('jquery'), self::VERSION, FALSE);
|
424 |
-
|
425 |
-
}
|
426 |
-
|
427 |
-
/**
|
428 |
-
* load and print SPU popup when rules matches
|
429 |
-
*
|
430 |
-
* @since 1.0.0
|
431 |
-
*/
|
432 |
-
public function check_for_matches() {
|
433 |
-
|
434 |
-
$spu_matches = false;
|
435 |
-
|
436 |
-
$spu_rules = new Spu_Rules();
|
437 |
-
|
438 |
-
//Grab all popups ids
|
439 |
-
$spu_ids = $this->get_spu_ids();
|
440 |
-
|
441 |
-
if( !empty($spu_ids) ) {
|
442 |
-
foreach ( $spu_ids as $spu ) {
|
443 |
-
$rules = !empty($spu->spu_rules) ? unserialize($spu->spu_rules) : array();
|
444 |
-
$match = $spu_rules->check_rules( $rules );
|
445 |
-
if ( $match ) {
|
446 |
-
$spu_matches[$spu->ID] = $spu->ID;
|
447 |
-
}
|
448 |
-
}
|
449 |
-
// check if we are viewing a popup, and only show that one (preview mode)
|
450 |
-
$viewing_id = defined('DOING_AJAX') && isset($_REQUEST['pid']) ? $_REQUEST['pid'] : get_queried_object_id();
|
451 |
-
foreach ( $spu_ids as $spu ) {
|
452 |
-
if ( $spu->ID == $viewing_id ) {
|
453 |
-
$spu_matches = array();
|
454 |
-
$spu_matches[$spu->ID] = $spu->ID;
|
455 |
-
}
|
456 |
-
}
|
457 |
-
}
|
458 |
-
return apply_filters( 'spu/check_for_matches', $spu_matches, $spu_ids, $spu_rules );
|
459 |
-
}
|
460 |
-
|
461 |
-
/**
|
462 |
-
* Return array of popups ids
|
463 |
-
*/
|
464 |
-
function get_spu_ids() {
|
465 |
-
global $wpdb;
|
466 |
-
// IF wpml is active and spucpt is translated get correct ids for language
|
467 |
-
if( function_exists('icl_object_id') ) {
|
468 |
-
$spu_ids = $this->get_wpml_ids();
|
469 |
-
if(!empty($spu_ids)) {
|
470 |
-
return $spu_ids;
|
471 |
-
}
|
472 |
-
}
|
473 |
-
// IF polylang is active and spucpt is translated get correct ids for language
|
474 |
-
if( function_exists('pll_current_language') ) {
|
475 |
-
$spu_ids = $this->get_polylang_ids();
|
476 |
-
if(!empty($spu_ids)) {
|
477 |
-
return $spu_ids;
|
478 |
-
}
|
479 |
-
}
|
480 |
-
$post_status = isset( $_REQUEST['is_preview'] ) && $_REQUEST['is_preview'] == '1' ? "AND (post_status='publish' OR post_status='draft')" : "AND post_status='publish'";
|
481 |
-
return $wpdb->get_results( "SELECT ID, post_content, MAX(CASE WHEN pm1.meta_key = 'spu_rules' then pm1.meta_value ELSE NULL END) as spu_rules,
|
482 |
-
MAX(CASE WHEN pm1.meta_key = 'spu_ab_parent' then pm1.meta_value ELSE NULL END) as spu_ab_parent
|
483 |
-
FROM $wpdb->posts p LEFT JOIN $wpdb->postmeta pm1 ON ( pm1.post_id = p.ID) WHERE post_type='spucpt' {$post_status} GROUP BY p.ID");
|
484 |
-
}
|
485 |
-
|
486 |
-
/**
|
487 |
-
* Function that enqueue all needed scritps and styles
|
488 |
-
* @since 1.3
|
489 |
-
*/
|
490 |
-
public function enqueue_scripts() {
|
491 |
-
$handle = 'spu-public';
|
492 |
-
|
493 |
-
$opts = $this->spu_settings;
|
494 |
-
|
495 |
-
wp_enqueue_script($handle);
|
496 |
-
wp_enqueue_style('spu-public-css');
|
497 |
-
wp_localize_script( $handle, 'spuvar',
|
498 |
-
array(
|
499 |
-
'is_admin' => current_user_can( apply_filters( 'spu/capabilities/testmode', 'administrator' ) ),
|
500 |
-
'disable_style' => isset( $this->spu_settings['shortcodes_style'] ) ? esc_attr( $this->spu_settings['shortcodes_style'] ) : '',
|
501 |
-
'ajax_mode' => isset( $this->spu_settings['ajax_mode'] ) ? esc_attr( $this->spu_settings['ajax_mode'] ) :'',
|
502 |
-
'ajax_url' => admin_url('admin-ajax.php'),
|
503 |
-
'ajax_mode_url' => site_url('/?spu_action=spu_load&lang='.$this->info['wpml_lang']),
|
504 |
-
'pid' => get_queried_object_id(),
|
505 |
-
'is_front_page' => is_front_page(),
|
506 |
-
'is_category' => is_category(),
|
507 |
-
'site_url' => site_url(),
|
508 |
-
'is_archive' => is_archive(),
|
509 |
-
'is_search' => is_search(),
|
510 |
-
'is_preview' => (get_post_type() == 'spucpt'),
|
511 |
-
'seconds_confirmation_close' => apply_filters( 'spu/spuvar/seconds_confirmation_close', 5 ),
|
512 |
-
)
|
513 |
-
);
|
514 |
-
$this->enqueue_social_shortcodes();
|
515 |
-
}
|
516 |
-
|
517 |
-
/**
|
518 |
-
* Function that runs the different checks to see if social is enqueue or not
|
519 |
-
* @since 1.3
|
520 |
-
*/
|
521 |
-
private function enqueue_social_shortcodes(){
|
522 |
-
global $wpdb,$spuvar_social;
|
523 |
-
|
524 |
-
$opts = $this->spu_settings;
|
525 |
-
$spuvar_social = array();
|
526 |
-
|
527 |
-
$handle = 'spu-public';
|
528 |
-
|
529 |
-
// Check if any popup have facebook, then enqueue js
|
530 |
-
if( $fb = $wpdb->get_var( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = 'spu_fb' " ) ) {
|
531 |
-
// Check if defined or remove js in options
|
532 |
-
if( !defined( 'SPU_UNLOAD_FB_JS') && empty( $opts['facebook'] ) )
|
533 |
-
wp_enqueue_script( 'spu-facebook');
|
534 |
-
|
535 |
-
$spuvar_social['facebook'] = true;
|
536 |
-
|
537 |
-
}
|
538 |
-
|
539 |
-
if( $fb = $wpdb->get_var( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key ='spu_tw' " ) ) {
|
540 |
-
if( ! defined( 'SPU_UNLOAD_TW_JS') && empty( $opts['twitter'] ) )
|
541 |
-
wp_enqueue_script( 'spu-twitter');
|
542 |
-
|
543 |
-
$spuvar_social['twitter'] = true;
|
544 |
-
|
545 |
-
}
|
546 |
-
|
547 |
-
if( $fb = $wpdb->get_var( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key ='spu_google' " ) ) {
|
548 |
-
if( ! defined( 'SPU_UNLOAD_GO_JS') && empty( $opts['google'] ) )
|
549 |
-
wp_enqueue_script( 'spu-google');
|
550 |
-
|
551 |
-
$spuvar_social['google'] = true;
|
552 |
-
}
|
553 |
-
wp_localize_script( $handle, 'spuvar_social', $spuvar_social);
|
554 |
-
|
555 |
-
|
556 |
-
//also include gravity forms if needed
|
557 |
-
if( $gf = $wpdb->get_var( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key ='spu_gravity' " ) ) {
|
558 |
-
if( function_exists('gravity_form_enqueue_scripts'))
|
559 |
-
gravity_form_enqueue_scripts($gf, true);
|
560 |
-
}
|
561 |
-
}
|
562 |
-
|
563 |
-
/**
|
564 |
-
* [facebook_shortcode description]
|
565 |
-
*
|
566 |
-
* @param $atts
|
567 |
-
* @param $content
|
568 |
-
*
|
569 |
-
* @internal param $ $content [description] $content [description]
|
570 |
-
* @internal param $atts [description] $atts [description]
|
571 |
-
* @return string [description]
|
572 |
-
*/
|
573 |
-
function facebook_shortcode( $atts, $content ) {
|
574 |
-
|
575 |
-
extract( shortcode_atts( array(
|
576 |
-
'href' => apply_filters( 'spu/social/fb_href', 'https://www.facebook.com/pages/Timersys/146687622031640' ),
|
577 |
-
'layout' => 'button_count', // standard, box_count, button_count, button
|
578 |
-
'show_faces' => 'false', // true
|
579 |
-
'share' => 'false', // true
|
580 |
-
'action' => 'like', // recommend
|
581 |
-
'width' => '',
|
582 |
-
), $atts ) );
|
583 |
-
|
584 |
-
$layout = strtolower( trim( $layout ) );
|
585 |
-
$action = strtolower( trim( $action ) );
|
586 |
-
|
587 |
-
// to avoid problems
|
588 |
-
if( 'standard' != $layout && 'box_count' != $layout && 'button_count' != $layout && 'button' != $layout ) {
|
589 |
-
$layout = 'button_count';
|
590 |
-
}
|
591 |
-
if( 'like' != $action && 'recommend' != $action ) {
|
592 |
-
$action = 'like';
|
593 |
-
}
|
594 |
-
|
595 |
-
return '<div class="spu-facebook spu-shortcode"><div class="fb-like" data-width="'.strtolower( trim( $width ) ).'" data-href="'. $href .'" data-layout="'.$layout.'" data-action="'.$action.'" data-show-faces="'.strtolower( trim( $show_faces ) ).'" data-share="'.strtolower( trim( $share ) ).'"></div></div>';
|
596 |
-
|
597 |
-
}
|
598 |
-
|
599 |
-
/**
|
600 |
-
* Shortcode for facebook page
|
601 |
-
*
|
602 |
-
* @param $atts
|
603 |
-
* @param $content
|
604 |
-
*
|
605 |
-
* @internal param $ $content [description] $content [description]
|
606 |
-
* @internal param $atts [description] $atts [description]
|
607 |
-
* @return string [description]
|
608 |
-
*/
|
609 |
-
function facebook_page_shortcode( $atts, $content ) {
|
610 |
-
|
611 |
-
extract( shortcode_atts( array(
|
612 |
-
'href' => apply_filters( 'spu/social/fb_href', 'https://www.facebook.com/pages/Timersys/146687622031640' ),
|
613 |
-
'name' => apply_filters( 'spu/social/fb_name', 'Timersys' ),
|
614 |
-
'show_faces' => 'true', // false
|
615 |
-
'hide_cover' => 'false', // true
|
616 |
-
'width' => '500',
|
617 |
-
), $atts ) );
|
618 |
-
|
619 |
-
return '<div class="spu-facebook-page"><div class="fb-page" data-href="'. $href .'" data-width="'.strtolower( trim( $width ) ).'" data-hide-cover="'.strtolower( trim( $hide_cover ) ).'" data-show-facepile="'.strtolower( trim( $show_faces ) ).'" data-show-posts="false"><div class="fb-xfbml-parse-ignore"><blockquote cite="'. $href .'"><a href="'. $href .'">'.esc_attr( $name ).'</a></blockquote></div></div></div>';
|
620 |
-
|
621 |
-
}
|
622 |
-
|
623 |
-
/**
|
624 |
-
* [twitter_shortcode description]
|
625 |
-
* @param string $content [description]
|
626 |
-
* @param array $atts [description]
|
627 |
-
* @return string [description]
|
628 |
-
*/
|
629 |
-
function twitter_shortcode( $atts, $content ) {
|
630 |
-
|
631 |
-
extract( shortcode_atts( array(
|
632 |
-
'user' => apply_filters( 'spu/social/tw_user', 'chifliiiii' ),
|
633 |
-
'show_count' => 'true', // false
|
634 |
-
'size' => '', // large
|
635 |
-
'lang' => '',
|
636 |
-
), $atts ) );
|
637 |
-
|
638 |
-
return '<div class="spu-twitter spu-shortcode"><a href="https://twitter.com/'.$user.'" class="twitter-follow-button" data-show-count="'.strtolower( trim( $show_count ) ).'" data-size="'.strtolower( trim( $size ) ).'" data-lang="'.$lang.'"></a></div>';
|
639 |
-
|
640 |
-
}
|
641 |
-
|
642 |
-
/**
|
643 |
-
* [google_shortcode description]
|
644 |
-
* @param [type] $atts [description]
|
645 |
-
* @param [type] $content [description]
|
646 |
-
* @return string [description]
|
647 |
-
*/
|
648 |
-
function google_shortcode( $atts, $content ) {
|
649 |
-
extract( shortcode_atts( array(
|
650 |
-
'type' => 'g-plusone', //small standard tall
|
651 |
-
'size' => 'medium', //small standard tall
|
652 |
-
'annotation' => 'bubble', //inline none
|
653 |
-
'url' => apply_filters( 'spu/social/gp_url', 'https://plus.google.com/u/0/103508783120806246698/posts' ),
|
654 |
-
), $atts ) );
|
655 |
-
|
656 |
-
$size = strtolower( trim( $size ) );
|
657 |
-
$annotation = strtolower( trim( $annotation ) );
|
658 |
-
|
659 |
-
//to avoid problems
|
660 |
-
if( 'medium' != $size && 'small' != $size && 'standard' != $size && 'tall' != $size ) {
|
661 |
-
$size = 'medium';
|
662 |
-
}
|
663 |
-
if( 'bubble' != $annotation && 'inline' != $annotation && 'none' != $annotation ) {
|
664 |
-
$annotation = 'bubble';
|
665 |
-
}
|
666 |
-
if( 'g-plusone' != $type && 'g-follow' != $type ) {
|
667 |
-
$type = 'g-plusone';
|
668 |
-
}
|
669 |
-
|
670 |
-
return '<div class="spu-google spu-shortcode"><div class="'.$type.'" data-callback="googleCB" data-onendinteraction="closeGoogle" data-recommendations="false" data-annotation="'.$annotation.'" data-size="'.$size.'" data-href="'.$url.'"></div></div>';
|
671 |
-
|
672 |
-
}
|
673 |
-
|
674 |
-
function close_shortcode( $atts, $content ) {
|
675 |
-
extract( shortcode_atts( array(
|
676 |
-
'class' => 'button-primary btn-primary',
|
677 |
-
'text' => 'Close',
|
678 |
-
'conversion' => false
|
679 |
-
), $atts ) );
|
680 |
-
$button_class = ! $conversion || $conversion == 'false' ? 'spu-close-popup ' : 'spu-close-convert ';
|
681 |
-
|
682 |
-
return '<button class="'.$button_class.$class.'">'.$text.'</button>';
|
683 |
-
}
|
684 |
-
|
685 |
-
/**
|
686 |
-
* Returns plugin info
|
687 |
-
* @param string $i info name
|
688 |
-
* @return mixed one all or none
|
689 |
-
*/
|
690 |
-
function get_info( $i )
|
691 |
-
{
|
692 |
-
// vars
|
693 |
-
$return = false;
|
694 |
-
|
695 |
-
|
696 |
-
// specific
|
697 |
-
if( isset($this->info[ $i ]) )
|
698 |
-
{
|
699 |
-
$return = $this->info[ $i ];
|
700 |
-
}
|
701 |
-
|
702 |
-
|
703 |
-
// all
|
704 |
-
if( $i == 'all' )
|
705 |
-
{
|
706 |
-
$return = $this->info;
|
707 |
-
}
|
708 |
-
|
709 |
-
|
710 |
-
// return
|
711 |
-
return $return;
|
712 |
-
}
|
713 |
-
|
714 |
-
/**
|
715 |
-
* Print the actual popup
|
716 |
-
* @return mixed echo popup html
|
717 |
-
*/
|
718 |
-
function print_boxes( ) {
|
719 |
-
|
720 |
-
do_action('spu/print_boxes');
|
721 |
-
|
722 |
-
$spu_matches = $this->check_for_matches();
|
723 |
-
|
724 |
-
//if we have matches continue
|
725 |
-
if( ! empty( $spu_matches) ) {
|
726 |
-
|
727 |
-
foreach ($spu_matches as $spu_id ) {
|
728 |
-
|
729 |
-
include( 'views/popup.php');
|
730 |
-
|
731 |
-
} //endforeach
|
732 |
-
echo '<div id="fb-root" class=" fb_reset"></div>';
|
733 |
-
|
734 |
-
}
|
735 |
-
|
736 |
-
}
|
737 |
-
|
738 |
-
/**
|
739 |
-
* Return plugin settings
|
740 |
-
* @return array
|
741 |
-
* @since 1.1
|
742 |
-
*/
|
743 |
-
function get_settings() {
|
744 |
-
|
745 |
-
return $this->spu_settings;
|
746 |
-
|
747 |
-
}
|
748 |
-
|
749 |
-
/**
|
750 |
-
* Load necessary files
|
751 |
-
* @since 1.2.3
|
752 |
-
*/
|
753 |
-
private function load_dependencies(){
|
754 |
-
// Include Helper class
|
755 |
-
require_once( SPU_PLUGIN_DIR . 'includes/class-spu-helper.php' );
|
756 |
-
// Include Rules Class
|
757 |
-
require_once( SPU_PLUGIN_DIR . 'public/includes/class-spu-rules.php' );
|
758 |
-
}
|
759 |
-
|
760 |
-
/**
|
761 |
-
* Custom ajax hook. Wp_ajax won't let us do_shortcode for example
|
762 |
-
* @return mixed Prints all spus
|
763 |
-
*/
|
764 |
-
function register_spu_ajax() {
|
765 |
-
|
766 |
-
if ( empty( $_REQUEST['spu_action'] ) || $_REQUEST['spu_action'] != 'spu_load' )
|
767 |
-
return;
|
768 |
-
|
769 |
-
define( 'DOING_AJAX', TRUE );
|
770 |
-
|
771 |
-
$this->print_boxes();
|
772 |
-
|
773 |
-
die();
|
774 |
-
}
|
775 |
-
|
776 |
-
|
777 |
-
/**
|
778 |
-
* Return popups for current language
|
779 |
-
* @return bool | array of ids
|
780 |
-
*/
|
781 |
-
protected function get_polylang_ids( ) {
|
782 |
-
global $wpdb;
|
783 |
-
$post_status = isset( $_REQUEST['is_preview'] ) && $_REQUEST['is_preview'] == '1' ? "AND (post_status='publish' OR post_status='draft')" : "AND post_status='publish'";
|
784 |
-
|
785 |
-
$sql = "SELECT description
|
786 |
-
FROM $wpdb->posts p
|
787 |
-
LEFT JOIN $wpdb->term_relationships as tr ON p.ID = tr.object_id
|
788 |
-
LEFT JOIN $wpdb->term_taxonomy as tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
|
789 |
-
WHERE post_type='spucpt' {$post_status} AND tt.taxonomy = 'post_translations'
|
790 |
-
GROUP BY p.ID";
|
791 |
-
|
792 |
-
$ids = array();
|
793 |
-
$popups = $wpdb->get_results( $sql );
|
794 |
-
if( !empty($popups) ) {
|
795 |
-
$current = pll_current_language();
|
796 |
-
foreach ($popups as $p) {
|
797 |
-
$langs = unserialize($p->description);
|
798 |
-
|
799 |
-
if( isset($langs[$current]) )
|
800 |
-
$ids[] = $langs[$current];
|
801 |
-
}
|
802 |
-
}
|
803 |
-
|
804 |
-
if( !empty($ids)){
|
805 |
-
$sql = "SELECT DISTINCT ID, post_content,
|
806 |
-
MAX(CASE WHEN pm1.meta_key = 'spu_rules' then pm1.meta_value ELSE NULL END) as spu_rules,
|
807 |
-
MAX(CASE WHEN pm1.meta_key = 'spu_ab_parent' then pm1.meta_value ELSE NULL END) as spu_ab_parent
|
808 |
-
FROM $wpdb->posts p
|
809 |
-
LEFT JOIN $wpdb->postmeta pm1 ON ( pm1.post_id = p.ID)
|
810 |
-
WHERE post_type='spucpt' {$post_status} AND ID IN (".implode(',',array_unique($ids)).")
|
811 |
-
GROUP BY p.ID";
|
812 |
-
return $wpdb->get_results( $sql );
|
813 |
-
}
|
814 |
-
|
815 |
-
return false;
|
816 |
-
}
|
817 |
-
/**
|
818 |
-
* Return popups for current language
|
819 |
-
* @return bool | array of ids
|
820 |
-
*/
|
821 |
-
protected function get_wpml_ids( ) {
|
822 |
-
global $wpdb;
|
823 |
-
$wpml_settings = get_option( 'icl_sitepress_settings', true);
|
824 |
-
|
825 |
-
if ( ! empty( $wpml_settings['custom_posts_sync_option']['spucpt'] ) ) {
|
826 |
-
$post_status = isset( $_REQUEST['is_preview'] ) && $_REQUEST['is_preview'] == '1' ? "AND (post_status='publish' OR post_status='draft')" : "AND post_status='publish'";
|
827 |
-
$lang_code = isset( $_GET['lang'] ) ? $_GET['lang'] : ICL_LANGUAGE_CODE;
|
828 |
-
$sql = "SELECT DISTINCT ID, post_content,
|
829 |
-
MAX(CASE WHEN pm1.meta_key = 'spu_rules' then pm1.meta_value ELSE NULL END) as spu_rules,
|
830 |
-
MAX(CASE WHEN pm1.meta_key = 'spu_ab_parent' then pm1.meta_value ELSE NULL END) as spu_ab_parent
|
831 |
-
FROM $wpdb->posts p
|
832 |
-
LEFT JOIN $wpdb->postmeta pm1 ON ( pm1.post_id = p.ID)
|
833 |
-
LEFT JOIN {$wpdb->prefix}icl_translations as b ON p.ID = b.element_id
|
834 |
-
WHERE post_type='spucpt' {$post_status} AND b.language_code = '" . esc_sql( $lang_code ) . "'
|
835 |
-
GROUP BY p.ID";
|
836 |
-
|
837 |
-
$ids = $wpdb->get_results( $sql );
|
838 |
-
if( !empty($ids) )
|
839 |
-
return $ids;
|
840 |
-
}
|
841 |
-
|
842 |
-
return false;
|
843 |
-
}
|
844 |
-
|
845 |
-
/**
|
846 |
-
* Popup button
|
847 |
-
* @param [type] $atts [description]
|
848 |
-
* @param [type] $content [description]
|
849 |
-
* @return [type] [description]
|
850 |
-
*/
|
851 |
-
public function popup_link_shortcode($atts, $content ) {
|
852 |
-
return '<a href="#" class="spu-open-'.$atts['popup'].'">'.do_shortcode( $content ).'</a>';
|
853 |
-
}
|
854 |
-
|
855 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Popups.
|
4 |
+
*
|
5 |
+
* @package Popups
|
6 |
+
* @author Damian Logghe <info@timersys.com>
|
7 |
+
* @license GPL-2.0+
|
8 |
+
* @link http://example.com
|
9 |
+
* @copyright 2014 Your Name or Company Name
|
10 |
+
*/
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Public Class of the plugin
|
14 |
+
* @package Popups
|
15 |
+
* @author Damian Logghe <info@timersys.com>
|
16 |
+
*/
|
17 |
+
class SocialPopup {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Plugin version, used for cache-busting of style and script file references.
|
21 |
+
*
|
22 |
+
* @since 1.0.0
|
23 |
+
*
|
24 |
+
* @var string
|
25 |
+
*/
|
26 |
+
const VERSION = SPU_VERSION;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Popups to use acrros files
|
30 |
+
*
|
31 |
+
* @since 1.7
|
32 |
+
*
|
33 |
+
* @var string
|
34 |
+
*/
|
35 |
+
const PLUGIN_NAME = 'Popups';
|
36 |
+
|
37 |
+
/**
|
38 |
+
*
|
39 |
+
* The variable name is used as the text domain when internationalizing strings
|
40 |
+
* of text. Its value should match the Text Domain file header in the main
|
41 |
+
* plugin file.
|
42 |
+
*
|
43 |
+
* @since 1.0.0
|
44 |
+
*
|
45 |
+
* @var string
|
46 |
+
*/
|
47 |
+
protected $plugin_slug = 'spu';
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Plugins settings
|
51 |
+
* @var array
|
52 |
+
*/
|
53 |
+
protected $spu_settings = array();
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Instance of this class.
|
57 |
+
*
|
58 |
+
* @since 1.0.0
|
59 |
+
*
|
60 |
+
* @var object
|
61 |
+
*/
|
62 |
+
protected static $instance = null;
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Plugin info accesible everywhere
|
66 |
+
* @var array
|
67 |
+
*
|
68 |
+
* @since 1.0.0
|
69 |
+
*/
|
70 |
+
public $info;
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Initialize the plugin by setting localization and loading public scripts
|
74 |
+
* and styles.
|
75 |
+
*
|
76 |
+
* @since 1.0.0
|
77 |
+
*/
|
78 |
+
private function __construct() {
|
79 |
+
|
80 |
+
// vars
|
81 |
+
$this->info = array(
|
82 |
+
'dir' => SPU_PLUGIN_DIR,
|
83 |
+
'url' => SPU_PLUGIN_URL,
|
84 |
+
'hook' => SPU_PLUGIN_HOOK,
|
85 |
+
'version' => self::VERSION,
|
86 |
+
'upgrade_version' => '1.6.4.3',
|
87 |
+
'wpml_lang' => defined('ICL_LANGUAGE_CODE') ? ICL_LANGUAGE_CODE : '',
|
88 |
+
);
|
89 |
+
// Load plugin text domain
|
90 |
+
$this->load_plugin_textdomain();
|
91 |
+
|
92 |
+
$this->load_dependencies();
|
93 |
+
|
94 |
+
$this->spu_settings = apply_filters('spu/settings_page/opts', get_option( 'spu_settings' ) );
|
95 |
+
//Register cpt
|
96 |
+
add_action( 'init', array( $this, 'register_cpt' ) );
|
97 |
+
|
98 |
+
// Add noindex to cpt
|
99 |
+
add_action('wp_head', array($this, 'add_no_index') );
|
100 |
+
|
101 |
+
// Activate plugin when new blog is added
|
102 |
+
add_action( 'wpmu_new_blog', array( $this, 'activate_new_site' ) );
|
103 |
+
|
104 |
+
// Register public-facing style sheet and JavaScript.
|
105 |
+
add_action( 'wp_enqueue_scripts', array( $this, 'register_scripts' ) );
|
106 |
+
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
|
107 |
+
|
108 |
+
if( empty($this->spu_settings['ajax_mode'] ) ) {
|
109 |
+
//print boxes
|
110 |
+
add_action( 'wp_footer', array( $this, 'print_boxes' ), 1 );
|
111 |
+
}
|
112 |
+
add_action( 'init', array( $this, 'register_spu_ajax' ), 11 );
|
113 |
+
|
114 |
+
//FILTERS
|
115 |
+
add_filter('spu/get_info', array($this, 'get_info'), 1, 1);
|
116 |
+
|
117 |
+
//spu content function
|
118 |
+
add_filter( 'spu/popup/content', 'wptexturize') ;
|
119 |
+
add_filter( 'spu/popup/content', 'convert_smilies' );
|
120 |
+
add_filter( 'spu/popup/content', 'convert_chars' );
|
121 |
+
add_filter( 'spu/popup/content', 'wpautop' );
|
122 |
+
add_filter( 'spu/popup/content', 'shortcode_unautop' );
|
123 |
+
add_filter( 'spu/popup/content', 'do_shortcode', 11 );
|
124 |
+
|
125 |
+
//Register shortcodes
|
126 |
+
add_shortcode( 'spu-facebook', array( $this, 'facebook_shortcode' ) );
|
127 |
+
add_shortcode( 'spu-facebook-page', array( $this, 'facebook_page_shortcode' ) );
|
128 |
+
add_shortcode( 'spu-twitter', array( $this, 'twitter_shortcode' ) );
|
129 |
+
add_shortcode( 'spu-google', array( $this, 'google_shortcode' ) );
|
130 |
+
add_shortcode( 'spu-close', array( $this, 'close_shortcode' ) );
|
131 |
+
add_shortcode( 'spu', array( $this, 'popup_link_shortcode' ) );
|
132 |
+
|
133 |
+
}
|
134 |
+
/**
|
135 |
+
* Return the plugin slug.
|
136 |
+
*
|
137 |
+
* @since 1.0.0
|
138 |
+
*
|
139 |
+
* @return Plugin slug variable.
|
140 |
+
*/
|
141 |
+
public function get_plugin_slug() {
|
142 |
+
return $this->plugin_slug;
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Return an instance of this class.
|
147 |
+
*
|
148 |
+
* @since 1.0.0
|
149 |
+
*
|
150 |
+
* @return object A single instance of this class.
|
151 |
+
*/
|
152 |
+
public static function get_instance() {
|
153 |
+
|
154 |
+
// If the single instance hasn't been set, set it now.
|
155 |
+
if ( null == self::$instance ) {
|
156 |
+
self::$instance = new self;
|
157 |
+
}
|
158 |
+
|
159 |
+
return self::$instance;
|
160 |
+
}
|
161 |
+
|
162 |
+
/**
|
163 |
+
* Fired when the plugin is activated.
|
164 |
+
*
|
165 |
+
* @since 1.0.0
|
166 |
+
*
|
167 |
+
* @param boolean $network_wide True if WPMU superadmin uses
|
168 |
+
* "Network Activate" action, false if
|
169 |
+
* WPMU is disabled or plugin is
|
170 |
+
* activated on an individual blog.
|
171 |
+
*/
|
172 |
+
public static function activate( $network_wide ) {
|
173 |
+
|
174 |
+
if ( function_exists( 'is_multisite' ) && is_multisite() ) {
|
175 |
+
|
176 |
+
if ( $network_wide ) {
|
177 |
+
|
178 |
+
// Get all blog ids
|
179 |
+
$blog_ids = self::get_blog_ids();
|
180 |
+
|
181 |
+
foreach ( $blog_ids as $blog_id ) {
|
182 |
+
|
183 |
+
switch_to_blog( $blog_id );
|
184 |
+
self::single_activate();
|
185 |
+
}
|
186 |
+
|
187 |
+
restore_current_blog();
|
188 |
+
|
189 |
+
} else {
|
190 |
+
self::single_activate();
|
191 |
+
}
|
192 |
+
|
193 |
+
} else {
|
194 |
+
self::single_activate();
|
195 |
+
}
|
196 |
+
}
|
197 |
+
|
198 |
+
/**
|
199 |
+
* Fired when the plugin is deactivated.
|
200 |
+
*
|
201 |
+
* @since 1.0.0
|
202 |
+
*
|
203 |
+
* @param boolean $network_wide True if WPMU superadmin uses
|
204 |
+
* "Network Deactivate" action, false if
|
205 |
+
* WPMU is disabled or plugin is
|
206 |
+
* deactivated on an individual blog.
|
207 |
+
*/
|
208 |
+
public static function deactivate( $network_wide ) {
|
209 |
+
|
210 |
+
if ( function_exists( 'is_multisite' ) && is_multisite() ) {
|
211 |
+
|
212 |
+
if ( $network_wide ) {
|
213 |
+
|
214 |
+
// Get all blog ids
|
215 |
+
$blog_ids = self::get_blog_ids();
|
216 |
+
|
217 |
+
foreach ( $blog_ids as $blog_id ) {
|
218 |
+
|
219 |
+
switch_to_blog( $blog_id );
|
220 |
+
self::single_deactivate();
|
221 |
+
|
222 |
+
}
|
223 |
+
|
224 |
+
restore_current_blog();
|
225 |
+
|
226 |
+
} else {
|
227 |
+
self::single_deactivate();
|
228 |
+
}
|
229 |
+
|
230 |
+
} else {
|
231 |
+
self::single_deactivate();
|
232 |
+
}
|
233 |
+
|
234 |
+
}
|
235 |
+
|
236 |
+
/**
|
237 |
+
* Fired when a new site is activated with a WPMU environment.
|
238 |
+
*
|
239 |
+
* @since 1.0.0
|
240 |
+
*
|
241 |
+
* @param int $blog_id ID of the new blog.
|
242 |
+
*/
|
243 |
+
public function activate_new_site( $blog_id ) {
|
244 |
+
|
245 |
+
if ( 1 !== did_action( 'wpmu_new_blog' ) ) {
|
246 |
+
return;
|
247 |
+
}
|
248 |
+
|
249 |
+
switch_to_blog( $blog_id );
|
250 |
+
self::single_activate();
|
251 |
+
restore_current_blog();
|
252 |
+
|
253 |
+
}
|
254 |
+
|
255 |
+
/**
|
256 |
+
* Register custom post types
|
257 |
+
* @return void
|
258 |
+
*/
|
259 |
+
function register_cpt() {
|
260 |
+
|
261 |
+
$name = 'Popups v' . SocialPopup::VERSION;
|
262 |
+
if( class_exists('PopupsP') ){
|
263 |
+
$name .= ' - Premium v'. PopupsP::VERSION;
|
264 |
+
}
|
265 |
+
$name = apply_filters( 'spu/display/title', $name );
|
266 |
+
$labels = array(
|
267 |
+
'name' => $name,
|
268 |
+
'singular_name' => _x( 'Popups', 'post type singular name', 'popups' ),
|
269 |
+
'menu_name' => _x( 'Popups', 'admin menu', 'popups' ),
|
270 |
+
'name_admin_bar' => _x( 'Popups', 'add new on admin bar', 'popups' ),
|
271 |
+
'add_new' => _x( 'Add New', 'Popups', 'popups' ),
|
272 |
+
'add_new_item' => __( 'Add New Popups', 'popups' ),
|
273 |
+
'new_item' => __( 'New Popups', 'popups' ),
|
274 |
+
'edit_item' => __( 'Edit Popups', 'popups' ),
|
275 |
+
'view_item' => __( 'View Popups', 'popups' ),
|
276 |
+
'all_items' => __( 'All Popups', 'popups' ),
|
277 |
+
'search_items' => __( 'Search Popups', 'popups' ),
|
278 |
+
'parent_item_colon' => __( 'Parent Popups:', 'popups' ),
|
279 |
+
'not_found' => __( 'No Popups found.', 'popups' ),
|
280 |
+
'not_found_in_trash' => __( 'No Popups found in Trash.', 'popups' )
|
281 |
+
);
|
282 |
+
|
283 |
+
$args = array(
|
284 |
+
'labels' => $labels,
|
285 |
+
'public' => true,
|
286 |
+
'publicly_queryable' => true,
|
287 |
+
'show_ui' => true,
|
288 |
+
'show_in_menu' => true,
|
289 |
+
'query_var' => true,
|
290 |
+
'rewrite' => array( 'slug' => 'spucpt' ),
|
291 |
+
'capability_type' => 'post',
|
292 |
+
'capabilities' => array(
|
293 |
+
'publish_posts' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
294 |
+
'edit_posts' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
295 |
+
'edit_others_posts' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
296 |
+
'delete_posts' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
297 |
+
'delete_others_posts' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
298 |
+
'read_private_posts' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
299 |
+
'edit_post' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
300 |
+
'delete_post' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
301 |
+
'read_post' => apply_filters( 'spu/settings_page/roles', 'manage_options'),
|
302 |
+
),
|
303 |
+
'has_archive' => true,
|
304 |
+
'hierarchical' => false,
|
305 |
+
'menu_position' => null,
|
306 |
+
'menu_icon' => 'dashicons-share-alt',
|
307 |
+
'supports' => array( 'title', 'editor','author' )
|
308 |
+
);
|
309 |
+
|
310 |
+
register_post_type( 'spucpt', $args );
|
311 |
+
|
312 |
+
}
|
313 |
+
|
314 |
+
|
315 |
+
function add_no_index() {
|
316 |
+
global $post;
|
317 |
+
|
318 |
+
if( get_post_type() == 'spucpt' && is_single() )
|
319 |
+
echo '<meta name="robots" content="noindex, nofollow" />';
|
320 |
+
}
|
321 |
+
|
322 |
+
/**
|
323 |
+
* Get all blog ids of blogs in the current network that are:
|
324 |
+
* - not archived
|
325 |
+
* - not spam
|
326 |
+
* - not deleted
|
327 |
+
*
|
328 |
+
* @since 1.0.0
|
329 |
+
*
|
330 |
+
* @return array|false The blog ids, false if no matches.
|
331 |
+
*/
|
332 |
+
private static function get_blog_ids() {
|
333 |
+
|
334 |
+
global $wpdb;
|
335 |
+
|
336 |
+
// get an array of blog ids
|
337 |
+
$sql = "SELECT blog_id FROM $wpdb->blogs
|
338 |
+
WHERE archived = '0' AND spam = '0'
|
339 |
+
AND deleted = '0'";
|
340 |
+
|
341 |
+
return $wpdb->get_col( $sql );
|
342 |
+
|
343 |
+
}
|
344 |
+
|
345 |
+
/**
|
346 |
+
* Fired for each blog when the plugin is activated.
|
347 |
+
*
|
348 |
+
* @since 1.0.0
|
349 |
+
*/
|
350 |
+
private static function single_activate() {
|
351 |
+
// If there are not popups created let's create a default one
|
352 |
+
global $wpdb;
|
353 |
+
|
354 |
+
$spus = $wpdb->get_results( "SELECT ID FROM $wpdb->posts WHERE post_type='spucpt'");
|
355 |
+
|
356 |
+
|
357 |
+
if ( empty( $spus) ) {
|
358 |
+
$post_content ='<h2 style="text-align:center">Welcome!</h2><p style="text-align:center">This is popup preview that you can fill with any content you want.</p><p style="text-align:center">The plugin include some shortcodes, you can read more about them at the bottom of this page. The main 3 sections to configure the popup are:</p><p>Appearance: Where you edit the look and feel of the popup.<br>Display Rules: Here you choose on which page to display the popup (Set to all by default)<br>Display options: Some important settings about the plugin, being the more important trigger action.</br></p>';
|
359 |
+
$defaults = array(
|
360 |
+
'post_status' => 'draft',
|
361 |
+
'post_type' => 'spucpt',
|
362 |
+
'post_content' => $post_content,
|
363 |
+
'post_title' => 'Popups Example'
|
364 |
+
);
|
365 |
+
wp_insert_post( $defaults, $wp_error );
|
366 |
+
}
|
367 |
+
|
368 |
+
$upgrader = new SocialPopup_Upgrader();
|
369 |
+
$upgrader->upgrade_plugin();
|
370 |
+
|
371 |
+
update_option('spu-version', SPU_VERSION);
|
372 |
+
|
373 |
+
do_action( 'spu/activate' );
|
374 |
+
|
375 |
+
}
|
376 |
+
|
377 |
+
/**
|
378 |
+
* Fired for each blog when the plugin is deactivated.
|
379 |
+
*
|
380 |
+
* @since 1.0.0
|
381 |
+
*/
|
382 |
+
private static function single_deactivate() {
|
383 |
+
// @TODO: Define deactivation functionality here
|
384 |
+
}
|
385 |
+
|
386 |
+
/**
|
387 |
+
* Load the plugin text domain for translation.
|
388 |
+
*
|
389 |
+
* @since 1.0.0
|
390 |
+
*/
|
391 |
+
public function load_plugin_textdomain() {
|
392 |
+
|
393 |
+
$domain = 'popups';
|
394 |
+
$locale = apply_filters( 'plugin_locale', get_locale(), $domain );
|
395 |
+
|
396 |
+
load_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain . '/' . $domain . '-' . $locale . '.mo' );
|
397 |
+
load_plugin_textdomain( $domain, FALSE, dirname( dirname( plugin_basename( __FILE__ ) ) ) . '/languages/' );
|
398 |
+
|
399 |
+
}
|
400 |
+
|
401 |
+
|
402 |
+
|
403 |
+
/**
|
404 |
+
* Register and enqueues public-facing JavaScript files.
|
405 |
+
*
|
406 |
+
* @since 1.0.0
|
407 |
+
*/
|
408 |
+
public function register_scripts() {
|
409 |
+
|
410 |
+
$js_url = plugins_url( 'assets/js/public.js', __FILE__ );
|
411 |
+
$handle = 'spu-public';
|
412 |
+
|
413 |
+
$opts = $this->spu_settings;
|
414 |
+
|
415 |
+
wp_register_style( 'spu-public-css', plugins_url( 'assets/css/public.css', __FILE__ ), array(), self::VERSION );
|
416 |
+
|
417 |
+
wp_register_script( $handle, $js_url, array( 'jquery' ), self::VERSION, true );
|
418 |
+
|
419 |
+
wp_register_script( 'spu-facebook', '//connect.facebook.net/'.get_locale().'/sdk.js#xfbml=1&version=v2.3', array('jquery'), null, FALSE);
|
420 |
+
|
421 |
+
wp_register_script( 'spu-twitter', '//platform.twitter.com/widgets.js', array('jquery'), self::VERSION, FALSE);
|
422 |
+
|
423 |
+
wp_register_script( 'spu-google', '//apis.google.com/js/platform.js', array('jquery'), self::VERSION, FALSE);
|
424 |
+
|
425 |
+
}
|
426 |
+
|
427 |
+
/**
|
428 |
+
* load and print SPU popup when rules matches
|
429 |
+
*
|
430 |
+
* @since 1.0.0
|
431 |
+
*/
|
432 |
+
public function check_for_matches() {
|
433 |
+
|
434 |
+
$spu_matches = false;
|
435 |
+
|
436 |
+
$spu_rules = new Spu_Rules();
|
437 |
+
|
438 |
+
//Grab all popups ids
|
439 |
+
$spu_ids = $this->get_spu_ids();
|
440 |
+
|
441 |
+
if( !empty($spu_ids) ) {
|
442 |
+
foreach ( $spu_ids as $spu ) {
|
443 |
+
$rules = !empty($spu->spu_rules) ? unserialize($spu->spu_rules) : array();
|
444 |
+
$match = $spu_rules->check_rules( $rules );
|
445 |
+
if ( $match ) {
|
446 |
+
$spu_matches[$spu->ID] = $spu->ID;
|
447 |
+
}
|
448 |
+
}
|
449 |
+
// check if we are viewing a popup, and only show that one (preview mode)
|
450 |
+
$viewing_id = defined('DOING_AJAX') && isset($_REQUEST['pid']) ? $_REQUEST['pid'] : get_queried_object_id();
|
451 |
+
foreach ( $spu_ids as $spu ) {
|
452 |
+
if ( $spu->ID == $viewing_id ) {
|
453 |
+
$spu_matches = array();
|
454 |
+
$spu_matches[$spu->ID] = $spu->ID;
|
455 |
+
}
|
456 |
+
}
|
457 |
+
}
|
458 |
+
return apply_filters( 'spu/check_for_matches', $spu_matches, $spu_ids, $spu_rules );
|
459 |
+
}
|
460 |
+
|
461 |
+
/**
|
462 |
+
* Return array of popups ids
|
463 |
+
*/
|
464 |
+
function get_spu_ids() {
|
465 |
+
global $wpdb;
|
466 |
+
// IF wpml is active and spucpt is translated get correct ids for language
|
467 |
+
if( function_exists('icl_object_id') ) {
|
468 |
+
$spu_ids = $this->get_wpml_ids();
|
469 |
+
if(!empty($spu_ids)) {
|
470 |
+
return $spu_ids;
|
471 |
+
}
|
472 |
+
}
|
473 |
+
// IF polylang is active and spucpt is translated get correct ids for language
|
474 |
+
if( function_exists('pll_current_language') ) {
|
475 |
+
$spu_ids = $this->get_polylang_ids();
|
476 |
+
if(!empty($spu_ids)) {
|
477 |
+
return $spu_ids;
|
478 |
+
}
|
479 |
+
}
|
480 |
+
$post_status = isset( $_REQUEST['is_preview'] ) && $_REQUEST['is_preview'] == '1' ? "AND (post_status='publish' OR post_status='draft')" : "AND post_status='publish'";
|
481 |
+
return $wpdb->get_results( "SELECT ID, post_content, MAX(CASE WHEN pm1.meta_key = 'spu_rules' then pm1.meta_value ELSE NULL END) as spu_rules,
|
482 |
+
MAX(CASE WHEN pm1.meta_key = 'spu_ab_parent' then pm1.meta_value ELSE NULL END) as spu_ab_parent
|
483 |
+
FROM $wpdb->posts p LEFT JOIN $wpdb->postmeta pm1 ON ( pm1.post_id = p.ID) WHERE post_type='spucpt' {$post_status} GROUP BY p.ID");
|
484 |
+
}
|
485 |
+
|
486 |
+
/**
|
487 |
+
* Function that enqueue all needed scritps and styles
|
488 |
+
* @since 1.3
|
489 |
+
*/
|
490 |
+
public function enqueue_scripts() {
|
491 |
+
$handle = 'spu-public';
|
492 |
+
|
493 |
+
$opts = $this->spu_settings;
|
494 |
+
|
495 |
+
wp_enqueue_script($handle);
|
496 |
+
wp_enqueue_style('spu-public-css');
|
497 |
+
wp_localize_script( $handle, 'spuvar',
|
498 |
+
array(
|
499 |
+
'is_admin' => current_user_can( apply_filters( 'spu/capabilities/testmode', 'administrator' ) ),
|
500 |
+
'disable_style' => isset( $this->spu_settings['shortcodes_style'] ) ? esc_attr( $this->spu_settings['shortcodes_style'] ) : '',
|
501 |
+
'ajax_mode' => isset( $this->spu_settings['ajax_mode'] ) ? esc_attr( $this->spu_settings['ajax_mode'] ) :'',
|
502 |
+
'ajax_url' => admin_url('admin-ajax.php'),
|
503 |
+
'ajax_mode_url' => site_url('/?spu_action=spu_load&lang='.$this->info['wpml_lang']),
|
504 |
+
'pid' => get_queried_object_id(),
|
505 |
+
'is_front_page' => is_front_page(),
|
506 |
+
'is_category' => is_category(),
|
507 |
+
'site_url' => site_url(),
|
508 |
+
'is_archive' => is_archive(),
|
509 |
+
'is_search' => is_search(),
|
510 |
+
'is_preview' => (get_post_type() == 'spucpt'),
|
511 |
+
'seconds_confirmation_close' => apply_filters( 'spu/spuvar/seconds_confirmation_close', 5 ),
|
512 |
+
)
|
513 |
+
);
|
514 |
+
$this->enqueue_social_shortcodes();
|
515 |
+
}
|
516 |
+
|
517 |
+
/**
|
518 |
+
* Function that runs the different checks to see if social is enqueue or not
|
519 |
+
* @since 1.3
|
520 |
+
*/
|
521 |
+
private function enqueue_social_shortcodes(){
|
522 |
+
global $wpdb,$spuvar_social;
|
523 |
+
|
524 |
+
$opts = $this->spu_settings;
|
525 |
+
$spuvar_social = array();
|
526 |
+
|
527 |
+
$handle = 'spu-public';
|
528 |
+
|
529 |
+
// Check if any popup have facebook, then enqueue js
|
530 |
+
if( $fb = $wpdb->get_var( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = 'spu_fb' " ) ) {
|
531 |
+
// Check if defined or remove js in options
|
532 |
+
if( !defined( 'SPU_UNLOAD_FB_JS') && empty( $opts['facebook'] ) )
|
533 |
+
wp_enqueue_script( 'spu-facebook');
|
534 |
+
|
535 |
+
$spuvar_social['facebook'] = true;
|
536 |
+
|
537 |
+
}
|
538 |
+
|
539 |
+
if( $fb = $wpdb->get_var( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key ='spu_tw' " ) ) {
|
540 |
+
if( ! defined( 'SPU_UNLOAD_TW_JS') && empty( $opts['twitter'] ) )
|
541 |
+
wp_enqueue_script( 'spu-twitter');
|
542 |
+
|
543 |
+
$spuvar_social['twitter'] = true;
|
544 |
+
|
545 |
+
}
|
546 |
+
|
547 |
+
if( $fb = $wpdb->get_var( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key ='spu_google' " ) ) {
|
548 |
+
if( ! defined( 'SPU_UNLOAD_GO_JS') && empty( $opts['google'] ) )
|
549 |
+
wp_enqueue_script( 'spu-google');
|
550 |
+
|
551 |
+
$spuvar_social['google'] = true;
|
552 |
+
}
|
553 |
+
wp_localize_script( $handle, 'spuvar_social', $spuvar_social);
|
554 |
+
|
555 |
+
|
556 |
+
//also include gravity forms if needed
|
557 |
+
if( $gf = $wpdb->get_var( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key ='spu_gravity' " ) ) {
|
558 |
+
if( function_exists('gravity_form_enqueue_scripts'))
|
559 |
+
gravity_form_enqueue_scripts($gf, true);
|
560 |
+
}
|
561 |
+
}
|
562 |
+
|
563 |
+
/**
|
564 |
+
* [facebook_shortcode description]
|
565 |
+
*
|
566 |
+
* @param $atts
|
567 |
+
* @param $content
|
568 |
+
*
|
569 |
+
* @internal param $ $content [description] $content [description]
|
570 |
+
* @internal param $atts [description] $atts [description]
|
571 |
+
* @return string [description]
|
572 |
+
*/
|
573 |
+
function facebook_shortcode( $atts, $content ) {
|
574 |
+
|
575 |
+
extract( shortcode_atts( array(
|
576 |
+
'href' => apply_filters( 'spu/social/fb_href', 'https://www.facebook.com/pages/Timersys/146687622031640' ),
|
577 |
+
'layout' => 'button_count', // standard, box_count, button_count, button
|
578 |
+
'show_faces' => 'false', // true
|
579 |
+
'share' => 'false', // true
|
580 |
+
'action' => 'like', // recommend
|
581 |
+
'width' => '',
|
582 |
+
), $atts ) );
|
583 |
+
|
584 |
+
$layout = strtolower( trim( $layout ) );
|
585 |
+
$action = strtolower( trim( $action ) );
|
586 |
+
|
587 |
+
// to avoid problems
|
588 |
+
if( 'standard' != $layout && 'box_count' != $layout && 'button_count' != $layout && 'button' != $layout ) {
|
589 |
+
$layout = 'button_count';
|
590 |
+
}
|
591 |
+
if( 'like' != $action && 'recommend' != $action ) {
|
592 |
+
$action = 'like';
|
593 |
+
}
|
594 |
+
|
595 |
+
return '<div class="spu-facebook spu-shortcode"><div class="fb-like" data-width="'.strtolower( trim( $width ) ).'" data-href="'. $href .'" data-layout="'.$layout.'" data-action="'.$action.'" data-show-faces="'.strtolower( trim( $show_faces ) ).'" data-share="'.strtolower( trim( $share ) ).'"></div></div>';
|
596 |
+
|
597 |
+
}
|
598 |
+
|
599 |
+
/**
|
600 |
+
* Shortcode for facebook page
|
601 |
+
*
|
602 |
+
* @param $atts
|
603 |
+
* @param $content
|
604 |
+
*
|
605 |
+
* @internal param $ $content [description] $content [description]
|
606 |
+
* @internal param $atts [description] $atts [description]
|
607 |
+
* @return string [description]
|
608 |
+
*/
|
609 |
+
function facebook_page_shortcode( $atts, $content ) {
|
610 |
+
|
611 |
+
extract( shortcode_atts( array(
|
612 |
+
'href' => apply_filters( 'spu/social/fb_href', 'https://www.facebook.com/pages/Timersys/146687622031640' ),
|
613 |
+
'name' => apply_filters( 'spu/social/fb_name', 'Timersys' ),
|
614 |
+
'show_faces' => 'true', // false
|
615 |
+
'hide_cover' => 'false', // true
|
616 |
+
'width' => '500',
|
617 |
+
), $atts ) );
|
618 |
+
|
619 |
+
return '<div class="spu-facebook-page"><div class="fb-page" data-href="'. $href .'" data-width="'.strtolower( trim( $width ) ).'" data-hide-cover="'.strtolower( trim( $hide_cover ) ).'" data-show-facepile="'.strtolower( trim( $show_faces ) ).'" data-show-posts="false"><div class="fb-xfbml-parse-ignore"><blockquote cite="'. $href .'"><a href="'. $href .'">'.esc_attr( $name ).'</a></blockquote></div></div></div>';
|
620 |
+
|
621 |
+
}
|
622 |
+
|
623 |
+
/**
|
624 |
+
* [twitter_shortcode description]
|
625 |
+
* @param string $content [description]
|
626 |
+
* @param array $atts [description]
|
627 |
+
* @return string [description]
|
628 |
+
*/
|
629 |
+
function twitter_shortcode( $atts, $content ) {
|
630 |
+
|
631 |
+
extract( shortcode_atts( array(
|
632 |
+
'user' => apply_filters( 'spu/social/tw_user', 'chifliiiii' ),
|
633 |
+
'show_count' => 'true', // false
|
634 |
+
'size' => '', // large
|
635 |
+
'lang' => '',
|
636 |
+
), $atts ) );
|
637 |
+
|
638 |
+
return '<div class="spu-twitter spu-shortcode"><a href="https://twitter.com/'.$user.'" class="twitter-follow-button" data-show-count="'.strtolower( trim( $show_count ) ).'" data-size="'.strtolower( trim( $size ) ).'" data-lang="'.$lang.'"></a></div>';
|
639 |
+
|
640 |
+
}
|
641 |
+
|
642 |
+
/**
|
643 |
+
* [google_shortcode description]
|
644 |
+
* @param [type] $atts [description]
|
645 |
+
* @param [type] $content [description]
|
646 |
+
* @return string [description]
|
647 |
+
*/
|
648 |
+
function google_shortcode( $atts, $content ) {
|
649 |
+
extract( shortcode_atts( array(
|
650 |
+
'type' => 'g-plusone', //small standard tall
|
651 |
+
'size' => 'medium', //small standard tall
|
652 |
+
'annotation' => 'bubble', //inline none
|
653 |
+
'url' => apply_filters( 'spu/social/gp_url', 'https://plus.google.com/u/0/103508783120806246698/posts' ),
|
654 |
+
), $atts ) );
|
655 |
+
|
656 |
+
$size = strtolower( trim( $size ) );
|
657 |
+
$annotation = strtolower( trim( $annotation ) );
|
658 |
+
|
659 |
+
//to avoid problems
|
660 |
+
if( 'medium' != $size && 'small' != $size && 'standard' != $size && 'tall' != $size ) {
|
661 |
+
$size = 'medium';
|
662 |
+
}
|
663 |
+
if( 'bubble' != $annotation && 'inline' != $annotation && 'none' != $annotation ) {
|
664 |
+
$annotation = 'bubble';
|
665 |
+
}
|
666 |
+
if( 'g-plusone' != $type && 'g-follow' != $type ) {
|
667 |
+
$type = 'g-plusone';
|
668 |
+
}
|
669 |
+
|
670 |
+
return '<div class="spu-google spu-shortcode"><div class="'.$type.'" data-callback="googleCB" data-onendinteraction="closeGoogle" data-recommendations="false" data-annotation="'.$annotation.'" data-size="'.$size.'" data-href="'.$url.'"></div></div>';
|
671 |
+
|
672 |
+
}
|
673 |
+
|
674 |
+
function close_shortcode( $atts, $content ) {
|
675 |
+
extract( shortcode_atts( array(
|
676 |
+
'class' => 'button-primary btn-primary',
|
677 |
+
'text' => 'Close',
|
678 |
+
'conversion' => false
|
679 |
+
), $atts ) );
|
680 |
+
$button_class = ! $conversion || $conversion == 'false' ? 'spu-close-popup ' : 'spu-close-convert ';
|
681 |
+
|
682 |
+
return '<button class="'.$button_class.$class.'">'.$text.'</button>';
|
683 |
+
}
|
684 |
+
|
685 |
+
/**
|
686 |
+
* Returns plugin info
|
687 |
+
* @param string $i info name
|
688 |
+
* @return mixed one all or none
|
689 |
+
*/
|
690 |
+
function get_info( $i )
|
691 |
+
{
|
692 |
+
// vars
|
693 |
+
$return = false;
|
694 |
+
|
695 |
+
|
696 |
+
// specific
|
697 |
+
if( isset($this->info[ $i ]) )
|
698 |
+
{
|
699 |
+
$return = $this->info[ $i ];
|
700 |
+
}
|
701 |
+
|
702 |
+
|
703 |
+
// all
|
704 |
+
if( $i == 'all' )
|
705 |
+
{
|
706 |
+
$return = $this->info;
|
707 |
+
}
|
708 |
+
|
709 |
+
|
710 |
+
// return
|
711 |
+
return $return;
|
712 |
+
}
|
713 |
+
|
714 |
+
/**
|
715 |
+
* Print the actual popup
|
716 |
+
* @return mixed echo popup html
|
717 |
+
*/
|
718 |
+
function print_boxes( ) {
|
719 |
+
|
720 |
+
do_action('spu/print_boxes');
|
721 |
+
|
722 |
+
$spu_matches = $this->check_for_matches();
|
723 |
+
|
724 |
+
//if we have matches continue
|
725 |
+
if( ! empty( $spu_matches) ) {
|
726 |
+
|
727 |
+
foreach ($spu_matches as $spu_id ) {
|
728 |
+
|
729 |
+
include( 'views/popup.php');
|
730 |
+
|
731 |
+
} //endforeach
|
732 |
+
echo '<div id="fb-root" class=" fb_reset"></div>';
|
733 |
+
|
734 |
+
}
|
735 |
+
|
736 |
+
}
|
737 |
+
|
738 |
+
/**
|
739 |
+
* Return plugin settings
|
740 |
+
* @return array
|
741 |
+
* @since 1.1
|
742 |
+
*/
|
743 |
+
function get_settings() {
|
744 |
+
|
745 |
+
return $this->spu_settings;
|
746 |
+
|
747 |
+
}
|
748 |
+
|
749 |
+
/**
|
750 |
+
* Load necessary files
|
751 |
+
* @since 1.2.3
|
752 |
+
*/
|
753 |
+
private function load_dependencies(){
|
754 |
+
// Include Helper class
|
755 |
+
require_once( SPU_PLUGIN_DIR . 'includes/class-spu-helper.php' );
|
756 |
+
// Include Rules Class
|
757 |
+
require_once( SPU_PLUGIN_DIR . 'public/includes/class-spu-rules.php' );
|
758 |
+
}
|
759 |
+
|
760 |
+
/**
|
761 |
+
* Custom ajax hook. Wp_ajax won't let us do_shortcode for example
|
762 |
+
* @return mixed Prints all spus
|
763 |
+
*/
|
764 |
+
function register_spu_ajax() {
|
765 |
+
|
766 |
+
if ( empty( $_REQUEST['spu_action'] ) || $_REQUEST['spu_action'] != 'spu_load' )
|
767 |
+
return;
|
768 |
+
|
769 |
+
define( 'DOING_AJAX', TRUE );
|
770 |
+
|
771 |
+
$this->print_boxes();
|
772 |
+
|
773 |
+
die();
|
774 |
+
}
|
775 |
+
|
776 |
+
|
777 |
+
/**
|
778 |
+
* Return popups for current language
|
779 |
+
* @return bool | array of ids
|
780 |
+
*/
|
781 |
+
protected function get_polylang_ids( ) {
|
782 |
+
global $wpdb;
|
783 |
+
$post_status = isset( $_REQUEST['is_preview'] ) && $_REQUEST['is_preview'] == '1' ? "AND (post_status='publish' OR post_status='draft')" : "AND post_status='publish'";
|
784 |
+
|
785 |
+
$sql = "SELECT description
|
786 |
+
FROM $wpdb->posts p
|
787 |
+
LEFT JOIN $wpdb->term_relationships as tr ON p.ID = tr.object_id
|
788 |
+
LEFT JOIN $wpdb->term_taxonomy as tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
|
789 |
+
WHERE post_type='spucpt' {$post_status} AND tt.taxonomy = 'post_translations'
|
790 |
+
GROUP BY p.ID";
|
791 |
+
|
792 |
+
$ids = array();
|
793 |
+
$popups = $wpdb->get_results( $sql );
|
794 |
+
if( !empty($popups) ) {
|
795 |
+
$current = pll_current_language();
|
796 |
+
foreach ($popups as $p) {
|
797 |
+
$langs = unserialize($p->description);
|
798 |
+
|
799 |
+
if( isset($langs[$current]) )
|
800 |
+
$ids[] = $langs[$current];
|
801 |
+
}
|
802 |
+
}
|
803 |
+
|
804 |
+
if( !empty($ids)){
|
805 |
+
$sql = "SELECT DISTINCT ID, post_content,
|
806 |
+
MAX(CASE WHEN pm1.meta_key = 'spu_rules' then pm1.meta_value ELSE NULL END) as spu_rules,
|
807 |
+
MAX(CASE WHEN pm1.meta_key = 'spu_ab_parent' then pm1.meta_value ELSE NULL END) as spu_ab_parent
|
808 |
+
FROM $wpdb->posts p
|
809 |
+
LEFT JOIN $wpdb->postmeta pm1 ON ( pm1.post_id = p.ID)
|
810 |
+
WHERE post_type='spucpt' {$post_status} AND ID IN (".implode(',',array_unique($ids)).")
|
811 |
+
GROUP BY p.ID";
|
812 |
+
return $wpdb->get_results( $sql );
|
813 |
+
}
|
814 |
+
|
815 |
+
return false;
|
816 |
+
}
|
817 |
+
/**
|
818 |
+
* Return popups for current language
|
819 |
+
* @return bool | array of ids
|
820 |
+
*/
|
821 |
+
protected function get_wpml_ids( ) {
|
822 |
+
global $wpdb;
|
823 |
+
$wpml_settings = get_option( 'icl_sitepress_settings', true);
|
824 |
+
|
825 |
+
if ( ! empty( $wpml_settings['custom_posts_sync_option']['spucpt'] ) ) {
|
826 |
+
$post_status = isset( $_REQUEST['is_preview'] ) && $_REQUEST['is_preview'] == '1' ? "AND (post_status='publish' OR post_status='draft')" : "AND post_status='publish'";
|
827 |
+
$lang_code = isset( $_GET['lang'] ) ? $_GET['lang'] : ICL_LANGUAGE_CODE;
|
828 |
+
$sql = "SELECT DISTINCT ID, post_content,
|
829 |
+
MAX(CASE WHEN pm1.meta_key = 'spu_rules' then pm1.meta_value ELSE NULL END) as spu_rules,
|
830 |
+
MAX(CASE WHEN pm1.meta_key = 'spu_ab_parent' then pm1.meta_value ELSE NULL END) as spu_ab_parent
|
831 |
+
FROM $wpdb->posts p
|
832 |
+
LEFT JOIN $wpdb->postmeta pm1 ON ( pm1.post_id = p.ID)
|
833 |
+
LEFT JOIN {$wpdb->prefix}icl_translations as b ON p.ID = b.element_id
|
834 |
+
WHERE post_type='spucpt' {$post_status} AND b.language_code = '" . esc_sql( $lang_code ) . "'
|
835 |
+
GROUP BY p.ID";
|
836 |
+
|
837 |
+
$ids = $wpdb->get_results( $sql );
|
838 |
+
if( !empty($ids) )
|
839 |
+
return $ids;
|
840 |
+
}
|
841 |
+
|
842 |
+
return false;
|
843 |
+
}
|
844 |
+
|
845 |
+
/**
|
846 |
+
* Popup button
|
847 |
+
* @param [type] $atts [description]
|
848 |
+
* @param [type] $content [description]
|
849 |
+
* @return [type] [description]
|
850 |
+
*/
|
851 |
+
public function popup_link_shortcode($atts, $content ) {
|
852 |
+
return '<a href="#" class="spu-open-'.$atts['popup'].'">'.do_shortcode( $content ).'</a>';
|
853 |
+
}
|
854 |
+
|
855 |
+
}
|
public/includes/class-spu-rules.php
CHANGED
@@ -1,1157 +1,1151 @@
|
|
1 |
-
<?php
|
2 |
-
use Jaybizzle\CrawlerDetect\CrawlerDetect;
|
3 |
-
/*
|
4 |
-
* Spu Rules
|
5 |
-
* Class that will compare rules and determine if popup needs to show
|
6 |
-
* @since: 2.0
|
7 |
-
*/
|
8 |
-
class Spu_Rules
|
9 |
-
{
|
10 |
-
/**
|
11 |
-
* post id used to check rules
|
12 |
-
* @var int
|
13 |
-
*/
|
14 |
-
protected $post_id;
|
15 |
-
|
16 |
-
/**
|
17 |
-
* referrer using in ajax calls
|
18 |
-
* @var string
|
19 |
-
*/
|
20 |
-
protected $referrer;
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Is category using in ajax calls
|
24 |
-
* @var boolean
|
25 |
-
*/
|
26 |
-
protected $is_category = false;
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Is archive using in ajax calls
|
30 |
-
* @var boolean
|
31 |
-
*/
|
32 |
-
protected $is_archive = false;
|
33 |
-
|
34 |
-
/**
|
35 |
-
* Is searchu sed in ajax calls
|
36 |
-
* @var boolean
|
37 |
-
*/
|
38 |
-
protected $is_search = false;
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Holds current url
|
42 |
-
* @var string
|
43 |
-
*/
|
44 |
-
protected $current_url;
|
45 |
-
|
46 |
-
/**
|
47 |
-
* Holds query string
|
48 |
-
* @var
|
49 |
-
*/
|
50 |
-
protected $query_string;
|
51 |
-
|
52 |
-
/*
|
53 |
-
* __construct
|
54 |
-
* Add all the filters to use later
|
55 |
-
*/
|
56 |
-
|
57 |
-
function __construct()
|
58 |
-
{
|
59 |
-
global $post;
|
60 |
-
|
61 |
-
// User
|
62 |
-
add_filter('spu/rules/rule_match/user_type', array($this, 'rule_match_user_type'), 10, 2);
|
63 |
-
add_filter('spu/rules/rule_match/logged_user', array($this, 'rule_match_logged_user'), 10, 2);
|
64 |
-
add_filter('spu/rules/rule_match/left_comment', array($this, 'rule_match_left_comment'), 10, 2);
|
65 |
-
add_filter('spu/rules/rule_match/search_engine', array($this, 'rule_match_search_engine'), 10, 2);
|
66 |
-
add_filter('spu/rules/rule_match/same_site', array($this, 'rule_match_same_site'), 10, 2);
|
67 |
-
|
68 |
-
// Post
|
69 |
-
add_filter('spu/rules/rule_match/post_type', array($this, 'rule_match_post_type'), 10, 2);
|
70 |
-
add_filter('spu/rules/rule_match/post_id', array($this, 'rule_match_post'), 10, 2);
|
71 |
-
add_filter('spu/rules/rule_match/post', array($this, 'rule_match_post'), 10, 2);
|
72 |
-
add_filter('spu/rules/rule_match/post_category', array($this, 'rule_match_post_category'), 10, 2);
|
73 |
-
add_filter('spu/rules/rule_match/post_format', array($this, 'rule_match_post_format'), 10, 2);
|
74 |
-
add_filter('spu/rules/rule_match/post_status', array($this, 'rule_match_post_status'), 10, 2);
|
75 |
-
add_filter('spu/rules/rule_match/taxonomy', array($this, 'rule_match_taxonomy'), 10, 2);
|
76 |
-
|
77 |
-
// Page
|
78 |
-
add_filter('spu/rules/rule_match/page', array($this, 'rule_match_post'), 10, 2);
|
79 |
-
add_filter('spu/rules/rule_match/page_type', array($this, 'rule_match_page_type'), 10, 2);
|
80 |
-
add_filter('spu/rules/rule_match/page_parent', array($this, 'rule_match_page_parent'), 10, 2);
|
81 |
-
add_filter('spu/rules/rule_match/page_template', array($this, 'rule_match_page_template'), 10, 2);
|
82 |
-
|
83 |
-
//Other
|
84 |
-
add_filter('spu/rules/rule_match/mobiles', array($this, 'rule_match_mobiles'), 10, 2);
|
85 |
-
add_filter('spu/rules/rule_match/tablets', array($this, 'rule_match_tablets'), 10, 2);
|
86 |
-
add_filter('spu/rules/rule_match/desktop', array($this, 'rule_match_desktop'), 10, 2);
|
87 |
-
add_filter('spu/rules/rule_match/referrer', array($this, 'rule_match_referrer'), 10, 2);
|
88 |
-
add_filter('spu/rules/rule_match/crawlers', array($this, 'rule_match_crawlers'), 10, 2);
|
89 |
-
add_filter('spu/rules/rule_match/browser', array($this, 'rule_match_browser'), 10, 2);
|
90 |
-
add_filter('spu/rules/rule_match/query_string', array($this, 'rule_match_query_string'), 10, 2);
|
91 |
-
add_filter('spu/rules/rule_match/custom_url', array($this, 'rule_match_custom_url'), 10, 2);
|
92 |
-
add_filter('spu/rules/rule_match/keyword_url', array($this, 'rule_match_keyword_url'), 10, 2);
|
93 |
-
|
94 |
-
$this->post_id = get_queried_object_id();
|
95 |
-
$this->referrer = isset($_SERVER['HTTP_REFERER']) && !defined('DOING_AJAX') ? $_SERVER['HTTP_REFERER'] : '';
|
96 |
-
$this->query_string = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '';
|
97 |
-
$this->current_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
|
98 |
-
|
99 |
-
|
100 |
-
if( defined('DOING_AJAX') ) {
|
101 |
-
|
102 |
-
if( isset( $_REQUEST['pid'] ) ) {
|
103 |
-
$this->post_id = $_REQUEST['pid'];
|
104 |
-
}
|
105 |
-
if( !empty( $_REQUEST['referrer'] ) ) {
|
106 |
-
$this->referrer = $_REQUEST['referrer'];
|
107 |
-
}
|
108 |
-
if( !empty( $_REQUEST['current_url'] ) ) {
|
109 |
-
$this->current_url = $_REQUEST['current_url'];
|
110 |
-
}
|
111 |
-
if( !empty( $_REQUEST['query_string'] ) ) {
|
112 |
-
$this->query_string = $_REQUEST['query_string'];
|
113 |
-
}
|
114 |
-
if( !empty( $_REQUEST['is_category'] ) ) {
|
115 |
-
$this->is_category = true;
|
116 |
-
}
|
117 |
-
if( !empty( $_REQUEST['is_archive'] ) ) {
|
118 |
-
$this->is_archive = true;
|
119 |
-
}
|
120 |
-
if( !empty( $_REQUEST['is_search'] ) ) {
|
121 |
-
$this->is_search = true;
|
122 |
-
}
|
123 |
-
}
|
124 |
-
|
125 |
-
}
|
126 |
-
|
127 |
-
|
128 |
-
/*
|
129 |
-
* check_rules
|
130 |
-
*
|
131 |
-
* @since 1.0.0
|
132 |
-
*/
|
133 |
-
|
134 |
-
function check_rules( $rules = '' )
|
135 |
-
{
|
136 |
-
|
137 |
-
//if no rules, add the box
|
138 |
-
$add_box = true;
|
139 |
-
|
140 |
-
if( !empty( $rules ) ) {
|
141 |
-
// vars
|
142 |
-
$add_box = false;
|
143 |
-
|
144 |
-
|
145 |
-
foreach( $rules as $group_id => $group ) {
|
146 |
-
// start of as true, this way, any rule that doesn't match will cause this varaible to false
|
147 |
-
$match_group = true;
|
148 |
-
|
149 |
-
if( is_array($group) )
|
150 |
-
{
|
151 |
-
|
152 |
-
foreach( $group as $rule_id => $rule )
|
153 |
-
{
|
154 |
-
|
155 |
-
// $match = true / false
|
156 |
-
$match = apply_filters( 'spu/rules/rule_match/' . $rule['param'] , false, $rule );
|
157 |
-
|
158 |
-
if( !$match )
|
159 |
-
{
|
160 |
-
$match_group = false;
|
161 |
-
// if one rule fails we don't need to check the rest of the rules in the group
|
162 |
-
// that way if we add geo rules down it won't get executed and will save credits
|
163 |
-
break;
|
164 |
-
}
|
165 |
-
|
166 |
-
}
|
167 |
-
}
|
168 |
-
|
169 |
-
|
170 |
-
// all rules must havematched!
|
171 |
-
if( $match_group )
|
172 |
-
{
|
173 |
-
$add_box = true;
|
174 |
-
}
|
175 |
-
|
176 |
-
}
|
177 |
-
|
178 |
-
|
179 |
-
}
|
180 |
-
|
181 |
-
|
182 |
-
return $add_box;
|
183 |
-
}
|
184 |
-
|
185 |
-
/**
|
186 |
-
* [rule_match_logged_user description]
|
187 |
-
* @param bool $match false default
|
188 |
-
* @param array $rule rule to compare
|
189 |
-
* @return boolean true if match
|
190 |
-
*/
|
191 |
-
function rule_match_logged_user( $match, $rule ) {
|
192 |
-
|
193 |
-
if ( $rule['operator'] == "==" ) {
|
194 |
-
|
195 |
-
return is_user_logged_in();
|
196 |
-
|
197 |
-
} else {
|
198 |
-
|
199 |
-
return !is_user_logged_in();
|
200 |
-
|
201 |
-
}
|
202 |
-
|
203 |
-
}
|
204 |
-
|
205 |
-
/**
|
206 |
-
* [rule_match_mobiles description]
|
207 |
-
* @param bool $match false default
|
208 |
-
* @param array $rule rule to compare
|
209 |
-
* @return boolean true if match
|
210 |
-
*/
|
211 |
-
function rule_match_mobiles( $match, $rule ) {
|
212 |
-
|
213 |
-
$detect = new Mobile_Detect;
|
214 |
-
|
215 |
-
if ( $rule['operator'] == "==" ) {
|
216 |
-
|
217 |
-
return $detect->isMobile();
|
218 |
-
|
219 |
-
} else {
|
220 |
-
|
221 |
-
return !$detect->isMobile();
|
222 |
-
|
223 |
-
}
|
224 |
-
|
225 |
-
}
|
226 |
-
/**
|
227 |
-
* [rule_match_browser description]
|
228 |
-
* @param bool $match false default
|
229 |
-
* @param array $rule rule to compare
|
230 |
-
* @return boolean true if match
|
231 |
-
*/
|
232 |
-
function rule_match_browser( $match, $rule ) {
|
233 |
-
|
234 |
-
$detect = new Browser();
|
235 |
-
|
236 |
-
//check $detect $browsers for valid keys
|
237 |
-
if ( $rule['operator'] == "==" ) {
|
238 |
-
|
239 |
-
return $detect->getBrowser() == $rule['value'];
|
240 |
-
|
241 |
-
} else {
|
242 |
-
|
243 |
-
return $detect->getBrowser() != $rule['value'];
|
244 |
-
|
245 |
-
}
|
246 |
-
|
247 |
-
}
|
248 |
-
/**
|
249 |
-
* [rule_match_tablets description]
|
250 |
-
* @param bool $match false default
|
251 |
-
* @param array $rule rule to compare
|
252 |
-
* @return boolean true if match
|
253 |
-
*/
|
254 |
-
function rule_match_tablets( $match, $rule ) {
|
255 |
-
|
256 |
-
$detect = new Mobile_Detect;
|
257 |
-
|
258 |
-
if ( $rule['operator'] == "==" ) {
|
259 |
-
|
260 |
-
return $detect->isTablet();
|
261 |
-
|
262 |
-
} else {
|
263 |
-
|
264 |
-
return !$detect->isTablet();
|
265 |
-
|
266 |
-
}
|
267 |
-
|
268 |
-
}
|
269 |
-
/**
|
270 |
-
* [rule_match_desktop description]
|
271 |
-
* @param bool $match false default
|
272 |
-
* @param array $rule rule to compare
|
273 |
-
* @return boolean true if match
|
274 |
-
*/
|
275 |
-
function rule_match_desktop( $match, $rule ) {
|
276 |
-
|
277 |
-
$detect = new Mobile_Detect;
|
278 |
-
|
279 |
-
if ( $rule['operator'] == "==" ) {
|
280 |
-
|
281 |
-
return ( ! $detect->isTablet() && ! $detect->isMobile() );
|
282 |
-
|
283 |
-
} else {
|
284 |
-
|
285 |
-
return ( $detect->isTablet() || $detect->isMobile() );
|
286 |
-
|
287 |
-
}
|
288 |
-
|
289 |
-
}
|
290 |
-
|
291 |
-
/**
|
292 |
-
* [rule_match_left_comment description]
|
293 |
-
* @param bool $match false default
|
294 |
-
* @param array $rule rule to compare
|
295 |
-
* @return boolean true if match
|
296 |
-
*/
|
297 |
-
function rule_match_left_comment( $match, $rule ) {
|
298 |
-
|
299 |
-
if ( $rule['operator'] == "==" ) {
|
300 |
-
|
301 |
-
return !empty( $_COOKIE['comment_author_'.COOKIEHASH] );
|
302 |
-
|
303 |
-
} else {
|
304 |
-
|
305 |
-
return empty( $_COOKIE['comment_author_'.COOKIEHASH] );
|
306 |
-
|
307 |
-
}
|
308 |
-
|
309 |
-
}
|
310 |
-
/**
|
311 |
-
* [rule_match_search_engine description]
|
312 |
-
* @param bool $match false default
|
313 |
-
* @param array $rule rule to compare
|
314 |
-
* @return boolean true if match
|
315 |
-
*/
|
316 |
-
function rule_match_search_engine( $match, $rule ) {
|
317 |
-
|
318 |
-
$ref = $this->referrer;
|
319 |
-
|
320 |
-
$SE = apply_filters( 'spu/rules/search_engines', array('/search?', '.google.', 'web.info.com', 'search.', 'del.icio.us/search', 'soso.com', '/search/', '.yahoo.', '.bing.' ) );
|
321 |
-
|
322 |
-
foreach ($SE as $url) {
|
323 |
-
if ( strpos( $ref,$url ) !==false ){
|
324 |
-
|
325 |
-
return $rule['operator'] == "==" ? true : false;
|
326 |
-
}
|
327 |
-
}
|
328 |
-
|
329 |
-
return $rule['operator'] == "==" ? false : true;
|
330 |
-
|
331 |
-
}
|
332 |
-
|
333 |
-
/**
|
334 |
-
* Check for user referrer
|
335 |
-
* @param bool $match false default
|
336 |
-
* @param array $rule rule to compare
|
337 |
-
* @return boolean true if match
|
338 |
-
*/
|
339 |
-
function rule_match_referrer( $match, $rule ) {
|
340 |
-
|
341 |
-
$ref = $this->referrer;
|
342 |
-
|
343 |
-
if ( strpos( $ref,$rule['value'] ) !==false ){
|
344 |
-
return $rule['operator'] == "==" ? true : false;
|
345 |
-
}
|
346 |
-
|
347 |
-
return $rule['operator'] == "==" ? false : true;
|
348 |
-
|
349 |
-
}
|
350 |
-
|
351 |
-
/**
|
352 |
-
* Check for crawlers / bots
|
353 |
-
* @param bool $match false default
|
354 |
-
* @param array $rule rule to compare
|
355 |
-
* @return boolean true if match
|
356 |
-
*/
|
357 |
-
function rule_match_crawlers( $match, $rule ) {
|
358 |
-
|
359 |
-
$detect = new CrawlerDetect;
|
360 |
-
|
361 |
-
if ( $rule['operator'] == "==" ) {
|
362 |
-
|
363 |
-
return $detect->isCrawler();
|
364 |
-
|
365 |
-
} else {
|
366 |
-
|
367 |
-
return !$detect->isCrawler();
|
368 |
-
|
369 |
-
}
|
370 |
-
|
371 |
-
}
|
372 |
-
|
373 |
-
/**
|
374 |
-
* Check for query string to see if matchs all given ones
|
375 |
-
* @param bool $match false default
|
376 |
-
* @param array $rule rule to compare
|
377 |
-
* @return boolean true if match
|
378 |
-
*/
|
379 |
-
function rule_match_query_string( $match, $rule ) {
|
380 |
-
|
381 |
-
|
382 |
-
$found = strpos($this->query_string, str_replace('?','', $rule['value'] ) ) > -1 ? true: false;
|
383 |
-
|
384 |
-
|
385 |
-
if ( $rule['operator'] == "==" )
|
386 |
-
return $found;
|
387 |
-
|
388 |
-
return ! $found;
|
389 |
-
|
390 |
-
}
|
391 |
-
|
392 |
-
/**
|
393 |
-
* [rule_match_same_site description]
|
394 |
-
* @param bool $match false default
|
395 |
-
* @param array $rule rule to compare
|
396 |
-
* @return boolean true if match
|
397 |
-
*/
|
398 |
-
function rule_match_same_site( $match, $rule ) {
|
399 |
-
|
400 |
-
|
401 |
-
$ref = $this->referrer;
|
402 |
-
|
403 |
-
$internal = str_replace( array( 'http://','https://' ), '', home_url() );
|
404 |
-
|
405 |
-
if( $rule['operator'] == "==" ) {
|
406 |
-
|
407 |
-
return !preg_match( '~' . $internal . '~i', $ref );
|
408 |
-
|
409 |
-
} else {
|
410 |
-
return preg_match( '~' . $internal . '~i', $ref );
|
411 |
-
|
412 |
-
}
|
413 |
-
|
414 |
-
}
|
415 |
-
|
416 |
-
/*
|
417 |
-
* rule_match_post_type
|
418 |
-
*
|
419 |
-
* @since 1.0.0
|
420 |
-
*/
|
421 |
-
|
422 |
-
function rule_match_post_type( $match, $rule )
|
423 |
-
{
|
424 |
-
|
425 |
-
|
426 |
-
$post_type = $this->get_post_type();
|
427 |
-
|
428 |
-
|
429 |
-
if( $rule['operator'] == "==" )
|
430 |
-
{
|
431 |
-
$match = ( $post_type === $rule['value'] );
|
432 |
-
}
|
433 |
-
elseif( $rule['operator'] == "!=" )
|
434 |
-
{
|
435 |
-
$match = ( $post_type !== $rule['value'] );
|
436 |
-
}
|
437 |
-
|
438 |
-
|
439 |
-
return $match;
|
440 |
-
}
|
441 |
-
|
442 |
-
|
443 |
-
/*
|
444 |
-
* rule_match_post
|
445 |
-
*
|
446 |
-
* @since 1.0.0
|
447 |
-
*/
|
448 |
-
|
449 |
-
function rule_match_post( $match, $rule )
|
450 |
-
{
|
451 |
-
|
452 |
-
$post_id = $this->post_id;
|
453 |
-
// in case multiple ids are passed
|
454 |
-
$ids = array_map('trim',explode(',',$rule['value']));
|
455 |
-
|
456 |
-
if($rule['operator'] == "==")
|
457 |
-
{
|
458 |
-
$match = in_array($post_id, $ids );
|
459 |
-
}
|
460 |
-
elseif($rule['operator'] == "!=")
|
461 |
-
{
|
462 |
-
$match = ! in_array($post_id, $ids );
|
463 |
-
}
|
464 |
-
|
465 |
-
return $match;
|
466 |
-
|
467 |
-
}
|
468 |
-
|
469 |
-
|
470 |
-
/*
|
471 |
-
* rule_match_page_type
|
472 |
-
*
|
473 |
-
* @since 1.0.0
|
474 |
-
*/
|
475 |
-
|
476 |
-
function rule_match_page_type( $match, $rule )
|
477 |
-
{
|
478 |
-
|
479 |
-
|
480 |
-
$post_id = $this->post_id;
|
481 |
-
|
482 |
-
$post = get_post( $post_id );
|
483 |
-
|
484 |
-
$post_parent = isset( $post->post_parent ) ? $post->post_parent : '';
|
485 |
-
|
486 |
-
$post_type = $this->get_post_type();
|
487 |
-
|
488 |
-
if( $rule['value'] == 'front_page') {
|
489 |
-
|
490 |
-
$front_page = (int) get_option('page_on_front');
|
491 |
-
|
492 |
-
if( $front_page !== 0 ) {
|
493 |
-
|
494 |
-
if($rule['operator'] == "==") {
|
495 |
-
|
496 |
-
$match = ( $front_page == $post_id );
|
497 |
-
|
498 |
-
} elseif($rule['operator'] == "!=") {
|
499 |
-
|
500 |
-
$match = ( $front_page != $post_id );
|
501 |
-
|
502 |
-
}
|
503 |
-
} else {
|
504 |
-
// if doing ajax is_home won't work so we do a workaround
|
505 |
-
if( defined( 'DOING_AJAX') ) {
|
506 |
-
|
507 |
-
$front_page = get_option( 'show_on_front' );
|
508 |
-
|
509 |
-
if($rule['operator'] == "==") {
|
510 |
-
|
511 |
-
$match = ( 'posts' == $front_page && $post_id == 0 );
|
512 |
-
|
513 |
-
} elseif($rule['operator'] == "!=") {
|
514 |
-
|
515 |
-
$match = !( 'posts' == $front_page && $post_id == 0 );
|
516 |
-
|
517 |
-
}
|
518 |
-
|
519 |
-
|
520 |
-
} else {
|
521 |
-
|
522 |
-
if($rule['operator'] == "==") {
|
523 |
-
|
524 |
-
$match = is_home();
|
525 |
-
|
526 |
-
} elseif($rule['operator'] == "!=") {
|
527 |
-
|
528 |
-
$match = !is_home();
|
529 |
-
|
530 |
-
}
|
531 |
-
}
|
532 |
-
|
533 |
-
}
|
534 |
-
|
535 |
-
}
|
536 |
-
elseif( $rule['value'] == 'category_page') {
|
537 |
-
|
538 |
-
if( defined( 'DOING_AJAX') ) {
|
539 |
-
if($rule['operator'] == "==") {
|
540 |
-
|
541 |
-
$match = $this->is_category;
|
542 |
-
|
543 |
-
} elseif($rule['operator'] == "!=") {
|
544 |
-
|
545 |
-
$match = !$this->is_category;
|
546 |
-
|
547 |
-
}
|
548 |
-
} else {
|
549 |
-
if ( $rule['operator'] == "==" ) {
|
550 |
-
|
551 |
-
$match = is_category();
|
552 |
-
|
553 |
-
} elseif ( $rule['operator'] == "!=" ) {
|
554 |
-
|
555 |
-
$match = ! is_category();
|
556 |
-
|
557 |
-
}
|
558 |
-
}
|
559 |
-
}
|
560 |
-
elseif( $rule['value'] == 'archive_page') {
|
561 |
-
if( defined( 'DOING_AJAX') ) {
|
562 |
-
if($rule['operator'] == "==") {
|
563 |
-
|
564 |
-
$match = $this->is_archive;
|
565 |
-
|
566 |
-
} elseif($rule['operator'] == "!=") {
|
567 |
-
|
568 |
-
$match = !$this->is_archive;
|
569 |
-
|
570 |
-
}
|
571 |
-
} else {
|
572 |
-
if ( $rule['operator'] == "==" ) {
|
573 |
-
|
574 |
-
$match = is_archive();
|
575 |
-
|
576 |
-
} elseif ( $rule['operator'] == "!=" ) {
|
577 |
-
|
578 |
-
$match = ! is_archive();
|
579 |
-
|
580 |
-
}
|
581 |
-
}
|
582 |
-
}
|
583 |
-
elseif( $rule['value'] == 'search_page') {
|
584 |
-
if( defined( 'DOING_AJAX') ) {
|
585 |
-
if($rule['operator'] == "==") {
|
586 |
-
|
587 |
-
$match = $this->is_search;
|
588 |
-
|
589 |
-
} elseif($rule['operator'] == "!=") {
|
590 |
-
|
591 |
-
$match = !$this->is_search;
|
592 |
-
|
593 |
-
}
|
594 |
-
} else {
|
595 |
-
if ( $rule['operator'] == "==" ) {
|
596 |
-
|
597 |
-
$match = is_search();
|
598 |
-
|
599 |
-
} elseif ( $rule['operator'] == "!=" ) {
|
600 |
-
|
601 |
-
$match = ! is_search();
|
602 |
-
|
603 |
-
}
|
604 |
-
}
|
605 |
-
}
|
606 |
-
elseif( $rule['value'] == 'posts_page') {
|
607 |
-
|
608 |
-
$posts_page = (int) get_option('page_for_posts');
|
609 |
-
|
610 |
-
if( $posts_page !== 0 ) {
|
611 |
-
if($rule['operator'] == "==") {
|
612 |
-
|
613 |
-
$match = ( $posts_page == $post_id );
|
614 |
-
|
615 |
-
} elseif($rule['operator'] == "!=") {
|
616 |
-
|
617 |
-
$match = ( $posts_page != $post_id );
|
618 |
-
|
619 |
-
}
|
620 |
-
} else {
|
621 |
-
// if doing ajax is_home won't work so we do a workaround
|
622 |
-
if( defined( 'DOING_AJAX') ) {
|
623 |
-
|
624 |
-
|
625 |
-
if($rule['operator'] == "==") {
|
626 |
-
|
627 |
-
$match = ( 0 === $posts_page && $post_id == 0 );
|
628 |
-
|
629 |
-
} elseif($rule['operator'] == "!=") {
|
630 |
-
|
631 |
-
$match = !( 0 === $posts_page && $post_id == 0 );
|
632 |
-
|
633 |
-
}
|
634 |
-
|
635 |
-
|
636 |
-
} else {
|
637 |
-
if($rule['operator'] == "==") {
|
638 |
-
|
639 |
-
$match = is_home();
|
640 |
-
|
641 |
-
} elseif($rule['operator'] == "!=") {
|
642 |
-
|
643 |
-
$match = !is_home();
|
644 |
-
|
645 |
-
}
|
646 |
-
}
|
647 |
-
}
|
648 |
-
|
649 |
-
}
|
650 |
-
elseif( $rule['value'] == 'top_level') {
|
651 |
-
|
652 |
-
|
653 |
-
if($rule['operator'] == "==")
|
654 |
-
{
|
655 |
-
$match = ( $post_parent == 0 );
|
656 |
-
}
|
657 |
-
elseif($rule['operator'] == "!=")
|
658 |
-
{
|
659 |
-
$match = ( $post_parent != 0 );
|
660 |
-
}
|
661 |
-
|
662 |
-
}
|
663 |
-
elseif( $rule['value'] == 'parent') {
|
664 |
-
|
665 |
-
$children = get_pages(array(
|
666 |
-
'post_type' => $post_type,
|
667 |
-
'child_of' => $post_id,
|
668 |
-
));
|
669 |
-
|
670 |
-
|
671 |
-
if($rule['operator'] == "==") {
|
672 |
-
$match = ( count($children) > 0 );
|
673 |
-
}
|
674 |
-
elseif($rule['operator'] == "!=")
|
675 |
-
{
|
676 |
-
$match = ( count($children) == 0 );
|
677 |
-
}
|
678 |
-
|
679 |
-
}
|
680 |
-
elseif( $rule['value'] == 'child') {
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
if($rule['operator'] == "==")
|
685 |
-
{
|
686 |
-
$match = ( $post_parent != 0 );
|
687 |
-
}
|
688 |
-
elseif($rule['operator'] == "!=")
|
689 |
-
{
|
690 |
-
$match = ( $post_parent == 0 );
|
691 |
-
}
|
692 |
-
|
693 |
-
} elseif( $rule['value'] == 'all_pages') {
|
694 |
-
|
695 |
-
$match = true;
|
696 |
-
|
697 |
-
}
|
698 |
-
|
699 |
-
return $match;
|
700 |
-
|
701 |
-
}
|
702 |
-
|
703 |
-
|
704 |
-
/*
|
705 |
-
* rule_match_page_parent
|
706 |
-
*
|
707 |
-
* @since 1.0.0
|
708 |
-
*/
|
709 |
-
|
710 |
-
function rule_match_page_parent( $match, $rule )
|
711 |
-
{
|
712 |
-
|
713 |
-
// validation
|
714 |
-
if( !$this->post_id )
|
715 |
-
{
|
716 |
-
return false;
|
717 |
-
}
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
$
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
-
|
752 |
-
|
753 |
-
|
754 |
-
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
return
|
796 |
-
}
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
$
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
|
813 |
-
|
814 |
-
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
|
837 |
-
|
838 |
-
|
839 |
-
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
|
879 |
-
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
|
911 |
-
|
912 |
-
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
919 |
-
|
920 |
-
|
921 |
-
|
922 |
-
|
923 |
-
|
924 |
-
|
925 |
-
|
926 |
-
|
927 |
-
|
928 |
-
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
933 |
-
|
934 |
-
|
935 |
-
|
936 |
-
|
937 |
-
|
938 |
-
|
939 |
-
|
940 |
-
|
941 |
-
|
942 |
-
|
943 |
-
|
944 |
-
|
945 |
-
|
946 |
-
|
947 |
-
|
948 |
-
|
949 |
-
|
950 |
-
|
951 |
-
|
952 |
-
|
953 |
-
|
954 |
-
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
|
961 |
-
|
962 |
-
|
963 |
-
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
|
979 |
-
|
980 |
-
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
1003 |
-
|
1004 |
-
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
|
1012 |
-
|
1013 |
-
|
1014 |
-
|
1015 |
-
|
1016 |
-
|
1017 |
-
|
1018 |
-
|
1019 |
-
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
|
1026 |
-
|
1027 |
-
|
1028 |
-
|
1029 |
-
|
1030 |
-
|
1031 |
-
|
1032 |
-
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
1036 |
-
|
1037 |
-
|
1038 |
-
|
1039 |
-
|
1040 |
-
|
1041 |
-
|
1042 |
-
|
1043 |
-
|
1044 |
-
|
1045 |
-
|
1046 |
-
|
1047 |
-
|
1048 |
-
|
1049 |
-
|
1050 |
-
|
1051 |
-
|
1052 |
-
|
1053 |
-
|
1054 |
-
|
1055 |
-
|
1056 |
-
|
1057 |
-
|
1058 |
-
|
1059 |
-
|
1060 |
-
|
1061 |
-
|
1062 |
-
|
1063 |
-
|
1064 |
-
|
1065 |
-
|
1066 |
-
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
-
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
1083 |
-
|
1084 |
-
|
1085 |
-
|
1086 |
-
|
1087 |
-
|
1088 |
-
|
1089 |
-
|
1090 |
-
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
|
1095 |
-
|
1096 |
-
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
1100 |
-
|
1101 |
-
|
1102 |
-
|
1103 |
-
|
1104 |
-
|
1105 |
-
|
1106 |
-
|
1107 |
-
|
1108 |
-
|
1109 |
-
|
1110 |
-
|
1111 |
-
|
1112 |
-
|
1113 |
-
|
1114 |
-
|
1115 |
-
|
1116 |
-
|
1117 |
-
|
1118 |
-
|
1119 |
-
|
1120 |
-
|
1121 |
-
|
1122 |
-
|
1123 |
-
|
1124 |
-
|
1125 |
-
|
1126 |
-
|
1127 |
-
|
1128 |
-
|
1129 |
-
|
1130 |
-
|
1131 |
-
|
1132 |
-
|
1133 |
-
|
1134 |
-
|
1135 |
-
|
1136 |
-
|
1137 |
-
|
1138 |
-
|
1139 |
-
|
1140 |
-
|
1141 |
-
|
1142 |
-
|
1143 |
-
|
1144 |
-
|
1145 |
-
|
1146 |
-
|
1147 |
-
|
1148 |
-
|
1149 |
-
|
1150 |
-
|
1151 |
-
if( strlen($search_url) > 0 && strpos($search_url, trim($rule['value'])) !== false )
|
1152 |
-
return ($rule['operator'] == "==");
|
1153 |
-
else
|
1154 |
-
return !($rule['operator'] == "==");
|
1155 |
-
|
1156 |
-
}
|
1157 |
}
|
1 |
+
<?php
|
2 |
+
use Jaybizzle\CrawlerDetect\CrawlerDetect;
|
3 |
+
/*
|
4 |
+
* Spu Rules
|
5 |
+
* Class that will compare rules and determine if popup needs to show
|
6 |
+
* @since: 2.0
|
7 |
+
*/
|
8 |
+
class Spu_Rules
|
9 |
+
{
|
10 |
+
/**
|
11 |
+
* post id used to check rules
|
12 |
+
* @var int
|
13 |
+
*/
|
14 |
+
protected $post_id;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* referrer using in ajax calls
|
18 |
+
* @var string
|
19 |
+
*/
|
20 |
+
protected $referrer;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Is category using in ajax calls
|
24 |
+
* @var boolean
|
25 |
+
*/
|
26 |
+
protected $is_category = false;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Is archive using in ajax calls
|
30 |
+
* @var boolean
|
31 |
+
*/
|
32 |
+
protected $is_archive = false;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Is searchu sed in ajax calls
|
36 |
+
* @var boolean
|
37 |
+
*/
|
38 |
+
protected $is_search = false;
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Holds current url
|
42 |
+
* @var string
|
43 |
+
*/
|
44 |
+
protected $current_url;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Holds query string
|
48 |
+
* @var
|
49 |
+
*/
|
50 |
+
protected $query_string;
|
51 |
+
|
52 |
+
/*
|
53 |
+
* __construct
|
54 |
+
* Add all the filters to use later
|
55 |
+
*/
|
56 |
+
|
57 |
+
function __construct()
|
58 |
+
{
|
59 |
+
global $post;
|
60 |
+
|
61 |
+
// User
|
62 |
+
add_filter('spu/rules/rule_match/user_type', array($this, 'rule_match_user_type'), 10, 2);
|
63 |
+
add_filter('spu/rules/rule_match/logged_user', array($this, 'rule_match_logged_user'), 10, 2);
|
64 |
+
add_filter('spu/rules/rule_match/left_comment', array($this, 'rule_match_left_comment'), 10, 2);
|
65 |
+
add_filter('spu/rules/rule_match/search_engine', array($this, 'rule_match_search_engine'), 10, 2);
|
66 |
+
add_filter('spu/rules/rule_match/same_site', array($this, 'rule_match_same_site'), 10, 2);
|
67 |
+
|
68 |
+
// Post
|
69 |
+
add_filter('spu/rules/rule_match/post_type', array($this, 'rule_match_post_type'), 10, 2);
|
70 |
+
add_filter('spu/rules/rule_match/post_id', array($this, 'rule_match_post'), 10, 2);
|
71 |
+
add_filter('spu/rules/rule_match/post', array($this, 'rule_match_post'), 10, 2);
|
72 |
+
add_filter('spu/rules/rule_match/post_category', array($this, 'rule_match_post_category'), 10, 2);
|
73 |
+
add_filter('spu/rules/rule_match/post_format', array($this, 'rule_match_post_format'), 10, 2);
|
74 |
+
add_filter('spu/rules/rule_match/post_status', array($this, 'rule_match_post_status'), 10, 2);
|
75 |
+
add_filter('spu/rules/rule_match/taxonomy', array($this, 'rule_match_taxonomy'), 10, 2);
|
76 |
+
|
77 |
+
// Page
|
78 |
+
add_filter('spu/rules/rule_match/page', array($this, 'rule_match_post'), 10, 2);
|
79 |
+
add_filter('spu/rules/rule_match/page_type', array($this, 'rule_match_page_type'), 10, 2);
|
80 |
+
add_filter('spu/rules/rule_match/page_parent', array($this, 'rule_match_page_parent'), 10, 2);
|
81 |
+
add_filter('spu/rules/rule_match/page_template', array($this, 'rule_match_page_template'), 10, 2);
|
82 |
+
|
83 |
+
//Other
|
84 |
+
add_filter('spu/rules/rule_match/mobiles', array($this, 'rule_match_mobiles'), 10, 2);
|
85 |
+
add_filter('spu/rules/rule_match/tablets', array($this, 'rule_match_tablets'), 10, 2);
|
86 |
+
add_filter('spu/rules/rule_match/desktop', array($this, 'rule_match_desktop'), 10, 2);
|
87 |
+
add_filter('spu/rules/rule_match/referrer', array($this, 'rule_match_referrer'), 10, 2);
|
88 |
+
add_filter('spu/rules/rule_match/crawlers', array($this, 'rule_match_crawlers'), 10, 2);
|
89 |
+
add_filter('spu/rules/rule_match/browser', array($this, 'rule_match_browser'), 10, 2);
|
90 |
+
add_filter('spu/rules/rule_match/query_string', array($this, 'rule_match_query_string'), 10, 2);
|
91 |
+
add_filter('spu/rules/rule_match/custom_url', array($this, 'rule_match_custom_url'), 10, 2);
|
92 |
+
add_filter('spu/rules/rule_match/keyword_url', array($this, 'rule_match_keyword_url'), 10, 2);
|
93 |
+
|
94 |
+
$this->post_id = get_queried_object_id();
|
95 |
+
$this->referrer = isset($_SERVER['HTTP_REFERER']) && !defined('DOING_AJAX') ? $_SERVER['HTTP_REFERER'] : '';
|
96 |
+
$this->query_string = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '';
|
97 |
+
$this->current_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
|
98 |
+
|
99 |
+
|
100 |
+
if( defined('DOING_AJAX') ) {
|
101 |
+
|
102 |
+
if( isset( $_REQUEST['pid'] ) ) {
|
103 |
+
$this->post_id = $_REQUEST['pid'];
|
104 |
+
}
|
105 |
+
if( !empty( $_REQUEST['referrer'] ) ) {
|
106 |
+
$this->referrer = $_REQUEST['referrer'];
|
107 |
+
}
|
108 |
+
if( !empty( $_REQUEST['current_url'] ) ) {
|
109 |
+
$this->current_url = $_REQUEST['current_url'];
|
110 |
+
}
|
111 |
+
if( !empty( $_REQUEST['query_string'] ) ) {
|
112 |
+
$this->query_string = $_REQUEST['query_string'];
|
113 |
+
}
|
114 |
+
if( !empty( $_REQUEST['is_category'] ) ) {
|
115 |
+
$this->is_category = true;
|
116 |
+
}
|
117 |
+
if( !empty( $_REQUEST['is_archive'] ) ) {
|
118 |
+
$this->is_archive = true;
|
119 |
+
}
|
120 |
+
if( !empty( $_REQUEST['is_search'] ) ) {
|
121 |
+
$this->is_search = true;
|
122 |
+
}
|
123 |
+
}
|
124 |
+
|
125 |
+
}
|
126 |
+
|
127 |
+
|
128 |
+
/*
|
129 |
+
* check_rules
|
130 |
+
*
|
131 |
+
* @since 1.0.0
|
132 |
+
*/
|
133 |
+
|
134 |
+
function check_rules( $rules = '' )
|
135 |
+
{
|
136 |
+
|
137 |
+
//if no rules, add the box
|
138 |
+
$add_box = true;
|
139 |
+
|
140 |
+
if( !empty( $rules ) ) {
|
141 |
+
// vars
|
142 |
+
$add_box = false;
|
143 |
+
|
144 |
+
|
145 |
+
foreach( $rules as $group_id => $group ) {
|
146 |
+
// start of as true, this way, any rule that doesn't match will cause this varaible to false
|
147 |
+
$match_group = true;
|
148 |
+
|
149 |
+
if( is_array($group) )
|
150 |
+
{
|
151 |
+
|
152 |
+
foreach( $group as $rule_id => $rule )
|
153 |
+
{
|
154 |
+
|
155 |
+
// $match = true / false
|
156 |
+
$match = apply_filters( 'spu/rules/rule_match/' . $rule['param'] , false, $rule );
|
157 |
+
|
158 |
+
if( !$match )
|
159 |
+
{
|
160 |
+
$match_group = false;
|
161 |
+
// if one rule fails we don't need to check the rest of the rules in the group
|
162 |
+
// that way if we add geo rules down it won't get executed and will save credits
|
163 |
+
break;
|
164 |
+
}
|
165 |
+
|
166 |
+
}
|
167 |
+
}
|
168 |
+
|
169 |
+
|
170 |
+
// all rules must havematched!
|
171 |
+
if( $match_group )
|
172 |
+
{
|
173 |
+
$add_box = true;
|
174 |
+
}
|
175 |
+
|
176 |
+
}
|
177 |
+
|
178 |
+
|
179 |
+
}
|
180 |
+
|
181 |
+
|
182 |
+
return $add_box;
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* [rule_match_logged_user description]
|
187 |
+
* @param bool $match false default
|
188 |
+
* @param array $rule rule to compare
|
189 |
+
* @return boolean true if match
|
190 |
+
*/
|
191 |
+
function rule_match_logged_user( $match, $rule ) {
|
192 |
+
|
193 |
+
if ( $rule['operator'] == "==" ) {
|
194 |
+
|
195 |
+
return is_user_logged_in();
|
196 |
+
|
197 |
+
} else {
|
198 |
+
|
199 |
+
return !is_user_logged_in();
|
200 |
+
|
201 |
+
}
|
202 |
+
|
203 |
+
}
|
204 |
+
|
205 |
+
/**
|
206 |
+
* [rule_match_mobiles description]
|
207 |
+
* @param bool $match false default
|
208 |
+
* @param array $rule rule to compare
|
209 |
+
* @return boolean true if match
|
210 |
+
*/
|
211 |
+
function rule_match_mobiles( $match, $rule ) {
|
212 |
+
|
213 |
+
$detect = new Mobile_Detect;
|
214 |
+
|
215 |
+
if ( $rule['operator'] == "==" ) {
|
216 |
+
|
217 |
+
return $detect->isMobile();
|
218 |
+
|
219 |
+
} else {
|
220 |
+
|
221 |
+
return !$detect->isMobile();
|
222 |
+
|
223 |
+
}
|
224 |
+
|
225 |
+
}
|
226 |
+
/**
|
227 |
+
* [rule_match_browser description]
|
228 |
+
* @param bool $match false default
|
229 |
+
* @param array $rule rule to compare
|
230 |
+
* @return boolean true if match
|
231 |
+
*/
|
232 |
+
function rule_match_browser( $match, $rule ) {
|
233 |
+
|
234 |
+
$detect = new Browser();
|
235 |
+
|
236 |
+
//check $detect $browsers for valid keys
|
237 |
+
if ( $rule['operator'] == "==" ) {
|
238 |
+
|
239 |
+
return $detect->getBrowser() == $rule['value'];
|
240 |
+
|
241 |
+
} else {
|
242 |
+
|
243 |
+
return $detect->getBrowser() != $rule['value'];
|
244 |
+
|
245 |
+
}
|
246 |
+
|
247 |
+
}
|
248 |
+
/**
|
249 |
+
* [rule_match_tablets description]
|
250 |
+
* @param bool $match false default
|
251 |
+
* @param array $rule rule to compare
|
252 |
+
* @return boolean true if match
|
253 |
+
*/
|
254 |
+
function rule_match_tablets( $match, $rule ) {
|
255 |
+
|
256 |
+
$detect = new Mobile_Detect;
|
257 |
+
|
258 |
+
if ( $rule['operator'] == "==" ) {
|
259 |
+
|
260 |
+
return $detect->isTablet();
|
261 |
+
|
262 |
+
} else {
|
263 |
+
|
264 |
+
return !$detect->isTablet();
|
265 |
+
|
266 |
+
}
|
267 |
+
|
268 |
+
}
|
269 |
+
/**
|
270 |
+
* [rule_match_desktop description]
|
271 |
+
* @param bool $match false default
|
272 |
+
* @param array $rule rule to compare
|
273 |
+
* @return boolean true if match
|
274 |
+
*/
|
275 |
+
function rule_match_desktop( $match, $rule ) {
|
276 |
+
|
277 |
+
$detect = new Mobile_Detect;
|
278 |
+
|
279 |
+
if ( $rule['operator'] == "==" ) {
|
280 |
+
|
281 |
+
return ( ! $detect->isTablet() && ! $detect->isMobile() );
|
282 |
+
|
283 |
+
} else {
|
284 |
+
|
285 |
+
return ( $detect->isTablet() || $detect->isMobile() );
|
286 |
+
|
287 |
+
}
|
288 |
+
|
289 |
+
}
|
290 |
+
|
291 |
+
/**
|
292 |
+
* [rule_match_left_comment description]
|
293 |
+
* @param bool $match false default
|
294 |
+
* @param array $rule rule to compare
|
295 |
+
* @return boolean true if match
|
296 |
+
*/
|
297 |
+
function rule_match_left_comment( $match, $rule ) {
|
298 |
+
|
299 |
+
if ( $rule['operator'] == "==" ) {
|
300 |
+
|
301 |
+
return !empty( $_COOKIE['comment_author_'.COOKIEHASH] );
|
302 |
+
|
303 |
+
} else {
|
304 |
+
|
305 |
+
return empty( $_COOKIE['comment_author_'.COOKIEHASH] );
|
306 |
+
|
307 |
+
}
|
308 |
+
|
309 |
+
}
|
310 |
+
/**
|
311 |
+
* [rule_match_search_engine description]
|
312 |
+
* @param bool $match false default
|
313 |
+
* @param array $rule rule to compare
|
314 |
+
* @return boolean true if match
|
315 |
+
*/
|
316 |
+
function rule_match_search_engine( $match, $rule ) {
|
317 |
+
|
318 |
+
$ref = $this->referrer;
|
319 |
+
|
320 |
+
$SE = apply_filters( 'spu/rules/search_engines', array('/search?', '.google.', 'web.info.com', 'search.', 'del.icio.us/search', 'soso.com', '/search/', '.yahoo.', '.bing.' ) );
|
321 |
+
|
322 |
+
foreach ($SE as $url) {
|
323 |
+
if ( strpos( $ref,$url ) !==false ){
|
324 |
+
|
325 |
+
return $rule['operator'] == "==" ? true : false;
|
326 |
+
}
|
327 |
+
}
|
328 |
+
|
329 |
+
return $rule['operator'] == "==" ? false : true;
|
330 |
+
|
331 |
+
}
|
332 |
+
|
333 |
+
/**
|
334 |
+
* Check for user referrer
|
335 |
+
* @param bool $match false default
|
336 |
+
* @param array $rule rule to compare
|
337 |
+
* @return boolean true if match
|
338 |
+
*/
|
339 |
+
function rule_match_referrer( $match, $rule ) {
|
340 |
+
|
341 |
+
$ref = $this->referrer;
|
342 |
+
|
343 |
+
if ( strpos( $ref,$rule['value'] ) !==false ){
|
344 |
+
return $rule['operator'] == "==" ? true : false;
|
345 |
+
}
|
346 |
+
|
347 |
+
return $rule['operator'] == "==" ? false : true;
|
348 |
+
|
349 |
+
}
|
350 |
+
|
351 |
+
/**
|
352 |
+
* Check for crawlers / bots
|
353 |
+
* @param bool $match false default
|
354 |
+
* @param array $rule rule to compare
|
355 |
+
* @return boolean true if match
|
356 |
+
*/
|
357 |
+
function rule_match_crawlers( $match, $rule ) {
|
358 |
+
|
359 |
+
$detect = new CrawlerDetect;
|
360 |
+
|
361 |
+
if ( $rule['operator'] == "==" ) {
|
362 |
+
|
363 |
+
return $detect->isCrawler();
|
364 |
+
|
365 |
+
} else {
|
366 |
+
|
367 |
+
return !$detect->isCrawler();
|
368 |
+
|
369 |
+
}
|
370 |
+
|
371 |
+
}
|
372 |
+
|
373 |
+
/**
|
374 |
+
* Check for query string to see if matchs all given ones
|
375 |
+
* @param bool $match false default
|
376 |
+
* @param array $rule rule to compare
|
377 |
+
* @return boolean true if match
|
378 |
+
*/
|
379 |
+
function rule_match_query_string( $match, $rule ) {
|
380 |
+
|
381 |
+
|
382 |
+
$found = strpos($this->query_string, str_replace('?','', $rule['value'] ) ) > -1 ? true: false;
|
383 |
+
|
384 |
+
|
385 |
+
if ( $rule['operator'] == "==" )
|
386 |
+
return $found;
|
387 |
+
|
388 |
+
return ! $found;
|
389 |
+
|
390 |
+
}
|
391 |
+
|
392 |
+
/**
|
393 |
+
* [rule_match_same_site description]
|
394 |
+
* @param bool $match false default
|
395 |
+
* @param array $rule rule to compare
|
396 |
+
* @return boolean true if match
|
397 |
+
*/
|
398 |
+
function rule_match_same_site( $match, $rule ) {
|
399 |
+
|
400 |
+
|
401 |
+
$ref = $this->referrer;
|
402 |
+
|
403 |
+
$internal = str_replace( array( 'http://','https://' ), '', home_url() );
|
404 |
+
|
405 |
+
if( $rule['operator'] == "==" ) {
|
406 |
+
|
407 |
+
return !preg_match( '~' . $internal . '~i', $ref );
|
408 |
+
|
409 |
+
} else {
|
410 |
+
return preg_match( '~' . $internal . '~i', $ref );
|
411 |
+
|
412 |
+
}
|
413 |
+
|
414 |
+
}
|
415 |
+
|
416 |
+
/*
|
417 |
+
* rule_match_post_type
|
418 |
+
*
|
419 |
+
* @since 1.0.0
|
420 |
+
*/
|
421 |
+
|
422 |
+
function rule_match_post_type( $match, $rule )
|
423 |
+
{
|
424 |
+
|
425 |
+
|
426 |
+
$post_type = $this->get_post_type();
|
427 |
+
|
428 |
+
|
429 |
+
if( $rule['operator'] == "==" )
|
430 |
+
{
|
431 |
+
$match = ( $post_type === $rule['value'] );
|
432 |
+
}
|
433 |
+
elseif( $rule['operator'] == "!=" )
|
434 |
+
{
|
435 |
+
$match = ( $post_type !== $rule['value'] );
|
436 |
+
}
|
437 |
+
|
438 |
+
|
439 |
+
return $match;
|
440 |
+
}
|
441 |
+
|
442 |
+
|
443 |
+
/*
|
444 |
+
* rule_match_post
|
445 |
+
*
|
446 |
+
* @since 1.0.0
|
447 |
+
*/
|
448 |
+
|
449 |
+
function rule_match_post( $match, $rule )
|
450 |
+
{
|
451 |
+
|
452 |
+
$post_id = $this->post_id;
|
453 |
+
// in case multiple ids are passed
|
454 |
+
$ids = array_map('trim',explode(',',$rule['value']));
|
455 |
+
|
456 |
+
if($rule['operator'] == "==")
|
457 |
+
{
|
458 |
+
$match = in_array($post_id, $ids );
|
459 |
+
}
|
460 |
+
elseif($rule['operator'] == "!=")
|
461 |
+
{
|
462 |
+
$match = ! in_array($post_id, $ids );
|
463 |
+
}
|
464 |
+
|
465 |
+
return $match;
|
466 |
+
|
467 |
+
}
|
468 |
+
|
469 |
+
|
470 |
+
/*
|
471 |
+
* rule_match_page_type
|
472 |
+
*
|
473 |
+
* @since 1.0.0
|
474 |
+
*/
|
475 |
+
|
476 |
+
function rule_match_page_type( $match, $rule )
|
477 |
+
{
|
478 |
+
|
479 |
+
|
480 |
+
$post_id = $this->post_id;
|
481 |
+
|
482 |
+
$post = get_post( $post_id );
|
483 |
+
|
484 |
+
$post_parent = isset( $post->post_parent ) ? $post->post_parent : '';
|
485 |
+
|
486 |
+
$post_type = $this->get_post_type();
|
487 |
+
|
488 |
+
if( $rule['value'] == 'front_page') {
|
489 |
+
|
490 |
+
$front_page = (int) get_option('page_on_front');
|
491 |
+
|
492 |
+
if( $front_page !== 0 ) {
|
493 |
+
|
494 |
+
if($rule['operator'] == "==") {
|
495 |
+
|
496 |
+
$match = ( $front_page == $post_id );
|
497 |
+
|
498 |
+
} elseif($rule['operator'] == "!=") {
|
499 |
+
|
500 |
+
$match = ( $front_page != $post_id );
|
501 |
+
|
502 |
+
}
|
503 |
+
} else {
|
504 |
+
// if doing ajax is_home won't work so we do a workaround
|
505 |
+
if( defined( 'DOING_AJAX') ) {
|
506 |
+
|
507 |
+
$front_page = get_option( 'show_on_front' );
|
508 |
+
|
509 |
+
if($rule['operator'] == "==") {
|
510 |
+
|
511 |
+
$match = ( 'posts' == $front_page && $post_id == 0 );
|
512 |
+
|
513 |
+
} elseif($rule['operator'] == "!=") {
|
514 |
+
|
515 |
+
$match = !( 'posts' == $front_page && $post_id == 0 );
|
516 |
+
|
517 |
+
}
|
518 |
+
|
519 |
+
|
520 |
+
} else {
|
521 |
+
|
522 |
+
if($rule['operator'] == "==") {
|
523 |
+
|
524 |
+
$match = is_home();
|
525 |
+
|
526 |
+
} elseif($rule['operator'] == "!=") {
|
527 |
+
|
528 |
+
$match = !is_home();
|
529 |
+
|
530 |
+
}
|
531 |
+
}
|
532 |
+
|
533 |
+
}
|
534 |
+
|
535 |
+
}
|
536 |
+
elseif( $rule['value'] == 'category_page') {
|
537 |
+
|
538 |
+
if( defined( 'DOING_AJAX') ) {
|
539 |
+
if($rule['operator'] == "==") {
|
540 |
+
|
541 |
+
$match = $this->is_category;
|
542 |
+
|
543 |
+
} elseif($rule['operator'] == "!=") {
|
544 |
+
|
545 |
+
$match = !$this->is_category;
|
546 |
+
|
547 |
+
}
|
548 |
+
} else {
|
549 |
+
if ( $rule['operator'] == "==" ) {
|
550 |
+
|
551 |
+
$match = is_category();
|
552 |
+
|
553 |
+
} elseif ( $rule['operator'] == "!=" ) {
|
554 |
+
|
555 |
+
$match = ! is_category();
|
556 |
+
|
557 |
+
}
|
558 |
+
}
|
559 |
+
}
|
560 |
+
elseif( $rule['value'] == 'archive_page') {
|
561 |
+
if( defined( 'DOING_AJAX') ) {
|
562 |
+
if($rule['operator'] == "==") {
|
563 |
+
|
564 |
+
$match = $this->is_archive;
|
565 |
+
|
566 |
+
} elseif($rule['operator'] == "!=") {
|
567 |
+
|
568 |
+
$match = !$this->is_archive;
|
569 |
+
|
570 |
+
}
|
571 |
+
} else {
|
572 |
+
if ( $rule['operator'] == "==" ) {
|
573 |
+
|
574 |
+
$match = is_archive();
|
575 |
+
|
576 |
+
} elseif ( $rule['operator'] == "!=" ) {
|
577 |
+
|
578 |
+
$match = ! is_archive();
|
579 |
+
|
580 |
+
}
|
581 |
+
}
|
582 |
+
}
|
583 |
+
elseif( $rule['value'] == 'search_page') {
|
584 |
+
if( defined( 'DOING_AJAX') ) {
|
585 |
+
if($rule['operator'] == "==") {
|
586 |
+
|
587 |
+
$match = $this->is_search;
|
588 |
+
|
589 |
+
} elseif($rule['operator'] == "!=") {
|
590 |
+
|
591 |
+
$match = !$this->is_search;
|
592 |
+
|
593 |
+
}
|
594 |
+
} else {
|
595 |
+
if ( $rule['operator'] == "==" ) {
|
596 |
+
|
597 |
+
$match = is_search();
|
598 |
+
|
599 |
+
} elseif ( $rule['operator'] == "!=" ) {
|
600 |
+
|
601 |
+
$match = ! is_search();
|
602 |
+
|
603 |
+
}
|
604 |
+
}
|
605 |
+
}
|
606 |
+
elseif( $rule['value'] == 'posts_page') {
|
607 |
+
|
608 |
+
$posts_page = (int) get_option('page_for_posts');
|
609 |
+
|
610 |
+
if( $posts_page !== 0 ) {
|
611 |
+
if($rule['operator'] == "==") {
|
612 |
+
|
613 |
+
$match = ( $posts_page == $post_id );
|
614 |
+
|
615 |
+
} elseif($rule['operator'] == "!=") {
|
616 |
+
|
617 |
+
$match = ( $posts_page != $post_id );
|
618 |
+
|
619 |
+
}
|
620 |
+
} else {
|
621 |
+
// if doing ajax is_home won't work so we do a workaround
|
622 |
+
if( defined( 'DOING_AJAX') ) {
|
623 |
+
|
624 |
+
|
625 |
+
if($rule['operator'] == "==") {
|
626 |
+
|
627 |
+
$match = ( 0 === $posts_page && $post_id == 0 );
|
628 |
+
|
629 |
+
} elseif($rule['operator'] == "!=") {
|
630 |
+
|
631 |
+
$match = !( 0 === $posts_page && $post_id == 0 );
|
632 |
+
|
633 |
+
}
|
634 |
+
|
635 |
+
|
636 |
+
} else {
|
637 |
+
if($rule['operator'] == "==") {
|
638 |
+
|
639 |
+
$match = is_home();
|
640 |
+
|
641 |
+
} elseif($rule['operator'] == "!=") {
|
642 |
+
|
643 |
+
$match = !is_home();
|
644 |
+
|
645 |
+
}
|
646 |
+
}
|
647 |
+
}
|
648 |
+
|
649 |
+
}
|
650 |
+
elseif( $rule['value'] == 'top_level') {
|
651 |
+
|
652 |
+
|
653 |
+
if($rule['operator'] == "==")
|
654 |
+
{
|
655 |
+
$match = ( $post_parent == 0 );
|
656 |
+
}
|
657 |
+
elseif($rule['operator'] == "!=")
|
658 |
+
{
|
659 |
+
$match = ( $post_parent != 0 );
|
660 |
+
}
|
661 |
+
|
662 |
+
}
|
663 |
+
elseif( $rule['value'] == 'parent') {
|
664 |
+
|
665 |
+
$children = get_pages(array(
|
666 |
+
'post_type' => $post_type,
|
667 |
+
'child_of' => $post_id,
|
668 |
+
));
|
669 |
+
|
670 |
+
|
671 |
+
if($rule['operator'] == "==") {
|
672 |
+
$match = ( count($children) > 0 );
|
673 |
+
}
|
674 |
+
elseif($rule['operator'] == "!=")
|
675 |
+
{
|
676 |
+
$match = ( count($children) == 0 );
|
677 |
+
}
|
678 |
+
|
679 |
+
}
|
680 |
+
elseif( $rule['value'] == 'child') {
|
681 |
+
|
682 |
+
|
683 |
+
|
684 |
+
if($rule['operator'] == "==")
|
685 |
+
{
|
686 |
+
$match = ( $post_parent != 0 );
|
687 |
+
}
|
688 |
+
elseif($rule['operator'] == "!=")
|
689 |
+
{
|
690 |
+
$match = ( $post_parent == 0 );
|
691 |
+
}
|
692 |
+
|
693 |
+
} elseif( $rule['value'] == 'all_pages') {
|
694 |
+
|
695 |
+
$match = true;
|
696 |
+
|
697 |
+
}
|
698 |
+
|
699 |
+
return $match;
|
700 |
+
|
701 |
+
}
|
702 |
+
|
703 |
+
|
704 |
+
/*
|
705 |
+
* rule_match_page_parent
|
706 |
+
*
|
707 |
+
* @since 1.0.0
|
708 |
+
*/
|
709 |
+
|
710 |
+
function rule_match_page_parent( $match, $rule )
|
711 |
+
{
|
712 |
+
|
713 |
+
// validation
|
714 |
+
if( !$this->post_id )
|
715 |
+
{
|
716 |
+
return false;
|
717 |
+
}
|
718 |
+
|
719 |
+
// vars
|
720 |
+
$post = get_post( $this->post_id );
|
721 |
+
|
722 |
+
$post_parent = $post->post_parent;
|
723 |
+
|
724 |
+
if($rule['operator'] == "==")
|
725 |
+
{
|
726 |
+
$match = ( $post_parent == $rule['value'] );
|
727 |
+
}
|
728 |
+
elseif($rule['operator'] == "!=")
|
729 |
+
{
|
730 |
+
$match = ( $post_parent != $rule['value'] );
|
731 |
+
}
|
732 |
+
|
733 |
+
|
734 |
+
return $match;
|
735 |
+
|
736 |
+
}
|
737 |
+
|
738 |
+
|
739 |
+
/*
|
740 |
+
* rule_match_page_template
|
741 |
+
*
|
742 |
+
* @since 1.0.0
|
743 |
+
*/
|
744 |
+
|
745 |
+
function rule_match_page_template( $match, $rule )
|
746 |
+
{
|
747 |
+
|
748 |
+
|
749 |
+
$page_template = get_post_meta( $this->post_id, '_wp_page_template', true );
|
750 |
+
|
751 |
+
|
752 |
+
if( ! $page_template ) {
|
753 |
+
|
754 |
+
if( 'page' == get_post_type( $this->post_id ) ) {
|
755 |
+
|
756 |
+
$page_template = "default";
|
757 |
+
|
758 |
+
}
|
759 |
+
}
|
760 |
+
|
761 |
+
|
762 |
+
if($rule['operator'] == "==")
|
763 |
+
{
|
764 |
+
$match = ( $page_template === $rule['value'] );
|
765 |
+
}
|
766 |
+
elseif($rule['operator'] == "!=")
|
767 |
+
{
|
768 |
+
$match = ( $page_template !== $rule['value'] );
|
769 |
+
}
|
770 |
+
|
771 |
+
return $match;
|
772 |
+
|
773 |
+
}
|
774 |
+
|
775 |
+
|
776 |
+
/*
|
777 |
+
* rule_match_post_category
|
778 |
+
*
|
779 |
+
* @since 1.0.0
|
780 |
+
*/
|
781 |
+
|
782 |
+
function rule_match_post_category( $match, $rule )
|
783 |
+
{
|
784 |
+
|
785 |
+
|
786 |
+
// validate
|
787 |
+
if( !$this->post_id )
|
788 |
+
{
|
789 |
+
return false;
|
790 |
+
}
|
791 |
+
//check if we are in category page
|
792 |
+
if( ($cat = get_category($this->post_id) ) ) {
|
793 |
+
if($rule['operator'] == "==")
|
794 |
+
return $rule['value'] == $this->post_id;
|
795 |
+
return !($rule['value'] == $this->post_id);
|
796 |
+
}// otherwise think this of a single post page
|
797 |
+
|
798 |
+
|
799 |
+
// post type
|
800 |
+
$post_type = $this->get_post_type();
|
801 |
+
|
802 |
+
// vars
|
803 |
+
$taxonomies = get_object_taxonomies( $post_type );
|
804 |
+
|
805 |
+
$all_terms = get_the_terms( $this->post_id, 'category' );
|
806 |
+
if($all_terms)
|
807 |
+
{
|
808 |
+
foreach($all_terms as $all_term)
|
809 |
+
{
|
810 |
+
$terms[] = $all_term->term_id;
|
811 |
+
}
|
812 |
+
}
|
813 |
+
|
814 |
+
// no terms at all?
|
815 |
+
if( empty($terms) )
|
816 |
+
{
|
817 |
+
// If no ters, this is a new post and should be treated as if it has the "Uncategorized" (1) category ticked
|
818 |
+
if( is_array($taxonomies) && in_array('category', $taxonomies) )
|
819 |
+
{
|
820 |
+
$terms[] = '1';
|
821 |
+
}
|
822 |
+
}
|
823 |
+
|
824 |
+
|
825 |
+
if($rule['operator'] == "==")
|
826 |
+
{
|
827 |
+
$match = false;
|
828 |
+
|
829 |
+
if(!empty($terms))
|
830 |
+
{
|
831 |
+
if( in_array($rule['value'], $terms) )
|
832 |
+
{
|
833 |
+
$match = true;
|
834 |
+
}
|
835 |
+
}
|
836 |
+
|
837 |
+
}
|
838 |
+
elseif($rule['operator'] == "!=")
|
839 |
+
{
|
840 |
+
$match = true;
|
841 |
+
|
842 |
+
if($terms)
|
843 |
+
{
|
844 |
+
if( in_array($rule['value'], $terms) )
|
845 |
+
{
|
846 |
+
$match = false;
|
847 |
+
}
|
848 |
+
}
|
849 |
+
|
850 |
+
}
|
851 |
+
|
852 |
+
|
853 |
+
return $match;
|
854 |
+
|
855 |
+
}
|
856 |
+
|
857 |
+
|
858 |
+
/*
|
859 |
+
* rule_match_user_type
|
860 |
+
*
|
861 |
+
* @since 1.0.0
|
862 |
+
*/
|
863 |
+
|
864 |
+
function rule_match_user_type( $match, $rule )
|
865 |
+
{
|
866 |
+
$user = wp_get_current_user();
|
867 |
+
|
868 |
+
if( $rule['operator'] == "==" )
|
869 |
+
{
|
870 |
+
if( $rule['value'] == 'super_admin' )
|
871 |
+
{
|
872 |
+
$match = is_super_admin( $user->ID );
|
873 |
+
}
|
874 |
+
else
|
875 |
+
{
|
876 |
+
$match = in_array( $rule['value'], $user->roles );
|
877 |
+
}
|
878 |
+
|
879 |
+
}
|
880 |
+
elseif( $rule['operator'] == "!=" )
|
881 |
+
{
|
882 |
+
if( $rule['value'] == 'super_admin' )
|
883 |
+
{
|
884 |
+
$match = !is_super_admin( $user->ID );
|
885 |
+
}
|
886 |
+
else
|
887 |
+
{
|
888 |
+
$match = ( ! in_array( $rule['value'], $user->roles ) );
|
889 |
+
}
|
890 |
+
}
|
891 |
+
|
892 |
+
return $match;
|
893 |
+
|
894 |
+
}
|
895 |
+
|
896 |
+
|
897 |
+
|
898 |
+
|
899 |
+
/*
|
900 |
+
* rule_match_post_format
|
901 |
+
*
|
902 |
+
* @since 1.0.0
|
903 |
+
*/
|
904 |
+
|
905 |
+
function rule_match_post_format( $match, $rule )
|
906 |
+
{
|
907 |
+
|
908 |
+
|
909 |
+
// validate
|
910 |
+
if( !$this->post_id )
|
911 |
+
{
|
912 |
+
return false;
|
913 |
+
}
|
914 |
+
|
915 |
+
$post_type = $this->get_post_type();
|
916 |
+
|
917 |
+
|
918 |
+
// does post_type support 'post-format'
|
919 |
+
if( post_type_supports( $post_type, 'post-formats' ) )
|
920 |
+
{
|
921 |
+
$post_format = get_post_format( $this->post_id );
|
922 |
+
|
923 |
+
if( $post_format === false )
|
924 |
+
{
|
925 |
+
$post_format = 'standard';
|
926 |
+
}
|
927 |
+
}
|
928 |
+
|
929 |
+
|
930 |
+
|
931 |
+
if($rule['operator'] == "==")
|
932 |
+
{
|
933 |
+
$match = ( $post_format === $rule['value'] );
|
934 |
+
|
935 |
+
}
|
936 |
+
elseif($rule['operator'] == "!=")
|
937 |
+
{
|
938 |
+
$match = ( $post_format !== $rule['value'] );
|
939 |
+
}
|
940 |
+
|
941 |
+
|
942 |
+
|
943 |
+
return $match;
|
944 |
+
|
945 |
+
}
|
946 |
+
|
947 |
+
|
948 |
+
/*
|
949 |
+
* rule_match_post_status
|
950 |
+
*
|
951 |
+
* @since 1.0.0
|
952 |
+
*/
|
953 |
+
|
954 |
+
function rule_match_post_status( $match, $rule )
|
955 |
+
{
|
956 |
+
|
957 |
+
|
958 |
+
// validate
|
959 |
+
if( !$this->post_id )
|
960 |
+
{
|
961 |
+
return false;
|
962 |
+
}
|
963 |
+
|
964 |
+
|
965 |
+
// vars
|
966 |
+
$post_status = get_post_status( $this->post_id );
|
967 |
+
|
968 |
+
|
969 |
+
// auto-draft = draft
|
970 |
+
if( $post_status == 'auto-draft' )
|
971 |
+
{
|
972 |
+
$post_status = 'draft';
|
973 |
+
}
|
974 |
+
|
975 |
+
|
976 |
+
// match
|
977 |
+
if($rule['operator'] == "==")
|
978 |
+
{
|
979 |
+
$match = ( $post_status === $rule['value'] );
|
980 |
+
|
981 |
+
}
|
982 |
+
elseif($rule['operator'] == "!=")
|
983 |
+
{
|
984 |
+
$match = ( $post_status !== $rule['value'] );
|
985 |
+
}
|
986 |
+
|
987 |
+
|
988 |
+
// return
|
989 |
+
return $match;
|
990 |
+
|
991 |
+
}
|
992 |
+
|
993 |
+
|
994 |
+
/*
|
995 |
+
* rule_match_taxonomy
|
996 |
+
*
|
997 |
+
* @since 1.0.0
|
998 |
+
*/
|
999 |
+
|
1000 |
+
function rule_match_taxonomy( $match, $rule )
|
1001 |
+
{
|
1002 |
+
|
1003 |
+
// validate
|
1004 |
+
if( !$this->post_id )
|
1005 |
+
{
|
1006 |
+
return false;
|
1007 |
+
}
|
1008 |
+
// if we are inside taxonomy archive page (Ajax mode)
|
1009 |
+
if( $this->is_archive ){
|
1010 |
+
if($rule['operator'] == "==")
|
1011 |
+
return $rule['value'] == $this->post_id;
|
1012 |
+
else
|
1013 |
+
return $rule['value'] != $this->post_id;
|
1014 |
+
}
|
1015 |
+
|
1016 |
+
$qo = get_queried_object();
|
1017 |
+
|
1018 |
+
// if we are inside taxonomy archive page
|
1019 |
+
if( isset($qo->term_id) && $qo->term_id == $this->post_id ){
|
1020 |
+
if($rule['operator'] == "==")
|
1021 |
+
return $rule['value'] == $qo->term_id;
|
1022 |
+
else
|
1023 |
+
return $rule['value'] != $qo->term_id;
|
1024 |
+
} else {
|
1025 |
+
// post type
|
1026 |
+
$post_type = $this->get_post_type();
|
1027 |
+
// vars
|
1028 |
+
$taxonomies = get_object_taxonomies( $post_type );
|
1029 |
+
}
|
1030 |
+
|
1031 |
+
$terms = array();
|
1032 |
+
|
1033 |
+
|
1034 |
+
if( is_array($taxonomies) )
|
1035 |
+
{
|
1036 |
+
foreach( $taxonomies as $tax )
|
1037 |
+
{
|
1038 |
+
$all_terms = get_the_terms( $this->post_id, $tax );
|
1039 |
+
if($all_terms)
|
1040 |
+
{
|
1041 |
+
foreach($all_terms as $all_term)
|
1042 |
+
{
|
1043 |
+
$terms[] = $all_term->term_id;
|
1044 |
+
}
|
1045 |
+
}
|
1046 |
+
}
|
1047 |
+
}
|
1048 |
+
|
1049 |
+
// no terms at all?
|
1050 |
+
if( empty($terms) )
|
1051 |
+
{
|
1052 |
+
// If no ters, this is a new post and should be treated as if it has the "Uncategorized" (1) category ticked
|
1053 |
+
if( is_array($taxonomies) && in_array('category', $taxonomies) )
|
1054 |
+
{
|
1055 |
+
$terms[] = '1';
|
1056 |
+
}
|
1057 |
+
}
|
1058 |
+
|
1059 |
+
|
1060 |
+
|
1061 |
+
if($rule['operator'] == "==")
|
1062 |
+
{
|
1063 |
+
$match = false;
|
1064 |
+
|
1065 |
+
if($terms)
|
1066 |
+
{
|
1067 |
+
if( in_array($rule['value'], $terms) )
|
1068 |
+
{
|
1069 |
+
$match = true;
|
1070 |
+
}
|
1071 |
+
}
|
1072 |
+
|
1073 |
+
}
|
1074 |
+
elseif($rule['operator'] == "!=")
|
1075 |
+
{
|
1076 |
+
$match = true;
|
1077 |
+
|
1078 |
+
if($terms)
|
1079 |
+
{
|
1080 |
+
if( in_array($rule['value'], $terms) )
|
1081 |
+
{
|
1082 |
+
$match = false;
|
1083 |
+
}
|
1084 |
+
}
|
1085 |
+
|
1086 |
+
}
|
1087 |
+
|
1088 |
+
|
1089 |
+
return $match;
|
1090 |
+
|
1091 |
+
}
|
1092 |
+
|
1093 |
+
/**
|
1094 |
+
* Helper function to get post type
|
1095 |
+
* @since 1.2.3
|
1096 |
+
* @return string
|
1097 |
+
*
|
1098 |
+
*/
|
1099 |
+
function get_post_type(){
|
1100 |
+
global $wp_query;
|
1101 |
+
|
1102 |
+
$post_type = isset( $wp_query->query_vars['post_type'] ) ? $wp_query->query_vars['post_type'] : '';
|
1103 |
+
|
1104 |
+
$post_type = empty( $post_type ) ? get_post_type($this->post_id) : get_post_type();
|
1105 |
+
|
1106 |
+
return $post_type;
|
1107 |
+
}
|
1108 |
+
|
1109 |
+
/**
|
1110 |
+
* Check for custom url
|
1111 |
+
*
|
1112 |
+
* @param array $rule rule to compare
|
1113 |
+
*
|
1114 |
+
* @return boolean true if match
|
1115 |
+
*/
|
1116 |
+
public function rule_match_custom_url( $match, $rule ) {
|
1117 |
+
|
1118 |
+
$wide_search = strpos($rule['value'],'*') !== false ? true : false;
|
1119 |
+
|
1120 |
+
if( $wide_search ) {
|
1121 |
+
if( strpos( $this->current_url, trim($rule['value'],'*') ) === 0 ) {
|
1122 |
+
return ( $rule['operator'] == "==" );
|
1123 |
+
}
|
1124 |
+
return ! ( $rule['operator'] == "==" );
|
1125 |
+
}
|
1126 |
+
|
1127 |
+
if( $rule['operator'] == "==" )
|
1128 |
+
return ($this->current_url == $rule['value']);
|
1129 |
+
|
1130 |
+
return ! ($this->current_url == $rule['value']);
|
1131 |
+
|
1132 |
+
}
|
1133 |
+
|
1134 |
+
/**
|
1135 |
+
* Check for keyword url
|
1136 |
+
*
|
1137 |
+
* @param array $rule rule to compare
|
1138 |
+
*
|
1139 |
+
* @return boolean true if match
|
1140 |
+
*/
|
1141 |
+
function rule_match_keyword_url($match, $rule) {
|
1142 |
+
|
1143 |
+
$search_url = str_replace(site_url(), '', $this->current_url);
|
1144 |
+
|
1145 |
+
if( strlen($search_url) > 0 && strpos($search_url, trim($rule['value'])) !== false )
|
1146 |
+
return ($rule['operator'] == "==");
|
1147 |
+
else
|
1148 |
+
return !($rule['operator'] == "==");
|
1149 |
+
|
1150 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
1151 |
}
|
uninstall.php
CHANGED
@@ -1,22 +1,22 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Uninstall file. If selected all data from popups plugin will be deleted
|
4 |
-
*/
|
5 |
-
if( !defined( 'ABSPATH') && !defined('WP_UNINSTALL_PLUGIN') ) exit();
|
6 |
-
|
7 |
-
$opts = get_option( 'spu_settings' );
|
8 |
-
|
9 |
-
if( isset( $opts['uninstall']) && '1' == $opts['uninstall'] ) {
|
10 |
-
// delete settings
|
11 |
-
delete_option('spu_settings');
|
12 |
-
delete_option('spu-version');
|
13 |
-
// delete popups
|
14 |
-
global $wpdb;
|
15 |
-
// IF wpml is active and spucpt is translated get correct ids for language
|
16 |
-
$ids = $wpdb->get_results( "SELECT ID FROM $wpdb->posts WHERE post_type='spucpt'");
|
17 |
-
if( !empty( $ids ) ) {
|
18 |
-
foreach( $ids as $p ) {
|
19 |
-
wp_delete_post( $p->ID, true);
|
20 |
-
}
|
21 |
-
}
|
22 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Uninstall file. If selected all data from popups plugin will be deleted
|
4 |
+
*/
|
5 |
+
if( !defined( 'ABSPATH') && !defined('WP_UNINSTALL_PLUGIN') ) exit();
|
6 |
+
|
7 |
+
$opts = get_option( 'spu_settings' );
|
8 |
+
|
9 |
+
if( isset( $opts['uninstall']) && '1' == $opts['uninstall'] ) {
|
10 |
+
// delete settings
|
11 |
+
delete_option('spu_settings');
|
12 |
+
delete_option('spu-version');
|
13 |
+
// delete popups
|
14 |
+
global $wpdb;
|
15 |
+
// IF wpml is active and spucpt is translated get correct ids for language
|
16 |
+
$ids = $wpdb->get_results( "SELECT ID FROM $wpdb->posts WHERE post_type='spucpt'");
|
17 |
+
if( !empty( $ids ) ) {
|
18 |
+
foreach( $ids as $p ) {
|
19 |
+
wp_delete_post( $p->ID, true);
|
20 |
+
}
|
21 |
+
}
|
22 |
+
}
|
vendor/autoload.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// autoload.php @generated by Composer
|
4 |
-
|
5 |
-
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
-
|
7 |
-
return ComposerAutoloaderInit28a0833b49959d9021dc40cd45dfc52b::getLoader();
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload.php @generated by Composer
|
4 |
+
|
5 |
+
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
+
|
7 |
+
return ComposerAutoloaderInit28a0833b49959d9021dc40cd45dfc52b::getLoader();
|
vendor/cbschuld/browser.php/.travis.yml
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
language: php
|
2 |
-
|
3 |
-
php:
|
4 |
-
- 7.0
|
5 |
-
- 5.6
|
6 |
-
- 5.5
|
7 |
-
- 5.4
|
8 |
-
- 5.3
|
9 |
-
|
10 |
-
script: phpunit --configuration phpunit.xml.dist
|
1 |
+
language: php
|
2 |
+
|
3 |
+
php:
|
4 |
+
- 7.0
|
5 |
+
- 5.6
|
6 |
+
- 5.5
|
7 |
+
- 5.4
|
8 |
+
- 5.3
|
9 |
+
|
10 |
+
script: phpunit --configuration phpunit.xml.dist
|
vendor/cbschuld/browser.php/LICENSE.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
-
Copyright (c) 2013 Chris Schuld
|
2 |
-
|
3 |
-
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
4 |
-
|
5 |
-
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
6 |
-
|
7 |
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
1 |
+
Copyright (c) 2013 Chris Schuld
|
2 |
+
|
3 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
4 |
+
|
5 |
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
6 |
+
|
7 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
vendor/cbschuld/browser.php/README.md
CHANGED
@@ -1,149 +1,149 @@
|
|
1 |
-
Browser.php
|
2 |
-
=============
|
3 |
-
|
4 |
-
[![Build Status](https://travis-ci.org/cbschuld/Browser.php.png?branch=master)](https://travis-ci.org/cbschuld/Browser.php)
|
5 |
-
|
6 |
-
Helps detect the user's browser and platform at the PHP level via the user agent
|
7 |
-
|
8 |
-
|
9 |
-
Installation
|
10 |
-
============
|
11 |
-
|
12 |
-
To install, simply `require` the `Browser.php` file under `lib`.
|
13 |
-
|
14 |
-
You can also install it via `Composer` by using the [Packagist archive](https://packagist.org/packages/cbschuld/browser.php).
|
15 |
-
|
16 |
-
|
17 |
-
Background
|
18 |
-
============
|
19 |
-
|
20 |
-
Detecting the user's browser type and version is helpful in web applications that harness some of the newer bleeding edge concepts. With the browser type and version you can notify users about challenges they may experience and suggest they upgrade before using such application. Not a great idea on a large scale public site; but on a private application this type of check can be helpful.
|
21 |
-
|
22 |
-
In an active project of mine we have a pretty graphically intensive and visually appealing user interface which leverages a lot of transparent PNG files. Because we all know how great IE6 supports PNG files it was necessary for us to tell our users the lack of power their browser has in a kind way.
|
23 |
-
|
24 |
-
Searching for a way to do this at the PHP layer and not at the client layer was more of a challenge than I would have guessed; the only script available was written by Gary White and Gary no longer maintains this script because of reliability. I do agree 100% with Gary about the readability; however, there are realistic reasons to desire the user.s browser and browser version and if your visitor is not echoing a false user agent we can take an educated guess.
|
25 |
-
|
26 |
-
I based this solution off of Gary White.s original solution but added a few things:
|
27 |
-
|
28 |
-
I added the ability to view the return values as class constants to increase the readability
|
29 |
-
|
30 |
-
* Added version detectionf for edge via [pixelbacon](https://github.com/pixelbacon)
|
31 |
-
* Updated the version detection for Amaya
|
32 |
-
* Updated the version detection for Firefox
|
33 |
-
* Updated the version detection for Lynx
|
34 |
-
* Updated the version detection for WebTV
|
35 |
-
* Updated the version detection for NetPositive
|
36 |
-
* Updated the version detection for IE
|
37 |
-
* Updated the version detection for OmniWeb
|
38 |
-
* Updated the version detection for iCab
|
39 |
-
* Updated the version detection for Safari
|
40 |
-
* Added detection for Chrome
|
41 |
-
* Added detection for iPhone
|
42 |
-
* Added detection for robots
|
43 |
-
* Added detection for mobile devices
|
44 |
-
* Added detection for BlackBerry
|
45 |
-
* Added detection for iPhone
|
46 |
-
* Added detection for iPad
|
47 |
-
* Added detection for Android
|
48 |
-
* Removed Netscape checks
|
49 |
-
* Updated Safari to remove mobile devices (iPhone)
|
50 |
-
|
51 |
-
**This solution identifies the following Operating Systems:**
|
52 |
-
|
53 |
-
* Windows (Browser::PLATFORM_WINDOWS)
|
54 |
-
* Windows CE (Browser::PLATFORM_WINDOWS_CE)
|
55 |
-
* Apple (Browser::PLATFORM_APPLE)
|
56 |
-
* Linux (Browser::PLATFORM_LINUX)
|
57 |
-
* Android (Browser::PLATFORM_ANDROID)
|
58 |
-
* OS/2 (Browser::PLATFORM_OS2)
|
59 |
-
* BeOS (Browser::PLATFORM_BEOS)
|
60 |
-
* iPhone (Browser::PLATFORM_IPHONE)
|
61 |
-
* iPod (Browser::PLATFORM_IPOD)
|
62 |
-
* BlackBerry (Browser::PLATFORM_BLACKBERRY)
|
63 |
-
* FreeBSD (Browser::PLATFORM_FREEBSD)
|
64 |
-
* OpenBSD (Browser::PLATFORM_OPENBSD)
|
65 |
-
* NetBSD (Browser::PLATFORM_NETBSD)
|
66 |
-
* SunOS (Browser::PLATFORM_SUNOS)
|
67 |
-
* OpenSolaris (Browser::PLATFORM_OPENSOLARIS)
|
68 |
-
* iPad (Browser::PLATFORM_IPAD)
|
69 |
-
|
70 |
-
**This solution identifies the following Browsers and does a best-guess on the version:**
|
71 |
-
|
72 |
-
* Opera (Browser::BROWSER_OPERA)
|
73 |
-
* WebTV (Browser::BROWSER_WEBTV)
|
74 |
-
* NetPositive (Browser::BROWSER_NETPOSITIVE)
|
75 |
-
* Edge (Browser::BROWSER_EDGE)
|
76 |
-
* Internet Explorer (Browser::BROWSER_IE)
|
77 |
-
* Pocket Internet Explorer (Browser::BROWSER_POCKET_IE)
|
78 |
-
* Galeon (Browser::BROWSER_GALEON)
|
79 |
-
* Konqueror (Browser::BROWSER_KONQUEROR)
|
80 |
-
* iCab (Browser::BROWSER_ICAB)
|
81 |
-
* OmniWeb (Browser::BROWSER_OMNIWEB)
|
82 |
-
* Phoenix (Browser::BROWSER_PHOENIX)
|
83 |
-
* Firebird (Browser::BROWSER_FIREBIRD)
|
84 |
-
* Firefox (Browser::BROWSER_FIREFOX)
|
85 |
-
* Mozilla (Browser::BROWSER_MOZILLA)
|
86 |
-
* Amaya (Browser::BROWSER_AMAYA)
|
87 |
-
* Lynx (Browser::BROWSER_LYNX)
|
88 |
-
* Safari (Browser::BROWSER_SAFARI)
|
89 |
-
* iPhone (Browser::BROWSER_IPHONE)
|
90 |
-
* iPod (Browser::BROWSER_IPOD)
|
91 |
-
* Google.s Android(Browser::BROWSER_ANDROID)
|
92 |
-
* Google.s Chrome(Browser::BROWSER_CHROME)
|
93 |
-
* GoogleBot(Browser::BROWSER_GOOGLEBOT)
|
94 |
-
* Yahoo!.s Slurp(Browser::BROWSER_SLURP)
|
95 |
-
* W3C.s Validator(Browser::BROWSER_W3CVALIDATOR)
|
96 |
-
* BlackBerry(Browser::BROWSER_BLACKBERRY)
|
97 |
-
|
98 |
-
**Typical Usage:**
|
99 |
-
|
100 |
-
```php
|
101 |
-
$browser = new Browser();
|
102 |
-
if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {
|
103 |
-
echo 'You have FireFox version 2 or greater';
|
104 |
-
}
|
105 |
-
```
|
106 |
-
|
107 |
-
12/9/2008 Update
|
108 |
-
* removed an unused constant and renamed the constructor to use the PHP magic method __construct (thanks to Robin for locating the legacy constant and suggesting the use of the magic method).
|
109 |
-
|
110 |
-
2/19/2009 Update
|
111 |
-
* updated typical usage to show a correct example! (thanks David!)
|
112 |
-
|
113 |
-
2/24/2009 Update
|
114 |
-
* fixed typo in the usage! (thanks Adam!)
|
115 |
-
|
116 |
-
3/14/2009 Update
|
117 |
-
* added support for the iPod; added iPod and iPhone as platforms; added Google.s Android
|
118 |
-
|
119 |
-
4/22/2009 Update
|
120 |
-
* added support for GoogleBot, the W3C Validator and Yahoo! Slurp
|
121 |
-
|
122 |
-
4/27/2009 Update
|
123 |
-
* John pointed out a terrible typo (see below) . removed the typo
|
124 |
-
|
125 |
-
11/08/2009 Update
|
126 |
-
* A lot of changes to the script, thank you to everyone for the suggestions and emails. This release should add all of the requested features. Added BlackBerry, mobile detection, Opera Mini support, robot detection, Opera 10.s UserAgent .mess., detection for IceCat and Shiretoko!
|
127 |
-
|
128 |
-
3/7/2010 Update
|
129 |
-
* Version 1.7 was a *MAJOR* Rebuild (preg_match and other .slow. routine removal(s)) included the following changes:
|
130 |
-
* Almost allof Gary.s original code has been replaced
|
131 |
-
* Large PHPUNIT testing environment created to validate new releases and additions
|
132 |
-
* Added FreeBSD Platform
|
133 |
-
* Added OpenBSD Platform
|
134 |
-
* Added NetBSD Platform
|
135 |
-
* Added SunOS Platform
|
136 |
-
* Added OpenSolaris Platform
|
137 |
-
* Added support of the Iceweazel Browser
|
138 |
-
* Added isChromeFrame() call to check if chromeframe is in use
|
139 |
-
* Moved the Opera check in front of the Firefox check due to legacy Opera User Agents
|
140 |
-
* Added the __toString() method (Thanks Deano)
|
141 |
-
|
142 |
-
4/27/2010: Update (Version 1.8)
|
143 |
-
* Added iPad support
|
144 |
-
|
145 |
-
8/20/2010: Update (Version 1.9)
|
146 |
-
* Added MSN Explorer Browser
|
147 |
-
* Added Bing/MSN Robot
|
148 |
-
* Added the Android Platform
|
149 |
-
* Fixed issue with Android 1.6/2.2
|
1 |
+
Browser.php
|
2 |
+
=============
|
3 |
+
|
4 |
+
[![Build Status](https://travis-ci.org/cbschuld/Browser.php.png?branch=master)](https://travis-ci.org/cbschuld/Browser.php)
|
5 |
+
|
6 |
+
Helps detect the user's browser and platform at the PHP level via the user agent
|
7 |
+
|
8 |
+
|
9 |
+
Installation
|
10 |
+
============
|
11 |
+
|
12 |
+
To install, simply `require` the `Browser.php` file under `lib`.
|
13 |
+
|
14 |
+
You can also install it via `Composer` by using the [Packagist archive](https://packagist.org/packages/cbschuld/browser.php).
|
15 |
+
|
16 |
+
|
17 |
+
Background
|
18 |
+
============
|
19 |
+
|
20 |
+
Detecting the user's browser type and version is helpful in web applications that harness some of the newer bleeding edge concepts. With the browser type and version you can notify users about challenges they may experience and suggest they upgrade before using such application. Not a great idea on a large scale public site; but on a private application this type of check can be helpful.
|
21 |
+
|
22 |
+
In an active project of mine we have a pretty graphically intensive and visually appealing user interface which leverages a lot of transparent PNG files. Because we all know how great IE6 supports PNG files it was necessary for us to tell our users the lack of power their browser has in a kind way.
|
23 |
+
|
24 |
+
Searching for a way to do this at the PHP layer and not at the client layer was more of a challenge than I would have guessed; the only script available was written by Gary White and Gary no longer maintains this script because of reliability. I do agree 100% with Gary about the readability; however, there are realistic reasons to desire the user.s browser and browser version and if your visitor is not echoing a false user agent we can take an educated guess.
|
25 |
+
|
26 |
+
I based this solution off of Gary White.s original solution but added a few things:
|
27 |
+
|
28 |
+
I added the ability to view the return values as class constants to increase the readability
|
29 |
+
|
30 |
+
* Added version detectionf for edge via [pixelbacon](https://github.com/pixelbacon)
|
31 |
+
* Updated the version detection for Amaya
|
32 |
+
* Updated the version detection for Firefox
|
33 |
+
* Updated the version detection for Lynx
|
34 |
+
* Updated the version detection for WebTV
|
35 |
+
* Updated the version detection for NetPositive
|
36 |
+
* Updated the version detection for IE
|
37 |
+
* Updated the version detection for OmniWeb
|
38 |
+
* Updated the version detection for iCab
|
39 |
+
* Updated the version detection for Safari
|
40 |
+
* Added detection for Chrome
|
41 |
+
* Added detection for iPhone
|
42 |
+
* Added detection for robots
|
43 |
+
* Added detection for mobile devices
|
44 |
+
* Added detection for BlackBerry
|
45 |
+
* Added detection for iPhone
|
46 |
+
* Added detection for iPad
|
47 |
+
* Added detection for Android
|
48 |
+
* Removed Netscape checks
|
49 |
+
* Updated Safari to remove mobile devices (iPhone)
|
50 |
+
|
51 |
+
**This solution identifies the following Operating Systems:**
|
52 |
+
|
53 |
+
* Windows (Browser::PLATFORM_WINDOWS)
|
54 |
+
* Windows CE (Browser::PLATFORM_WINDOWS_CE)
|
55 |
+
* Apple (Browser::PLATFORM_APPLE)
|
56 |
+
* Linux (Browser::PLATFORM_LINUX)
|
57 |
+
* Android (Browser::PLATFORM_ANDROID)
|
58 |
+
* OS/2 (Browser::PLATFORM_OS2)
|
59 |
+
* BeOS (Browser::PLATFORM_BEOS)
|
60 |
+
* iPhone (Browser::PLATFORM_IPHONE)
|
61 |
+
* iPod (Browser::PLATFORM_IPOD)
|
62 |
+
* BlackBerry (Browser::PLATFORM_BLACKBERRY)
|
63 |
+
* FreeBSD (Browser::PLATFORM_FREEBSD)
|
64 |
+
* OpenBSD (Browser::PLATFORM_OPENBSD)
|
65 |
+
* NetBSD (Browser::PLATFORM_NETBSD)
|
66 |
+
* SunOS (Browser::PLATFORM_SUNOS)
|
67 |
+
* OpenSolaris (Browser::PLATFORM_OPENSOLARIS)
|
68 |
+
* iPad (Browser::PLATFORM_IPAD)
|
69 |
+
|
70 |
+
**This solution identifies the following Browsers and does a best-guess on the version:**
|
71 |
+
|
72 |
+
* Opera (Browser::BROWSER_OPERA)
|
73 |
+
* WebTV (Browser::BROWSER_WEBTV)
|
74 |
+
* NetPositive (Browser::BROWSER_NETPOSITIVE)
|
75 |
+
* Edge (Browser::BROWSER_EDGE)
|
76 |
+
* Internet Explorer (Browser::BROWSER_IE)
|
77 |
+
* Pocket Internet Explorer (Browser::BROWSER_POCKET_IE)
|
78 |
+
* Galeon (Browser::BROWSER_GALEON)
|
79 |
+
* Konqueror (Browser::BROWSER_KONQUEROR)
|
80 |
+
* iCab (Browser::BROWSER_ICAB)
|
81 |
+
* OmniWeb (Browser::BROWSER_OMNIWEB)
|
82 |
+
* Phoenix (Browser::BROWSER_PHOENIX)
|
83 |
+
* Firebird (Browser::BROWSER_FIREBIRD)
|
84 |
+
* Firefox (Browser::BROWSER_FIREFOX)
|
85 |
+
* Mozilla (Browser::BROWSER_MOZILLA)
|
86 |
+
* Amaya (Browser::BROWSER_AMAYA)
|
87 |
+
* Lynx (Browser::BROWSER_LYNX)
|
88 |
+
* Safari (Browser::BROWSER_SAFARI)
|
89 |
+
* iPhone (Browser::BROWSER_IPHONE)
|
90 |
+
* iPod (Browser::BROWSER_IPOD)
|
91 |
+
* Google.s Android(Browser::BROWSER_ANDROID)
|
92 |
+
* Google.s Chrome(Browser::BROWSER_CHROME)
|
93 |
+
* GoogleBot(Browser::BROWSER_GOOGLEBOT)
|
94 |
+
* Yahoo!.s Slurp(Browser::BROWSER_SLURP)
|
95 |
+
* W3C.s Validator(Browser::BROWSER_W3CVALIDATOR)
|
96 |
+
* BlackBerry(Browser::BROWSER_BLACKBERRY)
|
97 |
+
|
98 |
+
**Typical Usage:**
|
99 |
+
|
100 |
+
```php
|
101 |
+
$browser = new Browser();
|
102 |
+
if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {
|
103 |
+
echo 'You have FireFox version 2 or greater';
|
104 |
+
}
|
105 |
+
```
|
106 |
+
|
107 |
+
12/9/2008 Update
|
108 |
+
* removed an unused constant and renamed the constructor to use the PHP magic method __construct (thanks to Robin for locating the legacy constant and suggesting the use of the magic method).
|
109 |
+
|
110 |
+
2/19/2009 Update
|
111 |
+
* updated typical usage to show a correct example! (thanks David!)
|
112 |
+
|
113 |
+
2/24/2009 Update
|
114 |
+
* fixed typo in the usage! (thanks Adam!)
|
115 |
+
|
116 |
+
3/14/2009 Update
|
117 |
+
* added support for the iPod; added iPod and iPhone as platforms; added Google.s Android
|
118 |
+
|
119 |
+
4/22/2009 Update
|
120 |
+
* added support for GoogleBot, the W3C Validator and Yahoo! Slurp
|
121 |
+
|
122 |
+
4/27/2009 Update
|
123 |
+
* John pointed out a terrible typo (see below) . removed the typo
|
124 |
+
|
125 |
+
11/08/2009 Update
|
126 |
+
* A lot of changes to the script, thank you to everyone for the suggestions and emails. This release should add all of the requested features. Added BlackBerry, mobile detection, Opera Mini support, robot detection, Opera 10.s UserAgent .mess., detection for IceCat and Shiretoko!
|
127 |
+
|
128 |
+
3/7/2010 Update
|
129 |
+
* Version 1.7 was a *MAJOR* Rebuild (preg_match and other .slow. routine removal(s)) included the following changes:
|
130 |
+
* Almost allof Gary.s original code has been replaced
|
131 |
+
* Large PHPUNIT testing environment created to validate new releases and additions
|
132 |
+
* Added FreeBSD Platform
|
133 |
+
* Added OpenBSD Platform
|
134 |
+
* Added NetBSD Platform
|
135 |
+
* Added SunOS Platform
|
136 |
+
* Added OpenSolaris Platform
|
137 |
+
* Added support of the Iceweazel Browser
|
138 |
+
* Added isChromeFrame() call to check if chromeframe is in use
|
139 |
+
* Moved the Opera check in front of the Firefox check due to legacy Opera User Agents
|
140 |
+
* Added the __toString() method (Thanks Deano)
|
141 |
+
|
142 |
+
4/27/2010: Update (Version 1.8)
|
143 |
+
* Added iPad support
|
144 |
+
|
145 |
+
8/20/2010: Update (Version 1.9)
|
146 |
+
* Added MSN Explorer Browser
|
147 |
+
* Added Bing/MSN Robot
|
148 |
+
* Added the Android Platform
|
149 |
+
* Fixed issue with Android 1.6/2.2
|
vendor/cbschuld/browser.php/composer.json
CHANGED
@@ -1,22 +1,22 @@
|
|
1 |
-
{
|
2 |
-
"name": "cbschuld/browser.php",
|
3 |
-
"description": "A PHP Class to detect a user's Browser",
|
4 |
-
"keywords": ["browser", "user agent", "detection"],
|
5 |
-
"homepage": "http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php.html",
|
6 |
-
"license": "MIT",
|
7 |
-
"authors": [
|
8 |
-
{
|
9 |
-
"name": "Chris Schuld",
|
10 |
-
"email": "chris@chrisschuld.com",
|
11 |
-
"homepage": "http://chrisschuld.com"
|
12 |
-
}
|
13 |
-
],
|
14 |
-
"autoload": {
|
15 |
-
"files": ["lib/Browser.php"]
|
16 |
-
},
|
17 |
-
"extra": {
|
18 |
-
"branch-alias": {
|
19 |
-
"dev-master": "1.95-dev"
|
20 |
-
}
|
21 |
-
}
|
22 |
-
}
|
1 |
+
{
|
2 |
+
"name": "cbschuld/browser.php",
|
3 |
+
"description": "A PHP Class to detect a user's Browser",
|
4 |
+
"keywords": ["browser", "user agent", "detection"],
|
5 |
+
"homepage": "http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php.html",
|
6 |
+
"license": "MIT",
|
7 |
+
"authors": [
|
8 |
+
{
|
9 |
+
"name": "Chris Schuld",
|
10 |
+
"email": "chris@chrisschuld.com",
|
11 |
+
"homepage": "http://chrisschuld.com"
|
12 |
+
}
|
13 |
+
],
|
14 |
+
"autoload": {
|
15 |
+
"files": ["lib/Browser.php"]
|
16 |
+
},
|
17 |
+
"extra": {
|
18 |
+
"branch-alias": {
|
19 |
+
"dev-master": "1.95-dev"
|
20 |
+
}
|
21 |
+
}
|
22 |
+
}
|
vendor/cbschuld/browser.php/lib/Browser.php
CHANGED
@@ -1,1732 +1,1732 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* File: Browser.php
|
5 |
-
* Author: Chris Schuld (http://chrisschuld.com/)
|
6 |
-
* Last Modified: July 22nd, 2016
|
7 |
-
* @version 2.0
|
8 |
-
* @package PegasusPHP
|
9 |
-
*
|
10 |
-
* Copyright (C) 2008-2010 Chris Schuld (chris@chrisschuld.com)
|
11 |
-
*
|
12 |
-
* This program is free software; you can redistribute it and/or
|
13 |
-
* modify it under the terms of the GNU General Public License as
|
14 |
-
* published by the Free Software Foundation; either version 2 of
|
15 |
-
* the License, or (at your option) any later version.
|
16 |
-
*
|
17 |
-
* This program is distributed in the hope that it will be useful,
|
18 |
-
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
19 |
-
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
20 |
-
* GNU General Public License for more details at:
|
21 |
-
* http://www.gnu.org/copyleft/gpl.html
|
22 |
-
*
|
23 |
-
*
|
24 |
-
* Typical Usage:
|
25 |
-
*
|
26 |
-
* $browser = new Browser();
|
27 |
-
* if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {
|
28 |
-
* echo 'You have FireFox version 2 or greater';
|
29 |
-
* }
|
30 |
-
*
|
31 |
-
* User Agents Sampled from: http://www.useragentstring.com/
|
32 |
-
*
|
33 |
-
* This implementation is based on the original work from Gary White
|
34 |
-
* http://apptools.com/phptools/browser/
|
35 |
-
*
|
36 |
-
*/
|
37 |
-
class Browser
|
38 |
-
{
|
39 |
-
private $_agent = '';
|
40 |
-
private $_browser_name = '';
|
41 |
-
private $_version = '';
|
42 |
-
private $_platform = '';
|
43 |
-
private $_os = '';
|
44 |
-
private $_is_aol = false;
|
45 |
-
private $_is_mobile = false;
|
46 |
-
private $_is_tablet = false;
|
47 |
-
private $_is_robot = false;
|
48 |
-
private $_is_facebook = false;
|
49 |
-
private $_aol_version = '';
|
50 |
-
|
51 |
-
const BROWSER_UNKNOWN = 'unknown';
|
52 |
-
const VERSION_UNKNOWN = 'unknown';
|
53 |
-
|
54 |
-
const BROWSER_OPERA = 'Opera'; // http://www.opera.com/
|
55 |
-
const BROWSER_OPERA_MINI = 'Opera Mini'; // http://www.opera.com/mini/
|
56 |
-
const BROWSER_WEBTV = 'WebTV'; // http://www.webtv.net/pc/
|
57 |
-
const BROWSER_EDGE = 'Edge'; // https://www.microsoft.com/edge
|
58 |
-
const BROWSER_IE = 'Internet Explorer'; // http://www.microsoft.com/ie/
|
59 |
-
const BROWSER_POCKET_IE = 'Pocket Internet Explorer'; // http://en.wikipedia.org/wiki/Internet_Explorer_Mobile
|
60 |
-
const BROWSER_KONQUEROR = 'Konqueror'; // http://www.konqueror.org/
|
61 |
-
const BROWSER_ICAB = 'iCab'; // http://www.icab.de/
|
62 |
-
const BROWSER_OMNIWEB = 'OmniWeb'; // http://www.omnigroup.com/applications/omniweb/
|
63 |
-
const BROWSER_FIREBIRD = 'Firebird'; // http://www.ibphoenix.com/
|
64 |
-
const BROWSER_FIREFOX = 'Firefox'; // http://www.mozilla.com/en-US/firefox/firefox.html
|
65 |
-
const BROWSER_ICEWEASEL = 'Iceweasel'; // http://www.geticeweasel.org/
|
66 |
-
const BROWSER_SHIRETOKO = 'Shiretoko'; // http://wiki.mozilla.org/Projects/shiretoko
|
67 |
-
const BROWSER_MOZILLA = 'Mozilla'; // http://www.mozilla.com/en-US/
|
68 |
-
const BROWSER_AMAYA = 'Amaya'; // http://www.w3.org/Amaya/
|
69 |
-
const BROWSER_LYNX = 'Lynx'; // http://en.wikipedia.org/wiki/Lynx
|
70 |
-
const BROWSER_SAFARI = 'Safari'; // http://apple.com
|
71 |
-
const BROWSER_IPHONE = 'iPhone'; // http://apple.com
|
72 |
-
const BROWSER_IPOD = 'iPod'; // http://apple.com
|
73 |
-
const BROWSER_IPAD = 'iPad'; // http://apple.com
|
74 |
-
const BROWSER_CHROME = 'Chrome'; // http://www.google.com/chrome
|
75 |
-
const BROWSER_ANDROID = 'Android'; // http://www.android.com/
|
76 |
-
const BROWSER_GOOGLEBOT = 'GoogleBot'; // http://en.wikipedia.org/wiki/Googlebot
|
77 |
-
|
78 |
-
const BROWSER_YANDEXBOT = 'YandexBot'; // http://yandex.com/bots
|
79 |
-
const BROWSER_YANDEXIMAGERESIZER_BOT = 'YandexImageResizer'; // http://yandex.com/bots
|
80 |
-
const BROWSER_YANDEXIMAGES_BOT = 'YandexImages'; // http://yandex.com/bots
|
81 |
-
const BROWSER_YANDEXVIDEO_BOT = 'YandexVideo'; // http://yandex.com/bots
|
82 |
-
const BROWSER_YANDEXMEDIA_BOT = 'YandexMedia'; // http://yandex.com/bots
|
83 |
-
const BROWSER_YANDEXBLOGS_BOT = 'YandexBlogs'; // http://yandex.com/bots
|
84 |
-
const BROWSER_YANDEXFAVICONS_BOT = 'YandexFavicons'; // http://yandex.com/bots
|
85 |
-
const BROWSER_YANDEXWEBMASTER_BOT = 'YandexWebmaster'; // http://yandex.com/bots
|
86 |
-
const BROWSER_YANDEXDIRECT_BOT = 'YandexDirect'; // http://yandex.com/bots
|
87 |
-
const BROWSER_YANDEXMETRIKA_BOT = 'YandexMetrika'; // http://yandex.com/bots
|
88 |
-
const BROWSER_YANDEXNEWS_BOT = 'YandexNews'; // http://yandex.com/bots
|
89 |
-
const BROWSER_YANDEXCATALOG_BOT = 'YandexCatalog'; // http://yandex.com/bots
|
90 |
-
|
91 |
-
const BROWSER_SLURP = 'Yahoo! Slurp'; // http://en.wikipedia.org/wiki/Yahoo!_Slurp
|
92 |
-
const BROWSER_W3CVALIDATOR = 'W3C Validator'; // http://validator.w3.org/
|
93 |
-
const BROWSER_BLACKBERRY = 'BlackBerry'; // http://www.blackberry.com/
|
94 |
-
const BROWSER_ICECAT = 'IceCat'; // http://en.wikipedia.org/wiki/GNU_IceCat
|
95 |
-
const BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser'; // http://en.wikipedia.org/wiki/Web_Browser_for_S60
|
96 |
-
const BROWSER_NOKIA = 'Nokia Browser'; // * all other WAP-based browsers on the Nokia Platform
|
97 |
-
const BROWSER_MSN = 'MSN Browser'; // http://explorer.msn.com/
|
98 |
-
const BROWSER_MSNBOT = 'MSN Bot'; // http://search.msn.com/msnbot.htm
|
99 |
-
const BROWSER_BINGBOT = 'Bing Bot'; // http://en.wikipedia.org/wiki/Bingbot
|
100 |
-
const BROWSER_VIVALDI = 'Vivalidi'; // https://vivaldi.com/
|
101 |
-
const BROWSER_YANDEX = 'Yandex'; // https://browser.yandex.ua/
|
102 |
-
|
103 |
-
const BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator'; // http://browser.netscape.com/ (DEPRECATED)
|
104 |
-
const BROWSER_GALEON = 'Galeon'; // http://galeon.sourceforge.net/ (DEPRECATED)
|
105 |
-
const BROWSER_NETPOSITIVE = 'NetPositive'; // http://en.wikipedia.org/wiki/NetPositive (DEPRECATED)
|
106 |
-
const BROWSER_PHOENIX = 'Phoenix'; // http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED)
|
107 |
-
const BROWSER_PLAYSTATION = "PlayStation";
|
108 |
-
const BROWSER_SAMSUNG = "SamsungBrowser";
|
109 |
-
const BROWSER_SILK = "Silk";
|
110 |
-
const BROWSER_I_FRAME = "Iframely";
|
111 |
-
const BROWSER_COCOA = "CocoaRestClient";
|
112 |
-
|
113 |
-
const PLATFORM_UNKNOWN = 'unknown';
|
114 |
-
const PLATFORM_WINDOWS = 'Windows';
|
115 |
-
const PLATFORM_WINDOWS_CE = 'Windows CE';
|
116 |
-
const PLATFORM_APPLE = 'Apple';
|
117 |
-
const PLATFORM_LINUX = 'Linux';
|
118 |
-
const PLATFORM_OS2 = 'OS/2';
|
119 |
-
const PLATFORM_BEOS = 'BeOS';
|
120 |
-
const PLATFORM_IPHONE = 'iPhone';
|
121 |
-
const PLATFORM_IPOD = 'iPod';
|
122 |
-
const PLATFORM_IPAD = 'iPad';
|
123 |
-
const PLATFORM_BLACKBERRY = 'BlackBerry';
|
124 |
-
const PLATFORM_NOKIA = 'Nokia';
|
125 |
-
const PLATFORM_FREEBSD = 'FreeBSD';
|
126 |
-
const PLATFORM_OPENBSD = 'OpenBSD';
|
127 |
-
const PLATFORM_NETBSD = 'NetBSD';
|
128 |
-
const PLATFORM_SUNOS = 'SunOS';
|
129 |
-
const PLATFORM_OPENSOLARIS = 'OpenSolaris';
|
130 |
-
const PLATFORM_ANDROID = 'Android';
|
131 |
-
const PLATFORM_PLAYSTATION = "Sony PlayStation";
|
132 |
-
const PLATFORM_ROKU = "Roku";
|
133 |
-
const PLATFORM_APPLE_TV = "Apple TV";
|
134 |
-
const PLATFORM_TERMINAL = "Terminal";
|
135 |
-
const PLATFORM_FIRE_OS = "Fire OS";
|
136 |
-
const PLATFORM_SMART_TV = "SMART-TV";
|
137 |
-
const PLATFORM_CHROME_OS = "Chrome OS";
|
138 |
-
const PLATFORM_JAVA_ANDROID = "Java/Android";
|
139 |
-
const PLATFORM_POSTMAN = "Postman";
|
140 |
-
const PLATFORM_I_FRAME = "Iframely";
|
141 |
-
|
142 |
-
const OPERATING_SYSTEM_UNKNOWN = 'unknown';
|
143 |
-
|
144 |
-
/**
|
145 |
-
* Class constructor
|
146 |
-
*/
|
147 |
-
public function __construct($userAgent = "")
|
148 |
-
{
|
149 |
-
$this->reset();
|
150 |
-
if ($userAgent != "") {
|
151 |
-
$this->setUserAgent($userAgent);
|
152 |
-
} else {
|
153 |
-
$this->determine();
|
154 |
-
}
|
155 |
-
}
|
156 |
-
|
157 |
-
/**
|
158 |
-
* Reset all properties
|
159 |
-
*/
|
160 |
-
public function reset()
|
161 |
-
{
|
162 |
-
$this->_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "";
|
163 |
-
$this->_browser_name = self::BROWSER_UNKNOWN;
|
164 |
-
$this->_version = self::VERSION_UNKNOWN;
|
165 |
-
$this->_platform = self::PLATFORM_UNKNOWN;
|
166 |
-
$this->_os = self::OPERATING_SYSTEM_UNKNOWN;
|
167 |
-
$this->_is_aol = false;
|
168 |
-
$this->_is_mobile = false;
|
169 |
-
$this->_is_tablet = false;
|
170 |
-
$this->_is_robot = false;
|
171 |
-
$this->_is_facebook = false;
|
172 |
-
$this->_aol_version = self::VERSION_UNKNOWN;
|
173 |
-
}
|
174 |
-
|
175 |
-
/**
|
176 |
-
* Check to see if the specific browser is valid
|
177 |
-
* @param string $browserName
|
178 |
-
* @return bool True if the browser is the specified browser
|
179 |
-
*/
|
180 |
-
function isBrowser($browserName)
|
181 |
-
{
|
182 |
-
return (0 == strcasecmp($this->_browser_name, trim($browserName)));
|
183 |
-
}
|
184 |
-
|
185 |
-
/**
|
186 |
-
* The name of the browser. All return types are from the class contants
|
187 |
-
* @return string Name of the browser
|
188 |
-
*/
|
189 |
-
public function getBrowser()
|
190 |
-
{
|
191 |
-
return $this->_browser_name;
|
192 |
-
}
|
193 |
-
|
194 |
-
/**
|
195 |
-
* Set the name of the browser
|
196 |
-
* @param $browser string The name of the Browser
|
197 |
-
*/
|
198 |
-
public function setBrowser($browser)
|
199 |
-
{
|
200 |
-
$this->_browser_name = $browser;
|
201 |
-
}
|
202 |
-
|
203 |
-
/**
|
204 |
-
* The name of the platform. All return types are from the class contants
|
205 |
-
* @return string Name of the browser
|
206 |
-
*/
|
207 |
-
public function getPlatform()
|
208 |
-
{
|
209 |
-
return $this->_platform;
|
210 |
-
}
|
211 |
-
|
212 |
-
/**
|
213 |
-
* Set the name of the platform
|
214 |
-
* @param string $platform The name of the Platform
|
215 |
-
*/
|
216 |
-
public function setPlatform($platform)
|
217 |
-
{
|
218 |
-
$this->_platform = $platform;
|
219 |
-
}
|
220 |
-
|
221 |
-
/**
|
222 |
-
* The version of the browser.
|
223 |
-
* @return string Version of the browser (will only contain alpha-numeric characters and a period)
|
224 |
-
*/
|
225 |
-
public function getVersion()
|
226 |
-
{
|
227 |
-
return $this->_version;
|
228 |
-
}
|
229 |
-
|
230 |
-
/**
|
231 |
-
* Set the version of the browser
|
232 |
-
* @param string $version The version of the Browser
|
233 |
-
*/
|
234 |
-
public function setVersion($version)
|
235 |
-
{
|
236 |
-
$this->_version = preg_replace('/[^0-9,.,a-z,A-Z-]/', '', $version);
|
237 |
-
}
|
238 |
-
|
239 |
-
/**
|
240 |
-
* The version of AOL.
|
241 |
-
* @return string Version of AOL (will only contain alpha-numeric characters and a period)
|
242 |
-
*/
|
243 |
-
public function getAolVersion()
|
244 |
-
{
|
245 |
-
return $this->_aol_version;
|
246 |
-
}
|
247 |
-
|
248 |
-
/**
|
249 |
-
* Set the version of AOL
|
250 |
-
* @param string $version The version of AOL
|
251 |
-
*/
|
252 |
-
public function setAolVersion($version)
|
253 |
-
{
|
254 |
-
$this->_aol_version = preg_replace('/[^0-9,.,a-z,A-Z]/', '', $version);
|
255 |
-
}
|
256 |
-
|
257 |
-
/**
|
258 |
-
* Is the browser from AOL?
|
259 |
-
* @return boolean True if the browser is from AOL otherwise false
|
260 |
-
*/
|
261 |
-
public function isAol()
|
262 |
-
{
|
263 |
-
return $this->_is_aol;
|
264 |
-
}
|
265 |
-
|
266 |
-
/**
|
267 |
-
* Is the browser from a mobile device?
|
268 |
-
* @return boolean True if the browser is from a mobile device otherwise false
|
269 |
-
*/
|
270 |
-
public function isMobile()
|
271 |
-
{
|
272 |
-
return $this->_is_mobile;
|
273 |
-
}
|
274 |
-
|
275 |
-
/**
|
276 |
-
* Is the browser from a tablet device?
|
277 |
-
* @return boolean True if the browser is from a tablet device otherwise false
|
278 |
-
*/
|
279 |
-
public function isTablet()
|
280 |
-
{
|
281 |
-
return $this->_is_tablet;
|
282 |
-
}
|
283 |
-
|
284 |
-
/**
|
285 |
-
* Is the browser from a robot (ex Slurp,GoogleBot)?
|
286 |
-
* @return boolean True if the browser is from a robot otherwise false
|
287 |
-
*/
|
288 |
-
public function isRobot()
|
289 |
-
{
|
290 |
-
return $this->_is_robot;
|
291 |
-
}
|
292 |
-
|
293 |
-
/**
|
294 |
-
* Is the browser from facebook?
|
295 |
-
* @return boolean True if the browser is from facebook otherwise false
|
296 |
-
*/
|
297 |
-
public function isFacebook()
|
298 |
-
{
|
299 |
-
return $this->_is_facebook;
|
300 |
-
}
|
301 |
-
|
302 |
-
/**
|
303 |
-
* Set the browser to be from AOL
|
304 |
-
* @param $isAol
|
305 |
-
*/
|
306 |
-
public function setAol($isAol)
|
307 |
-
{
|
308 |
-
$this->_is_aol = $isAol;
|
309 |
-
}
|
310 |
-
|
311 |
-
/**
|
312 |
-
* Set the Browser to be mobile
|
313 |
-
* @param boolean $value is the browser a mobile browser or not
|
314 |
-
*/
|
315 |
-
protected function setMobile($value = true)
|
316 |
-
{
|
317 |
-
$this->_is_mobile = $value;
|
318 |
-
}
|
319 |
-
|
320 |
-
/**
|
321 |
-
* Set the Browser to be tablet
|
322 |
-
* @param boolean $value is the browser a tablet browser or not
|
323 |
-
*/
|
324 |
-
protected function setTablet($value = true)
|
325 |
-
{
|
326 |
-
$this->_is_tablet = $value;
|
327 |
-
}
|
328 |
-
|
329 |
-
/**
|
330 |
-
* Set the Browser to be a robot
|
331 |
-
* @param boolean $value is the browser a robot or not
|
332 |
-
*/
|
333 |
-
protected function setRobot($value = true)
|
334 |
-
{
|
335 |
-
$this->_is_robot = $value;
|
336 |
-
}
|
337 |
-
|
338 |
-
/**
|
339 |
-
* Set the Browser to be a Facebook request
|
340 |
-
* @param boolean $value is the browser a robot or not
|
341 |
-
*/
|
342 |
-
protected function setFacebook($value = true)
|
343 |
-
{
|
344 |
-
$this->_is_facebook = $value;
|
345 |
-
}
|
346 |
-
|
347 |
-
/**
|
348 |
-
* Get the user agent value in use to determine the browser
|
349 |
-
* @return string The user agent from the HTTP header
|
350 |
-
*/
|
351 |
-
public function getUserAgent()
|
352 |
-
{
|
353 |
-
return $this->_agent;
|
354 |
-
}
|
355 |
-
|
356 |
-
/**
|
357 |
-
* Set the user agent value (the construction will use the HTTP header value - this will overwrite it)
|
358 |
-
* @param string $agent_string The value for the User Agent
|
359 |
-
*/
|
360 |
-
public function setUserAgent($agent_string)
|
361 |
-
{
|
362 |
-
$this->reset();
|
363 |
-
$this->_agent = $agent_string;
|
364 |
-
$this->determine();
|
365 |
-
}
|
366 |
-
|
367 |
-
/**
|
368 |
-
* Used to determine if the browser is actually "chromeframe"
|
369 |
-
* @since 1.7
|
370 |
-
* @return boolean True if the browser is using chromeframe
|
371 |
-
*/
|
372 |
-
public function isChromeFrame()
|
373 |
-
{
|
374 |
-
return (strpos($this->_agent, "chromeframe") !== false);
|
375 |
-
}
|
376 |
-
|
377 |
-
/**
|
378 |
-
* Returns a formatted string with a summary of the details of the browser.
|
379 |
-
* @return string formatted string with a summary of the browser
|
380 |
-
*/
|
381 |
-
public function __toString()
|
382 |
-
{
|
383 |
-
return "<strong>Browser Name:</strong> {$this->getBrowser()}<br/>\n" .
|
384 |
-
"<strong>Browser Version:</strong> {$this->getVersion()}<br/>\n" .
|
385 |
-
"<strong>Browser User Agent String:</strong> {$this->getUserAgent()}<br/>\n" .
|
386 |
-
"<strong>Platform:</strong> {$this->getPlatform()}<br/>";
|
387 |
-
}
|
388 |
-
|
389 |
-
/**
|
390 |
-
* Protected routine to calculate and determine what the browser is in use (including platform)
|
391 |
-
*/
|
392 |
-
protected function determine()
|
393 |
-
{
|
394 |
-
$this->checkPlatform();
|
395 |
-
$this->checkBrowsers();
|
396 |
-
$this->checkForAol();
|
397 |
-
}
|
398 |
-
|
399 |
-
/**
|
400 |
-
* Protected routine to determine the browser type
|
401 |
-
* @return boolean True if the browser was detected otherwise false
|
402 |
-
*/
|
403 |
-
protected function checkBrowsers()
|
404 |
-
{
|
405 |
-
return (
|
406 |
-
// well-known, well-used
|
407 |
-
// Special Notes:
|
408 |
-
// (1) Opera must be checked before FireFox due to the odd
|
409 |
-
// user agents used in some older versions of Opera
|
410 |
-
// (2) WebTV is strapped onto Internet Explorer so we must
|
411 |
-
// check for WebTV before IE
|
412 |
-
// (3) (deprecated) Galeon is based on Firefox and needs to be
|
413 |
-
// tested before Firefox is tested
|
414 |
-
// (4) OmniWeb is based on Safari so OmniWeb check must occur
|
415 |
-
// before Safari
|
416 |
-
// (5) Netscape 9+ is based on Firefox so Netscape checks
|
417 |
-
// before FireFox are necessary
|
418 |
-
// (6) Vivalid is UA contains both Firefox and Chrome so Vivalid checks
|
419 |
-
// before Firefox and Chrome
|
420 |
-
$this->checkBrowserWebTv() ||
|
421 |
-
$this->checkBrowserEdge() ||
|
422 |
-
$this->checkBrowserInternetExplorer() ||
|
423 |
-
$this->checkBrowserOpera() ||
|
424 |
-
$this->checkBrowserGaleon() ||
|
425 |
-
$this->checkBrowserNetscapeNavigator9Plus() ||
|
426 |
-
$this->checkBrowserVivaldi() ||
|
427 |
-
$this->checkBrowserYandex() ||
|
428 |
-
$this->checkBrowserFirefox() ||
|
429 |
-
$this->checkBrowserChrome() ||
|
430 |
-
$this->checkBrowserOmniWeb() ||
|
431 |
-
|
432 |
-
// common mobile
|
433 |
-
$this->checkBrowserAndroid() ||
|
434 |
-
$this->checkBrowseriPad() ||
|
435 |
-
$this->checkBrowseriPod() ||
|
436 |
-
$this->checkBrowseriPhone() ||
|
437 |
-
$this->checkBrowserBlackBerry() ||
|
438 |
-
$this->checkBrowserNokia() ||
|
439 |
-
|
440 |
-
// common bots
|
441 |
-
$this->checkBrowserGoogleBot() ||
|
442 |
-
$this->checkBrowserMSNBot() ||
|
443 |
-
$this->checkBrowserBingBot() ||
|
444 |
-
$this->checkBrowserSlurp() ||
|
445 |
-
|
446 |
-
// Yandex bots
|
447 |
-
$this->checkBrowserYandexBot() ||
|
448 |
-
$this->checkBrowserYandexImageResizerBot() ||
|
449 |
-
$this->checkBrowserYandexBlogsBot() ||
|
450 |
-
$this->checkBrowserYandexCatalogBot() ||
|
451 |
-
$this->checkBrowserYandexDirectBot() ||
|
452 |
-
$this->checkBrowserYandexFaviconsBot() ||
|
453 |
-
$this->checkBrowserYandexImagesBot() ||
|
454 |
-
$this->checkBrowserYandexMediaBot() ||
|
455 |
-
$this->checkBrowserYandexMetrikaBot() ||
|
456 |
-
$this->checkBrowserYandexNewsBot() ||
|
457 |
-
$this->checkBrowserYandexVideoBot() ||
|
458 |
-
$this->checkBrowserYandexWebmasterBot() ||
|
459 |
-
|
460 |
-
// check for facebook external hit when loading URL
|
461 |
-
$this->checkFacebookExternalHit() ||
|
462 |
-
|
463 |
-
// WebKit base check (post mobile and others)
|
464 |
-
$this->checkBrowserSamsung() ||
|
465 |
-
$this->checkBrowserSilk() ||
|
466 |
-
$this->checkBrowserSafari() ||
|
467 |
-
|
468 |
-
// everyone else
|
469 |
-
$this->checkBrowserNetPositive() ||
|
470 |
-
$this->checkBrowserFirebird() ||
|
471 |
-
$this->checkBrowserKonqueror() ||
|
472 |
-
$this->checkBrowserIcab() ||
|
473 |
-
$this->checkBrowserPhoenix() ||
|
474 |
-
$this->checkBrowserAmaya() ||
|
475 |
-
$this->checkBrowserLynx() ||
|
476 |
-
$this->checkBrowserShiretoko() ||
|
477 |
-
$this->checkBrowserIceCat() ||
|
478 |
-
$this->checkBrowserIceweasel() ||
|
479 |
-
$this->checkBrowserW3CValidator() ||
|
480 |
-
$this->checkBrowserPlayStation() ||
|
481 |
-
$this->checkBrowserIframely() ||
|
482 |
-
$this->checkBrowserCocoa() ||
|
483 |
-
$this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */
|
484 |
-
|
485 |
-
|
486 |
-
);
|
487 |
-
}
|
488 |
-
|
489 |
-
/**
|
490 |
-
* Determine if the user is using a BlackBerry (last updated 1.7)
|
491 |
-
* @return boolean True if the browser is the BlackBerry browser otherwise false
|
492 |
-
*/
|
493 |
-
protected function checkBrowserBlackBerry()
|
494 |
-
{
|
495 |
-
if (stripos($this->_agent, 'blackberry') !== false) {
|
496 |
-
$aresult = explode("/", stristr($this->_agent, "BlackBerry"));
|
497 |
-
if (isset($aresult[1])) {
|
498 |
-
$aversion = explode(' ', $aresult[1]);
|
499 |
-
$this->setVersion($aversion[0]);
|
500 |
-
$this->_browser_name = self::BROWSER_BLACKBERRY;
|
501 |
-
$this->setMobile(true);
|
502 |
-
return true;
|
503 |
-
}
|
504 |
-
}
|
505 |
-
return false;
|
506 |
-
}
|
507 |
-
|
508 |
-
/**
|
509 |
-
* Determine if the user is using an AOL User Agent (last updated 1.7)
|
510 |
-
* @return boolean True if the browser is from AOL otherwise false
|
511 |
-
*/
|
512 |
-
protected function checkForAol()
|
513 |
-
{
|
514 |
-
$this->setAol(false);
|
515 |
-
$this->setAolVersion(self::VERSION_UNKNOWN);
|
516 |
-
|
517 |
-
if (stripos($this->_agent, 'aol') !== false) {
|
518 |
-
$aversion = explode(' ', stristr($this->_agent, 'AOL'));
|
519 |
-
if (isset($aversion[1])) {
|
520 |
-
$this->setAol(true);
|
521 |
-
$this->setAolVersion(preg_replace('/[^0-9\.a-z]/i', '', $aversion[1]));
|
522 |
-
return true;
|
523 |
-
}
|
524 |
-
}
|
525 |
-
return false;
|
526 |
-
}
|
527 |
-
|
528 |
-
/**
|
529 |
-
* Determine if the browser is the GoogleBot or not (last updated 1.7)
|
530 |
-
* @return boolean True if the browser is the GoogletBot otherwise false
|
531 |
-
*/
|
532 |
-
protected function checkBrowserGoogleBot()
|
533 |
-
{
|
534 |
-
if (stripos($this->_agent, 'googlebot') !== false) {
|
535 |
-
$aresult = explode('/', stristr($this->_agent, 'googlebot'));
|
536 |
-
if (isset($aresult[1])) {
|
537 |
-
$aversion = explode(' ', $aresult[1]);
|
538 |
-
$this->setVersion(str_replace(';', '', $aversion[0]));
|
539 |
-
$this->_browser_name = self::BROWSER_GOOGLEBOT;
|
540 |
-
$this->setRobot(true);
|
541 |
-
return true;
|
542 |
-
}
|
543 |
-
}
|
544 |
-
return false;
|
545 |
-
}
|
546 |
-
|
547 |
-
/**
|
548 |
-
* Determine if the browser is the YandexBot or not
|
549 |
-
* @return boolean True if the browser is the YandexBot otherwise false
|
550 |
-
*/
|
551 |
-
protected function checkBrowserYandexBot()
|
552 |
-
{
|
553 |
-
if (stripos($this->_agent, 'YandexBot') !== false) {
|
554 |
-
$aresult = explode('/', stristr($this->_agent, 'YandexBot'));
|
555 |
-
if (isset($aresult[1])) {
|
556 |
-
$aversion = explode(' ', $aresult[1]);
|
557 |
-
$this->setVersion(str_replace(';', '', $aversion[0]));
|
558 |
-
$this->_browser_name = self::BROWSER_YANDEXBOT;
|
559 |
-
$this->setRobot(true);
|
560 |
-
return true;
|
561 |
-
}
|
562 |
-
}
|
563 |
-
return false;
|
564 |
-
}
|
565 |
-
|
566 |
-
/**
|
567 |
-
* Determine if the browser is the YandexImageResizer or not
|
568 |
-
* @return boolean True if the browser is the YandexImageResizer otherwise false
|
569 |
-
*/
|
570 |
-
protected function checkBrowserYandexImageResizerBot()
|
571 |
-
{
|
572 |
-
if (stripos($this->_agent, 'YandexImageResizer') !== false) {
|
573 |
-
$aresult = explode('/', stristr($this->_agent, 'YandexImageResizer'));
|
574 |
-
if (isset($aresult[1])) {
|
575 |
-
$aversion = explode(' ', $aresult[1]);
|
576 |
-
$this->setVersion(str_replace(';', '', $aversion[0]));
|
577 |
-
$this->_browser_name = self::BROWSER_YANDEXIMAGERESIZER_BOT;
|
578 |
-
$this->setRobot(true);
|
579 |
-
return true;
|
580 |
-
}
|
581 |
-
}
|
582 |
-
return false;
|
583 |
-
}
|
584 |
-
|
585 |
-
/**
|
586 |
-
* Determine if the browser is the YandexCatalog or not
|
587 |
-
* @return boolean True if the browser is the YandexCatalog otherwise false
|
588 |
-
*/
|
589 |
-
protected function checkBrowserYandexCatalogBot()
|
590 |
-
{
|
591 |
-
if (stripos($this->_agent, 'YandexCatalog') !== false) {
|
592 |
-
$aresult = explode('/', stristr($this->_agent, 'YandexCatalog'));
|
593 |
-
if (isset($aresult[1])) {
|
594 |
-
$aversion = explode(' ', $aresult[1]);
|
595 |
-
$this->setVersion(str_replace(';', '', $aversion[0]));
|
596 |
-
$this->_browser_name = self::BROWSER_YANDEXCATALOG_BOT;
|
597 |
-
$this->setRobot(true);
|
598 |
-
return true;
|
599 |
-
}
|
600 |
-
}
|
601 |
-
return false;
|
602 |
-
}
|
603 |
-
|
604 |
-
/**
|
605 |
-
* Determine if the browser is the YandexNews or not
|
606 |
-
* @return boolean True if the browser is the YandexNews otherwise false
|
607 |
-
*/
|
608 |
-
protected function checkBrowserYandexNewsBot()
|
609 |
-
{
|
610 |
-
if (stripos($this->_agent, 'YandexNews') !== false) {
|
611 |
-
$aresult = explode('/', stristr($this->_agent, 'YandexNews'));
|
612 |
-
if (isset($aresult[1])) {
|
613 |
-
$aversion = explode(' ', $aresult[1]);
|
614 |
-
$this->setVersion(str_replace(';', '', $aversion[0]));
|
615 |
-
$this->_browser_name = self::BROWSER_YANDEXNEWS_BOT;
|
616 |
-
$this->setRobot(true);
|
617 |
-
return true;
|
618 |
-
}
|
619 |
-
}
|
620 |
-
return false;
|
621 |
-
}
|
622 |
-
|
623 |
-
/**
|
624 |
-
* Determine if the browser is the YandexMetrika or not
|
625 |
-
* @return boolean True if the browser is the YandexMetrika otherwise false
|
626 |
-
*/
|
627 |
-
protected function checkBrowserYandexMetrikaBot()
|
628 |
-
{
|
629 |
-
if (stripos($this->_agent, 'YandexMetrika') !== false) {
|
630 |
-
$aresult = explode('/', stristr($this->_agent, 'YandexMetrika'));
|
631 |
-
if (isset($aresult[1])) {
|
632 |
-
$aversion = explode(' ', $aresult[1]);
|
633 |
-
$this->setVersion(str_replace(';', '', $aversion[0]));
|
634 |
-
$this->_browser_name = self::BROWSER_YANDEXMETRIKA_BOT;
|
635 |
-
$this->setRobot(true);
|
636 |
-
return true;
|
637 |
-
}
|
638 |
-
}
|
639 |
-
return false;
|
640 |
-
}
|
641 |
-
|
642 |
-
/**
|
643 |
-
* Determine if the browser is the YandexDirect or not
|
644 |
-
* @return boolean True if the browser is the YandexDirect otherwise false
|
645 |
-
*/
|
646 |
-
protected function checkBrowserYandexDirectBot()
|
647 |
-
{
|
648 |
-
if (stripos($this->_agent, 'YandexDirect') !== false) {
|
649 |
-
$aresult = explode('/', stristr($this->_agent, 'YandexDirect'));
|
650 |
-
if (isset($aresult[1])) {
|
651 |
-
$aversion = explode(' ', $aresult[1]);
|
652 |
-
$this->setVersion(str_replace(';', '', $aversion[0]));
|
653 |
-
$this->_browser_name = self::BROWSER_YANDEXDIRECT_BOT;
|
654 |
-
$this->setRobot(true);
|
655 |
-
return true;
|
656 |
-
}
|
657 |
-
}
|
658 |
-
return false;
|
659 |
-
}
|
660 |
-
|
661 |
-
/**
|
662 |
-
* Determine if the browser is the YandexWebmaster or not
|
663 |
-
* @return boolean True if the browser is the YandexWebmaster otherwise false
|
664 |
-
*/
|
665 |
-
protected function checkBrowserYandexWebmasterBot()
|
666 |
-
{
|
667 |
-
if (stripos($this->_agent, 'YandexWebmaster') !== false) {
|
668 |
-
$aresult = explode('/', stristr($this->_agent, 'YandexWebmaster'));
|
669 |
-
if (isset($aresult[1])) {
|
670 |
-
$aversion = explode(' ', $aresult[1]);
|
671 |
-
$this->setVersion(str_replace(';', '', $aversion[0]));
|
672 |
-
$this->_browser_name = self::BROWSER_YANDEXWEBMASTER_BOT;
|
673 |
-
$this->setRobot(true);
|
674 |
-
return true;
|
675 |
-
}
|
676 |
-
}
|
677 |
-
return false;
|
678 |
-
}
|
679 |
-
|
680 |
-
/**
|
681 |
-
* Determine if the browser is the YandexFavicons or not
|
682 |
-
* @return boolean True if the browser is the YandexFavicons otherwise false
|
683 |
-
*/
|
684 |
-
protected function checkBrowserYandexFaviconsBot()
|
685 |
-
{
|
686 |
-
if (stripos($this->_agent, 'YandexFavicons') !== false) {
|
687 |
-
$aresult = explode('/', stristr($this->_agent, 'YandexFavicons'));
|
688 |
-
if (isset($aresult[1])) {
|
689 |
-
$aversion = explode(' ', $aresult[1]);
|
690 |
-
$this->setVersion(str_replace(';', '', $aversion[0]));
|
691 |
-
$this->_browser_name = self::BROWSER_YANDEXFAVICONS_BOT;
|
692 |
-
$this->setRobot(true);
|
693 |
-
return true;
|
694 |
-
}
|
695 |
-
}
|
696 |
-
return false;
|
697 |
-
}
|
698 |
-
|
699 |
-
/**
|
700 |
-
* Determine if the browser is the YandexBlogs or not
|
701 |
-
* @return boolean True if the browser is the YandexBlogs otherwise false
|
702 |
-
*/
|
703 |
-
protected function checkBrowserYandexBlogsBot()
|
704 |
-
{
|
705 |
-
if (stripos($this->_agent, 'YandexBlogs') !== false) {
|
706 |
-
$aresult = explode('/', stristr($this->_agent, 'YandexBlogs'));
|
707 |
-
if (isset($aresult[1])) {
|
708 |
-
$aversion = explode(' ', $aresult[1]);
|
709 |
-
$this->setVersion(str_replace(';', '', $aversion[0]));
|
710 |
-
$this->_browser_name = self::BROWSER_YANDEXBLOGS_BOT;
|
711 |
-
$this->setRobot(true);
|
712 |
-
return true;
|
713 |
-
}
|
714 |
-
}
|
715 |
-
return false;
|
716 |
-
}
|
717 |
-
|
718 |
-
/**
|
719 |
-
* Determine if the browser is the YandexMedia or not
|
720 |
-
* @return boolean True if the browser is the YandexMedia otherwise false
|
721 |
-
*/
|
722 |
-
protected function checkBrowserYandexMediaBot()
|
723 |
-
{
|
724 |
-
if (stripos($this->_agent, 'YandexMedia') !== false) {
|
725 |
-
$aresult = explode('/', stristr($this->_agent, 'YandexMedia'));
|
726 |
-
if (isset($aresult[1])) {
|
727 |
-
$aversion = explode(' ', $aresult[1]);
|
728 |
-
$this->setVersion(str_replace(';', '', $aversion[0]));
|
729 |
-
$this->_browser_name = self::BROWSER_YANDEXMEDIA_BOT;
|
730 |
-
$this->setRobot(true);
|
731 |
-
return true;
|
732 |
-
}
|
733 |
-
}
|
734 |
-
return false;
|
735 |
-
}
|
736 |
-
|
737 |
-
/**
|
738 |
-
* Determine if the browser is the YandexVideo or not
|
739 |
-
* @return boolean True if the browser is the YandexVideo otherwise false
|
740 |
-
*/
|
741 |
-
protected function checkBrowserYandexVideoBot()
|
742 |
-
{
|
743 |
-
if (stripos($this->_agent, 'YandexVideo') !== false) {
|
744 |
-
$aresult = explode('/', stristr($this->_agent, 'YandexVideo'));
|
745 |
-
if (isset($aresult[1])) {
|
746 |
-
$aversion = explode(' ', $aresult[1]);
|
747 |
-
$this->setVersion(str_replace(';', '', $aversion[0]));
|
748 |
-
$this->_browser_name = self::BROWSER_YANDEXVIDEO_BOT;
|
749 |
-
$this->setRobot(true);
|
750 |
-
return true;
|
751 |
-
}
|
752 |
-
}
|
753 |
-
return false;
|
754 |
-
}
|
755 |
-
|
756 |
-
/**
|
757 |
-
* Determine if the browser is the YandexImages or not
|
758 |
-
* @return boolean True if the browser is the YandexImages otherwise false
|
759 |
-
*/
|
760 |
-
protected function checkBrowserYandexImagesBot()
|
761 |
-
{
|
762 |
-
if (stripos($this->_agent, 'YandexImages') !== false) {
|
763 |
-
$aresult = explode('/', stristr($this->_agent, 'YandexImages'));
|
764 |
-
if (isset($aresult[1])) {
|
765 |
-
$aversion = explode(' ', $aresult[1]);
|
766 |
-
$this->setVersion(str_replace(';', '', $aversion[0]));
|
767 |
-
$this->_browser_name = self::BROWSER_YANDEXIMAGES_BOT;
|
768 |
-
$this->setRobot(true);
|
769 |
-
return true;
|
770 |
-
}
|
771 |
-
}
|
772 |
-
return false;
|
773 |
-
}
|
774 |
-
|
775 |
-
/**
|
776 |
-
* Determine if the browser is the MSNBot or not (last updated 1.9)
|
777 |
-
* @return boolean True if the browser is the MSNBot otherwise false
|
778 |
-
*/
|
779 |
-
protected function checkBrowserMSNBot()
|
780 |
-
{
|
781 |
-
if (stripos($this->_agent, "msnbot") !== false) {
|
782 |
-
$aresult = explode("/", stristr($this->_agent, "msnbot"));
|
783 |
-
if (isset($aresult[1])) {
|
784 |
-
$aversion = explode(" ", $aresult[1]);
|
785 |
-
$this->setVersion(str_replace(";", "", $aversion[0]));
|
786 |
-
$this->_browser_name = self::BROWSER_MSNBOT;
|
787 |
-
$this->setRobot(true);
|
788 |
-
return true;
|
789 |
-
}
|
790 |
-
}
|
791 |
-
return false;
|
792 |
-
}
|
793 |
-
|
794 |
-
/**
|
795 |
-
* Determine if the browser is the BingBot or not (last updated 1.9)
|
796 |
-
* @return boolean True if the browser is the BingBot otherwise false
|
797 |
-
*/
|
798 |
-
protected function checkBrowserBingBot()
|
799 |
-
{
|
800 |
-
if (stripos($this->_agent, "bingbot") !== false) {
|
801 |
-
$aresult = explode("/", stristr($this->_agent, "bingbot"));
|
802 |
-
if (isset($aresult[1])) {
|
803 |
-
$aversion = explode(" ", $aresult[1]);
|
804 |
-
$this->setVersion(str_replace(";", "", $aversion[0]));
|
805 |
-
$this->_browser_name = self::BROWSER_BINGBOT;
|
806 |
-
$this->setRobot(true);
|
807 |
-
return true;
|
808 |
-
}
|
809 |
-
}
|
810 |
-
return false;
|
811 |
-
}
|
812 |
-
|
813 |
-
/**
|
814 |
-
* Determine if the browser is the W3C Validator or not (last updated 1.7)
|
815 |
-
* @return boolean True if the browser is the W3C Validator otherwise false
|
816 |
-
*/
|
817 |
-
protected function checkBrowserW3CValidator()
|
818 |
-
{
|
819 |
-
if (stripos($this->_agent, 'W3C-checklink') !== false) {
|
820 |
-
$aresult = explode('/', stristr($this->_agent, 'W3C-checklink'));
|
821 |
-
if (isset($aresult[1])) {
|
822 |
-
$aversion = explode(' ', $aresult[1]);
|
823 |
-
$this->setVersion($aversion[0]);
|
824 |
-
$this->_browser_name = self::BROWSER_W3CVALIDATOR;
|
825 |
-
return true;
|
826 |
-
}
|
827 |
-
} else if (stripos($this->_agent, 'W3C_Validator') !== false) {
|
828 |
-
// Some of the Validator versions do not delineate w/ a slash - add it back in
|
829 |
-
$ua = str_replace("W3C_Validator ", "W3C_Validator/", $this->_agent);
|
830 |
-
$aresult = explode('/', stristr($ua, 'W3C_Validator'));
|
831 |
-
if (isset($aresult[1])) {
|
832 |
-
$aversion = explode(' ', $aresult[1]);
|
833 |
-
$this->setVersion($aversion[0]);
|
834 |
-
$this->_browser_name = self::BROWSER_W3CVALIDATOR;
|
835 |
-
return true;
|
836 |
-
}
|
837 |
-
} else if (stripos($this->_agent, 'W3C-mobileOK') !== false) {
|
838 |
-
$this->_browser_name = self::BROWSER_W3CVALIDATOR;
|
839 |
-
$this->setMobile(true);
|
840 |
-
return true;
|
841 |
-
}
|
842 |
-
return false;
|
843 |
-
}
|
844 |
-
|
845 |
-
/**
|
846 |
-
* Determine if the browser is the Yahoo! Slurp Robot or not (last updated 1.7)
|
847 |
-
* @return boolean True if the browser is the Yahoo! Slurp Robot otherwise false
|
848 |
-
*/
|
849 |
-
protected function checkBrowserSlurp()
|
850 |
-
{
|
851 |
-
if (stripos($this->_agent, 'slurp') !== false) {
|
852 |
-
$aresult = explode('/', stristr($this->_agent, 'Slurp'));
|
853 |
-
if (isset($aresult[1])) {
|
854 |
-
$aversion = explode(' ', $aresult[1]);
|
855 |
-
$this->setVersion($aversion[0]);
|
856 |
-
$this->_browser_name = self::BROWSER_SLURP;
|
857 |
-
$this->setRobot(true);
|
858 |
-
$this->setMobile(false);
|
859 |
-
return true;
|
860 |
-
}
|
861 |
-
}
|
862 |
-
return false;
|
863 |
-
}
|
864 |
-
|
865 |
-
/**
|
866 |
-
* Determine if the browser is Edge or not
|
867 |
-
* @return boolean True if the browser is Edge otherwise false
|
868 |
-
*/
|
869 |
-
protected function checkBrowserEdge()
|
870 |
-
{
|
871 |
-
if (stripos($this->_agent, 'Edge/') !== false) {
|
872 |
-
$aresult = explode('/', stristr($this->_agent, 'Edge'));
|
873 |
-
if (isset($aresult[1])) {
|
874 |
-
$aversion = explode(' ', $aresult[1]);
|
875 |
-
$this->setVersion($aversion[0]);
|
876 |
-
$this->setBrowser(self::BROWSER_EDGE);
|
877 |
-
if (stripos($this->_agent, 'Windows Phone') !== false || stripos($this->_agent, 'Android') !== false) {
|
878 |
-
$this->setMobile(true);
|
879 |
-
}
|
880 |
-
return true;
|
881 |
-
}
|
882 |
-
}
|
883 |
-
return false;
|
884 |
-
}
|
885 |
-
|
886 |
-
/**
|
887 |
-
* Determine if the browser is Internet Explorer or not (last updated 1.7)
|
888 |
-
* @return boolean True if the browser is Internet Explorer otherwise false
|
889 |
-
*/
|
890 |
-
protected function checkBrowserInternetExplorer()
|
891 |
-
{
|
892 |
-
// Test for IE11
|
893 |
-
if (stripos($this->_agent, 'Trident/7.0; rv:11.0') !== false) {
|
894 |
-
$this->setBrowser(self::BROWSER_IE);
|
895 |
-
$this->setVersion('11.0');
|
896 |
-
return true;
|
897 |
-
} // Test for v1 - v1.5 IE
|
898 |
-
else if (stripos($this->_agent, 'microsoft internet explorer') !== false) {
|
899 |
-
$this->setBrowser(self::BROWSER_IE);
|
900 |
-
$this->setVersion('1.0');
|
901 |
-
$aresult = stristr($this->_agent, '/');
|
902 |
-
if (preg_match('/308|425|426|474|0b1/i', $aresult)) {
|
903 |
-
$this->setVersion('1.5');
|
904 |
-
}
|
905 |
-
return true;
|
906 |
-
} // Test for versions > 1.5
|
907 |
-
else if (stripos($this->_agent, 'msie') !== false && stripos($this->_agent, 'opera') === false) {
|
908 |
-
// See if the browser is the odd MSN Explorer
|
909 |
-
if (stripos($this->_agent, 'msnb') !== false) {
|
910 |
-
$aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'MSN'));
|
911 |
-
if (isset($aresult[1])) {
|
912 |
-
$this->setBrowser(self::BROWSER_MSN);
|
913 |
-
$this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1]));
|
914 |
-
return true;
|
915 |
-
}
|
916 |
-
}
|
917 |
-
$aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'msie'));
|
918 |
-
if (isset($aresult[1])) {
|
919 |
-
$this->setBrowser(self::BROWSER_IE);
|
920 |
-
$this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1]));
|
921 |
-
if(preg_match('#trident/([0-9\.]+);#i', $this->_agent, $aresult)){
|
922 |
-
if($aresult[1] == '3.1'){
|
923 |
-
$this->setVersion('7.0');
|
924 |
-
}
|
925 |
-
else if($aresult[1] == '4.0'){
|
926 |
-
$this->setVersion('8.0');
|
927 |
-
}
|
928 |
-
else if($aresult[1] == '5.0'){
|
929 |
-
$this->setVersion('9.0');
|
930 |
-
}
|
931 |
-
else if($aresult[1] == '6.0'){
|
932 |
-
$this->setVersion('10.0');
|
933 |
-
}
|
934 |
-
else if($aresult[1] == '7.0'){
|
935 |
-
$this->setVersion('11.0');
|
936 |
-
}
|
937 |
-
else if($aresult[1] == '8.0'){
|
938 |
-
$this->setVersion('11.0');
|
939 |
-
}
|
940 |
-
}
|
941 |
-
if(stripos($this->_agent, 'IEMobile') !== false) {
|
942 |
-
$this->setBrowser(self::BROWSER_POCKET_IE);
|
943 |
-
$this->setMobile(true);
|
944 |
-
}
|
945 |
-
return true;
|
946 |
-
}
|
947 |
-
} // Test for versions > IE 10
|
948 |
-
else if (stripos($this->_agent, 'trident') !== false) {
|
949 |
-
$this->setBrowser(self::BROWSER_IE);
|
950 |
-
$result = explode('rv:', $this->_agent);
|
951 |
-
if (isset($result[1])) {
|
952 |
-
$this->setVersion(preg_replace('/[^0-9.]+/', '', $result[1]));
|
953 |
-
$this->_agent = str_replace(array("Mozilla", "Gecko"), "MSIE", $this->_agent);
|
954 |
-
}
|
955 |
-
} // Test for Pocket IE
|
956 |
-
else if (stripos($this->_agent, 'mspie') !== false || stripos($this->_agent, 'pocket') !== false) {
|
957 |
-
$aresult = explode(' ', stristr($this->_agent, 'mspie'));
|
958 |
-
if (isset($aresult[1])) {
|
959 |
-
$this->setPlatform(self::PLATFORM_WINDOWS_CE);
|
960 |
-
$this->setBrowser(self::BROWSER_POCKET_IE);
|
961 |
-
$this->setMobile(true);
|
962 |
-
|
963 |
-
if (stripos($this->_agent, 'mspie') !== false) {
|
964 |
-
$this->setVersion($aresult[1]);
|
965 |
-
} else {
|
966 |
-
$aversion = explode('/', $this->_agent);
|
967 |
-
if (isset($aversion[1])) {
|
968 |
-
$this->setVersion($aversion[1]);
|
969 |
-
}
|
970 |
-
}
|
971 |
-
return true;
|
972 |
-
}
|
973 |
-
}
|
974 |
-
return false;
|
975 |
-
}
|
976 |
-
|
977 |
-
/**
|
978 |
-
* Determine if the browser is Opera or not (last updated 1.7)
|
979 |
-
* @return boolean True if the browser is Opera otherwise false
|
980 |
-
*/
|
981 |
-
protected function checkBrowserOpera()
|
982 |
-
{
|
983 |
-
if (stripos($this->_agent, 'opera mini') !== false) {
|
984 |
-
$resultant = stristr($this->_agent, 'opera mini');
|
985 |
-
if (preg_match('/\//', $resultant)) {
|
986 |
-
$aresult = explode('/', $resultant);
|
987 |
-
if (isset($aresult[1])) {
|
988 |
-
$aversion = explode(' ', $aresult[1]);
|
989 |
-
$this->setVersion($aversion[0]);
|
990 |
-
}
|
991 |
-
} else {
|
992 |
-
$aversion = explode(' ', stristr($resultant, 'opera mini'));
|
993 |
-
if (isset($aversion[1])) {
|
994 |
-
$this->setVersion($aversion[1]);
|
995 |
-
}
|
996 |
-
}
|
997 |
-
$this->_browser_name = self::BROWSER_OPERA_MINI;
|
998 |
-
$this->setMobile(true);
|
999 |
-
return true;
|
1000 |
-
} else if (stripos($this->_agent, 'opera') !== false) {
|
1001 |
-
$resultant = stristr($this->_agent, 'opera');
|
1002 |
-
if (preg_match('/Version\/(1*.*)$/', $resultant, $matches)) {
|
1003 |
-
$this->setVersion($matches[1]);
|
1004 |
-
} else if (preg_match('/\//', $resultant)) {
|
1005 |
-
$aresult = explode('/', str_replace("(", " ", $resultant));
|
1006 |
-
if (isset($aresult[1])) {
|
1007 |
-
$aversion = explode(' ', $aresult[1]);
|
1008 |
-
$this->setVersion($aversion[0]);
|
1009 |
-
}
|
1010 |
-
} else {
|
1011 |
-
$aversion = explode(' ', stristr($resultant, 'opera'));
|
1012 |
-
$this->setVersion(isset($aversion[1]) ? $aversion[1] : "");
|
1013 |
-
}
|
1014 |
-
if (stripos($this->_agent, 'Opera Mobi') !== false) {
|
1015 |
-
$this->setMobile(true);
|
1016 |
-
}
|
1017 |
-
$this->_browser_name = self::BROWSER_OPERA;
|
1018 |
-
return true;
|
1019 |
-
} else if (stripos($this->_agent, 'OPR') !== false) {
|
1020 |
-
$resultant = stristr($this->_agent, 'OPR');
|
1021 |
-
if (preg_match('/\//', $resultant)) {
|
1022 |
-
$aresult = explode('/', str_replace("(", " ", $resultant));
|
1023 |
-
if (isset($aresult[1])) {
|
1024 |
-
$aversion = explode(' ', $aresult[1]);
|
1025 |
-
$this->setVersion($aversion[0]);
|
1026 |
-
}
|
1027 |
-
}
|
1028 |
-
if (stripos($this->_agent, 'Mobile') !== false) {
|
1029 |
-
$this->setMobile(true);
|
1030 |
-
}
|
1031 |
-
$this->_browser_name = self::BROWSER_OPERA;
|
1032 |
-
return true;
|
1033 |
-
}
|
1034 |
-
return false;
|
1035 |
-
}
|
1036 |
-
|
1037 |
-
/**
|
1038 |
-
* Determine if the browser is Chrome or not (last updated 1.7)
|
1039 |
-
* @return boolean True if the browser is Chrome otherwise false
|
1040 |
-
*/
|
1041 |
-
protected function checkBrowserChrome()
|
1042 |
-
{
|
1043 |
-
if (stripos($this->_agent, 'Chrome') !== false) {
|
1044 |
-
$aresult = explode('/', stristr($this->_agent, 'Chrome'));
|
1045 |
-
if (isset($aresult[1])) {
|
1046 |
-
$aversion = explode(' ', $aresult[1]);
|
1047 |
-
$this->setVersion($aversion[0]);
|
1048 |
-
$this->setBrowser(self::BROWSER_CHROME);
|
1049 |
-
//Chrome on Android
|
1050 |
-
if (stripos($this->_agent, 'Android') !== false) {
|
1051 |
-
if (stripos($this->_agent, 'Mobile') !== false) {
|
1052 |
-
$this->setMobile(true);
|
1053 |
-
} else {
|
1054 |
-
$this->setTablet(true);
|
1055 |
-
}
|
1056 |
-
}
|
1057 |
-
return true;
|
1058 |
-
}
|
1059 |
-
}
|
1060 |
-
return false;
|
1061 |
-
}
|
1062 |
-
|
1063 |
-
|
1064 |
-
/**
|
1065 |
-
* Determine if the browser is WebTv or not (last updated 1.7)
|
1066 |
-
* @return boolean True if the browser is WebTv otherwise false
|
1067 |
-
*/
|
1068 |
-
protected function checkBrowserWebTv()
|
1069 |
-
{
|
1070 |
-
if (stripos($this->_agent, 'webtv') !== false) {
|
1071 |
-
$aresult = explode('/', stristr($this->_agent, 'webtv'));
|
1072 |
-
if (isset($aresult[1])) {
|
1073 |
-
$aversion = explode(' ', $aresult[1]);
|
1074 |
-
$this->setVersion($aversion[0]);
|
1075 |
-
$this->setBrowser(self::BROWSER_WEBTV);
|
1076 |
-
return true;
|
1077 |
-
}
|
1078 |
-
}
|
1079 |
-
return false;
|
1080 |
-
}
|
1081 |
-
|
1082 |
-
/**
|
1083 |
-
* Determine if the browser is NetPositive or not (last updated 1.7)
|
1084 |
-
* @return boolean True if the browser is NetPositive otherwise false
|
1085 |
-
*/
|
1086 |
-
protected function checkBrowserNetPositive()
|
1087 |
-
{
|
1088 |
-
if (stripos($this->_agent, 'NetPositive') !== false) {
|
1089 |
-
$aresult = explode('/', stristr($this->_agent, 'NetPositive'));
|
1090 |
-
if (isset($aresult[1])) {
|
1091 |
-
$aversion = explode(' ', $aresult[1]);
|
1092 |
-
$this->setVersion(str_replace(array('(', ')', ';'), '', $aversion[0]));
|
1093 |
-
$this->setBrowser(self::BROWSER_NETPOSITIVE);
|
1094 |
-
return true;
|
1095 |
-
}
|
1096 |
-
}
|
1097 |
-
return false;
|
1098 |
-
}
|
1099 |
-
|
1100 |
-
/**
|
1101 |
-
* Determine if the browser is Galeon or not (last updated 1.7)
|
1102 |
-
* @return boolean True if the browser is Galeon otherwise false
|
1103 |
-
*/
|
1104 |
-
protected function checkBrowserGaleon()
|
1105 |
-
{
|
1106 |
-
if (stripos($this->_agent, 'galeon') !== false) {
|
1107 |
-
$aresult = explode(' ', stristr($this->_agent, 'galeon'));
|
1108 |
-
$aversion = explode('/', $aresult[0]);
|
1109 |
-
if (isset($aversion[1])) {
|
1110 |
-
$this->setVersion($aversion[1]);
|
1111 |
-
$this->setBrowser(self::BROWSER_GALEON);
|
1112 |
-
return true;
|
1113 |
-
}
|
1114 |
-
}
|
1115 |
-
return false;
|
1116 |
-
}
|
1117 |
-
|
1118 |
-
/**
|
1119 |
-
* Determine if the browser is Konqueror or not (last updated 1.7)
|
1120 |
-
* @return boolean True if the browser is Konqueror otherwise false
|
1121 |
-
*/
|
1122 |
-
protected function checkBrowserKonqueror()
|
1123 |
-
{
|
1124 |
-
if (stripos($this->_agent, 'Konqueror') !== false) {
|
1125 |
-
$aresult = explode(' ', stristr($this->_agent, 'Konqueror'));
|
1126 |
-
$aversion = explode('/', $aresult[0]);
|
1127 |
-
if (isset($aversion[1])) {
|
1128 |
-
$this->setVersion($aversion[1]);
|
1129 |
-
$this->setBrowser(self::BROWSER_KONQUEROR);
|
1130 |
-
return true;
|
1131 |
-
}
|
1132 |
-
}
|
1133 |
-
return false;
|
1134 |
-
}
|
1135 |
-
|
1136 |
-
/**
|
1137 |
-
* Determine if the browser is iCab or not (last updated 1.7)
|
1138 |
-
* @return boolean True if the browser is iCab otherwise false
|
1139 |
-
*/
|
1140 |
-
protected function checkBrowserIcab()
|
1141 |
-
{
|
1142 |
-
if (stripos($this->_agent, 'icab') !== false) {
|
1143 |
-
$aversion = explode(' ', stristr(str_replace('/', ' ', $this->_agent), 'icab'));
|
1144 |
-
if (isset($aversion[1])) {
|
1145 |
-
$this->setVersion($aversion[1]);
|
1146 |
-
$this->setBrowser(self::BROWSER_ICAB);
|
1147 |
-
return true;
|
1148 |
-
}
|
1149 |
-
}
|
1150 |
-
return false;
|
1151 |
-
}
|
1152 |
-
|
1153 |
-
/**
|
1154 |
-
* Determine if the browser is OmniWeb or not (last updated 1.7)
|
1155 |
-
* @return boolean True if the browser is OmniWeb otherwise false
|
1156 |
-
*/
|
1157 |
-
protected function checkBrowserOmniWeb()
|
1158 |
-
{
|
1159 |
-
if (stripos($this->_agent, 'omniweb') !== false) {
|
1160 |
-
$aresult = explode('/', stristr($this->_agent, 'omniweb'));
|
1161 |
-
$aversion = explode(' ', isset($aresult[1]) ? $aresult[1] : "");
|
1162 |
-
$this->setVersion($aversion[0]);
|
1163 |
-
$this->setBrowser(self::BROWSER_OMNIWEB);
|
1164 |
-
return true;
|
1165 |
-
}
|
1166 |
-
return false;
|
1167 |
-
}
|
1168 |
-
|
1169 |
-
/**
|
1170 |
-
* Determine if the browser is Phoenix or not (last updated 1.7)
|
1171 |
-
* @return boolean True if the browser is Phoenix otherwise false
|
1172 |
-
*/
|
1173 |
-
protected function checkBrowserPhoenix()
|
1174 |
-
{
|
1175 |
-
if (stripos($this->_agent, 'Phoenix') !== false) {
|
1176 |
-
$aversion = explode('/', stristr($this->_agent, 'Phoenix'));
|
1177 |
-
if (isset($aversion[1])) {
|
1178 |
-
$this->setVersion($aversion[1]);
|
1179 |
-
$this->setBrowser(self::BROWSER_PHOENIX);
|
1180 |
-
return true;
|
1181 |
-
}
|
1182 |
-
}
|
1183 |
-
return false;
|
1184 |
-
}
|
1185 |
-
|
1186 |
-
/**
|
1187 |
-
* Determine if the browser is Firebird or not (last updated 1.7)
|
1188 |
-
* @return boolean True if the browser is Firebird otherwise false
|
1189 |
-
*/
|
1190 |
-
protected function checkBrowserFirebird()
|
1191 |
-
{
|
1192 |
-
if (stripos($this->_agent, 'Firebird') !== false) {
|
1193 |
-
$aversion = explode('/', stristr($this->_agent, 'Firebird'));
|
1194 |
-
if (isset($aversion[1])) {
|
1195 |
-
$this->setVersion($aversion[1]);
|
1196 |
-
$this->setBrowser(self::BROWSER_FIREBIRD);
|
1197 |
-
return true;
|
1198 |
-
}
|
1199 |
-
}
|
1200 |
-
return false;
|
1201 |
-
}
|
1202 |
-
|
1203 |
-
/**
|
1204 |
-
* Determine if the browser is Netscape Navigator 9+ or not (last updated 1.7)
|
1205 |
-
* NOTE: (http://browser.netscape.com/ - Official support ended on March 1st, 2008)
|
1206 |
-
* @return boolean True if the browser is Netscape Navigator 9+ otherwise false
|
1207 |
-
*/
|
1208 |
-
protected function checkBrowserNetscapeNavigator9Plus()
|
1209 |
-
{
|
1210 |
-
if (stripos($this->_agent, 'Firefox') !== false && preg_match('/Navigator\/([^ ]*)/i', $this->_agent, $matches)) {
|
1211 |
-
$this->setVersion($matches[1]);
|
1212 |
-
$this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
|
1213 |
-
return true;
|
1214 |
-
} else if (stripos($this->_agent, 'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i', $this->_agent, $matches)) {
|
1215 |
-
$this->setVersion($matches[1]);
|
1216 |
-
$this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
|
1217 |
-
return true;
|
1218 |
-
}
|
1219 |
-
return false;
|
1220 |
-
}
|
1221 |
-
|
1222 |
-
/**
|
1223 |
-
* Determine if the browser is Shiretoko or not (https://wiki.mozilla.org/Projects/shiretoko) (last updated 1.7)
|
1224 |
-
* @return boolean True if the browser is Shiretoko otherwise false
|
1225 |
-
*/
|
1226 |
-
protected function checkBrowserShiretoko()
|
1227 |
-
{
|
1228 |
-
if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/Shiretoko\/([^ ]*)/i', $this->_agent, $matches)) {
|
1229 |
-
$this->setVersion($matches[1]);
|
1230 |
-
$this->setBrowser(self::BROWSER_SHIRETOKO);
|
1231 |
-
return true;
|
1232 |
-
}
|
1233 |
-
return false;
|
1234 |
-
}
|
1235 |
-
|
1236 |
-
/**
|
1237 |
-
* Determine if the browser is Ice Cat or not (http://en.wikipedia.org/wiki/GNU_IceCat) (last updated 1.7)
|
1238 |
-
* @return boolean True if the browser is Ice Cat otherwise false
|
1239 |
-
*/
|
1240 |
-
protected function checkBrowserIceCat()
|
1241 |
-
{
|
1242 |
-
if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/IceCat\/([^ ]*)/i', $this->_agent, $matches)) {
|
1243 |
-
$this->setVersion($matches[1]);
|
1244 |
-
$this->setBrowser(self::BROWSER_ICECAT);
|
1245 |
-
return true;
|
1246 |
-
}
|
1247 |
-
return false;
|
1248 |
-
}
|
1249 |
-
|
1250 |
-
/**
|
1251 |
-
* Determine if the browser is Nokia or not (last updated 1.7)
|
1252 |
-
* @return boolean True if the browser is Nokia otherwise false
|
1253 |
-
*/
|
1254 |
-
protected function checkBrowserNokia()
|
1255 |
-
{
|
1256 |
-
if (preg_match("/Nokia([^\/]+)\/([^ SP]+)/i", $this->_agent, $matches)) {
|
1257 |
-
$this->setVersion($matches[2]);
|
1258 |
-
if (stripos($this->_agent, 'Series60') !== false || strpos($this->_agent, 'S60') !== false) {
|
1259 |
-
$this->setBrowser(self::BROWSER_NOKIA_S60);
|
1260 |
-
} else {
|
1261 |
-
$this->setBrowser(self::BROWSER_NOKIA);
|
1262 |
-
}
|
1263 |
-
$this->setMobile(true);
|
1264 |
-
return true;
|
1265 |
-
}
|
1266 |
-
return false;
|
1267 |
-
}
|
1268 |
-
|
1269 |
-
/**
|
1270 |
-
* Determine if the browser is Firefox or not (last updated 1.7)
|
1271 |
-
* @return boolean True if the browser is Firefox otherwise false
|
1272 |
-
*/
|
1273 |
-
protected function checkBrowserFirefox()
|
1274 |
-
{
|
1275 |
-
if (stripos($this->_agent, 'safari') === false) {
|
1276 |
-
if (preg_match("/Firefox[\/ \(]([^ ;\)]+)/i", $this->_agent, $matches)) {
|
1277 |
-
$this->setVersion($matches[1]);
|
1278 |
-
$this->setBrowser(self::BROWSER_FIREFOX);
|
1279 |
-
//Firefox on Android
|
1280 |
-
if (stripos($this->_agent, 'Android') !== false) {
|
1281 |
-
if (stripos($this->_agent, 'Mobile') !== false) {
|
1282 |
-
$this->setMobile(true);
|
1283 |
-
} else {
|
1284 |
-
$this->setTablet(true);
|
1285 |
-
}
|
1286 |
-
}
|
1287 |
-
return true;
|
1288 |
-
} else if (preg_match("/Firefox$/i", $this->_agent, $matches)) {
|
1289 |
-
$this->setVersion("");
|
1290 |
-
$this->setBrowser(self::BROWSER_FIREFOX);
|
1291 |
-
return true;
|
1292 |
-
}
|
1293 |
-
}
|
1294 |
-
return false;
|
1295 |
-
}
|
1296 |
-
|
1297 |
-
/**
|
1298 |
-
* Determine if the browser is Firefox or not (last updated 1.7)
|
1299 |
-
* @return boolean True if the browser is Firefox otherwise false
|
1300 |
-
*/
|
1301 |
-
protected function checkBrowserIceweasel()
|
1302 |
-
{
|
1303 |
-
if (stripos($this->_agent, 'Iceweasel') !== false) {
|
1304 |
-
$aresult = explode('/', stristr($this->_agent, 'Iceweasel'));
|
1305 |
-
if (isset($aresult[1])) {
|
1306 |
-
$aversion = explode(' ', $aresult[1]);
|
1307 |
-
$this->setVersion($aversion[0]);
|
1308 |
-
$this->setBrowser(self::BROWSER_ICEWEASEL);
|
1309 |
-
return true;
|
1310 |
-
}
|
1311 |
-
}
|
1312 |
-
return false;
|
1313 |
-
}
|
1314 |
-
|
1315 |
-
/**
|
1316 |
-
* Determine if the browser is Mozilla or not (last updated 1.7)
|
1317 |
-
* @return boolean True if the browser is Mozilla otherwise false
|
1318 |
-
*/
|
1319 |
-
protected function checkBrowserMozilla()
|
1320 |
-
{
|
1321 |
-
if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) {
|
1322 |
-
$aversion = explode(' ', stristr($this->_agent, 'rv:'));
|
1323 |
-
preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent, $aversion);
|
1324 |
-
$this->setVersion(str_replace('rv:', '', $aversion[0]));
|
1325 |
-
$this->setBrowser(self::BROWSER_MOZILLA);
|
1326 |
-
return true;
|
1327 |
-
} else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) {
|
1328 |
-
$aversion = explode('', stristr($this->_agent, 'rv:'));
|
1329 |
-
$this->setVersion(str_replace('rv:', '', $aversion[0]));
|
1330 |
-
$this->setBrowser(self::BROWSER_MOZILLA);
|
1331 |
-
return true;
|
1332 |
-
} else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/mozilla\/([^ ]*)/i', $this->_agent, $matches) && stripos($this->_agent, 'netscape') === false) {
|
1333 |
-
$this->setVersion($matches[1]);
|
1334 |
-
$this->setBrowser(self::BROWSER_MOZILLA);
|
1335 |
-
return true;
|
1336 |
-
}
|
1337 |
-
return false;
|
1338 |
-
}
|
1339 |
-
|
1340 |
-
/**
|
1341 |
-
* Determine if the browser is Lynx or not (last updated 1.7)
|
1342 |
-
* @return boolean True if the browser is Lynx otherwise false
|
1343 |
-
*/
|
1344 |
-
protected function checkBrowserLynx()
|
1345 |
-
{
|
1346 |
-
if (stripos($this->_agent, 'lynx') !== false) {
|
1347 |
-
$aresult = explode('/', stristr($this->_agent, 'Lynx'));
|
1348 |
-
$aversion = explode(' ', (isset($aresult[1]) ? $aresult[1] : ""));
|
1349 |
-
$this->setVersion($aversion[0]);
|
1350 |
-
$this->setBrowser(self::BROWSER_LYNX);
|
1351 |
-
return true;
|
1352 |
-
}
|
1353 |
-
return false;
|
1354 |
-
}
|
1355 |
-
|
1356 |
-
/**
|
1357 |
-
* Determine if the browser is Amaya or not (last updated 1.7)
|
1358 |
-
* @return boolean True if the browser is Amaya otherwise false
|
1359 |
-
*/
|
1360 |
-
protected function checkBrowserAmaya()
|
1361 |
-
{
|
1362 |
-
if (stripos($this->_agent, 'amaya') !== false) {
|
1363 |
-
$aresult = explode('/', stristr($this->_agent, 'Amaya'));
|
1364 |
-
if (isset($aresult[1])) {
|
1365 |
-
$aversion = explode(' ', $aresult[1]);
|
1366 |
-
$this->setVersion($aversion[0]);
|
1367 |
-
$this->setBrowser(self::BROWSER_AMAYA);
|
1368 |
-
return true;
|
1369 |
-
}
|
1370 |
-
}
|
1371 |
-
return false;
|
1372 |
-
}
|
1373 |
-
|
1374 |
-
/**
|
1375 |
-
* Determine if the browser is Safari or not (last updated 1.7)
|
1376 |
-
* @return boolean True if the browser is Safari otherwise false
|
1377 |
-
*/
|
1378 |
-
protected function checkBrowserSafari()
|
1379 |
-
{
|
1380 |
-
if (stripos($this->_agent, 'Safari') !== false
|
1381 |
-
&& stripos($this->_agent, 'iPhone') === false
|
1382 |
-
&& stripos($this->_agent, 'iPod') === false
|
1383 |
-
) {
|
1384 |
-
|
1385 |
-
$aresult = explode('/', stristr($this->_agent, 'Version'));
|
1386 |
-
if (isset($aresult[1])) {
|
1387 |
-
$aversion = explode(' ', $aresult[1]);
|
1388 |
-
$this->setVersion($aversion[0]);
|
1389 |
-
} else {
|
1390 |
-
$this->setVersion(self::VERSION_UNKNOWN);
|
1391 |
-
}
|
1392 |
-
$this->setBrowser(self::BROWSER_SAFARI);
|
1393 |
-
return true;
|
1394 |
-
}
|
1395 |
-
return false;
|
1396 |
-
}
|
1397 |
-
|
1398 |
-
protected function checkBrowserSamsung()
|
1399 |
-
{
|
1400 |
-
if (stripos($this->_agent, 'SamsungBrowser') !== false) {
|
1401 |
-
|
1402 |
-
$aresult = explode('/', stristr($this->_agent, 'SamsungBrowser'));
|
1403 |
-
if (isset($aresult[1])) {
|
1404 |
-
$aversion = explode(' ', $aresult[1]);
|
1405 |
-
$this->setVersion($aversion[0]);
|
1406 |
-
} else {
|
1407 |
-
$this->setVersion(self::VERSION_UNKNOWN);
|
1408 |
-
}
|
1409 |
-
$this->setBrowser(self::BROWSER_SAMSUNG);
|
1410 |
-
return true;
|
1411 |
-
}
|
1412 |
-
return false;
|
1413 |
-
}
|
1414 |
-
|
1415 |
-
protected function checkBrowserSilk()
|
1416 |
-
{
|
1417 |
-
if (stripos($this->_agent, 'Silk') !== false) {
|
1418 |
-
$aresult = explode('/', stristr($this->_agent, 'Silk'));
|
1419 |
-
if (isset($aresult[1])) {
|
1420 |
-
$aversion = explode(' ', $aresult[1]);
|
1421 |
-
$this->setVersion($aversion[0]);
|
1422 |
-
} else {
|
1423 |
-
$this->setVersion(self::VERSION_UNKNOWN);
|
1424 |
-
}
|
1425 |
-
$this->setBrowser(self::BROWSER_SILK);
|
1426 |
-
return true;
|
1427 |
-
}
|
1428 |
-
return false;
|
1429 |
-
}
|
1430 |
-
|
1431 |
-
protected function checkBrowserIframely()
|
1432 |
-
{
|
1433 |
-
if (stripos($this->_agent, 'Iframely') !== false) {
|
1434 |
-
$aresult = explode('/', stristr($this->_agent, 'Iframely'));
|
1435 |
-
if (isset($aresult[1])) {
|
1436 |
-
$aversion = explode(' ', $aresult[1]);
|
1437 |
-
$this->setVersion($aversion[0]);
|
1438 |
-
} else {
|
1439 |
-
$this->setVersion(self::VERSION_UNKNOWN);
|
1440 |
-
}
|
1441 |
-
$this->setBrowser(self::BROWSER_I_FRAME);
|
1442 |
-
return true;
|
1443 |
-
}
|
1444 |
-
return false;
|
1445 |
-
}
|
1446 |
-
|
1447 |
-
protected function checkBrowserCocoa()
|
1448 |
-
{
|
1449 |
-
if (stripos($this->_agent, 'CocoaRestClient') !== false) {
|
1450 |
-
$aresult = explode('/', stristr($this->_agent, 'CocoaRestClient'));
|
1451 |
-
if (isset($aresult[1])) {
|
1452 |
-
$aversion = explode(' ', $aresult[1]);
|
1453 |
-
$this->setVersion($aversion[0]);
|
1454 |
-
} else {
|
1455 |
-
$this->setVersion(self::VERSION_UNKNOWN);
|
1456 |
-
}
|
1457 |
-
$this->setBrowser(self::BROWSER_COCOA);
|
1458 |
-
return true;
|
1459 |
-
}
|
1460 |
-
return false;
|
1461 |
-
}
|
1462 |
-
|
1463 |
-
/**
|
1464 |
-
* Detect if URL is loaded from FacebookExternalHit
|
1465 |
-
* @return boolean True if it detects FacebookExternalHit otherwise false
|
1466 |
-
*/
|
1467 |
-
protected function checkFacebookExternalHit()
|
1468 |
-
{
|
1469 |
-
if (stristr($this->_agent, 'FacebookExternalHit')) {
|
1470 |
-
$this->setRobot(true);
|
1471 |
-
$this->setFacebook(true);
|
1472 |
-
return true;
|
1473 |
-
}
|
1474 |
-
return false;
|
1475 |
-
}
|
1476 |
-
|
1477 |
-
/**
|
1478 |
-
* Detect if URL is being loaded from internal Facebook browser
|
1479 |
-
* @return boolean True if it detects internal Facebook browser otherwise false
|
1480 |
-
*/
|
1481 |
-
protected function checkForFacebookIos()
|
1482 |
-
{
|
1483 |
-
if (stristr($this->_agent, 'FBIOS')) {
|
1484 |
-
$this->setFacebook(true);
|
1485 |
-
return true;
|
1486 |
-
}
|
1487 |
-
return false;
|
1488 |
-
}
|
1489 |
-
|
1490 |
-
/**
|
1491 |
-
* Detect Version for the Safari browser on iOS devices
|
1492 |
-
* @return boolean True if it detects the version correctly otherwise false
|
1493 |
-
*/
|
1494 |
-
protected function getSafariVersionOnIos()
|
1495 |
-
{
|
1496 |
-
$aresult = explode('/', stristr($this->_agent, 'Version'));
|
1497 |
-
if (isset($aresult[1])) {
|
1498 |
-
$aversion = explode(' ', $aresult[1]);
|
1499 |
-
$this->setVersion($aversion[0]);
|
1500 |
-
return true;
|
1501 |
-
}
|
1502 |
-
return false;
|
1503 |
-
}
|
1504 |
-
|
1505 |
-
/**
|
1506 |
-
* Detect Version for the Chrome browser on iOS devices
|
1507 |
-
* @return boolean True if it detects the version correctly otherwise false
|
1508 |
-
*/
|
1509 |
-
protected function getChromeVersionOnIos()
|
1510 |
-
{
|
1511 |
-
$aresult = explode('/', stristr($this->_agent, 'CriOS'));
|
1512 |
-
if (isset($aresult[1])) {
|
1513 |
-
$aversion = explode(' ', $aresult[1]);
|
1514 |
-
$this->setVersion($aversion[0]);
|
1515 |
-
$this->setBrowser(self::BROWSER_CHROME);
|
1516 |
-
return true;
|
1517 |
-
}
|
1518 |
-
return false;
|
1519 |
-
}
|
1520 |
-
|
1521 |
-
/**
|
1522 |
-
* Determine if the browser is iPhone or not (last updated 1.7)
|
1523 |
-
* @return boolean True if the browser is iPhone otherwise false
|
1524 |
-
*/
|
1525 |
-
protected function checkBrowseriPhone()
|
1526 |
-
{
|
1527 |
-
if (stripos($this->_agent, 'iPhone') !== false) {
|
1528 |
-
$this->setVersion(self::VERSION_UNKNOWN);
|
1529 |
-
$this->setBrowser(self::BROWSER_IPHONE);
|
1530 |
-
$this->getSafariVersionOnIos();
|
1531 |
-
$this->getChromeVersionOnIos();
|
1532 |
-
$this->checkForFacebookIos();
|
1533 |
-
$this->setMobile(true);
|
1534 |
-
return true;
|
1535 |
-
|
1536 |
-
}
|
1537 |
-
return false;
|
1538 |
-
}
|
1539 |
-
|
1540 |
-
/**
|
1541 |
-
* Determine if the browser is iPad or not (last updated 1.7)
|
1542 |
-
* @return boolean True if the browser is iPad otherwise false
|
1543 |
-
*/
|
1544 |
-
protected function checkBrowseriPad()
|
1545 |
-
{
|
1546 |
-
if (stripos($this->_agent, 'iPad') !== false) {
|
1547 |
-
$this->setVersion(self::VERSION_UNKNOWN);
|
1548 |
-
$this->setBrowser(self::BROWSER_IPAD);
|
1549 |
-
$this->getSafariVersionOnIos();
|
1550 |
-
$this->getChromeVersionOnIos();
|
1551 |
-
$this->checkForFacebookIos();
|
1552 |
-
$this->setTablet(true);
|
1553 |
-
return true;
|
1554 |
-
}
|
1555 |
-
return false;
|
1556 |
-
}
|
1557 |
-
|
1558 |
-
/**
|
1559 |
-
* Determine if the browser is iPod or not (last updated 1.7)
|
1560 |
-
* @return boolean True if the browser is iPod otherwise false
|
1561 |
-
*/
|
1562 |
-
protected function checkBrowseriPod()
|
1563 |
-
{
|
1564 |
-
if (stripos($this->_agent, 'iPod') !== false) {
|
1565 |
-
$this->setVersion(self::VERSION_UNKNOWN);
|
1566 |
-
$this->setBrowser(self::BROWSER_IPOD);
|
1567 |
-
$this->getSafariVersionOnIos();
|
1568 |
-
$this->getChromeVersionOnIos();
|
1569 |
-
$this->checkForFacebookIos();
|
1570 |
-
$this->setMobile(true);
|
1571 |
-
return true;
|
1572 |
-
}
|
1573 |
-
return false;
|
1574 |
-
}
|
1575 |
-
|
1576 |
-
/**
|
1577 |
-
* Determine if the browser is Android or not (last updated 1.7)
|
1578 |
-
* @return boolean True if the browser is Android otherwise false
|
1579 |
-
*/
|
1580 |
-
protected function checkBrowserAndroid()
|
1581 |
-
{
|
1582 |
-
if (stripos($this->_agent, 'Android') !== false) {
|
1583 |
-
$aresult = explode(' ', stristr($this->_agent, 'Android'));
|
1584 |
-
if (isset($aresult[1])) {
|
1585 |
-
$aversion = explode(' ', $aresult[1]);
|
1586 |
-
$this->setVersion($aversion[0]);
|
1587 |
-
} else {
|
1588 |
-
$this->setVersion(self::VERSION_UNKNOWN);
|
1589 |
-
}
|
1590 |
-
if (stripos($this->_agent, 'Mobile') !== false) {
|
1591 |
-
$this->setMobile(true);
|
1592 |
-
} else {
|
1593 |
-
$this->setTablet(true);
|
1594 |
-
}
|
1595 |
-
$this->setBrowser(self::BROWSER_ANDROID);
|
1596 |
-
return true;
|
1597 |
-
}
|
1598 |
-
return false;
|
1599 |
-
}
|
1600 |
-
|
1601 |
-
/**
|
1602 |
-
* Determine if the browser is Vivaldi
|
1603 |
-
* @return boolean True if the browser is Vivaldi otherwise false
|
1604 |
-
*/
|
1605 |
-
protected function checkBrowserVivaldi()
|
1606 |
-
{
|
1607 |
-
if (stripos($this->_agent, 'Vivaldi') !== false) {
|
1608 |
-
$aresult = explode('/', stristr($this->_agent, 'Vivaldi'));
|
1609 |
-
if (isset($aresult[1])) {
|
1610 |
-
$aversion = explode(' ', $aresult[1]);
|
1611 |
-
$this->setVersion($aversion[0]);
|
1612 |
-
$this->setBrowser(self::BROWSER_VIVALDI);
|
1613 |
-
return true;
|
1614 |
-
}
|
1615 |
-
}
|
1616 |
-
return false;
|
1617 |
-
}
|
1618 |
-
|
1619 |
-
/**
|
1620 |
-
* Determine if the browser is Yandex
|
1621 |
-
* @return boolean True if the browser is Yandex otherwise false
|
1622 |
-
*/
|
1623 |
-
protected function checkBrowserYandex()
|
1624 |
-
{
|
1625 |
-
if (stripos($this->_agent, 'YaBrowser') !== false) {
|
1626 |
-
$aresult = explode('/', stristr($this->_agent, 'YaBrowser'));
|
1627 |
-
if (isset($aresult[1])) {
|
1628 |
-
$aversion = explode(' ', $aresult[1]);
|
1629 |
-
$this->setVersion($aversion[0]);
|
1630 |
-
$this->setBrowser(self::BROWSER_YANDEX);
|
1631 |
-
|
1632 |
-
if (stripos($this->_agent, 'iPad') !== false) {
|
1633 |
-
$this->setTablet(true);
|
1634 |
-
} elseif (stripos($this->_agent, 'Mobile') !== false) {
|
1635 |
-
$this->setMobile(true);
|
1636 |
-
} elseif (stripos($this->_agent, 'Android') !== false) {
|
1637 |
-
$this->setTablet(true);
|
1638 |
-
}
|
1639 |
-
|
1640 |
-
return true;
|
1641 |
-
}
|
1642 |
-
}
|
1643 |
-
|
1644 |
-
return false;
|
1645 |
-
}
|
1646 |
-
|
1647 |
-
/**
|
1648 |
-
* Determine if the browser is a PlayStation
|
1649 |
-
* @return boolean True if the browser is PlayStation otherwise false
|
1650 |
-
*/
|
1651 |
-
protected function checkBrowserPlayStation()
|
1652 |
-
{
|
1653 |
-
if (stripos($this->_agent, 'PlayStation ') !== false) {
|
1654 |
-
$aresult = explode(' ', stristr($this->_agent, 'PlayStation '));
|
1655 |
-
$this->setBrowser(self::BROWSER_PLAYSTATION);
|
1656 |
-
if (isset($aresult[0])) {
|
1657 |
-
$aversion = explode(')', $aresult[2]);
|
1658 |
-
$this->setVersion($aversion[0]);
|
1659 |
-
if (stripos($this->_agent, 'Portable)') !== false || stripos($this->_agent, 'Vita') !== false) {
|
1660 |
-
$this->setMobile(true);
|
1661 |
-
}
|
1662 |
-
return true;
|
1663 |
-
}
|
1664 |
-
}
|
1665 |
-
return false;
|
1666 |
-
}
|
1667 |
-
|
1668 |
-
/**
|
1669 |
-
* Determine the user's platform (last updated 2.0)
|
1670 |
-
*/
|
1671 |
-
protected function checkPlatform()
|
1672 |
-
{
|
1673 |
-
if (stripos($this->_agent, 'windows') !== false) {
|
1674 |
-
$this->_platform = self::PLATFORM_WINDOWS;
|
1675 |
-
} else if (stripos($this->_agent, 'iPad') !== false) {
|
1676 |
-
$this->_platform = self::PLATFORM_IPAD;
|
1677 |
-
} else if (stripos($this->_agent, 'iPod') !== false) {
|
1678 |
-
$this->_platform = self::PLATFORM_IPOD;
|
1679 |
-
} else if (stripos($this->_agent, 'iPhone') !== false) {
|
1680 |
-
$this->_platform = self::PLATFORM_IPHONE;
|
1681 |
-
} elseif (stripos($this->_agent, 'mac') !== false) {
|
1682 |
-
$this->_platform = self::PLATFORM_APPLE;
|
1683 |
-
} elseif (stripos($this->_agent, 'android') !== false) {
|
1684 |
-
$this->_platform = self::PLATFORM_ANDROID;
|
1685 |
-
} elseif (stripos($this->_agent, 'Silk') !== false) {
|
1686 |
-
$this->_platform = self::PLATFORM_FIRE_OS;
|
1687 |
-
} elseif (stripos($this->_agent, 'linux') !== false && stripos($this->_agent, 'SMART-TV') !== false ) {
|
1688 |
-
$this->_platform = self::PLATFORM_LINUX .'/'.self::PLATFORM_SMART_TV;
|
1689 |
-
} elseif (stripos($this->_agent, 'linux') !== false) {
|
1690 |
-
$this->_platform = self::PLATFORM_LINUX;
|
1691 |
-
} else if (stripos($this->_agent, 'Nokia') !== false) {
|
1692 |
-
$this->_platform = self::PLATFORM_NOKIA;
|
1693 |
-
} else if (stripos($this->_agent, 'BlackBerry') !== false) {
|
1694 |
-
$this->_platform = self::PLATFORM_BLACKBERRY;
|
1695 |
-
} elseif (stripos($this->_agent, 'FreeBSD') !== false) {
|
1696 |
-
$this->_platform = self::PLATFORM_FREEBSD;
|
1697 |
-
} elseif (stripos($this->_agent, 'OpenBSD') !== false) {
|
1698 |
-
$this->_platform = self::PLATFORM_OPENBSD;
|
1699 |
-
} elseif (stripos($this->_agent, 'NetBSD') !== false) {
|
1700 |
-
$this->_platform = self::PLATFORM_NETBSD;
|
1701 |
-
} elseif (stripos($this->_agent, 'OpenSolaris') !== false) {
|
1702 |
-
$this->_platform = self::PLATFORM_OPENSOLARIS;
|
1703 |
-
} elseif (stripos($this->_agent, 'SunOS') !== false) {
|
1704 |
-
$this->_platform = self::PLATFORM_SUNOS;
|
1705 |
-
} elseif (stripos($this->_agent, 'OS\/2') !== false) {
|
1706 |
-
$this->_platform = self::PLATFORM_OS2;
|
1707 |
-
} elseif (stripos($this->_agent, 'BeOS') !== false) {
|
1708 |
-
$this->_platform = self::PLATFORM_BEOS;
|
1709 |
-
} elseif (stripos($this->_agent, 'win') !== false) {
|
1710 |
-
$this->_platform = self::PLATFORM_WINDOWS;
|
1711 |
-
} elseif (stripos($this->_agent, 'Playstation') !== false) {
|
1712 |
-
$this->_platform = self::PLATFORM_PLAYSTATION;
|
1713 |
-
} elseif (stripos($this->_agent, 'Roku') !== false) {
|
1714 |
-
$this->_platform = self::PLATFORM_ROKU;
|
1715 |
-
} elseif (stripos($this->_agent, 'iOS') !== false) {
|
1716 |
-
$this->_platform = self::PLATFORM_IPHONE . '/' . self::PLATFORM_IPAD;
|
1717 |
-
} elseif (stripos($this->_agent, 'tvOS') !== false) {
|
1718 |
-
$this->_platform = self::PLATFORM_APPLE_TV;
|
1719 |
-
} elseif (stripos($this->_agent, 'curl') !== false) {
|
1720 |
-
$this->_platform = self::PLATFORM_TERMINAL;
|
1721 |
-
} elseif (stripos($this->_agent, 'CrOS') !== false) {
|
1722 |
-
$this->_platform = self::PLATFORM_CHROME_OS;
|
1723 |
-
} elseif (stripos($this->_agent, 'okhttp') !== false) {
|
1724 |
-
$this->_platform = self::PLATFORM_JAVA_ANDROID;
|
1725 |
-
} elseif (stripos($this->_agent, 'PostmanRuntime') !== false) {
|
1726 |
-
$this->_platform = self::PLATFORM_POSTMAN;
|
1727 |
-
} elseif (stripos($this->_agent, 'Iframely') !== false) {
|
1728 |
-
$this->_platform = self::PLATFORM_I_FRAME;
|
1729 |
-
}
|
1730 |
-
|
1731 |
-
}
|
1732 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* File: Browser.php
|
5 |
+
* Author: Chris Schuld (http://chrisschuld.com/)
|
6 |
+
* Last Modified: July 22nd, 2016
|
7 |
+
* @version 2.0
|
8 |
+
* @package PegasusPHP
|
9 |
+
*
|
10 |
+
* Copyright (C) 2008-2010 Chris Schuld (chris@chrisschuld.com)
|
11 |
+
*
|
12 |
+
* This program is free software; you can redistribute it and/or
|
13 |
+
* modify it under the terms of the GNU General Public License as
|
14 |
+
* published by the Free Software Foundation; either version 2 of
|
15 |
+
* the License, or (at your option) any later version.
|
16 |
+
*
|
17 |
+
* This program is distributed in the hope that it will be useful,
|
18 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
19 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
20 |
+
* GNU General Public License for more details at:
|
21 |
+
* http://www.gnu.org/copyleft/gpl.html
|
22 |
+
*
|
23 |
+
*
|
24 |
+
* Typical Usage:
|
25 |
+
*
|
26 |
+
* $browser = new Browser();
|
27 |
+
* if( $browser->getBrowser() == Browser::BROWSER_FIREFOX && $browser->getVersion() >= 2 ) {
|
28 |
+
* echo 'You have FireFox version 2 or greater';
|
29 |
+
* }
|
30 |
+
*
|
31 |
+
* User Agents Sampled from: http://www.useragentstring.com/
|
32 |
+
*
|
33 |
+
* This implementation is based on the original work from Gary White
|
34 |
+
* http://apptools.com/phptools/browser/
|
35 |
+
*
|
36 |
+
*/
|
37 |
+
class Browser
|
38 |
+
{
|
39 |
+
private $_agent = '';
|
40 |
+
private $_browser_name = '';
|
41 |
+
private $_version = '';
|
42 |
+
private $_platform = '';
|
43 |
+
private $_os = '';
|
44 |
+
private $_is_aol = false;
|
45 |
+
private $_is_mobile = false;
|
46 |
+
private $_is_tablet = false;
|
47 |
+
private $_is_robot = false;
|
48 |
+
private $_is_facebook = false;
|
49 |
+
private $_aol_version = '';
|
50 |
+
|
51 |
+
const BROWSER_UNKNOWN = 'unknown';
|
52 |
+
const VERSION_UNKNOWN = 'unknown';
|
53 |
+
|
54 |
+
const BROWSER_OPERA = 'Opera'; // http://www.opera.com/
|
55 |
+
const BROWSER_OPERA_MINI = 'Opera Mini'; // http://www.opera.com/mini/
|
56 |
+
const BROWSER_WEBTV = 'WebTV'; // http://www.webtv.net/pc/
|
57 |
+
const BROWSER_EDGE = 'Edge'; // https://www.microsoft.com/edge
|
58 |
+
const BROWSER_IE = 'Internet Explorer'; // http://www.microsoft.com/ie/
|
59 |
+
const BROWSER_POCKET_IE = 'Pocket Internet Explorer'; // http://en.wikipedia.org/wiki/Internet_Explorer_Mobile
|
60 |
+
const BROWSER_KONQUEROR = 'Konqueror'; // http://www.konqueror.org/
|
61 |
+
const BROWSER_ICAB = 'iCab'; // http://www.icab.de/
|
62 |
+
const BROWSER_OMNIWEB = 'OmniWeb'; // http://www.omnigroup.com/applications/omniweb/
|
63 |
+
const BROWSER_FIREBIRD = 'Firebird'; // http://www.ibphoenix.com/
|
64 |
+
const BROWSER_FIREFOX = 'Firefox'; // http://www.mozilla.com/en-US/firefox/firefox.html
|
65 |
+
const BROWSER_ICEWEASEL = 'Iceweasel'; // http://www.geticeweasel.org/
|
66 |
+
const BROWSER_SHIRETOKO = 'Shiretoko'; // http://wiki.mozilla.org/Projects/shiretoko
|
67 |
+
const BROWSER_MOZILLA = 'Mozilla'; // http://www.mozilla.com/en-US/
|
68 |
+
const BROWSER_AMAYA = 'Amaya'; // http://www.w3.org/Amaya/
|
69 |
+
const BROWSER_LYNX = 'Lynx'; // http://en.wikipedia.org/wiki/Lynx
|
70 |
+
const BROWSER_SAFARI = 'Safari'; // http://apple.com
|
71 |
+
const BROWSER_IPHONE = 'iPhone'; // http://apple.com
|
72 |
+
const BROWSER_IPOD = 'iPod'; // http://apple.com
|
73 |
+
const BROWSER_IPAD = 'iPad'; // http://apple.com
|
74 |
+
const BROWSER_CHROME = 'Chrome'; // http://www.google.com/chrome
|
75 |
+
const BROWSER_ANDROID = 'Android'; // http://www.android.com/
|
76 |
+
const BROWSER_GOOGLEBOT = 'GoogleBot'; // http://en.wikipedia.org/wiki/Googlebot
|
77 |
+
|
78 |
+
const BROWSER_YANDEXBOT = 'YandexBot'; // http://yandex.com/bots
|
79 |
+
const BROWSER_YANDEXIMAGERESIZER_BOT = 'YandexImageResizer'; // http://yandex.com/bots
|
80 |
+
const BROWSER_YANDEXIMAGES_BOT = 'YandexImages'; // http://yandex.com/bots
|
81 |
+
const BROWSER_YANDEXVIDEO_BOT = 'YandexVideo'; // http://yandex.com/bots
|
82 |
+
const BROWSER_YANDEXMEDIA_BOT = 'YandexMedia'; // http://yandex.com/bots
|
83 |
+
const BROWSER_YANDEXBLOGS_BOT = 'YandexBlogs'; // http://yandex.com/bots
|
84 |
+
const BROWSER_YANDEXFAVICONS_BOT = 'YandexFavicons'; // http://yandex.com/bots
|
85 |
+
const BROWSER_YANDEXWEBMASTER_BOT = 'YandexWebmaster'; // http://yandex.com/bots
|
86 |
+
const BROWSER_YANDEXDIRECT_BOT = 'YandexDirect'; // http://yandex.com/bots
|
87 |
+
const BROWSER_YANDEXMETRIKA_BOT = 'YandexMetrika'; // http://yandex.com/bots
|
88 |
+
const BROWSER_YANDEXNEWS_BOT = 'YandexNews'; // http://yandex.com/bots
|
89 |
+
const BROWSER_YANDEXCATALOG_BOT = 'YandexCatalog'; // http://yandex.com/bots
|
90 |
+
|
91 |
+
const BROWSER_SLURP = 'Yahoo! Slurp'; // http://en.wikipedia.org/wiki/Yahoo!_Slurp
|
92 |
+
const BROWSER_W3CVALIDATOR = 'W3C Validator'; // http://validator.w3.org/
|
93 |
+
const BROWSER_BLACKBERRY = 'BlackBerry'; // http://www.blackberry.com/
|
94 |
+
const BROWSER_ICECAT = 'IceCat'; // http://en.wikipedia.org/wiki/GNU_IceCat
|
95 |
+
const BROWSER_NOKIA_S60 = 'Nokia S60 OSS Browser'; // http://en.wikipedia.org/wiki/Web_Browser_for_S60
|
96 |
+
const BROWSER_NOKIA = 'Nokia Browser'; // * all other WAP-based browsers on the Nokia Platform
|
97 |
+
const BROWSER_MSN = 'MSN Browser'; // http://explorer.msn.com/
|
98 |
+
const BROWSER_MSNBOT = 'MSN Bot'; // http://search.msn.com/msnbot.htm
|
99 |
+
const BROWSER_BINGBOT = 'Bing Bot'; // http://en.wikipedia.org/wiki/Bingbot
|
100 |
+
const BROWSER_VIVALDI = 'Vivalidi'; // https://vivaldi.com/
|
101 |
+
const BROWSER_YANDEX = 'Yandex'; // https://browser.yandex.ua/
|
102 |
+
|
103 |
+
const BROWSER_NETSCAPE_NAVIGATOR = 'Netscape Navigator'; // http://browser.netscape.com/ (DEPRECATED)
|
104 |
+
const BROWSER_GALEON = 'Galeon'; // http://galeon.sourceforge.net/ (DEPRECATED)
|
105 |
+
const BROWSER_NETPOSITIVE = 'NetPositive'; // http://en.wikipedia.org/wiki/NetPositive (DEPRECATED)
|
106 |
+
const BROWSER_PHOENIX = 'Phoenix'; // http://en.wikipedia.org/wiki/History_of_Mozilla_Firefox (DEPRECATED)
|
107 |
+
const BROWSER_PLAYSTATION = "PlayStation";
|
108 |
+
const BROWSER_SAMSUNG = "SamsungBrowser";
|
109 |
+
const BROWSER_SILK = "Silk";
|
110 |
+
const BROWSER_I_FRAME = "Iframely";
|
111 |
+
const BROWSER_COCOA = "CocoaRestClient";
|
112 |
+
|
113 |
+
const PLATFORM_UNKNOWN = 'unknown';
|
114 |
+
const PLATFORM_WINDOWS = 'Windows';
|
115 |
+
const PLATFORM_WINDOWS_CE = 'Windows CE';
|
116 |
+
const PLATFORM_APPLE = 'Apple';
|
117 |
+
const PLATFORM_LINUX = 'Linux';
|
118 |
+
const PLATFORM_OS2 = 'OS/2';
|
119 |
+
const PLATFORM_BEOS = 'BeOS';
|
120 |
+
const PLATFORM_IPHONE = 'iPhone';
|
121 |
+
const PLATFORM_IPOD = 'iPod';
|
122 |
+
const PLATFORM_IPAD = 'iPad';
|
123 |
+
const PLATFORM_BLACKBERRY = 'BlackBerry';
|
124 |
+
const PLATFORM_NOKIA = 'Nokia';
|
125 |
+
const PLATFORM_FREEBSD = 'FreeBSD';
|
126 |
+
const PLATFORM_OPENBSD = 'OpenBSD';
|
127 |
+
const PLATFORM_NETBSD = 'NetBSD';
|
128 |
+
const PLATFORM_SUNOS = 'SunOS';
|
129 |
+
const PLATFORM_OPENSOLARIS = 'OpenSolaris';
|
130 |
+
const PLATFORM_ANDROID = 'Android';
|
131 |
+
const PLATFORM_PLAYSTATION = "Sony PlayStation";
|
132 |
+
const PLATFORM_ROKU = "Roku";
|
133 |
+
const PLATFORM_APPLE_TV = "Apple TV";
|
134 |
+
const PLATFORM_TERMINAL = "Terminal";
|
135 |
+
const PLATFORM_FIRE_OS = "Fire OS";
|
136 |
+
const PLATFORM_SMART_TV = "SMART-TV";
|
137 |
+
const PLATFORM_CHROME_OS = "Chrome OS";
|
138 |
+
const PLATFORM_JAVA_ANDROID = "Java/Android";
|
139 |
+
const PLATFORM_POSTMAN = "Postman";
|
140 |
+
const PLATFORM_I_FRAME = "Iframely";
|
141 |
+
|
142 |
+
const OPERATING_SYSTEM_UNKNOWN = 'unknown';
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Class constructor
|
146 |
+
*/
|
147 |
+
public function __construct($userAgent = "")
|
148 |
+
{
|
149 |
+
$this->reset();
|
150 |
+
if ($userAgent != "") {
|
151 |
+
$this->setUserAgent($userAgent);
|
152 |
+
} else {
|
153 |
+
$this->determine();
|
154 |
+
}
|
155 |
+
}
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Reset all properties
|
159 |
+
*/
|
160 |
+
public function reset()
|
161 |
+
{
|
162 |
+
$this->_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "";
|
163 |
+
$this->_browser_name = self::BROWSER_UNKNOWN;
|
164 |
+
$this->_version = self::VERSION_UNKNOWN;
|
165 |
+
$this->_platform = self::PLATFORM_UNKNOWN;
|
166 |
+
$this->_os = self::OPERATING_SYSTEM_UNKNOWN;
|
167 |
+
$this->_is_aol = false;
|
168 |
+
$this->_is_mobile = false;
|
169 |
+
$this->_is_tablet = false;
|
170 |
+
$this->_is_robot = false;
|
171 |
+
$this->_is_facebook = false;
|
172 |
+
$this->_aol_version = self::VERSION_UNKNOWN;
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* Check to see if the specific browser is valid
|
177 |
+
* @param string $browserName
|
178 |
+
* @return bool True if the browser is the specified browser
|
179 |
+
*/
|
180 |
+
function isBrowser($browserName)
|
181 |
+
{
|
182 |
+
return (0 == strcasecmp($this->_browser_name, trim($browserName)));
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* The name of the browser. All return types are from the class contants
|
187 |
+
* @return string Name of the browser
|
188 |
+
*/
|
189 |
+
public function getBrowser()
|
190 |
+
{
|
191 |
+
return $this->_browser_name;
|
192 |
+
}
|
193 |
+
|
194 |
+
/**
|
195 |
+
* Set the name of the browser
|
196 |
+
* @param $browser string The name of the Browser
|
197 |
+
*/
|
198 |
+
public function setBrowser($browser)
|
199 |
+
{
|
200 |
+
$this->_browser_name = $browser;
|
201 |
+
}
|
202 |
+
|
203 |
+
/**
|
204 |
+
* The name of the platform. All return types are from the class contants
|
205 |
+
* @return string Name of the browser
|
206 |
+
*/
|
207 |
+
public function getPlatform()
|
208 |
+
{
|
209 |
+
return $this->_platform;
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* Set the name of the platform
|
214 |
+
* @param string $platform The name of the Platform
|
215 |
+
*/
|
216 |
+
public function setPlatform($platform)
|
217 |
+
{
|
218 |
+
$this->_platform = $platform;
|
219 |
+
}
|
220 |
+
|
221 |
+
/**
|
222 |
+
* The version of the browser.
|
223 |
+
* @return string Version of the browser (will only contain alpha-numeric characters and a period)
|
224 |
+
*/
|
225 |
+
public function getVersion()
|
226 |
+
{
|
227 |
+
return $this->_version;
|
228 |
+
}
|
229 |
+
|
230 |
+
/**
|
231 |
+
* Set the version of the browser
|
232 |
+
* @param string $version The version of the Browser
|
233 |
+
*/
|
234 |
+
public function setVersion($version)
|
235 |
+
{
|
236 |
+
$this->_version = preg_replace('/[^0-9,.,a-z,A-Z-]/', '', $version);
|
237 |
+
}
|
238 |
+
|
239 |
+
/**
|
240 |
+
* The version of AOL.
|
241 |
+
* @return string Version of AOL (will only contain alpha-numeric characters and a period)
|
242 |
+
*/
|
243 |
+
public function getAolVersion()
|
244 |
+
{
|
245 |
+
return $this->_aol_version;
|
246 |
+
}
|
247 |
+
|
248 |
+
/**
|
249 |
+
* Set the version of AOL
|
250 |
+
* @param string $version The version of AOL
|
251 |
+
*/
|
252 |
+
public function setAolVersion($version)
|
253 |
+
{
|
254 |
+
$this->_aol_version = preg_replace('/[^0-9,.,a-z,A-Z]/', '', $version);
|
255 |
+
}
|
256 |
+
|
257 |
+
/**
|
258 |
+
* Is the browser from AOL?
|
259 |
+
* @return boolean True if the browser is from AOL otherwise false
|
260 |
+
*/
|
261 |
+
public function isAol()
|
262 |
+
{
|
263 |
+
return $this->_is_aol;
|
264 |
+
}
|
265 |
+
|
266 |
+
/**
|
267 |
+
* Is the browser from a mobile device?
|
268 |
+
* @return boolean True if the browser is from a mobile device otherwise false
|
269 |
+
*/
|
270 |
+
public function isMobile()
|
271 |
+
{
|
272 |
+
return $this->_is_mobile;
|
273 |
+
}
|
274 |
+
|
275 |
+
/**
|
276 |
+
* Is the browser from a tablet device?
|
277 |
+
* @return boolean True if the browser is from a tablet device otherwise false
|
278 |
+
*/
|
279 |
+
public function isTablet()
|
280 |
+
{
|
281 |
+
return $this->_is_tablet;
|
282 |
+
}
|
283 |
+
|
284 |
+
/**
|
285 |
+
* Is the browser from a robot (ex Slurp,GoogleBot)?
|
286 |
+
* @return boolean True if the browser is from a robot otherwise false
|
287 |
+
*/
|
288 |
+
public function isRobot()
|
289 |
+
{
|
290 |
+
return $this->_is_robot;
|
291 |
+
}
|
292 |
+
|
293 |
+
/**
|
294 |
+
* Is the browser from facebook?
|
295 |
+
* @return boolean True if the browser is from facebook otherwise false
|
296 |
+
*/
|
297 |
+
public function isFacebook()
|
298 |
+
{
|
299 |
+
return $this->_is_facebook;
|
300 |
+
}
|
301 |
+
|
302 |
+
/**
|
303 |
+
* Set the browser to be from AOL
|
304 |
+
* @param $isAol
|
305 |
+
*/
|
306 |
+
public function setAol($isAol)
|
307 |
+
{
|
308 |
+
$this->_is_aol = $isAol;
|
309 |
+
}
|
310 |
+
|
311 |
+
/**
|
312 |
+
* Set the Browser to be mobile
|
313 |
+
* @param boolean $value is the browser a mobile browser or not
|
314 |
+
*/
|
315 |
+
protected function setMobile($value = true)
|
316 |
+
{
|
317 |
+
$this->_is_mobile = $value;
|
318 |
+
}
|
319 |
+
|
320 |
+
/**
|
321 |
+
* Set the Browser to be tablet
|
322 |
+
* @param boolean $value is the browser a tablet browser or not
|
323 |
+
*/
|
324 |
+
protected function setTablet($value = true)
|
325 |
+
{
|
326 |
+
$this->_is_tablet = $value;
|
327 |
+
}
|
328 |
+
|
329 |
+
/**
|
330 |
+
* Set the Browser to be a robot
|
331 |
+
* @param boolean $value is the browser a robot or not
|
332 |
+
*/
|
333 |
+
protected function setRobot($value = true)
|
334 |
+
{
|
335 |
+
$this->_is_robot = $value;
|
336 |
+
}
|
337 |
+
|
338 |
+
/**
|
339 |
+
* Set the Browser to be a Facebook request
|
340 |
+
* @param boolean $value is the browser a robot or not
|
341 |
+
*/
|
342 |
+
protected function setFacebook($value = true)
|
343 |
+
{
|
344 |
+
$this->_is_facebook = $value;
|
345 |
+
}
|
346 |
+
|
347 |
+
/**
|
348 |
+
* Get the user agent value in use to determine the browser
|
349 |
+
* @return string The user agent from the HTTP header
|
350 |
+
*/
|
351 |
+
public function getUserAgent()
|
352 |
+
{
|
353 |
+
return $this->_agent;
|
354 |
+
}
|
355 |
+
|
356 |
+
/**
|
357 |
+
* Set the user agent value (the construction will use the HTTP header value - this will overwrite it)
|
358 |
+
* @param string $agent_string The value for the User Agent
|
359 |
+
*/
|
360 |
+
public function setUserAgent($agent_string)
|
361 |
+
{
|
362 |
+
$this->reset();
|
363 |
+
$this->_agent = $agent_string;
|
364 |
+
$this->determine();
|
365 |
+
}
|
366 |
+
|
367 |
+
/**
|
368 |
+
* Used to determine if the browser is actually "chromeframe"
|
369 |
+
* @since 1.7
|
370 |
+
* @return boolean True if the browser is using chromeframe
|
371 |
+
*/
|
372 |
+
public function isChromeFrame()
|
373 |
+
{
|
374 |
+
return (strpos($this->_agent, "chromeframe") !== false);
|
375 |
+
}
|
376 |
+
|
377 |
+
/**
|
378 |
+
* Returns a formatted string with a summary of the details of the browser.
|
379 |
+
* @return string formatted string with a summary of the browser
|
380 |
+
*/
|
381 |
+
public function __toString()
|
382 |
+
{
|
383 |
+
return "<strong>Browser Name:</strong> {$this->getBrowser()}<br/>\n" .
|
384 |
+
"<strong>Browser Version:</strong> {$this->getVersion()}<br/>\n" .
|
385 |
+
"<strong>Browser User Agent String:</strong> {$this->getUserAgent()}<br/>\n" .
|
386 |
+
"<strong>Platform:</strong> {$this->getPlatform()}<br/>";
|
387 |
+
}
|
388 |
+
|
389 |
+
/**
|
390 |
+
* Protected routine to calculate and determine what the browser is in use (including platform)
|
391 |
+
*/
|
392 |
+
protected function determine()
|
393 |
+
{
|
394 |
+
$this->checkPlatform();
|
395 |
+
$this->checkBrowsers();
|
396 |
+
$this->checkForAol();
|
397 |
+
}
|
398 |
+
|
399 |
+
/**
|
400 |
+
* Protected routine to determine the browser type
|
401 |
+
* @return boolean True if the browser was detected otherwise false
|
402 |
+
*/
|
403 |
+
protected function checkBrowsers()
|
404 |
+
{
|
405 |
+
return (
|
406 |
+
// well-known, well-used
|
407 |
+
// Special Notes:
|
408 |
+
// (1) Opera must be checked before FireFox due to the odd
|
409 |
+
// user agents used in some older versions of Opera
|
410 |
+
// (2) WebTV is strapped onto Internet Explorer so we must
|
411 |
+
// check for WebTV before IE
|
412 |
+
// (3) (deprecated) Galeon is based on Firefox and needs to be
|
413 |
+
// tested before Firefox is tested
|
414 |
+
// (4) OmniWeb is based on Safari so OmniWeb check must occur
|
415 |
+
// before Safari
|
416 |
+
// (5) Netscape 9+ is based on Firefox so Netscape checks
|
417 |
+
// before FireFox are necessary
|
418 |
+
// (6) Vivalid is UA contains both Firefox and Chrome so Vivalid checks
|
419 |
+
// before Firefox and Chrome
|
420 |
+
$this->checkBrowserWebTv() ||
|
421 |
+
$this->checkBrowserEdge() ||
|
422 |
+
$this->checkBrowserInternetExplorer() ||
|
423 |
+
$this->checkBrowserOpera() ||
|
424 |
+
$this->checkBrowserGaleon() ||
|
425 |
+
$this->checkBrowserNetscapeNavigator9Plus() ||
|
426 |
+
$this->checkBrowserVivaldi() ||
|
427 |
+
$this->checkBrowserYandex() ||
|
428 |
+
$this->checkBrowserFirefox() ||
|
429 |
+
$this->checkBrowserChrome() ||
|
430 |
+
$this->checkBrowserOmniWeb() ||
|
431 |
+
|
432 |
+
// common mobile
|
433 |
+
$this->checkBrowserAndroid() ||
|
434 |
+
$this->checkBrowseriPad() ||
|
435 |
+
$this->checkBrowseriPod() ||
|
436 |
+
$this->checkBrowseriPhone() ||
|
437 |
+
$this->checkBrowserBlackBerry() ||
|
438 |
+
$this->checkBrowserNokia() ||
|
439 |
+
|
440 |
+
// common bots
|
441 |
+
$this->checkBrowserGoogleBot() ||
|
442 |
+
$this->checkBrowserMSNBot() ||
|
443 |
+
$this->checkBrowserBingBot() ||
|
444 |
+
$this->checkBrowserSlurp() ||
|
445 |
+
|
446 |
+
// Yandex bots
|
447 |
+
$this->checkBrowserYandexBot() ||
|
448 |
+
$this->checkBrowserYandexImageResizerBot() ||
|
449 |
+
$this->checkBrowserYandexBlogsBot() ||
|
450 |
+
$this->checkBrowserYandexCatalogBot() ||
|
451 |
+
$this->checkBrowserYandexDirectBot() ||
|
452 |
+
$this->checkBrowserYandexFaviconsBot() ||
|
453 |
+
$this->checkBrowserYandexImagesBot() ||
|
454 |
+
$this->checkBrowserYandexMediaBot() ||
|
455 |
+
$this->checkBrowserYandexMetrikaBot() ||
|
456 |
+
$this->checkBrowserYandexNewsBot() ||
|
457 |
+
$this->checkBrowserYandexVideoBot() ||
|
458 |
+
$this->checkBrowserYandexWebmasterBot() ||
|
459 |
+
|
460 |
+
// check for facebook external hit when loading URL
|
461 |
+
$this->checkFacebookExternalHit() ||
|
462 |
+
|
463 |
+
// WebKit base check (post mobile and others)
|
464 |
+
$this->checkBrowserSamsung() ||
|
465 |
+
$this->checkBrowserSilk() ||
|
466 |
+
$this->checkBrowserSafari() ||
|
467 |
+
|
468 |
+
// everyone else
|
469 |
+
$this->checkBrowserNetPositive() ||
|
470 |
+
$this->checkBrowserFirebird() ||
|
471 |
+
$this->checkBrowserKonqueror() ||
|
472 |
+
$this->checkBrowserIcab() ||
|
473 |
+
$this->checkBrowserPhoenix() ||
|
474 |
+
$this->checkBrowserAmaya() ||
|
475 |
+
$this->checkBrowserLynx() ||
|
476 |
+
$this->checkBrowserShiretoko() ||
|
477 |
+
$this->checkBrowserIceCat() ||
|
478 |
+
$this->checkBrowserIceweasel() ||
|
479 |
+
$this->checkBrowserW3CValidator() ||
|
480 |
+
$this->checkBrowserPlayStation() ||
|
481 |
+
$this->checkBrowserIframely() ||
|
482 |
+
$this->checkBrowserCocoa() ||
|
483 |
+
$this->checkBrowserMozilla() /* Mozilla is such an open standard that you must check it last */
|
484 |
+
|
485 |
+
|
486 |
+
);
|
487 |
+
}
|
488 |
+
|
489 |
+
/**
|
490 |
+
* Determine if the user is using a BlackBerry (last updated 1.7)
|
491 |
+
* @return boolean True if the browser is the BlackBerry browser otherwise false
|
492 |
+
*/
|
493 |
+
protected function checkBrowserBlackBerry()
|
494 |
+
{
|
495 |
+
if (stripos($this->_agent, 'blackberry') !== false) {
|
496 |
+
$aresult = explode("/", stristr($this->_agent, "BlackBerry"));
|
497 |
+
if (isset($aresult[1])) {
|
498 |
+
$aversion = explode(' ', $aresult[1]);
|
499 |
+
$this->setVersion($aversion[0]);
|
500 |
+
$this->_browser_name = self::BROWSER_BLACKBERRY;
|
501 |
+
$this->setMobile(true);
|
502 |
+
return true;
|
503 |
+
}
|
504 |
+
}
|
505 |
+
return false;
|
506 |
+
}
|
507 |
+
|
508 |
+
/**
|
509 |
+
* Determine if the user is using an AOL User Agent (last updated 1.7)
|
510 |
+
* @return boolean True if the browser is from AOL otherwise false
|
511 |
+
*/
|
512 |
+
protected function checkForAol()
|
513 |
+
{
|
514 |
+
$this->setAol(false);
|
515 |
+
$this->setAolVersion(self::VERSION_UNKNOWN);
|
516 |
+
|
517 |
+
if (stripos($this->_agent, 'aol') !== false) {
|
518 |
+
$aversion = explode(' ', stristr($this->_agent, 'AOL'));
|
519 |
+
if (isset($aversion[1])) {
|
520 |
+
$this->setAol(true);
|
521 |
+
$this->setAolVersion(preg_replace('/[^0-9\.a-z]/i', '', $aversion[1]));
|
522 |
+
return true;
|
523 |
+
}
|
524 |
+
}
|
525 |
+
return false;
|
526 |
+
}
|
527 |
+
|
528 |
+
/**
|
529 |
+
* Determine if the browser is the GoogleBot or not (last updated 1.7)
|
530 |
+
* @return boolean True if the browser is the GoogletBot otherwise false
|
531 |
+
*/
|
532 |
+
protected function checkBrowserGoogleBot()
|
533 |
+
{
|
534 |
+
if (stripos($this->_agent, 'googlebot') !== false) {
|
535 |
+
$aresult = explode('/', stristr($this->_agent, 'googlebot'));
|
536 |
+
if (isset($aresult[1])) {
|
537 |
+
$aversion = explode(' ', $aresult[1]);
|
538 |
+
$this->setVersion(str_replace(';', '', $aversion[0]));
|
539 |
+
$this->_browser_name = self::BROWSER_GOOGLEBOT;
|
540 |
+
$this->setRobot(true);
|
541 |
+
return true;
|
542 |
+
}
|
543 |
+
}
|
544 |
+
return false;
|
545 |
+
}
|
546 |
+
|
547 |
+
/**
|
548 |
+
* Determine if the browser is the YandexBot or not
|
549 |
+
* @return boolean True if the browser is the YandexBot otherwise false
|
550 |
+
*/
|
551 |
+
protected function checkBrowserYandexBot()
|
552 |
+
{
|
553 |
+
if (stripos($this->_agent, 'YandexBot') !== false) {
|
554 |
+
$aresult = explode('/', stristr($this->_agent, 'YandexBot'));
|
555 |
+
if (isset($aresult[1])) {
|
556 |
+
$aversion = explode(' ', $aresult[1]);
|
557 |
+
$this->setVersion(str_replace(';', '', $aversion[0]));
|
558 |
+
$this->_browser_name = self::BROWSER_YANDEXBOT;
|
559 |
+
$this->setRobot(true);
|
560 |
+
return true;
|
561 |
+
}
|
562 |
+
}
|
563 |
+
return false;
|
564 |
+
}
|
565 |
+
|
566 |
+
/**
|
567 |
+
* Determine if the browser is the YandexImageResizer or not
|
568 |
+
* @return boolean True if the browser is the YandexImageResizer otherwise false
|
569 |
+
*/
|
570 |
+
protected function checkBrowserYandexImageResizerBot()
|
571 |
+
{
|
572 |
+
if (stripos($this->_agent, 'YandexImageResizer') !== false) {
|
573 |
+
$aresult = explode('/', stristr($this->_agent, 'YandexImageResizer'));
|
574 |
+
if (isset($aresult[1])) {
|
575 |
+
$aversion = explode(' ', $aresult[1]);
|
576 |
+
$this->setVersion(str_replace(';', '', $aversion[0]));
|
577 |
+
$this->_browser_name = self::BROWSER_YANDEXIMAGERESIZER_BOT;
|
578 |
+
$this->setRobot(true);
|
579 |
+
return true;
|
580 |
+
}
|
581 |
+
}
|
582 |
+
return false;
|
583 |
+
}
|
584 |
+
|
585 |
+
/**
|
586 |
+
* Determine if the browser is the YandexCatalog or not
|
587 |
+
* @return boolean True if the browser is the YandexCatalog otherwise false
|
588 |
+
*/
|
589 |
+
protected function checkBrowserYandexCatalogBot()
|
590 |
+
{
|
591 |
+
if (stripos($this->_agent, 'YandexCatalog') !== false) {
|
592 |
+
$aresult = explode('/', stristr($this->_agent, 'YandexCatalog'));
|
593 |
+
if (isset($aresult[1])) {
|
594 |
+
$aversion = explode(' ', $aresult[1]);
|
595 |
+
$this->setVersion(str_replace(';', '', $aversion[0]));
|
596 |
+
$this->_browser_name = self::BROWSER_YANDEXCATALOG_BOT;
|
597 |
+
$this->setRobot(true);
|
598 |
+
return true;
|
599 |
+
}
|
600 |
+
}
|
601 |
+
return false;
|
602 |
+
}
|
603 |
+
|
604 |
+
/**
|
605 |
+
* Determine if the browser is the YandexNews or not
|
606 |
+
* @return boolean True if the browser is the YandexNews otherwise false
|
607 |
+
*/
|
608 |
+
protected function checkBrowserYandexNewsBot()
|
609 |
+
{
|
610 |
+
if (stripos($this->_agent, 'YandexNews') !== false) {
|
611 |
+
$aresult = explode('/', stristr($this->_agent, 'YandexNews'));
|
612 |
+
if (isset($aresult[1])) {
|
613 |
+
$aversion = explode(' ', $aresult[1]);
|
614 |
+
$this->setVersion(str_replace(';', '', $aversion[0]));
|
615 |
+
$this->_browser_name = self::BROWSER_YANDEXNEWS_BOT;
|
616 |
+
$this->setRobot(true);
|
617 |
+
return true;
|
618 |
+
}
|
619 |
+
}
|
620 |
+
return false;
|
621 |
+
}
|
622 |
+
|
623 |
+
/**
|
624 |
+
* Determine if the browser is the YandexMetrika or not
|
625 |
+
* @return boolean True if the browser is the YandexMetrika otherwise false
|
626 |
+
*/
|
627 |
+
protected function checkBrowserYandexMetrikaBot()
|
628 |
+
{
|
629 |
+
if (stripos($this->_agent, 'YandexMetrika') !== false) {
|
630 |
+
$aresult = explode('/', stristr($this->_agent, 'YandexMetrika'));
|
631 |
+
if (isset($aresult[1])) {
|
632 |
+
$aversion = explode(' ', $aresult[1]);
|
633 |
+
$this->setVersion(str_replace(';', '', $aversion[0]));
|
634 |
+
$this->_browser_name = self::BROWSER_YANDEXMETRIKA_BOT;
|
635 |
+
$this->setRobot(true);
|
636 |
+
return true;
|
637 |
+
}
|
638 |
+
}
|
639 |
+
return false;
|
640 |
+
}
|
641 |
+
|
642 |
+
/**
|
643 |
+
* Determine if the browser is the YandexDirect or not
|
644 |
+
* @return boolean True if the browser is the YandexDirect otherwise false
|
645 |
+
*/
|
646 |
+
protected function checkBrowserYandexDirectBot()
|
647 |
+
{
|
648 |
+
if (stripos($this->_agent, 'YandexDirect') !== false) {
|
649 |
+
$aresult = explode('/', stristr($this->_agent, 'YandexDirect'));
|
650 |
+
if (isset($aresult[1])) {
|
651 |
+
$aversion = explode(' ', $aresult[1]);
|
652 |
+
$this->setVersion(str_replace(';', '', $aversion[0]));
|
653 |
+
$this->_browser_name = self::BROWSER_YANDEXDIRECT_BOT;
|
654 |
+
$this->setRobot(true);
|
655 |
+
return true;
|
656 |
+
}
|
657 |
+
}
|
658 |
+
return false;
|
659 |
+
}
|
660 |
+
|
661 |
+
/**
|
662 |
+
* Determine if the browser is the YandexWebmaster or not
|
663 |
+
* @return boolean True if the browser is the YandexWebmaster otherwise false
|
664 |
+
*/
|
665 |
+
protected function checkBrowserYandexWebmasterBot()
|
666 |
+
{
|
667 |
+
if (stripos($this->_agent, 'YandexWebmaster') !== false) {
|
668 |
+
$aresult = explode('/', stristr($this->_agent, 'YandexWebmaster'));
|
669 |
+
if (isset($aresult[1])) {
|
670 |
+
$aversion = explode(' ', $aresult[1]);
|
671 |
+
$this->setVersion(str_replace(';', '', $aversion[0]));
|
672 |
+
$this->_browser_name = self::BROWSER_YANDEXWEBMASTER_BOT;
|
673 |
+
$this->setRobot(true);
|
674 |
+
return true;
|
675 |
+
}
|
676 |
+
}
|
677 |
+
return false;
|
678 |
+
}
|
679 |
+
|
680 |
+
/**
|
681 |
+
* Determine if the browser is the YandexFavicons or not
|
682 |
+
* @return boolean True if the browser is the YandexFavicons otherwise false
|
683 |
+
*/
|
684 |
+
protected function checkBrowserYandexFaviconsBot()
|
685 |
+
{
|
686 |
+
if (stripos($this->_agent, 'YandexFavicons') !== false) {
|
687 |
+
$aresult = explode('/', stristr($this->_agent, 'YandexFavicons'));
|
688 |
+
if (isset($aresult[1])) {
|
689 |
+
$aversion = explode(' ', $aresult[1]);
|
690 |
+
$this->setVersion(str_replace(';', '', $aversion[0]));
|
691 |
+
$this->_browser_name = self::BROWSER_YANDEXFAVICONS_BOT;
|
692 |
+
$this->setRobot(true);
|
693 |
+
return true;
|
694 |
+
}
|
695 |
+
}
|
696 |
+
return false;
|
697 |
+
}
|
698 |
+
|
699 |
+
/**
|
700 |
+
* Determine if the browser is the YandexBlogs or not
|
701 |
+
* @return boolean True if the browser is the YandexBlogs otherwise false
|
702 |
+
*/
|
703 |
+
protected function checkBrowserYandexBlogsBot()
|
704 |
+
{
|
705 |
+
if (stripos($this->_agent, 'YandexBlogs') !== false) {
|
706 |
+
$aresult = explode('/', stristr($this->_agent, 'YandexBlogs'));
|
707 |
+
if (isset($aresult[1])) {
|
708 |
+
$aversion = explode(' ', $aresult[1]);
|
709 |
+
$this->setVersion(str_replace(';', '', $aversion[0]));
|
710 |
+
$this->_browser_name = self::BROWSER_YANDEXBLOGS_BOT;
|
711 |
+
$this->setRobot(true);
|
712 |
+
return true;
|
713 |
+
}
|
714 |
+
}
|
715 |
+
return false;
|
716 |
+
}
|
717 |
+
|
718 |
+
/**
|
719 |
+
* Determine if the browser is the YandexMedia or not
|
720 |
+
* @return boolean True if the browser is the YandexMedia otherwise false
|
721 |
+
*/
|
722 |
+
protected function checkBrowserYandexMediaBot()
|
723 |
+
{
|
724 |
+
if (stripos($this->_agent, 'YandexMedia') !== false) {
|
725 |
+
$aresult = explode('/', stristr($this->_agent, 'YandexMedia'));
|
726 |
+
if (isset($aresult[1])) {
|
727 |
+
$aversion = explode(' ', $aresult[1]);
|
728 |
+
$this->setVersion(str_replace(';', '', $aversion[0]));
|
729 |
+
$this->_browser_name = self::BROWSER_YANDEXMEDIA_BOT;
|
730 |
+
$this->setRobot(true);
|
731 |
+
return true;
|
732 |
+
}
|
733 |
+
}
|
734 |
+
return false;
|
735 |
+
}
|
736 |
+
|
737 |
+
/**
|
738 |
+
* Determine if the browser is the YandexVideo or not
|
739 |
+
* @return boolean True if the browser is the YandexVideo otherwise false
|
740 |
+
*/
|
741 |
+
protected function checkBrowserYandexVideoBot()
|
742 |
+
{
|
743 |
+
if (stripos($this->_agent, 'YandexVideo') !== false) {
|
744 |
+
$aresult = explode('/', stristr($this->_agent, 'YandexVideo'));
|
745 |
+
if (isset($aresult[1])) {
|
746 |
+
$aversion = explode(' ', $aresult[1]);
|
747 |
+
$this->setVersion(str_replace(';', '', $aversion[0]));
|
748 |
+
$this->_browser_name = self::BROWSER_YANDEXVIDEO_BOT;
|
749 |
+
$this->setRobot(true);
|
750 |
+
return true;
|
751 |
+
}
|
752 |
+
}
|
753 |
+
return false;
|
754 |
+
}
|
755 |
+
|
756 |
+
/**
|
757 |
+
* Determine if the browser is the YandexImages or not
|
758 |
+
* @return boolean True if the browser is the YandexImages otherwise false
|
759 |
+
*/
|
760 |
+
protected function checkBrowserYandexImagesBot()
|
761 |
+
{
|
762 |
+
if (stripos($this->_agent, 'YandexImages') !== false) {
|
763 |
+
$aresult = explode('/', stristr($this->_agent, 'YandexImages'));
|
764 |
+
if (isset($aresult[1])) {
|
765 |
+
$aversion = explode(' ', $aresult[1]);
|
766 |
+
$this->setVersion(str_replace(';', '', $aversion[0]));
|
767 |
+
$this->_browser_name = self::BROWSER_YANDEXIMAGES_BOT;
|
768 |
+
$this->setRobot(true);
|
769 |
+
return true;
|
770 |
+
}
|
771 |
+
}
|
772 |
+
return false;
|
773 |
+
}
|
774 |
+
|
775 |
+
/**
|
776 |
+
* Determine if the browser is the MSNBot or not (last updated 1.9)
|
777 |
+
* @return boolean True if the browser is the MSNBot otherwise false
|
778 |
+
*/
|
779 |
+
protected function checkBrowserMSNBot()
|
780 |
+
{
|
781 |
+
if (stripos($this->_agent, "msnbot") !== false) {
|
782 |
+
$aresult = explode("/", stristr($this->_agent, "msnbot"));
|
783 |
+
if (isset($aresult[1])) {
|
784 |
+
$aversion = explode(" ", $aresult[1]);
|
785 |
+
$this->setVersion(str_replace(";", "", $aversion[0]));
|
786 |
+
$this->_browser_name = self::BROWSER_MSNBOT;
|
787 |
+
$this->setRobot(true);
|
788 |
+
return true;
|
789 |
+
}
|
790 |
+
}
|
791 |
+
return false;
|
792 |
+
}
|
793 |
+
|
794 |
+
/**
|
795 |
+
* Determine if the browser is the BingBot or not (last updated 1.9)
|
796 |
+
* @return boolean True if the browser is the BingBot otherwise false
|
797 |
+
*/
|
798 |
+
protected function checkBrowserBingBot()
|
799 |
+
{
|
800 |
+
if (stripos($this->_agent, "bingbot") !== false) {
|
801 |
+
$aresult = explode("/", stristr($this->_agent, "bingbot"));
|
802 |
+
if (isset($aresult[1])) {
|
803 |
+
$aversion = explode(" ", $aresult[1]);
|
804 |
+
$this->setVersion(str_replace(";", "", $aversion[0]));
|
805 |
+
$this->_browser_name = self::BROWSER_BINGBOT;
|
806 |
+
$this->setRobot(true);
|
807 |
+
return true;
|
808 |
+
}
|
809 |
+
}
|
810 |
+
return false;
|
811 |
+
}
|
812 |
+
|
813 |
+
/**
|
814 |
+
* Determine if the browser is the W3C Validator or not (last updated 1.7)
|
815 |
+
* @return boolean True if the browser is the W3C Validator otherwise false
|
816 |
+
*/
|
817 |
+
protected function checkBrowserW3CValidator()
|
818 |
+
{
|
819 |
+
if (stripos($this->_agent, 'W3C-checklink') !== false) {
|
820 |
+
$aresult = explode('/', stristr($this->_agent, 'W3C-checklink'));
|
821 |
+
if (isset($aresult[1])) {
|
822 |
+
$aversion = explode(' ', $aresult[1]);
|
823 |
+
$this->setVersion($aversion[0]);
|
824 |
+
$this->_browser_name = self::BROWSER_W3CVALIDATOR;
|
825 |
+
return true;
|
826 |
+
}
|
827 |
+
} else if (stripos($this->_agent, 'W3C_Validator') !== false) {
|
828 |
+
// Some of the Validator versions do not delineate w/ a slash - add it back in
|
829 |
+
$ua = str_replace("W3C_Validator ", "W3C_Validator/", $this->_agent);
|
830 |
+
$aresult = explode('/', stristr($ua, 'W3C_Validator'));
|
831 |
+
if (isset($aresult[1])) {
|
832 |
+
$aversion = explode(' ', $aresult[1]);
|
833 |
+
$this->setVersion($aversion[0]);
|
834 |
+
$this->_browser_name = self::BROWSER_W3CVALIDATOR;
|
835 |
+
return true;
|
836 |
+
}
|
837 |
+
} else if (stripos($this->_agent, 'W3C-mobileOK') !== false) {
|
838 |
+
$this->_browser_name = self::BROWSER_W3CVALIDATOR;
|
839 |
+
$this->setMobile(true);
|
840 |
+
return true;
|
841 |
+
}
|
842 |
+
return false;
|
843 |
+
}
|
844 |
+
|
845 |
+
/**
|
846 |
+
* Determine if the browser is the Yahoo! Slurp Robot or not (last updated 1.7)
|
847 |
+
* @return boolean True if the browser is the Yahoo! Slurp Robot otherwise false
|
848 |
+
*/
|
849 |
+
protected function checkBrowserSlurp()
|
850 |
+
{
|
851 |
+
if (stripos($this->_agent, 'slurp') !== false) {
|
852 |
+
$aresult = explode('/', stristr($this->_agent, 'Slurp'));
|
853 |
+
if (isset($aresult[1])) {
|
854 |
+
$aversion = explode(' ', $aresult[1]);
|
855 |
+
$this->setVersion($aversion[0]);
|
856 |
+
$this->_browser_name = self::BROWSER_SLURP;
|
857 |
+
$this->setRobot(true);
|
858 |
+
$this->setMobile(false);
|
859 |
+
return true;
|
860 |
+
}
|
861 |
+
}
|
862 |
+
return false;
|
863 |
+
}
|
864 |
+
|
865 |
+
/**
|
866 |
+
* Determine if the browser is Edge or not
|
867 |
+
* @return boolean True if the browser is Edge otherwise false
|
868 |
+
*/
|
869 |
+
protected function checkBrowserEdge()
|
870 |
+
{
|
871 |
+
if (stripos($this->_agent, 'Edge/') !== false) {
|
872 |
+
$aresult = explode('/', stristr($this->_agent, 'Edge'));
|
873 |
+
if (isset($aresult[1])) {
|
874 |
+
$aversion = explode(' ', $aresult[1]);
|
875 |
+
$this->setVersion($aversion[0]);
|
876 |
+
$this->setBrowser(self::BROWSER_EDGE);
|
877 |
+
if (stripos($this->_agent, 'Windows Phone') !== false || stripos($this->_agent, 'Android') !== false) {
|
878 |
+
$this->setMobile(true);
|
879 |
+
}
|
880 |
+
return true;
|
881 |
+
}
|
882 |
+
}
|
883 |
+
return false;
|
884 |
+
}
|
885 |
+
|
886 |
+
/**
|
887 |
+
* Determine if the browser is Internet Explorer or not (last updated 1.7)
|
888 |
+
* @return boolean True if the browser is Internet Explorer otherwise false
|
889 |
+
*/
|
890 |
+
protected function checkBrowserInternetExplorer()
|
891 |
+
{
|
892 |
+
// Test for IE11
|
893 |
+
if (stripos($this->_agent, 'Trident/7.0; rv:11.0') !== false) {
|
894 |
+
$this->setBrowser(self::BROWSER_IE);
|
895 |
+
$this->setVersion('11.0');
|
896 |
+
return true;
|
897 |
+
} // Test for v1 - v1.5 IE
|
898 |
+
else if (stripos($this->_agent, 'microsoft internet explorer') !== false) {
|
899 |
+
$this->setBrowser(self::BROWSER_IE);
|
900 |
+
$this->setVersion('1.0');
|
901 |
+
$aresult = stristr($this->_agent, '/');
|
902 |
+
if (preg_match('/308|425|426|474|0b1/i', $aresult)) {
|
903 |
+
$this->setVersion('1.5');
|
904 |
+
}
|
905 |
+
return true;
|
906 |
+
} // Test for versions > 1.5
|
907 |
+
else if (stripos($this->_agent, 'msie') !== false && stripos($this->_agent, 'opera') === false) {
|
908 |
+
// See if the browser is the odd MSN Explorer
|
909 |
+
if (stripos($this->_agent, 'msnb') !== false) {
|
910 |
+
$aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'MSN'));
|
911 |
+
if (isset($aresult[1])) {
|
912 |
+
$this->setBrowser(self::BROWSER_MSN);
|
913 |
+
$this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1]));
|
914 |
+
return true;
|
915 |
+
}
|
916 |
+
}
|
917 |
+
$aresult = explode(' ', stristr(str_replace(';', '; ', $this->_agent), 'msie'));
|
918 |
+
if (isset($aresult[1])) {
|
919 |
+
$this->setBrowser(self::BROWSER_IE);
|
920 |
+
$this->setVersion(str_replace(array('(', ')', ';'), '', $aresult[1]));
|
921 |
+
if(preg_match('#trident/([0-9\.]+);#i', $this->_agent, $aresult)){
|
922 |
+
if($aresult[1] == '3.1'){
|
923 |
+
$this->setVersion('7.0');
|
924 |
+
}
|
925 |
+
else if($aresult[1] == '4.0'){
|
926 |
+
$this->setVersion('8.0');
|
927 |
+
}
|
928 |
+
else if($aresult[1] == '5.0'){
|
929 |
+
$this->setVersion('9.0');
|
930 |
+
}
|
931 |
+
else if($aresult[1] == '6.0'){
|
932 |
+
$this->setVersion('10.0');
|
933 |
+
}
|
934 |
+
else if($aresult[1] == '7.0'){
|
935 |
+
$this->setVersion('11.0');
|
936 |
+
}
|
937 |
+
else if($aresult[1] == '8.0'){
|
938 |
+
$this->setVersion('11.0');
|
939 |
+
}
|
940 |
+
}
|
941 |
+
if(stripos($this->_agent, 'IEMobile') !== false) {
|
942 |
+
$this->setBrowser(self::BROWSER_POCKET_IE);
|
943 |
+
$this->setMobile(true);
|
944 |
+
}
|
945 |
+
return true;
|
946 |
+
}
|
947 |
+
} // Test for versions > IE 10
|
948 |
+
else if (stripos($this->_agent, 'trident') !== false) {
|
949 |
+
$this->setBrowser(self::BROWSER_IE);
|
950 |
+
$result = explode('rv:', $this->_agent);
|
951 |
+
if (isset($result[1])) {
|
952 |
+
$this->setVersion(preg_replace('/[^0-9.]+/', '', $result[1]));
|
953 |
+
$this->_agent = str_replace(array("Mozilla", "Gecko"), "MSIE", $this->_agent);
|
954 |
+
}
|
955 |
+
} // Test for Pocket IE
|
956 |
+
else if (stripos($this->_agent, 'mspie') !== false || stripos($this->_agent, 'pocket') !== false) {
|
957 |
+
$aresult = explode(' ', stristr($this->_agent, 'mspie'));
|
958 |
+
if (isset($aresult[1])) {
|
959 |
+
$this->setPlatform(self::PLATFORM_WINDOWS_CE);
|
960 |
+
$this->setBrowser(self::BROWSER_POCKET_IE);
|
961 |
+
$this->setMobile(true);
|
962 |
+
|
963 |
+
if (stripos($this->_agent, 'mspie') !== false) {
|
964 |
+
$this->setVersion($aresult[1]);
|
965 |
+
} else {
|
966 |
+
$aversion = explode('/', $this->_agent);
|
967 |
+
if (isset($aversion[1])) {
|
968 |
+
$this->setVersion($aversion[1]);
|
969 |
+
}
|
970 |
+
}
|
971 |
+
return true;
|
972 |
+
}
|
973 |
+
}
|
974 |
+
return false;
|
975 |
+
}
|
976 |
+
|
977 |
+
/**
|
978 |
+
* Determine if the browser is Opera or not (last updated 1.7)
|
979 |
+
* @return boolean True if the browser is Opera otherwise false
|
980 |
+
*/
|
981 |
+
protected function checkBrowserOpera()
|
982 |
+
{
|
983 |
+
if (stripos($this->_agent, 'opera mini') !== false) {
|
984 |
+
$resultant = stristr($this->_agent, 'opera mini');
|
985 |
+
if (preg_match('/\//', $resultant)) {
|
986 |
+
$aresult = explode('/', $resultant);
|
987 |
+
if (isset($aresult[1])) {
|
988 |
+
$aversion = explode(' ', $aresult[1]);
|
989 |
+
$this->setVersion($aversion[0]);
|
990 |
+
}
|
991 |
+
} else {
|
992 |
+
$aversion = explode(' ', stristr($resultant, 'opera mini'));
|
993 |
+
if (isset($aversion[1])) {
|
994 |
+
$this->setVersion($aversion[1]);
|
995 |
+
}
|
996 |
+
}
|
997 |
+
$this->_browser_name = self::BROWSER_OPERA_MINI;
|
998 |
+
$this->setMobile(true);
|
999 |
+
return true;
|
1000 |
+
} else if (stripos($this->_agent, 'opera') !== false) {
|
1001 |
+
$resultant = stristr($this->_agent, 'opera');
|
1002 |
+
if (preg_match('/Version\/(1*.*)$/', $resultant, $matches)) {
|
1003 |
+
$this->setVersion($matches[1]);
|
1004 |
+
} else if (preg_match('/\//', $resultant)) {
|
1005 |
+
$aresult = explode('/', str_replace("(", " ", $resultant));
|
1006 |
+
if (isset($aresult[1])) {
|
1007 |
+
$aversion = explode(' ', $aresult[1]);
|
1008 |
+
$this->setVersion($aversion[0]);
|
1009 |
+
}
|
1010 |
+
} else {
|
1011 |
+
$aversion = explode(' ', stristr($resultant, 'opera'));
|
1012 |
+
$this->setVersion(isset($aversion[1]) ? $aversion[1] : "");
|
1013 |
+
}
|
1014 |
+
if (stripos($this->_agent, 'Opera Mobi') !== false) {
|
1015 |
+
$this->setMobile(true);
|
1016 |
+
}
|
1017 |
+
$this->_browser_name = self::BROWSER_OPERA;
|
1018 |
+
return true;
|
1019 |
+
} else if (stripos($this->_agent, 'OPR') !== false) {
|
1020 |
+
$resultant = stristr($this->_agent, 'OPR');
|
1021 |
+
if (preg_match('/\//', $resultant)) {
|
1022 |
+
$aresult = explode('/', str_replace("(", " ", $resultant));
|
1023 |
+
if (isset($aresult[1])) {
|
1024 |
+
$aversion = explode(' ', $aresult[1]);
|
1025 |
+
$this->setVersion($aversion[0]);
|
1026 |
+
}
|
1027 |
+
}
|
1028 |
+
if (stripos($this->_agent, 'Mobile') !== false) {
|
1029 |
+
$this->setMobile(true);
|
1030 |
+
}
|
1031 |
+
$this->_browser_name = self::BROWSER_OPERA;
|
1032 |
+
return true;
|
1033 |
+
}
|
1034 |
+
return false;
|
1035 |
+
}
|
1036 |
+
|
1037 |
+
/**
|
1038 |
+
* Determine if the browser is Chrome or not (last updated 1.7)
|
1039 |
+
* @return boolean True if the browser is Chrome otherwise false
|
1040 |
+
*/
|
1041 |
+
protected function checkBrowserChrome()
|
1042 |
+
{
|
1043 |
+
if (stripos($this->_agent, 'Chrome') !== false) {
|
1044 |
+
$aresult = explode('/', stristr($this->_agent, 'Chrome'));
|
1045 |
+
if (isset($aresult[1])) {
|
1046 |
+
$aversion = explode(' ', $aresult[1]);
|
1047 |
+
$this->setVersion($aversion[0]);
|
1048 |
+
$this->setBrowser(self::BROWSER_CHROME);
|
1049 |
+
//Chrome on Android
|
1050 |
+
if (stripos($this->_agent, 'Android') !== false) {
|
1051 |
+
if (stripos($this->_agent, 'Mobile') !== false) {
|
1052 |
+
$this->setMobile(true);
|
1053 |
+
} else {
|
1054 |
+
$this->setTablet(true);
|
1055 |
+
}
|
1056 |
+
}
|
1057 |
+
return true;
|
1058 |
+
}
|
1059 |
+
}
|
1060 |
+
return false;
|
1061 |
+
}
|
1062 |
+
|
1063 |
+
|
1064 |
+
/**
|
1065 |
+
* Determine if the browser is WebTv or not (last updated 1.7)
|
1066 |
+
* @return boolean True if the browser is WebTv otherwise false
|
1067 |
+
*/
|
1068 |
+
protected function checkBrowserWebTv()
|
1069 |
+
{
|
1070 |
+
if (stripos($this->_agent, 'webtv') !== false) {
|
1071 |
+
$aresult = explode('/', stristr($this->_agent, 'webtv'));
|
1072 |
+
if (isset($aresult[1])) {
|
1073 |
+
$aversion = explode(' ', $aresult[1]);
|
1074 |
+
$this->setVersion($aversion[0]);
|
1075 |
+
$this->setBrowser(self::BROWSER_WEBTV);
|
1076 |
+
return true;
|
1077 |
+
}
|
1078 |
+
}
|
1079 |
+
return false;
|
1080 |
+
}
|
1081 |
+
|
1082 |
+
/**
|
1083 |
+
* Determine if the browser is NetPositive or not (last updated 1.7)
|
1084 |
+
* @return boolean True if the browser is NetPositive otherwise false
|
1085 |
+
*/
|
1086 |
+
protected function checkBrowserNetPositive()
|
1087 |
+
{
|
1088 |
+
if (stripos($this->_agent, 'NetPositive') !== false) {
|
1089 |
+
$aresult = explode('/', stristr($this->_agent, 'NetPositive'));
|
1090 |
+
if (isset($aresult[1])) {
|
1091 |
+
$aversion = explode(' ', $aresult[1]);
|
1092 |
+
$this->setVersion(str_replace(array('(', ')', ';'), '', $aversion[0]));
|
1093 |
+
$this->setBrowser(self::BROWSER_NETPOSITIVE);
|
1094 |
+
return true;
|
1095 |
+
}
|
1096 |
+
}
|
1097 |
+
return false;
|
1098 |
+
}
|
1099 |
+
|
1100 |
+
/**
|
1101 |
+
* Determine if the browser is Galeon or not (last updated 1.7)
|
1102 |
+
* @return boolean True if the browser is Galeon otherwise false
|
1103 |
+
*/
|
1104 |
+
protected function checkBrowserGaleon()
|
1105 |
+
{
|
1106 |
+
if (stripos($this->_agent, 'galeon') !== false) {
|
1107 |
+
$aresult = explode(' ', stristr($this->_agent, 'galeon'));
|
1108 |
+
$aversion = explode('/', $aresult[0]);
|
1109 |
+
if (isset($aversion[1])) {
|
1110 |
+
$this->setVersion($aversion[1]);
|
1111 |
+
$this->setBrowser(self::BROWSER_GALEON);
|
1112 |
+
return true;
|
1113 |
+
}
|
1114 |
+
}
|
1115 |
+
return false;
|
1116 |
+
}
|
1117 |
+
|
1118 |
+
/**
|
1119 |
+
* Determine if the browser is Konqueror or not (last updated 1.7)
|
1120 |
+
* @return boolean True if the browser is Konqueror otherwise false
|
1121 |
+
*/
|
1122 |
+
protected function checkBrowserKonqueror()
|
1123 |
+
{
|
1124 |
+
if (stripos($this->_agent, 'Konqueror') !== false) {
|
1125 |
+
$aresult = explode(' ', stristr($this->_agent, 'Konqueror'));
|
1126 |
+
$aversion = explode('/', $aresult[0]);
|
1127 |
+
if (isset($aversion[1])) {
|
1128 |
+
$this->setVersion($aversion[1]);
|
1129 |
+
$this->setBrowser(self::BROWSER_KONQUEROR);
|
1130 |
+
return true;
|
1131 |
+
}
|
1132 |
+
}
|
1133 |
+
return false;
|
1134 |
+
}
|
1135 |
+
|
1136 |
+
/**
|
1137 |
+
* Determine if the browser is iCab or not (last updated 1.7)
|
1138 |
+
* @return boolean True if the browser is iCab otherwise false
|
1139 |
+
*/
|
1140 |
+
protected function checkBrowserIcab()
|
1141 |
+
{
|
1142 |
+
if (stripos($this->_agent, 'icab') !== false) {
|
1143 |
+
$aversion = explode(' ', stristr(str_replace('/', ' ', $this->_agent), 'icab'));
|
1144 |
+
if (isset($aversion[1])) {
|
1145 |
+
$this->setVersion($aversion[1]);
|
1146 |
+
$this->setBrowser(self::BROWSER_ICAB);
|
1147 |
+
return true;
|
1148 |
+
}
|
1149 |
+
}
|
1150 |
+
return false;
|
1151 |
+
}
|
1152 |
+
|
1153 |
+
/**
|
1154 |
+
* Determine if the browser is OmniWeb or not (last updated 1.7)
|
1155 |
+
* @return boolean True if the browser is OmniWeb otherwise false
|
1156 |
+
*/
|
1157 |
+
protected function checkBrowserOmniWeb()
|
1158 |
+
{
|
1159 |
+
if (stripos($this->_agent, 'omniweb') !== false) {
|
1160 |
+
$aresult = explode('/', stristr($this->_agent, 'omniweb'));
|
1161 |
+
$aversion = explode(' ', isset($aresult[1]) ? $aresult[1] : "");
|
1162 |
+
$this->setVersion($aversion[0]);
|
1163 |
+
$this->setBrowser(self::BROWSER_OMNIWEB);
|
1164 |
+
return true;
|
1165 |
+
}
|
1166 |
+
return false;
|
1167 |
+
}
|
1168 |
+
|
1169 |
+
/**
|
1170 |
+
* Determine if the browser is Phoenix or not (last updated 1.7)
|
1171 |
+
* @return boolean True if the browser is Phoenix otherwise false
|
1172 |
+
*/
|
1173 |
+
protected function checkBrowserPhoenix()
|
1174 |
+
{
|
1175 |
+
if (stripos($this->_agent, 'Phoenix') !== false) {
|
1176 |
+
$aversion = explode('/', stristr($this->_agent, 'Phoenix'));
|
1177 |
+
if (isset($aversion[1])) {
|
1178 |
+
$this->setVersion($aversion[1]);
|
1179 |
+
$this->setBrowser(self::BROWSER_PHOENIX);
|
1180 |
+
return true;
|
1181 |
+
}
|
1182 |
+
}
|
1183 |
+
return false;
|
1184 |
+
}
|
1185 |
+
|
1186 |
+
/**
|
1187 |
+
* Determine if the browser is Firebird or not (last updated 1.7)
|
1188 |
+
* @return boolean True if the browser is Firebird otherwise false
|
1189 |
+
*/
|
1190 |
+
protected function checkBrowserFirebird()
|
1191 |
+
{
|
1192 |
+
if (stripos($this->_agent, 'Firebird') !== false) {
|
1193 |
+
$aversion = explode('/', stristr($this->_agent, 'Firebird'));
|
1194 |
+
if (isset($aversion[1])) {
|
1195 |
+
$this->setVersion($aversion[1]);
|
1196 |
+
$this->setBrowser(self::BROWSER_FIREBIRD);
|
1197 |
+
return true;
|
1198 |
+
}
|
1199 |
+
}
|
1200 |
+
return false;
|
1201 |
+
}
|
1202 |
+
|
1203 |
+
/**
|
1204 |
+
* Determine if the browser is Netscape Navigator 9+ or not (last updated 1.7)
|
1205 |
+
* NOTE: (http://browser.netscape.com/ - Official support ended on March 1st, 2008)
|
1206 |
+
* @return boolean True if the browser is Netscape Navigator 9+ otherwise false
|
1207 |
+
*/
|
1208 |
+
protected function checkBrowserNetscapeNavigator9Plus()
|
1209 |
+
{
|
1210 |
+
if (stripos($this->_agent, 'Firefox') !== false && preg_match('/Navigator\/([^ ]*)/i', $this->_agent, $matches)) {
|
1211 |
+
$this->setVersion($matches[1]);
|
1212 |
+
$this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
|
1213 |
+
return true;
|
1214 |
+
} else if (stripos($this->_agent, 'Firefox') === false && preg_match('/Netscape6?\/([^ ]*)/i', $this->_agent, $matches)) {
|
1215 |
+
$this->setVersion($matches[1]);
|
1216 |
+
$this->setBrowser(self::BROWSER_NETSCAPE_NAVIGATOR);
|
1217 |
+
return true;
|
1218 |
+
}
|
1219 |
+
return false;
|
1220 |
+
}
|
1221 |
+
|
1222 |
+
/**
|
1223 |
+
* Determine if the browser is Shiretoko or not (https://wiki.mozilla.org/Projects/shiretoko) (last updated 1.7)
|
1224 |
+
* @return boolean True if the browser is Shiretoko otherwise false
|
1225 |
+
*/
|
1226 |
+
protected function checkBrowserShiretoko()
|
1227 |
+
{
|
1228 |
+
if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/Shiretoko\/([^ ]*)/i', $this->_agent, $matches)) {
|
1229 |
+
$this->setVersion($matches[1]);
|
1230 |
+
$this->setBrowser(self::BROWSER_SHIRETOKO);
|
1231 |
+
return true;
|
1232 |
+
}
|
1233 |
+
return false;
|
1234 |
+
}
|
1235 |
+
|
1236 |
+
/**
|
1237 |
+
* Determine if the browser is Ice Cat or not (http://en.wikipedia.org/wiki/GNU_IceCat) (last updated 1.7)
|
1238 |
+
* @return boolean True if the browser is Ice Cat otherwise false
|
1239 |
+
*/
|
1240 |
+
protected function checkBrowserIceCat()
|
1241 |
+
{
|
1242 |
+
if (stripos($this->_agent, 'Mozilla') !== false && preg_match('/IceCat\/([^ ]*)/i', $this->_agent, $matches)) {
|
1243 |
+
$this->setVersion($matches[1]);
|
1244 |
+
$this->setBrowser(self::BROWSER_ICECAT);
|
1245 |
+
return true;
|
1246 |
+
}
|
1247 |
+
return false;
|
1248 |
+
}
|
1249 |
+
|
1250 |
+
/**
|
1251 |
+
* Determine if the browser is Nokia or not (last updated 1.7)
|
1252 |
+
* @return boolean True if the browser is Nokia otherwise false
|
1253 |
+
*/
|
1254 |
+
protected function checkBrowserNokia()
|
1255 |
+
{
|
1256 |
+
if (preg_match("/Nokia([^\/]+)\/([^ SP]+)/i", $this->_agent, $matches)) {
|
1257 |
+
$this->setVersion($matches[2]);
|
1258 |
+
if (stripos($this->_agent, 'Series60') !== false || strpos($this->_agent, 'S60') !== false) {
|
1259 |
+
$this->setBrowser(self::BROWSER_NOKIA_S60);
|
1260 |
+
} else {
|
1261 |
+
$this->setBrowser(self::BROWSER_NOKIA);
|
1262 |
+
}
|
1263 |
+
$this->setMobile(true);
|
1264 |
+
return true;
|
1265 |
+
}
|
1266 |
+
return false;
|
1267 |
+
}
|
1268 |
+
|
1269 |
+
/**
|
1270 |
+
* Determine if the browser is Firefox or not (last updated 1.7)
|
1271 |
+
* @return boolean True if the browser is Firefox otherwise false
|
1272 |
+
*/
|
1273 |
+
protected function checkBrowserFirefox()
|
1274 |
+
{
|
1275 |
+
if (stripos($this->_agent, 'safari') === false) {
|
1276 |
+
if (preg_match("/Firefox[\/ \(]([^ ;\)]+)/i", $this->_agent, $matches)) {
|
1277 |
+
$this->setVersion($matches[1]);
|
1278 |
+
$this->setBrowser(self::BROWSER_FIREFOX);
|
1279 |
+
//Firefox on Android
|
1280 |
+
if (stripos($this->_agent, 'Android') !== false) {
|
1281 |
+
if (stripos($this->_agent, 'Mobile') !== false) {
|
1282 |
+
$this->setMobile(true);
|
1283 |
+
} else {
|
1284 |
+
$this->setTablet(true);
|
1285 |
+
}
|
1286 |
+
}
|
1287 |
+
return true;
|
1288 |
+
} else if (preg_match("/Firefox$/i", $this->_agent, $matches)) {
|
1289 |
+
$this->setVersion("");
|
1290 |
+
$this->setBrowser(self::BROWSER_FIREFOX);
|
1291 |
+
return true;
|
1292 |
+
}
|
1293 |
+
}
|
1294 |
+
return false;
|
1295 |
+
}
|
1296 |
+
|
1297 |
+
/**
|
1298 |
+
* Determine if the browser is Firefox or not (last updated 1.7)
|
1299 |
+
* @return boolean True if the browser is Firefox otherwise false
|
1300 |
+
*/
|
1301 |
+
protected function checkBrowserIceweasel()
|
1302 |
+
{
|
1303 |
+
if (stripos($this->_agent, 'Iceweasel') !== false) {
|
1304 |
+
$aresult = explode('/', stristr($this->_agent, 'Iceweasel'));
|
1305 |
+
if (isset($aresult[1])) {
|
1306 |
+
$aversion = explode(' ', $aresult[1]);
|
1307 |
+
$this->setVersion($aversion[0]);
|
1308 |
+
$this->setBrowser(self::BROWSER_ICEWEASEL);
|
1309 |
+
return true;
|
1310 |
+
}
|
1311 |
+
}
|
1312 |
+
return false;
|
1313 |
+
}
|
1314 |
+
|
1315 |
+
/**
|
1316 |
+
* Determine if the browser is Mozilla or not (last updated 1.7)
|
1317 |
+
* @return boolean True if the browser is Mozilla otherwise false
|
1318 |
+
*/
|
1319 |
+
protected function checkBrowserMozilla()
|
1320 |
+
{
|
1321 |
+
if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) {
|
1322 |
+
$aversion = explode(' ', stristr($this->_agent, 'rv:'));
|
1323 |
+
preg_match('/rv:[0-9].[0-9][a-b]?/i', $this->_agent, $aversion);
|
1324 |
+
$this->setVersion(str_replace('rv:', '', $aversion[0]));
|
1325 |
+
$this->setBrowser(self::BROWSER_MOZILLA);
|
1326 |
+
return true;
|
1327 |
+
} else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/rv:[0-9]\.[0-9]/i', $this->_agent) && stripos($this->_agent, 'netscape') === false) {
|
1328 |
+
$aversion = explode('', stristr($this->_agent, 'rv:'));
|
1329 |
+
$this->setVersion(str_replace('rv:', '', $aversion[0]));
|
1330 |
+
$this->setBrowser(self::BROWSER_MOZILLA);
|
1331 |
+
return true;
|
1332 |
+
} else if (stripos($this->_agent, 'mozilla') !== false && preg_match('/mozilla\/([^ ]*)/i', $this->_agent, $matches) && stripos($this->_agent, 'netscape') === false) {
|
1333 |
+
$this->setVersion($matches[1]);
|
1334 |
+
$this->setBrowser(self::BROWSER_MOZILLA);
|
1335 |
+
return true;
|
1336 |
+
}
|
1337 |
+
return false;
|
1338 |
+
}
|
1339 |
+
|
1340 |
+
/**
|
1341 |
+
* Determine if the browser is Lynx or not (last updated 1.7)
|
1342 |
+
* @return boolean True if the browser is Lynx otherwise false
|
1343 |
+
*/
|
1344 |
+
protected function checkBrowserLynx()
|
1345 |
+
{
|
1346 |
+
if (stripos($this->_agent, 'lynx') !== false) {
|
1347 |
+
$aresult = explode('/', stristr($this->_agent, 'Lynx'));
|
1348 |
+
$aversion = explode(' ', (isset($aresult[1]) ? $aresult[1] : ""));
|
1349 |
+
$this->setVersion($aversion[0]);
|
1350 |
+
$this->setBrowser(self::BROWSER_LYNX);
|
1351 |
+
return true;
|
1352 |
+
}
|
1353 |
+
return false;
|
1354 |
+
}
|
1355 |
+
|
1356 |
+
/**
|
1357 |
+
* Determine if the browser is Amaya or not (last updated 1.7)
|
1358 |
+
* @return boolean True if the browser is Amaya otherwise false
|
1359 |
+
*/
|
1360 |
+
protected function checkBrowserAmaya()
|
1361 |
+
{
|
1362 |
+
if (stripos($this->_agent, 'amaya') !== false) {
|
1363 |
+
$aresult = explode('/', stristr($this->_agent, 'Amaya'));
|
1364 |
+
if (isset($aresult[1])) {
|
1365 |
+
$aversion = explode(' ', $aresult[1]);
|
1366 |
+
$this->setVersion($aversion[0]);
|
1367 |
+
$this->setBrowser(self::BROWSER_AMAYA);
|
1368 |
+
return true;
|
1369 |
+
}
|
1370 |
+
}
|
1371 |
+
return false;
|
1372 |
+
}
|
1373 |
+
|
1374 |
+
/**
|
1375 |
+
* Determine if the browser is Safari or not (last updated 1.7)
|
1376 |
+
* @return boolean True if the browser is Safari otherwise false
|
1377 |
+
*/
|
1378 |
+
protected function checkBrowserSafari()
|
1379 |
+
{
|
1380 |
+
if (stripos($this->_agent, 'Safari') !== false
|
1381 |
+
&& stripos($this->_agent, 'iPhone') === false
|
1382 |
+
&& stripos($this->_agent, 'iPod') === false
|
1383 |
+
) {
|
1384 |
+
|
1385 |
+
$aresult = explode('/', stristr($this->_agent, 'Version'));
|
1386 |
+
if (isset($aresult[1])) {
|
1387 |
+
$aversion = explode(' ', $aresult[1]);
|
1388 |
+
$this->setVersion($aversion[0]);
|
1389 |
+
} else {
|
1390 |
+
$this->setVersion(self::VERSION_UNKNOWN);
|
1391 |
+
}
|
1392 |
+
$this->setBrowser(self::BROWSER_SAFARI);
|
1393 |
+
return true;
|
1394 |
+
}
|
1395 |
+
return false;
|
1396 |
+
}
|
1397 |
+
|
1398 |
+
protected function checkBrowserSamsung()
|
1399 |
+
{
|
1400 |
+
if (stripos($this->_agent, 'SamsungBrowser') !== false) {
|
1401 |
+
|
1402 |
+
$aresult = explode('/', stristr($this->_agent, 'SamsungBrowser'));
|
1403 |
+
if (isset($aresult[1])) {
|
1404 |
+
$aversion = explode(' ', $aresult[1]);
|
1405 |
+
$this->setVersion($aversion[0]);
|
1406 |
+
} else {
|
1407 |
+
$this->setVersion(self::VERSION_UNKNOWN);
|
1408 |
+
}
|
1409 |
+
$this->setBrowser(self::BROWSER_SAMSUNG);
|
1410 |
+
return true;
|
1411 |
+
}
|
1412 |
+
return false;
|
1413 |
+
}
|
1414 |
+
|
1415 |
+
protected function checkBrowserSilk()
|
1416 |
+
{
|
1417 |
+
if (stripos($this->_agent, 'Silk') !== false) {
|
1418 |
+
$aresult = explode('/', stristr($this->_agent, 'Silk'));
|
1419 |
+
if (isset($aresult[1])) {
|
1420 |
+
$aversion = explode(' ', $aresult[1]);
|
1421 |
+
$this->setVersion($aversion[0]);
|
1422 |
+
} else {
|
1423 |
+
$this->setVersion(self::VERSION_UNKNOWN);
|
1424 |
+
}
|
1425 |
+
$this->setBrowser(self::BROWSER_SILK);
|
1426 |
+
return true;
|
1427 |
+
}
|
1428 |
+
return false;
|
1429 |
+
}
|
1430 |
+
|
1431 |
+
protected function checkBrowserIframely()
|
1432 |
+
{
|
1433 |
+
if (stripos($this->_agent, 'Iframely') !== false) {
|
1434 |
+
$aresult = explode('/', stristr($this->_agent, 'Iframely'));
|
1435 |
+
if (isset($aresult[1])) {
|
1436 |
+
$aversion = explode(' ', $aresult[1]);
|
1437 |
+
$this->setVersion($aversion[0]);
|
1438 |
+
} else {
|
1439 |
+
$this->setVersion(self::VERSION_UNKNOWN);
|
1440 |
+
}
|
1441 |
+
$this->setBrowser(self::BROWSER_I_FRAME);
|
1442 |
+
return true;
|
1443 |
+
}
|
1444 |
+
return false;
|
1445 |
+
}
|
1446 |
+
|
1447 |
+
protected function checkBrowserCocoa()
|
1448 |
+
{
|
1449 |
+
if (stripos($this->_agent, 'CocoaRestClient') !== false) {
|
1450 |
+
$aresult = explode('/', stristr($this->_agent, 'CocoaRestClient'));
|
1451 |
+
if (isset($aresult[1])) {
|
1452 |
+
$aversion = explode(' ', $aresult[1]);
|
1453 |
+
$this->setVersion($aversion[0]);
|
1454 |
+
} else {
|
1455 |
+
$this->setVersion(self::VERSION_UNKNOWN);
|
1456 |
+
}
|
1457 |
+
$this->setBrowser(self::BROWSER_COCOA);
|
1458 |
+
return true;
|
1459 |
+
}
|
1460 |
+
return false;
|
1461 |
+
}
|
1462 |
+
|
1463 |
+
/**
|
1464 |
+
* Detect if URL is loaded from FacebookExternalHit
|
1465 |
+
* @return boolean True if it detects FacebookExternalHit otherwise false
|
1466 |
+
*/
|
1467 |
+
protected function checkFacebookExternalHit()
|
1468 |
+
{
|
1469 |
+
if (stristr($this->_agent, 'FacebookExternalHit')) {
|
1470 |
+
$this->setRobot(true);
|
1471 |
+
$this->setFacebook(true);
|
1472 |
+
return true;
|
1473 |
+
}
|
1474 |
+
return false;
|
1475 |
+
}
|
1476 |
+
|
1477 |
+
/**
|
1478 |
+
* Detect if URL is being loaded from internal Facebook browser
|
1479 |
+
* @return boolean True if it detects internal Facebook browser otherwise false
|
1480 |
+
*/
|
1481 |
+
protected function checkForFacebookIos()
|
1482 |
+
{
|
1483 |
+
if (stristr($this->_agent, 'FBIOS')) {
|
1484 |
+
$this->setFacebook(true);
|
1485 |
+
return true;
|
1486 |
+
}
|
1487 |
+
return false;
|
1488 |
+
}
|
1489 |
+
|
1490 |
+
/**
|
1491 |
+
* Detect Version for the Safari browser on iOS devices
|
1492 |
+
* @return boolean True if it detects the version correctly otherwise false
|
1493 |
+
*/
|
1494 |
+
protected function getSafariVersionOnIos()
|
1495 |
+
{
|
1496 |
+
$aresult = explode('/', stristr($this->_agent, 'Version'));
|
1497 |
+
if (isset($aresult[1])) {
|
1498 |
+
$aversion = explode(' ', $aresult[1]);
|
1499 |
+
$this->setVersion($aversion[0]);
|
1500 |
+
return true;
|
1501 |
+
}
|
1502 |
+
return false;
|
1503 |
+
}
|
1504 |
+
|
1505 |
+
/**
|
1506 |
+
* Detect Version for the Chrome browser on iOS devices
|
1507 |
+
* @return boolean True if it detects the version correctly otherwise false
|
1508 |
+
*/
|
1509 |
+
protected function getChromeVersionOnIos()
|
1510 |
+
{
|
1511 |
+
$aresult = explode('/', stristr($this->_agent, 'CriOS'));
|
1512 |
+
if (isset($aresult[1])) {
|
1513 |
+
$aversion = explode(' ', $aresult[1]);
|
1514 |
+
$this->setVersion($aversion[0]);
|
1515 |
+
$this->setBrowser(self::BROWSER_CHROME);
|
1516 |
+
return true;
|
1517 |
+
}
|
1518 |
+
return false;
|
1519 |
+
}
|
1520 |
+
|
1521 |
+
/**
|
1522 |
+
* Determine if the browser is iPhone or not (last updated 1.7)
|
1523 |
+
* @return boolean True if the browser is iPhone otherwise false
|
1524 |
+
*/
|
1525 |
+
protected function checkBrowseriPhone()
|
1526 |
+
{
|
1527 |
+
if (stripos($this->_agent, 'iPhone') !== false) {
|
1528 |
+
$this->setVersion(self::VERSION_UNKNOWN);
|
1529 |
+
$this->setBrowser(self::BROWSER_IPHONE);
|
1530 |
+
$this->getSafariVersionOnIos();
|
1531 |
+
$this->getChromeVersionOnIos();
|
1532 |
+
$this->checkForFacebookIos();
|
1533 |
+
$this->setMobile(true);
|
1534 |
+
return true;
|
1535 |
+
|
1536 |
+
}
|
1537 |
+
return false;
|
1538 |
+
}
|
1539 |
+
|
1540 |
+
/**
|
1541 |
+
* Determine if the browser is iPad or not (last updated 1.7)
|
1542 |
+
* @return boolean True if the browser is iPad otherwise false
|
1543 |
+
*/
|
1544 |
+
protected function checkBrowseriPad()
|
1545 |
+
{
|
1546 |
+
if (stripos($this->_agent, 'iPad') !== false) {
|
1547 |
+
$this->setVersion(self::VERSION_UNKNOWN);
|
1548 |
+
$this->setBrowser(self::BROWSER_IPAD);
|
1549 |
+
$this->getSafariVersionOnIos();
|
1550 |
+
$this->getChromeVersionOnIos();
|
1551 |
+
$this->checkForFacebookIos();
|
1552 |
+
$this->setTablet(true);
|
1553 |
+
return true;
|
1554 |
+
}
|
1555 |
+
return false;
|
1556 |
+
}
|
1557 |
+
|
1558 |
+
/**
|
1559 |
+
* Determine if the browser is iPod or not (last updated 1.7)
|
1560 |
+
* @return boolean True if the browser is iPod otherwise false
|
1561 |
+
*/
|
1562 |
+
protected function checkBrowseriPod()
|
1563 |
+
{
|
1564 |
+
if (stripos($this->_agent, 'iPod') !== false) {
|
1565 |
+
$this->setVersion(self::VERSION_UNKNOWN);
|
1566 |
+
$this->setBrowser(self::BROWSER_IPOD);
|
1567 |
+
$this->getSafariVersionOnIos();
|
1568 |
+
$this->getChromeVersionOnIos();
|
1569 |
+
$this->checkForFacebookIos();
|
1570 |
+
$this->setMobile(true);
|
1571 |
+
return true;
|
1572 |
+
}
|
1573 |
+
return false;
|
1574 |
+
}
|
1575 |
+
|
1576 |
+
/**
|
1577 |
+
* Determine if the browser is Android or not (last updated 1.7)
|
1578 |
+
* @return boolean True if the browser is Android otherwise false
|
1579 |
+
*/
|
1580 |
+
protected function checkBrowserAndroid()
|
1581 |
+
{
|
1582 |
+
if (stripos($this->_agent, 'Android') !== false) {
|
1583 |
+
$aresult = explode(' ', stristr($this->_agent, 'Android'));
|
1584 |
+
if (isset($aresult[1])) {
|
1585 |
+
$aversion = explode(' ', $aresult[1]);
|
1586 |
+
$this->setVersion($aversion[0]);
|
1587 |
+
} else {
|
1588 |
+
$this->setVersion(self::VERSION_UNKNOWN);
|
1589 |
+
}
|
1590 |
+
if (stripos($this->_agent, 'Mobile') !== false) {
|
1591 |
+
$this->setMobile(true);
|
1592 |
+
} else {
|
1593 |
+
$this->setTablet(true);
|
1594 |
+
}
|
1595 |
+
$this->setBrowser(self::BROWSER_ANDROID);
|
1596 |
+
return true;
|
1597 |
+
}
|
1598 |
+
return false;
|
1599 |
+
}
|
1600 |
+
|
1601 |
+
/**
|
1602 |
+
* Determine if the browser is Vivaldi
|
1603 |
+
* @return boolean True if the browser is Vivaldi otherwise false
|
1604 |
+
*/
|
1605 |
+
protected function checkBrowserVivaldi()
|
1606 |
+
{
|
1607 |
+
if (stripos($this->_agent, 'Vivaldi') !== false) {
|
1608 |
+
$aresult = explode('/', stristr($this->_agent, 'Vivaldi'));
|
1609 |
+
if (isset($aresult[1])) {
|
1610 |
+
$aversion = explode(' ', $aresult[1]);
|
1611 |
+
$this->setVersion($aversion[0]);
|
1612 |
+
$this->setBrowser(self::BROWSER_VIVALDI);
|
1613 |
+
return true;
|
1614 |
+
}
|
1615 |
+
}
|
1616 |
+
return false;
|
1617 |
+
}
|
1618 |
+
|
1619 |
+
/**
|
1620 |
+
* Determine if the browser is Yandex
|
1621 |
+
* @return boolean True if the browser is Yandex otherwise false
|
1622 |
+
*/
|
1623 |
+
protected function checkBrowserYandex()
|
1624 |
+
{
|
1625 |
+
if (stripos($this->_agent, 'YaBrowser') !== false) {
|
1626 |
+
$aresult = explode('/', stristr($this->_agent, 'YaBrowser'));
|
1627 |
+
if (isset($aresult[1])) {
|
1628 |
+
$aversion = explode(' ', $aresult[1]);
|
1629 |
+
$this->setVersion($aversion[0]);
|
1630 |
+
$this->setBrowser(self::BROWSER_YANDEX);
|
1631 |
+
|
1632 |
+
if (stripos($this->_agent, 'iPad') !== false) {
|
1633 |
+
$this->setTablet(true);
|
1634 |
+
} elseif (stripos($this->_agent, 'Mobile') !== false) {
|
1635 |
+
$this->setMobile(true);
|
1636 |
+
} elseif (stripos($this->_agent, 'Android') !== false) {
|
1637 |
+
$this->setTablet(true);
|
1638 |
+
}
|
1639 |
+
|
1640 |
+
return true;
|
1641 |
+
}
|
1642 |
+
}
|
1643 |
+
|
1644 |
+
return false;
|
1645 |
+
}
|
1646 |
+
|
1647 |
+
/**
|
1648 |
+
* Determine if the browser is a PlayStation
|
1649 |
+
* @return boolean True if the browser is PlayStation otherwise false
|
1650 |
+
*/
|
1651 |
+
protected function checkBrowserPlayStation()
|
1652 |
+
{
|
1653 |
+
if (stripos($this->_agent, 'PlayStation ') !== false) {
|
1654 |
+
$aresult = explode(' ', stristr($this->_agent, 'PlayStation '));
|
1655 |
+
$this->setBrowser(self::BROWSER_PLAYSTATION);
|
1656 |
+
if (isset($aresult[0])) {
|
1657 |
+
$aversion = explode(')', $aresult[2]);
|
1658 |
+
$this->setVersion($aversion[0]);
|
1659 |
+
if (stripos($this->_agent, 'Portable)') !== false || stripos($this->_agent, 'Vita') !== false) {
|
1660 |
+
$this->setMobile(true);
|
1661 |
+
}
|
1662 |
+
return true;
|
1663 |
+
}
|
1664 |
+
}
|
1665 |
+
return false;
|
1666 |
+
}
|
1667 |
+
|
1668 |
+
/**
|
1669 |
+
* Determine the user's platform (last updated 2.0)
|
1670 |
+
*/
|
1671 |
+
protected function checkPlatform()
|
1672 |
+
{
|
1673 |
+
if (stripos($this->_agent, 'windows') !== false) {
|
1674 |
+
$this->_platform = self::PLATFORM_WINDOWS;
|
1675 |
+
} else if (stripos($this->_agent, 'iPad') !== false) {
|
1676 |
+
$this->_platform = self::PLATFORM_IPAD;
|
1677 |
+
} else if (stripos($this->_agent, 'iPod') !== false) {
|
1678 |
+
$this->_platform = self::PLATFORM_IPOD;
|
1679 |
+
} else if (stripos($this->_agent, 'iPhone') !== false) {
|
1680 |
+
$this->_platform = self::PLATFORM_IPHONE;
|
1681 |
+
} elseif (stripos($this->_agent, 'mac') !== false) {
|
1682 |
+
$this->_platform = self::PLATFORM_APPLE;
|
1683 |
+
} elseif (stripos($this->_agent, 'android') !== false) {
|
1684 |
+
$this->_platform = self::PLATFORM_ANDROID;
|
1685 |
+
} elseif (stripos($this->_agent, 'Silk') !== false) {
|
1686 |
+
$this->_platform = self::PLATFORM_FIRE_OS;
|
1687 |
+
} elseif (stripos($this->_agent, 'linux') !== false && stripos($this->_agent, 'SMART-TV') !== false ) {
|
1688 |
+
$this->_platform = self::PLATFORM_LINUX .'/'.self::PLATFORM_SMART_TV;
|
1689 |
+
} elseif (stripos($this->_agent, 'linux') !== false) {
|
1690 |
+
$this->_platform = self::PLATFORM_LINUX;
|
1691 |
+
} else if (stripos($this->_agent, 'Nokia') !== false) {
|
1692 |
+
$this->_platform = self::PLATFORM_NOKIA;
|
1693 |
+
} else if (stripos($this->_agent, 'BlackBerry') !== false) {
|
1694 |
+
$this->_platform = self::PLATFORM_BLACKBERRY;
|
1695 |
+
} elseif (stripos($this->_agent, 'FreeBSD') !== false) {
|
1696 |
+
$this->_platform = self::PLATFORM_FREEBSD;
|
1697 |
+
} elseif (stripos($this->_agent, 'OpenBSD') !== false) {
|
1698 |
+
$this->_platform = self::PLATFORM_OPENBSD;
|
1699 |
+
} elseif (stripos($this->_agent, 'NetBSD') !== false) {
|
1700 |
+
$this->_platform = self::PLATFORM_NETBSD;
|
1701 |
+
} elseif (stripos($this->_agent, 'OpenSolaris') !== false) {
|
1702 |
+
$this->_platform = self::PLATFORM_OPENSOLARIS;
|
1703 |
+
} elseif (stripos($this->_agent, 'SunOS') !== false) {
|
1704 |
+
$this->_platform = self::PLATFORM_SUNOS;
|
1705 |
+
} elseif (stripos($this->_agent, 'OS\/2') !== false) {
|
1706 |
+
$this->_platform = self::PLATFORM_OS2;
|
1707 |
+
} elseif (stripos($this->_agent, 'BeOS') !== false) {
|
1708 |
+
$this->_platform = self::PLATFORM_BEOS;
|
1709 |
+
} elseif (stripos($this->_agent, 'win') !== false) {
|
1710 |
+
$this->_platform = self::PLATFORM_WINDOWS;
|
1711 |
+
} elseif (stripos($this->_agent, 'Playstation') !== false) {
|
1712 |
+
$this->_platform = self::PLATFORM_PLAYSTATION;
|
1713 |
+
} elseif (stripos($this->_agent, 'Roku') !== false) {
|
1714 |
+
$this->_platform = self::PLATFORM_ROKU;
|
1715 |
+
} elseif (stripos($this->_agent, 'iOS') !== false) {
|
1716 |
+
$this->_platform = self::PLATFORM_IPHONE . '/' . self::PLATFORM_IPAD;
|
1717 |
+
} elseif (stripos($this->_agent, 'tvOS') !== false) {
|
1718 |
+
$this->_platform = self::PLATFORM_APPLE_TV;
|
1719 |
+
} elseif (stripos($this->_agent, 'curl') !== false) {
|
1720 |
+
$this->_platform = self::PLATFORM_TERMINAL;
|
1721 |
+
} elseif (stripos($this->_agent, 'CrOS') !== false) {
|
1722 |
+
$this->_platform = self::PLATFORM_CHROME_OS;
|
1723 |
+
} elseif (stripos($this->_agent, 'okhttp') !== false) {
|
1724 |
+
$this->_platform = self::PLATFORM_JAVA_ANDROID;
|
1725 |
+
} elseif (stripos($this->_agent, 'PostmanRuntime') !== false) {
|
1726 |
+
$this->_platform = self::PLATFORM_POSTMAN;
|
1727 |
+
} elseif (stripos($this->_agent, 'Iframely') !== false) {
|
1728 |
+
$this->_platform = self::PLATFORM_I_FRAME;
|
1729 |
+
}
|
1730 |
+
|
1731 |
+
}
|
1732 |
+
}
|
vendor/cbschuld/browser.php/phpunit.xml.dist
CHANGED
@@ -1,29 +1,29 @@
|
|
1 |
-
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
-
<phpunit backupGlobals="true"
|
3 |
-
backupStaticAttributes="false"
|
4 |
-
bootstrap="lib/Browser.php"
|
5 |
-
colors="false"
|
6 |
-
convertErrorsToExceptions="true"
|
7 |
-
convertNoticesToExceptions="true"
|
8 |
-
convertWarningsToExceptions="true"
|
9 |
-
forceCoversAnnotation="false"
|
10 |
-
mapTestClassNameToCoveredClassName="false"
|
11 |
-
processIsolation="false"
|
12 |
-
stopOnError="false"
|
13 |
-
stopOnFailure="false"
|
14 |
-
stopOnIncomplete="false"
|
15 |
-
stopOnSkipped="false"
|
16 |
-
testSuiteLoaderFile="phpunit/src/Runner/StandardTestSuiteLoader.php"
|
17 |
-
strict="false"
|
18 |
-
verbose="false">
|
19 |
-
<testsuites>
|
20 |
-
<testsuite name="Unit">
|
21 |
-
<directory>test/Unit</directory>
|
22 |
-
</testsuite>
|
23 |
-
</testsuites>
|
24 |
-
<filter>
|
25 |
-
<whitelist>
|
26 |
-
<directory suffix=".php">lib/</directory>
|
27 |
-
</whitelist>
|
28 |
-
</filter>
|
29 |
-
</phpunit>
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<phpunit backupGlobals="true"
|
3 |
+
backupStaticAttributes="false"
|
4 |
+
bootstrap="lib/Browser.php"
|
5 |
+
colors="false"
|
6 |
+
convertErrorsToExceptions="true"
|
7 |
+
convertNoticesToExceptions="true"
|
8 |
+
convertWarningsToExceptions="true"
|
9 |
+
forceCoversAnnotation="false"
|
10 |
+
mapTestClassNameToCoveredClassName="false"
|
11 |
+
processIsolation="false"
|
12 |
+
stopOnError="false"
|
13 |
+
stopOnFailure="false"
|
14 |
+
stopOnIncomplete="false"
|
15 |
+
stopOnSkipped="false"
|
16 |
+
testSuiteLoaderFile="phpunit/src/Runner/StandardTestSuiteLoader.php"
|
17 |
+
strict="false"
|
18 |
+
verbose="false">
|
19 |
+
<testsuites>
|
20 |
+
<testsuite name="Unit">
|
21 |
+
<directory>test/Unit</directory>
|
22 |
+
</testsuite>
|
23 |
+
</testsuites>
|
24 |
+
<filter>
|
25 |
+
<whitelist>
|
26 |
+
<directory suffix=".php">lib/</directory>
|
27 |
+
</whitelist>
|
28 |
+
</filter>
|
29 |
+
</phpunit>
|
vendor/composer/ClassLoader.php
CHANGED
@@ -1,441 +1,441 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of Composer.
|
5 |
-
*
|
6 |
-
* (c) Nils Adermann <naderman@naderman.de>
|
7 |
-
* Jordi Boggiano <j.boggiano@seld.be>
|
8 |
-
*
|
9 |
-
* For the full copyright and license information, please view the LICENSE
|
10 |
-
* file that was distributed with this source code.
|
11 |
-
*/
|
12 |
-
|
13 |
-
namespace Composer\Autoload;
|
14 |
-
|
15 |
-
/**
|
16 |
-
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
|
17 |
-
*
|
18 |
-
* $loader = new \Composer\Autoload\ClassLoader();
|
19 |
-
*
|
20 |
-
* // register classes with namespaces
|
21 |
-
* $loader->add('Symfony\Component', __DIR__.'/component');
|
22 |
-
* $loader->add('Symfony', __DIR__.'/framework');
|
23 |
-
*
|
24 |
-
* // activate the autoloader
|
25 |
-
* $loader->register();
|
26 |
-
*
|
27 |
-
* // to enable searching the include path (eg. for PEAR packages)
|
28 |
-
* $loader->setUseIncludePath(true);
|
29 |
-
*
|
30 |
-
* In this example, if you try to use a class in the Symfony\Component
|
31 |
-
* namespace or one of its children (Symfony\Component\Console for instance),
|
32 |
-
* the autoloader will first look for the class under the component/
|
33 |
-
* directory, and it will then fallback to the framework/ directory if not
|
34 |
-
* found before giving up.
|
35 |
-
*
|
36 |
-
* This class is loosely based on the Symfony UniversalClassLoader.
|
37 |
-
*
|
38 |
-
* @author Fabien Potencier <fabien@symfony.com>
|
39 |
-
* @author Jordi Boggiano <j.boggiano@seld.be>
|
40 |
-
* @see http://www.php-fig.org/psr/psr-0/
|
41 |
-
* @see http://www.php-fig.org/psr/psr-4/
|
42 |
-
*/
|
43 |
-
class ClassLoader
|
44 |
-
{
|
45 |
-
// PSR-4
|
46 |
-
private $prefixLengthsPsr4 = array();
|
47 |
-
private $prefixDirsPsr4 = array();
|
48 |
-
private $fallbackDirsPsr4 = array();
|
49 |
-
|
50 |
-
// PSR-0
|
51 |
-
private $prefixesPsr0 = array();
|
52 |
-
private $fallbackDirsPsr0 = array();
|
53 |
-
|
54 |
-
private $useIncludePath = false;
|
55 |
-
private $classMap = array();
|
56 |
-
private $classMapAuthoritative = false;
|
57 |
-
private $missingClasses = array();
|
58 |
-
private $apcuPrefix;
|
59 |
-
|
60 |
-
public function getPrefixes()
|
61 |
-
{
|
62 |
-
if (!empty($this->prefixesPsr0)) {
|
63 |
-
return call_user_func_array('array_merge', $this->prefixesPsr0);
|
64 |
-
}
|
65 |
-
|
66 |
-
return array();
|
67 |
-
}
|
68 |
-
|
69 |
-
public function getPrefixesPsr4()
|
70 |
-
{
|
71 |
-
return $this->prefixDirsPsr4;
|
72 |
-
}
|
73 |
-
|
74 |
-
public function getFallbackDirs()
|
75 |
-
{
|
76 |
-
return $this->fallbackDirsPsr0;
|
77 |
-
}
|
78 |
-
|
79 |
-
public function getFallbackDirsPsr4()
|
80 |
-
{
|
81 |
-
return $this->fallbackDirsPsr4;
|
82 |
-
}
|
83 |
-
|
84 |
-
public function getClassMap()
|
85 |
-
{
|
86 |
-
return $this->classMap;
|
87 |
-
}
|
88 |
-
|
89 |
-
/**
|
90 |
-
* @param array $classMap Class to filename map
|
91 |
-
*/
|
92 |
-
public function addClassMap(array $classMap)
|
93 |
-
{
|
94 |
-
if ($this->classMap) {
|
95 |
-
$this->classMap = array_merge($this->classMap, $classMap);
|
96 |
-
} else {
|
97 |
-
$this->classMap = $classMap;
|
98 |
-
}
|
99 |
-
}
|
100 |
-
|
101 |
-
/**
|
102 |
-
* Registers a set of PSR-0 directories for a given prefix, either
|
103 |
-
* appending or prepending to the ones previously set for this prefix.
|
104 |
-
*
|
105 |
-
* @param string $prefix The prefix
|
106 |
-
* @param array|string $paths The PSR-0 root directories
|
107 |
-
* @param bool $prepend Whether to prepend the directories
|
108 |
-
*/
|
109 |
-
public function add($prefix, $paths, $prepend = false)
|
110 |
-
{
|
111 |
-
if (!$prefix) {
|
112 |
-
if ($prepend) {
|
113 |
-
$this->fallbackDirsPsr0 = array_merge(
|
114 |
-
(array) $paths,
|
115 |
-
$this->fallbackDirsPsr0
|
116 |
-
);
|
117 |
-
} else {
|
118 |
-
$this->fallbackDirsPsr0 = array_merge(
|
119 |
-
$this->fallbackDirsPsr0,
|
120 |
-
(array) $paths
|
121 |
-
);
|
122 |
-
}
|
123 |
-
|
124 |
-
return;
|
125 |
-
}
|
126 |
-
|
127 |
-
$first = $prefix[0];
|
128 |
-
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
129 |
-
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
|
130 |
-
|
131 |
-
return;
|
132 |
-
}
|
133 |
-
if ($prepend) {
|
134 |
-
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
135 |
-
(array) $paths,
|
136 |
-
$this->prefixesPsr0[$first][$prefix]
|
137 |
-
);
|
138 |
-
} else {
|
139 |
-
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
140 |
-
$this->prefixesPsr0[$first][$prefix],
|
141 |
-
(array) $paths
|
142 |
-
);
|
143 |
-
}
|
144 |
-
}
|
145 |
-
|
146 |
-
/**
|
147 |
-
* Registers a set of PSR-4 directories for a given namespace, either
|
148 |
-
* appending or prepending to the ones previously set for this namespace.
|
149 |
-
*
|
150 |
-
* @param string $prefix The prefix/namespace, with trailing '\\'
|
151 |
-
* @param array|string $paths The PSR-4 base directories
|
152 |
-
* @param bool $prepend Whether to prepend the directories
|
153 |
-
*
|
154 |
-
* @throws \InvalidArgumentException
|
155 |
-
*/
|
156 |
-
public function addPsr4($prefix, $paths, $prepend = false)
|
157 |
-
{
|
158 |
-
if (!$prefix) {
|
159 |
-
// Register directories for the root namespace.
|
160 |
-
if ($prepend) {
|
161 |
-
$this->fallbackDirsPsr4 = array_merge(
|
162 |
-
(array) $paths,
|
163 |
-
$this->fallbackDirsPsr4
|
164 |
-
);
|
165 |
-
} else {
|
166 |
-
$this->fallbackDirsPsr4 = array_merge(
|
167 |
-
$this->fallbackDirsPsr4,
|
168 |
-
(array) $paths
|
169 |
-
);
|
170 |
-
}
|
171 |
-
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
172 |
-
// Register directories for a new namespace.
|
173 |
-
$length = strlen($prefix);
|
174 |
-
if ('\\' !== $prefix[$length - 1]) {
|
175 |
-
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
176 |
-
}
|
177 |
-
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
178 |
-
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
179 |
-
} elseif ($prepend) {
|
180 |
-
// Prepend directories for an already registered namespace.
|
181 |
-
$this->prefixDirsPsr4[$prefix] = array_merge(
|
182 |
-
(array) $paths,
|
183 |
-
$this->prefixDirsPsr4[$prefix]
|
184 |
-
);
|
185 |
-
} else {
|
186 |
-
// Append directories for an already registered namespace.
|
187 |
-
$this->prefixDirsPsr4[$prefix] = array_merge(
|
188 |
-
$this->prefixDirsPsr4[$prefix],
|
189 |
-
(array) $paths
|
190 |
-
);
|
191 |
-
}
|
192 |
-
}
|
193 |
-
|
194 |
-
/**
|
195 |
-
* Registers a set of PSR-0 directories for a given prefix,
|
196 |
-
* replacing any others previously set for this prefix.
|
197 |
-
*
|
198 |
-
* @param string $prefix The prefix
|
199 |
-
* @param array|string $paths The PSR-0 base directories
|
200 |
-
*/
|
201 |
-
public function set($prefix, $paths)
|
202 |
-
{
|
203 |
-
if (!$prefix) {
|
204 |
-
$this->fallbackDirsPsr0 = (array) $paths;
|
205 |
-
} else {
|
206 |
-
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
|
207 |
-
}
|
208 |
-
}
|
209 |
-
|
210 |
-
/**
|
211 |
-
* Registers a set of PSR-4 directories for a given namespace,
|
212 |
-
* replacing any others previously set for this namespace.
|
213 |
-
*
|
214 |
-
* @param string $prefix The prefix/namespace, with trailing '\\'
|
215 |
-
* @param array|string $paths The PSR-4 base directories
|
216 |
-
*
|
217 |
-
* @throws \InvalidArgumentException
|
218 |
-
*/
|
219 |
-
public function setPsr4($prefix, $paths)
|
220 |
-
{
|
221 |
-
if (!$prefix) {
|
222 |
-
$this->fallbackDirsPsr4 = (array) $paths;
|
223 |
-
} else {
|
224 |
-
$length = strlen($prefix);
|
225 |
-
if ('\\' !== $prefix[$length - 1]) {
|
226 |
-
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
227 |
-
}
|
228 |
-
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
229 |
-
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
230 |
-
}
|
231 |
-
}
|
232 |
-
|
233 |
-
/**
|
234 |
-
* Turns on searching the include path for class files.
|
235 |
-
*
|
236 |
-
* @param bool $useIncludePath
|
237 |
-
*/
|
238 |
-
public function setUseIncludePath($useIncludePath)
|
239 |
-
{
|
240 |
-
$this->useIncludePath = $useIncludePath;
|
241 |
-
}
|
242 |
-
|
243 |
-
/**
|
244 |
-
* Can be used to check if the autoloader uses the include path to check
|
245 |
-
* for classes.
|
246 |
-
*
|
247 |
-
* @return bool
|
248 |
-
*/
|
249 |
-
public function getUseIncludePath()
|
250 |
-
{
|
251 |
-
return $this->useIncludePath;
|
252 |
-
}
|
253 |
-
|
254 |
-
/**
|
255 |
-
* Turns off searching the prefix and fallback directories for classes
|
256 |
-
* that have not been registered with the class map.
|
257 |
-
*
|
258 |
-
* @param bool $classMapAuthoritative
|
259 |
-
*/
|
260 |
-
public function setClassMapAuthoritative($classMapAuthoritative)
|
261 |
-
{
|
262 |
-
$this->classMapAuthoritative = $classMapAuthoritative;
|
263 |
-
}
|
264 |
-
|
265 |
-
/**
|
266 |
-
* Should class lookup fail if not found in the current class map?
|
267 |
-
*
|
268 |
-
* @return bool
|
269 |
-
*/
|
270 |
-
public function isClassMapAuthoritative()
|
271 |
-
{
|
272 |
-
return $this->classMapAuthoritative;
|
273 |
-
}
|
274 |
-
|
275 |
-
/**
|
276 |
-
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
277 |
-
*
|
278 |
-
* @param string|null $apcuPrefix
|
279 |
-
*/
|
280 |
-
public function setApcuPrefix($apcuPrefix)
|
281 |
-
{
|
282 |
-
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
|
283 |
-
}
|
284 |
-
|
285 |
-
/**
|
286 |
-
* The APCu prefix in use, or null if APCu caching is not enabled.
|
287 |
-
*
|
288 |
-
* @return string|null
|
289 |
-
*/
|
290 |
-
public function getApcuPrefix()
|
291 |
-
{
|
292 |
-
return $this->apcuPrefix;
|
293 |
-
}
|
294 |
-
|
295 |
-
/**
|
296 |
-
* Registers this instance as an autoloader.
|
297 |
-
*
|
298 |
-
* @param bool $prepend Whether to prepend the autoloader or not
|
299 |
-
*/
|
300 |
-
public function register($prepend = false)
|
301 |
-
{
|
302 |
-
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
303 |
-
}
|
304 |
-
|
305 |
-
/**
|
306 |
-
* Unregisters this instance as an autoloader.
|
307 |
-
*/
|
308 |
-
public function unregister()
|
309 |
-
{
|
310 |
-
spl_autoload_unregister(array($this, 'loadClass'));
|
311 |
-
}
|
312 |
-
|
313 |
-
/**
|
314 |
-
* Loads the given class or interface.
|
315 |
-
*
|
316 |
-
* @param string $class The name of the class
|
317 |
-
* @return bool|null True if loaded, null otherwise
|
318 |
-
*/
|
319 |
-
public function loadClass($class)
|
320 |
-
{
|
321 |
-
if ($file = $this->findFile($class)) {
|
322 |
-
includeFile($file);
|
323 |
-
|
324 |
-
return true;
|
325 |
-
}
|
326 |
-
}
|
327 |
-
|
328 |
-
/**
|
329 |
-
* Finds the path to the file where the class is defined.
|
330 |
-
*
|
331 |
-
* @param string $class The name of the class
|
332 |
-
*
|
333 |
-
* @return string|false The path if found, false otherwise
|
334 |
-
*/
|
335 |
-
public function findFile($class)
|
336 |
-
{
|
337 |
-
// class map lookup
|
338 |
-
if (isset($this->classMap[$class])) {
|
339 |
-
return $this->classMap[$class];
|
340 |
-
}
|
341 |
-
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
|
342 |
-
return false;
|
343 |
-
}
|
344 |
-
if (null !== $this->apcuPrefix) {
|
345 |
-
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
|
346 |
-
if ($hit) {
|
347 |
-
return $file;
|
348 |
-
}
|
349 |
-
}
|
350 |
-
|
351 |
-
$file = $this->findFileWithExtension($class, '.php');
|
352 |
-
|
353 |
-
// Search for Hack files if we are running on HHVM
|
354 |
-
if (false === $file && defined('HHVM_VERSION')) {
|
355 |
-
$file = $this->findFileWithExtension($class, '.hh');
|
356 |
-
}
|
357 |
-
|
358 |
-
if (null !== $this->apcuPrefix) {
|
359 |
-
apcu_add($this->apcuPrefix.$class, $file);
|
360 |
-
}
|
361 |
-
|
362 |
-
if (false === $file) {
|
363 |
-
// Remember that this class does not exist.
|
364 |
-
$this->missingClasses[$class] = true;
|
365 |
-
}
|
366 |
-
|
367 |
-
return $file;
|
368 |
-
}
|
369 |
-
|
370 |
-
private function findFileWithExtension($class, $ext)
|
371 |
-
{
|
372 |
-
// PSR-4 lookup
|
373 |
-
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
|
374 |
-
|
375 |
-
$first = $class[0];
|
376 |
-
if (isset($this->prefixLengthsPsr4[$first])) {
|
377 |
-
foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
|
378 |
-
if (0 === strpos($class, $prefix)) {
|
379 |
-
foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
|
380 |
-
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
|
381 |
-
return $file;
|
382 |
-
}
|
383 |
-
}
|
384 |
-
}
|
385 |
-
}
|
386 |
-
}
|
387 |
-
|
388 |
-
// PSR-4 fallback dirs
|
389 |
-
foreach ($this->fallbackDirsPsr4 as $dir) {
|
390 |
-
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
|
391 |
-
return $file;
|
392 |
-
}
|
393 |
-
}
|
394 |
-
|
395 |
-
// PSR-0 lookup
|
396 |
-
if (false !== $pos = strrpos($class, '\\')) {
|
397 |
-
// namespaced class name
|
398 |
-
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
|
399 |
-
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
|
400 |
-
} else {
|
401 |
-
// PEAR-like class name
|
402 |
-
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
|
403 |
-
}
|
404 |
-
|
405 |
-
if (isset($this->prefixesPsr0[$first])) {
|
406 |
-
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
|
407 |
-
if (0 === strpos($class, $prefix)) {
|
408 |
-
foreach ($dirs as $dir) {
|
409 |
-
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
410 |
-
return $file;
|
411 |
-
}
|
412 |
-
}
|
413 |
-
}
|
414 |
-
}
|
415 |
-
}
|
416 |
-
|
417 |
-
// PSR-0 fallback dirs
|
418 |
-
foreach ($this->fallbackDirsPsr0 as $dir) {
|
419 |
-
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
420 |
-
return $file;
|
421 |
-
}
|
422 |
-
}
|
423 |
-
|
424 |
-
// PSR-0 include paths.
|
425 |
-
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
426 |
-
return $file;
|
427 |
-
}
|
428 |
-
|
429 |
-
return false;
|
430 |
-
}
|
431 |
-
}
|
432 |
-
|
433 |
-
/**
|
434 |
-
* Scope isolated include.
|
435 |
-
*
|
436 |
-
* Prevents access to $this/self from included files.
|
437 |
-
*/
|
438 |
-
function includeFile($file)
|
439 |
-
{
|
440 |
-
include $file;
|
441 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of Composer.
|
5 |
+
*
|
6 |
+
* (c) Nils Adermann <naderman@naderman.de>
|
7 |
+
* Jordi Boggiano <j.boggiano@seld.be>
|
8 |
+
*
|
9 |
+
* For the full copyright and license information, please view the LICENSE
|
10 |
+
* file that was distributed with this source code.
|
11 |
+
*/
|
12 |
+
|
13 |
+
namespace Composer\Autoload;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
|
17 |
+
*
|
18 |
+
* $loader = new \Composer\Autoload\ClassLoader();
|
19 |
+
*
|
20 |
+
* // register classes with namespaces
|
21 |
+
* $loader->add('Symfony\Component', __DIR__.'/component');
|
22 |
+
* $loader->add('Symfony', __DIR__.'/framework');
|
23 |
+
*
|
24 |
+
* // activate the autoloader
|
25 |
+
* $loader->register();
|
26 |
+
*
|
27 |
+
* // to enable searching the include path (eg. for PEAR packages)
|
28 |
+
* $loader->setUseIncludePath(true);
|
29 |
+
*
|
30 |
+
* In this example, if you try to use a class in the Symfony\Component
|
31 |
+
* namespace or one of its children (Symfony\Component\Console for instance),
|
32 |
+
* the autoloader will first look for the class under the component/
|
33 |
+
* directory, and it will then fallback to the framework/ directory if not
|
34 |
+
* found before giving up.
|
35 |
+
*
|
36 |
+
* This class is loosely based on the Symfony UniversalClassLoader.
|
37 |
+
*
|
38 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
39 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
40 |
+
* @see http://www.php-fig.org/psr/psr-0/
|
41 |
+
* @see http://www.php-fig.org/psr/psr-4/
|
42 |
+
*/
|
43 |
+
class ClassLoader
|
44 |
+
{
|
45 |
+
// PSR-4
|
46 |
+
private $prefixLengthsPsr4 = array();
|
47 |
+
private $prefixDirsPsr4 = array();
|
48 |
+
private $fallbackDirsPsr4 = array();
|
49 |
+
|
50 |
+
// PSR-0
|
51 |
+
private $prefixesPsr0 = array();
|
52 |
+
private $fallbackDirsPsr0 = array();
|
53 |
+
|
54 |
+
private $useIncludePath = false;
|
55 |
+
private $classMap = array();
|
56 |
+
private $classMapAuthoritative = false;
|
57 |
+
private $missingClasses = array();
|
58 |
+
private $apcuPrefix;
|
59 |
+
|
60 |
+
public function getPrefixes()
|
61 |
+
{
|
62 |
+
if (!empty($this->prefixesPsr0)) {
|
63 |
+
return call_user_func_array('array_merge', $this->prefixesPsr0);
|
64 |
+
}
|
65 |
+
|
66 |
+
return array();
|
67 |
+
}
|
68 |
+
|
69 |
+
public function getPrefixesPsr4()
|
70 |
+
{
|
71 |
+
return $this->prefixDirsPsr4;
|
72 |
+
}
|
73 |
+
|
74 |
+
public function getFallbackDirs()
|
75 |
+
{
|
76 |
+
return $this->fallbackDirsPsr0;
|
77 |
+
}
|
78 |
+
|
79 |
+
public function getFallbackDirsPsr4()
|
80 |
+
{
|
81 |
+
return $this->fallbackDirsPsr4;
|
82 |
+
}
|
83 |
+
|
84 |
+
public function getClassMap()
|
85 |
+
{
|
86 |
+
return $this->classMap;
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* @param array $classMap Class to filename map
|
91 |
+
*/
|
92 |
+
public function addClassMap(array $classMap)
|
93 |
+
{
|
94 |
+
if ($this->classMap) {
|
95 |
+
$this->classMap = array_merge($this->classMap, $classMap);
|
96 |
+
} else {
|
97 |
+
$this->classMap = $classMap;
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Registers a set of PSR-0 directories for a given prefix, either
|
103 |
+
* appending or prepending to the ones previously set for this prefix.
|
104 |
+
*
|
105 |
+
* @param string $prefix The prefix
|
106 |
+
* @param array|string $paths The PSR-0 root directories
|
107 |
+
* @param bool $prepend Whether to prepend the directories
|
108 |
+
*/
|
109 |
+
public function add($prefix, $paths, $prepend = false)
|
110 |
+
{
|
111 |
+
if (!$prefix) {
|
112 |
+
if ($prepend) {
|
113 |
+
$this->fallbackDirsPsr0 = array_merge(
|
114 |
+
(array) $paths,
|
115 |
+
$this->fallbackDirsPsr0
|
116 |
+
);
|
117 |
+
} else {
|
118 |
+
$this->fallbackDirsPsr0 = array_merge(
|
119 |
+
$this->fallbackDirsPsr0,
|
120 |
+
(array) $paths
|
121 |
+
);
|
122 |
+
}
|
123 |
+
|
124 |
+
return;
|
125 |
+
}
|
126 |
+
|
127 |
+
$first = $prefix[0];
|
128 |
+
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
129 |
+
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
|
130 |
+
|
131 |
+
return;
|
132 |
+
}
|
133 |
+
if ($prepend) {
|
134 |
+
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
135 |
+
(array) $paths,
|
136 |
+
$this->prefixesPsr0[$first][$prefix]
|
137 |
+
);
|
138 |
+
} else {
|
139 |
+
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
140 |
+
$this->prefixesPsr0[$first][$prefix],
|
141 |
+
(array) $paths
|
142 |
+
);
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Registers a set of PSR-4 directories for a given namespace, either
|
148 |
+
* appending or prepending to the ones previously set for this namespace.
|
149 |
+
*
|
150 |
+
* @param string $prefix The prefix/namespace, with trailing '\\'
|
151 |
+
* @param array|string $paths The PSR-4 base directories
|
152 |
+
* @param bool $prepend Whether to prepend the directories
|
153 |
+
*
|
154 |
+
* @throws \InvalidArgumentException
|
155 |
+
*/
|
156 |
+
public function addPsr4($prefix, $paths, $prepend = false)
|
157 |
+
{
|
158 |
+
if (!$prefix) {
|
159 |
+
// Register directories for the root namespace.
|
160 |
+
if ($prepend) {
|
161 |
+
$this->fallbackDirsPsr4 = array_merge(
|
162 |
+
(array) $paths,
|
163 |
+
$this->fallbackDirsPsr4
|
164 |
+
);
|
165 |
+
} else {
|
166 |
+
$this->fallbackDirsPsr4 = array_merge(
|
167 |
+
$this->fallbackDirsPsr4,
|
168 |
+
(array) $paths
|
169 |
+
);
|
170 |
+
}
|
171 |
+
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
172 |
+
// Register directories for a new namespace.
|
173 |
+
$length = strlen($prefix);
|
174 |
+
if ('\\' !== $prefix[$length - 1]) {
|
175 |
+
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
176 |
+
}
|
177 |
+
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
178 |
+
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
179 |
+
} elseif ($prepend) {
|
180 |
+
// Prepend directories for an already registered namespace.
|
181 |
+
$this->prefixDirsPsr4[$prefix] = array_merge(
|
182 |
+
(array) $paths,
|
183 |
+
$this->prefixDirsPsr4[$prefix]
|
184 |
+
);
|
185 |
+
} else {
|
186 |
+
// Append directories for an already registered namespace.
|
187 |
+
$this->prefixDirsPsr4[$prefix] = array_merge(
|
188 |
+
$this->prefixDirsPsr4[$prefix],
|
189 |
+
(array) $paths
|
190 |
+
);
|
191 |
+
}
|
192 |
+
}
|
193 |
+
|
194 |
+
/**
|
195 |
+
* Registers a set of PSR-0 directories for a given prefix,
|
196 |
+
* replacing any others previously set for this prefix.
|
197 |
+
*
|
198 |
+
* @param string $prefix The prefix
|
199 |
+
* @param array|string $paths The PSR-0 base directories
|
200 |
+
*/
|
201 |
+
public function set($prefix, $paths)
|
202 |
+
{
|
203 |
+
if (!$prefix) {
|
204 |
+
$this->fallbackDirsPsr0 = (array) $paths;
|
205 |
+
} else {
|
206 |
+
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
|
207 |
+
}
|
208 |
+
}
|
209 |
+
|
210 |
+
/**
|
211 |
+
* Registers a set of PSR-4 directories for a given namespace,
|
212 |
+
* replacing any others previously set for this namespace.
|
213 |
+
*
|
214 |
+
* @param string $prefix The prefix/namespace, with trailing '\\'
|
215 |
+
* @param array|string $paths The PSR-4 base directories
|
216 |
+
*
|
217 |
+
* @throws \InvalidArgumentException
|
218 |
+
*/
|
219 |
+
public function setPsr4($prefix, $paths)
|
220 |
+
{
|
221 |
+
if (!$prefix) {
|
222 |
+
$this->fallbackDirsPsr4 = (array) $paths;
|
223 |
+
} else {
|
224 |
+
$length = strlen($prefix);
|
225 |
+
if ('\\' !== $prefix[$length - 1]) {
|
226 |
+
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
227 |
+
}
|
228 |
+
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
229 |
+
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
230 |
+
}
|
231 |
+
}
|
232 |
+
|
233 |
+
/**
|
234 |
+
* Turns on searching the include path for class files.
|
235 |
+
*
|
236 |
+
* @param bool $useIncludePath
|
237 |
+
*/
|
238 |
+
public function setUseIncludePath($useIncludePath)
|
239 |
+
{
|
240 |
+
$this->useIncludePath = $useIncludePath;
|
241 |
+
}
|
242 |
+
|
243 |
+
/**
|
244 |
+
* Can be used to check if the autoloader uses the include path to check
|
245 |
+
* for classes.
|
246 |
+
*
|
247 |
+
* @return bool
|
248 |
+
*/
|
249 |
+
public function getUseIncludePath()
|
250 |
+
{
|
251 |
+
return $this->useIncludePath;
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* Turns off searching the prefix and fallback directories for classes
|
256 |
+
* that have not been registered with the class map.
|
257 |
+
*
|
258 |
+
* @param bool $classMapAuthoritative
|
259 |
+
*/
|
260 |
+
public function setClassMapAuthoritative($classMapAuthoritative)
|
261 |
+
{
|
262 |
+
$this->classMapAuthoritative = $classMapAuthoritative;
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* Should class lookup fail if not found in the current class map?
|
267 |
+
*
|
268 |
+
* @return bool
|
269 |
+
*/
|
270 |
+
public function isClassMapAuthoritative()
|
271 |
+
{
|
272 |
+
return $this->classMapAuthoritative;
|
273 |
+
}
|
274 |
+
|
275 |
+
/**
|
276 |
+
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
277 |
+
*
|
278 |
+
* @param string|null $apcuPrefix
|
279 |
+
*/
|
280 |
+
public function setApcuPrefix($apcuPrefix)
|
281 |
+
{
|
282 |
+
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
|
283 |
+
}
|
284 |
+
|
285 |
+
/**
|
286 |
+
* The APCu prefix in use, or null if APCu caching is not enabled.
|
287 |
+
*
|
288 |
+
* @return string|null
|
289 |
+
*/
|
290 |
+
public function getApcuPrefix()
|
291 |
+
{
|
292 |
+
return $this->apcuPrefix;
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Registers this instance as an autoloader.
|
297 |
+
*
|
298 |
+
* @param bool $prepend Whether to prepend the autoloader or not
|
299 |
+
*/
|
300 |
+
public function register($prepend = false)
|
301 |
+
{
|
302 |
+
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
303 |
+
}
|
304 |
+
|
305 |
+
/**
|
306 |
+
* Unregisters this instance as an autoloader.
|
307 |
+
*/
|
308 |
+
public function unregister()
|
309 |
+
{
|
310 |
+
spl_autoload_unregister(array($this, 'loadClass'));
|
311 |
+
}
|
312 |
+
|
313 |
+
/**
|
314 |
+
* Loads the given class or interface.
|
315 |
+
*
|
316 |
+
* @param string $class The name of the class
|
317 |
+
* @return bool|null True if loaded, null otherwise
|
318 |
+
*/
|
319 |
+
public function loadClass($class)
|
320 |
+
{
|
321 |
+
if ($file = $this->findFile($class)) {
|
322 |
+
includeFile($file);
|
323 |
+
|
324 |
+
return true;
|
325 |
+
}
|
326 |
+
}
|
327 |
+
|
328 |
+
/**
|
329 |
+
* Finds the path to the file where the class is defined.
|
330 |
+
*
|
331 |
+
* @param string $class The name of the class
|
332 |
+
*
|
333 |
+
* @return string|false The path if found, false otherwise
|
334 |
+
*/
|
335 |
+
public function findFile($class)
|
336 |
+
{
|
337 |
+
// class map lookup
|
338 |
+
if (isset($this->classMap[$class])) {
|
339 |
+
return $this->classMap[$class];
|
340 |
+
}
|
341 |
+
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
|
342 |
+
return false;
|
343 |
+
}
|
344 |
+
if (null !== $this->apcuPrefix) {
|
345 |
+
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
|
346 |
+
if ($hit) {
|
347 |
+
return $file;
|
348 |
+
}
|
349 |
+
}
|
350 |
+
|
351 |
+
$file = $this->findFileWithExtension($class, '.php');
|
352 |
+
|
353 |
+
// Search for Hack files if we are running on HHVM
|
354 |
+
if (false === $file && defined('HHVM_VERSION')) {
|
355 |
+
$file = $this->findFileWithExtension($class, '.hh');
|
356 |
+
}
|
357 |
+
|
358 |
+
if (null !== $this->apcuPrefix) {
|
359 |
+
apcu_add($this->apcuPrefix.$class, $file);
|
360 |
+
}
|
361 |
+
|
362 |
+
if (false === $file) {
|
363 |
+
// Remember that this class does not exist.
|
364 |
+
$this->missingClasses[$class] = true;
|
365 |
+
}
|
366 |
+
|
367 |
+
return $file;
|
368 |
+
}
|
369 |
+
|
370 |
+
private function findFileWithExtension($class, $ext)
|
371 |
+
{
|
372 |
+
// PSR-4 lookup
|
373 |
+
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
|
374 |
+
|
375 |
+
$first = $class[0];
|
376 |
+
if (isset($this->prefixLengthsPsr4[$first])) {
|
377 |
+
foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
|
378 |
+
if (0 === strpos($class, $prefix)) {
|
379 |
+
foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
|
380 |
+
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
|
381 |
+
return $file;
|
382 |
+
}
|
383 |
+
}
|
384 |
+
}
|
385 |
+
}
|
386 |
+
}
|
387 |
+
|
388 |
+
// PSR-4 fallback dirs
|
389 |
+
foreach ($this->fallbackDirsPsr4 as $dir) {
|
390 |
+
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
|
391 |
+
return $file;
|
392 |
+
}
|
393 |
+
}
|
394 |
+
|
395 |
+
// PSR-0 lookup
|
396 |
+
if (false !== $pos = strrpos($class, '\\')) {
|
397 |
+
// namespaced class name
|
398 |
+
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
|
399 |
+
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
|
400 |
+
} else {
|
401 |
+
// PEAR-like class name
|
402 |
+
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
|
403 |
+
}
|
404 |
+
|
405 |
+
if (isset($this->prefixesPsr0[$first])) {
|
406 |
+
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
|
407 |
+
if (0 === strpos($class, $prefix)) {
|
408 |
+
foreach ($dirs as $dir) {
|
409 |
+
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
410 |
+
return $file;
|
411 |
+
}
|
412 |
+
}
|
413 |
+
}
|
414 |
+
}
|
415 |
+
}
|
416 |
+
|
417 |
+
// PSR-0 fallback dirs
|
418 |
+
foreach ($this->fallbackDirsPsr0 as $dir) {
|
419 |
+
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
420 |
+
return $file;
|
421 |
+
}
|
422 |
+
}
|
423 |
+
|
424 |
+
// PSR-0 include paths.
|
425 |
+
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
426 |
+
return $file;
|
427 |
+
}
|
428 |
+
|
429 |
+
return false;
|
430 |
+
}
|
431 |
+
}
|
432 |
+
|
433 |
+
/**
|
434 |
+
* Scope isolated include.
|
435 |
+
*
|
436 |
+
* Prevents access to $this/self from included files.
|
437 |
+
*/
|
438 |
+
function includeFile($file)
|
439 |
+
{
|
440 |
+
include $file;
|
441 |
+
}
|
vendor/composer/LICENSE
CHANGED
@@ -1,21 +1,21 @@
|
|
1 |
-
|
2 |
-
Copyright (c) 2016 Nils Adermann, Jordi Boggiano
|
3 |
-
|
4 |
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
5 |
-
of this software and associated documentation files (the "Software"), to deal
|
6 |
-
in the Software without restriction, including without limitation the rights
|
7 |
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8 |
-
copies of the Software, and to permit persons to whom the Software is furnished
|
9 |
-
to do so, subject to the following conditions:
|
10 |
-
|
11 |
-
The above copyright notice and this permission notice shall be included in all
|
12 |
-
copies or substantial portions of the Software.
|
13 |
-
|
14 |
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15 |
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16 |
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17 |
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18 |
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19 |
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20 |
-
THE SOFTWARE.
|
21 |
-
|
1 |
+
|
2 |
+
Copyright (c) 2016 Nils Adermann, Jordi Boggiano
|
3 |
+
|
4 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
5 |
+
of this software and associated documentation files (the "Software"), to deal
|
6 |
+
in the Software without restriction, including without limitation the rights
|
7 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
9 |
+
to do so, subject to the following conditions:
|
10 |
+
|
11 |
+
The above copyright notice and this permission notice shall be included in all
|
12 |
+
copies or substantial portions of the Software.
|
13 |
+
|
14 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20 |
+
THE SOFTWARE.
|
21 |
+
|
vendor/composer/autoload_classmap.php
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// autoload_classmap.php @generated by Composer
|
4 |
-
|
5 |
-
$vendorDir = dirname(dirname(__FILE__));
|
6 |
-
$baseDir = dirname($vendorDir);
|
7 |
-
|
8 |
-
return array(
|
9 |
-
'Mobile_Detect' => $vendorDir . '/mobiledetect/mobiledetectlib/Mobile_Detect.php',
|
10 |
-
);
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_classmap.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(dirname(__FILE__));
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
'Mobile_Detect' => $vendorDir . '/mobiledetect/mobiledetectlib/Mobile_Detect.php',
|
10 |
+
);
|
vendor/composer/autoload_files.php
CHANGED
@@ -1,10 +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 |
-
'f15d016d70663d5e96ccd2b863511eb8' => $vendorDir . '/cbschuld/browser.php/lib/Browser.php',
|
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 |
+
'f15d016d70663d5e96ccd2b863511eb8' => $vendorDir . '/cbschuld/browser.php/lib/Browser.php',
|
10 |
+
);
|
vendor/composer/autoload_namespaces.php
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// autoload_namespaces.php @generated by Composer
|
4 |
-
|
5 |
-
$vendorDir = dirname(dirname(__FILE__));
|
6 |
-
$baseDir = dirname($vendorDir);
|
7 |
-
|
8 |
-
return array(
|
9 |
-
'Detection' => array($vendorDir . '/mobiledetect/mobiledetectlib/namespaced'),
|
10 |
-
);
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_namespaces.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(dirname(__FILE__));
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
'Detection' => array($vendorDir . '/mobiledetect/mobiledetectlib/namespaced'),
|
10 |
+
);
|
vendor/composer/autoload_psr4.php
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// autoload_psr4.php @generated by Composer
|
4 |
-
|
5 |
-
$vendorDir = dirname(dirname(__FILE__));
|
6 |
-
$baseDir = dirname($vendorDir);
|
7 |
-
|
8 |
-
return array(
|
9 |
-
'Jaybizzle\\CrawlerDetect\\' => array($vendorDir . '/jaybizzle/crawler-detect/src'),
|
10 |
-
);
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_psr4.php @generated by Composer
|
4 |
+
|
5 |
+
$vendorDir = dirname(dirname(__FILE__));
|
6 |
+
$baseDir = dirname($vendorDir);
|
7 |
+
|
8 |
+
return array(
|
9 |
+
'Jaybizzle\\CrawlerDetect\\' => array($vendorDir . '/jaybizzle/crawler-detect/src'),
|
10 |
+
);
|
vendor/composer/autoload_real.php
CHANGED
@@ -1,70 +1,70 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// autoload_real.php @generated by Composer
|
4 |
-
|
5 |
-
class ComposerAutoloaderInit28a0833b49959d9021dc40cd45dfc52b
|
6 |
-
{
|
7 |
-
private static $loader;
|
8 |
-
|
9 |
-
public static function loadClassLoader($class)
|
10 |
-
{
|
11 |
-
if ('Composer\Autoload\ClassLoader' === $class) {
|
12 |
-
require __DIR__ . '/ClassLoader.php';
|
13 |
-
}
|
14 |
-
}
|
15 |
-
|
16 |
-
public static function getLoader()
|
17 |
-
{
|
18 |
-
if (null !== self::$loader) {
|
19 |
-
return self::$loader;
|
20 |
-
}
|
21 |
-
|
22 |
-
spl_autoload_register(array('ComposerAutoloaderInit28a0833b49959d9021dc40cd45dfc52b', 'loadClassLoader'), true, true);
|
23 |
-
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('ComposerAutoloaderInit28a0833b49959d9021dc40cd45dfc52b', 'loadClassLoader'));
|
25 |
-
|
26 |
-
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
-
if ($useStaticLoader) {
|
28 |
-
require_once __DIR__ . '/autoload_static.php';
|
29 |
-
|
30 |
-
call_user_func(\Composer\Autoload\ComposerStaticInit28a0833b49959d9021dc40cd45dfc52b::getInitializer($loader));
|
31 |
-
} else {
|
32 |
-
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
-
foreach ($map as $namespace => $path) {
|
34 |
-
$loader->set($namespace, $path);
|
35 |
-
}
|
36 |
-
|
37 |
-
$map = require __DIR__ . '/autoload_psr4.php';
|
38 |
-
foreach ($map as $namespace => $path) {
|
39 |
-
$loader->setPsr4($namespace, $path);
|
40 |
-
}
|
41 |
-
|
42 |
-
$classMap = require __DIR__ . '/autoload_classmap.php';
|
43 |
-
if ($classMap) {
|
44 |
-
$loader->addClassMap($classMap);
|
45 |
-
}
|
46 |
-
}
|
47 |
-
|
48 |
-
$loader->register(true);
|
49 |
-
|
50 |
-
if ($useStaticLoader) {
|
51 |
-
$includeFiles = Composer\Autoload\ComposerStaticInit28a0833b49959d9021dc40cd45dfc52b::$files;
|
52 |
-
} else {
|
53 |
-
$includeFiles = require __DIR__ . '/autoload_files.php';
|
54 |
-
}
|
55 |
-
foreach ($includeFiles as $fileIdentifier => $file) {
|
56 |
-
composerRequire28a0833b49959d9021dc40cd45dfc52b($fileIdentifier, $file);
|
57 |
-
}
|
58 |
-
|
59 |
-
return $loader;
|
60 |
-
}
|
61 |
-
}
|
62 |
-
|
63 |
-
function composerRequire28a0833b49959d9021dc40cd45dfc52b($fileIdentifier, $file)
|
64 |
-
{
|
65 |
-
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
66 |
-
require $file;
|
67 |
-
|
68 |
-
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
69 |
-
}
|
70 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_real.php @generated by Composer
|
4 |
+
|
5 |
+
class ComposerAutoloaderInit28a0833b49959d9021dc40cd45dfc52b
|
6 |
+
{
|
7 |
+
private static $loader;
|
8 |
+
|
9 |
+
public static function loadClassLoader($class)
|
10 |
+
{
|
11 |
+
if ('Composer\Autoload\ClassLoader' === $class) {
|
12 |
+
require __DIR__ . '/ClassLoader.php';
|
13 |
+
}
|
14 |
+
}
|
15 |
+
|
16 |
+
public static function getLoader()
|
17 |
+
{
|
18 |
+
if (null !== self::$loader) {
|
19 |
+
return self::$loader;
|
20 |
+
}
|
21 |
+
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInit28a0833b49959d9021dc40cd45dfc52b', 'loadClassLoader'), true, true);
|
23 |
+
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit28a0833b49959d9021dc40cd45dfc52b', 'loadClassLoader'));
|
25 |
+
|
26 |
+
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
+
if ($useStaticLoader) {
|
28 |
+
require_once __DIR__ . '/autoload_static.php';
|
29 |
+
|
30 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit28a0833b49959d9021dc40cd45dfc52b::getInitializer($loader));
|
31 |
+
} else {
|
32 |
+
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
+
foreach ($map as $namespace => $path) {
|
34 |
+
$loader->set($namespace, $path);
|
35 |
+
}
|
36 |
+
|
37 |
+
$map = require __DIR__ . '/autoload_psr4.php';
|
38 |
+
foreach ($map as $namespace => $path) {
|
39 |
+
$loader->setPsr4($namespace, $path);
|
40 |
+
}
|
41 |
+
|
42 |
+
$classMap = require __DIR__ . '/autoload_classmap.php';
|
43 |
+
if ($classMap) {
|
44 |
+
$loader->addClassMap($classMap);
|
45 |
+
}
|
46 |
+
}
|
47 |
+
|
48 |
+
$loader->register(true);
|
49 |
+
|
50 |
+
if ($useStaticLoader) {
|
51 |
+
$includeFiles = Composer\Autoload\ComposerStaticInit28a0833b49959d9021dc40cd45dfc52b::$files;
|
52 |
+
} else {
|
53 |
+
$includeFiles = require __DIR__ . '/autoload_files.php';
|
54 |
+
}
|
55 |
+
foreach ($includeFiles as $fileIdentifier => $file) {
|
56 |
+
composerRequire28a0833b49959d9021dc40cd45dfc52b($fileIdentifier, $file);
|
57 |
+
}
|
58 |
+
|
59 |
+
return $loader;
|
60 |
+
}
|
61 |
+
}
|
62 |
+
|
63 |
+
function composerRequire28a0833b49959d9021dc40cd45dfc52b($fileIdentifier, $file)
|
64 |
+
{
|
65 |
+
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
66 |
+
require $file;
|
67 |
+
|
68 |
+
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
69 |
+
}
|
70 |
+
}
|
vendor/composer/autoload_static.php
CHANGED
@@ -1,51 +1,51 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// autoload_static.php @generated by Composer
|
4 |
-
|
5 |
-
namespace Composer\Autoload;
|
6 |
-
|
7 |
-
class ComposerStaticInit28a0833b49959d9021dc40cd45dfc52b
|
8 |
-
{
|
9 |
-
public static $files = array (
|
10 |
-
'f15d016d70663d5e96ccd2b863511eb8' => __DIR__ . '/..' . '/cbschuld/browser.php/lib/Browser.php',
|
11 |
-
);
|
12 |
-
|
13 |
-
public static $prefixLengthsPsr4 = array (
|
14 |
-
'J' =>
|
15 |
-
array (
|
16 |
-
'Jaybizzle\\CrawlerDetect\\' => 24,
|
17 |
-
),
|
18 |
-
);
|
19 |
-
|
20 |
-
public static $prefixDirsPsr4 = array (
|
21 |
-
'Jaybizzle\\CrawlerDetect\\' =>
|
22 |
-
array (
|
23 |
-
0 => __DIR__ . '/..' . '/jaybizzle/crawler-detect/src',
|
24 |
-
),
|
25 |
-
);
|
26 |
-
|
27 |
-
public static $prefixesPsr0 = array (
|
28 |
-
'D' =>
|
29 |
-
array (
|
30 |
-
'Detection' =>
|
31 |
-
array (
|
32 |
-
0 => __DIR__ . '/..' . '/mobiledetect/mobiledetectlib/namespaced',
|
33 |
-
),
|
34 |
-
),
|
35 |
-
);
|
36 |
-
|
37 |
-
public static $classMap = array (
|
38 |
-
'Mobile_Detect' => __DIR__ . '/..' . '/mobiledetect/mobiledetectlib/Mobile_Detect.php',
|
39 |
-
);
|
40 |
-
|
41 |
-
public static function getInitializer(ClassLoader $loader)
|
42 |
-
{
|
43 |
-
return \Closure::bind(function () use ($loader) {
|
44 |
-
$loader->prefixLengthsPsr4 = ComposerStaticInit28a0833b49959d9021dc40cd45dfc52b::$prefixLengthsPsr4;
|
45 |
-
$loader->prefixDirsPsr4 = ComposerStaticInit28a0833b49959d9021dc40cd45dfc52b::$prefixDirsPsr4;
|
46 |
-
$loader->prefixesPsr0 = ComposerStaticInit28a0833b49959d9021dc40cd45dfc52b::$prefixesPsr0;
|
47 |
-
$loader->classMap = ComposerStaticInit28a0833b49959d9021dc40cd45dfc52b::$classMap;
|
48 |
-
|
49 |
-
}, null, ClassLoader::class);
|
50 |
-
}
|
51 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// autoload_static.php @generated by Composer
|
4 |
+
|
5 |
+
namespace Composer\Autoload;
|
6 |
+
|
7 |
+
class ComposerStaticInit28a0833b49959d9021dc40cd45dfc52b
|
8 |
+
{
|
9 |
+
public static $files = array (
|
10 |
+
'f15d016d70663d5e96ccd2b863511eb8' => __DIR__ . '/..' . '/cbschuld/browser.php/lib/Browser.php',
|
11 |
+
);
|
12 |
+
|
13 |
+
public static $prefixLengthsPsr4 = array (
|
14 |
+
'J' =>
|
15 |
+
array (
|
16 |
+
'Jaybizzle\\CrawlerDetect\\' => 24,
|
17 |
+
),
|
18 |
+
);
|
19 |
+
|
20 |
+
public static $prefixDirsPsr4 = array (
|
21 |
+
'Jaybizzle\\CrawlerDetect\\' =>
|
22 |
+
array (
|
23 |
+
0 => __DIR__ . '/..' . '/jaybizzle/crawler-detect/src',
|
24 |
+
),
|
25 |
+
);
|
26 |
+
|
27 |
+
public static $prefixesPsr0 = array (
|
28 |
+
'D' =>
|
29 |
+
array (
|
30 |
+
'Detection' =>
|
31 |
+
array (
|
32 |
+
0 => __DIR__ . '/..' . '/mobiledetect/mobiledetectlib/namespaced',
|
33 |
+
),
|
34 |
+
),
|
35 |
+
);
|
36 |
+
|
37 |
+
public static $classMap = array (
|
38 |
+
'Mobile_Detect' => __DIR__ . '/..' . '/mobiledetect/mobiledetectlib/Mobile_Detect.php',
|
39 |
+
);
|
40 |
+
|
41 |
+
public static function getInitializer(ClassLoader $loader)
|
42 |
+
{
|
43 |
+
return \Closure::bind(function () use ($loader) {
|
44 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit28a0833b49959d9021dc40cd45dfc52b::$prefixLengthsPsr4;
|
45 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit28a0833b49959d9021dc40cd45dfc52b::$prefixDirsPsr4;
|
46 |
+
$loader->prefixesPsr0 = ComposerStaticInit28a0833b49959d9021dc40cd45dfc52b::$prefixesPsr0;
|
47 |
+
$loader->classMap = ComposerStaticInit28a0833b49959d9021dc40cd45dfc52b::$classMap;
|
48 |
+
|
49 |
+
}, null, ClassLoader::class);
|
50 |
+
}
|
51 |
+
}
|
vendor/composer/installed.json
CHANGED
@@ -1,154 +1,154 @@
|
|
1 |
-
[
|
2 |
-
{
|
3 |
-
"name": "cbschuld/browser.php",
|
4 |
-
"version": "dev-master",
|
5 |
-
"version_normalized": "9999999-dev",
|
6 |
-
"source": {
|
7 |
-
"type": "git",
|
8 |
-
"url": "https://github.com/cbschuld/Browser.php.git",
|
9 |
-
"reference": "6bde9efb0b14a4917affe741500c29149419e491"
|
10 |
-
},
|
11 |
-
"dist": {
|
12 |
-
"type": "zip",
|
13 |
-
"url": "https://api.github.com/repos/cbschuld/Browser.php/zipball/6bde9efb0b14a4917affe741500c29149419e491",
|
14 |
-
"reference": "6bde9efb0b14a4917affe741500c29149419e491",
|
15 |
-
"shasum": ""
|
16 |
-
},
|
17 |
-
"time": "2017-07-31T23:43:17+00:00",
|
18 |
-
"type": "library",
|
19 |
-
"extra": {
|
20 |
-
"branch-alias": {
|
21 |
-
"dev-master": "1.95-dev"
|
22 |
-
}
|
23 |
-
},
|
24 |
-
"installation-source": "source",
|
25 |
-
"autoload": {
|
26 |
-
"files": [
|
27 |
-
"lib/Browser.php"
|
28 |
-
]
|
29 |
-
},
|
30 |
-
"notification-url": "https://packagist.org/downloads/",
|
31 |
-
"license": [
|
32 |
-
"MIT"
|
33 |
-
],
|
34 |
-
"authors": [
|
35 |
-
{
|
36 |
-
"name": "Chris Schuld",
|
37 |
-
"email": "chris@chrisschuld.com",
|
38 |
-
"homepage": "http://chrisschuld.com"
|
39 |
-
}
|
40 |
-
],
|
41 |
-
"description": "A PHP Class to detect a user's Browser",
|
42 |
-
"homepage": "http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php.html",
|
43 |
-
"keywords": [
|
44 |
-
"browser",
|
45 |
-
"detection",
|
46 |
-
"user agent"
|
47 |
-
]
|
48 |
-
},
|
49 |
-
{
|
50 |
-
"name": "jaybizzle/crawler-detect",
|
51 |
-
"version": "v1.2.63",
|
52 |
-
"version_normalized": "1.2.63.0",
|
53 |
-
"source": {
|
54 |
-
"type": "git",
|
55 |
-
"url": "https://github.com/JayBizzle/Crawler-Detect.git",
|
56 |
-
"reference": "3566bc69d0839ab2dfd739a660b00f25a6f02031"
|
57 |
-
},
|
58 |
-
"dist": {
|
59 |
-
"type": "zip",
|
60 |
-
"url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/3566bc69d0839ab2dfd739a660b00f25a6f02031",
|
61 |
-
"reference": "3566bc69d0839ab2dfd739a660b00f25a6f02031",
|
62 |
-
"shasum": ""
|
63 |
-
},
|
64 |
-
"require": {
|
65 |
-
"php": ">=5.3.0"
|
66 |
-
},
|
67 |
-
"require-dev": {
|
68 |
-
"phpunit/phpunit": "^4.8|^5.5|^6.5",
|
69 |
-
"satooshi/php-coveralls": "1.*"
|
70 |
-
},
|
71 |
-
"time": "2018-05-21T19:56:44+00:00",
|
72 |
-
"type": "library",
|
73 |
-
"installation-source": "dist",
|
74 |
-
"autoload": {
|
75 |
-
"psr-4": {
|
76 |
-
"Jaybizzle\\CrawlerDetect\\": "src/"
|
77 |
-
}
|
78 |
-
},
|
79 |
-
"notification-url": "https://packagist.org/downloads/",
|
80 |
-
"license": [
|
81 |
-
"MIT"
|
82 |
-
],
|
83 |
-
"authors": [
|
84 |
-
{
|
85 |
-
"name": "Mark Beech",
|
86 |
-
"email": "m@rkbee.ch",
|
87 |
-
"role": "Developer"
|
88 |
-
}
|
89 |
-
],
|
90 |
-
"description": "CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent",
|
91 |
-
"homepage": "https://github.com/JayBizzle/Crawler-Detect/",
|
92 |
-
"keywords": [
|
93 |
-
"crawler",
|
94 |
-
"crawler detect",
|
95 |
-
"crawler detector",
|
96 |
-
"crawlerdetect",
|
97 |
-
"php crawler detect"
|
98 |
-
]
|
99 |
-
},
|
100 |
-
{
|
101 |
-
"name": "mobiledetect/mobiledetectlib",
|
102 |
-
"version": "2.8.31",
|
103 |
-
"version_normalized": "2.8.31.0",
|
104 |
-
"source": {
|
105 |
-
"type": "git",
|
106 |
-
"url": "https://github.com/serbanghita/Mobile-Detect.git",
|
107 |
-
"reference": "adb882ea3b9d154f087ecb2c333180dad6f4dd37"
|
108 |
-
},
|
109 |
-
"dist": {
|
110 |
-
"type": "zip",
|
111 |
-
"url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/adb882ea3b9d154f087ecb2c333180dad6f4dd37",
|
112 |
-
"reference": "adb882ea3b9d154f087ecb2c333180dad6f4dd37",
|
113 |
-
"shasum": ""
|
114 |
-
},
|
115 |
-
"require": {
|
116 |
-
"php": ">=5.0.0"
|
117 |
-
},
|
118 |
-
"require-dev": {
|
119 |
-
"phpunit/phpunit": "~4.8.35||~5.7"
|
120 |
-
},
|
121 |
-
"time": "2018-02-26T19:39:55+00:00",
|
122 |
-
"type": "library",
|
123 |
-
"installation-source": "dist",
|
124 |
-
"autoload": {
|
125 |
-
"classmap": [
|
126 |
-
"Mobile_Detect.php"
|
127 |
-
],
|
128 |
-
"psr-0": {
|
129 |
-
"Detection": "namespaced/"
|
130 |
-
}
|
131 |
-
},
|
132 |
-
"notification-url": "https://packagist.org/downloads/",
|
133 |
-
"license": [
|
134 |
-
"MIT"
|
135 |
-
],
|
136 |
-
"authors": [
|
137 |
-
{
|
138 |
-
"name": "Serban Ghita",
|
139 |
-
"email": "serbanghita@gmail.com",
|
140 |
-
"homepage": "http://mobiledetect.net",
|
141 |
-
"role": "Developer"
|
142 |
-
}
|
143 |
-
],
|
144 |
-
"description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.",
|
145 |
-
"homepage": "https://github.com/serbanghita/Mobile-Detect",
|
146 |
-
"keywords": [
|
147 |
-
"detect mobile devices",
|
148 |
-
"mobile",
|
149 |
-
"mobile detect",
|
150 |
-
"mobile detector",
|
151 |
-
"php mobile detect"
|
152 |
-
]
|
153 |
-
}
|
154 |
-
]
|
1 |
+
[
|
2 |
+
{
|
3 |
+
"name": "cbschuld/browser.php",
|
4 |
+
"version": "dev-master",
|
5 |
+
"version_normalized": "9999999-dev",
|
6 |
+
"source": {
|
7 |
+
"type": "git",
|
8 |
+
"url": "https://github.com/cbschuld/Browser.php.git",
|
9 |
+
"reference": "6bde9efb0b14a4917affe741500c29149419e491"
|
10 |
+
},
|
11 |
+
"dist": {
|
12 |
+
"type": "zip",
|
13 |
+
"url": "https://api.github.com/repos/cbschuld/Browser.php/zipball/6bde9efb0b14a4917affe741500c29149419e491",
|
14 |
+
"reference": "6bde9efb0b14a4917affe741500c29149419e491",
|
15 |
+
"shasum": ""
|
16 |
+
},
|
17 |
+
"time": "2017-07-31T23:43:17+00:00",
|
18 |
+
"type": "library",
|
19 |
+
"extra": {
|
20 |
+
"branch-alias": {
|
21 |
+
"dev-master": "1.95-dev"
|
22 |
+
}
|
23 |
+
},
|
24 |
+
"installation-source": "source",
|
25 |
+
"autoload": {
|
26 |
+
"files": [
|
27 |
+
"lib/Browser.php"
|
28 |
+
]
|
29 |
+
},
|
30 |
+
"notification-url": "https://packagist.org/downloads/",
|
31 |
+
"license": [
|
32 |
+
"MIT"
|
33 |
+
],
|
34 |
+
"authors": [
|
35 |
+
{
|
36 |
+
"name": "Chris Schuld",
|
37 |
+
"email": "chris@chrisschuld.com",
|
38 |
+
"homepage": "http://chrisschuld.com"
|
39 |
+
}
|
40 |
+
],
|
41 |
+
"description": "A PHP Class to detect a user's Browser",
|
42 |
+
"homepage": "http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php.html",
|
43 |
+
"keywords": [
|
44 |
+
"browser",
|
45 |
+
"detection",
|
46 |
+
"user agent"
|
47 |
+
]
|
48 |
+
},
|
49 |
+
{
|
50 |
+
"name": "jaybizzle/crawler-detect",
|
51 |
+
"version": "v1.2.63",
|
52 |
+
"version_normalized": "1.2.63.0",
|
53 |
+
"source": {
|
54 |
+
"type": "git",
|
55 |
+
"url": "https://github.com/JayBizzle/Crawler-Detect.git",
|
56 |
+
"reference": "3566bc69d0839ab2dfd739a660b00f25a6f02031"
|
57 |
+
},
|
58 |
+
"dist": {
|
59 |
+
"type": "zip",
|
60 |
+
"url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/3566bc69d0839ab2dfd739a660b00f25a6f02031",
|
61 |
+
"reference": "3566bc69d0839ab2dfd739a660b00f25a6f02031",
|
62 |
+
"shasum": ""
|
63 |
+
},
|
64 |
+
"require": {
|
65 |
+
"php": ">=5.3.0"
|
66 |
+
},
|
67 |
+
"require-dev": {
|
68 |
+
"phpunit/phpunit": "^4.8|^5.5|^6.5",
|
69 |
+
"satooshi/php-coveralls": "1.*"
|
70 |
+
},
|
71 |
+
"time": "2018-05-21T19:56:44+00:00",
|
72 |
+
"type": "library",
|
73 |
+
"installation-source": "dist",
|
74 |
+
"autoload": {
|
75 |
+
"psr-4": {
|
76 |
+
"Jaybizzle\\CrawlerDetect\\": "src/"
|
77 |
+
}
|
78 |
+
},
|
79 |
+
"notification-url": "https://packagist.org/downloads/",
|
80 |
+
"license": [
|
81 |
+
"MIT"
|
82 |
+
],
|
83 |
+
"authors": [
|
84 |
+
{
|
85 |
+
"name": "Mark Beech",
|
86 |
+
"email": "m@rkbee.ch",
|
87 |
+
"role": "Developer"
|
88 |
+
}
|
89 |
+
],
|
90 |
+
"description": "CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent",
|
91 |
+
"homepage": "https://github.com/JayBizzle/Crawler-Detect/",
|
92 |
+
"keywords": [
|
93 |
+
"crawler",
|
94 |
+
"crawler detect",
|
95 |
+
"crawler detector",
|
96 |
+
"crawlerdetect",
|
97 |
+
"php crawler detect"
|
98 |
+
]
|
99 |
+
},
|
100 |
+
{
|
101 |
+
"name": "mobiledetect/mobiledetectlib",
|
102 |
+
"version": "2.8.31",
|
103 |
+
"version_normalized": "2.8.31.0",
|
104 |
+
"source": {
|
105 |
+
"type": "git",
|
106 |
+
"url": "https://github.com/serbanghita/Mobile-Detect.git",
|
107 |
+
"reference": "adb882ea3b9d154f087ecb2c333180dad6f4dd37"
|
108 |
+
},
|
109 |
+
"dist": {
|
110 |
+
"type": "zip",
|
111 |
+
"url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/adb882ea3b9d154f087ecb2c333180dad6f4dd37",
|
112 |
+
"reference": "adb882ea3b9d154f087ecb2c333180dad6f4dd37",
|
113 |
+
"shasum": ""
|
114 |
+
},
|
115 |
+
"require": {
|
116 |
+
"php": ">=5.0.0"
|
117 |
+
},
|
118 |
+
"require-dev": {
|
119 |
+
"phpunit/phpunit": "~4.8.35||~5.7"
|
120 |
+
},
|
121 |
+
"time": "2018-02-26T19:39:55+00:00",
|
122 |
+
"type": "library",
|
123 |
+
"installation-source": "dist",
|
124 |
+
"autoload": {
|
125 |
+
"classmap": [
|
126 |
+
"Mobile_Detect.php"
|
127 |
+
],
|
128 |
+
"psr-0": {
|
129 |
+
"Detection": "namespaced/"
|
130 |
+
}
|
131 |
+
},
|
132 |
+
"notification-url": "https://packagist.org/downloads/",
|
133 |
+
"license": [
|
134 |
+
"MIT"
|
135 |
+
],
|
136 |
+
"authors": [
|
137 |
+
{
|
138 |
+
"name": "Serban Ghita",
|
139 |
+
"email": "serbanghita@gmail.com",
|
140 |
+
"homepage": "http://mobiledetect.net",
|
141 |
+
"role": "Developer"
|
142 |
+
}
|
143 |
+
],
|
144 |
+
"description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.",
|
145 |
+
"homepage": "https://github.com/serbanghita/Mobile-Detect",
|
146 |
+
"keywords": [
|
147 |
+
"detect mobile devices",
|
148 |
+
"mobile",
|
149 |
+
"mobile detect",
|
150 |
+
"mobile detector",
|
151 |
+
"php mobile detect"
|
152 |
+
]
|
153 |
+
}
|
154 |
+
]
|
vendor/jaybizzle/crawler-detect/LICENSE
CHANGED
@@ -1,22 +1,22 @@
|
|
1 |
-
The MIT License (MIT)
|
2 |
-
|
3 |
-
Copyright (c) 2015-2018 Mark Beech
|
4 |
-
|
5 |
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6 |
-
of this software and associated documentation files (the "Software"), to deal
|
7 |
-
in the Software without restriction, including without limitation the rights
|
8 |
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9 |
-
copies of the Software, and to permit persons to whom the Software is
|
10 |
-
furnished to do so, subject to the following conditions:
|
11 |
-
|
12 |
-
The above copyright notice and this permission notice shall be included in all
|
13 |
-
copies or substantial portions of the Software.
|
14 |
-
|
15 |
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18 |
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20 |
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21 |
-
SOFTWARE.
|
22 |
-
|
1 |
+
The MIT License (MIT)
|
2 |
+
|
3 |
+
Copyright (c) 2015-2018 Mark Beech
|
4 |
+
|
5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6 |
+
of this software and associated documentation files (the "Software"), to deal
|
7 |
+
in the Software without restriction, including without limitation the rights
|
8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9 |
+
copies of the Software, and to permit persons to whom the Software is
|
10 |
+
furnished to do so, subject to the following conditions:
|
11 |
+
|
12 |
+
The above copyright notice and this permission notice shall be included in all
|
13 |
+
copies or substantial portions of the Software.
|
14 |
+
|
15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21 |
+
SOFTWARE.
|
22 |
+
|
vendor/jaybizzle/crawler-detect/README.md
CHANGED
@@ -1,68 +1,68 @@
|
|
1 |
-
<p align="center"><a href="http://crawlerdetect.io/" target="_blank"><img src="https://cloud.githubusercontent.com/assets/340752/23082173/1bd1a396-f550-11e6-8aba-4d3c75edea2f.png" width="321" height="219" /></a><br><br>
|
2 |
-
<a href="http://crawlerdetect.io/" target="_blank">crawlerdetect.io</a>
|
3 |
-
<br><br>
|
4 |
-
</p>
|
5 |
-
|
6 |
-
<p align="center">
|
7 |
-
<a href="https://travis-ci.org/JayBizzle/Crawler-Detect"><img src="https://img.shields.io/travis/JayBizzle/Crawler-Detect/master.svg?style=flat-square" /></a>
|
8 |
-
<a href="https://packagist.org/packages/jaybizzle/crawler-detect"><img src="https://img.shields.io/packagist/dm/JayBizzle/Crawler-Detect.svg?style=flat-square" /></a>
|
9 |
-
<a href="https://scrutinizer-ci.com/g/JayBizzle/Crawler-Detect/?branch=master"><img src="https://img.shields.io/scrutinizer/g/JayBizzle/Crawler-Detect.svg?style=flat-square" /></a>
|
10 |
-
<a href="https://github.com/JayBizzle/Crawler-Detect"><img src="https://img.shields.io/badge/license-MIT-ff69b4.svg?style=flat-square" /></a>
|
11 |
-
<a href="https://packagist.org/packages/jaybizzle/crawler-detect"><img src="https://img.shields.io/packagist/v/jaybizzle/Crawler-Detect.svg?style=flat-square" /></a>
|
12 |
-
<a href="https://styleci.io/repos/32755917"><img src="https://styleci.io/repos/32755917/shield" /></a>
|
13 |
-
<a href="https://coveralls.io/github/JayBizzle/Crawler-Detect"><img src="https://img.shields.io/coveralls/JayBizzle/Crawler-Detect/master.svg?style=flat-square" /></a>
|
14 |
-
</p>
|
15 |
-
|
16 |
-
## About CrawlerDetect
|
17 |
-
|
18 |
-
CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent and http_from header. Currently able to detect 1,000's of bots/spiders/crawlers.
|
19 |
-
|
20 |
-
### Installation
|
21 |
-
Run `composer require jaybizzle/crawler-detect 1.*` or add `"jaybizzle/crawler-detect" :"1.*"` to your `composer.json`.
|
22 |
-
|
23 |
-
### Usage
|
24 |
-
```PHP
|
25 |
-
use Jaybizzle\CrawlerDetect\CrawlerDetect;
|
26 |
-
|
27 |
-
$CrawlerDetect = new CrawlerDetect;
|
28 |
-
|
29 |
-
// Check the user agent of the current 'visitor'
|
30 |
-
if($CrawlerDetect->isCrawler()) {
|
31 |
-
// true if crawler user agent detected
|
32 |
-
}
|
33 |
-
|
34 |
-
// Pass a user agent as a string
|
35 |
-
if($CrawlerDetect->isCrawler('Mozilla/5.0 (compatible; Sosospider/2.0; +http://help.soso.com/webspider.htm)')) {
|
36 |
-
// true if crawler user agent detected
|
37 |
-
}
|
38 |
-
|
39 |
-
// Output the name of the bot that matched (if any)
|
40 |
-
echo $CrawlerDetect->getMatches();
|
41 |
-
```
|
42 |
-
|
43 |
-
### Contributing
|
44 |
-
If you find a bot/spider/crawler user agent that CrawlerDetect fails to detect, please submit a pull request with the regex pattern added to the `$data` array in `Fixtures/Crawlers.php` and add the failing user agent to `tests/crawlers.txt`.
|
45 |
-
|
46 |
-
Failing that, just create an issue with the user agent you have found, and we'll take it from there :)
|
47 |
-
|
48 |
-
### Laravel Package
|
49 |
-
If you would like to use this with Laravel 4/5, please see [Laravel-Crawler-Detect](https://github.com/JayBizzle/Laravel-Crawler-Detect)
|
50 |
-
|
51 |
-
### Symfony Bundle
|
52 |
-
To use this library with Symfony 2/3/4, check out the [CrawlerDetectBundle](https://github.com/nicolasmure/CrawlerDetectBundle).
|
53 |
-
|
54 |
-
### YII2 Extension
|
55 |
-
To use this library with the YII2 framework, check out [yii2-crawler-detect](https://github.com/AlikDex/yii2-crawler-detect).
|
56 |
-
|
57 |
-
### ES6 Library
|
58 |
-
To use this library with NodeJS or any ES6 application based, check out [es6-crawler-detect](https://github.com/JefferyHus/es6-crawler-detect).
|
59 |
-
|
60 |
-
### .NET Library
|
61 |
-
To use this library in a .net standard (including .net core) based project, check out [NetCrawlerDetect](https://github.com/gplumb/NetCrawlerDetect).
|
62 |
-
|
63 |
-
### Nette Extension
|
64 |
-
To use this library with the Nette framework, checkout [NetteCrawlerDetect](https://github.com/JanGalek/Crawler-Detect).
|
65 |
-
|
66 |
-
_Parts of this class are based on the brilliant [MobileDetect](https://github.com/serbanghita/Mobile-Detect)_
|
67 |
-
|
68 |
-
[![Analytics](https://ga-beacon.appspot.com/UA-72430465-1/Crawler-Detect/readme?pixel)](https://github.com/JayBizzle/Crawler-Detect)
|
1 |
+
<p align="center"><a href="http://crawlerdetect.io/" target="_blank"><img src="https://cloud.githubusercontent.com/assets/340752/23082173/1bd1a396-f550-11e6-8aba-4d3c75edea2f.png" width="321" height="219" /></a><br><br>
|
2 |
+
<a href="http://crawlerdetect.io/" target="_blank">crawlerdetect.io</a>
|
3 |
+
<br><br>
|
4 |
+
</p>
|
5 |
+
|
6 |
+
<p align="center">
|
7 |
+
<a href="https://travis-ci.org/JayBizzle/Crawler-Detect"><img src="https://img.shields.io/travis/JayBizzle/Crawler-Detect/master.svg?style=flat-square" /></a>
|
8 |
+
<a href="https://packagist.org/packages/jaybizzle/crawler-detect"><img src="https://img.shields.io/packagist/dm/JayBizzle/Crawler-Detect.svg?style=flat-square" /></a>
|
9 |
+
<a href="https://scrutinizer-ci.com/g/JayBizzle/Crawler-Detect/?branch=master"><img src="https://img.shields.io/scrutinizer/g/JayBizzle/Crawler-Detect.svg?style=flat-square" /></a>
|
10 |
+
<a href="https://github.com/JayBizzle/Crawler-Detect"><img src="https://img.shields.io/badge/license-MIT-ff69b4.svg?style=flat-square" /></a>
|
11 |
+
<a href="https://packagist.org/packages/jaybizzle/crawler-detect"><img src="https://img.shields.io/packagist/v/jaybizzle/Crawler-Detect.svg?style=flat-square" /></a>
|
12 |
+
<a href="https://styleci.io/repos/32755917"><img src="https://styleci.io/repos/32755917/shield" /></a>
|
13 |
+
<a href="https://coveralls.io/github/JayBizzle/Crawler-Detect"><img src="https://img.shields.io/coveralls/JayBizzle/Crawler-Detect/master.svg?style=flat-square" /></a>
|
14 |
+
</p>
|
15 |
+
|
16 |
+
## About CrawlerDetect
|
17 |
+
|
18 |
+
CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent and http_from header. Currently able to detect 1,000's of bots/spiders/crawlers.
|
19 |
+
|
20 |
+
### Installation
|
21 |
+
Run `composer require jaybizzle/crawler-detect 1.*` or add `"jaybizzle/crawler-detect" :"1.*"` to your `composer.json`.
|
22 |
+
|
23 |
+
### Usage
|
24 |
+
```PHP
|
25 |
+
use Jaybizzle\CrawlerDetect\CrawlerDetect;
|
26 |
+
|
27 |
+
$CrawlerDetect = new CrawlerDetect;
|
28 |
+
|
29 |
+
// Check the user agent of the current 'visitor'
|
30 |
+
if($CrawlerDetect->isCrawler()) {
|
31 |
+
// true if crawler user agent detected
|
32 |
+
}
|
33 |
+
|
34 |
+
// Pass a user agent as a string
|
35 |
+
if($CrawlerDetect->isCrawler('Mozilla/5.0 (compatible; Sosospider/2.0; +http://help.soso.com/webspider.htm)')) {
|
36 |
+
// true if crawler user agent detected
|
37 |
+
}
|
38 |
+
|
39 |
+
// Output the name of the bot that matched (if any)
|
40 |
+
echo $CrawlerDetect->getMatches();
|
41 |
+
```
|
42 |
+
|
43 |
+
### Contributing
|
44 |
+
If you find a bot/spider/crawler user agent that CrawlerDetect fails to detect, please submit a pull request with the regex pattern added to the `$data` array in `Fixtures/Crawlers.php` and add the failing user agent to `tests/crawlers.txt`.
|
45 |
+
|
46 |
+
Failing that, just create an issue with the user agent you have found, and we'll take it from there :)
|
47 |
+
|
48 |
+
### Laravel Package
|
49 |
+
If you would like to use this with Laravel 4/5, please see [Laravel-Crawler-Detect](https://github.com/JayBizzle/Laravel-Crawler-Detect)
|
50 |
+
|
51 |
+
### Symfony Bundle
|
52 |
+
To use this library with Symfony 2/3/4, check out the [CrawlerDetectBundle](https://github.com/nicolasmure/CrawlerDetectBundle).
|
53 |
+
|
54 |
+
### YII2 Extension
|
55 |
+
To use this library with the YII2 framework, check out [yii2-crawler-detect](https://github.com/AlikDex/yii2-crawler-detect).
|
56 |
+
|
57 |
+
### ES6 Library
|
58 |
+
To use this library with NodeJS or any ES6 application based, check out [es6-crawler-detect](https://github.com/JefferyHus/es6-crawler-detect).
|
59 |
+
|
60 |
+
### .NET Library
|
61 |
+
To use this library in a .net standard (including .net core) based project, check out [NetCrawlerDetect](https://github.com/gplumb/NetCrawlerDetect).
|
62 |
+
|
63 |
+
### Nette Extension
|
64 |
+
To use this library with the Nette framework, checkout [NetteCrawlerDetect](https://github.com/JanGalek/Crawler-Detect).
|
65 |
+
|
66 |
+
_Parts of this class are based on the brilliant [MobileDetect](https://github.com/serbanghita/Mobile-Detect)_
|
67 |
+
|
68 |
+
[![Analytics](https://ga-beacon.appspot.com/UA-72430465-1/Crawler-Detect/readme?pixel)](https://github.com/JayBizzle/Crawler-Detect)
|
vendor/jaybizzle/crawler-detect/composer.json
CHANGED
@@ -1,30 +1,30 @@
|
|
1 |
-
{
|
2 |
-
"name": "jaybizzle/crawler-detect",
|
3 |
-
"type": "library",
|
4 |
-
"description": "CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent",
|
5 |
-
"keywords": ["crawler", "crawler detect", "crawler detector", "crawlerdetect", "php crawler detect"],
|
6 |
-
"homepage": "https://github.com/JayBizzle/Crawler-Detect/",
|
7 |
-
"license": "MIT",
|
8 |
-
"authors": [
|
9 |
-
{
|
10 |
-
"name": "Mark Beech",
|
11 |
-
"email": "m@rkbee.ch",
|
12 |
-
"role": "Developer"
|
13 |
-
}
|
14 |
-
],
|
15 |
-
"require": {
|
16 |
-
"php": ">=5.3.0"
|
17 |
-
},
|
18 |
-
"require-dev": {
|
19 |
-
"phpunit/phpunit": "^4.8|^5.5|^6.5",
|
20 |
-
"satooshi/php-coveralls": "1.*"
|
21 |
-
},
|
22 |
-
"autoload": {
|
23 |
-
"psr-4": {
|
24 |
-
"Jaybizzle\\CrawlerDetect\\": "src/"
|
25 |
-
}
|
26 |
-
},
|
27 |
-
"scripts": {
|
28 |
-
"test": "vendor/bin/phpunit"
|
29 |
-
}
|
30 |
-
}
|
1 |
+
{
|
2 |
+
"name": "jaybizzle/crawler-detect",
|
3 |
+
"type": "library",
|
4 |
+
"description": "CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent",
|
5 |
+
"keywords": ["crawler", "crawler detect", "crawler detector", "crawlerdetect", "php crawler detect"],
|
6 |
+
"homepage": "https://github.com/JayBizzle/Crawler-Detect/",
|
7 |
+
"license": "MIT",
|
8 |
+
"authors": [
|
9 |
+
{
|
10 |
+
"name": "Mark Beech",
|
11 |
+
"email": "m@rkbee.ch",
|
12 |
+
"role": "Developer"
|
13 |
+
}
|
14 |
+
],
|
15 |
+
"require": {
|
16 |
+
"php": ">=5.3.0"
|
17 |
+
},
|
18 |
+
"require-dev": {
|
19 |
+
"phpunit/phpunit": "^4.8|^5.5|^6.5",
|
20 |
+
"satooshi/php-coveralls": "1.*"
|
21 |
+
},
|
22 |
+
"autoload": {
|
23 |
+
"psr-4": {
|
24 |
+
"Jaybizzle\\CrawlerDetect\\": "src/"
|
25 |
+
}
|
26 |
+
},
|
27 |
+
"scripts": {
|
28 |
+
"test": "vendor/bin/phpunit"
|
29 |
+
}
|
30 |
+
}
|
vendor/jaybizzle/crawler-detect/export.php
CHANGED
@@ -1,41 +1,41 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of Crawler Detect - the web crawler detection library.
|
5 |
-
*
|
6 |
-
* (c) Mark Beech <m@rkbee.ch>
|
7 |
-
*
|
8 |
-
* This source file is subject to the MIT license that is bundled
|
9 |
-
* with this source code in the file LICENSE.
|
10 |
-
*/
|
11 |
-
|
12 |
-
require 'src/Fixtures/AbstractProvider.php';
|
13 |
-
require 'src/Fixtures/Crawlers.php';
|
14 |
-
require 'src/Fixtures/Exclusions.php';
|
15 |
-
require 'src/Fixtures/Headers.php';
|
16 |
-
|
17 |
-
$src = array(
|
18 |
-
'Crawlers',
|
19 |
-
'Exclusions',
|
20 |
-
'Headers',
|
21 |
-
);
|
22 |
-
|
23 |
-
foreach ($src as $class) {
|
24 |
-
$class = "Jaybizzle\\CrawlerDetect\\Fixtures\\$class";
|
25 |
-
$object = new $class;
|
26 |
-
|
27 |
-
outputJson($object);
|
28 |
-
outputTxt($object);
|
29 |
-
}
|
30 |
-
|
31 |
-
function outputJson($object)
|
32 |
-
{
|
33 |
-
$className = (new ReflectionClass($object))->getShortName();
|
34 |
-
file_put_contents("raw/$className.json", json_encode($object->getAll()));
|
35 |
-
}
|
36 |
-
|
37 |
-
function outputTxt($object)
|
38 |
-
{
|
39 |
-
$className = (new ReflectionClass($object))->getShortName();
|
40 |
-
file_put_contents("raw/$className.txt", implode($object->getAll(), PHP_EOL));
|
41 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of Crawler Detect - the web crawler detection library.
|
5 |
+
*
|
6 |
+
* (c) Mark Beech <m@rkbee.ch>
|
7 |
+
*
|
8 |
+
* This source file is subject to the MIT license that is bundled
|
9 |
+
* with this source code in the file LICENSE.
|
10 |
+
*/
|
11 |
+
|
12 |
+
require 'src/Fixtures/AbstractProvider.php';
|
13 |
+
require 'src/Fixtures/Crawlers.php';
|
14 |
+
require 'src/Fixtures/Exclusions.php';
|
15 |
+
require 'src/Fixtures/Headers.php';
|
16 |
+
|
17 |
+
$src = array(
|
18 |
+
'Crawlers',
|
19 |
+
'Exclusions',
|
20 |
+
'Headers',
|
21 |
+
);
|
22 |
+
|
23 |
+
foreach ($src as $class) {
|
24 |
+
$class = "Jaybizzle\\CrawlerDetect\\Fixtures\\$class";
|
25 |
+
$object = new $class;
|
26 |
+
|
27 |
+
outputJson($object);
|
28 |
+
outputTxt($object);
|
29 |
+
}
|
30 |
+
|
31 |
+
function outputJson($object)
|
32 |
+
{
|
33 |
+
$className = (new ReflectionClass($object))->getShortName();
|
34 |
+
file_put_contents("raw/$className.json", json_encode($object->getAll()));
|
35 |
+
}
|
36 |
+
|
37 |
+
function outputTxt($object)
|
38 |
+
{
|
39 |
+
$className = (new ReflectionClass($object))->getShortName();
|
40 |
+
file_put_contents("raw/$className.txt", implode($object->getAll(), PHP_EOL));
|
41 |
+
}
|
vendor/jaybizzle/crawler-detect/raw/Crawlers.txt
CHANGED
@@ -1,1141 +1,1141 @@
|
|
1 |
-
.*Java.*outbrain
|
2 |
-
YLT
|
3 |
-
008\/
|
4 |
-
192\.comAgent
|
5 |
-
2ip\.ru
|
6 |
-
404checker
|
7 |
-
404enemy
|
8 |
-
80legs
|
9 |
-
^b0t$
|
10 |
-
^bluefish
|
11 |
-
^Calypso v\/
|
12 |
-
^COMODO DCV
|
13 |
-
^DangDang
|
14 |
-
^DavClnt
|
15 |
-
^FDM
|
16 |
-
^git\/
|
17 |
-
^Goose\/
|
18 |
-
^Grabber
|
19 |
-
^HTTPClient\/
|
20 |
-
^Java\/
|
21 |
-
^Jeode\/
|
22 |
-
^Jetty\/
|
23 |
-
^Mget
|
24 |
-
^Microsoft URL Control
|
25 |
-
^NG\/[0-9\.]
|
26 |
-
^NING\/
|
27 |
-
^PHP\/[0-9]
|
28 |
-
^RMA\/
|
29 |
-
^Ruby|Ruby\/[0-9]
|
30 |
-
^scrutiny\/
|
31 |
-
^VSE\/[0-9]
|
32 |
-
^WordPress\.com
|
33 |
-
^XRL\/[0-9]
|
34 |
-
^ZmEu
|
35 |
-
a3logics\.in
|
36 |
-
A6-Indexer
|
37 |
-
a\.pr-cy\.ru
|
38 |
-
Abonti
|
39 |
-
Aboundex
|
40 |
-
aboutthedomain
|
41 |
-
Accoona-AI-Agent
|
42 |
-
acoon
|
43 |
-
acrylicapps\.com\/pulp
|
44 |
-
Acunetix
|
45 |
-
adbeat
|
46 |
-
AddThis
|
47 |
-
ADmantX
|
48 |
-
adressendeutschland
|
49 |
-
adscanner\/
|
50 |
-
Advanced Email Extractor v
|
51 |
-
agentslug
|
52 |
-
AHC
|
53 |
-
aihit
|
54 |
-
aiohttp\/
|
55 |
-
Airmail
|
56 |
-
akka-http\/
|
57 |
-
akula\/
|
58 |
-
alertra
|
59 |
-
alexa site audit
|
60 |
-
Alibaba\.Security\.Heimdall
|
61 |
-
Alligator
|
62 |
-
allloadin\.com
|
63 |
-
AllSubmitter
|
64 |
-
alyze\.info
|
65 |
-
amagit
|
66 |
-
Anarchie
|
67 |
-
AndroidDownloadManager
|
68 |
-
Anemone
|
69 |
-
AngleSharp\/
|
70 |
-
Ant\.com
|
71 |
-
Anturis Agent
|
72 |
-
AnyEvent-HTTP\/
|
73 |
-
Apache Droid
|
74 |
-
Apache-HttpAsyncClient\/
|
75 |
-
Apache-HttpClient\/
|
76 |
-
ApacheBench\/
|
77 |
-
Apexoo
|
78 |
-
APIs-Google
|
79 |
-
AportWorm\/[0-9]
|
80 |
-
AppBeat\/[0-9]
|
81 |
-
AppEngine-Google
|
82 |
-
Arachmo
|
83 |
-
arachnode
|
84 |
-
Arachnophilia
|
85 |
-
aria2
|
86 |
-
asafaweb.com
|
87 |
-
AskQuickly
|
88 |
-
ASPSeek
|
89 |
-
Asterias
|
90 |
-
Astute
|
91 |
-
asynchttp
|
92 |
-
Attach
|
93 |
-
autocite
|
94 |
-
Autonomy
|
95 |
-
axios\/
|
96 |
-
B-l-i-t-z-B-O-T
|
97 |
-
Backlink-Ceck
|
98 |
-
backlink-check
|
99 |
-
BackStreet
|
100 |
-
BackWeb
|
101 |
-
Bad-Neighborhood
|
102 |
-
Badass
|
103 |
-
baidu\.com
|
104 |
-
Bandit
|
105 |
-
BatchFTP
|
106 |
-
Battleztar\ Bazinga
|
107 |
-
baypup\/[0-9]
|
108 |
-
baypup\/colbert
|
109 |
-
BazQux
|
110 |
-
BBBike
|
111 |
-
BCKLINKS
|
112 |
-
BDFetch
|
113 |
-
BegunAdvertising\/
|
114 |
-
BigBozz
|
115 |
-
Bigfoot
|
116 |
-
biglotron
|
117 |
-
BingLocalSearch
|
118 |
-
BingPreview
|
119 |
-
binlar
|
120 |
-
biNu image cacher
|
121 |
-
Bitacle
|
122 |
-
biz_Directory
|
123 |
-
Black\ Hole
|
124 |
-
Blackboard Safeassign
|
125 |
-
BlackWidow
|
126 |
-
Bloglovin
|
127 |
-
BlogPulseLive
|
128 |
-
BlogSearch
|
129 |
-
Blogtrottr
|
130 |
-
BlowFish
|
131 |
-
Boardreader
|
132 |
-
boitho\.com-dc
|
133 |
-
Bolt
|
134 |
-
BPImageWalker
|
135 |
-
Braintree-Webhooks
|
136 |
-
Branch Metrics API
|
137 |
-
Branch-Passthrough
|
138 |
-
Brandprotect
|
139 |
-
Brandwatch
|
140 |
-
Brodie\/
|
141 |
-
Browsershots
|
142 |
-
BUbiNG
|
143 |
-
Buck\/
|
144 |
-
Buddy
|
145 |
-
BuiltWith
|
146 |
-
Bullseye
|
147 |
-
BunnySlippers
|
148 |
-
Burf Search
|
149 |
-
Butterfly\/
|
150 |
-
BuzzSumo
|
151 |
-
CAAM\/[0-9]
|
152 |
-
CakePHP
|
153 |
-
Calculon
|
154 |
-
CapsuleChecker
|
155 |
-
CaretNail
|
156 |
-
catexplorador
|
157 |
-
cb crawl
|
158 |
-
CC Metadata Scaper
|
159 |
-
Cegbfeieh
|
160 |
-
Cerberian Drtrs
|
161 |
-
CERT\.at-Statistics-Survey
|
162 |
-
cg-eye
|
163 |
-
changedetection
|
164 |
-
ChangesMeter\/
|
165 |
-
Charlotte
|
166 |
-
CheckHost
|
167 |
-
checkprivacy
|
168 |
-
CherryPicker
|
169 |
-
ChinaClaw
|
170 |
-
Chirp\/[0-9]
|
171 |
-
chkme\.com
|
172 |
-
Chlooe
|
173 |
-
CirrusExplorer\/
|
174 |
-
CISPA Vulnerability Notification
|
175 |
-
Citoid
|
176 |
-
CJNetworkQuality
|
177 |
-
Clarsentia
|
178 |
-
clips\.ua\.ac\.be
|
179 |
-
Cloud\ mapping
|
180 |
-
CloudEndure
|
181 |
-
CloudFlare-AlwaysOnline
|
182 |
-
Cloudinary\/[0-9]
|
183 |
-
cmcm\.com
|
184 |
-
coccoc
|
185 |
-
cognitiveseo
|
186 |
-
colly -
|
187 |
-
CommaFeed
|
188 |
-
Commons-HttpClient
|
189 |
-
Comodo SSL Checker
|
190 |
-
contactbigdatafr
|
191 |
-
convera
|
192 |
-
copyright sheriff
|
193 |
-
CopyRightCheck
|
194 |
-
Copyscape
|
195 |
-
Cosmos4j\.feedback
|
196 |
-
Covario-IDS
|
197 |
-
CrawlForMe\/[0-9]
|
198 |
-
Crescent
|
199 |
-
cron-job\.org
|
200 |
-
Crowsnest
|
201 |
-
CSHttp
|
202 |
-
curb
|
203 |
-
Curious George
|
204 |
-
curl
|
205 |
-
Custo
|
206 |
-
cuwhois\/[0-9]
|
207 |
-
cybo\.com
|
208 |
-
DareBoost
|
209 |
-
DatabaseDriverMysqli
|
210 |
-
DataCha0s
|
211 |
-
DataparkSearch
|
212 |
-
dataprovider
|
213 |
-
Daum(oa)?[ \/][0-9]
|
214 |
-
Demon
|
215 |
-
DeuSu
|
216 |
-
developers\.google\.com\/\+\/web\/snippet\/
|
217 |
-
Devil
|
218 |
-
Digg
|
219 |
-
Digincore
|
220 |
-
DigitalPebble
|
221 |
-
Dirbuster
|
222 |
-
Dispatch\/
|
223 |
-
DittoSpyder
|
224 |
-
dlvr
|
225 |
-
DMBrowser
|
226 |
-
DNS-Tools Header-Analyzer
|
227 |
-
DNSPod-reporting
|
228 |
-
docoloc
|
229 |
-
Dolphin http client\/
|
230 |
-
DomainAppender
|
231 |
-
Donuts Content Explorer
|
232 |
-
dotMailer content retrieval
|
233 |
-
dotSemantic
|
234 |
-
downforeveryoneorjustme
|
235 |
-
Download\ Wonder
|
236 |
-
downnotifier\.com
|
237 |
-
DowntimeDetector
|
238 |
-
Dragonfly File Reader
|
239 |
-
Drip
|
240 |
-
drupact
|
241 |
-
Drupal \(\+http:\/\/drupal\.org\/\)
|
242 |
-
DTS\ Agent
|
243 |
-
dubaiindex
|
244 |
-
EARTHCOM
|
245 |
-
Easy-Thumb
|
246 |
-
EasyDL
|
247 |
-
Ebingbong
|
248 |
-
ec2linkfinder
|
249 |
-
eCairn-Grabber
|
250 |
-
eCatch
|
251 |
-
ECCP
|
252 |
-
echocrawl
|
253 |
-
eContext\/
|
254 |
-
Ecxi
|
255 |
-
EirGrabber
|
256 |
-
ElectricMonk
|
257 |
-
elefent
|
258 |
-
EMail Exractor
|
259 |
-
Email%20Extractor%20Lite
|
260 |
-
EMail\ Wolf
|
261 |
-
EmailWolf
|
262 |
-
Embed PHP Library
|
263 |
-
Embedly
|
264 |
-
europarchive\.org
|
265 |
-
evc-batch
|
266 |
-
EventMachine HttpClient
|
267 |
-
Evidon
|
268 |
-
Evrinid
|
269 |
-
ExactSearch
|
270 |
-
ExaleadCloudview
|
271 |
-
Excel\/
|
272 |
-
Exif Viewer
|
273 |
-
ExperianCrawlUK
|
274 |
-
Exploratodo
|
275 |
-
Express WebPictures
|
276 |
-
ExtractorPro
|
277 |
-
Extreme\ Picture\ Finder
|
278 |
-
EyeNetIE
|
279 |
-
ezooms
|
280 |
-
facebookexternalhit
|
281 |
-
facebookplatform
|
282 |
-
fairshare
|
283 |
-
Faraday v
|
284 |
-
fasthttp
|
285 |
-
Faveeo
|
286 |
-
Favicon downloader
|
287 |
-
FavOrg
|
288 |
-
Feed Wrangler
|
289 |
-
Feedbin
|
290 |
-
FeedBooster
|
291 |
-
FeedBucket
|
292 |
-
FeedBunch\/[0-9]
|
293 |
-
FeedBurner
|
294 |
-
FeedChecker
|
295 |
-
Feedly
|
296 |
-
Feedspot
|
297 |
-
Feedwind\/[0-9]
|
298 |
-
feeltiptop
|
299 |
-
Fetch API
|
300 |
-
Fetch\/[0-9]
|
301 |
-
Fever\/[0-9]
|
302 |
-
FHscan
|
303 |
-
Fimap
|
304 |
-
findlink
|
305 |
-
findthatfile
|
306 |
-
FlashGet
|
307 |
-
FlipboardBrowserProxy
|
308 |
-
FlipboardProxy
|
309 |
-
FlipboardRSS
|
310 |
-
fluffy
|
311 |
-
Flunky
|
312 |
-
flynxapp
|
313 |
-
forensiq
|
314 |
-
FoundSeoTool\/[0-9]
|
315 |
-
free thumbnails
|
316 |
-
Freeuploader
|
317 |
-
FreeWebMonitoring SiteChecker
|
318 |
-
Funnelback
|
319 |
-
G-i-g-a-b-o-t
|
320 |
-
g00g1e\.net
|
321 |
-
GAChecker
|
322 |
-
ganarvisitas\/[0-9]
|
323 |
-
geek-tools
|
324 |
-
Genderanalyzer
|
325 |
-
Genieo
|
326 |
-
GentleSource
|
327 |
-
Getintent
|
328 |
-
GetLinkInfo
|
329 |
-
getprismatic\.com
|
330 |
-
GetRight
|
331 |
-
GetURLInfo\/[0-9]
|
332 |
-
GetWeb
|
333 |
-
Ghost Inspector
|
334 |
-
GigablastOpenSource
|
335 |
-
GIS-LABS
|
336 |
-
github-camo
|
337 |
-
github\.com\/
|
338 |
-
Go [\d\.]* package http
|
339 |
-
Go http package
|
340 |
-
Go!Zilla
|
341 |
-
Go-Ahead-Got-It
|
342 |
-
Go-http-client
|
343 |
-
gobyus
|
344 |
-
gofetch
|
345 |
-
GomezAgent
|
346 |
-
gooblog
|
347 |
-
Goodzer\/[0-9]
|
348 |
-
Google favicon
|
349 |
-
Google Keyword Suggestion
|
350 |
-
Google Keyword Tool
|
351 |
-
Google Page Speed Insights
|
352 |
-
Google PP Default
|
353 |
-
Google Search Console
|
354 |
-
Google Web Preview
|
355 |
-
Google-Adwords
|
356 |
-
Google-Apps-Script
|
357 |
-
Google-Calendar-Importer
|
358 |
-
Google-HotelAdsVerifier
|
359 |
-
Google-HTTP-Java-Client
|
360 |
-
Google-Publisher-Plugin
|
361 |
-
Google-SearchByImage
|
362 |
-
Google-Site-Verification
|
363 |
-
Google-Structured-Data-Testing-Tool
|
364 |
-
Google-Youtube-Links
|
365 |
-
google_partner_monitoring
|
366 |
-
GoogleDocs
|
367 |
-
GoogleHC\/
|
368 |
-
GoogleProducer
|
369 |
-
Gookey
|
370 |
-
GoScraper
|
371 |
-
GoSpotCheck
|
372 |
-
GoSquared-Status-Checker
|
373 |
-
gosquared-thumbnailer
|
374 |
-
Gotit
|
375 |
-
GoZilla
|
376 |
-
grabify
|
377 |
-
GrabNet
|
378 |
-
Grafula
|
379 |
-
Grammarly
|
380 |
-
GrapeFX
|
381 |
-
grokkit
|
382 |
-
grouphigh
|
383 |
-
grub-client
|
384 |
-
gSOAP\/
|
385 |
-
GT::WWW
|
386 |
-
GTmetrix
|
387 |
-
GuzzleHttp
|
388 |
-
gvfs\/
|
389 |
-
HAA(A)?RTLAND http client
|
390 |
-
Haansoft
|
391 |
-
hackney\/
|
392 |
-
Hatena
|
393 |
-
Havij
|
394 |
-
hawkReader
|
395 |
-
HEADMasterSEO
|
396 |
-
HeartRails_Capture
|
397 |
-
help@dataminr\.com
|
398 |
-
heritrix
|
399 |
-
historious\/
|
400 |
-
hledejLevne\.cz\/[0-9]
|
401 |
-
Hloader
|
402 |
-
HMView
|
403 |
-
Holmes
|
404 |
-
HonesoSearchEngine\/
|
405 |
-
HootSuite Image proxy
|
406 |
-
Hootsuite-WebFeed\/[0-9]
|
407 |
-
hosterstats
|
408 |
-
HostTracker
|
409 |
-
ht:\/\/check
|
410 |
-
htdig
|
411 |
-
HTMLparser
|
412 |
-
http-get
|
413 |
-
HTTP-Header-Abfrage
|
414 |
-
http-kit
|
415 |
-
http-request\/
|
416 |
-
HTTP-Tiny
|
417 |
-
HTTP::Lite
|
418 |
-
http\.rb\/
|
419 |
-
HTTP_Compression_Test
|
420 |
-
http_request2
|
421 |
-
http_requester
|
422 |
-
HttpComponents
|
423 |
-
httphr
|
424 |
-
HTTPMon
|
425 |
-
httpscheck
|
426 |
-
httpssites_power
|
427 |
-
httpunit
|
428 |
-
HttpUrlConnection
|
429 |
-
httrack
|
430 |
-
huaweisymantec
|
431 |
-
HubPages.*crawlingpolicy
|
432 |
-
HubSpot
|
433 |
-
Humanlinks
|
434 |
-
HyperZbozi.cz Feeder
|
435 |
-
i2kconnect\/
|
436 |
-
Iblog
|
437 |
-
ichiro
|
438 |
-
Id-search
|
439 |
-
IdeelaborPlagiaat
|
440 |
-
IDG Twitter Links Resolver
|
441 |
-
IDwhois\/[0-9]
|
442 |
-
Iframely
|
443 |
-
igdeSpyder
|
444 |
-
IlTrovatore
|
445 |
-
Image\ Fetch
|
446 |
-
Image\ Sucker
|
447 |
-
ImageEngine\/
|
448 |
-
Imagga
|
449 |
-
imgsizer
|
450 |
-
InAGist
|
451 |
-
inbound\.li parser
|
452 |
-
InDesign%20CC
|
453 |
-
Indy\ Library
|
454 |
-
infegy
|
455 |
-
infohelfer
|
456 |
-
InfoTekies
|
457 |
-
InfoWizards Reciprocal Link System PRO
|
458 |
-
inpwrd\.com
|
459 |
-
instabid
|
460 |
-
Instapaper
|
461 |
-
Integrity
|
462 |
-
integromedb
|
463 |
-
Intelliseek
|
464 |
-
InterGET
|
465 |
-
Internet\ Ninja
|
466 |
-
internet_archive
|
467 |
-
InternetSeer
|
468 |
-
internetVista monitor
|
469 |
-
intraVnews
|
470 |
-
IODC
|
471 |
-
IOI
|
472 |
-
iplabel
|
473 |
-
ips-agent
|
474 |
-
IPS\/[0-9]
|
475 |
-
IPWorks HTTP\/S Component
|
476 |
-
iqdb\/
|
477 |
-
Iria
|
478 |
-
Irokez
|
479 |
-
isitup\.org
|
480 |
-
iskanie
|
481 |
-
iZSearch
|
482 |
-
janforman
|
483 |
-
Jaunt\/
|
484 |
-
Jbrofuzz
|
485 |
-
Jersey\/
|
486 |
-
JetCar
|
487 |
-
Jigsaw
|
488 |
-
Jobboerse
|
489 |
-
JobFeed discovery
|
490 |
-
Jobg8 URL Monitor
|
491 |
-
jobo
|
492 |
-
Jobrapido
|
493 |
-
Jobsearch1\.5
|
494 |
-
JoinVision Generic
|
495 |
-
Joomla
|
496 |
-
Jorgee
|
497 |
-
JS-Kit
|
498 |
-
JustView
|
499 |
-
Kaspersky Lab CFR link resolver
|
500 |
-
KeepRight OpenStreetMap Checker
|
501 |
-
Kelny\/
|
502 |
-
Kerrigan\/
|
503 |
-
KeyCDN
|
504 |
-
Keyword Extractor
|
505 |
-
Keyword\ Density
|
506 |
-
Keywords Research
|
507 |
-
KickFire
|
508 |
-
KimonoLabs\/
|
509 |
-
Kml-Google
|
510 |
-
knows\.is
|
511 |
-
KOCMOHABT
|
512 |
-
kouio
|
513 |
-
kulturarw3
|
514 |
-
KumKie
|
515 |
-
L\.webis
|
516 |
-
Larbin
|
517 |
-
Lavf\/
|
518 |
-
LayeredExtractor
|
519 |
-
LeechFTP
|
520 |
-
LeechGet
|
521 |
-
letsencrypt
|
522 |
-
Lftp
|
523 |
-
LibVLC
|
524 |
-
LibWeb
|
525 |
-
Libwhisker
|
526 |
-
libwww
|
527 |
-
Licorne Image Snapshot
|
528 |
-
Liferea\/
|
529 |
-
Lightspeedsystems
|
530 |
-
Likse
|
531 |
-
link checker
|
532 |
-
Link Valet
|
533 |
-
link_thumbnailer
|
534 |
-
LinkAlarm\/
|
535 |
-
linkCheck
|
536 |
-
linkdex
|
537 |
-
LinkExaminer
|
538 |
-
linkfluence
|
539 |
-
linkpeek
|
540 |
-
LinkPreviewGenerator
|
541 |
-
LinkScan
|
542 |
-
LinksManager
|
543 |
-
LinkTiger
|
544 |
-
LinkWalker
|
545 |
-
Lipperhey
|
546 |
-
Litemage_walker
|
547 |
-
livedoor ScreenShot
|
548 |
-
LoadImpactRload
|
549 |
-
LongURL API
|
550 |
-
looksystems\.net
|
551 |
-
ltx71
|
552 |
-
lua-resty-http
|
553 |
-
lwp-request
|
554 |
-
lwp-trivial
|
555 |
-
LWP::Simple
|
556 |
-
lycos
|
557 |
-
LYT\.SR
|
558 |
-
mabontland
|
559 |
-
Mag-Net
|
560 |
-
MagpieRSS
|
561 |
-
Mail.Ru
|
562 |
-
MailChimp
|
563 |
-
Majestic12
|
564 |
-
makecontact\/
|
565 |
-
Mandrill
|
566 |
-
MapperCmd
|
567 |
-
marketinggrader
|
568 |
-
MarkMonitor
|
569 |
-
MarkWatch
|
570 |
-
Mass\ Downloader
|
571 |
-
masscan\/[0-9]
|
572 |
-
Mata\ Hari
|
573 |
-
Mediapartners-Google
|
574 |
-
mediawords
|
575 |
-
MegaIndex\.ru
|
576 |
-
Melvil Rawi\/
|
577 |
-
MergeFlow-PageReader
|
578 |
-
Metaspinner
|
579 |
-
MetaURI
|
580 |
-
MFC_Tear_Sample
|
581 |
-
Microsearch
|
582 |
-
Microsoft Office
|
583 |
-
Microsoft Windows Network Diagnostics
|
584 |
-
Microsoft-WebDAV-MiniRedir
|
585 |
-
Microsoft\ Data\ Access
|
586 |
-
MIDown\ tool
|
587 |
-
MIIxpc
|
588 |
-
Mindjet
|
589 |
-
Miniature.io\/
|
590 |
-
Miniflux
|
591 |
-
Mister\ PiX
|
592 |
-
mixdata dot com
|
593 |
-
mixed-content-scan
|
594 |
-
mixnode
|
595 |
-
Mnogosearch
|
596 |
-
mogimogi
|
597 |
-
Mojeek
|
598 |
-
Mojolicious \(Perl\)
|
599 |
-
monitis
|
600 |
-
Monitority\/[0-9]
|
601 |
-
montastic
|
602 |
-
MonTools
|
603 |
-
Moreover
|
604 |
-
Morfeus\ Fucking\ Scanner
|
605 |
-
Morning Paper
|
606 |
-
MovableType
|
607 |
-
mowser
|
608 |
-
Mrcgiguy
|
609 |
-
MS\ Web\ Services\ Client\ Protocol
|
610 |
-
MSFrontPage
|
611 |
-
mShots
|
612 |
-
MuckRack\/
|
613 |
-
muhstik-scan
|
614 |
-
MVAClient
|
615 |
-
MxToolbox\/
|
616 |
-
nagios
|
617 |
-
Najdi\.si\/
|
618 |
-
Name\ Intelligence
|
619 |
-
Nameprotect
|
620 |
-
Navroad
|
621 |
-
NearSite
|
622 |
-
Needle
|
623 |
-
Nessus
|
624 |
-
Net\ Vampire
|
625 |
-
NetAnts
|
626 |
-
NETCRAFT
|
627 |
-
NetLyzer
|
628 |
-
NetMechanic
|
629 |
-
Netpursual
|
630 |
-
netresearch
|
631 |
-
NetShelter ContentScan
|
632 |
-
Netsparker
|
633 |
-
NetTrack
|
634 |
-
Netvibes
|
635 |
-
NetZIP
|
636 |
-
Neustar WPM
|
637 |
-
NeutrinoAPI
|
638 |
-
NewRelicPinger\/1.0 \(\d+\)
|
639 |
-
NewsBlur .*Finder
|
640 |
-
NewsGator
|
641 |
-
newsme
|
642 |
-
newspaper\/
|
643 |
-
Nexgate Ruby Client
|
644 |
-
NG-Search
|
645 |
-
Nibbler
|
646 |
-
NICErsPRO
|
647 |
-
Nikto
|
648 |
-
nineconnections\.com
|
649 |
-
NLNZ_IAHarvester
|
650 |
-
Nmap Scripting Engine
|
651 |
-
node-superagent
|
652 |
-
node-urllib\/
|
653 |
-
node\.io
|
654 |
-
nominet\.org\.uk
|
655 |
-
Norton-Safeweb
|
656 |
-
Notifixious
|
657 |
-
notifyninja
|
658 |
-
nuhk
|
659 |
-
nutch
|
660 |
-
Nuzzel
|
661 |
-
nWormFeedFinder
|
662 |
-
Nymesis
|
663 |
-
NYU
|
664 |
-
Ocelli\/[0-9]
|
665 |
-
Octopus
|
666 |
-
oegp
|
667 |
-
Offline Explorer
|
668 |
-
Offline\ Navigator
|
669 |
-
okhttp
|
670 |
-
Omea Reader
|
671 |
-
omgili
|
672 |
-
OMSC
|
673 |
-
Online Domain Tools
|
674 |
-
OpenCalaisSemanticProxy
|
675 |
-
Openfind
|
676 |
-
OpenLinkProfiler
|
677 |
-
Openstat\/
|
678 |
-
OpenVAS
|
679 |
-
Optimizer
|
680 |
-
Orbiter
|
681 |
-
OrgProbe\/[0-9]
|
682 |
-
orion-semantics
|
683 |
-
ow\.ly
|
684 |
-
Owler
|
685 |
-
ownCloud News
|
686 |
-
OxfordCloudService\/[0-9]
|
687 |
-
Page Analyzer
|
688 |
-
Page Valet
|
689 |
-
page2rss
|
690 |
-
page\ scorer
|
691 |
-
page_verifier
|
692 |
-
PageAnalyzer
|
693 |
-
PageGrabber
|
694 |
-
PagePeeker
|
695 |
-
PageScorer
|
696 |
-
Pagespeed\/[0-9]
|
697 |
-
Panopta
|
698 |
-
panscient
|
699 |
-
Papa\ Foto
|
700 |
-
parsijoo
|
701 |
-
Pavuk
|
702 |
-
PayPal IPN
|
703 |
-
pcBrowser
|
704 |
-
Pcore-HTTP
|
705 |
-
PEAR HTTPRequest
|
706 |
-
Pearltrees
|
707 |
-
PECL::HTTP
|
708 |
-
peerindex
|
709 |
-
Peew
|
710 |
-
PeoplePal
|
711 |
-
Perlu -
|
712 |
-
PhantomJS Screenshoter
|
713 |
-
PhantomJS\/
|
714 |
-
Photon\/
|
715 |
-
phpcrawl
|
716 |
-
phpservermon
|
717 |
-
Pi-Monster
|
718 |
-
Picscout
|
719 |
-
Picsearch
|
720 |
-
PictureFinder
|
721 |
-
Pimonster
|
722 |
-
ping\.blo\.gs\/
|
723 |
-
Pingability
|
724 |
-
Pingdom
|
725 |
-
Pingoscope
|
726 |
-
PingSpot
|
727 |
-
pinterest\.com
|
728 |
-
Pixray
|
729 |
-
Pizilla
|
730 |
-
PleaseCrawl
|
731 |
-
Ploetz \+ Zeller
|
732 |
-
Plukkie
|
733 |
-
plumanalytics
|
734 |
-
PocketParser
|
735 |
-
Pockey
|
736 |
-
POE-Component-Client-HTTP
|
737 |
-
Pompos
|
738 |
-
Porkbun
|
739 |
-
Port Monitor
|
740 |
-
postano
|
741 |
-
PostmanRuntime\/
|
742 |
-
PostPost
|
743 |
-
postrank
|
744 |
-
PowerPoint\/
|
745 |
-
Priceonomics Analysis Engine
|
746 |
-
PrintFriendly\.com
|
747 |
-
PritTorrent\/[0-9]
|
748 |
-
Prlog
|
749 |
-
probethenet
|
750 |
-
Project 25499
|
751 |
-
Promotion_Tools_www.searchenginepromotionhelp.com
|
752 |
-
prospectb2b
|
753 |
-
Protopage
|
754 |
-
ProWebWalker
|
755 |
-
proximic
|
756 |
-
PRTG Network Monitor
|
757 |
-
pshtt, https scanning
|
758 |
-
PTST
|
759 |
-
PTST\/[0-9]+
|
760 |
-
Pulsepoint XT3 web scraper
|
761 |
-
Pump
|
762 |
-
Python-httplib2
|
763 |
-
python-requests
|
764 |
-
Python-urllib
|
765 |
-
Qirina Hurdler
|
766 |
-
QQDownload
|
767 |
-
QrafterPro
|
768 |
-
Qseero
|
769 |
-
Qualidator.com SiteAnalyzer
|
770 |
-
QueryN\ Metasearch
|
771 |
-
Quora Link Preview
|
772 |
-
Qwantify
|
773 |
-
Radian6
|
774 |
-
RankActive
|
775 |
-
RankFlex
|
776 |
-
RankSonicSiteAuditor
|
777 |
-
Readability
|
778 |
-
RealDownload
|
779 |
-
RealPlayer%20Downloader
|
780 |
-
RebelMouse
|
781 |
-
Recorder
|
782 |
-
RecurPost\/
|
783 |
-
redback\/
|
784 |
-
Redirect Checker Tool
|
785 |
-
ReederForMac
|
786 |
-
ReGet
|
787 |
-
RepoMonkey
|
788 |
-
request\.js
|
789 |
-
ResponseCodeTest\/[0-9]
|
790 |
-
RestSharp
|
791 |
-
Riddler
|
792 |
-
Rival IQ
|
793 |
-
Robosourcer
|
794 |
-
Robozilla\/[0-9]
|
795 |
-
ROI Hunter
|
796 |
-
RPT-HTTPClient
|
797 |
-
RSSOwl
|
798 |
-
safe-agent-scanner
|
799 |
-
SalesIntelligent
|
800 |
-
Saleslift
|
801 |
-
SauceNAO
|
802 |
-
SBIder
|
803 |
-
scalaj-http
|
804 |
-
scan\.lol
|
805 |
-
ScanAlert
|
806 |
-
Scoop
|
807 |
-
scooter
|
808 |
-
ScoutJet
|
809 |
-
ScoutURLMonitor
|
810 |
-
Scrapy
|
811 |
-
Screaming
|
812 |
-
ScreenShotService\/[0-9]
|
813 |
-
Scrubby
|
814 |
-
Search37\/
|
815 |
-
search\.thunderstone
|
816 |
-
Searchestate
|
817 |
-
SearchSight
|
818 |
-
Seeker
|
819 |
-
semanticdiscovery
|
820 |
-
semanticjuice
|
821 |
-
Semiocast HTTP client
|
822 |
-
Semrush
|
823 |
-
sentry\/
|
824 |
-
SEO Browser
|
825 |
-
Seo Servis
|
826 |
-
seo-nastroj.cz
|
827 |
-
Seobility
|
828 |
-
SEOCentro
|
829 |
-
SeoCheck
|
830 |
-
SEOkicks
|
831 |
-
Seomoz
|
832 |
-
SEOprofiler
|
833 |
-
SeopultContentAnalyzer
|
834 |
-
seoscanners
|
835 |
-
SEOstats
|
836 |
-
Server Density Service Monitoring
|
837 |
-
servernfo\.com
|
838 |
-
SetCronJob\/
|
839 |
-
sexsearcher
|
840 |
-
Seznam
|
841 |
-
Shelob
|
842 |
-
Shodan
|
843 |
-
Shoppimon Analyzer
|
844 |
-
ShoppimonAgent\/[0-9]
|
845 |
-
ShopWiki
|
846 |
-
ShortLinkTranslate
|
847 |
-
shrinktheweb
|
848 |
-
Sideqik
|
849 |
-
SilverReader
|
850 |
-
SimplePie
|
851 |
-
SimplyFast
|
852 |
-
Siphon
|
853 |
-
SISTRIX
|
854 |
-
Site-Shot\/
|
855 |
-
Site24x7
|
856 |
-
Site\ Sucker
|
857 |
-
SiteBar
|
858 |
-
Sitebeam
|
859 |
-
Sitebulb\/
|
860 |
-
SiteCondor
|
861 |
-
SiteExplorer
|
862 |
-
SiteGuardian
|
863 |
-
Siteimprove
|
864 |
-
SiteIndexed
|
865 |
-
Sitemap(s)? Generator
|
866 |
-
SiteMonitor
|
867 |
-
Siteshooter B0t
|
868 |
-
SiteSnagger
|
869 |
-
SiteSucker
|
870 |
-
SiteTruth
|
871 |
-
Sitevigil
|
872 |
-
sitexy\.com
|
873 |
-
SkypeUriPreview
|
874 |
-
Slack\/
|
875 |
-
slider\.com
|
876 |
-
slurp
|
877 |
-
SlySearch
|
878 |
-
SmartDownload
|
879 |
-
SMRF URL Expander
|
880 |
-
SMUrlExpander
|
881 |
-
Snake
|
882 |
-
Snappy
|
883 |
-
SniffRSS
|
884 |
-
sniptracker
|
885 |
-
Snoopy
|
886 |
-
SnowHaze Search
|
887 |
-
sogou web
|
888 |
-
SortSite
|
889 |
-
Sottopop
|
890 |
-
sovereign\.ai
|
891 |
-
SpaceBison
|
892 |
-
Spammen
|
893 |
-
Spanner
|
894 |
-
spaziodati
|
895 |
-
Specificfeeds
|
896 |
-
speedy
|
897 |
-
SPEng
|
898 |
-
Spinn3r
|
899 |
-
spray-can
|
900 |
-
Sprinklr
|
901 |
-
spyonweb
|
902 |
-
sqlmap
|
903 |
-
Sqlworm
|
904 |
-
Sqworm
|
905 |
-
SSL Labs
|
906 |
-
ssl-tools
|
907 |
-
StackRambler
|
908 |
-
Statastico\/
|
909 |
-
StatusCake
|
910 |
-
Steeler
|
911 |
-
Stratagems Kumo
|
912 |
-
Stroke.cz
|
913 |
-
StudioFACA
|
914 |
-
suchen
|
915 |
-
Sucuri
|
916 |
-
summify
|
917 |
-
Super Monitoring
|
918 |
-
SuperHTTP
|
919 |
-
Surphace Scout
|
920 |
-
Suzuran
|
921 |
-
SwiteScraper
|
922 |
-
Symfony BrowserKit
|
923 |
-
Symfony2 BrowserKit
|
924 |
-
SynHttpClient-Built
|
925 |
-
Sysomos
|
926 |
-
sysscan
|
927 |
-
Szukacz
|
928 |
-
T0PHackTeam
|
929 |
-
tAkeOut
|
930 |
-
Tarantula\/
|
931 |
-
Taringa UGC
|
932 |
-
Teleport
|
933 |
-
Telesoft
|
934 |
-
Telesphoreo
|
935 |
-
Telesphorep
|
936 |
-
Tenon\.io
|
937 |
-
teoma
|
938 |
-
terrainformatica\.com
|
939 |
-
Test Certificate Info
|
940 |
-
Tetrahedron\/[0-9]
|
941 |
-
The Drop Reaper
|
942 |
-
The Expert HTML Source Viewer
|
943 |
-
The\ Intraformant
|
944 |
-
theinternetrules
|
945 |
-
TheNomad
|
946 |
-
theoldreader\.com
|
947 |
-
Thinklab
|
948 |
-
Thumbshots
|
949 |
-
ThumbSniper
|
950 |
-
TinEye
|
951 |
-
Tiny Tiny RSS
|
952 |
-
TLSProbe\/
|
953 |
-
Toata
|
954 |
-
topster
|
955 |
-
touche.com
|
956 |
-
Traackr.com
|
957 |
-
TrapitAgent
|
958 |
-
Trendiction
|
959 |
-
Trendsmap Resolver
|
960 |
-
trendspottr\.com
|
961 |
-
truwoGPS
|
962 |
-
TulipChain
|
963 |
-
Turingos
|
964 |
-
Turnitin
|
965 |
-
tweetedtimes\.com
|
966 |
-
Tweetminster
|
967 |
-
Tweezler\/
|
968 |
-
Twice
|
969 |
-
Twikle
|
970 |
-
Twingly
|
971 |
-
Twisted PageGetter
|
972 |
-
Typhoeus
|
973 |
-
ubermetrics-technologies
|
974 |
-
uclassify
|
975 |
-
uCrawlr\/
|
976 |
-
UdmSearch
|
977 |
-
UniversalFeedParser
|
978 |
-
Unshorten\.It\!\/[0-9]
|
979 |
-
Untiny
|
980 |
-
UnwindFetchor
|
981 |
-
updated
|
982 |
-
updown\.io daemon
|
983 |
-
Upflow
|
984 |
-
Uptimia
|
985 |
-
URL Verifier
|
986 |
-
URLChecker
|
987 |
-
URLitor.com
|
988 |
-
urlresolver
|
989 |
-
Urlstat
|
990 |
-
UrlTrends Ranking Updater
|
991 |
-
URLy\ Warning
|
992 |
-
URLy\.Warning
|
993 |
-
Vacuum
|
994 |
-
Vagabondo
|
995 |
-
VB\ Project
|
996 |
-
vBSEO
|
997 |
-
VCI
|
998 |
-
via ggpht\.com GoogleImageProxy
|
999 |
-
VidibleScraper
|
1000 |
-
Virusdie
|
1001 |
-
visionutils
|
1002 |
-
vkShare
|
1003 |
-
VoidEYE
|
1004 |
-
Voil
|
1005 |
-
voltron
|
1006 |
-
voyager\/
|
1007 |
-
VSAgent\/[0-9]
|
1008 |
-
VSB-TUO\/[0-9]
|
1009 |
-
Vulnbusters Meter
|
1010 |
-
VYU2
|
1011 |
-
w3af\.org
|
1012 |
-
W3C-checklink
|
1013 |
-
W3C-mobileOK
|
1014 |
-
W3C_I18n-Checker
|
1015 |
-
W3C_Unicorn
|
1016 |
-
Wallpapers\/[0-9]+
|
1017 |
-
WallpapersHD
|
1018 |
-
wangling
|
1019 |
-
Wappalyzer
|
1020 |
-
WatchMouse
|
1021 |
-
WbSrch\/
|
1022 |
-
web-capture\.net
|
1023 |
-
Web-Monitoring
|
1024 |
-
Web-sniffer
|
1025 |
-
Web\ Auto
|
1026 |
-
Web\ Collage
|
1027 |
-
Web\ Enhancer
|
1028 |
-
Web\ Fetch
|
1029 |
-
Web\ Fuck
|
1030 |
-
Web\ Pix
|
1031 |
-
Web\ Sauger
|
1032 |
-
Web\ Sucker
|
1033 |
-
Webalta
|
1034 |
-
Webauskunft
|
1035 |
-
WebAuto
|
1036 |
-
WebCapture
|
1037 |
-
WebClient\/
|
1038 |
-
webcollage
|
1039 |
-
WebCookies
|
1040 |
-
WebCopier
|
1041 |
-
WebCorp
|
1042 |
-
WebDoc
|
1043 |
-
WebEnhancer
|
1044 |
-
WebFetch
|
1045 |
-
WebFuck
|
1046 |
-
WebGo\ IS
|
1047 |
-
WebImageCollector
|
1048 |
-
WebImages
|
1049 |
-
WebIndex
|
1050 |
-
webkit2png
|
1051 |
-
WebLeacher
|
1052 |
-
webmastercoffee
|
1053 |
-
webmon
|
1054 |
-
WebPix
|
1055 |
-
WebReaper
|
1056 |
-
WebSauger
|
1057 |
-
webscreenie
|
1058 |
-
Webshag
|
1059 |
-
Webshot
|
1060 |
-
Website Analyzer\/
|
1061 |
-
Website\ Quester
|
1062 |
-
WebsiteExtractor
|
1063 |
-
websitepulse agent
|
1064 |
-
websitepulse[+ ]checker
|
1065 |
-
WebsiteQuester
|
1066 |
-
Websnapr\/
|
1067 |
-
Webster
|
1068 |
-
WebStripper
|
1069 |
-
WebSucker
|
1070 |
-
Webthumb\/[0-9]
|
1071 |
-
WebThumbnail
|
1072 |
-
WebWhacker
|
1073 |
-
WebZIP
|
1074 |
-
WeCrawlForThePeace
|
1075 |
-
WeLikeLinks
|
1076 |
-
WEPA
|
1077 |
-
WeSEE
|
1078 |
-
wf84
|
1079 |
-
wget
|
1080 |
-
WhatsApp
|
1081 |
-
WhatsMyIP
|
1082 |
-
WhatWeb
|
1083 |
-
WhereGoes\?
|
1084 |
-
Whibse
|
1085 |
-
WhoRunsCoinHive
|
1086 |
-
Whynder Magnet
|
1087 |
-
Windows-RSS-Platform
|
1088 |
-
WinHttpRequest
|
1089 |
-
wkhtmlto
|
1090 |
-
wmtips
|
1091 |
-
Woko
|
1092 |
-
Word\/
|
1093 |
-
WordPress\/
|
1094 |
-
wotbox
|
1095 |
-
WP Engine Install Performance API
|
1096 |
-
wpif
|
1097 |
-
wprecon\.com survey
|
1098 |
-
WPScan
|
1099 |
-
wscheck
|
1100 |
-
Wtrace
|
1101 |
-
WWW-Collector-E
|
1102 |
-
WWW-Mechanize
|
1103 |
-
WWW::Mechanize
|
1104 |
-
www\.monitor\.us
|
1105 |
-
WWWOFFLE
|
1106 |
-
x09Mozilla
|
1107 |
-
x22Mozilla
|
1108 |
-
XaxisSemanticsClassifier
|
1109 |
-
Xenu Link Sleuth
|
1110 |
-
XING-contenttabreceiver\/[0-9]
|
1111 |
-
XmlSitemapGenerator
|
1112 |
-
xpymep([0-9]?)\.exe
|
1113 |
-
Y!J-(ASR|BSC)
|
1114 |
-
Yaanb
|
1115 |
-
yacy
|
1116 |
-
Yahoo Ad monitoring
|
1117 |
-
Yahoo Link Preview
|
1118 |
-
YahooCacheSystem
|
1119 |
-
YahooYSMcm
|
1120 |
-
YandeG
|
1121 |
-
Yandex(?!Search)
|
1122 |
-
yanga
|
1123 |
-
yeti
|
1124 |
-
Yo-yo
|
1125 |
-
Yoleo Consumer
|
1126 |
-
yoogliFetchAgent
|
1127 |
-
YottaaMonitor
|
1128 |
-
Your-Website-Sucks\/[0-9]
|
1129 |
-
yourls\.org
|
1130 |
-
Zade
|
1131 |
-
Zao
|
1132 |
-
Zauba
|
1133 |
-
Zemanta Aggregator
|
1134 |
-
Zend\\Http\\Client
|
1135 |
-
Zend_Http_Client
|
1136 |
-
Zermelo
|
1137 |
-
Zeus
|
1138 |
-
zgrab
|
1139 |
-
ZnajdzFoto
|
1140 |
-
ZyBorg
|
1141 |
[a-z0-9\-_]*(bot|crawler|archiver|transcoder|spider|uptime|validator|fetcher)
|
1 |
+
.*Java.*outbrain
|
2 |
+
YLT
|
3 |
+
008\/
|
4 |
+
192\.comAgent
|
5 |
+
2ip\.ru
|
6 |
+
404checker
|
7 |
+
404enemy
|
8 |
+
80legs
|
9 |
+
^b0t$
|
10 |
+
^bluefish
|
11 |
+
^Calypso v\/
|
12 |
+
^COMODO DCV
|
13 |
+
^DangDang
|
14 |
+
^DavClnt
|
15 |
+
^FDM
|
16 |
+
^git\/
|
17 |
+
^Goose\/
|
18 |
+
^Grabber
|
19 |
+
^HTTPClient\/
|
20 |
+
^Java\/
|
21 |
+
^Jeode\/
|
22 |
+
^Jetty\/
|
23 |
+
^Mget
|
24 |
+
^Microsoft URL Control
|
25 |
+
^NG\/[0-9\.]
|
26 |
+
^NING\/
|
27 |
+
^PHP\/[0-9]
|
28 |
+
^RMA\/
|
29 |
+
^Ruby|Ruby\/[0-9]
|
30 |
+
^scrutiny\/
|
31 |
+
^VSE\/[0-9]
|
32 |
+
^WordPress\.com
|
33 |
+
^XRL\/[0-9]
|
34 |
+
^ZmEu
|
35 |
+
a3logics\.in
|
36 |
+
A6-Indexer
|
37 |
+
a\.pr-cy\.ru
|
38 |
+
Abonti
|
39 |
+
Aboundex
|
40 |
+
aboutthedomain
|
41 |
+
Accoona-AI-Agent
|
42 |
+
acoon
|
43 |
+
acrylicapps\.com\/pulp
|
44 |
+
Acunetix
|
45 |
+
adbeat
|
46 |
+
AddThis
|
47 |
+
ADmantX
|
48 |
+
adressendeutschland
|
49 |
+
adscanner\/
|
50 |
+
Advanced Email Extractor v
|
51 |
+
agentslug
|
52 |
+
AHC
|
53 |
+
aihit
|
54 |
+
aiohttp\/
|
55 |
+
Airmail
|
56 |
+
akka-http\/
|
57 |
+
akula\/
|
58 |
+
alertra
|
59 |
+
alexa site audit
|
60 |
+
Alibaba\.Security\.Heimdall
|
61 |
+
Alligator
|
62 |
+
allloadin\.com
|
63 |
+
AllSubmitter
|
64 |
+
alyze\.info
|
65 |
+
amagit
|
66 |
+
Anarchie
|
67 |
+
AndroidDownloadManager
|
68 |
+
Anemone
|
69 |
+
AngleSharp\/
|
70 |
+
Ant\.com
|
71 |
+
Anturis Agent
|
72 |
+
AnyEvent-HTTP\/
|
73 |
+
Apache Droid
|
74 |
+
Apache-HttpAsyncClient\/
|
75 |
+
Apache-HttpClient\/
|
76 |
+
ApacheBench\/
|
77 |
+
Apexoo
|
78 |
+
APIs-Google
|
79 |
+
AportWorm\/[0-9]
|
80 |
+
AppBeat\/[0-9]
|
81 |
+
AppEngine-Google
|
82 |
+
Arachmo
|
83 |
+
arachnode
|
84 |
+
Arachnophilia
|
85 |
+
aria2
|
86 |
+
asafaweb.com
|
87 |
+
AskQuickly
|
88 |
+
ASPSeek
|
89 |
+
Asterias
|
90 |
+
Astute
|
91 |
+
asynchttp
|
92 |
+
Attach
|
93 |
+
autocite
|
94 |
+
Autonomy
|
95 |
+
axios\/
|
96 |
+
B-l-i-t-z-B-O-T
|
97 |
+
Backlink-Ceck
|
98 |
+
backlink-check
|
99 |
+
BackStreet
|
100 |
+
BackWeb
|
101 |
+
Bad-Neighborhood
|
102 |
+
Badass
|
103 |
+
baidu\.com
|
104 |
+
Bandit
|
105 |
+
BatchFTP
|
106 |
+
Battleztar\ Bazinga
|
107 |
+
baypup\/[0-9]
|
108 |
+
baypup\/colbert
|
109 |
+
BazQux
|
110 |
+
BBBike
|
111 |
+
BCKLINKS
|
112 |
+
BDFetch
|
113 |
+
BegunAdvertising\/
|
114 |
+
BigBozz
|
115 |
+
Bigfoot
|
116 |
+
biglotron
|
117 |
+
BingLocalSearch
|
118 |
+
BingPreview
|
119 |
+
binlar
|
120 |
+
biNu image cacher
|
121 |
+
Bitacle
|
122 |
+
biz_Directory
|
123 |
+
Black\ Hole
|
124 |
+
Blackboard Safeassign
|
125 |
+
BlackWidow
|
126 |
+
Bloglovin
|
127 |
+
BlogPulseLive
|
128 |
+
BlogSearch
|
129 |
+
Blogtrottr
|
130 |
+
BlowFish
|
131 |
+
Boardreader
|
132 |
+
boitho\.com-dc
|
133 |
+
Bolt
|
134 |
+
BPImageWalker
|
135 |
+
Braintree-Webhooks
|
136 |
+
Branch Metrics API
|
137 |
+
Branch-Passthrough
|
138 |
+
Brandprotect
|
139 |
+
Brandwatch
|
140 |
+
Brodie\/
|
141 |
+
Browsershots
|
142 |
+
BUbiNG
|
143 |
+
Buck\/
|
144 |
+
Buddy
|
145 |
+
BuiltWith
|
146 |
+
Bullseye
|
147 |
+
BunnySlippers
|
148 |
+
Burf Search
|
149 |
+
Butterfly\/
|
150 |
+
BuzzSumo
|
151 |
+
CAAM\/[0-9]
|
152 |
+
CakePHP
|
153 |
+
Calculon
|
154 |
+
CapsuleChecker
|
155 |
+
CaretNail
|
156 |
+
catexplorador
|
157 |
+
cb crawl
|
158 |
+
CC Metadata Scaper
|
159 |
+
Cegbfeieh
|
160 |
+
Cerberian Drtrs
|
161 |
+
CERT\.at-Statistics-Survey
|
162 |
+
cg-eye
|
163 |
+
changedetection
|
164 |
+
ChangesMeter\/
|
165 |
+
Charlotte
|
166 |
+
CheckHost
|
167 |
+
checkprivacy
|
168 |
+
CherryPicker
|
169 |
+
ChinaClaw
|
170 |
+
Chirp\/[0-9]
|
171 |
+
chkme\.com
|
172 |
+
Chlooe
|
173 |
+
CirrusExplorer\/
|
174 |
+
CISPA Vulnerability Notification
|
175 |
+
Citoid
|
176 |
+
CJNetworkQuality
|
177 |
+
Clarsentia
|
178 |
+
clips\.ua\.ac\.be
|
179 |
+
Cloud\ mapping
|
180 |
+
CloudEndure
|
181 |
+
CloudFlare-AlwaysOnline
|
182 |
+
Cloudinary\/[0-9]
|
183 |
+
cmcm\.com
|
184 |
+
coccoc
|
185 |
+
cognitiveseo
|
186 |
+
colly -
|
187 |
+
CommaFeed
|
188 |
+
Commons-HttpClient
|
189 |
+
Comodo SSL Checker
|
190 |
+
contactbigdatafr
|
191 |
+
convera
|
192 |
+
copyright sheriff
|
193 |
+
CopyRightCheck
|
194 |
+
Copyscape
|
195 |
+
Cosmos4j\.feedback
|
196 |
+
Covario-IDS
|
197 |
+
CrawlForMe\/[0-9]
|
198 |
+
Crescent
|
199 |
+
cron-job\.org
|
200 |
+
Crowsnest
|
201 |
+
CSHttp
|
202 |
+
curb
|
203 |
+
Curious George
|
204 |
+
curl
|
205 |
+
Custo
|
206 |
+
cuwhois\/[0-9]
|
207 |
+
cybo\.com
|
208 |
+
DareBoost
|
209 |
+
DatabaseDriverMysqli
|
210 |
+
DataCha0s
|
211 |
+
DataparkSearch
|
212 |
+
dataprovider
|
213 |
+
Daum(oa)?[ \/][0-9]
|
214 |
+
Demon
|
215 |
+
DeuSu
|
216 |
+
developers\.google\.com\/\+\/web\/snippet\/
|
217 |
+
Devil
|
218 |
+
Digg
|
219 |
+
Digincore
|
220 |
+
DigitalPebble
|
221 |
+
Dirbuster
|
222 |
+
Dispatch\/
|
223 |
+
DittoSpyder
|
224 |
+
dlvr
|
225 |
+
DMBrowser
|
226 |
+
DNS-Tools Header-Analyzer
|
227 |
+
DNSPod-reporting
|
228 |
+
docoloc
|
229 |
+
Dolphin http client\/
|
230 |
+
DomainAppender
|
231 |
+
Donuts Content Explorer
|
232 |
+
dotMailer content retrieval
|
233 |
+
dotSemantic
|
234 |
+
downforeveryoneorjustme
|
235 |
+
Download\ Wonder
|
236 |
+
downnotifier\.com
|
237 |
+
DowntimeDetector
|
238 |
+
Dragonfly File Reader
|
239 |
+
Drip
|
240 |
+
drupact
|
241 |
+
Drupal \(\+http:\/\/drupal\.org\/\)
|
242 |
+
DTS\ Agent
|
243 |
+
dubaiindex
|
244 |
+
EARTHCOM
|
245 |
+
Easy-Thumb
|
246 |
+
EasyDL
|
247 |
+
Ebingbong
|
248 |
+
ec2linkfinder
|
249 |
+
eCairn-Grabber
|
250 |
+
eCatch
|
251 |
+
ECCP
|
252 |
+
echocrawl
|
253 |
+
eContext\/
|
254 |
+
Ecxi
|
255 |
+
EirGrabber
|
256 |
+
ElectricMonk
|
257 |
+
elefent
|
258 |
+
EMail Exractor
|
259 |
+
Email%20Extractor%20Lite
|
260 |
+
EMail\ Wolf
|
261 |
+
EmailWolf
|
262 |
+
Embed PHP Library
|
263 |
+
Embedly
|
264 |
+
europarchive\.org
|
265 |
+
evc-batch
|
266 |
+
EventMachine HttpClient
|
267 |
+
Evidon
|
268 |
+
Evrinid
|
269 |
+
ExactSearch
|
270 |
+
ExaleadCloudview
|
271 |
+
Excel\/
|
272 |
+
Exif Viewer
|
273 |
+
ExperianCrawlUK
|
274 |
+
Exploratodo
|
275 |
+
Express WebPictures
|
276 |
+
ExtractorPro
|
277 |
+
Extreme\ Picture\ Finder
|
278 |
+
EyeNetIE
|
279 |
+
ezooms
|
280 |
+
facebookexternalhit
|
281 |
+
facebookplatform
|
282 |
+
fairshare
|
283 |
+
Faraday v
|
284 |
+
fasthttp
|
285 |
+
Faveeo
|
286 |
+
Favicon downloader
|
287 |
+
FavOrg
|
288 |
+
Feed Wrangler
|
289 |
+
Feedbin
|
290 |
+
FeedBooster
|
291 |
+
FeedBucket
|
292 |
+
FeedBunch\/[0-9]
|
293 |
+
FeedBurner
|
294 |
+
FeedChecker
|
295 |
+
Feedly
|
296 |
+
Feedspot
|
297 |
+
Feedwind\/[0-9]
|
298 |
+
feeltiptop
|
299 |
+
Fetch API
|
300 |
+
Fetch\/[0-9]
|
301 |
+
Fever\/[0-9]
|
302 |
+
FHscan
|
303 |
+
Fimap
|
304 |
+
findlink
|
305 |
+
findthatfile
|
306 |
+
FlashGet
|
307 |
+
FlipboardBrowserProxy
|
308 |
+
FlipboardProxy
|
309 |
+
FlipboardRSS
|
310 |
+
fluffy
|
311 |
+
Flunky
|
312 |
+
flynxapp
|
313 |
+
forensiq
|
314 |
+
FoundSeoTool\/[0-9]
|
315 |
+
free thumbnails
|
316 |
+
Freeuploader
|
317 |
+
FreeWebMonitoring SiteChecker
|
318 |
+
Funnelback
|
319 |
+
G-i-g-a-b-o-t
|
320 |
+
g00g1e\.net
|
321 |
+
GAChecker
|
322 |
+
ganarvisitas\/[0-9]
|
323 |
+
geek-tools
|
324 |
+
Genderanalyzer
|
325 |
+
Genieo
|
326 |
+
GentleSource
|
327 |
+
Getintent
|
328 |
+
GetLinkInfo
|
329 |
+
getprismatic\.com
|
330 |
+
GetRight
|
331 |
+
GetURLInfo\/[0-9]
|
332 |
+
GetWeb
|
333 |
+
Ghost Inspector
|
334 |
+
GigablastOpenSource
|
335 |
+
GIS-LABS
|
336 |
+
github-camo
|
337 |
+
github\.com\/
|
338 |
+
Go [\d\.]* package http
|
339 |
+
Go http package
|
340 |
+
Go!Zilla
|
341 |
+
Go-Ahead-Got-It
|
342 |
+
Go-http-client
|
343 |
+
gobyus
|
344 |
+
gofetch
|
345 |
+
GomezAgent
|
346 |
+
gooblog
|
347 |
+
Goodzer\/[0-9]
|
348 |
+
Google favicon
|
349 |
+
Google Keyword Suggestion
|
350 |
+
Google Keyword Tool
|
351 |
+
Google Page Speed Insights
|
352 |
+
Google PP Default
|
353 |
+
Google Search Console
|
354 |
+
Google Web Preview
|
355 |
+
Google-Adwords
|
356 |
+
Google-Apps-Script
|
357 |
+
Google-Calendar-Importer
|
358 |
+
Google-HotelAdsVerifier
|
359 |
+
Google-HTTP-Java-Client
|
360 |
+
Google-Publisher-Plugin
|
361 |
+
Google-SearchByImage
|
362 |
+
Google-Site-Verification
|
363 |
+
Google-Structured-Data-Testing-Tool
|
364 |
+
Google-Youtube-Links
|
365 |
+
google_partner_monitoring
|
366 |
+
GoogleDocs
|
367 |
+
GoogleHC\/
|
368 |
+
GoogleProducer
|
369 |
+
Gookey
|
370 |
+
GoScraper
|
371 |
+
GoSpotCheck
|
372 |
+
GoSquared-Status-Checker
|
373 |
+
gosquared-thumbnailer
|
374 |
+
Gotit
|
375 |
+
GoZilla
|
376 |
+
grabify
|
377 |
+
GrabNet
|
378 |
+
Grafula
|
379 |
+
Grammarly
|
380 |
+
GrapeFX
|
381 |
+
grokkit
|
382 |
+
grouphigh
|
383 |
+
grub-client
|
384 |
+
gSOAP\/
|
385 |
+
GT::WWW
|
386 |
+
GTmetrix
|
387 |
+
GuzzleHttp
|
388 |
+
gvfs\/
|
389 |
+
HAA(A)?RTLAND http client
|
390 |
+
Haansoft
|
391 |
+
hackney\/
|
392 |
+
Hatena
|
393 |
+
Havij
|
394 |
+
hawkReader
|
395 |
+
HEADMasterSEO
|
396 |
+
HeartRails_Capture
|
397 |
+
help@dataminr\.com
|
398 |
+
heritrix
|
399 |
+
historious\/
|
400 |
+
hledejLevne\.cz\/[0-9]
|
401 |
+
Hloader
|
402 |
+
HMView
|
403 |
+
Holmes
|
404 |
+
HonesoSearchEngine\/
|
405 |
+
HootSuite Image proxy
|
406 |
+
Hootsuite-WebFeed\/[0-9]
|
407 |
+
hosterstats
|
408 |
+
HostTracker
|
409 |
+
ht:\/\/check
|
410 |
+
htdig
|
411 |
+
HTMLparser
|
412 |
+
http-get
|
413 |
+
HTTP-Header-Abfrage
|
414 |
+
http-kit
|
415 |
+
http-request\/
|
416 |
+
HTTP-Tiny
|
417 |
+
HTTP::Lite
|
418 |
+
http\.rb\/
|
419 |
+
HTTP_Compression_Test
|
420 |
+
http_request2
|
421 |
+
http_requester
|
422 |
+
HttpComponents
|
423 |
+
httphr
|
424 |
+
HTTPMon
|
425 |
+
httpscheck
|
426 |
+
httpssites_power
|
427 |
+
httpunit
|
428 |
+
HttpUrlConnection
|
429 |
+
httrack
|
430 |
+
huaweisymantec
|
431 |
+
HubPages.*crawlingpolicy
|
432 |
+
HubSpot
|
433 |
+
Humanlinks
|
434 |
+
HyperZbozi.cz Feeder
|
435 |
+
i2kconnect\/
|
436 |
+
Iblog
|
437 |
+
ichiro
|
438 |
+
Id-search
|
439 |
+
IdeelaborPlagiaat
|
440 |
+
IDG Twitter Links Resolver
|
441 |
+
IDwhois\/[0-9]
|
442 |
+
Iframely
|
443 |
+
igdeSpyder
|
444 |
+
IlTrovatore
|
445 |
+
Image\ Fetch
|
446 |
+
Image\ Sucker
|
447 |
+
ImageEngine\/
|
448 |
+
Imagga
|
449 |
+
imgsizer
|
450 |
+
InAGist
|
451 |
+
inbound\.li parser
|
452 |
+
InDesign%20CC
|
453 |
+
Indy\ Library
|
454 |
+
infegy
|
455 |
+
infohelfer
|
456 |
+
InfoTekies
|
457 |
+
InfoWizards Reciprocal Link System PRO
|
458 |
+
inpwrd\.com
|
459 |
+
instabid
|
460 |
+
Instapaper
|
461 |
+
Integrity
|
462 |
+
integromedb
|
463 |
+
Intelliseek
|
464 |
+
InterGET
|
465 |
+
Internet\ Ninja
|
466 |
+
internet_archive
|
467 |
+
InternetSeer
|
468 |
+
internetVista monitor
|
469 |
+
intraVnews
|
470 |
+
IODC
|
471 |
+
IOI
|
472 |
+
iplabel
|
473 |
+
ips-agent
|
474 |
+
IPS\/[0-9]
|
475 |
+
IPWorks HTTP\/S Component
|
476 |
+
iqdb\/
|
477 |
+
Iria
|
478 |
+
Irokez
|
479 |
+
isitup\.org
|
480 |
+
iskanie
|
481 |
+
iZSearch
|
482 |
+
janforman
|
483 |
+
Jaunt\/
|
484 |
+
Jbrofuzz
|
485 |
+
Jersey\/
|
486 |
+
JetCar
|
487 |
+
Jigsaw
|
488 |
+
Jobboerse
|
489 |
+
JobFeed discovery
|
490 |
+
Jobg8 URL Monitor
|
491 |
+
jobo
|
492 |
+
Jobrapido
|
493 |
+
Jobsearch1\.5
|
494 |
+
JoinVision Generic
|
495 |
+
Joomla
|
496 |
+
Jorgee
|
497 |
+
JS-Kit
|
498 |
+
JustView
|
499 |
+
Kaspersky Lab CFR link resolver
|
500 |
+
KeepRight OpenStreetMap Checker
|
501 |
+
Kelny\/
|
502 |
+
Kerrigan\/
|
503 |
+
KeyCDN
|
504 |
+
Keyword Extractor
|
505 |
+
Keyword\ Density
|
506 |
+
Keywords Research
|
507 |
+
KickFire
|
508 |
+
KimonoLabs\/
|
509 |
+
Kml-Google
|
510 |
+
knows\.is
|
511 |
+
KOCMOHABT
|
512 |
+
kouio
|
513 |
+
kulturarw3
|
514 |
+
KumKie
|
515 |
+
L\.webis
|
516 |
+
Larbin
|
517 |
+
Lavf\/
|
518 |
+
LayeredExtractor
|
519 |
+
LeechFTP
|
520 |
+
LeechGet
|
521 |
+
letsencrypt
|
522 |
+
Lftp
|
523 |
+
LibVLC
|
524 |
+
LibWeb
|
525 |
+
Libwhisker
|
526 |
+
libwww
|
527 |
+
Licorne Image Snapshot
|
528 |
+
Liferea\/
|
529 |
+
Lightspeedsystems
|
530 |
+
Likse
|
531 |
+
link checker
|
532 |
+
Link Valet
|
533 |
+
link_thumbnailer
|
534 |
+
LinkAlarm\/
|
535 |
+
linkCheck
|
536 |
+
linkdex
|
537 |
+
LinkExaminer
|
538 |
+
linkfluence
|
539 |
+
linkpeek
|
540 |
+
LinkPreviewGenerator
|
541 |
+
LinkScan
|
542 |
+
LinksManager
|
543 |
+
LinkTiger
|
544 |
+
LinkWalker
|
545 |
+
Lipperhey
|
546 |
+
Litemage_walker
|
547 |
+
livedoor ScreenShot
|
548 |
+
LoadImpactRload
|
549 |
+
LongURL API
|
550 |
+
looksystems\.net
|
551 |
+
ltx71
|
552 |
+
lua-resty-http
|
553 |
+
lwp-request
|
554 |
+
lwp-trivial
|
555 |
+
LWP::Simple
|
556 |
+
lycos
|
557 |
+
LYT\.SR
|
558 |
+
mabontland
|
559 |
+
Mag-Net
|
560 |
+
MagpieRSS
|
561 |
+
Mail.Ru
|
562 |
+
MailChimp
|
563 |
+
Majestic12
|
564 |
+
makecontact\/
|
565 |
+
Mandrill
|
566 |
+
MapperCmd
|
567 |
+
marketinggrader
|
568 |
+
MarkMonitor
|
569 |
+
MarkWatch
|
570 |
+
Mass\ Downloader
|
571 |
+
masscan\/[0-9]
|
572 |
+
Mata\ Hari
|
573 |
+
Mediapartners-Google
|
574 |
+
mediawords
|
575 |
+
MegaIndex\.ru
|
576 |
+
Melvil Rawi\/
|
577 |
+
MergeFlow-PageReader
|
578 |
+
Metaspinner
|
579 |
+
MetaURI
|
580 |
+
MFC_Tear_Sample
|
581 |
+
Microsearch
|
582 |
+
Microsoft Office
|
583 |
+
Microsoft Windows Network Diagnostics
|
584 |
+
Microsoft-WebDAV-MiniRedir
|
585 |
+
Microsoft\ Data\ Access
|
586 |
+
MIDown\ tool
|
587 |
+
MIIxpc
|
588 |
+
Mindjet
|
589 |
+
Miniature.io\/
|
590 |
+
Miniflux
|
591 |
+
Mister\ PiX
|
592 |
+
mixdata dot com
|
593 |
+
mixed-content-scan
|
594 |
+
mixnode
|
595 |
+
Mnogosearch
|
596 |
+
mogimogi
|
597 |
+
Mojeek
|
598 |
+
Mojolicious \(Perl\)
|
599 |
+
monitis
|
600 |
+
Monitority\/[0-9]
|
601 |
+
montastic
|
602 |
+
MonTools
|
603 |
+
Moreover
|
604 |
+
Morfeus\ Fucking\ Scanner
|
605 |
+
Morning Paper
|
606 |
+
MovableType
|
607 |
+
mowser
|
608 |
+
Mrcgiguy
|
609 |
+
MS\ Web\ Services\ Client\ Protocol
|
610 |
+
MSFrontPage
|
611 |
+
mShots
|
612 |
+
MuckRack\/
|
613 |
+
muhstik-scan
|
614 |
+
MVAClient
|
615 |
+
MxToolbox\/
|
616 |
+
nagios
|
617 |
+
Najdi\.si\/
|
618 |
+
Name\ Intelligence
|
619 |
+
Nameprotect
|
620 |
+
Navroad
|
621 |
+
NearSite
|
622 |
+
Needle
|
623 |
+
Nessus
|
624 |
+
Net\ Vampire
|
625 |
+
NetAnts
|
626 |
+
NETCRAFT
|
627 |
+
NetLyzer
|
628 |
+
NetMechanic
|
629 |
+
Netpursual
|
630 |
+
netresearch
|
631 |
+
NetShelter ContentScan
|
632 |
+
Netsparker
|
633 |
+
NetTrack
|
634 |
+
Netvibes
|
635 |
+
NetZIP
|
636 |
+
Neustar WPM
|
637 |
+
NeutrinoAPI
|
638 |
+
NewRelicPinger\/1.0 \(\d+\)
|
639 |
+
NewsBlur .*Finder
|
640 |
+
NewsGator
|
641 |
+
newsme
|
642 |
+
newspaper\/
|
643 |
+
Nexgate Ruby Client
|
644 |
+
NG-Search
|
645 |
+
Nibbler
|
646 |
+
NICErsPRO
|
647 |
+
Nikto
|
648 |
+
nineconnections\.com
|
649 |
+
NLNZ_IAHarvester
|
650 |
+
Nmap Scripting Engine
|
651 |
+
node-superagent
|
652 |
+
node-urllib\/
|
653 |
+
node\.io
|
654 |
+
nominet\.org\.uk
|
655 |
+
Norton-Safeweb
|
656 |
+
Notifixious
|
657 |
+
notifyninja
|
658 |
+
nuhk
|
659 |
+
nutch
|
660 |
+
Nuzzel
|
661 |
+
nWormFeedFinder
|
662 |
+
Nymesis
|
663 |
+
NYU
|
664 |
+
Ocelli\/[0-9]
|
665 |
+
Octopus
|
666 |
+
oegp
|
667 |
+
Offline Explorer
|
668 |
+
Offline\ Navigator
|
669 |
+
okhttp
|
670 |
+
Omea Reader
|
671 |
+
omgili
|
672 |
+
OMSC
|
673 |
+
Online Domain Tools
|
674 |
+
OpenCalaisSemanticProxy
|
675 |
+
Openfind
|
676 |
+
OpenLinkProfiler
|
677 |
+
Openstat\/
|
678 |
+
OpenVAS
|
679 |
+
Optimizer
|
680 |
+
Orbiter
|
681 |
+
OrgProbe\/[0-9]
|
682 |
+
orion-semantics
|
683 |
+
ow\.ly
|
684 |
+
Owler
|
685 |
+
ownCloud News
|
686 |
+
OxfordCloudService\/[0-9]
|
687 |
+
Page Analyzer
|
688 |
+
Page Valet
|
689 |
+
page2rss
|
690 |
+
page\ scorer
|
691 |
+
page_verifier
|
692 |
+
PageAnalyzer
|
693 |
+
PageGrabber
|
694 |
+
PagePeeker
|
695 |
+
PageScorer
|
696 |
+
Pagespeed\/[0-9]
|
697 |
+
Panopta
|
698 |
+
panscient
|
699 |
+
Papa\ Foto
|
700 |
+
parsijoo
|
701 |
+
Pavuk
|
702 |
+
PayPal IPN
|
703 |
+
pcBrowser
|
704 |
+
Pcore-HTTP
|
705 |
+
PEAR HTTPRequest
|
706 |
+
Pearltrees
|
707 |
+
PECL::HTTP
|
708 |
+
peerindex
|
709 |
+
Peew
|
710 |
+
PeoplePal
|
711 |
+
Perlu -
|
712 |
+
PhantomJS Screenshoter
|
713 |
+
PhantomJS\/
|
714 |
+
Photon\/
|
715 |
+
phpcrawl
|
716 |
+
phpservermon
|
717 |
+
Pi-Monster
|
718 |
+
Picscout
|
719 |
+
Picsearch
|
720 |
+
PictureFinder
|
721 |
+
Pimonster
|
722 |
+
ping\.blo\.gs\/
|
723 |
+
Pingability
|
724 |
+
Pingdom
|
725 |
+
Pingoscope
|
726 |
+
PingSpot
|
727 |
+
pinterest\.com
|
728 |
+
Pixray
|
729 |
+
Pizilla
|
730 |
+
PleaseCrawl
|
731 |
+
Ploetz \+ Zeller
|
732 |
+
Plukkie
|
733 |
+
plumanalytics
|
734 |
+
PocketParser
|
735 |
+
Pockey
|
736 |
+
POE-Component-Client-HTTP
|
737 |
+
Pompos
|
738 |
+
Porkbun
|
739 |
+
Port Monitor
|
740 |
+
postano
|
741 |
+
PostmanRuntime\/
|
742 |
+
PostPost
|
743 |
+
postrank
|
744 |
+
PowerPoint\/
|
745 |
+
Priceonomics Analysis Engine
|
746 |
+
PrintFriendly\.com
|
747 |
+
PritTorrent\/[0-9]
|
748 |
+
Prlog
|
749 |
+
probethenet
|
750 |
+
Project 25499
|
751 |
+
Promotion_Tools_www.searchenginepromotionhelp.com
|
752 |
+
prospectb2b
|
753 |
+
Protopage
|
754 |
+
ProWebWalker
|
755 |
+
proximic
|
756 |
+
PRTG Network Monitor
|
757 |
+
pshtt, https scanning
|
758 |
+
PTST
|
759 |
+
PTST\/[0-9]+
|
760 |
+
Pulsepoint XT3 web scraper
|
761 |
+
Pump
|
762 |
+
Python-httplib2
|
763 |
+
python-requests
|
764 |
+
Python-urllib
|
765 |
+
Qirina Hurdler
|
766 |
+
QQDownload
|
767 |
+
QrafterPro
|
768 |
+
Qseero
|
769 |
+
Qualidator.com SiteAnalyzer
|
770 |
+
QueryN\ Metasearch
|
771 |
+
Quora Link Preview
|
772 |
+
Qwantify
|
773 |
+
Radian6
|
774 |
+
RankActive
|
775 |
+
RankFlex
|
776 |
+
RankSonicSiteAuditor
|
777 |
+
Readability
|
778 |
+
RealDownload
|
779 |
+
RealPlayer%20Downloader
|
780 |
+
RebelMouse
|
781 |
+
Recorder
|
782 |
+
RecurPost\/
|
783 |
+
redback\/
|
784 |
+
Redirect Checker Tool
|
785 |
+
ReederForMac
|
786 |
+
ReGet
|
787 |
+
RepoMonkey
|
788 |
+
request\.js
|
789 |
+
ResponseCodeTest\/[0-9]
|
790 |
+
RestSharp
|
791 |
+
Riddler
|
792 |
+
Rival IQ
|
793 |
+
Robosourcer
|
794 |
+
Robozilla\/[0-9]
|
795 |
+
ROI Hunter
|
796 |
+
RPT-HTTPClient
|
797 |
+
RSSOwl
|
798 |
+
safe-agent-scanner
|
799 |
+
SalesIntelligent
|
800 |
+
Saleslift
|
801 |
+
SauceNAO
|
802 |
+
SBIder
|
803 |
+
scalaj-http
|
804 |
+
scan\.lol
|
805 |
+
ScanAlert
|
806 |
+
Scoop
|
807 |
+
scooter
|
808 |
+
ScoutJet
|
809 |
+
ScoutURLMonitor
|
810 |
+
Scrapy
|
811 |
+
Screaming
|
812 |
+
ScreenShotService\/[0-9]
|
813 |
+
Scrubby
|
814 |
+
Search37\/
|
815 |
+
search\.thunderstone
|
816 |
+
Searchestate
|
817 |
+
SearchSight
|
818 |
+
Seeker
|
819 |
+
semanticdiscovery
|
820 |
+
semanticjuice
|
821 |
+
Semiocast HTTP client
|
822 |
+
Semrush
|
823 |
+
sentry\/
|
824 |
+
SEO Browser
|
825 |
+
Seo Servis
|
826 |
+
seo-nastroj.cz
|
827 |
+
Seobility
|
828 |
+
SEOCentro
|
829 |
+
SeoCheck
|
830 |
+
SEOkicks
|
831 |
+
Seomoz
|
832 |
+
SEOprofiler
|
833 |
+
SeopultContentAnalyzer
|
834 |
+
seoscanners
|
835 |
+
SEOstats
|
836 |
+
Server Density Service Monitoring
|
837 |
+
servernfo\.com
|
838 |
+
SetCronJob\/
|
839 |
+
sexsearcher
|
840 |
+
Seznam
|
841 |
+
Shelob
|
842 |
+
Shodan
|
843 |
+
Shoppimon Analyzer
|
844 |
+
ShoppimonAgent\/[0-9]
|
845 |
+
ShopWiki
|
846 |
+
ShortLinkTranslate
|
847 |
+
shrinktheweb
|
848 |
+
Sideqik
|
849 |
+
SilverReader
|
850 |
+
SimplePie
|
851 |
+
SimplyFast
|
852 |
+
Siphon
|
853 |
+
SISTRIX
|
854 |
+
Site-Shot\/
|
855 |
+
Site24x7
|
856 |
+
Site\ Sucker
|
857 |
+
SiteBar
|
858 |
+
Sitebeam
|
859 |
+
Sitebulb\/
|
860 |
+
SiteCondor
|
861 |
+
SiteExplorer
|
862 |
+
SiteGuardian
|
863 |
+
Siteimprove
|
864 |
+
SiteIndexed
|
865 |
+
Sitemap(s)? Generator
|
866 |
+
SiteMonitor
|
867 |
+
Siteshooter B0t
|
868 |
+
SiteSnagger
|
869 |
+
SiteSucker
|
870 |
+
SiteTruth
|
871 |
+
Sitevigil
|
872 |
+
sitexy\.com
|
873 |
+
SkypeUriPreview
|
874 |
+
Slack\/
|
875 |
+
slider\.com
|
876 |
+
slurp
|
877 |
+
SlySearch
|
878 |
+
SmartDownload
|
879 |
+
SMRF URL Expander
|
880 |
+
SMUrlExpander
|
881 |
+
Snake
|
882 |
+
Snappy
|
883 |
+
SniffRSS
|
884 |
+
sniptracker
|
885 |
+
Snoopy
|
886 |
+
SnowHaze Search
|
887 |
+
sogou web
|
888 |
+
SortSite
|
889 |
+
Sottopop
|
890 |
+
sovereign\.ai
|
891 |
+
SpaceBison
|
892 |
+
Spammen
|
893 |
+
Spanner
|
894 |
+
spaziodati
|
895 |
+
Specificfeeds
|
896 |
+
speedy
|
897 |
+
SPEng
|
898 |
+
Spinn3r
|
899 |
+
spray-can
|
900 |
+
Sprinklr
|
901 |
+
spyonweb
|
902 |
+
sqlmap
|
903 |
+
Sqlworm
|
904 |
+
Sqworm
|
905 |
+
SSL Labs
|
906 |
+
ssl-tools
|
907 |
+
StackRambler
|
908 |
+
Statastico\/
|
909 |
+
StatusCake
|
910 |
+
Steeler
|
911 |
+
Stratagems Kumo
|
912 |
+
Stroke.cz
|
913 |
+
StudioFACA
|
914 |
+
suchen
|
915 |
+
Sucuri
|
916 |
+
summify
|
917 |
+
Super Monitoring
|
918 |
+
SuperHTTP
|
919 |
+
Surphace Scout
|
920 |
+
Suzuran
|
921 |
+
SwiteScraper
|
922 |
+
Symfony BrowserKit
|
923 |
+
Symfony2 BrowserKit
|
924 |
+
SynHttpClient-Built
|
925 |
+
Sysomos
|
926 |
+
sysscan
|
927 |
+
Szukacz
|
928 |
+
T0PHackTeam
|
929 |
+
tAkeOut
|
930 |
+
Tarantula\/
|
931 |
+
Taringa UGC
|
932 |
+
Teleport
|
933 |
+
Telesoft
|
934 |
+
Telesphoreo
|
935 |
+
Telesphorep
|
936 |
+
Tenon\.io
|
937 |
+
teoma
|
938 |
+
terrainformatica\.com
|
939 |
+
Test Certificate Info
|
940 |
+
Tetrahedron\/[0-9]
|
941 |
+
The Drop Reaper
|
942 |
+
The Expert HTML Source Viewer
|
943 |
+
The\ Intraformant
|
944 |
+
theinternetrules
|
945 |
+
TheNomad
|
946 |
+
theoldreader\.com
|
947 |
+
Thinklab
|
948 |
+
Thumbshots
|
949 |
+
ThumbSniper
|
950 |
+
TinEye
|
951 |
+
Tiny Tiny RSS
|
952 |
+
TLSProbe\/
|
953 |
+
Toata
|
954 |
+
topster
|
955 |
+
touche.com
|
956 |
+
Traackr.com
|
957 |
+
TrapitAgent
|
958 |
+
Trendiction
|
959 |
+
Trendsmap Resolver
|
960 |
+
trendspottr\.com
|
961 |
+
truwoGPS
|
962 |
+
TulipChain
|
963 |
+
Turingos
|
964 |
+
Turnitin
|
965 |
+
tweetedtimes\.com
|
966 |
+
Tweetminster
|
967 |
+
Tweezler\/
|
968 |
+
Twice
|
969 |
+
Twikle
|
970 |
+
Twingly
|
971 |
+
Twisted PageGetter
|
972 |
+
Typhoeus
|
973 |
+
ubermetrics-technologies
|
974 |
+
uclassify
|
975 |
+
uCrawlr\/
|
976 |
+
UdmSearch
|
977 |
+
UniversalFeedParser
|
978 |
+
Unshorten\.It\!\/[0-9]
|
979 |
+
Untiny
|
980 |
+
UnwindFetchor
|
981 |
+
updated
|
982 |
+
updown\.io daemon
|
983 |
+
Upflow
|
984 |
+
Uptimia
|
985 |
+
URL Verifier
|
986 |
+
URLChecker
|
987 |
+
URLitor.com
|
988 |
+
urlresolver
|
989 |
+
Urlstat
|
990 |
+
UrlTrends Ranking Updater
|
991 |
+
URLy\ Warning
|
992 |
+
URLy\.Warning
|
993 |
+
Vacuum
|
994 |
+
Vagabondo
|
995 |
+
VB\ Project
|
996 |
+
vBSEO
|
997 |
+
VCI
|
998 |
+
via ggpht\.com GoogleImageProxy
|
999 |
+
VidibleScraper
|
1000 |
+
Virusdie
|
1001 |
+
visionutils
|
1002 |
+
vkShare
|
1003 |
+
VoidEYE
|
1004 |
+
Voil
|
1005 |
+
voltron
|
1006 |
+
voyager\/
|
1007 |
+
VSAgent\/[0-9]
|
1008 |
+
VSB-TUO\/[0-9]
|
1009 |
+
Vulnbusters Meter
|
1010 |
+
VYU2
|
1011 |
+
w3af\.org
|
1012 |
+
W3C-checklink
|
1013 |
+
W3C-mobileOK
|
1014 |
+
W3C_I18n-Checker
|
1015 |
+
W3C_Unicorn
|
1016 |
+
Wallpapers\/[0-9]+
|
1017 |
+
WallpapersHD
|
1018 |
+
wangling
|
1019 |
+
Wappalyzer
|
1020 |
+
WatchMouse
|
1021 |
+
WbSrch\/
|
1022 |
+
web-capture\.net
|
1023 |
+
Web-Monitoring
|
1024 |
+
Web-sniffer
|
1025 |
+
Web\ Auto
|
1026 |
+
Web\ Collage
|
1027 |
+
Web\ Enhancer
|
1028 |
+
Web\ Fetch
|
1029 |
+
Web\ Fuck
|
1030 |
+
Web\ Pix
|
1031 |
+
Web\ Sauger
|
1032 |
+
Web\ Sucker
|
1033 |
+
Webalta
|
1034 |
+
Webauskunft
|
1035 |
+
WebAuto
|
1036 |
+
WebCapture
|
1037 |
+
WebClient\/
|
1038 |
+
webcollage
|
1039 |
+
WebCookies
|
1040 |
+
WebCopier
|
1041 |
+
WebCorp
|
1042 |
+
WebDoc
|
1043 |
+
WebEnhancer
|
1044 |
+
WebFetch
|
1045 |
+
WebFuck
|
1046 |
+
WebGo\ IS
|
1047 |
+
WebImageCollector
|
1048 |
+
WebImages
|
1049 |
+
WebIndex
|
1050 |
+
webkit2png
|
1051 |
+
WebLeacher
|
1052 |
+
webmastercoffee
|
1053 |
+
webmon
|
1054 |
+
WebPix
|
1055 |
+
WebReaper
|
1056 |
+
WebSauger
|
1057 |
+
webscreenie
|
1058 |
+
Webshag
|
1059 |
+
Webshot
|
1060 |
+
Website Analyzer\/
|
1061 |
+
Website\ Quester
|
1062 |
+
WebsiteExtractor
|
1063 |
+
websitepulse agent
|
1064 |
+
websitepulse[+ ]checker
|
1065 |
+
WebsiteQuester
|
1066 |
+
Websnapr\/
|
1067 |
+
Webster
|
1068 |
+
WebStripper
|
1069 |
+
WebSucker
|
1070 |
+
Webthumb\/[0-9]
|
1071 |
+
WebThumbnail
|
1072 |
+
WebWhacker
|
1073 |
+
WebZIP
|
1074 |
+
WeCrawlForThePeace
|
1075 |
+
WeLikeLinks
|
1076 |
+
WEPA
|
1077 |
+
WeSEE
|
1078 |
+
wf84
|
1079 |
+
wget
|
1080 |
+
WhatsApp
|
1081 |
+
WhatsMyIP
|
1082 |
+
WhatWeb
|
1083 |
+
WhereGoes\?
|
1084 |
+
Whibse
|
1085 |
+
WhoRunsCoinHive
|
1086 |
+
Whynder Magnet
|
1087 |
+
Windows-RSS-Platform
|
1088 |
+
WinHttpRequest
|
1089 |
+
wkhtmlto
|
1090 |
+
wmtips
|
1091 |
+
Woko
|
1092 |
+
Word\/
|
1093 |
+
WordPress\/
|
1094 |
+
wotbox
|
1095 |
+
WP Engine Install Performance API
|
1096 |
+
wpif
|
1097 |
+
wprecon\.com survey
|
1098 |
+
WPScan
|
1099 |
+
wscheck
|
1100 |
+
Wtrace
|
1101 |
+
WWW-Collector-E
|
1102 |
+
WWW-Mechanize
|
1103 |
+
WWW::Mechanize
|
1104 |
+
www\.monitor\.us
|
1105 |
+
WWWOFFLE
|
1106 |
+
x09Mozilla
|
1107 |
+
x22Mozilla
|
1108 |
+
XaxisSemanticsClassifier
|
1109 |
+
Xenu Link Sleuth
|
1110 |
+
XING-contenttabreceiver\/[0-9]
|
1111 |
+
XmlSitemapGenerator
|
1112 |
+
xpymep([0-9]?)\.exe
|
1113 |
+
Y!J-(ASR|BSC)
|
1114 |
+
Yaanb
|
1115 |
+
yacy
|
1116 |
+
Yahoo Ad monitoring
|
1117 |
+
Yahoo Link Preview
|
1118 |
+
YahooCacheSystem
|
1119 |
+
YahooYSMcm
|
1120 |
+
YandeG
|
1121 |
+
Yandex(?!Search)
|
1122 |
+
yanga
|
1123 |
+
yeti
|
1124 |
+
Yo-yo
|
1125 |
+
Yoleo Consumer
|
1126 |
+
yoogliFetchAgent
|
1127 |
+
YottaaMonitor
|
1128 |
+
Your-Website-Sucks\/[0-9]
|
1129 |
+
yourls\.org
|
1130 |
+
Zade
|
1131 |
+
Zao
|
1132 |
+
Zauba
|
1133 |
+
Zemanta Aggregator
|
1134 |
+
Zend\\Http\\Client
|
1135 |
+
Zend_Http_Client
|
1136 |
+
Zermelo
|
1137 |
+
Zeus
|
1138 |
+
zgrab
|
1139 |
+
ZnajdzFoto
|
1140 |
+
ZyBorg
|
1141 |
[a-z0-9\-_]*(bot|crawler|archiver|transcoder|spider|uptime|validator|fetcher)
|
vendor/jaybizzle/crawler-detect/raw/Exclusions.txt
CHANGED
@@ -1,42 +1,42 @@
|
|
1 |
-
Safari.[\d\.]*
|
2 |
-
Firefox.[\d\.]*
|
3 |
-
Chrome.[\d\.]*
|
4 |
-
Chromium.[\d\.]*
|
5 |
-
MSIE.[\d\.]
|
6 |
-
Opera\/[\d\.]*
|
7 |
-
Mozilla.[\d\.]*
|
8 |
-
AppleWebKit.[\d\.]*
|
9 |
-
Trident.[\d\.]*
|
10 |
-
Windows NT.[\d\.]*
|
11 |
-
Android [\d\.]*
|
12 |
-
Macintosh.
|
13 |
-
Ubuntu
|
14 |
-
Linux
|
15 |
-
[ ]Intel
|
16 |
-
Mac OS X [\d_]*
|
17 |
-
(like )?Gecko(.[\d\.]*)?
|
18 |
-
KHTML,
|
19 |
-
CriOS.[\d\.]*
|
20 |
-
CPU iPhone OS ([0-9_])* like Mac OS X
|
21 |
-
CPU OS ([0-9_])* like Mac OS X
|
22 |
-
iPod
|
23 |
-
compatible
|
24 |
-
x86_..
|
25 |
-
i686
|
26 |
-
x64
|
27 |
-
X11
|
28 |
-
rv:[\d\.]*
|
29 |
-
Version.[\d\.]*
|
30 |
-
WOW64
|
31 |
-
Win64
|
32 |
-
Dalvik.[\d\.]*
|
33 |
-
\.NET CLR [\d\.]*
|
34 |
-
Presto.[\d\.]*
|
35 |
-
Media Center PC
|
36 |
-
BlackBerry
|
37 |
-
Build
|
38 |
-
Opera Mini\/\d{1,2}\.\d{1,2}\.[\d\.]*\/\d{1,2}\.
|
39 |
-
Opera
|
40 |
-
\.NET[\d\.]*
|
41 |
-
cubot
|
42 |
;
|
1 |
+
Safari.[\d\.]*
|
2 |
+
Firefox.[\d\.]*
|
3 |
+
Chrome.[\d\.]*
|
4 |
+
Chromium.[\d\.]*
|
5 |
+
MSIE.[\d\.]
|
6 |
+
Opera\/[\d\.]*
|
7 |
+
Mozilla.[\d\.]*
|
8 |
+
AppleWebKit.[\d\.]*
|
9 |
+
Trident.[\d\.]*
|
10 |
+
Windows NT.[\d\.]*
|
11 |
+
Android [\d\.]*
|
12 |
+
Macintosh.
|
13 |
+
Ubuntu
|
14 |
+
Linux
|
15 |
+
[ ]Intel
|
16 |
+
Mac OS X [\d_]*
|
17 |
+
(like )?Gecko(.[\d\.]*)?
|
18 |
+
KHTML,
|
19 |
+
CriOS.[\d\.]*
|
20 |
+
CPU iPhone OS ([0-9_])* like Mac OS X
|
21 |
+
CPU OS ([0-9_])* like Mac OS X
|
22 |
+
iPod
|
23 |
+
compatible
|
24 |
+
x86_..
|
25 |
+
i686
|
26 |
+
x64
|
27 |
+
X11
|
28 |
+
rv:[\d\.]*
|
29 |
+
Version.[\d\.]*
|
30 |
+
WOW64
|
31 |
+
Win64
|
32 |
+
Dalvik.[\d\.]*
|
33 |
+
\.NET CLR [\d\.]*
|
34 |
+
Presto.[\d\.]*
|
35 |
+
Media Center PC
|
36 |
+
BlackBerry
|
37 |
+
Build
|
38 |
+
Opera Mini\/\d{1,2}\.\d{1,2}\.[\d\.]*\/\d{1,2}\.
|
39 |
+
Opera
|
40 |
+
\.NET[\d\.]*
|
41 |
+
cubot
|
42 |
;
|
vendor/jaybizzle/crawler-detect/raw/Headers.txt
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
HTTP_USER_AGENT
|
2 |
-
HTTP_X_OPERAMINI_PHONE_UA
|
3 |
-
HTTP_X_DEVICE_USER_AGENT
|
4 |
-
HTTP_X_ORIGINAL_USER_AGENT
|
5 |
-
HTTP_X_SKYFIRE_PHONE
|
6 |
-
HTTP_X_BOLT_PHONE_UA
|
7 |
-
HTTP_DEVICE_STOCK_UA
|
8 |
-
HTTP_X_UCBROWSER_DEVICE_UA
|
9 |
-
HTTP_FROM
|
10 |
HTTP_X_SCANNER
|
1 |
+
HTTP_USER_AGENT
|
2 |
+
HTTP_X_OPERAMINI_PHONE_UA
|
3 |
+
HTTP_X_DEVICE_USER_AGENT
|
4 |
+
HTTP_X_ORIGINAL_USER_AGENT
|
5 |
+
HTTP_X_SKYFIRE_PHONE
|
6 |
+
HTTP_X_BOLT_PHONE_UA
|
7 |
+
HTTP_DEVICE_STOCK_UA
|
8 |
+
HTTP_X_UCBROWSER_DEVICE_UA
|
9 |
+
HTTP_FROM
|
10 |
HTTP_X_SCANNER
|
vendor/jaybizzle/crawler-detect/src/CrawlerDetect.php
CHANGED
@@ -1,191 +1,191 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of Crawler Detect - the web crawler detection library.
|
5 |
-
*
|
6 |
-
* (c) Mark Beech <m@rkbee.ch>
|
7 |
-
*
|
8 |
-
* This source file is subject to the MIT license that is bundled
|
9 |
-
* with this source code in the file LICENSE.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Jaybizzle\CrawlerDetect;
|
13 |
-
|
14 |
-
use Jaybizzle\CrawlerDetect\Fixtures\Headers;
|
15 |
-
use Jaybizzle\CrawlerDetect\Fixtures\Crawlers;
|
16 |
-
use Jaybizzle\CrawlerDetect\Fixtures\Exclusions;
|
17 |
-
|
18 |
-
class CrawlerDetect
|
19 |
-
{
|
20 |
-
/**
|
21 |
-
* The user agent.
|
22 |
-
*
|
23 |
-
* @var null
|
24 |
-
*/
|
25 |
-
protected $userAgent = null;
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Headers that contain a user agent.
|
29 |
-
*
|
30 |
-
* @var array
|
31 |
-
*/
|
32 |
-
protected $httpHeaders = array();
|
33 |
-
|
34 |
-
/**
|
35 |
-
* Store regex matches.
|
36 |
-
*
|
37 |
-
* @var array
|
38 |
-
*/
|
39 |
-
protected $matches = array();
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Crawlers object.
|
43 |
-
*
|
44 |
-
* @var \Jaybizzle\CrawlerDetect\Fixtures\Crawlers
|
45 |
-
*/
|
46 |
-
protected $crawlers;
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Exclusions object.
|
50 |
-
*
|
51 |
-
* @var \Jaybizzle\CrawlerDetect\Fixtures\Exclusions
|
52 |
-
*/
|
53 |
-
protected $exclusions;
|
54 |
-
|
55 |
-
/**
|
56 |
-
* Headers object.
|
57 |
-
*
|
58 |
-
* @var \Jaybizzle\CrawlerDetect\Fixtures\Headers
|
59 |
-
*/
|
60 |
-
protected $uaHttpHeaders;
|
61 |
-
|
62 |
-
/**
|
63 |
-
* The compiled regex string.
|
64 |
-
*
|
65 |
-
* @var string
|
66 |
-
*/
|
67 |
-
protected $compiledRegex;
|
68 |
-
|
69 |
-
/**
|
70 |
-
* The compiled exclusions regex string.
|
71 |
-
*
|
72 |
-
* @var string
|
73 |
-
*/
|
74 |
-
protected $compiledExclusions;
|
75 |
-
|
76 |
-
/**
|
77 |
-
* Class constructor.
|
78 |
-
*/
|
79 |
-
public function __construct(array $headers = null, $userAgent = null)
|
80 |
-
{
|
81 |
-
$this->crawlers = new Crawlers();
|
82 |
-
$this->exclusions = new Exclusions();
|
83 |
-
$this->uaHttpHeaders = new Headers();
|
84 |
-
|
85 |
-
$this->compiledRegex = $this->compileRegex($this->crawlers->getAll());
|
86 |
-
$this->compiledExclusions = $this->compileRegex($this->exclusions->getAll());
|
87 |
-
|
88 |
-
$this->setHttpHeaders($headers);
|
89 |
-
$this->userAgent = $this->setUserAgent($userAgent);
|
90 |
-
}
|
91 |
-
|
92 |
-
/**
|
93 |
-
* Compile the regex patterns into one regex string.
|
94 |
-
*
|
95 |
-
* @param array
|
96 |
-
*
|
97 |
-
* @return string
|
98 |
-
*/
|
99 |
-
public function compileRegex($patterns)
|
100 |
-
{
|
101 |
-
return '('.implode('|', $patterns).')';
|
102 |
-
}
|
103 |
-
|
104 |
-
/**
|
105 |
-
* Set HTTP headers.
|
106 |
-
*
|
107 |
-
* @param array|null $httpHeaders
|
108 |
-
*/
|
109 |
-
public function setHttpHeaders($httpHeaders)
|
110 |
-
{
|
111 |
-
// Use global _SERVER if $httpHeaders aren't defined.
|
112 |
-
if (! is_array($httpHeaders) || ! count($httpHeaders)) {
|
113 |
-
$httpHeaders = $_SERVER;
|
114 |
-
}
|
115 |
-
|
116 |
-
// Clear existing headers.
|
117 |
-
$this->httpHeaders = array();
|
118 |
-
|
119 |
-
// Only save HTTP headers. In PHP land, that means
|
120 |
-
// only _SERVER vars that start with HTTP_.
|
121 |
-
foreach ($httpHeaders as $key => $value) {
|
122 |
-
if (strpos($key, 'HTTP_') === 0) {
|
123 |
-
$this->httpHeaders[$key] = $value;
|
124 |
-
}
|
125 |
-
}
|
126 |
-
}
|
127 |
-
|
128 |
-
/**
|
129 |
-
* Return user agent headers.
|
130 |
-
*
|
131 |
-
* @return array
|
132 |
-
*/
|
133 |
-
public function getUaHttpHeaders()
|
134 |
-
{
|
135 |
-
return $this->uaHttpHeaders->getAll();
|
136 |
-
}
|
137 |
-
|
138 |
-
/**
|
139 |
-
* Set the user agent.
|
140 |
-
*
|
141 |
-
* @param string $userAgent
|
142 |
-
*/
|
143 |
-
public function setUserAgent($userAgent)
|
144 |
-
{
|
145 |
-
if (is_null($userAgent)) {
|
146 |
-
foreach ($this->getUaHttpHeaders() as $altHeader) {
|
147 |
-
if (isset($this->httpHeaders[$altHeader])) {
|
148 |
-
$userAgent .= $this->httpHeaders[$altHeader].' ';
|
149 |
-
}
|
150 |
-
}
|
151 |
-
}
|
152 |
-
|
153 |
-
return $userAgent;
|
154 |
-
}
|
155 |
-
|
156 |
-
/**
|
157 |
-
* Check user agent string against the regex.
|
158 |
-
*
|
159 |
-
* @param string|null $userAgent
|
160 |
-
*
|
161 |
-
* @return bool
|
162 |
-
*/
|
163 |
-
public function isCrawler($userAgent = null)
|
164 |
-
{
|
165 |
-
$agent = $userAgent ?: $this->userAgent;
|
166 |
-
|
167 |
-
$agent = preg_replace('/'.$this->compiledExclusions.'/i', '', $agent);
|
168 |
-
|
169 |
-
if (strlen(trim($agent)) == 0) {
|
170 |
-
return false;
|
171 |
-
}
|
172 |
-
|
173 |
-
$result = preg_match('/'.$this->compiledRegex.'/i', trim($agent), $matches);
|
174 |
-
|
175 |
-
if ($matches) {
|
176 |
-
$this->matches = $matches;
|
177 |
-
}
|
178 |
-
|
179 |
-
return (bool) $result;
|
180 |
-
}
|
181 |
-
|
182 |
-
/**
|
183 |
-
* Return the matches.
|
184 |
-
*
|
185 |
-
* @return string|null
|
186 |
-
*/
|
187 |
-
public function getMatches()
|
188 |
-
{
|
189 |
-
return isset($this->matches[0]) ? $this->matches[0] : null;
|
190 |
-
}
|
191 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of Crawler Detect - the web crawler detection library.
|
5 |
+
*
|
6 |
+
* (c) Mark Beech <m@rkbee.ch>
|
7 |
+
*
|
8 |
+
* This source file is subject to the MIT license that is bundled
|
9 |
+
* with this source code in the file LICENSE.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Jaybizzle\CrawlerDetect;
|
13 |
+
|
14 |
+
use Jaybizzle\CrawlerDetect\Fixtures\Headers;
|
15 |
+
use Jaybizzle\CrawlerDetect\Fixtures\Crawlers;
|
16 |
+
use Jaybizzle\CrawlerDetect\Fixtures\Exclusions;
|
17 |
+
|
18 |
+
class CrawlerDetect
|
19 |
+
{
|
20 |
+
/**
|
21 |
+
* The user agent.
|
22 |
+
*
|
23 |
+
* @var null
|
24 |
+
*/
|
25 |
+
protected $userAgent = null;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Headers that contain a user agent.
|
29 |
+
*
|
30 |
+
* @var array
|
31 |
+
*/
|
32 |
+
protected $httpHeaders = array();
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Store regex matches.
|
36 |
+
*
|
37 |
+
* @var array
|
38 |
+
*/
|
39 |
+
protected $matches = array();
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Crawlers object.
|
43 |
+
*
|
44 |
+
* @var \Jaybizzle\CrawlerDetect\Fixtures\Crawlers
|
45 |
+
*/
|
46 |
+
protected $crawlers;
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Exclusions object.
|
50 |
+
*
|
51 |
+
* @var \Jaybizzle\CrawlerDetect\Fixtures\Exclusions
|
52 |
+
*/
|
53 |
+
protected $exclusions;
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Headers object.
|
57 |
+
*
|
58 |
+
* @var \Jaybizzle\CrawlerDetect\Fixtures\Headers
|
59 |
+
*/
|
60 |
+
protected $uaHttpHeaders;
|
61 |
+
|
62 |
+
/**
|
63 |
+
* The compiled regex string.
|
64 |
+
*
|
65 |
+
* @var string
|
66 |
+
*/
|
67 |
+
protected $compiledRegex;
|
68 |
+
|
69 |
+
/**
|
70 |
+
* The compiled exclusions regex string.
|
71 |
+
*
|
72 |
+
* @var string
|
73 |
+
*/
|
74 |
+
protected $compiledExclusions;
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Class constructor.
|
78 |
+
*/
|
79 |
+
public function __construct(array $headers = null, $userAgent = null)
|
80 |
+
{
|
81 |
+
$this->crawlers = new Crawlers();
|
82 |
+
$this->exclusions = new Exclusions();
|
83 |
+
$this->uaHttpHeaders = new Headers();
|
84 |
+
|
85 |
+
$this->compiledRegex = $this->compileRegex($this->crawlers->getAll());
|
86 |
+
$this->compiledExclusions = $this->compileRegex($this->exclusions->getAll());
|
87 |
+
|
88 |
+
$this->setHttpHeaders($headers);
|
89 |
+
$this->userAgent = $this->setUserAgent($userAgent);
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Compile the regex patterns into one regex string.
|
94 |
+
*
|
95 |
+
* @param array
|
96 |
+
*
|
97 |
+
* @return string
|
98 |
+
*/
|
99 |
+
public function compileRegex($patterns)
|
100 |
+
{
|
101 |
+
return '('.implode('|', $patterns).')';
|
102 |
+
}
|
103 |
+
|
104 |
+
/**
|
105 |
+
* Set HTTP headers.
|
106 |
+
*
|
107 |
+
* @param array|null $httpHeaders
|
108 |
+
*/
|
109 |
+
public function setHttpHeaders($httpHeaders)
|
110 |
+
{
|
111 |
+
// Use global _SERVER if $httpHeaders aren't defined.
|
112 |
+
if (! is_array($httpHeaders) || ! count($httpHeaders)) {
|
113 |
+
$httpHeaders = $_SERVER;
|
114 |
+
}
|
115 |
+
|
116 |
+
// Clear existing headers.
|
117 |
+
$this->httpHeaders = array();
|
118 |
+
|
119 |
+
// Only save HTTP headers. In PHP land, that means
|
120 |
+
// only _SERVER vars that start with HTTP_.
|
121 |
+
foreach ($httpHeaders as $key => $value) {
|
122 |
+
if (strpos($key, 'HTTP_') === 0) {
|
123 |
+
$this->httpHeaders[$key] = $value;
|
124 |
+
}
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* Return user agent headers.
|
130 |
+
*
|
131 |
+
* @return array
|
132 |
+
*/
|
133 |
+
public function getUaHttpHeaders()
|
134 |
+
{
|
135 |
+
return $this->uaHttpHeaders->getAll();
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Set the user agent.
|
140 |
+
*
|
141 |
+
* @param string $userAgent
|
142 |
+
*/
|
143 |
+
public function setUserAgent($userAgent)
|
144 |
+
{
|
145 |
+
if (is_null($userAgent)) {
|
146 |
+
foreach ($this->getUaHttpHeaders() as $altHeader) {
|
147 |
+
if (isset($this->httpHeaders[$altHeader])) {
|
148 |
+
$userAgent .= $this->httpHeaders[$altHeader].' ';
|
149 |
+
}
|
150 |
+
}
|
151 |
+
}
|
152 |
+
|
153 |
+
return $userAgent;
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Check user agent string against the regex.
|
158 |
+
*
|
159 |
+
* @param string|null $userAgent
|
160 |
+
*
|
161 |
+
* @return bool
|
162 |
+
*/
|
163 |
+
public function isCrawler($userAgent = null)
|
164 |
+
{
|
165 |
+
$agent = $userAgent ?: $this->userAgent;
|
166 |
+
|
167 |
+
$agent = preg_replace('/'.$this->compiledExclusions.'/i', '', $agent);
|
168 |
+
|
169 |
+
if (strlen(trim($agent)) == 0) {
|
170 |
+
return false;
|
171 |
+
}
|
172 |
+
|
173 |
+
$result = preg_match('/'.$this->compiledRegex.'/i', trim($agent), $matches);
|
174 |
+
|
175 |
+
if ($matches) {
|
176 |
+
$this->matches = $matches;
|
177 |
+
}
|
178 |
+
|
179 |
+
return (bool) $result;
|
180 |
+
}
|
181 |
+
|
182 |
+
/**
|
183 |
+
* Return the matches.
|
184 |
+
*
|
185 |
+
* @return string|null
|
186 |
+
*/
|
187 |
+
public function getMatches()
|
188 |
+
{
|
189 |
+
return isset($this->matches[0]) ? $this->matches[0] : null;
|
190 |
+
}
|
191 |
+
}
|
vendor/jaybizzle/crawler-detect/src/Fixtures/AbstractProvider.php
CHANGED
@@ -1,31 +1,31 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of Crawler Detect - the web crawler detection library.
|
5 |
-
*
|
6 |
-
* (c) Mark Beech <m@rkbee.ch>
|
7 |
-
*
|
8 |
-
* This source file is subject to the MIT license that is bundled
|
9 |
-
* with this source code in the file LICENSE.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Jaybizzle\CrawlerDetect\Fixtures;
|
13 |
-
|
14 |
-
abstract class AbstractProvider
|
15 |
-
{
|
16 |
-
/**
|
17 |
-
* The data set.
|
18 |
-
*
|
19 |
-
* @var array
|
20 |
-
*/
|
21 |
-
protected $data;
|
22 |
-
/**
|
23 |
-
* Return the data set.
|
24 |
-
*
|
25 |
-
* @return array
|
26 |
-
*/
|
27 |
-
public function getAll()
|
28 |
-
{
|
29 |
-
return $this->data;
|
30 |
-
}
|
31 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of Crawler Detect - the web crawler detection library.
|
5 |
+
*
|
6 |
+
* (c) Mark Beech <m@rkbee.ch>
|
7 |
+
*
|
8 |
+
* This source file is subject to the MIT license that is bundled
|
9 |
+
* with this source code in the file LICENSE.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Jaybizzle\CrawlerDetect\Fixtures;
|
13 |
+
|
14 |
+
abstract class AbstractProvider
|
15 |
+
{
|
16 |
+
/**
|
17 |
+
* The data set.
|
18 |
+
*
|
19 |
+
* @var array
|
20 |
+
*/
|
21 |
+
protected $data;
|
22 |
+
/**
|
23 |
+
* Return the data set.
|
24 |
+
*
|
25 |
+
* @return array
|
26 |
+
*/
|
27 |
+
public function getAll()
|
28 |
+
{
|
29 |
+
return $this->data;
|
30 |
+
}
|
31 |
+
}
|
vendor/jaybizzle/crawler-detect/src/Fixtures/Crawlers.php
CHANGED
@@ -1,1162 +1,1162 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of Crawler Detect - the web crawler detection library.
|
5 |
-
*
|
6 |
-
* (c) Mark Beech <m@rkbee.ch>
|
7 |
-
*
|
8 |
-
* This source file is subject to the MIT license that is bundled
|
9 |
-
* with this source code in the file LICENSE.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Jaybizzle\CrawlerDetect\Fixtures;
|
13 |
-
|
14 |
-
class Crawlers extends AbstractProvider
|
15 |
-
{
|
16 |
-
/**
|
17 |
-
* Array of regular expressions to match against the user agent.
|
18 |
-
*
|
19 |
-
* @var array
|
20 |
-
*/
|
21 |
-
protected $data = array(
|
22 |
-
'.*Java.*outbrain',
|
23 |
-
' YLT',
|
24 |
-
'008\/',
|
25 |
-
'192\.comAgent',
|
26 |
-
'2ip\.ru',
|
27 |
-
'404checker',
|
28 |
-
'404enemy',
|
29 |
-
'80legs',
|
30 |
-
'^b0t$',
|
31 |
-
'^bluefish ',
|
32 |
-
'^Calypso v\/',
|
33 |
-
'^COMODO DCV',
|
34 |
-
'^DangDang',
|
35 |
-
'^DavClnt',
|
36 |
-
'^FDM ',
|
37 |
-
'^git\/',
|
38 |
-
'^Goose\/',
|
39 |
-
'^Grabber',
|
40 |
-
'^HTTPClient\/',
|
41 |
-
'^Java\/',
|
42 |
-
'^Jeode\/',
|
43 |
-
'^Jetty\/',
|
44 |
-
'^Mget',
|
45 |
-
'^Microsoft URL Control',
|
46 |
-
'^NG\/[0-9\.]',
|
47 |
-
'^NING\/',
|
48 |
-
'^PHP\/[0-9]',
|
49 |
-
'^RMA\/',
|
50 |
-
'^Ruby|Ruby\/[0-9]',
|
51 |
-
'^scrutiny\/',
|
52 |
-
'^VSE\/[0-9]',
|
53 |
-
'^WordPress\.com',
|
54 |
-
'^XRL\/[0-9]',
|
55 |
-
'^ZmEu',
|
56 |
-
'a3logics\.in',
|
57 |
-
'A6-Indexer',
|
58 |
-
'a\.pr-cy\.ru',
|
59 |
-
'Abonti',
|
60 |
-
'Aboundex',
|
61 |
-
'aboutthedomain',
|
62 |
-
'Accoona-AI-Agent',
|
63 |
-
'acoon',
|
64 |
-
'acrylicapps\.com\/pulp',
|
65 |
-
'Acunetix',
|
66 |
-
'adbeat',
|
67 |
-
'AddThis',
|
68 |
-
'ADmantX',
|
69 |
-
'adressendeutschland',
|
70 |
-
'adscanner\/',
|
71 |
-
'Advanced Email Extractor v',
|
72 |
-
'agentslug',
|
73 |
-
'AHC',
|
74 |
-
'aihit',
|
75 |
-
'aiohttp\/',
|
76 |
-
'Airmail',
|
77 |
-
'akka-http\/',
|
78 |
-
'akula\/',
|
79 |
-
'alertra',
|
80 |
-
'alexa site audit',
|
81 |
-
'Alibaba\.Security\.Heimdall',
|
82 |
-
'Alligator',
|
83 |
-
'allloadin\.com',
|
84 |
-
'AllSubmitter',
|
85 |
-
'alyze\.info',
|
86 |
-
'amagit',
|
87 |
-
'Anarchie',
|
88 |
-
'AndroidDownloadManager',
|
89 |
-
'Anemone',
|
90 |
-
'AngleSharp\/',
|
91 |
-
'Ant\.com',
|
92 |
-
'Anturis Agent',
|
93 |
-
'AnyEvent-HTTP\/',
|
94 |
-
'Apache Droid',
|
95 |
-
'Apache-HttpAsyncClient\/',
|
96 |
-
'Apache-HttpClient\/',
|
97 |
-
'ApacheBench\/',
|
98 |
-
'Apexoo',
|
99 |
-
'APIs-Google',
|
100 |
-
'AportWorm\/[0-9]',
|
101 |
-
'AppBeat\/[0-9]',
|
102 |
-
'AppEngine-Google',
|
103 |
-
'Arachmo',
|
104 |
-
'arachnode',
|
105 |
-
'Arachnophilia',
|
106 |
-
'aria2',
|
107 |
-
'asafaweb.com',
|
108 |
-
'AskQuickly',
|
109 |
-
'ASPSeek',
|
110 |
-
'Asterias',
|
111 |
-
'Astute',
|
112 |
-
'asynchttp',
|
113 |
-
'Attach',
|
114 |
-
'autocite',
|
115 |
-
'Autonomy',
|
116 |
-
'axios\/',
|
117 |
-
'B-l-i-t-z-B-O-T',
|
118 |
-
'Backlink-Ceck',
|
119 |
-
'backlink-check',
|
120 |
-
'BackStreet',
|
121 |
-
'BackWeb',
|
122 |
-
'Bad-Neighborhood',
|
123 |
-
'Badass',
|
124 |
-
'baidu\.com',
|
125 |
-
'Bandit',
|
126 |
-
'BatchFTP',
|
127 |
-
'Battleztar\ Bazinga',
|
128 |
-
'baypup\/[0-9]',
|
129 |
-
'baypup\/colbert',
|
130 |
-
'BazQux',
|
131 |
-
'BBBike',
|
132 |
-
'BCKLINKS',
|
133 |
-
'BDFetch',
|
134 |
-
'BegunAdvertising\/',
|
135 |
-
'BigBozz',
|
136 |
-
'Bigfoot',
|
137 |
-
'biglotron',
|
138 |
-
'BingLocalSearch',
|
139 |
-
'BingPreview',
|
140 |
-
'binlar',
|
141 |
-
'biNu image cacher',
|
142 |
-
'Bitacle',
|
143 |
-
'biz_Directory',
|
144 |
-
'Black\ Hole',
|
145 |
-
'Blackboard Safeassign',
|
146 |
-
'BlackWidow',
|
147 |
-
'Bloglovin',
|
148 |
-
'BlogPulseLive',
|
149 |
-
'BlogSearch',
|
150 |
-
'Blogtrottr',
|
151 |
-
'BlowFish',
|
152 |
-
'Boardreader',
|
153 |
-
'boitho\.com-dc',
|
154 |
-
'BPImageWalker',
|
155 |
-
'Braintree-Webhooks',
|
156 |
-
'Branch Metrics API',
|
157 |
-
'Branch-Passthrough',
|
158 |
-
'Brandprotect',
|
159 |
-
'Brandwatch',
|
160 |
-
'Brodie\/',
|
161 |
-
'Browsershots',
|
162 |
-
'BUbiNG',
|
163 |
-
'Buck\/',
|
164 |
-
'Buddy',
|
165 |
-
'BuiltWith',
|
166 |
-
'Bullseye',
|
167 |
-
'BunnySlippers',
|
168 |
-
'Burf Search',
|
169 |
-
'Butterfly\/',
|
170 |
-
'BuzzSumo',
|
171 |
-
'CAAM\/[0-9]',
|
172 |
-
'CakePHP',
|
173 |
-
'Calculon',
|
174 |
-
'CapsuleChecker',
|
175 |
-
'CaretNail',
|
176 |
-
'catexplorador',
|
177 |
-
'cb crawl',
|
178 |
-
'CC Metadata Scaper',
|
179 |
-
'Cegbfeieh',
|
180 |
-
'Cerberian Drtrs',
|
181 |
-
'CERT\.at-Statistics-Survey',
|
182 |
-
'cg-eye',
|
183 |
-
'changedetection',
|
184 |
-
'ChangesMeter\/',
|
185 |
-
'Charlotte',
|
186 |
-
'CheckHost',
|
187 |
-
'checkprivacy',
|
188 |
-
'CherryPicker',
|
189 |
-
'ChinaClaw',
|
190 |
-
'Chirp\/[0-9]',
|
191 |
-
'chkme\.com',
|
192 |
-
'Chlooe',
|
193 |
-
'CirrusExplorer\/',
|
194 |
-
'CISPA Vulnerability Notification',
|
195 |
-
'Citoid',
|
196 |
-
'CJNetworkQuality',
|
197 |
-
'Clarsentia',
|
198 |
-
'clips\.ua\.ac\.be',
|
199 |
-
'Cloud\ mapping',
|
200 |
-
'CloudEndure',
|
201 |
-
'CloudFlare-AlwaysOnline',
|
202 |
-
'Cloudinary\/[0-9]',
|
203 |
-
'cmcm\.com',
|
204 |
-
'coccoc',
|
205 |
-
'cognitiveseo',
|
206 |
-
'colly -',
|
207 |
-
'CommaFeed',
|
208 |
-
'Commons-HttpClient',
|
209 |
-
'Comodo SSL Checker',
|
210 |
-
'contactbigdatafr',
|
211 |
-
'convera',
|
212 |
-
'copyright sheriff',
|
213 |
-
'CopyRightCheck',
|
214 |
-
'Copyscape',
|
215 |
-
'Cosmos4j\.feedback',
|
216 |
-
'Covario-IDS',
|
217 |
-
'CrawlForMe\/[0-9]',
|
218 |
-
'Crescent',
|
219 |
-
'cron-job\.org',
|
220 |
-
'Crowsnest',
|
221 |
-
'CSHttp',
|
222 |
-
'curb',
|
223 |
-
'Curious George',
|
224 |
-
'curl',
|
225 |
-
'cuwhois\/[0-9]',
|
226 |
-
'cybo\.com',
|
227 |
-
'DareBoost',
|
228 |
-
'DatabaseDriverMysqli',
|
229 |
-
'DataCha0s',
|
230 |
-
'DataparkSearch',
|
231 |
-
'dataprovider',
|
232 |
-
'Daum(oa)?[ \/][0-9]',
|
233 |
-
'Demon',
|
234 |
-
'DeuSu',
|
235 |
-
'developers\.google\.com\/\+\/web\/snippet\/',
|
236 |
-
'Devil',
|
237 |
-
'Digg',
|
238 |
-
'Digincore',
|
239 |
-
'DigitalPebble',
|
240 |
-
'Dirbuster',
|
241 |
-
'Dispatch\/',
|
242 |
-
'DittoSpyder',
|
243 |
-
'dlvr',
|
244 |
-
'DMBrowser',
|
245 |
-
'DNS-Tools Header-Analyzer',
|
246 |
-
'DNSPod-reporting',
|
247 |
-
'docoloc',
|
248 |
-
'Dolphin http client\/',
|
249 |
-
'DomainAppender',
|
250 |
-
'Donuts Content Explorer',
|
251 |
-
'dotMailer content retrieval',
|
252 |
-
'dotSemantic',
|
253 |
-
'downforeveryoneorjustme',
|
254 |
-
'Download\ Wonder',
|
255 |
-
'downnotifier\.com',
|
256 |
-
'DowntimeDetector',
|
257 |
-
'Dragonfly File Reader',
|
258 |
-
'Drip',
|
259 |
-
'drupact',
|
260 |
-
'Drupal \(\+http:\/\/drupal\.org\/\)',
|
261 |
-
'DTS\ Agent',
|
262 |
-
'dubaiindex',
|
263 |
-
'EARTHCOM',
|
264 |
-
'Easy-Thumb',
|
265 |
-
'EasyDL',
|
266 |
-
'Ebingbong',
|
267 |
-
'ec2linkfinder',
|
268 |
-
'eCairn-Grabber',
|
269 |
-
'eCatch',
|
270 |
-
'ECCP',
|
271 |
-
'echocrawl',
|
272 |
-
'eContext\/',
|
273 |
-
'Ecxi',
|
274 |
-
'EirGrabber',
|
275 |
-
'ElectricMonk',
|
276 |
-
'elefent',
|
277 |
-
'EMail Exractor',
|
278 |
-
'Email%20Extractor%20Lite',
|
279 |
-
'EMail\ Wolf',
|
280 |
-
'EmailWolf',
|
281 |
-
'Embed PHP Library',
|
282 |
-
'Embedly',
|
283 |
-
'europarchive\.org',
|
284 |
-
'evc-batch',
|
285 |
-
'EventMachine HttpClient',
|
286 |
-
'Evidon',
|
287 |
-
'Evrinid',
|
288 |
-
'ExactSearch',
|
289 |
-
'ExaleadCloudview',
|
290 |
-
'Excel\/',
|
291 |
-
'Exif Viewer',
|
292 |
-
'ExperianCrawlUK',
|
293 |
-
'Exploratodo',
|
294 |
-
'Express WebPictures',
|
295 |
-
'ExtractorPro',
|
296 |
-
'Extreme\ Picture\ Finder',
|
297 |
-
'EyeNetIE',
|
298 |
-
'ezooms',
|
299 |
-
'facebookexternalhit',
|
300 |
-
'facebookplatform',
|
301 |
-
'fairshare',
|
302 |
-
'Faraday v',
|
303 |
-
'fasthttp',
|
304 |
-
'Faveeo',
|
305 |
-
'Favicon downloader',
|
306 |
-
'FavOrg',
|
307 |
-
'Feed Wrangler',
|
308 |
-
'Feedbin',
|
309 |
-
'FeedBooster',
|
310 |
-
'FeedBucket',
|
311 |
-
'FeedBunch\/[0-9]',
|
312 |
-
'FeedBurner',
|
313 |
-
'FeedChecker',
|
314 |
-
'Feedly',
|
315 |
-
'Feedspot',
|
316 |
-
'Feedwind\/[0-9]',
|
317 |
-
'feeltiptop',
|
318 |
-
'Fetch API',
|
319 |
-
'Fetch\/[0-9]',
|
320 |
-
'Fever\/[0-9]',
|
321 |
-
'FHscan',
|
322 |
-
'Fimap',
|
323 |
-
'findlink',
|
324 |
-
'findthatfile',
|
325 |
-
'FlashGet',
|
326 |
-
'FlipboardBrowserProxy',
|
327 |
-
'FlipboardProxy',
|
328 |
-
'FlipboardRSS',
|
329 |
-
'fluffy',
|
330 |
-
'Flunky',
|
331 |
-
'flynxapp',
|
332 |
-
'forensiq',
|
333 |
-
'FoundSeoTool\/[0-9]',
|
334 |
-
'free thumbnails',
|
335 |
-
'Freeuploader',
|
336 |
-
'FreeWebMonitoring SiteChecker',
|
337 |
-
'Funnelback',
|
338 |
-
'G-i-g-a-b-o-t',
|
339 |
-
'g00g1e\.net',
|
340 |
-
'GAChecker',
|
341 |
-
'ganarvisitas\/[0-9]',
|
342 |
-
'geek-tools',
|
343 |
-
'Genderanalyzer',
|
344 |
-
'Genieo',
|
345 |
-
'GentleSource',
|
346 |
-
'Getintent',
|
347 |
-
'GetLinkInfo',
|
348 |
-
'getprismatic\.com',
|
349 |
-
'GetRight',
|
350 |
-
'GetURLInfo\/[0-9]',
|
351 |
-
'GetWeb',
|
352 |
-
'Ghost Inspector',
|
353 |
-
'GigablastOpenSource',
|
354 |
-
'GIS-LABS',
|
355 |
-
'github-camo',
|
356 |
-
'github\.com\/',
|
357 |
-
'Go [\d\.]* package http',
|
358 |
-
'Go http package',
|
359 |
-
'Go!Zilla',
|
360 |
-
'Go-Ahead-Got-It',
|
361 |
-
'Go-http-client',
|
362 |
-
'gobyus',
|
363 |
-
'gofetch',
|
364 |
-
'GomezAgent',
|
365 |
-
'gooblog',
|
366 |
-
'Goodzer\/[0-9]',
|
367 |
-
'Google favicon',
|
368 |
-
'Google Keyword Suggestion',
|
369 |
-
'Google Keyword Tool',
|
370 |
-
'Google Page Speed Insights',
|
371 |
-
'Google PP Default',
|
372 |
-
'Google Search Console',
|
373 |
-
'Google Web Preview',
|
374 |
-
'Google-Adwords',
|
375 |
-
'Google-Apps-Script',
|
376 |
-
'Google-Calendar-Importer',
|
377 |
-
'Google-HotelAdsVerifier',
|
378 |
-
'Google-HTTP-Java-Client',
|
379 |
-
'Google-Publisher-Plugin',
|
380 |
-
'Google-SearchByImage',
|
381 |
-
'Google-Site-Verification',
|
382 |
-
'Google-Structured-Data-Testing-Tool',
|
383 |
-
'Google-Youtube-Links',
|
384 |
-
'google_partner_monitoring',
|
385 |
-
'GoogleDocs',
|
386 |
-
'GoogleHC\/',
|
387 |
-
'GoogleProducer',
|
388 |
-
'Gookey',
|
389 |
-
'GoScraper',
|
390 |
-
'GoSpotCheck',
|
391 |
-
'GoSquared-Status-Checker',
|
392 |
-
'gosquared-thumbnailer',
|
393 |
-
'Gotit',
|
394 |
-
'GoZilla',
|
395 |
-
'grabify',
|
396 |
-
'GrabNet',
|
397 |
-
'Grafula',
|
398 |
-
'Grammarly',
|
399 |
-
'GrapeFX',
|
400 |
-
'grokkit',
|
401 |
-
'grouphigh',
|
402 |
-
'grub-client',
|
403 |
-
'gSOAP\/',
|
404 |
-
'GT::WWW',
|
405 |
-
'GTmetrix',
|
406 |
-
'GuzzleHttp',
|
407 |
-
'gvfs\/',
|
408 |
-
'HAA(A)?RTLAND http client',
|
409 |
-
'Haansoft',
|
410 |
-
'hackney\/',
|
411 |
-
'Hatena',
|
412 |
-
'Havij',
|
413 |
-
'hawkReader',
|
414 |
-
'HEADMasterSEO',
|
415 |
-
'HeartRails_Capture',
|
416 |
-
'help@dataminr\.com',
|
417 |
-
'heritrix',
|
418 |
-
'historious\/',
|
419 |
-
'hledejLevne\.cz\/[0-9]',
|
420 |
-
'Hloader',
|
421 |
-
'HMView',
|
422 |
-
'Holmes',
|
423 |
-
'HonesoSearchEngine\/',
|
424 |
-
'HootSuite Image proxy',
|
425 |
-
'Hootsuite-WebFeed\/[0-9]',
|
426 |
-
'hosterstats',
|
427 |
-
'HostTracker',
|
428 |
-
'ht:\/\/check',
|
429 |
-
'htdig',
|
430 |
-
'HTMLparser',
|
431 |
-
'http-get',
|
432 |
-
'HTTP-Header-Abfrage',
|
433 |
-
'http-kit',
|
434 |
-
'http-request\/',
|
435 |
-
'HTTP-Tiny',
|
436 |
-
'HTTP::Lite',
|
437 |
-
'http\.rb\/',
|
438 |
-
'HTTP_Compression_Test',
|
439 |
-
'http_request2',
|
440 |
-
'http_requester',
|
441 |
-
'HttpComponents',
|
442 |
-
'httphr',
|
443 |
-
'HTTPMon',
|
444 |
-
'httpscheck',
|
445 |
-
'httpssites_power',
|
446 |
-
'httpunit',
|
447 |
-
'HttpUrlConnection',
|
448 |
-
'httrack',
|
449 |
-
'huaweisymantec',
|
450 |
-
'HubPages.*crawlingpolicy',
|
451 |
-
'HubSpot ',
|
452 |
-
'Humanlinks',
|
453 |
-
'HyperZbozi.cz Feeder',
|
454 |
-
'i2kconnect\/',
|
455 |
-
'Iblog',
|
456 |
-
'ichiro',
|
457 |
-
'Id-search',
|
458 |
-
'IdeelaborPlagiaat',
|
459 |
-
'IDG Twitter Links Resolver',
|
460 |
-
'IDwhois\/[0-9]',
|
461 |
-
'Iframely',
|
462 |
-
'igdeSpyder',
|
463 |
-
'IlTrovatore',
|
464 |
-
'Image\ Fetch',
|
465 |
-
'Image\ Sucker',
|
466 |
-
'ImageEngine\/',
|
467 |
-
'Imagga',
|
468 |
-
'imgsizer',
|
469 |
-
'InAGist',
|
470 |
-
'inbound\.li parser',
|
471 |
-
'InDesign%20CC',
|
472 |
-
'Indy\ Library',
|
473 |
-
'infegy',
|
474 |
-
'infohelfer',
|
475 |
-
'InfoTekies',
|
476 |
-
'InfoWizards Reciprocal Link System PRO',
|
477 |
-
'inpwrd\.com',
|
478 |
-
'instabid',
|
479 |
-
'Instapaper',
|
480 |
-
'Integrity',
|
481 |
-
'integromedb',
|
482 |
-
'Intelliseek',
|
483 |
-
'InterGET',
|
484 |
-
'Internet\ Ninja',
|
485 |
-
'internet_archive',
|
486 |
-
'InternetSeer',
|
487 |
-
'internetVista monitor',
|
488 |
-
'intraVnews',
|
489 |
-
'IODC',
|
490 |
-
'IOI',
|
491 |
-
'iplabel',
|
492 |
-
'ips-agent',
|
493 |
-
'IPS\/[0-9]',
|
494 |
-
'IPWorks HTTP\/S Component',
|
495 |
-
'iqdb\/',
|
496 |
-
'Iria',
|
497 |
-
'Irokez',
|
498 |
-
'isitup\.org',
|
499 |
-
'iskanie',
|
500 |
-
'iZSearch',
|
501 |
-
'janforman',
|
502 |
-
'Jaunt\/',
|
503 |
-
'Jbrofuzz',
|
504 |
-
'Jersey\/',
|
505 |
-
'JetCar',
|
506 |
-
'Jigsaw',
|
507 |
-
'Jobboerse',
|
508 |
-
'JobFeed discovery',
|
509 |
-
'Jobg8 URL Monitor',
|
510 |
-
'jobo',
|
511 |
-
'Jobrapido',
|
512 |
-
'Jobsearch1\.5',
|
513 |
-
'JoinVision Generic',
|
514 |
-
'Joomla',
|
515 |
-
'Jorgee',
|
516 |
-
'JS-Kit',
|
517 |
-
'JustView',
|
518 |
-
'Kaspersky Lab CFR link resolver',
|
519 |
-
'KeepRight OpenStreetMap Checker',
|
520 |
-
'Kelny\/',
|
521 |
-
'Kerrigan\/',
|
522 |
-
'KeyCDN',
|
523 |
-
'Keyword Extractor',
|
524 |
-
'Keyword\ Density',
|
525 |
-
'Keywords Research',
|
526 |
-
'KickFire',
|
527 |
-
'KimonoLabs\/',
|
528 |
-
'Kml-Google',
|
529 |
-
'knows\.is',
|
530 |
-
'KOCMOHABT',
|
531 |
-
'kouio',
|
532 |
-
'kulturarw3',
|
533 |
-
'KumKie',
|
534 |
-
'L\.webis',
|
535 |
-
'Larbin',
|
536 |
-
'Lavf\/',
|
537 |
-
'LayeredExtractor',
|
538 |
-
'LeechFTP',
|
539 |
-
'LeechGet',
|
540 |
-
'letsencrypt',
|
541 |
-
'Lftp',
|
542 |
-
'LibVLC',
|
543 |
-
'LibWeb',
|
544 |
-
'Libwhisker',
|
545 |
-
'libwww',
|
546 |
-
'Licorne Image Snapshot',
|
547 |
-
'Liferea\/',
|
548 |
-
'Lightspeedsystems',
|
549 |
-
'Likse',
|
550 |
-
'link checker',
|
551 |
-
'Link Valet',
|
552 |
-
'link_thumbnailer',
|
553 |
-
'LinkAlarm\/',
|
554 |
-
'linkCheck',
|
555 |
-
'linkdex',
|
556 |
-
'LinkExaminer',
|
557 |
-
'linkfluence',
|
558 |
-
'linkpeek',
|
559 |
-
'LinkPreviewGenerator',
|
560 |
-
'LinkScan',
|
561 |
-
'LinksManager',
|
562 |
-
'LinkTiger',
|
563 |
-
'LinkWalker',
|
564 |
-
'Lipperhey',
|
565 |
-
'Litemage_walker',
|
566 |
-
'livedoor ScreenShot',
|
567 |
-
'LoadImpactRload',
|
568 |
-
'LongURL API',
|
569 |
-
'looksystems\.net',
|
570 |
-
'ltx71',
|
571 |
-
'lua-resty-http',
|
572 |
-
'lwp-request',
|
573 |
-
'lwp-trivial',
|
574 |
-
'LWP::Simple',
|
575 |
-
'lycos',
|
576 |
-
'LYT\.SR',
|
577 |
-
'mabontland',
|
578 |
-
'Mag-Net',
|
579 |
-
'MagpieRSS',
|
580 |
-
'Mail.Ru',
|
581 |
-
'MailChimp',
|
582 |
-
'Majestic12',
|
583 |
-
'makecontact\/',
|
584 |
-
'Mandrill',
|
585 |
-
'MapperCmd',
|
586 |
-
'marketinggrader',
|
587 |
-
'MarkMonitor',
|
588 |
-
'MarkWatch',
|
589 |
-
'Mass\ Downloader',
|
590 |
-
'masscan\/[0-9]',
|
591 |
-
'Mata\ Hari',
|
592 |
-
'Mediapartners-Google',
|
593 |
-
'mediawords',
|
594 |
-
'MegaIndex\.ru',
|
595 |
-
'Melvil Rawi\/',
|
596 |
-
'MergeFlow-PageReader',
|
597 |
-
'Metaspinner',
|
598 |
-
'MetaURI',
|
599 |
-
'MFC_Tear_Sample',
|
600 |
-
'Microsearch',
|
601 |
-
'Microsoft Office ',
|
602 |
-
'Microsoft Windows Network Diagnostics',
|
603 |
-
'Microsoft-WebDAV-MiniRedir',
|
604 |
-
'Microsoft\ Data\ Access',
|
605 |
-
'MIDown\ tool',
|
606 |
-
'MIIxpc',
|
607 |
-
'Mindjet',
|
608 |
-
'Miniature.io\/',
|
609 |
-
'Miniflux',
|
610 |
-
'Mister\ PiX',
|
611 |
-
'mixdata dot com',
|
612 |
-
'mixed-content-scan',
|
613 |
-
'mixnode',
|
614 |
-
'Mnogosearch',
|
615 |
-
'mogimogi',
|
616 |
-
'Mojeek',
|
617 |
-
'Mojolicious \(Perl\)',
|
618 |
-
'monitis',
|
619 |
-
'Monitority\/[0-9]',
|
620 |
-
'montastic',
|
621 |
-
'MonTools',
|
622 |
-
'Moreover',
|
623 |
-
'Morfeus\ Fucking\ Scanner',
|
624 |
-
'Morning Paper',
|
625 |
-
'MovableType',
|
626 |
-
'mowser',
|
627 |
-
'Mrcgiguy',
|
628 |
-
'MS\ Web\ Services\ Client\ Protocol',
|
629 |
-
'MSFrontPage',
|
630 |
-
'mShots',
|
631 |
-
'MuckRack\/',
|
632 |
-
'muhstik-scan',
|
633 |
-
'MVAClient',
|
634 |
-
'MxToolbox\/',
|
635 |
-
'nagios',
|
636 |
-
'Najdi\.si\/',
|
637 |
-
'Name\ Intelligence',
|
638 |
-
'Nameprotect',
|
639 |
-
'Navroad',
|
640 |
-
'NearSite',
|
641 |
-
'Needle',
|
642 |
-
'Nessus',
|
643 |
-
'Net\ Vampire',
|
644 |
-
'NetAnts',
|
645 |
-
'NETCRAFT',
|
646 |
-
'NetLyzer',
|
647 |
-
'NetMechanic',
|
648 |
-
'Netpursual',
|
649 |
-
'netresearch',
|
650 |
-
'NetShelter ContentScan',
|
651 |
-
'Netsparker',
|
652 |
-
'NetTrack',
|
653 |
-
'Netvibes',
|
654 |
-
'NetZIP',
|
655 |
-
'Neustar WPM',
|
656 |
-
'NeutrinoAPI',
|
657 |
-
'NewRelicPinger\/1.0 \(\d+\)',
|
658 |
-
'NewsBlur .*Finder',
|
659 |
-
'NewsGator',
|
660 |
-
'newsme',
|
661 |
-
'newspaper\/',
|
662 |
-
'Nexgate Ruby Client',
|
663 |
-
'NG-Search',
|
664 |
-
'Nibbler',
|
665 |
-
'NICErsPRO',
|
666 |
-
'Nikto',
|
667 |
-
'nineconnections\.com',
|
668 |
-
'NLNZ_IAHarvester',
|
669 |
-
'Nmap Scripting Engine',
|
670 |
-
'node-superagent',
|
671 |
-
'node-urllib\/',
|
672 |
-
'node\.io',
|
673 |
-
'nominet\.org\.uk',
|
674 |
-
'Norton-Safeweb',
|
675 |
-
'Notifixious',
|
676 |
-
'notifyninja',
|
677 |
-
'nuhk',
|
678 |
-
'nutch',
|
679 |
-
'Nuzzel',
|
680 |
-
'nWormFeedFinder',
|
681 |
-
'Nymesis',
|
682 |
-
'NYU',
|
683 |
-
'Ocelli\/[0-9]',
|
684 |
-
'Octopus',
|
685 |
-
'oegp',
|
686 |
-
'Offline Explorer',
|
687 |
-
'Offline\ Navigator',
|
688 |
-
'okhttp',
|
689 |
-
'Omea Reader',
|
690 |
-
'omgili',
|
691 |
-
'OMSC',
|
692 |
-
'Online Domain Tools',
|
693 |
-
'OpenCalaisSemanticProxy',
|
694 |
-
'Openfind',
|
695 |
-
'OpenLinkProfiler',
|
696 |
-
'Openstat\/',
|
697 |
-
'OpenVAS',
|
698 |
-
'Optimizer',
|
699 |
-
'Orbiter',
|
700 |
-
'OrgProbe\/[0-9]',
|
701 |
-
'orion-semantics',
|
702 |
-
'ow\.ly',
|
703 |
-
'Owler',
|
704 |
-
'ownCloud News',
|
705 |
-
'OxfordCloudService\/[0-9]',
|
706 |
-
'Page Analyzer',
|
707 |
-
'Page Valet',
|
708 |
-
'page2rss',
|
709 |
-
'page\ scorer',
|
710 |
-
'page_verifier',
|
711 |
-
'PageAnalyzer',
|
712 |
-
'PageGrabber',
|
713 |
-
'PagePeeker',
|
714 |
-
'PageScorer',
|
715 |
-
'Pagespeed\/[0-9]',
|
716 |
-
'Panopta',
|
717 |
-
'panscient',
|
718 |
-
'Papa\ Foto',
|
719 |
-
'parsijoo',
|
720 |
-
'Pavuk',
|
721 |
-
'PayPal IPN',
|
722 |
-
'pcBrowser',
|
723 |
-
'Pcore-HTTP',
|
724 |
-
'PEAR HTTPRequest',
|
725 |
-
'Pearltrees',
|
726 |
-
'PECL::HTTP',
|
727 |
-
'peerindex',
|
728 |
-
'Peew',
|
729 |
-
'PeoplePal',
|
730 |
-
'Perlu -',
|
731 |
-
'PhantomJS Screenshoter',
|
732 |
-
'PhantomJS\/',
|
733 |
-
'Photon\/',
|
734 |
-
'phpcrawl',
|
735 |
-
'phpservermon',
|
736 |
-
'Pi-Monster',
|
737 |
-
'Picscout',
|
738 |
-
'Picsearch',
|
739 |
-
'PictureFinder',
|
740 |
-
'Pimonster',
|
741 |
-
'ping\.blo\.gs\/',
|
742 |
-
'Pingability',
|
743 |
-
'Pingdom',
|
744 |
-
'Pingoscope',
|
745 |
-
'PingSpot',
|
746 |
-
'pinterest\.com',
|
747 |
-
'Pixray',
|
748 |
-
'Pizilla',
|
749 |
-
'PleaseCrawl',
|
750 |
-
'Ploetz \+ Zeller',
|
751 |
-
'Plukkie',
|
752 |
-
'plumanalytics',
|
753 |
-
'PocketParser',
|
754 |
-
'Pockey',
|
755 |
-
'POE-Component-Client-HTTP',
|
756 |
-
'Pompos',
|
757 |
-
'Porkbun',
|
758 |
-
'Port Monitor',
|
759 |
-
'postano',
|
760 |
-
'PostmanRuntime\/',
|
761 |
-
'PostPost',
|
762 |
-
'postrank',
|
763 |
-
'PowerPoint\/',
|
764 |
-
'Priceonomics Analysis Engine',
|
765 |
-
'PrintFriendly\.com',
|
766 |
-
'PritTorrent\/[0-9]',
|
767 |
-
'Prlog',
|
768 |
-
'probethenet',
|
769 |
-
'Project 25499',
|
770 |
-
'Promotion_Tools_www.searchenginepromotionhelp.com',
|
771 |
-
'prospectb2b',
|
772 |
-
'Protopage',
|
773 |
-
'ProWebWalker',
|
774 |
-
'proximic',
|
775 |
-
'PRTG Network Monitor',
|
776 |
-
'pshtt, https scanning',
|
777 |
-
'PTST ',
|
778 |
-
'PTST\/[0-9]+',
|
779 |
-
'Pulsepoint XT3 web scraper',
|
780 |
-
'Pump',
|
781 |
-
'Python-httplib2',
|
782 |
-
'python-requests',
|
783 |
-
'Python-urllib',
|
784 |
-
'Qirina Hurdler',
|
785 |
-
'QQDownload',
|
786 |
-
'QrafterPro',
|
787 |
-
'Qseero',
|
788 |
-
'Qualidator.com SiteAnalyzer',
|
789 |
-
'QueryN\ Metasearch',
|
790 |
-
'Quora Link Preview',
|
791 |
-
'Qwantify',
|
792 |
-
'Radian6',
|
793 |
-
'RankActive',
|
794 |
-
'RankFlex',
|
795 |
-
'RankSonicSiteAuditor',
|
796 |
-
'Readability',
|
797 |
-
'RealDownload',
|
798 |
-
'RealPlayer%20Downloader',
|
799 |
-
'RebelMouse',
|
800 |
-
'Recorder',
|
801 |
-
'RecurPost\/',
|
802 |
-
'redback\/',
|
803 |
-
'Redirect Checker Tool',
|
804 |
-
'ReederForMac',
|
805 |
-
'ReGet',
|
806 |
-
'RepoMonkey',
|
807 |
-
'request\.js',
|
808 |
-
'ResponseCodeTest\/[0-9]',
|
809 |
-
'RestSharp',
|
810 |
-
'Riddler',
|
811 |
-
'Rival IQ',
|
812 |
-
'Robosourcer',
|
813 |
-
'Robozilla\/[0-9]',
|
814 |
-
'ROI Hunter',
|
815 |
-
'RPT-HTTPClient',
|
816 |
-
'RSSOwl',
|
817 |
-
'safe-agent-scanner',
|
818 |
-
'SalesIntelligent',
|
819 |
-
'Saleslift',
|
820 |
-
'SauceNAO',
|
821 |
-
'SBIder',
|
822 |
-
'scalaj-http',
|
823 |
-
'scan\.lol',
|
824 |
-
'ScanAlert',
|
825 |
-
'Scoop',
|
826 |
-
'scooter',
|
827 |
-
'ScoutJet',
|
828 |
-
'ScoutURLMonitor',
|
829 |
-
'Scrapy',
|
830 |
-
'Screaming',
|
831 |
-
'ScreenShotService\/[0-9]',
|
832 |
-
'Scrubby',
|
833 |
-
'Search37\/',
|
834 |
-
'search\.thunderstone',
|
835 |
-
'Searchestate',
|
836 |
-
'SearchSight',
|
837 |
-
'Seeker',
|
838 |
-
'semanticdiscovery',
|
839 |
-
'semanticjuice',
|
840 |
-
'Semiocast HTTP client',
|
841 |
-
'Semrush',
|
842 |
-
'sentry\/',
|
843 |
-
'SEO Browser',
|
844 |
-
'Seo Servis',
|
845 |
-
'seo-nastroj.cz',
|
846 |
-
'Seobility',
|
847 |
-
'SEOCentro',
|
848 |
-
'SeoCheck',
|
849 |
-
'SEOkicks',
|
850 |
-
'Seomoz',
|
851 |
-
'SEOprofiler',
|
852 |
-
'SeopultContentAnalyzer',
|
853 |
-
'seoscanners',
|
854 |
-
'SEOstats',
|
855 |
-
'Server Density Service Monitoring',
|
856 |
-
'servernfo\.com',
|
857 |
-
'SetCronJob\/',
|
858 |
-
'sexsearcher',
|
859 |
-
'Seznam',
|
860 |
-
'Shelob',
|
861 |
-
'Shodan',
|
862 |
-
'Shoppimon Analyzer',
|
863 |
-
'ShoppimonAgent\/[0-9]',
|
864 |
-
'ShopWiki',
|
865 |
-
'ShortLinkTranslate',
|
866 |
-
'shrinktheweb',
|
867 |
-
'Sideqik',
|
868 |
-
'SilverReader',
|
869 |
-
'SimplePie',
|
870 |
-
'SimplyFast',
|
871 |
-
'Siphon',
|
872 |
-
'SISTRIX',
|
873 |
-
'Site-Shot\/',
|
874 |
-
'Site24x7',
|
875 |
-
'Site\ Sucker',
|
876 |
-
'SiteBar',
|
877 |
-
'Sitebeam',
|
878 |
-
'Sitebulb\/',
|
879 |
-
'SiteCondor',
|
880 |
-
'SiteExplorer',
|
881 |
-
'SiteGuardian',
|
882 |
-
'Siteimprove',
|
883 |
-
'SiteIndexed',
|
884 |
-
'Sitemap(s)? Generator',
|
885 |
-
'SiteMonitor',
|
886 |
-
'Siteshooter B0t',
|
887 |
-
'SiteSnagger',
|
888 |
-
'SiteSucker',
|
889 |
-
'SiteTruth',
|
890 |
-
'Sitevigil',
|
891 |
-
'sitexy\.com',
|
892 |
-
'SkypeUriPreview',
|
893 |
-
'Slack\/',
|
894 |
-
'slider\.com',
|
895 |
-
'slurp',
|
896 |
-
'SlySearch',
|
897 |
-
'SmartDownload',
|
898 |
-
'SMRF URL Expander',
|
899 |
-
'SMUrlExpander',
|
900 |
-
'Snake',
|
901 |
-
'Snappy',
|
902 |
-
'SniffRSS',
|
903 |
-
'sniptracker',
|
904 |
-
'Snoopy',
|
905 |
-
'SnowHaze Search',
|
906 |
-
'sogou web',
|
907 |
-
'SortSite',
|
908 |
-
'Sottopop',
|
909 |
-
'sovereign\.ai',
|
910 |
-
'SpaceBison',
|
911 |
-
'Spammen',
|
912 |
-
'Spanner',
|
913 |
-
'spaziodati',
|
914 |
-
'Specificfeeds',
|
915 |
-
'speedy',
|
916 |
-
'SPEng',
|
917 |
-
'Spinn3r',
|
918 |
-
'spray-can',
|
919 |
-
'Sprinklr ',
|
920 |
-
'spyonweb',
|
921 |
-
'sqlmap',
|
922 |
-
'Sqlworm',
|
923 |
-
'Sqworm',
|
924 |
-
'SSL Labs',
|
925 |
-
'ssl-tools',
|
926 |
-
'StackRambler',
|
927 |
-
'Statastico\/',
|
928 |
-
'StatusCake',
|
929 |
-
'Steeler',
|
930 |
-
'Stratagems Kumo',
|
931 |
-
'Stroke.cz',
|
932 |
-
'StudioFACA',
|
933 |
-
'suchen',
|
934 |
-
'Sucuri',
|
935 |
-
'summify',
|
936 |
-
'Super Monitoring',
|
937 |
-
'SuperHTTP',
|
938 |
-
'Surphace Scout',
|
939 |
-
'Suzuran',
|
940 |
-
'SwiteScraper',
|
941 |
-
'Symfony BrowserKit',
|
942 |
-
'Symfony2 BrowserKit',
|
943 |
-
'SynHttpClient-Built',
|
944 |
-
'Sysomos',
|
945 |
-
'sysscan',
|
946 |
-
'Szukacz',
|
947 |
-
'T0PHackTeam',
|
948 |
-
'tAkeOut',
|
949 |
-
'Tarantula\/',
|
950 |
-
'Taringa UGC',
|
951 |
-
'Teleport',
|
952 |
-
'Telesoft',
|
953 |
-
'Telesphoreo',
|
954 |
-
'Telesphorep',
|
955 |
-
'Tenon\.io',
|
956 |
-
'teoma',
|
957 |
-
'terrainformatica\.com',
|
958 |
-
'Test Certificate Info',
|
959 |
-
'Tetrahedron\/[0-9]',
|
960 |
-
'The Drop Reaper',
|
961 |
-
'The Expert HTML Source Viewer',
|
962 |
-
'The\ Intraformant',
|
963 |
-
'theinternetrules',
|
964 |
-
'TheNomad',
|
965 |
-
'theoldreader\.com',
|
966 |
-
'Thinklab',
|
967 |
-
'Thumbshots',
|
968 |
-
'ThumbSniper',
|
969 |
-
'TinEye',
|
970 |
-
'Tiny Tiny RSS',
|
971 |
-
'TLSProbe\/',
|
972 |
-
'Toata',
|
973 |
-
'topster',
|
974 |
-
'touche.com',
|
975 |
-
'Traackr.com',
|
976 |
-
'TrapitAgent',
|
977 |
-
'Trendiction',
|
978 |
-
'Trendsmap Resolver',
|
979 |
-
'trendspottr\.com',
|
980 |
-
'truwoGPS',
|
981 |
-
'TulipChain',
|
982 |
-
'Turingos',
|
983 |
-
'Turnitin',
|
984 |
-
'tweetedtimes\.com',
|
985 |
-
'Tweetminster',
|
986 |
-
'Tweezler\/',
|
987 |
-
'Twice',
|
988 |
-
'Twikle',
|
989 |
-
'Twingly',
|
990 |
-
'Twisted PageGetter',
|
991 |
-
'Typhoeus',
|
992 |
-
'ubermetrics-technologies',
|
993 |
-
'uclassify',
|
994 |
-
'uCrawlr\/',
|
995 |
-
'UdmSearch',
|
996 |
-
'UniversalFeedParser',
|
997 |
-
'Unshorten\.It\!\/[0-9]',
|
998 |
-
'Untiny',
|
999 |
-
'UnwindFetchor',
|
1000 |
-
'updated',
|
1001 |
-
'updown\.io daemon',
|
1002 |
-
'Upflow',
|
1003 |
-
'Uptimia',
|
1004 |
-
'URL Verifier',
|
1005 |
-
'URLChecker',
|
1006 |
-
'URLitor.com',
|
1007 |
-
'urlresolver',
|
1008 |
-
'Urlstat',
|
1009 |
-
'UrlTrends Ranking Updater',
|
1010 |
-
'URLy\ Warning',
|
1011 |
-
'URLy\.Warning',
|
1012 |
-
'Vacuum',
|
1013 |
-
'Vagabondo',
|
1014 |
-
'VB\ Project',
|
1015 |
-
'vBSEO',
|
1016 |
-
'VCI',
|
1017 |
-
'via ggpht\.com GoogleImageProxy',
|
1018 |
-
'VidibleScraper',
|
1019 |
-
'Virusdie',
|
1020 |
-
'visionutils',
|
1021 |
-
'vkShare',
|
1022 |
-
'VoidEYE',
|
1023 |
-
'Voil',
|
1024 |
-
'voltron',
|
1025 |
-
'voyager\/',
|
1026 |
-
'VSAgent\/[0-9]',
|
1027 |
-
'VSB-TUO\/[0-9]',
|
1028 |
-
'Vulnbusters Meter',
|
1029 |
-
'VYU2',
|
1030 |
-
'w3af\.org',
|
1031 |
-
'W3C-checklink',
|
1032 |
-
'W3C-mobileOK',
|
1033 |
-
'W3C_I18n-Checker',
|
1034 |
-
'W3C_Unicorn',
|
1035 |
-
'Wallpapers\/[0-9]+',
|
1036 |
-
'WallpapersHD',
|
1037 |
-
'wangling',
|
1038 |
-
'Wappalyzer',
|
1039 |
-
'WatchMouse',
|
1040 |
-
'WbSrch\/',
|
1041 |
-
'web-capture\.net',
|
1042 |
-
'Web-Monitoring',
|
1043 |
-
'Web-sniffer',
|
1044 |
-
'Web\ Auto',
|
1045 |
-
'Web\ Collage',
|
1046 |
-
'Web\ Enhancer',
|
1047 |
-
'Web\ Fetch',
|
1048 |
-
'Web\ Fuck',
|
1049 |
-
'Web\ Pix',
|
1050 |
-
'Web\ Sauger',
|
1051 |
-
'Web\ Sucker',
|
1052 |
-
'Webalta',
|
1053 |
-
'Webauskunft',
|
1054 |
-
'WebAuto',
|
1055 |
-
'WebCapture',
|
1056 |
-
'WebClient\/',
|
1057 |
-
'webcollage',
|
1058 |
-
'WebCookies',
|
1059 |
-
'WebCopier',
|
1060 |
-
'WebCorp',
|
1061 |
-
'WebDoc',
|
1062 |
-
'WebEnhancer',
|
1063 |
-
'WebFetch',
|
1064 |
-
'WebFuck',
|
1065 |
-
'WebGo\ IS',
|
1066 |
-
'WebImageCollector',
|
1067 |
-
'WebImages',
|
1068 |
-
'WebIndex',
|
1069 |
-
'webkit2png',
|
1070 |
-
'WebLeacher',
|
1071 |
-
'webmastercoffee',
|
1072 |
-
'webmon ',
|
1073 |
-
'WebPix',
|
1074 |
-
'WebReaper',
|
1075 |
-
'WebSauger',
|
1076 |
-
'webscreenie',
|
1077 |
-
'Webshag',
|
1078 |
-
'Webshot',
|
1079 |
-
'Website Analyzer\/',
|
1080 |
-
'Website\ Quester',
|
1081 |
-
'WebsiteExtractor',
|
1082 |
-
'websitepulse agent',
|
1083 |
-
'websitepulse[+ ]checker',
|
1084 |
-
'WebsiteQuester',
|
1085 |
-
'Websnapr\/',
|
1086 |
-
'Webster',
|
1087 |
-
'WebStripper',
|
1088 |
-
'WebSucker',
|
1089 |
-
'Webthumb\/[0-9]',
|
1090 |
-
'WebThumbnail',
|
1091 |
-
'WebWhacker',
|
1092 |
-
'WebZIP',
|
1093 |
-
'WeCrawlForThePeace',
|
1094 |
-
'WeLikeLinks',
|
1095 |
-
'WEPA',
|
1096 |
-
'WeSEE',
|
1097 |
-
'wf84',
|
1098 |
-
'wget',
|
1099 |
-
'WhatsApp',
|
1100 |
-
'WhatsMyIP',
|
1101 |
-
'WhatWeb',
|
1102 |
-
'WhereGoes\?',
|
1103 |
-
'Whibse',
|
1104 |
-
'WhoRunsCoinHive',
|
1105 |
-
'Whynder Magnet',
|
1106 |
-
'Windows-RSS-Platform',
|
1107 |
-
'WinHttpRequest',
|
1108 |
-
'wkhtmlto',
|
1109 |
-
'wmtips',
|
1110 |
-
'Woko',
|
1111 |
-
'Word\/',
|
1112 |
-
'WordPress\/',
|
1113 |
-
'wotbox',
|
1114 |
-
'WP Engine Install Performance API',
|
1115 |
-
'wpif',
|
1116 |
-
'wprecon\.com survey',
|
1117 |
-
'WPScan',
|
1118 |
-
'wscheck',
|
1119 |
-
'Wtrace',
|
1120 |
-
'WWW-Collector-E',
|
1121 |
-
'WWW-Mechanize',
|
1122 |
-
'WWW::Mechanize',
|
1123 |
-
'www\.monitor\.us',
|
1124 |
-
'WWWOFFLE',
|
1125 |
-
'x09Mozilla',
|
1126 |
-
'x22Mozilla',
|
1127 |
-
'XaxisSemanticsClassifier',
|
1128 |
-
'Xenu Link Sleuth',
|
1129 |
-
'XING-contenttabreceiver\/[0-9]',
|
1130 |
-
'XmlSitemapGenerator',
|
1131 |
-
'xpymep([0-9]?)\.exe',
|
1132 |
-
'Y!J-(ASR|BSC)',
|
1133 |
-
'Yaanb',
|
1134 |
-
'yacy',
|
1135 |
-
'Yahoo Ad monitoring',
|
1136 |
-
'Yahoo Link Preview',
|
1137 |
-
'YahooCacheSystem',
|
1138 |
-
'YahooYSMcm',
|
1139 |
-
'YandeG',
|
1140 |
-
'Yandex(?!Search)',
|
1141 |
-
'yanga',
|
1142 |
-
'yeti',
|
1143 |
-
'Yo-yo',
|
1144 |
-
'Yoleo Consumer',
|
1145 |
-
'yoogliFetchAgent',
|
1146 |
-
'YottaaMonitor',
|
1147 |
-
'Your-Website-Sucks\/[0-9]',
|
1148 |
-
'yourls\.org',
|
1149 |
-
'Zade',
|
1150 |
-
'Zao',
|
1151 |
-
'Zauba',
|
1152 |
-
'Zemanta Aggregator',
|
1153 |
-
'Zend\\\\Http\\\\Client',
|
1154 |
-
'Zend_Http_Client',
|
1155 |
-
'Zermelo',
|
1156 |
-
'Zeus',
|
1157 |
-
'zgrab',
|
1158 |
-
'ZnajdzFoto',
|
1159 |
-
'ZyBorg',
|
1160 |
-
'[a-z0-9\-_]*(bot|crawler|archiver|transcoder|spider|uptime|validator|fetcher)',
|
1161 |
-
);
|
1162 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of Crawler Detect - the web crawler detection library.
|
5 |
+
*
|
6 |
+
* (c) Mark Beech <m@rkbee.ch>
|
7 |
+
*
|
8 |
+
* This source file is subject to the MIT license that is bundled
|
9 |
+
* with this source code in the file LICENSE.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Jaybizzle\CrawlerDetect\Fixtures;
|
13 |
+
|
14 |
+
class Crawlers extends AbstractProvider
|
15 |
+
{
|
16 |
+
/**
|
17 |
+
* Array of regular expressions to match against the user agent.
|
18 |
+
*
|
19 |
+
* @var array
|
20 |
+
*/
|
21 |
+
protected $data = array(
|
22 |
+
'.*Java.*outbrain',
|
23 |
+
' YLT',
|
24 |
+
'008\/',
|
25 |
+
'192\.comAgent',
|
26 |
+
'2ip\.ru',
|
27 |
+
'404checker',
|
28 |
+
'404enemy',
|
29 |
+
'80legs',
|
30 |
+
'^b0t$',
|
31 |
+
'^bluefish ',
|
32 |
+
'^Calypso v\/',
|
33 |
+
'^COMODO DCV',
|
34 |
+
'^DangDang',
|
35 |
+
'^DavClnt',
|
36 |
+
'^FDM ',
|
37 |
+
'^git\/',
|
38 |
+
'^Goose\/',
|
39 |
+
'^Grabber',
|
40 |
+
'^HTTPClient\/',
|
41 |
+
'^Java\/',
|
42 |
+
'^Jeode\/',
|
43 |
+
'^Jetty\/',
|
44 |
+
'^Mget',
|
45 |
+
'^Microsoft URL Control',
|
46 |
+
'^NG\/[0-9\.]',
|
47 |
+
'^NING\/',
|
48 |
+
'^PHP\/[0-9]',
|
49 |
+
'^RMA\/',
|
50 |
+
'^Ruby|Ruby\/[0-9]',
|
51 |
+
'^scrutiny\/',
|
52 |
+
'^VSE\/[0-9]',
|
53 |
+
'^WordPress\.com',
|
54 |
+
'^XRL\/[0-9]',
|
55 |
+
'^ZmEu',
|
56 |
+
'a3logics\.in',
|
57 |
+
'A6-Indexer',
|
58 |
+
'a\.pr-cy\.ru',
|
59 |
+
'Abonti',
|
60 |
+
'Aboundex',
|
61 |
+
'aboutthedomain',
|
62 |
+
'Accoona-AI-Agent',
|
63 |
+
'acoon',
|
64 |
+
'acrylicapps\.com\/pulp',
|
65 |
+
'Acunetix',
|
66 |
+
'adbeat',
|
67 |
+
'AddThis',
|
68 |
+
'ADmantX',
|
69 |
+
'adressendeutschland',
|
70 |
+
'adscanner\/',
|
71 |
+
'Advanced Email Extractor v',
|
72 |
+
'agentslug',
|
73 |
+
'AHC',
|
74 |
+
'aihit',
|
75 |
+
'aiohttp\/',
|
76 |
+
'Airmail',
|
77 |
+
'akka-http\/',
|
78 |
+
'akula\/',
|
79 |
+
'alertra',
|
80 |
+
'alexa site audit',
|
81 |
+
'Alibaba\.Security\.Heimdall',
|
82 |
+
'Alligator',
|
83 |
+
'allloadin\.com',
|
84 |
+
'AllSubmitter',
|
85 |
+
'alyze\.info',
|
86 |
+
'amagit',
|
87 |
+
'Anarchie',
|
88 |
+
'AndroidDownloadManager',
|
89 |
+
'Anemone',
|
90 |
+
'AngleSharp\/',
|
91 |
+
'Ant\.com',
|
92 |
+
'Anturis Agent',
|
93 |
+
'AnyEvent-HTTP\/',
|
94 |
+
'Apache Droid',
|
95 |
+
'Apache-HttpAsyncClient\/',
|
96 |
+
'Apache-HttpClient\/',
|
97 |
+
'ApacheBench\/',
|
98 |
+
'Apexoo',
|
99 |
+
'APIs-Google',
|
100 |
+
'AportWorm\/[0-9]',
|
101 |
+
'AppBeat\/[0-9]',
|
102 |
+
'AppEngine-Google',
|
103 |
+
'Arachmo',
|
104 |
+
'arachnode',
|
105 |
+
'Arachnophilia',
|
106 |
+
'aria2',
|
107 |
+
'asafaweb.com',
|
108 |
+
'AskQuickly',
|
109 |
+
'ASPSeek',
|
110 |
+
'Asterias',
|
111 |
+
'Astute',
|
112 |
+
'asynchttp',
|
113 |
+
'Attach',
|
114 |
+
'autocite',
|
115 |
+
'Autonomy',
|
116 |
+
'axios\/',
|
117 |
+
'B-l-i-t-z-B-O-T',
|
118 |
+
'Backlink-Ceck',
|
119 |
+
'backlink-check',
|
120 |
+
'BackStreet',
|
121 |
+
'BackWeb',
|
122 |
+
'Bad-Neighborhood',
|
123 |
+
'Badass',
|
124 |
+
'baidu\.com',
|
125 |
+
'Bandit',
|
126 |
+
'BatchFTP',
|
127 |
+
'Battleztar\ Bazinga',
|
128 |
+
'baypup\/[0-9]',
|
129 |
+
'baypup\/colbert',
|
130 |
+
'BazQux',
|
131 |
+
'BBBike',
|
132 |
+
'BCKLINKS',
|
133 |
+
'BDFetch',
|
134 |
+
'BegunAdvertising\/',
|
135 |
+
'BigBozz',
|
136 |
+
'Bigfoot',
|
137 |
+
'biglotron',
|
138 |
+
'BingLocalSearch',
|
139 |
+
'BingPreview',
|
140 |
+
'binlar',
|
141 |
+
'biNu image cacher',
|
142 |
+
'Bitacle',
|
143 |
+
'biz_Directory',
|
144 |
+
'Black\ Hole',
|
145 |
+
'Blackboard Safeassign',
|
146 |
+
'BlackWidow',
|
147 |
+
'Bloglovin',
|
148 |
+
'BlogPulseLive',
|
149 |
+
'BlogSearch',
|
150 |
+
'Blogtrottr',
|
151 |
+
'BlowFish',
|
152 |
+
'Boardreader',
|
153 |
+
'boitho\.com-dc',
|
154 |
+
'BPImageWalker',
|
155 |
+
'Braintree-Webhooks',
|
156 |
+
'Branch Metrics API',
|
157 |
+
'Branch-Passthrough',
|
158 |
+
'Brandprotect',
|
159 |
+
'Brandwatch',
|
160 |
+
'Brodie\/',
|
161 |
+
'Browsershots',
|
162 |
+
'BUbiNG',
|
163 |
+
'Buck\/',
|
164 |
+
'Buddy',
|
165 |
+
'BuiltWith',
|
166 |
+
'Bullseye',
|
167 |
+
'BunnySlippers',
|
168 |
+
'Burf Search',
|
169 |
+
'Butterfly\/',
|
170 |
+
'BuzzSumo',
|
171 |
+
'CAAM\/[0-9]',
|
172 |
+
'CakePHP',
|
173 |
+
'Calculon',
|
174 |
+
'CapsuleChecker',
|
175 |
+
'CaretNail',
|
176 |
+
'catexplorador',
|
177 |
+
'cb crawl',
|
178 |
+
'CC Metadata Scaper',
|
179 |
+
'Cegbfeieh',
|
180 |
+
'Cerberian Drtrs',
|
181 |
+
'CERT\.at-Statistics-Survey',
|
182 |
+
'cg-eye',
|
183 |
+
'changedetection',
|
184 |
+
'ChangesMeter\/',
|
185 |
+
'Charlotte',
|
186 |
+
'CheckHost',
|
187 |
+
'checkprivacy',
|
188 |
+
'CherryPicker',
|
189 |
+
'ChinaClaw',
|
190 |
+
'Chirp\/[0-9]',
|
191 |
+
'chkme\.com',
|
192 |
+
'Chlooe',
|
193 |
+
'CirrusExplorer\/',
|
194 |
+
'CISPA Vulnerability Notification',
|
195 |
+
'Citoid',
|
196 |
+
'CJNetworkQuality',
|
197 |
+
'Clarsentia',
|
198 |
+
'clips\.ua\.ac\.be',
|
199 |
+
'Cloud\ mapping',
|
200 |
+
'CloudEndure',
|
201 |
+
'CloudFlare-AlwaysOnline',
|
202 |
+
'Cloudinary\/[0-9]',
|
203 |
+
'cmcm\.com',
|
204 |
+
'coccoc',
|
205 |
+
'cognitiveseo',
|
206 |
+
'colly -',
|
207 |
+
'CommaFeed',
|
208 |
+
'Commons-HttpClient',
|
209 |
+
'Comodo SSL Checker',
|
210 |
+
'contactbigdatafr',
|
211 |
+
'convera',
|
212 |
+
'copyright sheriff',
|
213 |
+
'CopyRightCheck',
|
214 |
+
'Copyscape',
|
215 |
+
'Cosmos4j\.feedback',
|
216 |
+
'Covario-IDS',
|
217 |
+
'CrawlForMe\/[0-9]',
|
218 |
+
'Crescent',
|
219 |
+
'cron-job\.org',
|
220 |
+
'Crowsnest',
|
221 |
+
'CSHttp',
|
222 |
+
'curb',
|
223 |
+
'Curious George',
|
224 |
+
'curl',
|
225 |
+
'cuwhois\/[0-9]',
|
226 |
+
'cybo\.com',
|
227 |
+
'DareBoost',
|
228 |
+
'DatabaseDriverMysqli',
|
229 |
+
'DataCha0s',
|
230 |
+
'DataparkSearch',
|
231 |
+
'dataprovider',
|
232 |
+
'Daum(oa)?[ \/][0-9]',
|
233 |
+
'Demon',
|
234 |
+
'DeuSu',
|
235 |
+
'developers\.google\.com\/\+\/web\/snippet\/',
|
236 |
+
'Devil',
|
237 |
+
'Digg',
|
238 |
+
'Digincore',
|
239 |
+
'DigitalPebble',
|
240 |
+
'Dirbuster',
|
241 |
+
'Dispatch\/',
|
242 |
+
'DittoSpyder',
|
243 |
+
'dlvr',
|
244 |
+
'DMBrowser',
|
245 |
+
'DNS-Tools Header-Analyzer',
|
246 |
+
'DNSPod-reporting',
|
247 |
+
'docoloc',
|
248 |
+
'Dolphin http client\/',
|
249 |
+
'DomainAppender',
|
250 |
+
'Donuts Content Explorer',
|
251 |
+
'dotMailer content retrieval',
|
252 |
+
'dotSemantic',
|
253 |
+
'downforeveryoneorjustme',
|
254 |
+
'Download\ Wonder',
|
255 |
+
'downnotifier\.com',
|
256 |
+
'DowntimeDetector',
|
257 |
+
'Dragonfly File Reader',
|
258 |
+
'Drip',
|
259 |
+
'drupact',
|
260 |
+
'Drupal \(\+http:\/\/drupal\.org\/\)',
|
261 |
+
'DTS\ Agent',
|
262 |
+
'dubaiindex',
|
263 |
+
'EARTHCOM',
|
264 |
+
'Easy-Thumb',
|
265 |
+
'EasyDL',
|
266 |
+
'Ebingbong',
|
267 |
+
'ec2linkfinder',
|
268 |
+
'eCairn-Grabber',
|
269 |
+
'eCatch',
|
270 |
+
'ECCP',
|
271 |
+
'echocrawl',
|
272 |
+
'eContext\/',
|
273 |
+
'Ecxi',
|
274 |
+
'EirGrabber',
|
275 |
+
'ElectricMonk',
|
276 |
+
'elefent',
|
277 |
+
'EMail Exractor',
|
278 |
+
'Email%20Extractor%20Lite',
|
279 |
+
'EMail\ Wolf',
|
280 |
+
'EmailWolf',
|
281 |
+
'Embed PHP Library',
|
282 |
+
'Embedly',
|
283 |
+
'europarchive\.org',
|
284 |
+
'evc-batch',
|
285 |
+
'EventMachine HttpClient',
|
286 |
+
'Evidon',
|
287 |
+
'Evrinid',
|
288 |
+
'ExactSearch',
|
289 |
+
'ExaleadCloudview',
|
290 |
+
'Excel\/',
|
291 |
+
'Exif Viewer',
|
292 |
+
'ExperianCrawlUK',
|
293 |
+
'Exploratodo',
|
294 |
+
'Express WebPictures',
|
295 |
+
'ExtractorPro',
|
296 |
+
'Extreme\ Picture\ Finder',
|
297 |
+
'EyeNetIE',
|
298 |
+
'ezooms',
|
299 |
+
'facebookexternalhit',
|
300 |
+
'facebookplatform',
|
301 |
+
'fairshare',
|
302 |
+
'Faraday v',
|
303 |
+
'fasthttp',
|
304 |
+
'Faveeo',
|
305 |
+
'Favicon downloader',
|
306 |
+
'FavOrg',
|
307 |
+
'Feed Wrangler',
|
308 |
+
'Feedbin',
|
309 |
+
'FeedBooster',
|
310 |
+
'FeedBucket',
|
311 |
+
'FeedBunch\/[0-9]',
|
312 |
+
'FeedBurner',
|
313 |
+
'FeedChecker',
|
314 |
+
'Feedly',
|
315 |
+
'Feedspot',
|
316 |
+
'Feedwind\/[0-9]',
|
317 |
+
'feeltiptop',
|
318 |
+
'Fetch API',
|
319 |
+
'Fetch\/[0-9]',
|
320 |
+
'Fever\/[0-9]',
|
321 |
+
'FHscan',
|
322 |
+
'Fimap',
|
323 |
+
'findlink',
|
324 |
+
'findthatfile',
|
325 |
+
'FlashGet',
|
326 |
+
'FlipboardBrowserProxy',
|
327 |
+
'FlipboardProxy',
|
328 |
+
'FlipboardRSS',
|
329 |
+
'fluffy',
|
330 |
+
'Flunky',
|
331 |
+
'flynxapp',
|
332 |
+
'forensiq',
|
333 |
+
'FoundSeoTool\/[0-9]',
|
334 |
+
'free thumbnails',
|
335 |
+
'Freeuploader',
|
336 |
+
'FreeWebMonitoring SiteChecker',
|
337 |
+
'Funnelback',
|
338 |
+
'G-i-g-a-b-o-t',
|
339 |
+
'g00g1e\.net',
|
340 |
+
'GAChecker',
|
341 |
+
'ganarvisitas\/[0-9]',
|
342 |
+
'geek-tools',
|
343 |
+
'Genderanalyzer',
|
344 |
+
'Genieo',
|
345 |
+
'GentleSource',
|
346 |
+
'Getintent',
|
347 |
+
'GetLinkInfo',
|
348 |
+
'getprismatic\.com',
|
349 |
+
'GetRight',
|
350 |
+
'GetURLInfo\/[0-9]',
|
351 |
+
'GetWeb',
|
352 |
+
'Ghost Inspector',
|
353 |
+
'GigablastOpenSource',
|
354 |
+
'GIS-LABS',
|
355 |
+
'github-camo',
|
356 |
+
'github\.com\/',
|
357 |
+
'Go [\d\.]* package http',
|
358 |
+
'Go http package',
|
359 |
+
'Go!Zilla',
|
360 |
+
'Go-Ahead-Got-It',
|
361 |
+
'Go-http-client',
|
362 |
+
'gobyus',
|
363 |
+
'gofetch',
|
364 |
+
'GomezAgent',
|
365 |
+
'gooblog',
|
366 |
+
'Goodzer\/[0-9]',
|
367 |
+
'Google favicon',
|
368 |
+
'Google Keyword Suggestion',
|
369 |
+
'Google Keyword Tool',
|
370 |
+
'Google Page Speed Insights',
|
371 |
+
'Google PP Default',
|
372 |
+
'Google Search Console',
|
373 |
+
'Google Web Preview',
|
374 |
+
'Google-Adwords',
|
375 |
+
'Google-Apps-Script',
|
376 |
+
'Google-Calendar-Importer',
|
377 |
+
'Google-HotelAdsVerifier',
|
378 |
+
'Google-HTTP-Java-Client',
|
379 |
+
'Google-Publisher-Plugin',
|
380 |
+
'Google-SearchByImage',
|
381 |
+
'Google-Site-Verification',
|
382 |
+
'Google-Structured-Data-Testing-Tool',
|
383 |
+
'Google-Youtube-Links',
|
384 |
+
'google_partner_monitoring',
|
385 |
+
'GoogleDocs',
|
386 |
+
'GoogleHC\/',
|
387 |
+
'GoogleProducer',
|
388 |
+
'Gookey',
|
389 |
+
'GoScraper',
|
390 |
+
'GoSpotCheck',
|
391 |
+
'GoSquared-Status-Checker',
|
392 |
+
'gosquared-thumbnailer',
|
393 |
+
'Gotit',
|
394 |
+
'GoZilla',
|
395 |
+
'grabify',
|
396 |
+
'GrabNet',
|
397 |
+
'Grafula',
|
398 |
+
'Grammarly',
|
399 |
+
'GrapeFX',
|
400 |
+
'grokkit',
|
401 |
+
'grouphigh',
|
402 |
+
'grub-client',
|
403 |
+
'gSOAP\/',
|
404 |
+
'GT::WWW',
|
405 |
+
'GTmetrix',
|
406 |
+
'GuzzleHttp',
|
407 |
+
'gvfs\/',
|
408 |
+
'HAA(A)?RTLAND http client',
|
409 |
+
'Haansoft',
|
410 |
+
'hackney\/',
|
411 |
+
'Hatena',
|
412 |
+
'Havij',
|
413 |
+
'hawkReader',
|
414 |
+
'HEADMasterSEO',
|
415 |
+
'HeartRails_Capture',
|
416 |
+
'help@dataminr\.com',
|
417 |
+
'heritrix',
|
418 |
+
'historious\/',
|
419 |
+
'hledejLevne\.cz\/[0-9]',
|
420 |
+
'Hloader',
|
421 |
+
'HMView',
|
422 |
+
'Holmes',
|
423 |
+
'HonesoSearchEngine\/',
|
424 |
+
'HootSuite Image proxy',
|
425 |
+
'Hootsuite-WebFeed\/[0-9]',
|
426 |
+
'hosterstats',
|
427 |
+
'HostTracker',
|
428 |
+
'ht:\/\/check',
|
429 |
+
'htdig',
|
430 |
+
'HTMLparser',
|
431 |
+
'http-get',
|
432 |
+
'HTTP-Header-Abfrage',
|
433 |
+
'http-kit',
|
434 |
+
'http-request\/',
|
435 |
+
'HTTP-Tiny',
|
436 |
+
'HTTP::Lite',
|
437 |
+
'http\.rb\/',
|
438 |
+
'HTTP_Compression_Test',
|
439 |
+
'http_request2',
|
440 |
+
'http_requester',
|
441 |
+
'HttpComponents',
|
442 |
+
'httphr',
|
443 |
+
'HTTPMon',
|
444 |
+
'httpscheck',
|
445 |
+
'httpssites_power',
|
446 |
+
'httpunit',
|
447 |
+
'HttpUrlConnection',
|
448 |
+
'httrack',
|
449 |
+
'huaweisymantec',
|
450 |
+
'HubPages.*crawlingpolicy',
|
451 |
+
'HubSpot ',
|
452 |
+
'Humanlinks',
|
453 |
+
'HyperZbozi.cz Feeder',
|
454 |
+
'i2kconnect\/',
|
455 |
+
'Iblog',
|
456 |
+
'ichiro',
|
457 |
+
'Id-search',
|
458 |
+
'IdeelaborPlagiaat',
|
459 |
+
'IDG Twitter Links Resolver',
|
460 |
+
'IDwhois\/[0-9]',
|
461 |
+
'Iframely',
|
462 |
+
'igdeSpyder',
|
463 |
+
'IlTrovatore',
|
464 |
+
'Image\ Fetch',
|
465 |
+
'Image\ Sucker',
|
466 |
+
'ImageEngine\/',
|
467 |
+
'Imagga',
|
468 |
+
'imgsizer',
|
469 |
+
'InAGist',
|
470 |
+
'inbound\.li parser',
|
471 |
+
'InDesign%20CC',
|
472 |
+
'Indy\ Library',
|
473 |
+
'infegy',
|
474 |
+
'infohelfer',
|
475 |
+
'InfoTekies',
|
476 |
+
'InfoWizards Reciprocal Link System PRO',
|
477 |
+
'inpwrd\.com',
|
478 |
+
'instabid',
|
479 |
+
'Instapaper',
|
480 |
+
'Integrity',
|
481 |
+
'integromedb',
|
482 |
+
'Intelliseek',
|
483 |
+
'InterGET',
|
484 |
+
'Internet\ Ninja',
|
485 |
+
'internet_archive',
|
486 |
+
'InternetSeer',
|
487 |
+
'internetVista monitor',
|
488 |
+
'intraVnews',
|
489 |
+
'IODC',
|
490 |
+
'IOI',
|
491 |
+
'iplabel',
|
492 |
+
'ips-agent',
|
493 |
+
'IPS\/[0-9]',
|
494 |
+
'IPWorks HTTP\/S Component',
|
495 |
+
'iqdb\/',
|
496 |
+
'Iria',
|
497 |
+
'Irokez',
|
498 |
+
'isitup\.org',
|
499 |
+
'iskanie',
|
500 |
+
'iZSearch',
|
501 |
+
'janforman',
|
502 |
+
'Jaunt\/',
|
503 |
+
'Jbrofuzz',
|
504 |
+
'Jersey\/',
|
505 |
+
'JetCar',
|
506 |
+
'Jigsaw',
|
507 |
+
'Jobboerse',
|
508 |
+
'JobFeed discovery',
|
509 |
+
'Jobg8 URL Monitor',
|
510 |
+
'jobo',
|
511 |
+
'Jobrapido',
|
512 |
+
'Jobsearch1\.5',
|
513 |
+
'JoinVision Generic',
|
514 |
+
'Joomla',
|
515 |
+
'Jorgee',
|
516 |
+
'JS-Kit',
|
517 |
+
'JustView',
|
518 |
+
'Kaspersky Lab CFR link resolver',
|
519 |
+
'KeepRight OpenStreetMap Checker',
|
520 |
+
'Kelny\/',
|
521 |
+
'Kerrigan\/',
|
522 |
+
'KeyCDN',
|
523 |
+
'Keyword Extractor',
|
524 |
+
'Keyword\ Density',
|
525 |
+
'Keywords Research',
|
526 |
+
'KickFire',
|
527 |
+
'KimonoLabs\/',
|
528 |
+
'Kml-Google',
|
529 |
+
'knows\.is',
|
530 |
+
'KOCMOHABT',
|
531 |
+
'kouio',
|
532 |
+
'kulturarw3',
|
533 |
+
'KumKie',
|
534 |
+
'L\.webis',
|
535 |
+
'Larbin',
|
536 |
+
'Lavf\/',
|
537 |
+
'LayeredExtractor',
|
538 |
+
'LeechFTP',
|
539 |
+
'LeechGet',
|
540 |
+
'letsencrypt',
|
541 |
+
'Lftp',
|
542 |
+
'LibVLC',
|
543 |
+
'LibWeb',
|
544 |
+
'Libwhisker',
|
545 |
+
'libwww',
|
546 |
+
'Licorne Image Snapshot',
|
547 |
+
'Liferea\/',
|
548 |
+
'Lightspeedsystems',
|
549 |
+
'Likse',
|
550 |
+
'link checker',
|
551 |
+
'Link Valet',
|
552 |
+
'link_thumbnailer',
|
553 |
+
'LinkAlarm\/',
|
554 |
+
'linkCheck',
|
555 |
+
'linkdex',
|
556 |
+
'LinkExaminer',
|
557 |
+
'linkfluence',
|
558 |
+
'linkpeek',
|
559 |
+
'LinkPreviewGenerator',
|
560 |
+
'LinkScan',
|
561 |
+
'LinksManager',
|
562 |
+
'LinkTiger',
|
563 |
+
'LinkWalker',
|
564 |
+
'Lipperhey',
|
565 |
+
'Litemage_walker',
|
566 |
+
'livedoor ScreenShot',
|
567 |
+
'LoadImpactRload',
|
568 |
+
'LongURL API',
|
569 |
+
'looksystems\.net',
|
570 |
+
'ltx71',
|
571 |
+
'lua-resty-http',
|
572 |
+
'lwp-request',
|
573 |
+
'lwp-trivial',
|
574 |
+
'LWP::Simple',
|
575 |
+
'lycos',
|
576 |
+
'LYT\.SR',
|
577 |
+
'mabontland',
|
578 |
+
'Mag-Net',
|
579 |
+
'MagpieRSS',
|
580 |
+
'Mail.Ru',
|
581 |
+
'MailChimp',
|
582 |
+
'Majestic12',
|
583 |
+
'makecontact\/',
|
584 |
+
'Mandrill',
|
585 |
+
'MapperCmd',
|
586 |
+
'marketinggrader',
|
587 |
+
'MarkMonitor',
|
588 |
+
'MarkWatch',
|
589 |
+
'Mass\ Downloader',
|
590 |
+
'masscan\/[0-9]',
|
591 |
+
'Mata\ Hari',
|
592 |
+
'Mediapartners-Google',
|
593 |
+
'mediawords',
|
594 |
+
'MegaIndex\.ru',
|
595 |
+
'Melvil Rawi\/',
|
596 |
+
'MergeFlow-PageReader',
|
597 |
+
'Metaspinner',
|
598 |
+
'MetaURI',
|
599 |
+
'MFC_Tear_Sample',
|
600 |
+
'Microsearch',
|
601 |
+
'Microsoft Office ',
|
602 |
+
'Microsoft Windows Network Diagnostics',
|
603 |
+
'Microsoft-WebDAV-MiniRedir',
|
604 |
+
'Microsoft\ Data\ Access',
|
605 |
+
'MIDown\ tool',
|
606 |
+
'MIIxpc',
|
607 |
+
'Mindjet',
|
608 |
+
'Miniature.io\/',
|
609 |
+
'Miniflux',
|
610 |
+
'Mister\ PiX',
|
611 |
+
'mixdata dot com',
|
612 |
+
'mixed-content-scan',
|
613 |
+
'mixnode',
|
614 |
+
'Mnogosearch',
|
615 |
+
'mogimogi',
|
616 |
+
'Mojeek',
|
617 |
+
'Mojolicious \(Perl\)',
|
618 |
+
'monitis',
|
619 |
+
'Monitority\/[0-9]',
|
620 |
+
'montastic',
|
621 |
+
'MonTools',
|
622 |
+
'Moreover',
|
623 |
+
'Morfeus\ Fucking\ Scanner',
|
624 |
+
'Morning Paper',
|
625 |
+
'MovableType',
|
626 |
+
'mowser',
|
627 |
+
'Mrcgiguy',
|
628 |
+
'MS\ Web\ Services\ Client\ Protocol',
|
629 |
+
'MSFrontPage',
|
630 |
+
'mShots',
|
631 |
+
'MuckRack\/',
|
632 |
+
'muhstik-scan',
|
633 |
+
'MVAClient',
|
634 |
+
'MxToolbox\/',
|
635 |
+
'nagios',
|
636 |
+
'Najdi\.si\/',
|
637 |
+
'Name\ Intelligence',
|
638 |
+
'Nameprotect',
|
639 |
+
'Navroad',
|
640 |
+
'NearSite',
|
641 |
+
'Needle',
|
642 |
+
'Nessus',
|
643 |
+
'Net\ Vampire',
|
644 |
+
'NetAnts',
|
645 |
+
'NETCRAFT',
|
646 |
+
'NetLyzer',
|
647 |
+
'NetMechanic',
|
648 |
+
'Netpursual',
|
649 |
+
'netresearch',
|
650 |
+
'NetShelter ContentScan',
|
651 |
+
'Netsparker',
|
652 |
+
'NetTrack',
|
653 |
+
'Netvibes',
|
654 |
+
'NetZIP',
|
655 |
+
'Neustar WPM',
|
656 |
+
'NeutrinoAPI',
|
657 |
+
'NewRelicPinger\/1.0 \(\d+\)',
|
658 |
+
'NewsBlur .*Finder',
|
659 |
+
'NewsGator',
|
660 |
+
'newsme',
|
661 |
+
'newspaper\/',
|
662 |
+
'Nexgate Ruby Client',
|
663 |
+
'NG-Search',
|
664 |
+
'Nibbler',
|
665 |
+
'NICErsPRO',
|
666 |
+
'Nikto',
|
667 |
+
'nineconnections\.com',
|
668 |
+
'NLNZ_IAHarvester',
|
669 |
+
'Nmap Scripting Engine',
|
670 |
+
'node-superagent',
|
671 |
+
'node-urllib\/',
|
672 |
+
'node\.io',
|
673 |
+
'nominet\.org\.uk',
|
674 |
+
'Norton-Safeweb',
|
675 |
+
'Notifixious',
|
676 |
+
'notifyninja',
|
677 |
+
'nuhk',
|
678 |
+
'nutch',
|
679 |
+
'Nuzzel',
|
680 |
+
'nWormFeedFinder',
|
681 |
+
'Nymesis',
|
682 |
+
'NYU',
|
683 |
+
'Ocelli\/[0-9]',
|
684 |
+
'Octopus',
|
685 |
+
'oegp',
|
686 |
+
'Offline Explorer',
|
687 |
+
'Offline\ Navigator',
|
688 |
+
'okhttp',
|
689 |
+
'Omea Reader',
|
690 |
+
'omgili',
|
691 |
+
'OMSC',
|
692 |
+
'Online Domain Tools',
|
693 |
+
'OpenCalaisSemanticProxy',
|
694 |
+
'Openfind',
|
695 |
+
'OpenLinkProfiler',
|
696 |
+
'Openstat\/',
|
697 |
+
'OpenVAS',
|
698 |
+
'Optimizer',
|
699 |
+
'Orbiter',
|
700 |
+
'OrgProbe\/[0-9]',
|
701 |
+
'orion-semantics',
|
702 |
+
'ow\.ly',
|
703 |
+
'Owler',
|
704 |
+
'ownCloud News',
|
705 |
+
'OxfordCloudService\/[0-9]',
|
706 |
+
'Page Analyzer',
|
707 |
+
'Page Valet',
|
708 |
+
'page2rss',
|
709 |
+
'page\ scorer',
|
710 |
+
'page_verifier',
|
711 |
+
'PageAnalyzer',
|
712 |
+
'PageGrabber',
|
713 |
+
'PagePeeker',
|
714 |
+
'PageScorer',
|
715 |
+
'Pagespeed\/[0-9]',
|
716 |
+
'Panopta',
|
717 |
+
'panscient',
|
718 |
+
'Papa\ Foto',
|
719 |
+
'parsijoo',
|
720 |
+
'Pavuk',
|
721 |
+
'PayPal IPN',
|
722 |
+
'pcBrowser',
|
723 |
+
'Pcore-HTTP',
|
724 |
+
'PEAR HTTPRequest',
|
725 |
+
'Pearltrees',
|
726 |
+
'PECL::HTTP',
|
727 |
+
'peerindex',
|
728 |
+
'Peew',
|
729 |
+
'PeoplePal',
|
730 |
+
'Perlu -',
|
731 |
+
'PhantomJS Screenshoter',
|
732 |
+
'PhantomJS\/',
|
733 |
+
'Photon\/',
|
734 |
+
'phpcrawl',
|
735 |
+
'phpservermon',
|
736 |
+
'Pi-Monster',
|
737 |
+
'Picscout',
|
738 |
+
'Picsearch',
|
739 |
+
'PictureFinder',
|
740 |
+
'Pimonster',
|
741 |
+
'ping\.blo\.gs\/',
|
742 |
+
'Pingability',
|
743 |
+
'Pingdom',
|
744 |
+
'Pingoscope',
|
745 |
+
'PingSpot',
|
746 |
+
'pinterest\.com',
|
747 |
+
'Pixray',
|
748 |
+
'Pizilla',
|
749 |
+
'PleaseCrawl',
|
750 |
+
'Ploetz \+ Zeller',
|
751 |
+
'Plukkie',
|
752 |
+
'plumanalytics',
|
753 |
+
'PocketParser',
|
754 |
+
'Pockey',
|
755 |
+
'POE-Component-Client-HTTP',
|
756 |
+
'Pompos',
|
757 |
+
'Porkbun',
|
758 |
+
'Port Monitor',
|
759 |
+
'postano',
|
760 |
+
'PostmanRuntime\/',
|
761 |
+
'PostPost',
|
762 |
+
'postrank',
|
763 |
+
'PowerPoint\/',
|
764 |
+
'Priceonomics Analysis Engine',
|
765 |
+
'PrintFriendly\.com',
|
766 |
+
'PritTorrent\/[0-9]',
|
767 |
+
'Prlog',
|
768 |
+
'probethenet',
|
769 |
+
'Project 25499',
|
770 |
+
'Promotion_Tools_www.searchenginepromotionhelp.com',
|
771 |
+
'prospectb2b',
|
772 |
+
'Protopage',
|
773 |
+
'ProWebWalker',
|
774 |
+
'proximic',
|
775 |
+
'PRTG Network Monitor',
|
776 |
+
'pshtt, https scanning',
|
777 |
+
'PTST ',
|
778 |
+
'PTST\/[0-9]+',
|
779 |
+
'Pulsepoint XT3 web scraper',
|
780 |
+
'Pump',
|
781 |
+
'Python-httplib2',
|
782 |
+
'python-requests',
|
783 |
+
'Python-urllib',
|
784 |
+
'Qirina Hurdler',
|
785 |
+
'QQDownload',
|
786 |
+
'QrafterPro',
|
787 |
+
'Qseero',
|
788 |
+
'Qualidator.com SiteAnalyzer',
|
789 |
+
'QueryN\ Metasearch',
|
790 |
+
'Quora Link Preview',
|
791 |
+
'Qwantify',
|
792 |
+
'Radian6',
|
793 |
+
'RankActive',
|
794 |
+
'RankFlex',
|
795 |
+
'RankSonicSiteAuditor',
|
796 |
+
'Readability',
|
797 |
+
'RealDownload',
|
798 |
+
'RealPlayer%20Downloader',
|
799 |
+
'RebelMouse',
|
800 |
+
'Recorder',
|
801 |
+
'RecurPost\/',
|
802 |
+
'redback\/',
|
803 |
+
'Redirect Checker Tool',
|
804 |
+
'ReederForMac',
|
805 |
+
'ReGet',
|
806 |
+
'RepoMonkey',
|
807 |
+
'request\.js',
|
808 |
+
'ResponseCodeTest\/[0-9]',
|
809 |
+
'RestSharp',
|
810 |
+
'Riddler',
|
811 |
+
'Rival IQ',
|
812 |
+
'Robosourcer',
|
813 |
+
'Robozilla\/[0-9]',
|
814 |
+
'ROI Hunter',
|
815 |
+
'RPT-HTTPClient',
|
816 |
+
'RSSOwl',
|
817 |
+
'safe-agent-scanner',
|
818 |
+
'SalesIntelligent',
|
819 |
+
'Saleslift',
|
820 |
+
'SauceNAO',
|
821 |
+
'SBIder',
|
822 |
+
'scalaj-http',
|
823 |
+
'scan\.lol',
|
824 |
+
'ScanAlert',
|
825 |
+
'Scoop',
|
826 |
+
'scooter',
|
827 |
+
'ScoutJet',
|
828 |
+
'ScoutURLMonitor',
|
829 |
+
'Scrapy',
|
830 |
+
'Screaming',
|
831 |
+
'ScreenShotService\/[0-9]',
|
832 |
+
'Scrubby',
|
833 |
+
'Search37\/',
|
834 |
+
'search\.thunderstone',
|
835 |
+
'Searchestate',
|
836 |
+
'SearchSight',
|
837 |
+
'Seeker',
|
838 |
+
'semanticdiscovery',
|
839 |
+
'semanticjuice',
|
840 |
+
'Semiocast HTTP client',
|
841 |
+
'Semrush',
|
842 |
+
'sentry\/',
|
843 |
+
'SEO Browser',
|
844 |
+
'Seo Servis',
|
845 |
+
'seo-nastroj.cz',
|
846 |
+
'Seobility',
|
847 |
+
'SEOCentro',
|
848 |
+
'SeoCheck',
|
849 |
+
'SEOkicks',
|
850 |
+
'Seomoz',
|
851 |
+
'SEOprofiler',
|
852 |
+
'SeopultContentAnalyzer',
|
853 |
+
'seoscanners',
|
854 |
+
'SEOstats',
|
855 |
+
'Server Density Service Monitoring',
|
856 |
+
'servernfo\.com',
|
857 |
+
'SetCronJob\/',
|
858 |
+
'sexsearcher',
|
859 |
+
'Seznam',
|
860 |
+
'Shelob',
|
861 |
+
'Shodan',
|
862 |
+
'Shoppimon Analyzer',
|
863 |
+
'ShoppimonAgent\/[0-9]',
|
864 |
+
'ShopWiki',
|
865 |
+
'ShortLinkTranslate',
|
866 |
+
'shrinktheweb',
|
867 |
+
'Sideqik',
|
868 |
+
'SilverReader',
|
869 |
+
'SimplePie',
|
870 |
+
'SimplyFast',
|
871 |
+
'Siphon',
|
872 |
+
'SISTRIX',
|
873 |
+
'Site-Shot\/',
|
874 |
+
'Site24x7',
|
875 |
+
'Site\ Sucker',
|
876 |
+
'SiteBar',
|
877 |
+
'Sitebeam',
|
878 |
+
'Sitebulb\/',
|
879 |
+
'SiteCondor',
|
880 |
+
'SiteExplorer',
|
881 |
+
'SiteGuardian',
|
882 |
+
'Siteimprove',
|
883 |
+
'SiteIndexed',
|
884 |
+
'Sitemap(s)? Generator',
|
885 |
+
'SiteMonitor',
|
886 |
+
'Siteshooter B0t',
|
887 |
+
'SiteSnagger',
|
888 |
+
'SiteSucker',
|
889 |
+
'SiteTruth',
|
890 |
+
'Sitevigil',
|
891 |
+
'sitexy\.com',
|
892 |
+
'SkypeUriPreview',
|
893 |
+
'Slack\/',
|
894 |
+
'slider\.com',
|
895 |
+
'slurp',
|
896 |
+
'SlySearch',
|
897 |
+
'SmartDownload',
|
898 |
+
'SMRF URL Expander',
|
899 |
+
'SMUrlExpander',
|
900 |
+
'Snake',
|
901 |
+
'Snappy',
|
902 |
+
'SniffRSS',
|
903 |
+
'sniptracker',
|
904 |
+
'Snoopy',
|
905 |
+
'SnowHaze Search',
|
906 |
+
'sogou web',
|
907 |
+
'SortSite',
|
908 |
+
'Sottopop',
|
909 |
+
'sovereign\.ai',
|
910 |
+
'SpaceBison',
|
911 |
+
'Spammen',
|
912 |
+
'Spanner',
|
913 |
+
'spaziodati',
|
914 |
+
'Specificfeeds',
|
915 |
+
'speedy',
|
916 |
+
'SPEng',
|
917 |
+
'Spinn3r',
|
918 |
+
'spray-can',
|
919 |
+
'Sprinklr ',
|
920 |
+
'spyonweb',
|
921 |
+
'sqlmap',
|
922 |
+
'Sqlworm',
|
923 |
+
'Sqworm',
|
924 |
+
'SSL Labs',
|
925 |
+
'ssl-tools',
|
926 |
+
'StackRambler',
|
927 |
+
'Statastico\/',
|
928 |
+
'StatusCake',
|
929 |
+
'Steeler',
|
930 |
+
'Stratagems Kumo',
|
931 |
+
'Stroke.cz',
|
932 |
+
'StudioFACA',
|
933 |
+
'suchen',
|
934 |
+
'Sucuri',
|
935 |
+
'summify',
|
936 |
+
'Super Monitoring',
|
937 |
+
'SuperHTTP',
|
938 |
+
'Surphace Scout',
|
939 |
+
'Suzuran',
|
940 |
+
'SwiteScraper',
|
941 |
+
'Symfony BrowserKit',
|
942 |
+
'Symfony2 BrowserKit',
|
943 |
+
'SynHttpClient-Built',
|
944 |
+
'Sysomos',
|
945 |
+
'sysscan',
|
946 |
+
'Szukacz',
|
947 |
+
'T0PHackTeam',
|
948 |
+
'tAkeOut',
|
949 |
+
'Tarantula\/',
|
950 |
+
'Taringa UGC',
|
951 |
+
'Teleport',
|
952 |
+
'Telesoft',
|
953 |
+
'Telesphoreo',
|
954 |
+
'Telesphorep',
|
955 |
+
'Tenon\.io',
|
956 |
+
'teoma',
|
957 |
+
'terrainformatica\.com',
|
958 |
+
'Test Certificate Info',
|
959 |
+
'Tetrahedron\/[0-9]',
|
960 |
+
'The Drop Reaper',
|
961 |
+
'The Expert HTML Source Viewer',
|
962 |
+
'The\ Intraformant',
|
963 |
+
'theinternetrules',
|
964 |
+
'TheNomad',
|
965 |
+
'theoldreader\.com',
|
966 |
+
'Thinklab',
|
967 |
+
'Thumbshots',
|
968 |
+
'ThumbSniper',
|
969 |
+
'TinEye',
|
970 |
+
'Tiny Tiny RSS',
|
971 |
+
'TLSProbe\/',
|
972 |
+
'Toata',
|
973 |
+
'topster',
|
974 |
+
'touche.com',
|
975 |
+
'Traackr.com',
|
976 |
+
'TrapitAgent',
|
977 |
+
'Trendiction',
|
978 |
+
'Trendsmap Resolver',
|
979 |
+
'trendspottr\.com',
|
980 |
+
'truwoGPS',
|
981 |
+
'TulipChain',
|
982 |
+
'Turingos',
|
983 |
+
'Turnitin',
|
984 |
+
'tweetedtimes\.com',
|
985 |
+
'Tweetminster',
|
986 |
+
'Tweezler\/',
|
987 |
+
'Twice',
|
988 |
+
'Twikle',
|
989 |
+
'Twingly',
|
990 |
+
'Twisted PageGetter',
|
991 |
+
'Typhoeus',
|
992 |
+
'ubermetrics-technologies',
|
993 |
+
'uclassify',
|
994 |
+
'uCrawlr\/',
|
995 |
+
'UdmSearch',
|
996 |
+
'UniversalFeedParser',
|
997 |
+
'Unshorten\.It\!\/[0-9]',
|
998 |
+
'Untiny',
|
999 |
+
'UnwindFetchor',
|
1000 |
+
'updated',
|
1001 |
+
'updown\.io daemon',
|
1002 |
+
'Upflow',
|
1003 |
+
'Uptimia',
|
1004 |
+
'URL Verifier',
|
1005 |
+
'URLChecker',
|
1006 |
+
'URLitor.com',
|
1007 |
+
'urlresolver',
|
1008 |
+
'Urlstat',
|
1009 |
+
'UrlTrends Ranking Updater',
|
1010 |
+
'URLy\ Warning',
|
1011 |
+
'URLy\.Warning',
|
1012 |
+
'Vacuum',
|
1013 |
+
'Vagabondo',
|
1014 |
+
'VB\ Project',
|
1015 |
+
'vBSEO',
|
1016 |
+
'VCI',
|
1017 |
+
'via ggpht\.com GoogleImageProxy',
|
1018 |
+
'VidibleScraper',
|
1019 |
+
'Virusdie',
|
1020 |
+
'visionutils',
|
1021 |
+
'vkShare',
|
1022 |
+
'VoidEYE',
|
1023 |
+
'Voil',
|
1024 |
+
'voltron',
|
1025 |
+
'voyager\/',
|
1026 |
+
'VSAgent\/[0-9]',
|
1027 |
+
'VSB-TUO\/[0-9]',
|
1028 |
+
'Vulnbusters Meter',
|
1029 |
+
'VYU2',
|
1030 |
+
'w3af\.org',
|
1031 |
+
'W3C-checklink',
|
1032 |
+
'W3C-mobileOK',
|
1033 |
+
'W3C_I18n-Checker',
|
1034 |
+
'W3C_Unicorn',
|
1035 |
+
'Wallpapers\/[0-9]+',
|
1036 |
+
'WallpapersHD',
|
1037 |
+
'wangling',
|
1038 |
+
'Wappalyzer',
|
1039 |
+
'WatchMouse',
|
1040 |
+
'WbSrch\/',
|
1041 |
+
'web-capture\.net',
|
1042 |
+
'Web-Monitoring',
|
1043 |
+
'Web-sniffer',
|
1044 |
+
'Web\ Auto',
|
1045 |
+
'Web\ Collage',
|
1046 |
+
'Web\ Enhancer',
|
1047 |
+
'Web\ Fetch',
|
1048 |
+
'Web\ Fuck',
|
1049 |
+
'Web\ Pix',
|
1050 |
+
'Web\ Sauger',
|
1051 |
+
'Web\ Sucker',
|
1052 |
+
'Webalta',
|
1053 |
+
'Webauskunft',
|
1054 |
+
'WebAuto',
|
1055 |
+
'WebCapture',
|
1056 |
+
'WebClient\/',
|
1057 |
+
'webcollage',
|
1058 |
+
'WebCookies',
|
1059 |
+
'WebCopier',
|
1060 |
+
'WebCorp',
|
1061 |
+
'WebDoc',
|
1062 |
+
'WebEnhancer',
|
1063 |
+
'WebFetch',
|
1064 |
+
'WebFuck',
|
1065 |
+
'WebGo\ IS',
|
1066 |
+
'WebImageCollector',
|
1067 |
+
'WebImages',
|
1068 |
+
'WebIndex',
|
1069 |
+
'webkit2png',
|
1070 |
+
'WebLeacher',
|
1071 |
+
'webmastercoffee',
|
1072 |
+
'webmon ',
|
1073 |
+
'WebPix',
|
1074 |
+
'WebReaper',
|
1075 |
+
'WebSauger',
|
1076 |
+
'webscreenie',
|
1077 |
+
'Webshag',
|
1078 |
+
'Webshot',
|
1079 |
+
'Website Analyzer\/',
|
1080 |
+
'Website\ Quester',
|
1081 |
+
'WebsiteExtractor',
|
1082 |
+
'websitepulse agent',
|
1083 |
+
'websitepulse[+ ]checker',
|
1084 |
+
'WebsiteQuester',
|
1085 |
+
'Websnapr\/',
|
1086 |
+
'Webster',
|
1087 |
+
'WebStripper',
|
1088 |
+
'WebSucker',
|
1089 |
+
'Webthumb\/[0-9]',
|
1090 |
+
'WebThumbnail',
|
1091 |
+
'WebWhacker',
|
1092 |
+
'WebZIP',
|
1093 |
+
'WeCrawlForThePeace',
|
1094 |
+
'WeLikeLinks',
|
1095 |
+
'WEPA',
|
1096 |
+
'WeSEE',
|
1097 |
+
'wf84',
|
1098 |
+
'wget',
|
1099 |
+
'WhatsApp',
|
1100 |
+
'WhatsMyIP',
|
1101 |
+
'WhatWeb',
|
1102 |
+
'WhereGoes\?',
|
1103 |
+
'Whibse',
|
1104 |
+
'WhoRunsCoinHive',
|
1105 |
+
'Whynder Magnet',
|
1106 |
+
'Windows-RSS-Platform',
|
1107 |
+
'WinHttpRequest',
|
1108 |
+
'wkhtmlto',
|
1109 |
+
'wmtips',
|
1110 |
+
'Woko',
|
1111 |
+
'Word\/',
|
1112 |
+
'WordPress\/',
|
1113 |
+
'wotbox',
|
1114 |
+
'WP Engine Install Performance API',
|
1115 |
+
'wpif',
|
1116 |
+
'wprecon\.com survey',
|
1117 |
+
'WPScan',
|
1118 |
+
'wscheck',
|
1119 |
+
'Wtrace',
|
1120 |
+
'WWW-Collector-E',
|
1121 |
+
'WWW-Mechanize',
|
1122 |
+
'WWW::Mechanize',
|
1123 |
+
'www\.monitor\.us',
|
1124 |
+
'WWWOFFLE',
|
1125 |
+
'x09Mozilla',
|
1126 |
+
'x22Mozilla',
|
1127 |
+
'XaxisSemanticsClassifier',
|
1128 |
+
'Xenu Link Sleuth',
|
1129 |
+
'XING-contenttabreceiver\/[0-9]',
|
1130 |
+
'XmlSitemapGenerator',
|
1131 |
+
'xpymep([0-9]?)\.exe',
|
1132 |
+
'Y!J-(ASR|BSC)',
|
1133 |
+
'Yaanb',
|
1134 |
+
'yacy',
|
1135 |
+
'Yahoo Ad monitoring',
|
1136 |
+
'Yahoo Link Preview',
|
1137 |
+
'YahooCacheSystem',
|
1138 |
+
'YahooYSMcm',
|
1139 |
+
'YandeG',
|
1140 |
+
'Yandex(?!Search)',
|
1141 |
+
'yanga',
|
1142 |
+
'yeti',
|
1143 |
+
'Yo-yo',
|
1144 |
+
'Yoleo Consumer',
|
1145 |
+
'yoogliFetchAgent',
|
1146 |
+
'YottaaMonitor',
|
1147 |
+
'Your-Website-Sucks\/[0-9]',
|
1148 |
+
'yourls\.org',
|
1149 |
+
'Zade',
|
1150 |
+
'Zao',
|
1151 |
+
'Zauba',
|
1152 |
+
'Zemanta Aggregator',
|
1153 |
+
'Zend\\\\Http\\\\Client',
|
1154 |
+
'Zend_Http_Client',
|
1155 |
+
'Zermelo',
|
1156 |
+
'Zeus',
|
1157 |
+
'zgrab',
|
1158 |
+
'ZnajdzFoto',
|
1159 |
+
'ZyBorg',
|
1160 |
+
'[a-z0-9\-_]*(bot|crawler|archiver|transcoder|spider|uptime|validator|fetcher)',
|
1161 |
+
);
|
1162 |
+
}
|
vendor/jaybizzle/crawler-detect/src/Fixtures/Exclusions.php
CHANGED
@@ -1,66 +1,66 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of Crawler Detect - the web crawler detection library.
|
5 |
-
*
|
6 |
-
* (c) Mark Beech <m@rkbee.ch>
|
7 |
-
*
|
8 |
-
* This source file is subject to the MIT license that is bundled
|
9 |
-
* with this source code in the file LICENSE.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Jaybizzle\CrawlerDetect\Fixtures;
|
13 |
-
|
14 |
-
class Exclusions extends AbstractProvider
|
15 |
-
{
|
16 |
-
/**
|
17 |
-
* List of strings to remove from the user agent before running the crawler regex
|
18 |
-
* Over a large list of user agents, this gives us about a 55% speed increase!
|
19 |
-
*
|
20 |
-
* @var array
|
21 |
-
*/
|
22 |
-
protected $data = array(
|
23 |
-
'Safari.[\d\.]*',
|
24 |
-
'Firefox.[\d\.]*',
|
25 |
-
'Chrome.[\d\.]*',
|
26 |
-
'Chromium.[\d\.]*',
|
27 |
-
'MSIE.[\d\.]',
|
28 |
-
'Opera\/[\d\.]*',
|
29 |
-
'Mozilla.[\d\.]*',
|
30 |
-
'AppleWebKit.[\d\.]*',
|
31 |
-
'Trident.[\d\.]*',
|
32 |
-
'Windows NT.[\d\.]*',
|
33 |
-
'Android [\d\.]*',
|
34 |
-
'Macintosh.',
|
35 |
-
'Ubuntu',
|
36 |
-
'Linux',
|
37 |
-
'[ ]Intel',
|
38 |
-
'Mac OS X [\d_]*',
|
39 |
-
'(like )?Gecko(.[\d\.]*)?',
|
40 |
-
'KHTML,',
|
41 |
-
'CriOS.[\d\.]*',
|
42 |
-
'CPU iPhone OS ([0-9_])* like Mac OS X',
|
43 |
-
'CPU OS ([0-9_])* like Mac OS X',
|
44 |
-
'iPod',
|
45 |
-
'compatible',
|
46 |
-
'x86_..',
|
47 |
-
'i686',
|
48 |
-
'x64',
|
49 |
-
'X11',
|
50 |
-
'rv:[\d\.]*',
|
51 |
-
'Version.[\d\.]*',
|
52 |
-
'WOW64',
|
53 |
-
'Win64',
|
54 |
-
'Dalvik.[\d\.]*',
|
55 |
-
' \.NET CLR [\d\.]*',
|
56 |
-
'Presto.[\d\.]*',
|
57 |
-
'Media Center PC',
|
58 |
-
'BlackBerry',
|
59 |
-
'Build',
|
60 |
-
'Opera Mini\/\d{1,2}\.\d{1,2}\.[\d\.]*\/\d{1,2}\.',
|
61 |
-
'Opera',
|
62 |
-
' \.NET[\d\.]*',
|
63 |
-
'cubot',
|
64 |
-
';', // Remove the following characters ;
|
65 |
-
);
|
66 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of Crawler Detect - the web crawler detection library.
|
5 |
+
*
|
6 |
+
* (c) Mark Beech <m@rkbee.ch>
|
7 |
+
*
|
8 |
+
* This source file is subject to the MIT license that is bundled
|
9 |
+
* with this source code in the file LICENSE.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Jaybizzle\CrawlerDetect\Fixtures;
|
13 |
+
|
14 |
+
class Exclusions extends AbstractProvider
|
15 |
+
{
|
16 |
+
/**
|
17 |
+
* List of strings to remove from the user agent before running the crawler regex
|
18 |
+
* Over a large list of user agents, this gives us about a 55% speed increase!
|
19 |
+
*
|
20 |
+
* @var array
|
21 |
+
*/
|
22 |
+
protected $data = array(
|
23 |
+
'Safari.[\d\.]*',
|
24 |
+
'Firefox.[\d\.]*',
|
25 |
+
'Chrome.[\d\.]*',
|
26 |
+
'Chromium.[\d\.]*',
|
27 |
+
'MSIE.[\d\.]',
|
28 |
+
'Opera\/[\d\.]*',
|
29 |
+
'Mozilla.[\d\.]*',
|
30 |
+
'AppleWebKit.[\d\.]*',
|
31 |
+
'Trident.[\d\.]*',
|
32 |
+
'Windows NT.[\d\.]*',
|
33 |
+
'Android [\d\.]*',
|
34 |
+
'Macintosh.',
|
35 |
+
'Ubuntu',
|
36 |
+
'Linux',
|
37 |
+
'[ ]Intel',
|
38 |
+
'Mac OS X [\d_]*',
|
39 |
+
'(like )?Gecko(.[\d\.]*)?',
|
40 |
+
'KHTML,',
|
41 |
+
'CriOS.[\d\.]*',
|
42 |
+
'CPU iPhone OS ([0-9_])* like Mac OS X',
|
43 |
+
'CPU OS ([0-9_])* like Mac OS X',
|
44 |
+
'iPod',
|
45 |
+
'compatible',
|
46 |
+
'x86_..',
|
47 |
+
'i686',
|
48 |
+
'x64',
|
49 |
+
'X11',
|
50 |
+
'rv:[\d\.]*',
|
51 |
+
'Version.[\d\.]*',
|
52 |
+
'WOW64',
|
53 |
+
'Win64',
|
54 |
+
'Dalvik.[\d\.]*',
|
55 |
+
' \.NET CLR [\d\.]*',
|
56 |
+
'Presto.[\d\.]*',
|
57 |
+
'Media Center PC',
|
58 |
+
'BlackBerry',
|
59 |
+
'Build',
|
60 |
+
'Opera Mini\/\d{1,2}\.\d{1,2}\.[\d\.]*\/\d{1,2}\.',
|
61 |
+
'Opera',
|
62 |
+
' \.NET[\d\.]*',
|
63 |
+
'cubot',
|
64 |
+
';', // Remove the following characters ;
|
65 |
+
);
|
66 |
+
}
|
vendor/jaybizzle/crawler-detect/src/Fixtures/Headers.php
CHANGED
@@ -1,37 +1,37 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of Crawler Detect - the web crawler detection library.
|
5 |
-
*
|
6 |
-
* (c) Mark Beech <m@rkbee.ch>
|
7 |
-
*
|
8 |
-
* This source file is subject to the MIT license that is bundled
|
9 |
-
* with this source code in the file LICENSE.
|
10 |
-
*/
|
11 |
-
|
12 |
-
namespace Jaybizzle\CrawlerDetect\Fixtures;
|
13 |
-
|
14 |
-
class Headers extends AbstractProvider
|
15 |
-
{
|
16 |
-
/**
|
17 |
-
* All possible HTTP headers that represent the user agent string.
|
18 |
-
*
|
19 |
-
* @var array
|
20 |
-
*/
|
21 |
-
protected $data = array(
|
22 |
-
// The default User-Agent string.
|
23 |
-
'HTTP_USER_AGENT',
|
24 |
-
// Header can occur on devices using Opera Mini.
|
25 |
-
'HTTP_X_OPERAMINI_PHONE_UA',
|
26 |
-
// Vodafone specific header: http://www.seoprinciple.com/mobile-web-community-still-angry-at-vodafone/24/
|
27 |
-
'HTTP_X_DEVICE_USER_AGENT',
|
28 |
-
'HTTP_X_ORIGINAL_USER_AGENT',
|
29 |
-
'HTTP_X_SKYFIRE_PHONE',
|
30 |
-
'HTTP_X_BOLT_PHONE_UA',
|
31 |
-
'HTTP_DEVICE_STOCK_UA',
|
32 |
-
'HTTP_X_UCBROWSER_DEVICE_UA',
|
33 |
-
// Sometimes, bots (especially Google) use a genuine user agent, but fill this header in with their email address
|
34 |
-
'HTTP_FROM',
|
35 |
-
'HTTP_X_SCANNER', // Seen in use by Netsparker
|
36 |
-
);
|
37 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of Crawler Detect - the web crawler detection library.
|
5 |
+
*
|
6 |
+
* (c) Mark Beech <m@rkbee.ch>
|
7 |
+
*
|
8 |
+
* This source file is subject to the MIT license that is bundled
|
9 |
+
* with this source code in the file LICENSE.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Jaybizzle\CrawlerDetect\Fixtures;
|
13 |
+
|
14 |
+
class Headers extends AbstractProvider
|
15 |
+
{
|
16 |
+
/**
|
17 |
+
* All possible HTTP headers that represent the user agent string.
|
18 |
+
*
|
19 |
+
* @var array
|
20 |
+
*/
|
21 |
+
protected $data = array(
|
22 |
+
// The default User-Agent string.
|
23 |
+
'HTTP_USER_AGENT',
|
24 |
+
// Header can occur on devices using Opera Mini.
|
25 |
+
'HTTP_X_OPERAMINI_PHONE_UA',
|
26 |
+
// Vodafone specific header: http://www.seoprinciple.com/mobile-web-community-still-angry-at-vodafone/24/
|
27 |
+
'HTTP_X_DEVICE_USER_AGENT',
|
28 |
+
'HTTP_X_ORIGINAL_USER_AGENT',
|
29 |
+
'HTTP_X_SKYFIRE_PHONE',
|
30 |
+
'HTTP_X_BOLT_PHONE_UA',
|
31 |
+
'HTTP_DEVICE_STOCK_UA',
|
32 |
+
'HTTP_X_UCBROWSER_DEVICE_UA',
|
33 |
+
// Sometimes, bots (especially Google) use a genuine user agent, but fill this header in with their email address
|
34 |
+
'HTTP_FROM',
|
35 |
+
'HTTP_X_SCANNER', // Seen in use by Netsparker
|
36 |
+
);
|
37 |
+
}
|
vendor/mobiledetect/mobiledetectlib/LICENSE.txt
CHANGED
@@ -1,48 +1,48 @@
|
|
1 |
-
MIT License
|
2 |
-
|
3 |
-
Copyright (c) <2011-2015> Serban Ghita, Nick Ilyin and contributors.
|
4 |
-
|
5 |
-
Permission is hereby granted, free of charge, to any person obtaining
|
6 |
-
a copy of this software and associated documentation files (the
|
7 |
-
"Software"), to deal in the Software without restriction, including
|
8 |
-
without limitation the rights to use, copy, modify, merge, publish,
|
9 |
-
distribute, sublicense, and/or sell copies of the Software, and to
|
10 |
-
permit persons to whom the Software is furnished to do so, subject to
|
11 |
-
the following conditions:
|
12 |
-
|
13 |
-
The above copyright notice and this permission notice shall be included
|
14 |
-
in all copies or substantial portions of the Software.
|
15 |
-
|
16 |
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
17 |
-
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18 |
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
19 |
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
20 |
-
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
21 |
-
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
22 |
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23 |
-
|
24 |
-
Developer’s Certificate of Origin 1.1
|
25 |
-
|
26 |
-
By making a contribution to this project, I certify that:
|
27 |
-
|
28 |
-
(a) The contribution was created in whole or in part by me and I
|
29 |
-
have the right to submit it under the open source license
|
30 |
-
indicated in the file; or
|
31 |
-
|
32 |
-
(b) The contribution is based upon previous work that, to the best
|
33 |
-
of my knowledge, is covered under an appropriate open source
|
34 |
-
license and I have the right under that license to submit that
|
35 |
-
work with modifications, whether created in whole or in part
|
36 |
-
by me, under the same open source license (unless I am
|
37 |
-
permitted to submit under a different license), as indicated
|
38 |
-
in the file; or
|
39 |
-
|
40 |
-
(c) The contribution was provided directly to me by some other
|
41 |
-
person who certified (a), (b) or (c) and I have not modified
|
42 |
-
it.
|
43 |
-
|
44 |
-
(d) I understand and agree that this project and the contribution
|
45 |
-
are public and that a record of the contribution (including all
|
46 |
-
personal information I submit with it, including my sign-off) is
|
47 |
-
maintained indefinitely and may be redistributed consistent with
|
48 |
-
this project or the open source license(s) involved.
|
1 |
+
MIT License
|
2 |
+
|
3 |
+
Copyright (c) <2011-2015> Serban Ghita, Nick Ilyin and contributors.
|
4 |
+
|
5 |
+
Permission is hereby granted, free of charge, to any person obtaining
|
6 |
+
a copy of this software and associated documentation files (the
|
7 |
+
"Software"), to deal in the Software without restriction, including
|
8 |
+
without limitation the rights to use, copy, modify, merge, publish,
|
9 |
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10 |
+
permit persons to whom the Software is furnished to do so, subject to
|
11 |
+
the following conditions:
|
12 |
+
|
13 |
+
The above copyright notice and this permission notice shall be included
|
14 |
+
in all copies or substantial portions of the Software.
|
15 |
+
|
16 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
17 |
+
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18 |
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
19 |
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
20 |
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
21 |
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
22 |
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23 |
+
|
24 |
+
Developer’s Certificate of Origin 1.1
|
25 |
+
|
26 |
+
By making a contribution to this project, I certify that:
|
27 |
+
|
28 |
+
(a) The contribution was created in whole or in part by me and I
|
29 |
+
have the right to submit it under the open source license
|
30 |
+
indicated in the file; or
|
31 |
+
|
32 |
+
(b) The contribution is based upon previous work that, to the best
|
33 |
+
of my knowledge, is covered under an appropriate open source
|
34 |
+
license and I have the right under that license to submit that
|
35 |
+
work with modifications, whether created in whole or in part
|
36 |
+
by me, under the same open source license (unless I am
|
37 |
+
permitted to submit under a different license), as indicated
|
38 |
+
in the file; or
|
39 |
+
|
40 |
+
(c) The contribution was provided directly to me by some other
|
41 |
+
person who certified (a), (b) or (c) and I have not modified
|
42 |
+
it.
|
43 |
+
|
44 |
+
(d) I understand and agree that this project and the contribution
|
45 |
+
are public and that a record of the contribution (including all
|
46 |
+
personal information I submit with it, including my sign-off) is
|
47 |
+
maintained indefinitely and may be redistributed consistent with
|
48 |
+
this project or the open source license(s) involved.
|
vendor/mobiledetect/mobiledetectlib/Mobile_Detect.php
CHANGED
@@ -1,1468 +1,1468 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Mobile Detect Library
|
4 |
-
* Motto: "Every business should have a mobile detection script to detect mobile readers"
|
5 |
-
*
|
6 |
-
* Mobile_Detect is a lightweight PHP class for detecting mobile devices (including tablets).
|
7 |
-
* It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.
|
8 |
-
*
|
9 |
-
* Homepage: http://mobiledetect.net
|
10 |
-
* GitHub: https://github.com/serbanghita/Mobile-Detect
|
11 |
-
* README: https://github.com/serbanghita/Mobile-Detect/blob/master/README.md
|
12 |
-
* CONTRIBUTING: https://github.com/serbanghita/Mobile-Detect/blob/master/docs/CONTRIBUTING.md
|
13 |
-
* KNOWN LIMITATIONS: https://github.com/serbanghita/Mobile-Detect/blob/master/docs/KNOWN_LIMITATIONS.md
|
14 |
-
* EXAMPLES: https://github.com/serbanghita/Mobile-Detect/wiki/Code-examples
|
15 |
-
*
|
16 |
-
* @license https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt MIT License
|
17 |
-
* @author Serban Ghita <serbanghita@gmail.com>
|
18 |
-
* @author Nick Ilyin <nick.ilyin@gmail.com>
|
19 |
-
* Original author: Victor Stanciu <vic.stanciu@gmail.com>
|
20 |
-
*
|
21 |
-
* @version 2.8.31
|
22 |
-
*/
|
23 |
-
class Mobile_Detect
|
24 |
-
{
|
25 |
-
/**
|
26 |
-
* Mobile detection type.
|
27 |
-
*
|
28 |
-
* @deprecated since version 2.6.9
|
29 |
-
*/
|
30 |
-
const DETECTION_TYPE_MOBILE = 'mobile';
|
31 |
-
|
32 |
-
/**
|
33 |
-
* Extended detection type.
|
34 |
-
*
|
35 |
-
* @deprecated since version 2.6.9
|
36 |
-
*/
|
37 |
-
const DETECTION_TYPE_EXTENDED = 'extended';
|
38 |
-
|
39 |
-
/**
|
40 |
-
* A frequently used regular expression to extract version #s.
|
41 |
-
*
|
42 |
-
* @deprecated since version 2.6.9
|
43 |
-
*/
|
44 |
-
const VER = '([\w._\+]+)';
|
45 |
-
|
46 |
-
/**
|
47 |
-
* Top-level device.
|
48 |
-
*/
|
49 |
-
const MOBILE_GRADE_A = 'A';
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Mid-level device.
|
53 |
-
*/
|
54 |
-
const MOBILE_GRADE_B = 'B';
|
55 |
-
|
56 |
-
/**
|
57 |
-
* Low-level device.
|
58 |
-
*/
|
59 |
-
const MOBILE_GRADE_C = 'C';
|
60 |
-
|
61 |
-
/**
|
62 |
-
* Stores the version number of the current release.
|
63 |
-
*/
|
64 |
-
const VERSION = '2.8.31';
|
65 |
-
|
66 |
-
/**
|
67 |
-
* A type for the version() method indicating a string return value.
|
68 |
-
*/
|
69 |
-
const VERSION_TYPE_STRING = 'text';
|
70 |
-
|
71 |
-
/**
|
72 |
-
* A type for the version() method indicating a float return value.
|
73 |
-
*/
|
74 |
-
const VERSION_TYPE_FLOAT = 'float';
|
75 |
-
|
76 |
-
/**
|
77 |
-
* A cache for resolved matches
|
78 |
-
* @var array
|
79 |
-
*/
|
80 |
-
protected $cache = array();
|
81 |
-
|
82 |
-
/**
|
83 |
-
* The User-Agent HTTP header is stored in here.
|
84 |
-
* @var string
|
85 |
-
*/
|
86 |
-
protected $userAgent = null;
|
87 |
-
|
88 |
-
/**
|
89 |
-
* HTTP headers in the PHP-flavor. So HTTP_USER_AGENT and SERVER_SOFTWARE.
|
90 |
-
* @var array
|
91 |
-
*/
|
92 |
-
protected $httpHeaders = array();
|
93 |
-
|
94 |
-
/**
|
95 |
-
* CloudFront headers. E.g. CloudFront-Is-Desktop-Viewer, CloudFront-Is-Mobile-Viewer & CloudFront-Is-Tablet-Viewer.
|
96 |
-
* @var array
|
97 |
-
*/
|
98 |
-
protected $cloudfrontHeaders = array();
|
99 |
-
|
100 |
-
/**
|
101 |
-
* The matching Regex.
|
102 |
-
* This is good for debug.
|
103 |
-
* @var string
|
104 |
-
*/
|
105 |
-
protected $matchingRegex = null;
|
106 |
-
|
107 |
-
/**
|
108 |
-
* The matches extracted from the regex expression.
|
109 |
-
* This is good for debug.
|
110 |
-
*
|
111 |
-
* @var string
|
112 |
-
*/
|
113 |
-
protected $matchesArray = null;
|
114 |
-
|
115 |
-
/**
|
116 |
-
* The detection type, using self::DETECTION_TYPE_MOBILE or self::DETECTION_TYPE_EXTENDED.
|
117 |
-
*
|
118 |
-
* @deprecated since version 2.6.9
|
119 |
-
*
|
120 |
-
* @var string
|
121 |
-
*/
|
122 |
-
protected $detectionType = self::DETECTION_TYPE_MOBILE;
|
123 |
-
|
124 |
-
/**
|
125 |
-
* HTTP headers that trigger the 'isMobile' detection
|
126 |
-
* to be true.
|
127 |
-
*
|
128 |
-
* @var array
|
129 |
-
*/
|
130 |
-
protected static $mobileHeaders = array(
|
131 |
-
|
132 |
-
'HTTP_ACCEPT' => array('matches' => array(
|
133 |
-
// Opera Mini; @reference: http://dev.opera.com/articles/view/opera-binary-markup-language/
|
134 |
-
'application/x-obml2d',
|
135 |
-
// BlackBerry devices.
|
136 |
-
'application/vnd.rim.html',
|
137 |
-
'text/vnd.wap.wml',
|
138 |
-
'application/vnd.wap.xhtml+xml'
|
139 |
-
)),
|
140 |
-
'HTTP_X_WAP_PROFILE' => null,
|
141 |
-
'HTTP_X_WAP_CLIENTID' => null,
|
142 |
-
'HTTP_WAP_CONNECTION' => null,
|
143 |
-
'HTTP_PROFILE' => null,
|
144 |
-
// Reported by Opera on Nokia devices (eg. C3).
|
145 |
-
'HTTP_X_OPERAMINI_PHONE_UA' => null,
|
146 |
-
'HTTP_X_NOKIA_GATEWAY_ID' => null,
|
147 |
-
'HTTP_X_ORANGE_ID' => null,
|
148 |
-
'HTTP_X_VODAFONE_3GPDPCONTEXT' => null,
|
149 |
-
'HTTP_X_HUAWEI_USERID' => null,
|
150 |
-
// Reported by Windows Smartphones.
|
151 |
-
'HTTP_UA_OS' => null,
|
152 |
-
// Reported by Verizon, Vodafone proxy system.
|
153 |
-
'HTTP_X_MOBILE_GATEWAY' => null,
|
154 |
-
// Seen this on HTC Sensation. SensationXE_Beats_Z715e.
|
155 |
-
'HTTP_X_ATT_DEVICEID' => null,
|
156 |
-
// Seen this on a HTC.
|
157 |
-
'HTTP_UA_CPU' => array('matches' => array('ARM')),
|
158 |
-
);
|
159 |
-
|
160 |
-
/**
|
161 |
-
* List of mobile devices (phones).
|
162 |
-
*
|
163 |
-
* @var array
|
164 |
-
*/
|
165 |
-
protected static $phoneDevices = array(
|
166 |
-
'iPhone' => '\biPhone\b|\biPod\b', // |\biTunes
|
167 |
-
'BlackBerry' => 'BlackBerry|\bBB10\b|rim[0-9]+',
|
168 |
-
'HTC' => 'HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\bEVO\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel',
|
169 |
-
'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6',
|
170 |
-
// @todo: Is 'Dell Streak' a tablet or a phone? ;)
|
171 |
-
'Dell' => 'Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b',
|
172 |
-
'Motorola' => 'Motorola|DROIDX|DROID BIONIC|\bDroid\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\bMoto E\b|XT1068|XT1092',
|
173 |
-
'Samsung' => '\bSamsung\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F',
|
174 |
-
'LG' => '\bLG\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323)',
|
175 |
-
'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533',
|
176 |
-
'Asus' => 'Asus.*Galaxy|PadFone.*Mobile',
|
177 |
-
'NokiaLumia' => 'Lumia [0-9]{3,4}',
|
178 |
-
// http://www.micromaxinfo.com/mobiles/smartphones
|
179 |
-
// Added because the codes might conflict with Acer Tablets.
|
180 |
-
'Micromax' => 'Micromax.*\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\b',
|
181 |
-
// @todo Complete the regex.
|
182 |
-
'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ;
|
183 |
-
'Vertu' => 'Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature', // Just for fun ;)
|
184 |
-
// http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA (PANTECH)
|
185 |
-
// Most of the VEGA devices are legacy. PANTECH seem to be newer devices based on Android.
|
186 |
-
'Pantech' => 'PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790',
|
187 |
-
// http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones.
|
188 |
-
'Fly' => 'IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250',
|
189 |
-
// http://fr.wikomobile.com
|
190 |
-
'Wiko' => 'KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM',
|
191 |
-
'iMobile' => 'i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)',
|
192 |
-
// Added simvalley mobile just for fun. They have some interesting devices.
|
193 |
-
// http://www.simvalley.fr/telephonie---gps-_22_telephonie-mobile_telephones_.html
|
194 |
-
'SimValley' => '\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\b',
|
195 |
-
// Wolfgang - a brand that is sold by Aldi supermarkets.
|
196 |
-
// http://www.wolfgangmobile.com/
|
197 |
-
'Wolfgang' => 'AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q',
|
198 |
-
'Alcatel' => 'Alcatel',
|
199 |
-
'Nintendo' => 'Nintendo 3DS',
|
200 |
-
// http://en.wikipedia.org/wiki/Amoi
|
201 |
-
'Amoi' => 'Amoi',
|
202 |
-
// http://en.wikipedia.org/wiki/INQ
|
203 |
-
'INQ' => 'INQ',
|
204 |
-
// @Tapatalk is a mobile app; http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039
|
205 |
-
'GenericPhone' => 'Tapatalk|PDA;|SAGEM|\bmmp\b|pocket|\bpsp\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\bwap\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser',
|
206 |
-
);
|
207 |
-
|
208 |
-
/**
|
209 |
-
* List of tablet devices.
|
210 |
-
*
|
211 |
-
* @var array
|
212 |
-
*/
|
213 |
-
protected static $tabletDevices = array(
|
214 |
-
// @todo: check for mobile friendly emails topic.
|
215 |
-
'iPad' => 'iPad|iPad.*Mobile',
|
216 |
-
// Removed |^.*Android.*Nexus(?!(?:Mobile).)*$
|
217 |
-
// @see #442
|
218 |
-
'NexusTablet' => 'Android.*Nexus[\s]+(7|9|10)',
|
219 |
-
'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285', // SCH-P709|SCH-P729|SM-T2558|GT-I9205 - Samsung Mega - treat them like a regular phone.
|
220 |
-
// http://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html
|
221 |
-
'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\b|Android.*Silk/[0-9.]+ like Chrome/[0-9.]+ (?!Mobile)',
|
222 |
-
// Only the Surface tablets with Windows RT are considered mobile.
|
223 |
-
// http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx
|
224 |
-
'SurfaceTablet' => 'Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)',
|
225 |
-
// http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=JfIQ7EN5lqMAAAEyDcJUDwMT
|
226 |
-
'HPTablet' => 'HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10',
|
227 |
-
// Watch out for PadFone, see #132.
|
228 |
-
// http://www.asus.com/de/Tablets_Mobile/Memo_Pad_Products/
|
229 |
-
'AsusTablet' => '^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\bK00F\b|\bK00C\b|\bK00E\b|\bK00L\b|TX201LA|ME176C|ME102A|\bM80TA\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\bME70C\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\bP027\b|\bP024\b',
|
230 |
-
'BlackBerryTablet' => 'PlayBook|RIM Tablet',
|
231 |
-
'HTCtablet' => 'HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410',
|
232 |
-
'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617',
|
233 |
-
'NookTablet' => 'Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2',
|
234 |
-
// http://www.acer.ro/ac/ro/RO/content/drivers
|
235 |
-
// http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer)
|
236 |
-
// http://us.acer.com/ac/en/US/content/group/tablets
|
237 |
-
// http://www.acer.de/ac/de/DE/content/models/tablets/
|
238 |
-
// Can conflict with Micromax and Motorola phones codes.
|
239 |
-
'AcerTablet' => 'Android.*; \b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\b|W3-810|\bA3-A10\b|\bA3-A11\b|\bA3-A20\b|\bA3-A30',
|
240 |
-
// http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/
|
241 |
-
// http://us.toshiba.com/tablets/tablet-finder
|
242 |
-
// http://www.toshiba.co.jp/regza/tablet/
|
243 |
-
'ToshibaTablet' => 'Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO',
|
244 |
-
// http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html
|
245 |
-
// http://www.lg.com/us/tablets
|
246 |
-
'LGTablet' => '\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\b',
|
247 |
-
'FujitsuTablet' => 'Android.*\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\b',
|
248 |
-
// Prestigio Tablets http://www.prestigio.com/support
|
249 |
-
'PrestigioTablet' => 'PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002',
|
250 |
-
// http://support.lenovo.com/en_GB/downloads/default.page?#
|
251 |
-
'LenovoTablet' => 'Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304F|TB-X304L|TB-8703F',
|
252 |
-
// http://www.dell.com/support/home/us/en/04/Products/tab_mob/tablets
|
253 |
-
'DellTablet' => 'Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7',
|
254 |
-
// http://www.yarvik.com/en/matrix/tablets/
|
255 |
-
'YarvikTablet' => 'Android.*\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\b',
|
256 |
-
'MedionTablet' => 'Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB',
|
257 |
-
'ArnovaTablet' => '97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2',
|
258 |
-
// http://www.intenso.de/kategorie_en.php?kategorie=33
|
259 |
-
// @todo: http://www.nbhkdz.com/read/b8e64202f92a2df129126bff.html - investigate
|
260 |
-
'IntensoTablet' => 'INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004',
|
261 |
-
// IRU.ru Tablets http://www.iru.ru/catalog/soho/planetable/
|
262 |
-
'IRUTablet' => 'M702pro',
|
263 |
-
'MegafonTablet' => 'MegaFon V9|\bZTE V9\b|Android.*\bMT7A\b',
|
264 |
-
// http://www.e-boda.ro/tablete-pc.html
|
265 |
-
'EbodaTablet' => 'E-Boda (Supreme|Impresspeed|Izzycomm|Essential)',
|
266 |
-
// http://www.allview.ro/produse/droseries/lista-tablete-pc/
|
267 |
-
'AllViewTablet' => 'Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)',
|
268 |
-
// http://wiki.archosfans.com/index.php?title=Main_Page
|
269 |
-
// @note Rewrite the regex format after we add more UAs.
|
270 |
-
'ArchosTablet' => '\b(101G9|80G9|A101IT)\b|Qilive 97R|Archos5|\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\b',
|
271 |
-
// http://www.ainol.com/plugin.php?identifier=ainol&module=product
|
272 |
-
'AinolTablet' => 'NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark',
|
273 |
-
'NokiaLumiaTablet' => 'Lumia 2520',
|
274 |
-
// @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER
|
275 |
-
// Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser
|
276 |
-
// http://www.sony.jp/support/tablet/
|
277 |
-
'SonyTablet' => 'Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP612|SOT31',
|
278 |
-
// http://www.support.philips.com/support/catalog/worldproducts.jsp?userLanguage=en&userCountry=cn&categoryid=3G_LTE_TABLET_SU_CN_CARE&title=3G%20tablets%20/%20LTE%20range&_dyncharset=UTF-8
|
279 |
-
'PhilipsTablet' => '\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\b',
|
280 |
-
// db + http://www.cube-tablet.com/buy-products.html
|
281 |
-
'CubeTablet' => 'Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT',
|
282 |
-
// http://www.cobyusa.com/?p=pcat&pcat_id=3001
|
283 |
-
'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010',
|
284 |
-
// http://www.match.net.cn/products.asp
|
285 |
-
'MIDTablet' => 'M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10',
|
286 |
-
// http://www.msi.com/support
|
287 |
-
// @todo Research the Windows Tablets.
|
288 |
-
'MSITablet' => 'MSI \b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\b',
|
289 |
-
// @todo http://www.kyoceramobile.com/support/drivers/
|
290 |
-
// 'KyoceraTablet' => null,
|
291 |
-
// @todo http://intexuae.com/index.php/category/mobile-devices/tablets-products/
|
292 |
-
// 'IntextTablet' => null,
|
293 |
-
// http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets)
|
294 |
-
// http://www.imp3.net/14/show.php?itemid=20454
|
295 |
-
'SMiTTablet' => 'Android.*(\bMID\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)',
|
296 |
-
// http://www.rock-chips.com/index.php?do=prod&pid=2
|
297 |
-
'RockChipTablet' => 'Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A',
|
298 |
-
// http://www.fly-phone.com/devices/tablets/ ; http://www.fly-phone.com/service/
|
299 |
-
'FlyTablet' => 'IQ310|Fly Vision',
|
300 |
-
// http://www.bqreaders.com/gb/tablets-prices-sale.html
|
301 |
-
'bqTablet' => 'Android.*(bq)?.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))|Maxwell.*Lite|Maxwell.*Plus',
|
302 |
-
// http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290
|
303 |
-
// http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets)
|
304 |
-
'HuaweiTablet' => 'MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L',
|
305 |
-
// Nec or Medias Tab
|
306 |
-
'NecTablet' => '\bN-06D|\bN-08D',
|
307 |
-
// Pantech Tablets: http://www.pantechusa.com/phones/
|
308 |
-
'PantechTablet' => 'Pantech.*P4100',
|
309 |
-
// Broncho Tablets: http://www.broncho.cn/ (hard to find)
|
310 |
-
'BronchoTablet' => 'Broncho.*(N701|N708|N802|a710)',
|
311 |
-
// http://versusuk.com/support.html
|
312 |
-
'VersusTablet' => 'TOUCHPAD.*[78910]|\bTOUCHTAB\b',
|
313 |
-
// http://www.zync.in/index.php/our-products/tablet-phablets
|
314 |
-
'ZyncTablet' => 'z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900',
|
315 |
-
// http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/
|
316 |
-
'PositivoTablet' => 'TB07STA|TB10STA|TB07FTA|TB10FTA',
|
317 |
-
// https://www.nabitablet.com/
|
318 |
-
'NabiTablet' => 'Android.*\bNabi',
|
319 |
-
'KoboTablet' => 'Kobo Touch|\bK080\b|\bVox\b Build|\bArc\b Build',
|
320 |
-
// French Danew Tablets http://www.danew.com/produits-tablette.php
|
321 |
-
'DanewTablet' => 'DSlide.*\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\b',
|
322 |
-
// Texet Tablets and Readers http://www.texet.ru/tablet/
|
323 |
-
'TexetTablet' => 'NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE',
|
324 |
-
// Avoid detecting 'PLAYSTATION 3' as mobile.
|
325 |
-
'PlaystationTablet' => 'Playstation.*(Portable|Vita)',
|
326 |
-
// http://www.trekstor.de/surftabs.html
|
327 |
-
'TrekstorTablet' => 'ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab',
|
328 |
-
// http://www.pyleaudio.com/Products.aspx?%2fproducts%2fPersonal-Electronics%2fTablets
|
329 |
-
'PyleAudioTablet' => '\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\b',
|
330 |
-
// http://www.advandigital.com/index.php?link=content-product&jns=JP001
|
331 |
-
// because of the short codenames we have to include whitespaces to reduce the possible conflicts.
|
332 |
-
'AdvanTablet' => 'Android.* \b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\b ',
|
333 |
-
// http://www.danytech.com/category/tablet-pc
|
334 |
-
'DanyTechTablet' => 'Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1',
|
335 |
-
// http://www.galapad.net/product.html
|
336 |
-
'GalapadTablet' => 'Android.*\bG1\b',
|
337 |
-
// http://www.micromaxinfo.com/tablet/funbook
|
338 |
-
'MicromaxTablet' => 'Funbook|Micromax.*\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\b',
|
339 |
-
// http://www.karbonnmobiles.com/products_tablet.php
|
340 |
-
'KarbonnTablet' => 'Android.*\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\b',
|
341 |
-
// http://www.myallfine.com/Products.asp
|
342 |
-
'AllFineTablet' => 'Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide',
|
343 |
-
// http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr=
|
344 |
-
'PROSCANTablet' => '\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\b',
|
345 |
-
// http://www.yonesnav.com/products/products.php
|
346 |
-
'YONESTablet' => 'BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026',
|
347 |
-
// http://www.cjshowroom.com/eproducts.aspx?classcode=004001001
|
348 |
-
// China manufacturer makes tablets for different small brands (eg. http://www.zeepad.net/index.html)
|
349 |
-
'ChangJiaTablet' => 'TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503',
|
350 |
-
// http://www.gloryunion.cn/products.asp
|
351 |
-
// http://www.allwinnertech.com/en/apply/mobile.html
|
352 |
-
// http://www.ptcl.com.pk/pd_content.php?pd_id=284 (EVOTAB)
|
353 |
-
// @todo: Softwiner tablets?
|
354 |
-
// aka. Cute or Cool tablets. Not sure yet, must research to avoid collisions.
|
355 |
-
'GUTablet' => 'TX-A1301|TX-M9002|Q702|kf026', // A12R|D75A|D77|D79|R83|A95|A106C|R15|A75|A76|D71|D72|R71|R73|R77|D82|R85|D92|A97|D92|R91|A10F|A77F|W71F|A78F|W78F|W81F|A97F|W91F|W97F|R16G|C72|C73E|K72|K73|R96G
|
356 |
-
// http://www.pointofview-online.com/showroom.php?shop_mode=product_listing&category_id=118
|
357 |
-
'PointOfViewTablet' => 'TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10',
|
358 |
-
// http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/
|
359 |
-
// @todo: add more tests.
|
360 |
-
'OvermaxTablet' => 'OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027',
|
361 |
-
// http://hclmetablet.com/India/index.php
|
362 |
-
'HCLTablet' => 'HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync',
|
363 |
-
// http://www.edigital.hu/Tablet_es_e-book_olvaso/Tablet-c18385.html
|
364 |
-
'DPSTablet' => 'DPS Dream 9|DPS Dual 7',
|
365 |
-
// http://www.visture.com/index.asp
|
366 |
-
'VistureTablet' => 'V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10',
|
367 |
-
// http://www.mijncresta.nl/tablet
|
368 |
-
'CrestaTablet' => 'CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989',
|
369 |
-
// MediaTek - http://www.mediatek.com/_en/01_products/02_proSys.php?cata_sn=1&cata1_sn=1&cata2_sn=309
|
370 |
-
'MediatekTablet' => '\bMT8125|MT8389|MT8135|MT8377\b',
|
371 |
-
// Concorde tab
|
372 |
-
'ConcordeTablet' => 'Concorde([ ]+)?Tab|ConCorde ReadMan',
|
373 |
-
// GoClever Tablets - http://www.goclever.com/uk/products,c1/tablet,c5/
|
374 |
-
'GoCleverTablet' => 'GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042',
|
375 |
-
// Modecom Tablets - http://www.modecom.eu/tablets/portal/
|
376 |
-
'ModecomTablet' => 'FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003',
|
377 |
-
// Vonino Tablets - http://www.vonino.eu/tablets
|
378 |
-
'VoninoTablet' => '\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\bQ8\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\b',
|
379 |
-
// ECS Tablets - http://www.ecs.com.tw/ECSWebSite/Product/Product_Tablet_List.aspx?CategoryID=14&MenuID=107&childid=M_107&LanID=0
|
380 |
-
'ECSTablet' => 'V07OT2|TM105A|S10OT1|TR10CS1',
|
381 |
-
// Storex Tablets - http://storex.fr/espace_client/support.html
|
382 |
-
// @note: no need to add all the tablet codes since they are guided by the first regex.
|
383 |
-
'StorexTablet' => 'eZee[_\']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab',
|
384 |
-
// Generic Vodafone tablets.
|
385 |
-
'VodafoneTablet' => 'SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497',
|
386 |
-
// French tablets - Essentiel B http://www.boulanger.fr/tablette_tactile_e-book/tablette_tactile_essentiel_b/cl_68908.htm?multiChoiceToDelete=brand&mc_brand=essentielb
|
387 |
-
// Aka: http://www.essentielb.fr/
|
388 |
-
'EssentielBTablet' => 'Smart[ \']?TAB[ ]+?[0-9]+|Family[ \']?TAB2',
|
389 |
-
// Ross & Moor - http://ross-moor.ru/
|
390 |
-
'RossMoorTablet' => 'RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711',
|
391 |
-
// i-mobile http://product.i-mobilephone.com/Mobile_Device
|
392 |
-
'iMobileTablet' => 'i-mobile i-note',
|
393 |
-
// http://www.tolino.de/de/vergleichen/
|
394 |
-
'TolinoTablet' => 'tolino tab [0-9.]+|tolino shine',
|
395 |
-
// AudioSonic - a Kmart brand
|
396 |
-
// http://www.kmart.com.au/webapp/wcs/stores/servlet/Search?langId=-1&storeId=10701&catalogId=10001&categoryId=193001&pageSize=72¤tPage=1&searchCategory=193001%2b4294965664&sortBy=p_MaxPrice%7c1
|
397 |
-
'AudioSonicTablet' => '\bC-22Q|T7-QC|T-17B|T-17P\b',
|
398 |
-
// AMPE Tablets - http://www.ampe.com.my/product-category/tablets/
|
399 |
-
// @todo: add them gradually to avoid conflicts.
|
400 |
-
'AMPETablet' => 'Android.* A78 ',
|
401 |
-
// Skk Mobile - http://skkmobile.com.ph/product_tablets.php
|
402 |
-
'SkkTablet' => 'Android.* (SKYPAD|PHOENIX|CYCLOPS)',
|
403 |
-
// Tecno Mobile (only tablet) - http://www.tecno-mobile.com/index.php/product?filterby=smart&list_order=all&page=1
|
404 |
-
'TecnoTablet' => 'TECNO P9',
|
405 |
-
// JXD (consoles & tablets) - http://jxd.hk/products.asp?selectclassid=009008&clsid=3
|
406 |
-
'JXDTablet' => 'Android.* \b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\b',
|
407 |
-
// i-Joy tablets - http://www.i-joy.es/en/cat/products/tablets/
|
408 |
-
'iJoyTablet' => 'Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)',
|
409 |
-
// http://www.intracon.eu/tablet
|
410 |
-
'FX2Tablet' => 'FX2 PAD7|FX2 PAD10',
|
411 |
-
// http://www.xoro.de/produkte/
|
412 |
-
// @note: Might be the same brand with 'Simply tablets'
|
413 |
-
'XoroTablet' => 'KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151',
|
414 |
-
// http://www1.viewsonic.com/products/computing/tablets/
|
415 |
-
'ViewsonicTablet' => 'ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a',
|
416 |
-
// https://www.verizonwireless.com/tablets/verizon/
|
417 |
-
'VerizonTablet' => 'QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1',
|
418 |
-
// http://www.odys.de/web/internet-tablet_en.html
|
419 |
-
'OdysTablet' => 'LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\bXELIO\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10',
|
420 |
-
// http://www.captiva-power.de/products.html#tablets-en
|
421 |
-
'CaptivaTablet' => 'CAPTIVA PAD',
|
422 |
-
// IconBIT - http://www.iconbit.com/products/tablets/
|
423 |
-
'IconbitTablet' => 'NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S',
|
424 |
-
// http://www.teclast.com/topic.php?channelID=70&topicID=140&pid=63
|
425 |
-
'TeclastTablet' => 'T98 4G|\bP80\b|\bX90HD\b|X98 Air|X98 Air 3G|\bX89\b|P80 3G|\bX80h\b|P98 Air|\bX89HD\b|P98 3G|\bP90HD\b|P89 3G|X98 3G|\bP70h\b|P79HD 3G|G18d 3G|\bP79HD\b|\bP89s\b|\bA88\b|\bP10HD\b|\bP19HD\b|G18 3G|\bP78HD\b|\bA78\b|\bP75\b|G17s 3G|G17h 3G|\bP85t\b|\bP90\b|\bP11\b|\bP98t\b|\bP98HD\b|\bG18d\b|\bP85s\b|\bP11HD\b|\bP88s\b|\bA80HD\b|\bA80se\b|\bA10h\b|\bP89\b|\bP78s\b|\bG18\b|\bP85\b|\bA70h\b|\bA70\b|\bG17\b|\bP18\b|\bA80s\b|\bA11s\b|\bP88HD\b|\bA80h\b|\bP76s\b|\bP76h\b|\bP98\b|\bA10HD\b|\bP78\b|\bP88\b|\bA11\b|\bA10t\b|\bP76a\b|\bP76t\b|\bP76e\b|\bP85HD\b|\bP85a\b|\bP86\b|\bP75HD\b|\bP76v\b|\bA12\b|\bP75a\b|\bA15\b|\bP76Ti\b|\bP81HD\b|\bA10\b|\bT760VE\b|\bT720HD\b|\bP76\b|\bP73\b|\bP71\b|\bP72\b|\bT720SE\b|\bC520Ti\b|\bT760\b|\bT720VE\b|T720-3GE|T720-WiFi',
|
426 |
-
// Onda - http://www.onda-tablet.com/buy-android-onda.html?dir=desc&limit=all&order=price
|
427 |
-
'OndaTablet' => '\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\b[\s]+',
|
428 |
-
'JaytechTablet' => 'TPC-PA762',
|
429 |
-
'BlaupunktTablet' => 'Endeavour 800NG|Endeavour 1010',
|
430 |
-
// http://www.digma.ru/support/download/
|
431 |
-
// @todo: Ebooks also (if requested)
|
432 |
-
'DigmaTablet' => '\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\b',
|
433 |
-
// http://www.evolioshop.com/ro/tablete-pc.html
|
434 |
-
// http://www.evolio.ro/support/downloads_static.html?cat=2
|
435 |
-
// @todo: Research some more
|
436 |
-
'EvolioTablet' => 'ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\bEvotab\b|\bNeura\b',
|
437 |
-
// @todo http://www.lavamobiles.com/tablets-data-cards
|
438 |
-
'LavaTablet' => 'QPAD E704|\bIvoryS\b|E-TAB IVORY|\bE-TAB\b',
|
439 |
-
// http://www.breezetablet.com/
|
440 |
-
'AocTablet' => 'MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712',
|
441 |
-
// http://www.mpmaneurope.com/en/products/internet-tablets-14/android-tablets-14/
|
442 |
-
'MpmanTablet' => 'MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\bMPG7\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010',
|
443 |
-
// https://www.celkonmobiles.com/?_a=categoryphones&sid=2
|
444 |
-
'CelkonTablet' => 'CT695|CT888|CT[\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\bCT-1\b',
|
445 |
-
// http://www.wolderelectronics.com/productos/manuales-y-guias-rapidas/categoria-2-miTab
|
446 |
-
'WolderTablet' => 'miTab \b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\b',
|
447 |
-
// http://www.mi.com/en
|
448 |
-
'MiTablet' => '\bMI PAD\b|\bHM NOTE 1W\b',
|
449 |
-
// http://www.nbru.cn/index.html
|
450 |
-
'NibiruTablet' => 'Nibiru M1|Nibiru Jupiter One',
|
451 |
-
// http://navroad.com/products/produkty/tablety/
|
452 |
-
// http://navroad.com/products/produkty/tablety/
|
453 |
-
'NexoTablet' => 'NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI',
|
454 |
-
// http://leader-online.com/new_site/product-category/tablets/
|
455 |
-
// http://www.leader-online.net.au/List/Tablet
|
456 |
-
'LeaderTablet' => 'TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100',
|
457 |
-
// http://www.datawind.com/ubislate/
|
458 |
-
'UbislateTablet' => 'UbiSlate[\s]?7C',
|
459 |
-
// http://www.pocketbook-int.com/ru/support
|
460 |
-
'PocketBookTablet' => 'Pocketbook',
|
461 |
-
// http://www.kocaso.com/product_tablet.html
|
462 |
-
'KocasoTablet' => '\b(TB-1207)\b',
|
463 |
-
// http://global.hisense.com/product/asia/tablet/Sero7/201412/t20141215_91832.htm
|
464 |
-
'HisenseTablet' => '\b(F5281|E2371)\b',
|
465 |
-
// http://www.tesco.com/direct/hudl/
|
466 |
-
'Hudl' => 'Hudl HT7S3|Hudl 2',
|
467 |
-
// http://www.telstra.com.au/home-phone/thub-2/
|
468 |
-
'TelstraTablet' => 'T-Hub2',
|
469 |
-
'GenericTablet' => 'Android.*\b97D\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b|rk30sdk|\bEVOTAB\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\bM6pro\b|CT1020W|arc 10HD|\bTP750\b|\bQTAQZ3\b'
|
470 |
-
);
|
471 |
-
|
472 |
-
/**
|
473 |
-
* List of mobile Operating Systems.
|
474 |
-
*
|
475 |
-
* @var array
|
476 |
-
*/
|
477 |
-
protected static $operatingSystems = array(
|
478 |
-
'AndroidOS' => 'Android',
|
479 |
-
'BlackBerryOS' => 'blackberry|\bBB10\b|rim tablet os',
|
480 |
-
'PalmOS' => 'PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino',
|
481 |
-
'SymbianOS' => 'Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\bS60\b',
|
482 |
-
// @reference: http://en.wikipedia.org/wiki/Windows_Mobile
|
483 |
-
'WindowsMobileOS' => 'Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window Mobile|Windows Phone [0-9.]+|WCE;',
|
484 |
-
// @reference: http://en.wikipedia.org/wiki/Windows_Phone
|
485 |
-
// http://wifeng.cn/?r=blog&a=view&id=106
|
486 |
-
// http://nicksnettravels.builttoroam.com/post/2011/01/10/Bogus-Windows-Phone-7-User-Agent-String.aspx
|
487 |
-
// http://msdn.microsoft.com/library/ms537503.aspx
|
488 |
-
// https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx
|
489 |
-
'WindowsPhoneOS' => 'Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;',
|
490 |
-
'iOS' => '\biPhone.*Mobile|\biPod|\biPad|AppleCoreMedia',
|
491 |
-
// http://en.wikipedia.org/wiki/MeeGo
|
492 |
-
// @todo: research MeeGo in UAs
|
493 |
-
'MeeGoOS' => 'MeeGo',
|
494 |
-
// http://en.wikipedia.org/wiki/Maemo
|
495 |
-
// @todo: research Maemo in UAs
|
496 |
-
'MaemoOS' => 'Maemo',
|
497 |
-
'JavaOS' => 'J2ME/|\bMIDP\b|\bCLDC\b', // '|Java/' produces bug #135
|
498 |
-
'webOS' => 'webOS|hpwOS',
|
499 |
-
'badaOS' => '\bBada\b',
|
500 |
-
'BREWOS' => 'BREW',
|
501 |
-
);
|
502 |
-
|
503 |
-
/**
|
504 |
-
* List of mobile User Agents.
|
505 |
-
*
|
506 |
-
* IMPORTANT: This is a list of only mobile browsers.
|
507 |
-
* Mobile Detect 2.x supports only mobile browsers,
|
508 |
-
* it was never designed to detect all browsers.
|
509 |
-
* The change will come in 2017 in the 3.x release for PHP7.
|
510 |
-
*
|
511 |
-
* @var array
|
512 |
-
*/
|
513 |
-
protected static $browsers = array(
|
514 |
-
//'Vivaldi' => 'Vivaldi',
|
515 |
-
// @reference: https://developers.google.com/chrome/mobile/docs/user-agent
|
516 |
-
'Chrome' => '\bCrMo\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?',
|
517 |
-
'Dolfin' => '\bDolfin\b',
|
518 |
-
'Opera' => 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+|Coast/[0-9.]+',
|
519 |
-
'Skyfire' => 'Skyfire',
|
520 |
-
'Edge' => 'Mobile Safari/[.0-9]* Edge',
|
521 |
-
'IE' => 'IEMobile|MSIEMobile', // |Trident/[.0-9]+
|
522 |
-
'Firefox' => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS',
|
523 |
-
'Bolt' => 'bolt',
|
524 |
-
'TeaShark' => 'teashark',
|
525 |
-
'Blazer' => 'Blazer',
|
526 |
-
// @reference: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3
|
527 |
-
'Safari' => 'Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari',
|
528 |
-
// http://en.wikipedia.org/wiki/Midori_(web_browser)
|
529 |
-
//'Midori' => 'midori',
|
530 |
-
//'Tizen' => 'Tizen',
|
531 |
-
'UCBrowser' => 'UC.*Browser|UCWEB',
|
532 |
-
'baiduboxapp' => 'baiduboxapp',
|
533 |
-
'baidubrowser' => 'baidubrowser',
|
534 |
-
// https://github.com/serbanghita/Mobile-Detect/issues/7
|
535 |
-
'DiigoBrowser' => 'DiigoBrowser',
|
536 |
-
// http://www.puffinbrowser.com/index.php
|
537 |
-
'Puffin' => 'Puffin',
|
538 |
-
// http://mercury-browser.com/index.html
|
539 |
-
'Mercury' => '\bMercury\b',
|
540 |
-
// http://en.wikipedia.org/wiki/Obigo_Browser
|
541 |
-
'ObigoBrowser' => 'Obigo',
|
542 |
-
// http://en.wikipedia.org/wiki/NetFront
|
543 |
-
'NetFront' => 'NF-Browser',
|
544 |
-
// @reference: http://en.wikipedia.org/wiki/Minimo
|
545 |
-
// http://en.wikipedia.org/wiki/Vision_Mobile_Browser
|
546 |
-
'GenericBrowser' => 'NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger',
|
547 |
-
// @reference: https://en.wikipedia.org/wiki/Pale_Moon_(web_browser)
|
548 |
-
'PaleMoon' => 'Android.*PaleMoon|Mobile.*PaleMoon',
|
549 |
-
);
|
550 |
-
|
551 |
-
/**
|
552 |
-
* Utilities.
|
553 |
-
*
|
554 |
-
* @var array
|
555 |
-
*/
|
556 |
-
protected static $utilities = array(
|
557 |
-
// Experimental. When a mobile device wants to switch to 'Desktop Mode'.
|
558 |
-
// http://scottcate.com/technology/windows-phone-8-ie10-desktop-or-mobile/
|
559 |
-
// https://github.com/serbanghita/Mobile-Detect/issues/57#issuecomment-15024011
|
560 |
-
// https://developers.facebook.com/docs/sharing/best-practices
|
561 |
-
'Bot' => 'Googlebot|facebookexternalhit|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom',
|
562 |
-
'MobileBot' => 'Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2',
|
563 |
-
'DesktopMode' => 'WPDesktop',
|
564 |
-
'TV' => 'SonyDTV|HbbTV', // experimental
|
565 |
-
'WebKit' => '(webkit)[ /]([\w.]+)',
|
566 |
-
// @todo: Include JXD consoles.
|
567 |
-
'Console' => '\b(Nintendo|Nintendo WiiU|Nintendo 3DS|PLAYSTATION|Xbox)\b',
|
568 |
-
'Watch' => 'SM-V700',
|
569 |
-
);
|
570 |
-
|
571 |
-
/**
|
572 |
-
* All possible HTTP headers that represent the
|
573 |
-
* User-Agent string.
|
574 |
-
*
|
575 |
-
* @var array
|
576 |
-
*/
|
577 |
-
protected static $uaHttpHeaders = array(
|
578 |
-
// The default User-Agent string.
|
579 |
-
'HTTP_USER_AGENT',
|
580 |
-
// Header can occur on devices using Opera Mini.
|
581 |
-
'HTTP_X_OPERAMINI_PHONE_UA',
|
582 |
-
// Vodafone specific header: http://www.seoprinciple.com/mobile-web-community-still-angry-at-vodafone/24/
|
583 |
-
'HTTP_X_DEVICE_USER_AGENT',
|
584 |
-
'HTTP_X_ORIGINAL_USER_AGENT',
|
585 |
-
'HTTP_X_SKYFIRE_PHONE',
|
586 |
-
'HTTP_X_BOLT_PHONE_UA',
|
587 |
-
'HTTP_DEVICE_STOCK_UA',
|
588 |
-
'HTTP_X_UCBROWSER_DEVICE_UA'
|
589 |
-
);
|
590 |
-
|
591 |
-
/**
|
592 |
-
* The individual segments that could exist in a User-Agent string. VER refers to the regular
|
593 |
-
* expression defined in the constant self::VER.
|
594 |
-
*
|
595 |
-
* @var array
|
596 |
-
*/
|
597 |
-
protected static $properties = array(
|
598 |
-
|
599 |
-
// Build
|
600 |
-
'Mobile' => 'Mobile/[VER]',
|
601 |
-
'Build' => 'Build/[VER]',
|
602 |
-
'Version' => 'Version/[VER]',
|
603 |
-
'VendorID' => 'VendorID/[VER]',
|
604 |
-
|
605 |
-
// Devices
|
606 |
-
'iPad' => 'iPad.*CPU[a-z ]+[VER]',
|
607 |
-
'iPhone' => 'iPhone.*CPU[a-z ]+[VER]',
|
608 |
-
'iPod' => 'iPod.*CPU[a-z ]+[VER]',
|
609 |
-
//'BlackBerry' => array('BlackBerry[VER]', 'BlackBerry [VER];'),
|
610 |
-
'Kindle' => 'Kindle/[VER]',
|
611 |
-
|
612 |
-
// Browser
|
613 |
-
'Chrome' => array('Chrome/[VER]', 'CriOS/[VER]', 'CrMo/[VER]'),
|
614 |
-
'Coast' => array('Coast/[VER]'),
|
615 |
-
'Dolfin' => 'Dolfin/[VER]',
|
616 |
-
// @reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox
|
617 |
-
'Firefox' => array('Firefox/[VER]', 'FxiOS/[VER]'),
|
618 |
-
'Fennec' => 'Fennec/[VER]',
|
619 |
-
// http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx
|
620 |
-
// https://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx
|
621 |
-
'Edge' => 'Edge/[VER]',
|
622 |
-
'IE' => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];', 'Trident/[0-9.]+;.*rv:[VER]'),
|
623 |
-
// http://en.wikipedia.org/wiki/NetFront
|
624 |
-
'NetFront' => 'NetFront/[VER]',
|
625 |
-
'NokiaBrowser' => 'NokiaBrowser/[VER]',
|
626 |
-
'Opera' => array( ' OPR/[VER]', 'Opera Mini/[VER]', 'Version/[VER]' ),
|
627 |
-
'Opera Mini' => 'Opera Mini/[VER]',
|
628 |
-
'Opera Mobi' => 'Version/[VER]',
|
629 |
-
'UCBrowser' => array( 'UCWEB[VER]', 'UC.*Browser/[VER]' ),
|
630 |
-
'MQQBrowser' => 'MQQBrowser/[VER]',
|
631 |
-
'MicroMessenger' => 'MicroMessenger/[VER]',
|
632 |
-
'baiduboxapp' => 'baiduboxapp/[VER]',
|
633 |
-
'baidubrowser' => 'baidubrowser/[VER]',
|
634 |
-
'SamsungBrowser' => 'SamsungBrowser/[VER]',
|
635 |
-
'Iron' => 'Iron/[VER]',
|
636 |
-
// @note: Safari 7534.48.3 is actually Version 5.1.
|
637 |
-
// @note: On BlackBerry the Version is overwriten by the OS.
|
638 |
-
'Safari' => array( 'Version/[VER]', 'Safari/[VER]' ),
|
639 |
-
'Skyfire' => 'Skyfire/[VER]',
|
640 |
-
'Tizen' => 'Tizen/[VER]',
|
641 |
-
'Webkit' => 'webkit[ /][VER]',
|
642 |
-
'PaleMoon' => 'PaleMoon/[VER]',
|
643 |
-
|
644 |
-
// Engine
|
645 |
-
'Gecko' => 'Gecko/[VER]',
|
646 |
-
'Trident' => 'Trident/[VER]',
|
647 |
-
'Presto' => 'Presto/[VER]',
|
648 |
-
'Goanna' => 'Goanna/[VER]',
|
649 |
-
|
650 |
-
// OS
|
651 |
-
'iOS' => ' \bi?OS\b [VER][ ;]{1}',
|
652 |
-
'Android' => 'Android [VER]',
|
653 |
-
'BlackBerry' => array('BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'),
|
654 |
-
'BREW' => 'BREW [VER]',
|
655 |
-
'Java' => 'Java/[VER]',
|
656 |
-
// @reference: http://windowsteamblog.com/windows_phone/b/wpdev/archive/2011/08/29/introducing-the-ie9-on-windows-phone-mango-user-agent-string.aspx
|
657 |
-
// @reference: http://en.wikipedia.org/wiki/Windows_NT#Releases
|
658 |
-
'Windows Phone OS' => array( 'Windows Phone OS [VER]', 'Windows Phone [VER]'),
|
659 |
-
'Windows Phone' => 'Windows Phone [VER]',
|
660 |
-
'Windows CE' => 'Windows CE/[VER]',
|
661 |
-
// http://social.msdn.microsoft.com/Forums/en-US/windowsdeveloperpreviewgeneral/thread/6be392da-4d2f-41b4-8354-8dcee20c85cd
|
662 |
-
'Windows NT' => 'Windows NT [VER]',
|
663 |
-
'Symbian' => array('SymbianOS/[VER]', 'Symbian/[VER]'),
|
664 |
-
'webOS' => array('webOS/[VER]', 'hpwOS/[VER];'),
|
665 |
-
);
|
666 |
-
|
667 |
-
/**
|
668 |
-
* Construct an instance of this class.
|
669 |
-
*
|
670 |
-
* @param array $headers Specify the headers as injection. Should be PHP _SERVER flavored.
|
671 |
-
* If left empty, will use the global _SERVER['HTTP_*'] vars instead.
|
672 |
-
* @param string $userAgent Inject the User-Agent header. If null, will use HTTP_USER_AGENT
|
673 |
-
* from the $headers array instead.
|
674 |
-
*/
|
675 |
-
public function __construct(
|
676 |
-
array $headers = null,
|
677 |
-
$userAgent = null
|
678 |
-
) {
|
679 |
-
$this->setHttpHeaders($headers);
|
680 |
-
$this->setUserAgent($userAgent);
|
681 |
-
}
|
682 |
-
|
683 |
-
/**
|
684 |
-
* Get the current script version.
|
685 |
-
* This is useful for the demo.php file,
|
686 |
-
* so people can check on what version they are testing
|
687 |
-
* for mobile devices.
|
688 |
-
*
|
689 |
-
* @return string The version number in semantic version format.
|
690 |
-
*/
|
691 |
-
public static function getScriptVersion()
|
692 |
-
{
|
693 |
-
return self::VERSION;
|
694 |
-
}
|
695 |
-
|
696 |
-
/**
|
697 |
-
* Set the HTTP Headers. Must be PHP-flavored. This method will reset existing headers.
|
698 |
-
*
|
699 |
-
* @param array $httpHeaders The headers to set. If null, then using PHP's _SERVER to extract
|
700 |
-
* the headers. The default null is left for backwards compatibility.
|
701 |
-
*/
|
702 |
-
public function setHttpHeaders($httpHeaders = null)
|
703 |
-
{
|
704 |
-
// use global _SERVER if $httpHeaders aren't defined
|
705 |
-
if (!is_array($httpHeaders) || !count($httpHeaders)) {
|
706 |
-
$httpHeaders = $_SERVER;
|
707 |
-
}
|
708 |
-
|
709 |
-
// clear existing headers
|
710 |
-
$this->httpHeaders = array();
|
711 |
-
|
712 |
-
// Only save HTTP headers. In PHP land, that means only _SERVER vars that
|
713 |
-
// start with HTTP_.
|
714 |
-
foreach ($httpHeaders as $key => $value) {
|
715 |
-
if (substr($key, 0, 5) === 'HTTP_') {
|
716 |
-
$this->httpHeaders[$key] = $value;
|
717 |
-
}
|
718 |
-
}
|
719 |
-
|
720 |
-
// In case we're dealing with CloudFront, we need to know.
|
721 |
-
$this->setCfHeaders($httpHeaders);
|
722 |
-
}
|
723 |
-
|
724 |
-
/**
|
725 |
-
* Retrieves the HTTP headers.
|
726 |
-
*
|
727 |
-
* @return array
|
728 |
-
*/
|
729 |
-
public function getHttpHeaders()
|
730 |
-
{
|
731 |
-
return $this->httpHeaders;
|
732 |
-
}
|
733 |
-
|
734 |
-
/**
|
735 |
-
* Retrieves a particular header. If it doesn't exist, no exception/error is caused.
|
736 |
-
* Simply null is returned.
|
737 |
-
*
|
738 |
-
* @param string $header The name of the header to retrieve. Can be HTTP compliant such as
|
739 |
-
* "User-Agent" or "X-Device-User-Agent" or can be php-esque with the
|
740 |
-
* all-caps, HTTP_ prefixed, underscore seperated awesomeness.
|
741 |
-
*
|
742 |
-
* @return string|null The value of the header.
|
743 |
-
*/
|
744 |
-
public function getHttpHeader($header)
|
745 |
-
{
|
746 |
-
// are we using PHP-flavored headers?
|
747 |
-
if (strpos($header, '_') === false) {
|
748 |
-
$header = str_replace('-', '_', $header);
|
749 |
-
$header = strtoupper($header);
|
750 |
-
}
|
751 |
-
|
752 |
-
// test the alternate, too
|
753 |
-
$altHeader = 'HTTP_' . $header;
|
754 |
-
|
755 |
-
//Test both the regular and the HTTP_ prefix
|
756 |
-
if (isset($this->httpHeaders[$header])) {
|
757 |
-
return $this->httpHeaders[$header];
|
758 |
-
} elseif (isset($this->httpHeaders[$altHeader])) {
|
759 |
-
return $this->httpHeaders[$altHeader];
|
760 |
-
}
|
761 |
-
|
762 |
-
return null;
|
763 |
-
}
|
764 |
-
|
765 |
-
public function getMobileHeaders()
|
766 |
-
{
|
767 |
-
return self::$mobileHeaders;
|
768 |
-
}
|
769 |
-
|
770 |
-
/**
|
771 |
-
* Get all possible HTTP headers that
|
772 |
-
* can contain the User-Agent string.
|
773 |
-
*
|
774 |
-
* @return array List of HTTP headers.
|
775 |
-
*/
|
776 |
-
public function getUaHttpHeaders()
|
777 |
-
{
|
778 |
-
return self::$uaHttpHeaders;
|
779 |
-
}
|
780 |
-
|
781 |
-
|
782 |
-
/**
|
783 |
-
* Set CloudFront headers
|
784 |
-
* http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-device
|
785 |
-
*
|
786 |
-
* @param array $cfHeaders List of HTTP headers
|
787 |
-
*
|
788 |
-
* @return boolean If there were CloudFront headers to be set
|
789 |
-
*/
|
790 |
-
public function setCfHeaders($cfHeaders = null) {
|
791 |
-
// use global _SERVER if $cfHeaders aren't defined
|
792 |
-
if (!is_array($cfHeaders) || !count($cfHeaders)) {
|
793 |
-
$cfHeaders = $_SERVER;
|
794 |
-
}
|
795 |
-
|
796 |
-
// clear existing headers
|
797 |
-
$this->cloudfrontHeaders = array();
|
798 |
-
|
799 |
-
// Only save CLOUDFRONT headers. In PHP land, that means only _SERVER vars that
|
800 |
-
// start with cloudfront-.
|
801 |
-
$response = false;
|
802 |
-
foreach ($cfHeaders as $key => $value) {
|
803 |
-
if (substr(strtolower($key), 0, 16) === 'http_cloudfront_') {
|
804 |
-
$this->cloudfrontHeaders[strtoupper($key)] = $value;
|
805 |
-
$response = true;
|
806 |
-
}
|
807 |
-
}
|
808 |
-
|
809 |
-
return $response;
|
810 |
-
}
|
811 |
-
|
812 |
-
/**
|
813 |
-
* Retrieves the cloudfront headers.
|
814 |
-
*
|
815 |
-
* @return array
|
816 |
-
*/
|
817 |
-
public function getCfHeaders()
|
818 |
-
{
|
819 |
-
return $this->cloudfrontHeaders;
|
820 |
-
}
|
821 |
-
|
822 |
-
/**
|
823 |
-
* @param string $userAgent
|
824 |
-
* @return string
|
825 |
-
*/
|
826 |
-
private function prepareUserAgent($userAgent) {
|
827 |
-
$userAgent = trim($userAgent);
|
828 |
-
$userAgent = substr($userAgent, 0, 500
|
829 |
-
return $userAgent;
|
830 |
-
}
|
831 |
-
|
832 |
-
/**
|
833 |
-
* Set the User-Agent to be used.
|
834 |
-
*
|
835 |
-
* @param string $userAgent The user agent string to set.
|
836 |
-
*
|
837 |
-
* @return string|null
|
838 |
-
*/
|
839 |
-
public function setUserAgent($userAgent = null)
|
840 |
-
{
|
841 |
-
// Invalidate cache due to #375
|
842 |
-
$this->cache = array();
|
843 |
-
|
844 |
-
if (false === empty($userAgent)) {
|
845 |
-
return $this->userAgent = $this->prepareUserAgent($userAgent);
|
846 |
-
} else {
|
847 |
-
$this->userAgent = null;
|
848 |
-
foreach ($this->getUaHttpHeaders() as $altHeader) {
|
849 |
-
if (false === empty($this->httpHeaders[$altHeader])) { // @todo: should use getHttpHeader(), but it would be slow. (Serban)
|
850 |
-
$this->userAgent .= $this->httpHeaders[$altHeader] . " ";
|
851 |
-
}
|
852 |
-
}
|
853 |
-
|
854 |
-
if (!empty($this->userAgent)) {
|
855 |
-
return $this->userAgent = $this->prepareUserAgent($this->userAgent);
|
856 |
-
}
|
857 |
-
}
|
858 |
-
|
859 |
-
if (count($this->getCfHeaders()) > 0) {
|
860 |
-
return $this->userAgent = 'Amazon CloudFront';
|
861 |
-
}
|
862 |
-
return $this->userAgent = null;
|
863 |
-
}
|
864 |
-
|
865 |
-
/**
|
866 |
-
* Retrieve the User-Agent.
|
867 |
-
*
|
868 |
-
* @return string|null The user agent if it's set.
|
869 |
-
*/
|
870 |
-
public function getUserAgent()
|
871 |
-
{
|
872 |
-
return $this->userAgent;
|
873 |
-
}
|
874 |
-
|
875 |
-
/**
|
876 |
-
* Set the detection type. Must be one of self::DETECTION_TYPE_MOBILE or
|
877 |
-
* self::DETECTION_TYPE_EXTENDED. Otherwise, nothing is set.
|
878 |
-
*
|
879 |
-
* @deprecated since version 2.6.9
|
880 |
-
*
|
881 |
-
* @param string $type The type. Must be a self::DETECTION_TYPE_* constant. The default
|
882 |
-
* parameter is null which will default to self::DETECTION_TYPE_MOBILE.
|
883 |
-
*/
|
884 |
-
public function setDetectionType($type = null)
|
885 |
-
{
|
886 |
-
if ($type === null) {
|
887 |
-
$type = self::DETECTION_TYPE_MOBILE;
|
888 |
-
}
|
889 |
-
|
890 |
-
if ($type !== self::DETECTION_TYPE_MOBILE && $type !== self::DETECTION_TYPE_EXTENDED) {
|
891 |
-
return;
|
892 |
-
}
|
893 |
-
|
894 |
-
$this->detectionType = $type;
|
895 |
-
}
|
896 |
-
|
897 |
-
public function getMatchingRegex()
|
898 |
-
{
|
899 |
-
return $this->matchingRegex;
|
900 |
-
}
|
901 |
-
|
902 |
-
public function getMatchesArray()
|
903 |
-
{
|
904 |
-
return $this->matchesArray;
|
905 |
-
}
|
906 |
-
|
907 |
-
/**
|
908 |
-
* Retrieve the list of known phone devices.
|
909 |
-
*
|
910 |
-
* @return array List of phone devices.
|
911 |
-
*/
|
912 |
-
public static function getPhoneDevices()
|
913 |
-
{
|
914 |
-
return self::$phoneDevices;
|
915 |
-
}
|
916 |
-
|
917 |
-
/**
|
918 |
-
* Retrieve the list of known tablet devices.
|
919 |
-
*
|
920 |
-
* @return array List of tablet devices.
|
921 |
-
*/
|
922 |
-
public static function getTabletDevices()
|
923 |
-
{
|
924 |
-
return self::$tabletDevices;
|
925 |
-
}
|
926 |
-
|
927 |
-
/**
|
928 |
-
* Alias for getBrowsers() method.
|
929 |
-
*
|
930 |
-
* @return array List of user agents.
|
931 |
-
*/
|
932 |
-
public static function getUserAgents()
|
933 |
-
{
|
934 |
-
return self::getBrowsers();
|
935 |
-
}
|
936 |
-
|
937 |
-
/**
|
938 |
-
* Retrieve the list of known browsers. Specifically, the user agents.
|
939 |
-
*
|
940 |
-
* @return array List of browsers / user agents.
|
941 |
-
*/
|
942 |
-
public static function getBrowsers()
|
943 |
-
{
|
944 |
-
return self::$browsers;
|
945 |
-
}
|
946 |
-
|
947 |
-
/**
|
948 |
-
* Retrieve the list of known utilities.
|
949 |
-
*
|
950 |
-
* @return array List of utilities.
|
951 |
-
*/
|
952 |
-
public static function getUtilities()
|
953 |
-
{
|
954 |
-
return self::$utilities;
|
955 |
-
}
|
956 |
-
|
957 |
-
/**
|
958 |
-
* Method gets the mobile detection rules. This method is used for the magic methods $detect->is*().
|
959 |
-
*
|
960 |
-
* @deprecated since version 2.6.9
|
961 |
-
*
|
962 |
-
* @return array All the rules (but not extended).
|
963 |
-
*/
|
964 |
-
public static function getMobileDetectionRules()
|
965 |
-
{
|
966 |
-
static $rules;
|
967 |
-
|
968 |
-
if (!$rules) {
|
969 |
-
$rules = array_merge(
|
970 |
-
self::$phoneDevices,
|
971 |
-
self::$tabletDevices,
|
972 |
-
self::$operatingSystems,
|
973 |
-
self::$browsers
|
974 |
-
);
|
975 |
-
}
|
976 |
-
|
977 |
-
return $rules;
|
978 |
-
|
979 |
-
}
|
980 |
-
|
981 |
-
/**
|
982 |
-
* Method gets the mobile detection rules + utilities.
|
983 |
-
* The reason this is separate is because utilities rules
|
984 |
-
* don't necessary imply mobile. This method is used inside
|
985 |
-
* the new $detect->is('stuff') method.
|
986 |
-
*
|
987 |
-
* @deprecated since version 2.6.9
|
988 |
-
*
|
989 |
-
* @return array All the rules + extended.
|
990 |
-
*/
|
991 |
-
public function getMobileDetectionRulesExtended()
|
992 |
-
{
|
993 |
-
static $rules;
|
994 |
-
|
995 |
-
if (!$rules) {
|
996 |
-
// Merge all rules together.
|
997 |
-
$rules = array_merge(
|
998 |
-
self::$phoneDevices,
|
999 |
-
self::$tabletDevices,
|
1000 |
-
self::$operatingSystems,
|
1001 |
-
self::$browsers,
|
1002 |
-
self::$utilities
|
1003 |
-
);
|
1004 |
-
}
|
1005 |
-
|
1006 |
-
return $rules;
|
1007 |
-
}
|
1008 |
-
|
1009 |
-
/**
|
1010 |
-
* Retrieve the current set of rules.
|
1011 |
-
*
|
1012 |
-
* @deprecated since version 2.6.9
|
1013 |
-
*
|
1014 |
-
* @return array
|
1015 |
-
*/
|
1016 |
-
public function getRules()
|
1017 |
-
{
|
1018 |
-
if ($this->detectionType == self::DETECTION_TYPE_EXTENDED) {
|
1019 |
-
return self::getMobileDetectionRulesExtended();
|
1020 |
-
} else {
|
1021 |
-
return self::getMobileDetectionRules();
|
1022 |
-
}
|
1023 |
-
}
|
1024 |
-
|
1025 |
-
/**
|
1026 |
-
* Retrieve the list of mobile operating systems.
|
1027 |
-
*
|
1028 |
-
* @return array The list of mobile operating systems.
|
1029 |
-
*/
|
1030 |
-
public static function getOperatingSystems()
|
1031 |
-
{
|
1032 |
-
return self::$operatingSystems;
|
1033 |
-
}
|
1034 |
-
|
1035 |
-
/**
|
1036 |
-
* Check the HTTP headers for signs of mobile.
|
1037 |
-
* This is the fastest mobile check possible; it's used
|
1038 |
-
* inside isMobile() method.
|
1039 |
-
*
|
1040 |
-
* @return bool
|
1041 |
-
*/
|
1042 |
-
public function checkHttpHeadersForMobile()
|
1043 |
-
{
|
1044 |
-
|
1045 |
-
foreach ($this->getMobileHeaders() as $mobileHeader => $matchType) {
|
1046 |
-
if (isset($this->httpHeaders[$mobileHeader])) {
|
1047 |
-
if (is_array($matchType['matches'])) {
|
1048 |
-
foreach ($matchType['matches'] as $_match) {
|
1049 |
-
if (strpos($this->httpHeaders[$mobileHeader], $_match) !== false) {
|
1050 |
-
return true;
|
1051 |
-
}
|
1052 |
-
}
|
1053 |
-
|
1054 |
-
return false;
|
1055 |
-
} else {
|
1056 |
-
return true;
|
1057 |
-
}
|
1058 |
-
}
|
1059 |
-
}
|
1060 |
-
|
1061 |
-
return false;
|
1062 |
-
|
1063 |
-
}
|
1064 |
-
|
1065 |
-
/**
|
1066 |
-
* Magic overloading method.
|
1067 |
-
*
|
1068 |
-
* @method boolean is[...]()
|
1069 |
-
* @param string $name
|
1070 |
-
* @param array $arguments
|
1071 |
-
* @return mixed
|
1072 |
-
* @throws BadMethodCallException when the method doesn't exist and doesn't start with 'is'
|
1073 |
-
*/
|
1074 |
-
public function __call($name, $arguments)
|
1075 |
-
{
|
1076 |
-
// make sure the name starts with 'is', otherwise
|
1077 |
-
if (substr($name, 0, 2) !== 'is') {
|
1078 |
-
throw new BadMethodCallException("No such method exists: $name");
|
1079 |
-
}
|
1080 |
-
|
1081 |
-
$this->setDetectionType(self::DETECTION_TYPE_MOBILE);
|
1082 |
-
|
1083 |
-
$key = substr($name, 2);
|
1084 |
-
|
1085 |
-
return $this->matchUAAgainstKey($key);
|
1086 |
-
}
|
1087 |
-
|
1088 |
-
/**
|
1089 |
-
* Find a detection rule that matches the current User-agent.
|
1090 |
-
*
|
1091 |
-
* @param null $userAgent deprecated
|
1092 |
-
* @return boolean
|
1093 |
-
*/
|
1094 |
-
protected function matchDetectionRulesAgainstUA($userAgent = null)
|
1095 |
-
{
|
1096 |
-
// Begin general search.
|
1097 |
-
foreach ($this->getRules() as $_regex) {
|
1098 |
-
if (empty($_regex)) {
|
1099 |
-
continue;
|
1100 |
-
}
|
1101 |
-
|
1102 |
-
if ($this->match($_regex, $userAgent)) {
|
1103 |
-
return true;
|
1104 |
-
}
|
1105 |
-
}
|
1106 |
-
|
1107 |
-
return false;
|
1108 |
-
}
|
1109 |
-
|
1110 |
-
/**
|
1111 |
-
* Search for a certain key in the rules array.
|
1112 |
-
* If the key is found then try to match the corresponding
|
1113 |
-
* regex against the User-Agent.
|
1114 |
-
*
|
1115 |
-
* @param string $key
|
1116 |
-
*
|
1117 |
-
* @return boolean
|
1118 |
-
*/
|
1119 |
-
protected function matchUAAgainstKey($key)
|
1120 |
-
{
|
1121 |
-
// Make the keys lowercase so we can match: isIphone(), isiPhone(), isiphone(), etc.
|
1122 |
-
$key = strtolower($key);
|
1123 |
-
if (false === isset($this->cache[$key])) {
|
1124 |
-
|
1125 |
-
// change the keys to lower case
|
1126 |
-
$_rules = array_change_key_case($this->getRules());
|
1127 |
-
|
1128 |
-
if (false === empty($_rules[$key])) {
|
1129 |
-
$this->cache[$key] = $this->match($_rules[$key]);
|
1130 |
-
}
|
1131 |
-
|
1132 |
-
if (false === isset($this->cache[$key])) {
|
1133 |
-
$this->cache[$key] = false;
|
1134 |
-
}
|
1135 |
-
}
|
1136 |
-
|
1137 |
-
return $this->cache[$key];
|
1138 |
-
}
|
1139 |
-
|
1140 |
-
/**
|
1141 |
-
* Check if the device is mobile.
|
1142 |
-
* Returns true if any type of mobile device detected, including special ones
|
1143 |
-
* @param null $userAgent deprecated
|
1144 |
-
* @param null $httpHeaders deprecated
|
1145 |
-
* @return bool
|
1146 |
-
*/
|
1147 |
-
public function isMobile($userAgent = null, $httpHeaders = null)
|
1148 |
-
{
|
1149 |
-
|
1150 |
-
if ($httpHeaders) {
|
1151 |
-
$this->setHttpHeaders($httpHeaders);
|
1152 |
-
}
|
1153 |
-
|
1154 |
-
if ($userAgent) {
|
1155 |
-
$this->setUserAgent($userAgent);
|
1156 |
-
}
|
1157 |
-
|
1158 |
-
// Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront'
|
1159 |
-
if ($this->getUserAgent() === 'Amazon CloudFront') {
|
1160 |
-
$cfHeaders = $this->getCfHeaders();
|
1161 |
-
if(array_key_exists('HTTP_CLOUDFRONT_IS_MOBILE_VIEWER', $cfHeaders) && $cfHeaders['HTTP_CLOUDFRONT_IS_MOBILE_VIEWER'] === 'true') {
|
1162 |
-
return true;
|
1163 |
-
}
|
1164 |
-
}
|
1165 |
-
|
1166 |
-
$this->setDetectionType(self::DETECTION_TYPE_MOBILE);
|
1167 |
-
|
1168 |
-
if ($this->checkHttpHeadersForMobile()) {
|
1169 |
-
return true;
|
1170 |
-
} else {
|
1171 |
-
return $this->matchDetectionRulesAgainstUA();
|
1172 |
-
}
|
1173 |
-
|
1174 |
-
}
|
1175 |
-
|
1176 |
-
/**
|
1177 |
-
* Check if the device is a tablet.
|
1178 |
-
* Return true if any type of tablet device is detected.
|
1179 |
-
*
|
1180 |
-
* @param string $userAgent deprecated
|
1181 |
-
* @param array $httpHeaders deprecated
|
1182 |
-
* @return bool
|
1183 |
-
*/
|
1184 |
-
public function isTablet($userAgent = null, $httpHeaders = null)
|
1185 |
-
{
|
1186 |
-
// Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront'
|
1187 |
-
if ($this->getUserAgent() === 'Amazon CloudFront') {
|
1188 |
-
$cfHeaders = $this->getCfHeaders();
|
1189 |
-
if(array_key_exists('HTTP_CLOUDFRONT_IS_TABLET_VIEWER', $cfHeaders) && $cfHeaders['HTTP_CLOUDFRONT_IS_TABLET_VIEWER'] === 'true') {
|
1190 |
-
return true;
|
1191 |
-
}
|
1192 |
-
}
|
1193 |
-
|
1194 |
-
$this->setDetectionType(self::DETECTION_TYPE_MOBILE);
|
1195 |
-
|
1196 |
-
foreach (self::$tabletDevices as $_regex) {
|
1197 |
-
if ($this->match($_regex, $userAgent)) {
|
1198 |
-
return true;
|
1199 |
-
}
|
1200 |
-
}
|
1201 |
-
|
1202 |
-
return false;
|
1203 |
-
}
|
1204 |
-
|
1205 |
-
/**
|
1206 |
-
* This method checks for a certain property in the
|
1207 |
-
* userAgent.
|
1208 |
-
* @todo: The httpHeaders part is not yet used.
|
1209 |
-
*
|
1210 |
-
* @param string $key
|
1211 |
-
* @param string $userAgent deprecated
|
1212 |
-
* @param string $httpHeaders deprecated
|
1213 |
-
* @return bool|int|null
|
1214 |
-
*/
|
1215 |
-
public function is($key, $userAgent = null, $httpHeaders = null)
|
1216 |
-
{
|
1217 |
-
// Set the UA and HTTP headers only if needed (eg. batch mode).
|
1218 |
-
if ($httpHeaders) {
|
1219 |
-
$this->setHttpHeaders($httpHeaders);
|
1220 |
-
}
|
1221 |
-
|
1222 |
-
if ($userAgent) {
|
1223 |
-
$this->setUserAgent($userAgent);
|
1224 |
-
}
|
1225 |
-
|
1226 |
-
$this->setDetectionType(self::DETECTION_TYPE_EXTENDED);
|
1227 |
-
|
1228 |
-
return $this->matchUAAgainstKey($key);
|
1229 |
-
}
|
1230 |
-
|
1231 |
-
/**
|
1232 |
-
* Some detection rules are relative (not standard),
|
1233 |
-
* because of the diversity of devices, vendors and
|
1234 |
-
* their conventions in representing the User-Agent or
|
1235 |
-
* the HTTP headers.
|
1236 |
-
*
|
1237 |
-
* This method will be used to check custom regexes against
|
1238 |
-
* the User-Agent string.
|
1239 |
-
*
|
1240 |
-
* @param $regex
|
1241 |
-
* @param string $userAgent
|
1242 |
-
* @return bool
|
1243 |
-
*
|
1244 |
-
* @todo: search in the HTTP headers too.
|
1245 |
-
*/
|
1246 |
-
public function match($regex, $userAgent = null)
|
1247 |
-
{
|
1248 |
-
$match = (bool) preg_match(sprintf('#%s#is', $regex), (false === empty($userAgent) ? $userAgent : $this->userAgent), $matches);
|
1249 |
-
// If positive match is found, store the results for debug.
|
1250 |
-
if ($match) {
|
1251 |
-
$this->matchingRegex = $regex;
|
1252 |
-
$this->matchesArray = $matches;
|
1253 |
-
}
|
1254 |
-
|
1255 |
-
return $match;
|
1256 |
-
}
|
1257 |
-
|
1258 |
-
/**
|
1259 |
-
* Get the properties array.
|
1260 |
-
*
|
1261 |
-
* @return array
|
1262 |
-
*/
|
1263 |
-
public static function getProperties()
|
1264 |
-
{
|
1265 |
-
return self::$properties;
|
1266 |
-
}
|
1267 |
-
|
1268 |
-
/**
|
1269 |
-
* Prepare the version number.
|
1270 |
-
*
|
1271 |
-
* @todo Remove the error supression from str_replace() call.
|
1272 |
-
*
|
1273 |
-
* @param string $ver The string version, like "2.6.21.2152";
|
1274 |
-
*
|
1275 |
-
* @return float
|
1276 |
-
*/
|
1277 |
-
public function prepareVersionNo($ver)
|
1278 |
-
{
|
1279 |
-
$ver = str_replace(array('_', ' ', '/'), '.', $ver);
|
1280 |
-
$arrVer = explode('.', $ver, 2);
|
1281 |
-
|
1282 |
-
if (isset($arrVer[1])) {
|
1283 |
-
$arrVer[1] = @str_replace('.', '', $arrVer[1]); // @todo: treat strings versions.
|
1284 |
-
}
|
1285 |
-
|
1286 |
-
return (float) implode('.', $arrVer);
|
1287 |
-
}
|
1288 |
-
|
1289 |
-
/**
|
1290 |
-
* Check the version of the given property in the User-Agent.
|
1291 |
-
* Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31)
|
1292 |
-
*
|
1293 |
-
* @param string $propertyName The name of the property. See self::getProperties() array
|
1294 |
-
* keys for all possible properties.
|
1295 |
-
* @param string $type Either self::VERSION_TYPE_STRING to get a string value or
|
1296 |
-
* self::VERSION_TYPE_FLOAT indicating a float value. This parameter
|
1297 |
-
* is optional and defaults to self::VERSION_TYPE_STRING. Passing an
|
1298 |
-
* invalid parameter will default to the this type as well.
|
1299 |
-
*
|
1300 |
-
* @return string|float The version of the property we are trying to extract.
|
1301 |
-
*/
|
1302 |
-
public function version($propertyName, $type = self::VERSION_TYPE_STRING)
|
1303 |
-
{
|
1304 |
-
if (empty($propertyName)) {
|
1305 |
-
return false;
|
1306 |
-
}
|
1307 |
-
|
1308 |
-
// set the $type to the default if we don't recognize the type
|
1309 |
-
if ($type !== self::VERSION_TYPE_STRING && $type !== self::VERSION_TYPE_FLOAT) {
|
1310 |
-
$type = self::VERSION_TYPE_STRING;
|
1311 |
-
}
|
1312 |
-
|
1313 |
-
$properties = self::getProperties();
|
1314 |
-
|
1315 |
-
// Check if the property exists in the properties array.
|
1316 |
-
if (true === isset($properties[$propertyName])) {
|
1317 |
-
|
1318 |
-
// Prepare the pattern to be matched.
|
1319 |
-
// Make sure we always deal with an array (string is converted).
|
1320 |
-
$properties[$propertyName] = (array) $properties[$propertyName];
|
1321 |
-
|
1322 |
-
foreach ($properties[$propertyName] as $propertyMatchString) {
|
1323 |
-
|
1324 |
-
$propertyPattern = str_replace('[VER]', self::VER, $propertyMatchString);
|
1325 |
-
|
1326 |
-
// Identify and extract the version.
|
1327 |
-
preg_match(sprintf('#%s#is', $propertyPattern), $this->userAgent, $match);
|
1328 |
-
|
1329 |
-
if (false === empty($match[1])) {
|
1330 |
-
$version = ($type == self::VERSION_TYPE_FLOAT ? $this->prepareVersionNo($match[1]) : $match[1]);
|
1331 |
-
|
1332 |
-
return $version;
|
1333 |
-
}
|
1334 |
-
|
1335 |
-
}
|
1336 |
-
|
1337 |
-
}
|
1338 |
-
|
1339 |
-
return false;
|
1340 |
-
}
|
1341 |
-
|
1342 |
-
/**
|
1343 |
-
* Retrieve the mobile grading, using self::MOBILE_GRADE_* constants.
|
1344 |
-
*
|
1345 |
-
* @return string One of the self::MOBILE_GRADE_* constants.
|
1346 |
-
*/
|
1347 |
-
public function mobileGrade()
|
1348 |
-
{
|
1349 |
-
$isMobile = $this->isMobile();
|
1350 |
-
|
1351 |
-
if (
|
1352 |
-
// Apple iOS 4-7.0 – Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3 / 5.1 / 6.1), iPad 3 (5.1 / 6.0), iPad Mini (6.1), iPad Retina (7.0), iPhone 3GS (4.3), iPhone 4 (4.3 / 5.1), iPhone 4S (5.1 / 6.0), iPhone 5 (6.0), and iPhone 5S (7.0)
|
1353 |
-
$this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT) >= 4.3 ||
|
1354 |
-
$this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT) >= 4.3 ||
|
1355 |
-
$this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT) >= 4.3 ||
|
1356 |
-
|
1357 |
-
// Android 2.1-2.3 - Tested on the HTC Incredible (2.2), original Droid (2.2), HTC Aria (2.1), Google Nexus S (2.3). Functional on 1.5 & 1.6 but performance may be sluggish, tested on Google G1 (1.5)
|
1358 |
-
// Android 3.1 (Honeycomb) - Tested on the Samsung Galaxy Tab 10.1 and Motorola XOOM
|
1359 |
-
// Android 4.0 (ICS) - Tested on a Galaxy Nexus. Note: transition performance can be poor on upgraded devices
|
1360 |
-
// Android 4.1 (Jelly Bean) - Tested on a Galaxy Nexus and Galaxy 7
|
1361 |
-
( $this->version('Android', self::VERSION_TYPE_FLOAT)>2.1 && $this->is('Webkit') ) ||
|
1362 |
-
|
1363 |
-
// Windows Phone 7.5-8 - Tested on the HTC Surround (7.5), HTC Trophy (7.5), LG-E900 (7.5), Nokia 800 (7.8), HTC Mazaa (7.8), Nokia Lumia 520 (8), Nokia Lumia 920 (8), HTC 8x (8)
|
1364 |
-
$this->version('Windows Phone OS', self::VERSION_TYPE_FLOAT) >= 7.5 ||
|
1365 |
-
|
1366 |
-
// Tested on the Torch 9800 (6) and Style 9670 (6), BlackBerry® Torch 9810 (7), BlackBerry Z10 (10)
|
1367 |
-
$this->is('BlackBerry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >= 6.0 ||
|
1368 |
-
// Blackberry Playbook (1.0-2.0) - Tested on PlayBook
|
1369 |
-
$this->match('Playbook.*Tablet') ||
|
1370 |
-
|
1371 |
-
// Palm WebOS (1.4-3.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0), HP TouchPad (3.0)
|
1372 |
-
( $this->version('webOS', self::VERSION_TYPE_FLOAT) >= 1.4 && $this->match('Palm|Pre|Pixi') ) ||
|
1373 |
-
// Palm WebOS 3.0 - Tested on HP TouchPad
|
1374 |
-
$this->match('hp.*TouchPad') ||
|
1375 |
-
|
1376 |
-
// Firefox Mobile 18 - Tested on Android 2.3 and 4.1 devices
|
1377 |
-
( $this->is('Firefox') && $this->version('Firefox', self::VERSION_TYPE_FLOAT) >= 18 ) ||
|
1378 |
-
|
1379 |
-
// Chrome for Android - Tested on Android 4.0, 4.1 device
|
1380 |
-
( $this->is('Chrome') && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 4.0 ) ||
|
1381 |
-
|
1382 |
-
// Skyfire 4.1 - Tested on Android 2.3 device
|
1383 |
-
( $this->is('Skyfire') && $this->version('Skyfire', self::VERSION_TYPE_FLOAT) >= 4.1 && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 ) ||
|
1384 |
-
|
1385 |
-
// Opera Mobile 11.5-12: Tested on Android 2.3
|
1386 |
-
( $this->is('Opera') && $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >= 11.5 && $this->is('AndroidOS') ) ||
|
1387 |
-
|
1388 |
-
// Meego 1.2 - Tested on Nokia 950 and N9
|
1389 |
-
$this->is('MeeGoOS') ||
|
1390 |
-
|
1391 |
-
// Tizen (pre-release) - Tested on early hardware
|
1392 |
-
$this->is('Tizen') ||
|
1393 |
-
|
1394 |
-
// Samsung Bada 2.0 - Tested on a Samsung Wave 3, Dolphin browser
|
1395 |
-
// @todo: more tests here!
|
1396 |
-
$this->is('Dolfin') && $this->version('Bada', self::VERSION_TYPE_FLOAT) >= 2.0 ||
|
1397 |
-
|
1398 |
-
// UC Browser - Tested on Android 2.3 device
|
1399 |
-
( ($this->is('UC Browser') || $this->is('Dolfin')) && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 ) ||
|
1400 |
-
|
1401 |
-
// Kindle 3 and Fire - Tested on the built-in WebKit browser for each
|
1402 |
-
( $this->match('Kindle Fire') ||
|
1403 |
-
$this->is('Kindle') && $this->version('Kindle', self::VERSION_TYPE_FLOAT) >= 3.0 ) ||
|
1404 |
-
|
1405 |
-
// Nook Color 1.4.1 - Tested on original Nook Color, not Nook Tablet
|
1406 |
-
$this->is('AndroidOS') && $this->is('NookTablet') ||
|
1407 |
-
|
1408 |
-
// Chrome Desktop 16-24 - Tested on OS X 10.7 and Windows 7
|
1409 |
-
$this->version('Chrome', self::VERSION_TYPE_FLOAT) >= 16 && !$isMobile ||
|
1410 |
-
|
1411 |
-
// Safari Desktop 5-6 - Tested on OS X 10.7 and Windows 7
|
1412 |
-
$this->version('Safari', self::VERSION_TYPE_FLOAT) >= 5.0 && !$isMobile ||
|
1413 |
-
|
1414 |
-
// Firefox Desktop 10-18 - Tested on OS X 10.7 and Windows 7
|
1415 |
-
$this->version('Firefox', self::VERSION_TYPE_FLOAT) >= 10.0 && !$isMobile ||
|
1416 |
-
|
1417 |
-
// Internet Explorer 7-9 - Tested on Windows XP, Vista and 7
|
1418 |
-
$this->version('IE', self::VERSION_TYPE_FLOAT) >= 7.0 && !$isMobile ||
|
1419 |
-
|
1420 |
-
// Opera Desktop 10-12 - Tested on OS X 10.7 and Windows 7
|
1421 |
-
$this->version('Opera', self::VERSION_TYPE_FLOAT) >= 10 && !$isMobile
|
1422 |
-
){
|
1423 |
-
return self::MOBILE_GRADE_A;
|
1424 |
-
}
|
1425 |
-
|
1426 |
-
if (
|
1427 |
-
$this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT)<4.3 ||
|
1428 |
-
$this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT)<4.3 ||
|
1429 |
-
$this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT)<4.3 ||
|
1430 |
-
|
1431 |
-
// Blackberry 5.0: Tested on the Storm 2 9550, Bold 9770
|
1432 |
-
$this->is('Blackberry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >= 5 && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)<6 ||
|
1433 |
-
|
1434 |
-
//Opera Mini (5.0-6.5) - Tested on iOS 3.2/4.3 and Android 2.3
|
1435 |
-
($this->version('Opera Mini', self::VERSION_TYPE_FLOAT) >= 5.0 && $this->version('Opera Mini', self::VERSION_TYPE_FLOAT) <= 7.0 &&
|
1436 |
-
($this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 || $this->is('iOS')) ) ||
|
1437 |
-
|
1438 |
-
// Nokia Symbian^3 - Tested on Nokia N8 (Symbian^3), C7 (Symbian^3), also works on N97 (Symbian^1)
|
1439 |
-
$this->match('NokiaN8|NokiaC7|N97.*Series60|Symbian/3') ||
|
1440 |
-
|
1441 |
-
// @todo: report this (tested on Nokia N71)
|
1442 |
-
$this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >= 11 && $this->is('SymbianOS')
|
1443 |
-
){
|
1444 |
-
return self::MOBILE_GRADE_B;
|
1445 |
-
}
|
1446 |
-
|
1447 |
-
if (
|
1448 |
-
// Blackberry 4.x - Tested on the Curve 8330
|
1449 |
-
$this->version('BlackBerry', self::VERSION_TYPE_FLOAT) <= 5.0 ||
|
1450 |
-
// Windows Mobile - Tested on the HTC Leo (WinMo 5.2)
|
1451 |
-
$this->match('MSIEMobile|Windows CE.*Mobile') || $this->version('Windows Mobile', self::VERSION_TYPE_FLOAT) <= 5.2 ||
|
1452 |
-
|
1453 |
-
// Tested on original iPhone (3.1), iPhone 3 (3.2)
|
1454 |
-
$this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT) <= 3.2 ||
|
1455 |
-
$this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT) <= 3.2 ||
|
1456 |
-
$this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT) <= 3.2 ||
|
1457 |
-
|
1458 |
-
// Internet Explorer 7 and older - Tested on Windows XP
|
1459 |
-
$this->version('IE', self::VERSION_TYPE_FLOAT) <= 7.0 && !$isMobile
|
1460 |
-
){
|
1461 |
-
return self::MOBILE_GRADE_C;
|
1462 |
-
}
|
1463 |
-
|
1464 |
-
// All older smartphone platforms and featurephones - Any device that doesn't support media queries
|
1465 |
-
// will receive the basic, C grade experience.
|
1466 |
-
return self::MOBILE_GRADE_C;
|
1467 |
-
}
|
1468 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Mobile Detect Library
|
4 |
+
* Motto: "Every business should have a mobile detection script to detect mobile readers"
|
5 |
+
*
|
6 |
+
* Mobile_Detect is a lightweight PHP class for detecting mobile devices (including tablets).
|
7 |
+
* It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.
|
8 |
+
*
|
9 |
+
* Homepage: http://mobiledetect.net
|
10 |
+
* GitHub: https://github.com/serbanghita/Mobile-Detect
|
11 |
+
* README: https://github.com/serbanghita/Mobile-Detect/blob/master/README.md
|
12 |
+
* CONTRIBUTING: https://github.com/serbanghita/Mobile-Detect/blob/master/docs/CONTRIBUTING.md
|
13 |
+
* KNOWN LIMITATIONS: https://github.com/serbanghita/Mobile-Detect/blob/master/docs/KNOWN_LIMITATIONS.md
|
14 |
+
* EXAMPLES: https://github.com/serbanghita/Mobile-Detect/wiki/Code-examples
|
15 |
+
*
|
16 |
+
* @license https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt MIT License
|
17 |
+
* @author Serban Ghita <serbanghita@gmail.com>
|
18 |
+
* @author Nick Ilyin <nick.ilyin@gmail.com>
|
19 |
+
* Original author: Victor Stanciu <vic.stanciu@gmail.com>
|
20 |
+
*
|
21 |
+
* @version 2.8.31
|
22 |
+
*/
|
23 |
+
class Mobile_Detect
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* Mobile detection type.
|
27 |
+
*
|
28 |
+
* @deprecated since version 2.6.9
|
29 |
+
*/
|
30 |
+
const DETECTION_TYPE_MOBILE = 'mobile';
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Extended detection type.
|
34 |
+
*
|
35 |
+
* @deprecated since version 2.6.9
|
36 |
+
*/
|
37 |
+
const DETECTION_TYPE_EXTENDED = 'extended';
|
38 |
+
|
39 |
+
/**
|
40 |
+
* A frequently used regular expression to extract version #s.
|
41 |
+
*
|
42 |
+
* @deprecated since version 2.6.9
|
43 |
+
*/
|
44 |
+
const VER = '([\w._\+]+)';
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Top-level device.
|
48 |
+
*/
|
49 |
+
const MOBILE_GRADE_A = 'A';
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Mid-level device.
|
53 |
+
*/
|
54 |
+
const MOBILE_GRADE_B = 'B';
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Low-level device.
|
58 |
+
*/
|
59 |
+
const MOBILE_GRADE_C = 'C';
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Stores the version number of the current release.
|
63 |
+
*/
|
64 |
+
const VERSION = '2.8.31';
|
65 |
+
|
66 |
+
/**
|
67 |
+
* A type for the version() method indicating a string return value.
|
68 |
+
*/
|
69 |
+
const VERSION_TYPE_STRING = 'text';
|
70 |
+
|
71 |
+
/**
|
72 |
+
* A type for the version() method indicating a float return value.
|
73 |
+
*/
|
74 |
+
const VERSION_TYPE_FLOAT = 'float';
|
75 |
+
|
76 |
+
/**
|
77 |
+
* A cache for resolved matches
|
78 |
+
* @var array
|
79 |
+
*/
|
80 |
+
protected $cache = array();
|
81 |
+
|
82 |
+
/**
|
83 |
+
* The User-Agent HTTP header is stored in here.
|
84 |
+
* @var string
|
85 |
+
*/
|
86 |
+
protected $userAgent = null;
|
87 |
+
|
88 |
+
/**
|
89 |
+
* HTTP headers in the PHP-flavor. So HTTP_USER_AGENT and SERVER_SOFTWARE.
|
90 |
+
* @var array
|
91 |
+
*/
|
92 |
+
protected $httpHeaders = array();
|
93 |
+
|
94 |
+
/**
|
95 |
+
* CloudFront headers. E.g. CloudFront-Is-Desktop-Viewer, CloudFront-Is-Mobile-Viewer & CloudFront-Is-Tablet-Viewer.
|
96 |
+
* @var array
|
97 |
+
*/
|
98 |
+
protected $cloudfrontHeaders = array();
|
99 |
+
|
100 |
+
/**
|
101 |
+
* The matching Regex.
|
102 |
+
* This is good for debug.
|
103 |
+
* @var string
|
104 |
+
*/
|
105 |
+
protected $matchingRegex = null;
|
106 |
+
|
107 |
+
/**
|
108 |
+
* The matches extracted from the regex expression.
|
109 |
+
* This is good for debug.
|
110 |
+
*
|
111 |
+
* @var string
|
112 |
+
*/
|
113 |
+
protected $matchesArray = null;
|
114 |
+
|
115 |
+
/**
|
116 |
+
* The detection type, using self::DETECTION_TYPE_MOBILE or self::DETECTION_TYPE_EXTENDED.
|
117 |
+
*
|
118 |
+
* @deprecated since version 2.6.9
|
119 |
+
*
|
120 |
+
* @var string
|
121 |
+
*/
|
122 |
+
protected $detectionType = self::DETECTION_TYPE_MOBILE;
|
123 |
+
|
124 |
+
/**
|
125 |
+
* HTTP headers that trigger the 'isMobile' detection
|
126 |
+
* to be true.
|
127 |
+
*
|
128 |
+
* @var array
|
129 |
+
*/
|
130 |
+
protected static $mobileHeaders = array(
|
131 |
+
|
132 |
+
'HTTP_ACCEPT' => array('matches' => array(
|
133 |
+
// Opera Mini; @reference: http://dev.opera.com/articles/view/opera-binary-markup-language/
|
134 |
+
'application/x-obml2d',
|
135 |
+
// BlackBerry devices.
|
136 |
+
'application/vnd.rim.html',
|
137 |
+
'text/vnd.wap.wml',
|
138 |
+
'application/vnd.wap.xhtml+xml'
|
139 |
+
)),
|
140 |
+
'HTTP_X_WAP_PROFILE' => null,
|
141 |
+
'HTTP_X_WAP_CLIENTID' => null,
|
142 |
+
'HTTP_WAP_CONNECTION' => null,
|
143 |
+
'HTTP_PROFILE' => null,
|
144 |
+
// Reported by Opera on Nokia devices (eg. C3).
|
145 |
+
'HTTP_X_OPERAMINI_PHONE_UA' => null,
|
146 |
+
'HTTP_X_NOKIA_GATEWAY_ID' => null,
|
147 |
+
'HTTP_X_ORANGE_ID' => null,
|
148 |
+
'HTTP_X_VODAFONE_3GPDPCONTEXT' => null,
|
149 |
+
'HTTP_X_HUAWEI_USERID' => null,
|
150 |
+
// Reported by Windows Smartphones.
|
151 |
+
'HTTP_UA_OS' => null,
|
152 |
+
// Reported by Verizon, Vodafone proxy system.
|
153 |
+
'HTTP_X_MOBILE_GATEWAY' => null,
|
154 |
+
// Seen this on HTC Sensation. SensationXE_Beats_Z715e.
|
155 |
+
'HTTP_X_ATT_DEVICEID' => null,
|
156 |
+
// Seen this on a HTC.
|
157 |
+
'HTTP_UA_CPU' => array('matches' => array('ARM')),
|
158 |
+
);
|
159 |
+
|
160 |
+
/**
|
161 |
+
* List of mobile devices (phones).
|
162 |
+
*
|
163 |
+
* @var array
|
164 |
+
*/
|
165 |
+
protected static $phoneDevices = array(
|
166 |
+
'iPhone' => '\biPhone\b|\biPod\b', // |\biTunes
|
167 |
+
'BlackBerry' => 'BlackBerry|\bBB10\b|rim[0-9]+',
|
168 |
+
'HTC' => 'HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\bEVO\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel',
|
169 |
+
'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6',
|
170 |
+
// @todo: Is 'Dell Streak' a tablet or a phone? ;)
|
171 |
+
'Dell' => 'Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b',
|
172 |
+
'Motorola' => 'Motorola|DROIDX|DROID BIONIC|\bDroid\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\bMoto E\b|XT1068|XT1092',
|
173 |
+
'Samsung' => '\bSamsung\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F',
|
174 |
+
'LG' => '\bLG\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323)',
|
175 |
+
'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533',
|
176 |
+
'Asus' => 'Asus.*Galaxy|PadFone.*Mobile',
|
177 |
+
'NokiaLumia' => 'Lumia [0-9]{3,4}',
|
178 |
+
// http://www.micromaxinfo.com/mobiles/smartphones
|
179 |
+
// Added because the codes might conflict with Acer Tablets.
|
180 |
+
'Micromax' => 'Micromax.*\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\b',
|
181 |
+
// @todo Complete the regex.
|
182 |
+
'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ;
|
183 |
+
'Vertu' => 'Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature', // Just for fun ;)
|
184 |
+
// http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA (PANTECH)
|
185 |
+
// Most of the VEGA devices are legacy. PANTECH seem to be newer devices based on Android.
|
186 |
+
'Pantech' => 'PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790',
|
187 |
+
// http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones.
|
188 |
+
'Fly' => 'IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250',
|
189 |
+
// http://fr.wikomobile.com
|
190 |
+
'Wiko' => 'KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM',
|
191 |
+
'iMobile' => 'i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)',
|
192 |
+
// Added simvalley mobile just for fun. They have some interesting devices.
|
193 |
+
// http://www.simvalley.fr/telephonie---gps-_22_telephonie-mobile_telephones_.html
|
194 |
+
'SimValley' => '\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\b',
|
195 |
+
// Wolfgang - a brand that is sold by Aldi supermarkets.
|
196 |
+
// http://www.wolfgangmobile.com/
|
197 |
+
'Wolfgang' => 'AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q',
|
198 |
+
'Alcatel' => 'Alcatel',
|
199 |
+
'Nintendo' => 'Nintendo 3DS',
|
200 |
+
// http://en.wikipedia.org/wiki/Amoi
|
201 |
+
'Amoi' => 'Amoi',
|
202 |
+
// http://en.wikipedia.org/wiki/INQ
|
203 |
+
'INQ' => 'INQ',
|
204 |
+
// @Tapatalk is a mobile app; http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039
|
205 |
+
'GenericPhone' => 'Tapatalk|PDA;|SAGEM|\bmmp\b|pocket|\bpsp\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\bwap\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser',
|
206 |
+
);
|
207 |
+
|
208 |
+
/**
|
209 |
+
* List of tablet devices.
|
210 |
+
*
|
211 |
+
* @var array
|
212 |
+
*/
|
213 |
+
protected static $tabletDevices = array(
|
214 |
+
// @todo: check for mobile friendly emails topic.
|
215 |
+
'iPad' => 'iPad|iPad.*Mobile',
|
216 |
+
// Removed |^.*Android.*Nexus(?!(?:Mobile).)*$
|
217 |
+
// @see #442
|
218 |
+
'NexusTablet' => 'Android.*Nexus[\s]+(7|9|10)',
|
219 |
+
'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285', // SCH-P709|SCH-P729|SM-T2558|GT-I9205 - Samsung Mega - treat them like a regular phone.
|
220 |
+
// http://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html
|
221 |
+
'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\b|Android.*Silk/[0-9.]+ like Chrome/[0-9.]+ (?!Mobile)',
|
222 |
+
// Only the Surface tablets with Windows RT are considered mobile.
|
223 |
+
// http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx
|
224 |
+
'SurfaceTablet' => 'Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)',
|
225 |
+
// http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=JfIQ7EN5lqMAAAEyDcJUDwMT
|
226 |
+
'HPTablet' => 'HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10',
|
227 |
+
// Watch out for PadFone, see #132.
|
228 |
+
// http://www.asus.com/de/Tablets_Mobile/Memo_Pad_Products/
|
229 |
+
'AsusTablet' => '^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\bK00F\b|\bK00C\b|\bK00E\b|\bK00L\b|TX201LA|ME176C|ME102A|\bM80TA\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\bME70C\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\bP027\b|\bP024\b',
|
230 |
+
'BlackBerryTablet' => 'PlayBook|RIM Tablet',
|
231 |
+
'HTCtablet' => 'HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410',
|
232 |
+
'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617',
|
233 |
+
'NookTablet' => 'Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2',
|
234 |
+
// http://www.acer.ro/ac/ro/RO/content/drivers
|
235 |
+
// http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer)
|
236 |
+
// http://us.acer.com/ac/en/US/content/group/tablets
|
237 |
+
// http://www.acer.de/ac/de/DE/content/models/tablets/
|
238 |
+
// Can conflict with Micromax and Motorola phones codes.
|
239 |
+
'AcerTablet' => 'Android.*; \b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\b|W3-810|\bA3-A10\b|\bA3-A11\b|\bA3-A20\b|\bA3-A30',
|
240 |
+
// http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/
|
241 |
+
// http://us.toshiba.com/tablets/tablet-finder
|
242 |
+
// http://www.toshiba.co.jp/regza/tablet/
|
243 |
+
'ToshibaTablet' => 'Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO',
|
244 |
+
// http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html
|
245 |
+
// http://www.lg.com/us/tablets
|
246 |
+
'LGTablet' => '\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\b',
|
247 |
+
'FujitsuTablet' => 'Android.*\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\b',
|
248 |
+
// Prestigio Tablets http://www.prestigio.com/support
|
249 |
+
'PrestigioTablet' => 'PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002',
|
250 |
+
// http://support.lenovo.com/en_GB/downloads/default.page?#
|
251 |
+
'LenovoTablet' => 'Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304F|TB-X304L|TB-8703F',
|
252 |
+
// http://www.dell.com/support/home/us/en/04/Products/tab_mob/tablets
|
253 |
+
'DellTablet' => 'Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7',
|
254 |
+
// http://www.yarvik.com/en/matrix/tablets/
|
255 |
+
'YarvikTablet' => 'Android.*\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\b',
|
256 |
+
'MedionTablet' => 'Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB',
|
257 |
+
'ArnovaTablet' => '97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2',
|
258 |
+
// http://www.intenso.de/kategorie_en.php?kategorie=33
|
259 |
+
// @todo: http://www.nbhkdz.com/read/b8e64202f92a2df129126bff.html - investigate
|
260 |
+
'IntensoTablet' => 'INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004',
|
261 |
+
// IRU.ru Tablets http://www.iru.ru/catalog/soho/planetable/
|
262 |
+
'IRUTablet' => 'M702pro',
|
263 |
+
'MegafonTablet' => 'MegaFon V9|\bZTE V9\b|Android.*\bMT7A\b',
|
264 |
+
// http://www.e-boda.ro/tablete-pc.html
|
265 |
+
'EbodaTablet' => 'E-Boda (Supreme|Impresspeed|Izzycomm|Essential)',
|
266 |
+
// http://www.allview.ro/produse/droseries/lista-tablete-pc/
|
267 |
+
'AllViewTablet' => 'Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)',
|
268 |
+
// http://wiki.archosfans.com/index.php?title=Main_Page
|
269 |
+
// @note Rewrite the regex format after we add more UAs.
|
270 |
+
'ArchosTablet' => '\b(101G9|80G9|A101IT)\b|Qilive 97R|Archos5|\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\b',
|
271 |
+
// http://www.ainol.com/plugin.php?identifier=ainol&module=product
|
272 |
+
'AinolTablet' => 'NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark',
|
273 |
+
'NokiaLumiaTablet' => 'Lumia 2520',
|
274 |
+
// @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER
|
275 |
+
// Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser
|
276 |
+
// http://www.sony.jp/support/tablet/
|
277 |
+
'SonyTablet' => 'Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP612|SOT31',
|
278 |
+
// http://www.support.philips.com/support/catalog/worldproducts.jsp?userLanguage=en&userCountry=cn&categoryid=3G_LTE_TABLET_SU_CN_CARE&title=3G%20tablets%20/%20LTE%20range&_dyncharset=UTF-8
|
279 |
+
'PhilipsTablet' => '\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\b',
|
280 |
+
// db + http://www.cube-tablet.com/buy-products.html
|
281 |
+
'CubeTablet' => 'Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT',
|
282 |
+
// http://www.cobyusa.com/?p=pcat&pcat_id=3001
|
283 |
+
'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010',
|
284 |
+
// http://www.match.net.cn/products.asp
|
285 |
+
'MIDTablet' => 'M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10',
|
286 |
+
// http://www.msi.com/support
|
287 |
+
// @todo Research the Windows Tablets.
|
288 |
+
'MSITablet' => 'MSI \b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\b',
|
289 |
+
// @todo http://www.kyoceramobile.com/support/drivers/
|
290 |
+
// 'KyoceraTablet' => null,
|
291 |
+
// @todo http://intexuae.com/index.php/category/mobile-devices/tablets-products/
|
292 |
+
// 'IntextTablet' => null,
|
293 |
+
// http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets)
|
294 |
+
// http://www.imp3.net/14/show.php?itemid=20454
|
295 |
+
'SMiTTablet' => 'Android.*(\bMID\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)',
|
296 |
+
// http://www.rock-chips.com/index.php?do=prod&pid=2
|
297 |
+
'RockChipTablet' => 'Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A',
|
298 |
+
// http://www.fly-phone.com/devices/tablets/ ; http://www.fly-phone.com/service/
|
299 |
+
'FlyTablet' => 'IQ310|Fly Vision',
|
300 |
+
// http://www.bqreaders.com/gb/tablets-prices-sale.html
|
301 |
+
'bqTablet' => 'Android.*(bq)?.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))|Maxwell.*Lite|Maxwell.*Plus',
|
302 |
+
// http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290
|
303 |
+
// http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets)
|
304 |
+
'HuaweiTablet' => 'MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L',
|
305 |
+
// Nec or Medias Tab
|
306 |
+
'NecTablet' => '\bN-06D|\bN-08D',
|
307 |
+
// Pantech Tablets: http://www.pantechusa.com/phones/
|
308 |
+
'PantechTablet' => 'Pantech.*P4100',
|
309 |
+
// Broncho Tablets: http://www.broncho.cn/ (hard to find)
|
310 |
+
'BronchoTablet' => 'Broncho.*(N701|N708|N802|a710)',
|
311 |
+
// http://versusuk.com/support.html
|
312 |
+
'VersusTablet' => 'TOUCHPAD.*[78910]|\bTOUCHTAB\b',
|
313 |
+
// http://www.zync.in/index.php/our-products/tablet-phablets
|
314 |
+
'ZyncTablet' => 'z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900',
|
315 |
+
// http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/
|
316 |
+
'PositivoTablet' => 'TB07STA|TB10STA|TB07FTA|TB10FTA',
|
317 |
+
// https://www.nabitablet.com/
|
318 |
+
'NabiTablet' => 'Android.*\bNabi',
|
319 |
+
'KoboTablet' => 'Kobo Touch|\bK080\b|\bVox\b Build|\bArc\b Build',
|
320 |
+
// French Danew Tablets http://www.danew.com/produits-tablette.php
|
321 |
+
'DanewTablet' => 'DSlide.*\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\b',
|
322 |
+
// Texet Tablets and Readers http://www.texet.ru/tablet/
|
323 |
+
'TexetTablet' => 'NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE',
|
324 |
+
// Avoid detecting 'PLAYSTATION 3' as mobile.
|
325 |
+
'PlaystationTablet' => 'Playstation.*(Portable|Vita)',
|
326 |
+
// http://www.trekstor.de/surftabs.html
|
327 |
+
'TrekstorTablet' => 'ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab',
|
328 |
+
// http://www.pyleaudio.com/Products.aspx?%2fproducts%2fPersonal-Electronics%2fTablets
|
329 |
+
'PyleAudioTablet' => '\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\b',
|
330 |
+
// http://www.advandigital.com/index.php?link=content-product&jns=JP001
|
331 |
+
// because of the short codenames we have to include whitespaces to reduce the possible conflicts.
|
332 |
+
'AdvanTablet' => 'Android.* \b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\b ',
|
333 |
+
// http://www.danytech.com/category/tablet-pc
|
334 |
+
'DanyTechTablet' => 'Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1',
|
335 |
+
// http://www.galapad.net/product.html
|
336 |
+
'GalapadTablet' => 'Android.*\bG1\b',
|
337 |
+
// http://www.micromaxinfo.com/tablet/funbook
|
338 |
+
'MicromaxTablet' => 'Funbook|Micromax.*\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\b',
|
339 |
+
// http://www.karbonnmobiles.com/products_tablet.php
|
340 |
+
'KarbonnTablet' => 'Android.*\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\b',
|
341 |
+
// http://www.myallfine.com/Products.asp
|
342 |
+
'AllFineTablet' => 'Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide',
|
343 |
+
// http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr=
|
344 |
+
'PROSCANTablet' => '\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\b',
|
345 |
+
// http://www.yonesnav.com/products/products.php
|
346 |
+
'YONESTablet' => 'BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026',
|
347 |
+
// http://www.cjshowroom.com/eproducts.aspx?classcode=004001001
|
348 |
+
// China manufacturer makes tablets for different small brands (eg. http://www.zeepad.net/index.html)
|
349 |
+
'ChangJiaTablet' => 'TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503',
|
350 |
+
// http://www.gloryunion.cn/products.asp
|
351 |
+
// http://www.allwinnertech.com/en/apply/mobile.html
|
352 |
+
// http://www.ptcl.com.pk/pd_content.php?pd_id=284 (EVOTAB)
|
353 |
+
// @todo: Softwiner tablets?
|
354 |
+
// aka. Cute or Cool tablets. Not sure yet, must research to avoid collisions.
|
355 |
+
'GUTablet' => 'TX-A1301|TX-M9002|Q702|kf026', // A12R|D75A|D77|D79|R83|A95|A106C|R15|A75|A76|D71|D72|R71|R73|R77|D82|R85|D92|A97|D92|R91|A10F|A77F|W71F|A78F|W78F|W81F|A97F|W91F|W97F|R16G|C72|C73E|K72|K73|R96G
|
356 |
+
// http://www.pointofview-online.com/showroom.php?shop_mode=product_listing&category_id=118
|
357 |
+
'PointOfViewTablet' => 'TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10',
|
358 |
+
// http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/
|
359 |
+
// @todo: add more tests.
|
360 |
+
'OvermaxTablet' => 'OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027',
|
361 |
+
// http://hclmetablet.com/India/index.php
|
362 |
+
'HCLTablet' => 'HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync',
|
363 |
+
// http://www.edigital.hu/Tablet_es_e-book_olvaso/Tablet-c18385.html
|
364 |
+
'DPSTablet' => 'DPS Dream 9|DPS Dual 7',
|
365 |
+
// http://www.visture.com/index.asp
|
366 |
+
'VistureTablet' => 'V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10',
|
367 |
+
// http://www.mijncresta.nl/tablet
|
368 |
+
'CrestaTablet' => 'CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989',
|
369 |
+
// MediaTek - http://www.mediatek.com/_en/01_products/02_proSys.php?cata_sn=1&cata1_sn=1&cata2_sn=309
|
370 |
+
'MediatekTablet' => '\bMT8125|MT8389|MT8135|MT8377\b',
|
371 |
+
// Concorde tab
|
372 |
+
'ConcordeTablet' => 'Concorde([ ]+)?Tab|ConCorde ReadMan',
|
373 |
+
// GoClever Tablets - http://www.goclever.com/uk/products,c1/tablet,c5/
|
374 |
+
'GoCleverTablet' => 'GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042',
|
375 |
+
// Modecom Tablets - http://www.modecom.eu/tablets/portal/
|
376 |
+
'ModecomTablet' => 'FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003',
|
377 |
+
// Vonino Tablets - http://www.vonino.eu/tablets
|
378 |
+
'VoninoTablet' => '\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\bQ8\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\b',
|
379 |
+
// ECS Tablets - http://www.ecs.com.tw/ECSWebSite/Product/Product_Tablet_List.aspx?CategoryID=14&MenuID=107&childid=M_107&LanID=0
|
380 |
+
'ECSTablet' => 'V07OT2|TM105A|S10OT1|TR10CS1',
|
381 |
+
// Storex Tablets - http://storex.fr/espace_client/support.html
|
382 |
+
// @note: no need to add all the tablet codes since they are guided by the first regex.
|
383 |
+
'StorexTablet' => 'eZee[_\']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab',
|
384 |
+
// Generic Vodafone tablets.
|
385 |
+
'VodafoneTablet' => 'SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497',
|
386 |
+
// French tablets - Essentiel B http://www.boulanger.fr/tablette_tactile_e-book/tablette_tactile_essentiel_b/cl_68908.htm?multiChoiceToDelete=brand&mc_brand=essentielb
|
387 |
+
// Aka: http://www.essentielb.fr/
|
388 |
+
'EssentielBTablet' => 'Smart[ \']?TAB[ ]+?[0-9]+|Family[ \']?TAB2',
|
389 |
+
// Ross & Moor - http://ross-moor.ru/
|
390 |
+
'RossMoorTablet' => 'RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711',
|
391 |
+
// i-mobile http://product.i-mobilephone.com/Mobile_Device
|
392 |
+
'iMobileTablet' => 'i-mobile i-note',
|
393 |
+
// http://www.tolino.de/de/vergleichen/
|
394 |
+
'TolinoTablet' => 'tolino tab [0-9.]+|tolino shine',
|
395 |
+
// AudioSonic - a Kmart brand
|
396 |
+
// http://www.kmart.com.au/webapp/wcs/stores/servlet/Search?langId=-1&storeId=10701&catalogId=10001&categoryId=193001&pageSize=72¤tPage=1&searchCategory=193001%2b4294965664&sortBy=p_MaxPrice%7c1
|
397 |
+
'AudioSonicTablet' => '\bC-22Q|T7-QC|T-17B|T-17P\b',
|
398 |
+
// AMPE Tablets - http://www.ampe.com.my/product-category/tablets/
|
399 |
+
// @todo: add them gradually to avoid conflicts.
|
400 |
+
'AMPETablet' => 'Android.* A78 ',
|
401 |
+
// Skk Mobile - http://skkmobile.com.ph/product_tablets.php
|
402 |
+
'SkkTablet' => 'Android.* (SKYPAD|PHOENIX|CYCLOPS)',
|
403 |
+
// Tecno Mobile (only tablet) - http://www.tecno-mobile.com/index.php/product?filterby=smart&list_order=all&page=1
|
404 |
+
'TecnoTablet' => 'TECNO P9',
|
405 |
+
// JXD (consoles & tablets) - http://jxd.hk/products.asp?selectclassid=009008&clsid=3
|
406 |
+
'JXDTablet' => 'Android.* \b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\b',
|
407 |
+
// i-Joy tablets - http://www.i-joy.es/en/cat/products/tablets/
|
408 |
+
'iJoyTablet' => 'Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)',
|
409 |
+
// http://www.intracon.eu/tablet
|
410 |
+
'FX2Tablet' => 'FX2 PAD7|FX2 PAD10',
|
411 |
+
// http://www.xoro.de/produkte/
|
412 |
+
// @note: Might be the same brand with 'Simply tablets'
|
413 |
+
'XoroTablet' => 'KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151',
|
414 |
+
// http://www1.viewsonic.com/products/computing/tablets/
|
415 |
+
'ViewsonicTablet' => 'ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a',
|
416 |
+
// https://www.verizonwireless.com/tablets/verizon/
|
417 |
+
'VerizonTablet' => 'QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1',
|
418 |
+
// http://www.odys.de/web/internet-tablet_en.html
|
419 |
+
'OdysTablet' => 'LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\bXELIO\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10',
|
420 |
+
// http://www.captiva-power.de/products.html#tablets-en
|
421 |
+
'CaptivaTablet' => 'CAPTIVA PAD',
|
422 |
+
// IconBIT - http://www.iconbit.com/products/tablets/
|
423 |
+
'IconbitTablet' => 'NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S',
|
424 |
+
// http://www.teclast.com/topic.php?channelID=70&topicID=140&pid=63
|
425 |
+
'TeclastTablet' => 'T98 4G|\bP80\b|\bX90HD\b|X98 Air|X98 Air 3G|\bX89\b|P80 3G|\bX80h\b|P98 Air|\bX89HD\b|P98 3G|\bP90HD\b|P89 3G|X98 3G|\bP70h\b|P79HD 3G|G18d 3G|\bP79HD\b|\bP89s\b|\bA88\b|\bP10HD\b|\bP19HD\b|G18 3G|\bP78HD\b|\bA78\b|\bP75\b|G17s 3G|G17h 3G|\bP85t\b|\bP90\b|\bP11\b|\bP98t\b|\bP98HD\b|\bG18d\b|\bP85s\b|\bP11HD\b|\bP88s\b|\bA80HD\b|\bA80se\b|\bA10h\b|\bP89\b|\bP78s\b|\bG18\b|\bP85\b|\bA70h\b|\bA70\b|\bG17\b|\bP18\b|\bA80s\b|\bA11s\b|\bP88HD\b|\bA80h\b|\bP76s\b|\bP76h\b|\bP98\b|\bA10HD\b|\bP78\b|\bP88\b|\bA11\b|\bA10t\b|\bP76a\b|\bP76t\b|\bP76e\b|\bP85HD\b|\bP85a\b|\bP86\b|\bP75HD\b|\bP76v\b|\bA12\b|\bP75a\b|\bA15\b|\bP76Ti\b|\bP81HD\b|\bA10\b|\bT760VE\b|\bT720HD\b|\bP76\b|\bP73\b|\bP71\b|\bP72\b|\bT720SE\b|\bC520Ti\b|\bT760\b|\bT720VE\b|T720-3GE|T720-WiFi',
|
426 |
+
// Onda - http://www.onda-tablet.com/buy-android-onda.html?dir=desc&limit=all&order=price
|
427 |
+
'OndaTablet' => '\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\b[\s]+',
|
428 |
+
'JaytechTablet' => 'TPC-PA762',
|
429 |
+
'BlaupunktTablet' => 'Endeavour 800NG|Endeavour 1010',
|
430 |
+
// http://www.digma.ru/support/download/
|
431 |
+
// @todo: Ebooks also (if requested)
|
432 |
+
'DigmaTablet' => '\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\b',
|
433 |
+
// http://www.evolioshop.com/ro/tablete-pc.html
|
434 |
+
// http://www.evolio.ro/support/downloads_static.html?cat=2
|
435 |
+
// @todo: Research some more
|
436 |
+
'EvolioTablet' => 'ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\bEvotab\b|\bNeura\b',
|
437 |
+
// @todo http://www.lavamobiles.com/tablets-data-cards
|
438 |
+
'LavaTablet' => 'QPAD E704|\bIvoryS\b|E-TAB IVORY|\bE-TAB\b',
|
439 |
+
// http://www.breezetablet.com/
|
440 |
+
'AocTablet' => 'MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712',
|
441 |
+
// http://www.mpmaneurope.com/en/products/internet-tablets-14/android-tablets-14/
|
442 |
+
'MpmanTablet' => 'MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\bMPG7\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010',
|
443 |
+
// https://www.celkonmobiles.com/?_a=categoryphones&sid=2
|
444 |
+
'CelkonTablet' => 'CT695|CT888|CT[\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\bCT-1\b',
|
445 |
+
// http://www.wolderelectronics.com/productos/manuales-y-guias-rapidas/categoria-2-miTab
|
446 |
+
'WolderTablet' => 'miTab \b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\b',
|
447 |
+
// http://www.mi.com/en
|
448 |
+
'MiTablet' => '\bMI PAD\b|\bHM NOTE 1W\b',
|
449 |
+
// http://www.nbru.cn/index.html
|
450 |
+
'NibiruTablet' => 'Nibiru M1|Nibiru Jupiter One',
|
451 |
+
// http://navroad.com/products/produkty/tablety/
|
452 |
+
// http://navroad.com/products/produkty/tablety/
|
453 |
+
'NexoTablet' => 'NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI',
|
454 |
+
// http://leader-online.com/new_site/product-category/tablets/
|
455 |
+
// http://www.leader-online.net.au/List/Tablet
|
456 |
+
'LeaderTablet' => 'TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100',
|
457 |
+
// http://www.datawind.com/ubislate/
|
458 |
+
'UbislateTablet' => 'UbiSlate[\s]?7C',
|
459 |
+
// http://www.pocketbook-int.com/ru/support
|
460 |
+
'PocketBookTablet' => 'Pocketbook',
|
461 |
+
// http://www.kocaso.com/product_tablet.html
|
462 |
+
'KocasoTablet' => '\b(TB-1207)\b',
|
463 |
+
// http://global.hisense.com/product/asia/tablet/Sero7/201412/t20141215_91832.htm
|
464 |
+
'HisenseTablet' => '\b(F5281|E2371)\b',
|
465 |
+
// http://www.tesco.com/direct/hudl/
|
466 |
+
'Hudl' => 'Hudl HT7S3|Hudl 2',
|
467 |
+
// http://www.telstra.com.au/home-phone/thub-2/
|
468 |
+
'TelstraTablet' => 'T-Hub2',
|
469 |
+
'GenericTablet' => 'Android.*\b97D\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b|rk30sdk|\bEVOTAB\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\bM6pro\b|CT1020W|arc 10HD|\bTP750\b|\bQTAQZ3\b'
|
470 |
+
);
|
471 |
+
|
472 |
+
/**
|
473 |
+
* List of mobile Operating Systems.
|
474 |
+
*
|
475 |
+
* @var array
|
476 |
+
*/
|
477 |
+
protected static $operatingSystems = array(
|
478 |
+
'AndroidOS' => 'Android',
|
479 |
+
'BlackBerryOS' => 'blackberry|\bBB10\b|rim tablet os',
|
480 |
+
'PalmOS' => 'PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino',
|
481 |
+
'SymbianOS' => 'Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\bS60\b',
|
482 |
+
// @reference: http://en.wikipedia.org/wiki/Windows_Mobile
|
483 |
+
'WindowsMobileOS' => 'Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window Mobile|Windows Phone [0-9.]+|WCE;',
|
484 |
+
// @reference: http://en.wikipedia.org/wiki/Windows_Phone
|
485 |
+
// http://wifeng.cn/?r=blog&a=view&id=106
|
486 |
+
// http://nicksnettravels.builttoroam.com/post/2011/01/10/Bogus-Windows-Phone-7-User-Agent-String.aspx
|
487 |
+
// http://msdn.microsoft.com/library/ms537503.aspx
|
488 |
+
// https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx
|
489 |
+
'WindowsPhoneOS' => 'Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;',
|
490 |
+
'iOS' => '\biPhone.*Mobile|\biPod|\biPad|AppleCoreMedia',
|
491 |
+
// http://en.wikipedia.org/wiki/MeeGo
|
492 |
+
// @todo: research MeeGo in UAs
|
493 |
+
'MeeGoOS' => 'MeeGo',
|
494 |
+
// http://en.wikipedia.org/wiki/Maemo
|
495 |
+
// @todo: research Maemo in UAs
|
496 |
+
'MaemoOS' => 'Maemo',
|
497 |
+
'JavaOS' => 'J2ME/|\bMIDP\b|\bCLDC\b', // '|Java/' produces bug #135
|
498 |
+
'webOS' => 'webOS|hpwOS',
|
499 |
+
'badaOS' => '\bBada\b',
|
500 |
+
'BREWOS' => 'BREW',
|
501 |
+
);
|
502 |
+
|
503 |
+
/**
|
504 |
+
* List of mobile User Agents.
|
505 |
+
*
|
506 |
+
* IMPORTANT: This is a list of only mobile browsers.
|
507 |
+
* Mobile Detect 2.x supports only mobile browsers,
|
508 |
+
* it was never designed to detect all browsers.
|
509 |
+
* The change will come in 2017 in the 3.x release for PHP7.
|
510 |
+
*
|
511 |
+
* @var array
|
512 |
+
*/
|
513 |
+
protected static $browsers = array(
|
514 |
+
//'Vivaldi' => 'Vivaldi',
|
515 |
+
// @reference: https://developers.google.com/chrome/mobile/docs/user-agent
|
516 |
+
'Chrome' => '\bCrMo\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?',
|
517 |
+
'Dolfin' => '\bDolfin\b',
|
518 |
+
'Opera' => 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+|Coast/[0-9.]+',
|
519 |
+
'Skyfire' => 'Skyfire',
|
520 |
+
'Edge' => 'Mobile Safari/[.0-9]* Edge',
|
521 |
+
'IE' => 'IEMobile|MSIEMobile', // |Trident/[.0-9]+
|
522 |
+
'Firefox' => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS',
|
523 |
+
'Bolt' => 'bolt',
|
524 |
+
'TeaShark' => 'teashark',
|
525 |
+
'Blazer' => 'Blazer',
|
526 |
+
// @reference: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3
|
527 |
+
'Safari' => 'Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari',
|
528 |
+
// http://en.wikipedia.org/wiki/Midori_(web_browser)
|
529 |
+
//'Midori' => 'midori',
|
530 |
+
//'Tizen' => 'Tizen',
|
531 |
+
'UCBrowser' => 'UC.*Browser|UCWEB',
|
532 |
+
'baiduboxapp' => 'baiduboxapp',
|
533 |
+
'baidubrowser' => 'baidubrowser',
|
534 |
+
// https://github.com/serbanghita/Mobile-Detect/issues/7
|
535 |
+
'DiigoBrowser' => 'DiigoBrowser',
|
536 |
+
// http://www.puffinbrowser.com/index.php
|
537 |
+
'Puffin' => 'Puffin',
|
538 |
+
// http://mercury-browser.com/index.html
|
539 |
+
'Mercury' => '\bMercury\b',
|
540 |
+
// http://en.wikipedia.org/wiki/Obigo_Browser
|
541 |
+
'ObigoBrowser' => 'Obigo',
|
542 |
+
// http://en.wikipedia.org/wiki/NetFront
|
543 |
+
'NetFront' => 'NF-Browser',
|
544 |
+
// @reference: http://en.wikipedia.org/wiki/Minimo
|
545 |
+
// http://en.wikipedia.org/wiki/Vision_Mobile_Browser
|
546 |
+
'GenericBrowser' => 'NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger',
|
547 |
+
// @reference: https://en.wikipedia.org/wiki/Pale_Moon_(web_browser)
|
548 |
+
'PaleMoon' => 'Android.*PaleMoon|Mobile.*PaleMoon',
|
549 |
+
);
|
550 |
+
|
551 |
+
/**
|
552 |
+
* Utilities.
|
553 |
+
*
|
554 |
+
* @var array
|
555 |
+
*/
|
556 |
+
protected static $utilities = array(
|
557 |
+
// Experimental. When a mobile device wants to switch to 'Desktop Mode'.
|
558 |
+
// http://scottcate.com/technology/windows-phone-8-ie10-desktop-or-mobile/
|
559 |
+
// https://github.com/serbanghita/Mobile-Detect/issues/57#issuecomment-15024011
|
560 |
+
// https://developers.facebook.com/docs/sharing/best-practices
|
561 |
+
'Bot' => 'Googlebot|facebookexternalhit|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom',
|
562 |
+
'MobileBot' => 'Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2',
|
563 |
+
'DesktopMode' => 'WPDesktop',
|
564 |
+
'TV' => 'SonyDTV|HbbTV', // experimental
|
565 |
+
'WebKit' => '(webkit)[ /]([\w.]+)',
|
566 |
+
// @todo: Include JXD consoles.
|
567 |
+
'Console' => '\b(Nintendo|Nintendo WiiU|Nintendo 3DS|PLAYSTATION|Xbox)\b',
|
568 |
+
'Watch' => 'SM-V700',
|
569 |
+
);
|
570 |
+
|
571 |
+
/**
|
572 |
+
* All possible HTTP headers that represent the
|
573 |
+
* User-Agent string.
|
574 |
+
*
|
575 |
+
* @var array
|
576 |
+
*/
|
577 |
+
protected static $uaHttpHeaders = array(
|
578 |
+
// The default User-Agent string.
|
579 |
+
'HTTP_USER_AGENT',
|
580 |
+
// Header can occur on devices using Opera Mini.
|
581 |
+
'HTTP_X_OPERAMINI_PHONE_UA',
|
582 |
+
// Vodafone specific header: http://www.seoprinciple.com/mobile-web-community-still-angry-at-vodafone/24/
|
583 |
+
'HTTP_X_DEVICE_USER_AGENT',
|
584 |
+
'HTTP_X_ORIGINAL_USER_AGENT',
|
585 |
+
'HTTP_X_SKYFIRE_PHONE',
|
586 |
+
'HTTP_X_BOLT_PHONE_UA',
|
587 |
+
'HTTP_DEVICE_STOCK_UA',
|
588 |
+
'HTTP_X_UCBROWSER_DEVICE_UA'
|
589 |
+
);
|
590 |
+
|
591 |
+
/**
|
592 |
+
* The individual segments that could exist in a User-Agent string. VER refers to the regular
|
593 |
+
* expression defined in the constant self::VER.
|
594 |
+
*
|
595 |
+
* @var array
|
596 |
+
*/
|
597 |
+
protected static $properties = array(
|
598 |
+
|
599 |
+
// Build
|
600 |
+
'Mobile' => 'Mobile/[VER]',
|
601 |
+
'Build' => 'Build/[VER]',
|
602 |
+
'Version' => 'Version/[VER]',
|
603 |
+
'VendorID' => 'VendorID/[VER]',
|
604 |
+
|
605 |
+
// Devices
|
606 |
+
'iPad' => 'iPad.*CPU[a-z ]+[VER]',
|
607 |
+
'iPhone' => 'iPhone.*CPU[a-z ]+[VER]',
|
608 |
+
'iPod' => 'iPod.*CPU[a-z ]+[VER]',
|
609 |
+
//'BlackBerry' => array('BlackBerry[VER]', 'BlackBerry [VER];'),
|
610 |
+
'Kindle' => 'Kindle/[VER]',
|
611 |
+
|
612 |
+
// Browser
|
613 |
+
'Chrome' => array('Chrome/[VER]', 'CriOS/[VER]', 'CrMo/[VER]'),
|
614 |
+
'Coast' => array('Coast/[VER]'),
|
615 |
+
'Dolfin' => 'Dolfin/[VER]',
|
616 |
+
// @reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox
|
617 |
+
'Firefox' => array('Firefox/[VER]', 'FxiOS/[VER]'),
|
618 |
+
'Fennec' => 'Fennec/[VER]',
|
619 |
+
// http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx
|
620 |
+
// https://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx
|
621 |
+
'Edge' => 'Edge/[VER]',
|
622 |
+
'IE' => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];', 'Trident/[0-9.]+;.*rv:[VER]'),
|
623 |
+
// http://en.wikipedia.org/wiki/NetFront
|
624 |
+
'NetFront' => 'NetFront/[VER]',
|
625 |
+
'NokiaBrowser' => 'NokiaBrowser/[VER]',
|
626 |
+
'Opera' => array( ' OPR/[VER]', 'Opera Mini/[VER]', 'Version/[VER]' ),
|
627 |
+
'Opera Mini' => 'Opera Mini/[VER]',
|
628 |
+
'Opera Mobi' => 'Version/[VER]',
|
629 |
+
'UCBrowser' => array( 'UCWEB[VER]', 'UC.*Browser/[VER]' ),
|
630 |
+
'MQQBrowser' => 'MQQBrowser/[VER]',
|
631 |
+
'MicroMessenger' => 'MicroMessenger/[VER]',
|
632 |
+
'baiduboxapp' => 'baiduboxapp/[VER]',
|
633 |
+
'baidubrowser' => 'baidubrowser/[VER]',
|
634 |
+
'SamsungBrowser' => 'SamsungBrowser/[VER]',
|
635 |
+
'Iron' => 'Iron/[VER]',
|
636 |
+
// @note: Safari 7534.48.3 is actually Version 5.1.
|
637 |
+
// @note: On BlackBerry the Version is overwriten by the OS.
|
638 |
+
'Safari' => array( 'Version/[VER]', 'Safari/[VER]' ),
|
639 |
+
'Skyfire' => 'Skyfire/[VER]',
|
640 |
+
'Tizen' => 'Tizen/[VER]',
|
641 |
+
'Webkit' => 'webkit[ /][VER]',
|
642 |
+
'PaleMoon' => 'PaleMoon/[VER]',
|
643 |
+
|
644 |
+
// Engine
|
645 |
+
'Gecko' => 'Gecko/[VER]',
|
646 |
+
'Trident' => 'Trident/[VER]',
|
647 |
+
'Presto' => 'Presto/[VER]',
|
648 |
+
'Goanna' => 'Goanna/[VER]',
|
649 |
+
|
650 |
+
// OS
|
651 |
+
'iOS' => ' \bi?OS\b [VER][ ;]{1}',
|
652 |
+
'Android' => 'Android [VER]',
|
653 |
+
'BlackBerry' => array('BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'),
|
654 |
+
'BREW' => 'BREW [VER]',
|
655 |
+
'Java' => 'Java/[VER]',
|
656 |
+
// @reference: http://windowsteamblog.com/windows_phone/b/wpdev/archive/2011/08/29/introducing-the-ie9-on-windows-phone-mango-user-agent-string.aspx
|
657 |
+
// @reference: http://en.wikipedia.org/wiki/Windows_NT#Releases
|
658 |
+
'Windows Phone OS' => array( 'Windows Phone OS [VER]', 'Windows Phone [VER]'),
|
659 |
+
'Windows Phone' => 'Windows Phone [VER]',
|
660 |
+
'Windows CE' => 'Windows CE/[VER]',
|
661 |
+
// http://social.msdn.microsoft.com/Forums/en-US/windowsdeveloperpreviewgeneral/thread/6be392da-4d2f-41b4-8354-8dcee20c85cd
|
662 |
+
'Windows NT' => 'Windows NT [VER]',
|
663 |
+
'Symbian' => array('SymbianOS/[VER]', 'Symbian/[VER]'),
|
664 |
+
'webOS' => array('webOS/[VER]', 'hpwOS/[VER];'),
|
665 |
+
);
|
666 |
+
|
667 |
+
/**
|
668 |
+
* Construct an instance of this class.
|
669 |
+
*
|
670 |
+
* @param array $headers Specify the headers as injection. Should be PHP _SERVER flavored.
|
671 |
+
* If left empty, will use the global _SERVER['HTTP_*'] vars instead.
|
672 |
+
* @param string $userAgent Inject the User-Agent header. If null, will use HTTP_USER_AGENT
|
673 |
+
* from the $headers array instead.
|
674 |
+
*/
|
675 |
+
public function __construct(
|
676 |
+
array $headers = null,
|
677 |
+
$userAgent = null
|
678 |
+
) {
|
679 |
+
$this->setHttpHeaders($headers);
|
680 |
+
$this->setUserAgent($userAgent);
|
681 |
+
}
|
682 |
+
|
683 |
+
/**
|
684 |
+
* Get the current script version.
|
685 |
+
* This is useful for the demo.php file,
|
686 |
+
* so people can check on what version they are testing
|
687 |
+
* for mobile devices.
|
688 |
+
*
|
689 |
+
* @return string The version number in semantic version format.
|
690 |
+
*/
|
691 |
+
public static function getScriptVersion()
|
692 |
+
{
|
693 |
+
return self::VERSION;
|
694 |
+
}
|
695 |
+
|
696 |
+
/**
|
697 |
+
* Set the HTTP Headers. Must be PHP-flavored. This method will reset existing headers.
|
698 |
+
*
|
699 |
+
* @param array $httpHeaders The headers to set. If null, then using PHP's _SERVER to extract
|
700 |
+
* the headers. The default null is left for backwards compatibility.
|
701 |
+
*/
|
702 |
+
public function setHttpHeaders($httpHeaders = null)
|
703 |
+
{
|
704 |
+
// use global _SERVER if $httpHeaders aren't defined
|
705 |
+
if (!is_array($httpHeaders) || !count($httpHeaders)) {
|
706 |
+
$httpHeaders = $_SERVER;
|
707 |
+
}
|
708 |
+
|
709 |
+
// clear existing headers
|
710 |
+
$this->httpHeaders = array();
|
711 |
+
|
712 |
+
// Only save HTTP headers. In PHP land, that means only _SERVER vars that
|
713 |
+
// start with HTTP_.
|
714 |
+
foreach ($httpHeaders as $key => $value) {
|
715 |
+
if (substr($key, 0, 5) === 'HTTP_') {
|
716 |
+
$this->httpHeaders[$key] = $value;
|
717 |
+
}
|
718 |
+
}
|
719 |
+
|
720 |
+
// In case we're dealing with CloudFront, we need to know.
|
721 |
+
$this->setCfHeaders($httpHeaders);
|
722 |
+
}
|
723 |
+
|
724 |
+
/**
|
725 |
+
* Retrieves the HTTP headers.
|
726 |
+
*
|
727 |
+
* @return array
|
728 |
+
*/
|
729 |
+
public function getHttpHeaders()
|
730 |
+
{
|
731 |
+
return $this->httpHeaders;
|
732 |
+
}
|
733 |
+
|
734 |
+
/**
|
735 |
+
* Retrieves a particular header. If it doesn't exist, no exception/error is caused.
|
736 |
+
* Simply null is returned.
|
737 |
+
*
|
738 |
+
* @param string $header The name of the header to retrieve. Can be HTTP compliant such as
|
739 |
+
* "User-Agent" or "X-Device-User-Agent" or can be php-esque with the
|
740 |
+
* all-caps, HTTP_ prefixed, underscore seperated awesomeness.
|
741 |
+
*
|
742 |
+
* @return string|null The value of the header.
|
743 |
+
*/
|
744 |
+
public function getHttpHeader($header)
|
745 |
+
{
|
746 |
+
// are we using PHP-flavored headers?
|
747 |
+
if (strpos($header, '_') === false) {
|
748 |
+
$header = str_replace('-', '_', $header);
|
749 |
+
$header = strtoupper($header);
|
750 |
+
}
|
751 |
+
|
752 |
+
// test the alternate, too
|
753 |
+
$altHeader = 'HTTP_' . $header;
|
754 |
+
|
755 |
+
//Test both the regular and the HTTP_ prefix
|
756 |
+
if (isset($this->httpHeaders[$header])) {
|
757 |
+
return $this->httpHeaders[$header];
|
758 |
+
} elseif (isset($this->httpHeaders[$altHeader])) {
|
759 |
+
return $this->httpHeaders[$altHeader];
|
760 |
+
}
|
761 |
+
|
762 |
+
return null;
|
763 |
+
}
|
764 |
+
|
765 |
+
public function getMobileHeaders()
|
766 |
+
{
|
767 |
+
return self::$mobileHeaders;
|
768 |
+
}
|
769 |
+
|
770 |
+
/**
|
771 |
+
* Get all possible HTTP headers that
|
772 |
+
* can contain the User-Agent string.
|
773 |
+
*
|
774 |
+
* @return array List of HTTP headers.
|
775 |
+
*/
|
776 |
+
public function getUaHttpHeaders()
|
777 |
+
{
|
778 |
+
return self::$uaHttpHeaders;
|
779 |
+
}
|
780 |
+
|
781 |
+
|
782 |
+
/**
|
783 |
+
* Set CloudFront headers
|
784 |
+
* http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-device
|
785 |
+
*
|
786 |
+
* @param array $cfHeaders List of HTTP headers
|
787 |
+
*
|
788 |
+
* @return boolean If there were CloudFront headers to be set
|
789 |
+
*/
|
790 |
+
public function setCfHeaders($cfHeaders = null) {
|
791 |
+
// use global _SERVER if $cfHeaders aren't defined
|
792 |
+
if (!is_array($cfHeaders) || !count($cfHeaders)) {
|
793 |
+
$cfHeaders = $_SERVER;
|
794 |
+
}
|
795 |
+
|
796 |
+
// clear existing headers
|
797 |
+
$this->cloudfrontHeaders = array();
|
798 |
+
|
799 |
+
// Only save CLOUDFRONT headers. In PHP land, that means only _SERVER vars that
|
800 |
+
// start with cloudfront-.
|
801 |
+
$response = false;
|
802 |
+
foreach ($cfHeaders as $key => $value) {
|
803 |
+
if (substr(strtolower($key), 0, 16) === 'http_cloudfront_') {
|
804 |
+
$this->cloudfrontHeaders[strtoupper($key)] = $value;
|
805 |
+
$response = true;
|
806 |
+
}
|
807 |
+
}
|
808 |
+
|
809 |
+
return $response;
|
810 |
+
}
|
811 |
+
|
812 |
+
/**
|
813 |
+
* Retrieves the cloudfront headers.
|
814 |
+
*
|
815 |
+
* @return array
|
816 |
+
*/
|
817 |
+
public function getCfHeaders()
|
818 |
+
{
|
819 |
+
return $this->cloudfrontHeaders;
|
820 |
+
}
|
821 |
+
|
822 |
+
/**
|
823 |
+
* @param string $userAgent
|
824 |
+
* @return string
|
825 |
+
*/
|
826 |
+
private function prepareUserAgent($userAgent) {
|
827 |
+
$userAgent = trim($userAgent);
|
828 |
+
$userAgent = substr($userAgent, 0, 500
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|