Version Description
- 15/06/2021 =
- Enhanced user experience with new UI
- Earlier some users were able to see 25 products only on product sync dashboard, the issue is fixed now
- Added customized notifications to track the activty and functioning of plugin
- Added customer support number to quickly reach out to us for any query
- API performance enhancements
Download this release
Release Info
Developer | Tatvic |
Plugin | Enhanced Ecommerce Google Analytics Plugin for WooCommerce |
Version | 3.1.0 |
Comparing to | |
See all releases |
Code changes from version 3.0.5 to 3.1.0
- admin/class-enhanced-ecommerce-google-analytics-admin.php +246 -83
- admin/class-enhanced-ecommerce-google-analytics-settings.php +0 -16
- admin/class-tvc-admin-auto-product-sync-helper.php +34 -17
- admin/class-tvc-admin-db-helper.php +49 -5
- admin/class-tvc-admin-helper.php +317 -67
- admin/css/bootstrap.rtl.min.css +7 -0
- admin/css/custom-style.css +2071 -583
- admin/css/dataTables.bootstrap4.min.css +1 -0
- admin/css/enhanced-ecommerce-google-analytics-admin.css +156 -167
- admin/images/banner.png +0 -0
- admin/images/cotlw.gif +0 -0
- admin/images/icon/add.svg +35 -0
- admin/images/icon/arrow-down-sign-to-navigate.svg +1 -0
- admin/images/icon/information.svg +1 -0
- admin/images/icon/informationI.svg +1 -0
- admin/images/icon/lamp.svg +1 -0
- admin/images/icon/left-angle-arrow.svg +1 -0
- admin/images/icon/notification.svg +1 -0
- admin/images/icon/refresh.svg +1 -0
- admin/images/icon/right-arrow.svg +1 -0
- admin/images/icon/tick-round.svg +1 -0
- admin/images/icon/undraw_update_uxn2.svg +1 -0
- admin/images/new-2.gif +0 -0
- admin/images/new-img.gif +0 -0
- admin/images/plugin_bk.png +0 -0
- admin/images/woo_banner_adv.gif +0 -0
- admin/js/dataTables.bootstrap4.min.js +14 -0
- admin/js/jquery.dataTables.min.js +184 -0
- admin/js/slick.min.js +1 -0
- admin/js/tvc-ee-custom.js +7 -0
- admin/partials/about-plugin.php +2 -2
- admin/partials/enhanced-ecommerce-google-analytics-admin-display.php +74 -86
- admin/partials/general-fields.php +375 -320
- admin/partials/sidebar.php +0 -60
- enhanced-ecommerce-google-analytics.php +4 -51
- google_ads_php.ini +0 -14
- includes/class-enhanced-ecommerce-google-analytics.php +3 -10
- includes/class-tvc-register-scripts.php +4 -9
- includes/data/class-tvc-ajax-calls.php +1 -7
- includes/data/class-tvc-ajax-data.php +0 -448
- includes/data/class-tvc-ajax-file.php +64 -345
- includes/data/class-tvc-feed-crud-handler.php +0 -88
- includes/data/class-tvc-file.php +0 -246
- includes/data/class-tvc-queries.php +0 -972
- includes/data/js/tvc_ajaxdatahandling.js +1 -717
- includes/data/js/tvc_ajaxdatahandling.min.js +0 -364
- includes/setup/CustomApi.php +98 -75
- includes/setup/ShoppingApi.php +9 -16
- includes/setup/SmartShoppingCampaign.php +0 -431
- includes/setup/add-campaign.php +360 -460
- includes/setup/class-tatvic-category-selector-element.php +3 -13
- includes/setup/google-ads.php +123 -128
- includes/setup/google-shopping-feed-gaa-config.php +95 -94
- includes/setup/google-shopping-feed-shopping-campaigns.php +624 -663
- includes/setup/google-shopping-feed-sync-product.php +175 -142
- includes/setup/google-shopping-feed.php +143 -141
- includes/setup/help-html.php +346 -99
- includes/setup/json/client-secrets.json +1 -14
- includes/setup/tatvic-category-wrapper.php +2 -4
- includes/user-interface/tvc-url-functions.php +0 -85
- public/class-enhanced-ecommerce-google-analytics-public.php +27 -4
- public/partials/class-enhanced-ecommerce-google-analytics-public-display.php +0 -16
- readme.txt +9 -2
admin/class-enhanced-ecommerce-google-analytics-admin.php
CHANGED
@@ -52,14 +52,17 @@ class Enhanced_Ecommerce_Google_Analytics_Admin extends TVC_Admin_Helper {
|
|
52 |
protected $ga_LC;
|
53 |
protected $ga_eeT;
|
54 |
protected $site_url;
|
|
|
55 |
public function __construct($plugin_name, $version) {
|
56 |
$this->plugin_name = $plugin_name;
|
57 |
$this->version = $version;
|
58 |
$this->url = $this->get_connect_url();
|
59 |
$this->site_url = "admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=";
|
|
|
60 |
}
|
61 |
public function tvc_admin_notice(){
|
62 |
-
//
|
|
|
63 |
$ee_additional_data = $this->get_ee_additional_data();
|
64 |
if(isset($ee_additional_data['dismissed_ee_adimin_notic_a']) && $ee_additional_data['dismissed_ee_adimin_notic_a'] == 1){
|
65 |
}else{
|
@@ -100,10 +103,7 @@ class Enhanced_Ecommerce_Google_Analytics_Admin extends TVC_Admin_Helper {
|
|
100 |
} );
|
101 |
})( jQuery );
|
102 |
</script>
|
103 |
-
<?php
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
}
|
108 |
|
109 |
|
@@ -113,30 +113,32 @@ class Enhanced_Ecommerce_Google_Analytics_Admin extends TVC_Admin_Helper {
|
|
113 |
* @since 1.0.0
|
114 |
*/
|
115 |
public function enqueue_styles() {
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
122 |
wp_register_style('aga_confirm', '//cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.2/jquery-confirm.min.css');
|
123 |
wp_enqueue_style('aga_confirm');
|
124 |
-
|
125 |
-
wp_enqueue_style('
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
}
|
132 |
-
if($this->is_current_tab_in(array("shopping_campaigns_page","add_campaign_page"))){
|
133 |
-
wp_register_style('plugin-select2',ENHANCAD_PLUGIN_URL . '/includes/setup/plugins/select2/select2.min.css');
|
134 |
-
wp_enqueue_style('plugin-select2');
|
135 |
-
wp_register_style('bootstrap-datepicker',ENHANCAD_PLUGIN_URL. '/includes/setup/plugins/datepicker/bootstrap-datepicker.min.css');
|
136 |
-
wp_enqueue_style('bootstrap-datepicker');
|
137 |
-
}
|
138 |
-
wp_enqueue_style($this->plugin_name, plugin_dir_url(__FILE__) . 'css/enhanced-ecommerce-google-analytics-admin.css', array(), $this->version, 'all');
|
139 |
-
}
|
140 |
}
|
141 |
|
142 |
/**
|
@@ -145,34 +147,42 @@ class Enhanced_Ecommerce_Google_Analytics_Admin extends TVC_Admin_Helper {
|
|
145 |
* @since 1.0.0
|
146 |
*/
|
147 |
public function enqueue_scripts() {
|
148 |
-
|
149 |
-
|
150 |
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
176 |
}
|
177 |
|
178 |
/**
|
@@ -180,26 +190,168 @@ class Enhanced_Ecommerce_Google_Analytics_Admin extends TVC_Admin_Helper {
|
|
180 |
*
|
181 |
* @since 1.0.0
|
182 |
*/
|
183 |
-
public function display_admin_page() {
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
}
|
204 |
/**
|
205 |
* Display Tab page.
|
@@ -207,9 +359,12 @@ class Enhanced_Ecommerce_Google_Analytics_Admin extends TVC_Admin_Helper {
|
|
207 |
* @since 1.0.0
|
208 |
*/
|
209 |
public function showPage() {
|
210 |
-
|
211 |
-
|
212 |
-
|
|
|
|
|
|
|
213 |
echo $this->call_tvc_site_verified_and_domain_claim();
|
214 |
if (!empty($_GET['tab'])) {
|
215 |
$get_action = $_GET['tab'];
|
@@ -219,8 +374,10 @@ class Enhanced_Ecommerce_Google_Analytics_Admin extends TVC_Admin_Helper {
|
|
219 |
if (method_exists($this, $get_action)) {
|
220 |
$this->$get_action();
|
221 |
}
|
222 |
-
|
223 |
-
|
|
|
|
|
224 |
}
|
225 |
public function check_nall_and_message($val, $msg, $msg_false){
|
226 |
if((isset($val) && $val != "" && $val != 0) ){
|
@@ -229,8 +386,13 @@ class Enhanced_Ecommerce_Google_Analytics_Admin extends TVC_Admin_Helper {
|
|
229 |
return $msg_false;
|
230 |
}
|
231 |
}
|
232 |
-
|
233 |
-
|
|
|
|
|
|
|
|
|
|
|
234 |
require_once( 'partials/general-fields.php');
|
235 |
}
|
236 |
public function google_ads() {
|
@@ -262,7 +424,8 @@ class Enhanced_Ecommerce_Google_Analytics_Admin extends TVC_Admin_Helper {
|
|
262 |
include(ENHANCAD_PLUGIN_DIR . 'includes/setup/help-html.php');
|
263 |
include(ENHANCAD_PLUGIN_DIR . 'includes/setup/add-campaign.php');
|
264 |
new AddCampaign();
|
265 |
-
}
|
|
|
266 |
public function conversion_tracking() {
|
267 |
require_once( 'partials/conversion-tracking.php');
|
268 |
}
|
@@ -299,5 +462,5 @@ class Enhanced_Ecommerce_Google_Analytics_Admin extends TVC_Admin_Helper {
|
|
299 |
public function end_time() {
|
300 |
$this->country_location();
|
301 |
return strtotime('11:59 PM');
|
302 |
-
}
|
303 |
}
|
52 |
protected $ga_LC;
|
53 |
protected $ga_eeT;
|
54 |
protected $site_url;
|
55 |
+
protected $pro_plan_site;
|
56 |
public function __construct($plugin_name, $version) {
|
57 |
$this->plugin_name = $plugin_name;
|
58 |
$this->version = $version;
|
59 |
$this->url = $this->get_connect_url();
|
60 |
$this->site_url = "admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=";
|
61 |
+
$this->pro_plan_site = $this->get_pro_plan_site();
|
62 |
}
|
63 |
public function tvc_admin_notice(){
|
64 |
+
// add fixed message notification
|
65 |
+
$this->add_tvc_fixed_nofification();
|
66 |
$ee_additional_data = $this->get_ee_additional_data();
|
67 |
if(isset($ee_additional_data['dismissed_ee_adimin_notic_a']) && $ee_additional_data['dismissed_ee_adimin_notic_a'] == 1){
|
68 |
}else{
|
103 |
} );
|
104 |
})( jQuery );
|
105 |
</script>
|
106 |
+
<?php
|
|
|
|
|
|
|
107 |
}
|
108 |
|
109 |
|
113 |
* @since 1.0.0
|
114 |
*/
|
115 |
public function enqueue_styles() {
|
116 |
+
$screen = get_current_screen();
|
117 |
+
if ($screen->id == 'toplevel_page_enhanced-ecommerce-google-analytics-admin-display' || (isset($_GET['page']) && $_GET['page'] == 'enhanced-ecommerce-google-analytics-admin-display')) {
|
118 |
+
wp_register_style('font_awesome', '//use.fontawesome.com/releases/v5.0.13/css/all.css');
|
119 |
+
wp_enqueue_style('font_awesome');
|
120 |
+
wp_register_style('plugin-bootstrap',ENHANCAD_PLUGIN_URL . '/includes/setup/plugins/bootstrap/css/bootstrap.min.css');
|
121 |
+
wp_enqueue_style('plugin-bootstrap');
|
122 |
+
wp_enqueue_style('custom-css', ENHANCAD_PLUGIN_URL . '/admin/css/custom-style.css', array(), $this->version, 'all' );
|
123 |
+
//if(is_rtl()){ }
|
124 |
+
if($this->is_current_tab_in(array('sync_product_page','gaa_config_page'))){
|
125 |
+
wp_register_style('plugin-select2',ENHANCAD_PLUGIN_URL . '/includes/setup/plugins/select2/select2.min.css');
|
126 |
+
wp_enqueue_style('plugin-select2');
|
127 |
+
wp_register_style('plugin-steps',ENHANCAD_PLUGIN_URL . '/includes/setup/plugins/jquery-steps/jquery.steps.css');
|
128 |
+
wp_enqueue_style('plugin-steps');
|
129 |
+
wp_register_style('tvc-dataTables-css', ENHANCAD_PLUGIN_URL.'/admin/css/dataTables.bootstrap4.min.css');
|
130 |
+
wp_enqueue_style('tvc-dataTables-css');
|
131 |
+
}
|
132 |
+
if($this->is_current_tab_in(array("shopping_campaigns_page","add_campaign_page"))){
|
133 |
wp_register_style('aga_confirm', '//cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.2/jquery-confirm.min.css');
|
134 |
wp_enqueue_style('aga_confirm');
|
135 |
+
wp_register_style('plugin-select2',ENHANCAD_PLUGIN_URL . '/includes/setup/plugins/select2/select2.min.css');
|
136 |
+
wp_enqueue_style('plugin-select2');
|
137 |
+
wp_register_style('tvc-bootstrap-datepicker-css',ENHANCAD_PLUGIN_URL. '/includes/setup/plugins/datepicker/bootstrap-datepicker.min.css');
|
138 |
+
wp_enqueue_style('tvc-bootstrap-datepicker-css');
|
139 |
+
}
|
140 |
+
wp_enqueue_style($this->plugin_name, plugin_dir_url(__FILE__) . 'css/enhanced-ecommerce-google-analytics-admin.css', array(), $this->version, 'all');
|
141 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
}
|
143 |
|
144 |
/**
|
147 |
* @since 1.0.0
|
148 |
*/
|
149 |
public function enqueue_scripts() {
|
150 |
+
$screen = get_current_screen();
|
151 |
+
if ($screen->id == 'toplevel_page_enhanced-ecommerce-google-analytics-admin-display' || (isset($_GET['page']) && $_GET['page'] == 'enhanced-ecommerce-google-analytics-admin-display')) {
|
152 |
|
153 |
+
wp_enqueue_script( 'custom-jquery', ENHANCAD_PLUGIN_URL . '/admin/js/jquery-3.5.1.min.js', array( 'jquery' ), $this->version, false );
|
154 |
+
wp_register_script('popper_bootstrap', '//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js');
|
155 |
+
wp_enqueue_script('popper_bootstrap');
|
156 |
+
wp_register_script('atvc_bootstrap', '//maxcdn.bootstrapcdn.com/bootstrap/4.5.1/js/bootstrap.min.js');
|
157 |
+
wp_enqueue_script('atvc_bootstrap');
|
158 |
+
wp_register_script('tvc_bootstrap_mod', 'https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/js/bootstrap.bundle.min.js');
|
159 |
+
wp_enqueue_script('tvc_bootstrap_mod');
|
160 |
+
|
161 |
+
wp_enqueue_script( 'tvc-ee-custom-js', ENHANCAD_PLUGIN_URL . '/admin/js/tvc-ee-custom.js', array( 'jquery' ), $this->version, false );
|
162 |
+
|
163 |
+
wp_enqueue_script( 'tvc-ee-slick-js', ENHANCAD_PLUGIN_URL . '/admin/js/slick.min.js', array( 'jquery' ), $this->version, false );
|
164 |
+
|
165 |
+
if($this->is_current_tab_in(array('sync_product_page','gaa_config_page'))){
|
166 |
+
wp_register_script('plugin-select2',ENHANCAD_PLUGIN_URL . '/includes/setup/plugins/select2/select2.min.js');
|
167 |
+
wp_enqueue_script('plugin-select2');
|
168 |
+
wp_register_script('plugin-step-js',ENHANCAD_PLUGIN_URL . '/includes/setup/plugins/jquery-steps/jquery.steps.js');
|
169 |
+
wp_enqueue_script('plugin-step-js');
|
170 |
+
}
|
171 |
+
if($this->is_current_tab_in(array('sync_product_page'))){
|
172 |
+
wp_enqueue_script( 'tvc-ee-dataTables-js', ENHANCAD_PLUGIN_URL . '/admin/js/jquery.dataTables.min.js', array( 'jquery' ), $this->version, false );
|
173 |
+
wp_enqueue_script( 'tvc-ee-dataTables-1-js', ENHANCAD_PLUGIN_URL . '/admin/js/dataTables.bootstrap4.min.js', array( 'jquery' ), $this->version, false );
|
174 |
+
}
|
175 |
+
if($this->is_current_tab_in(array("shopping_campaigns_page","add_campaign_page"))){
|
176 |
+
wp_register_script('tvc_confirm_js', '//cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.2/jquery-confirm.min.js');
|
177 |
+
wp_enqueue_script('tvc_confirm_js');
|
178 |
+
wp_register_script('plugin-select2',ENHANCAD_PLUGIN_URL . '/includes/setup/plugins/select2/select2.min.js');
|
179 |
+
wp_enqueue_script('plugin-select2');
|
180 |
+
wp_register_script('plugin-chart',ENHANCAD_PLUGIN_URL . '/includes/setup/plugins/chart/chart.js');
|
181 |
+
wp_enqueue_script('plugin-chart');
|
182 |
+
wp_register_script('tvc-bootstrap-datepicker-js',ENHANCAD_PLUGIN_URL . '/includes/setup/plugins/datepicker/bootstrap-datepicker.min.js');
|
183 |
+
wp_enqueue_script('tvc-bootstrap-datepicker-js');
|
184 |
+
}
|
185 |
+
}
|
186 |
}
|
187 |
|
188 |
/**
|
190 |
*
|
191 |
* @since 1.0.0
|
192 |
*/
|
193 |
+
public function display_admin_page() {
|
194 |
+
add_menu_page(
|
195 |
+
'Tatvic EE Plugin', 'Tatvic EE Plugin', 'manage_options', "enhanced-ecommerce-google-analytics-admin-display", array($this, 'showPage'), plugin_dir_url(__FILE__) . 'images/tatvic_logo.png', 26
|
196 |
+
);
|
197 |
+
add_submenu_page('enhanced-ecommerce-google-analytics-admin-display', 'Google Analytics', 'Google Analytics', 'manage_options', 'enhanced-ecommerce-google-analytics-admin-display' );
|
198 |
+
add_submenu_page(
|
199 |
+
'enhanced-ecommerce-google-analytics-admin-display',
|
200 |
+
esc_html__('Google Ads', 'enhanced-ecommerce-google-analytics-admin-display'),
|
201 |
+
esc_html__('Google Ads', 'enhanced-ecommerce-google-analytics-admin-display'),
|
202 |
+
'manage_options',
|
203 |
+
'enhanced-ecommerce-google-analytics-admin-display&tab=google_ads',
|
204 |
+
array($this, 'showPage')
|
205 |
+
);
|
206 |
+
add_submenu_page(
|
207 |
+
'enhanced-ecommerce-google-analytics-admin-display',
|
208 |
+
esc_html__('Google Shopping', 'enhanced-ecommerce-google-analytics-admin-display'),
|
209 |
+
esc_html__('Google Shopping', 'enhanced-ecommerce-google-analytics-admin-display'),
|
210 |
+
'manage_options',
|
211 |
+
'enhanced-ecommerce-google-analytics-admin-display&tab=google_shopping_feed',
|
212 |
+
array($this, 'showPage')
|
213 |
+
);
|
214 |
+
}
|
215 |
+
protected function create_head(){
|
216 |
+
$google_detail = $this->get_ee_options_data();
|
217 |
+
$googleDetail = "";
|
218 |
+
if(isset($google_detail['setting'])){
|
219 |
+
$googleDetail = $google_detail['setting'];
|
220 |
+
}
|
221 |
+
$plan_name = "Free Plan";
|
222 |
+
$plan_price = "";
|
223 |
+
$product_sync_max_limit ="Products sync limit ( 100 )";
|
224 |
+
$plan_id = 1;
|
225 |
+
if(isset($googleDetail->plan_id) && !in_array($googleDetail->plan_id, array("1"))){
|
226 |
+
$plan_id = $googleDetail->plan_id;
|
227 |
+
}
|
228 |
+
if(isset($googleDetail->plan_name) && !in_array($googleDetail->plan_id, array("1"))){
|
229 |
+
$plan_name = $googleDetail->plan_name;
|
230 |
+
}
|
231 |
+
if(isset($googleDetail->price) && !in_array($googleDetail->plan_id, array("1"))){
|
232 |
+
$plan_price = " (".$googleDetail->price." USD)";
|
233 |
+
}
|
234 |
+
if(isset($googleDetail->max_limit)){
|
235 |
+
$max_limit = $googleDetail->max_limit;
|
236 |
+
if(in_array($plan_id, array("7","8"))){
|
237 |
+
$max_limit = "Unlimited";
|
238 |
+
}
|
239 |
+
$product_sync_max_limit = "Product sync limit ( ".$max_limit." )";
|
240 |
+
}
|
241 |
+
?>
|
242 |
+
<div class="container">
|
243 |
+
<div class="header-section">
|
244 |
+
<?php if($plan_id == 1){?>
|
245 |
+
<div class="top-section">
|
246 |
+
<p>You are using free plugin. To unlock more features consider <a href="<?php echo $this->pro_plan_site; ?>" target="_blank" class="text-underline">upgrading to pro</a>..!!!</p>
|
247 |
+
</div>
|
248 |
+
<?php } ?>
|
249 |
+
<nav class="navbar navbar-section">
|
250 |
+
<a class="navbar-brand">
|
251 |
+
<img src="https://d3rv1nmzvje89q.cloudfront.net/optimized_v5/2017/02/logo_optimize-1024x310.png"/>
|
252 |
+
</a>
|
253 |
+
<div class="form-inline">
|
254 |
+
<span class="nav-btn">
|
255 |
+
<span class="badge badge-primary free-plan"><?php echo $plan_name; //echo $plan_price;?> - <?php echo $product_sync_max_limit; ?></span>
|
256 |
+
</span>
|
257 |
+
<?php $ee_msg_list = $this->get_ee_msg_nofification_list();
|
258 |
+
$active_count = 0;
|
259 |
+
if(!empty($ee_msg_list)){
|
260 |
+
$html = "";
|
261 |
+
foreach ($ee_msg_list as $key => $value) {
|
262 |
+
if( isset($value["active"]) && $value["active"] == 1 ){
|
263 |
+
$active_count++;
|
264 |
+
$m_date = isset($value["date"])?"<span class=\"tvc-msg_date\">".$value["date"]."</span>":"";
|
265 |
+
$m_title = isset($value["title"])?"<h4 class=\"tvc-msg_title\">".$value["title"]."</h4>":"";
|
266 |
+
$m_html = isset($value["html"])?"<span class=\"tvc-msg_text\">".base64_decode($value["html"])."</span>":"";
|
267 |
+
$target = (isset($value["link_type"]) && $value["link_type"] == "external")?"target=\"_blank\"":"";
|
268 |
+
$m_link = isset($value["link"])?"<a ".$target." href=".$value["link"]." class=\"tvc-notification-button is-secondary\">".$value["link_title"]."</a>":"";
|
269 |
+
|
270 |
+
$html.="<li>
|
271 |
+
<section class=\"tvc-msg plain\">
|
272 |
+
<div class=\"tvc-msg_wrapper\">
|
273 |
+
<div class=\"tvc-msg_content\">".$m_date . $m_title.$m_html."</div>
|
274 |
+
<div class=\"tvc-msg_actions\">
|
275 |
+
".$m_link."
|
276 |
+
<div class=\"tvc-dropdown\">
|
277 |
+
<button type=\"button\" data-id=".$key." class=\"tvc-notification-button is-tertiary is-dismissible-notification\">Dismiss</button>
|
278 |
+
</div>
|
279 |
+
</div>
|
280 |
+
</div>
|
281 |
+
</section>
|
282 |
+
</li>";
|
283 |
+
}
|
284 |
+
}
|
285 |
+
}
|
286 |
+
?>
|
287 |
+
<div class="tvc-notification">
|
288 |
+
<a href="javascript:void(0)" class="nav-btn" aria-haspopup="true" aria-expanded="false">
|
289 |
+
<img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/notification.svg'; ?>" alt="notification" class="nav-icon"/>
|
290 |
+
<span class="badge badge-primary not-count"><?php echo $active_count; ?></span>
|
291 |
+
</a>
|
292 |
+
<?php if($html!=""){?>
|
293 |
+
<div class="dropdown-menu tvc-notification-dropdown-menu">
|
294 |
+
<ul>
|
295 |
+
<?php echo $html; ?>
|
296 |
+
</ul>
|
297 |
+
<script>
|
298 |
+
(function( $ ) {
|
299 |
+
$('.tvc-notification a.nav-btn').on('click', function (event) {
|
300 |
+
event.preventDefault();
|
301 |
+
$(this).parent().toggleClass('show');
|
302 |
+
$(".tvc-notification-dropdown-menu").toggleClass('show');
|
303 |
+
});
|
304 |
+
$('body').on('click', function (e) {
|
305 |
+
if(!$('.tvc-notification').is(e.target) && $('.tvc-notification').has(e.target).length === 0 && $('.show').has(e.target).length === 0 ){
|
306 |
+
$('.tvc-notification-dropdown-menu').removeClass('show');
|
307 |
+
$('.tvc-notification').removeClass('show');
|
308 |
+
}
|
309 |
+
});
|
310 |
+
$(function(){
|
311 |
+
$( '.tvc-notification' ).on( 'click', '.is-dismissible-notification', function( event, el ) {
|
312 |
+
var this_id = $(this);
|
313 |
+
var ee_dismiss_id = $(this).attr("data-id");
|
314 |
+
jQuery.post(myAjaxNonces.ajaxurl,{
|
315 |
+
action: "tvc_call_notification_dismiss",
|
316 |
+
data:{ee_dismiss_id:ee_dismiss_id},
|
317 |
+
dataType: "json",
|
318 |
+
TVCNonce: myAjaxNonces.apiotificationDismissNonce
|
319 |
+
},function( response ){
|
320 |
+
var rsp = JSON.parse(response);
|
321 |
+
if(rsp.status == "success"){
|
322 |
+
this_id.parent().parent().parent().parent().parent().slideUp();
|
323 |
+
}
|
324 |
+
});
|
325 |
+
});
|
326 |
+
});
|
327 |
+
})( jQuery );
|
328 |
+
</script>
|
329 |
+
</div>
|
330 |
+
<?php } ?>
|
331 |
+
</div>
|
332 |
+
<?php /*
|
333 |
+
<div class="account-dropdown">
|
334 |
+
<button type="button" class="btn dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
335 |
+
<?php
|
336 |
+
if (isset($_GET['tab']) && $_GET['tab'] == 'configuration_summary') {
|
337 |
+
echo 'Configuration Summary';
|
338 |
+
} else {
|
339 |
+
echo 'Account Summary';
|
340 |
+
}
|
341 |
+
?>
|
342 |
+
</button>
|
343 |
+
<div class="dropdown-menu dropdown-menu-right">
|
344 |
+
<ul>
|
345 |
+
<li><a href="<?php echo admin_url('admin.php?page=enhanced-ecommerce-google-analytics-admin-display&id=account-summary'); ?>" class="dropdown-item" type="button">Account Summary</a></li>
|
346 |
+
<li><a href="<?php echo admin_url('admin.php?page=enhanced-ecommerce-google-analytics-admin-display&id=configuration-summary'); ?>" class="dropdown-item" type="button">Configuration Summary</a></li>
|
347 |
+
</ul>
|
348 |
+
</div>
|
349 |
+
</div> */ ?>
|
350 |
+
</div>
|
351 |
+
</nav>
|
352 |
+
</div>
|
353 |
+
</div>
|
354 |
+
<?php
|
355 |
}
|
356 |
/**
|
357 |
* Display Tab page.
|
359 |
* @since 1.0.0
|
360 |
*/
|
361 |
public function showPage() {
|
362 |
+
echo '<div class="tvc_plugin_container">';
|
363 |
+
require_once( 'partials/enhanced-ecommerce-google-analytics-admin-display.php');
|
364 |
+
$this->create_head();
|
365 |
+
echo '<div class="container">
|
366 |
+
<div class="wiz-tab">';
|
367 |
+
new TVC_Tabs();
|
368 |
echo $this->call_tvc_site_verified_and_domain_claim();
|
369 |
if (!empty($_GET['tab'])) {
|
370 |
$get_action = $_GET['tab'];
|
374 |
if (method_exists($this, $get_action)) {
|
375 |
$this->$get_action();
|
376 |
}
|
377 |
+
echo '</div>
|
378 |
+
</div>
|
379 |
+
</div>';
|
380 |
+
echo $this->get_tvc_popup_message();
|
381 |
}
|
382 |
public function check_nall_and_message($val, $msg, $msg_false){
|
383 |
if((isset($val) && $val != "" && $val != 0) ){
|
386 |
return $msg_false;
|
387 |
}
|
388 |
}
|
389 |
+
/*public function account(){
|
390 |
+
require_once(ENHANCAD_PLUGIN_DIR . 'includes/setup/help-html.php');
|
391 |
+
require_once(ENHANCAD_PLUGIN_DIR . 'includes/setup/account.php');
|
392 |
+
new TVC_Account();
|
393 |
+
}*/
|
394 |
+
public function general_settings() {
|
395 |
+
require_once(ENHANCAD_PLUGIN_DIR . 'includes/setup/help-html.php');
|
396 |
require_once( 'partials/general-fields.php');
|
397 |
}
|
398 |
public function google_ads() {
|
424 |
include(ENHANCAD_PLUGIN_DIR . 'includes/setup/help-html.php');
|
425 |
include(ENHANCAD_PLUGIN_DIR . 'includes/setup/add-campaign.php');
|
426 |
new AddCampaign();
|
427 |
+
}
|
428 |
+
/*
|
429 |
public function conversion_tracking() {
|
430 |
require_once( 'partials/conversion-tracking.php');
|
431 |
}
|
462 |
public function end_time() {
|
463 |
$this->country_location();
|
464 |
return strtotime('11:59 PM');
|
465 |
+
}*/
|
466 |
}
|
admin/class-enhanced-ecommerce-google-analytics-settings.php
CHANGED
@@ -77,7 +77,6 @@ class Enhanced_Ecommerce_Google_Settings {
|
|
77 |
|
78 |
update_option($settings, serialize( $get_ee_settings ));
|
79 |
}
|
80 |
-
self::admin_notice__success();
|
81 |
}
|
82 |
|
83 |
public static function update_analytics_options($settings) {
|
@@ -129,19 +128,4 @@ class Enhanced_Ecommerce_Google_Settings {
|
|
129 |
update_option($settings, serialize( $get_ee_settings ));
|
130 |
}
|
131 |
}
|
132 |
-
|
133 |
-
|
134 |
-
private static function admin_notice__success() {
|
135 |
-
$class = 'notice notice-success';
|
136 |
-
$message = __( 'Your settings have been saved.', 'sample-text-domain' );
|
137 |
-
printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), esc_html( $message ) );
|
138 |
-
|
139 |
-
}
|
140 |
-
public function show_message(){
|
141 |
-
echo '
|
142 |
-
<div class="notice notice-warning is-dismissible">
|
143 |
-
<strong><p>Get all the 9 GA - Enhanced Ecommerce reports, 20+ custom dimensions and metrics, google ads conversion tracking, FB pixel tracking, Google Optimize integration and many more advanced features in the <a href="https://codecanyon.net/item/actionable-google-analytics-for-woocommerce/9899552?utm_source=TatvicEE&utm_medium=DashboardMsgText&utm_campaign=WPlisting" target="_blank">Premium Version</a>.</p></strong>
|
144 |
-
</div>
|
145 |
-
';
|
146 |
-
}
|
147 |
}
|
77 |
|
78 |
update_option($settings, serialize( $get_ee_settings ));
|
79 |
}
|
|
|
80 |
}
|
81 |
|
82 |
public static function update_analytics_options($settings) {
|
128 |
update_option($settings, serialize( $get_ee_settings ));
|
129 |
}
|
130 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
}
|
admin/class-tvc-admin-auto-product-sync-helper.php
CHANGED
@@ -40,6 +40,7 @@ if ( ! class_exists( 'TVC_Admin_Auto_Product_sync_Helper' ) ) {
|
|
40 |
public function add_table_in_db(){
|
41 |
//add_filter( 'cron_schedules', array($this,'tvc_add_cron_interval') );
|
42 |
global $wpdb;
|
|
|
43 |
$tablename = $wpdb->prefix ."ee_product_sync_data";
|
44 |
$query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $tablename ) );
|
45 |
if ( $wpdb->get_var( $query ) === $tablename ) {
|
@@ -50,10 +51,38 @@ if ( ! class_exists( 'TVC_Admin_Auto_Product_sync_Helper' ) ) {
|
|
50 |
$this->import_last_sync_in_db();
|
51 |
}
|
52 |
}
|
53 |
-
|
54 |
$tablename = $wpdb->prefix ."ee_product_sync_call";
|
55 |
-
$
|
56 |
-
if(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
}
|
58 |
|
59 |
public function import_last_sync_in_db(){
|
@@ -142,18 +171,6 @@ if ( ! class_exists( 'TVC_Admin_Auto_Product_sync_Helper' ) ) {
|
|
142 |
}
|
143 |
}
|
144 |
}
|
145 |
-
|
146 |
-
public function tvc_get_post_meta($post_id){
|
147 |
-
$where ="post_id = ".$post_id;
|
148 |
-
$rows = $this->TVC_Admin_DB_Helper->tvc_get_results_in_array('postmeta', $where, array('meta_key','meta_value'));
|
149 |
-
$metas = array();
|
150 |
-
if(!empty($rows)){
|
151 |
-
foreach($rows as $val){
|
152 |
-
$metas[$val['meta_key']] = $val['meta_value'];
|
153 |
-
}
|
154 |
-
}
|
155 |
-
return $metas;
|
156 |
-
}
|
157 |
|
158 |
public function tvc_get_map_product_attribute($products, $tvc_currency, $merchantId){
|
159 |
if(!empty($products)){
|
@@ -164,7 +181,7 @@ if ( ! class_exists( 'TVC_Admin_Auto_Product_sync_Helper' ) ) {
|
|
164 |
foreach ($products as $postkey => $postvalue) {
|
165 |
$product_ids[] = $postvalue->w_product_id;
|
166 |
$postmeta = [];
|
167 |
-
$postmeta = $this->tvc_get_post_meta($postvalue->w_product_id);
|
168 |
$prd = wc_get_product($postvalue->w_product_id);
|
169 |
$postObj = (object) array_merge((array) get_post($postvalue->w_product_id), (array) $postmeta);
|
170 |
|
@@ -223,7 +240,7 @@ if ( ! class_exists( 'TVC_Admin_Auto_Product_sync_Helper' ) ) {
|
|
223 |
$p_variations = $prd->get_available_variations();
|
224 |
if(!empty($p_variations)){
|
225 |
foreach ($p_variations as $v_key => $v_value) {
|
226 |
-
$postmeta_var = (object)$this->tvc_get_post_meta($v_value['variation_id']);
|
227 |
$formArray_val = $formArray['title'];
|
228 |
$product['title'] = (isset($postObj->$formArray_val))?$postObj->$formArray_val:get_the_title($postvalue->w_product_id);
|
229 |
$tvc_temp_desc_key = $formArray['description'];
|
40 |
public function add_table_in_db(){
|
41 |
//add_filter( 'cron_schedules', array($this,'tvc_add_cron_interval') );
|
42 |
global $wpdb;
|
43 |
+
/* cteate table for save sync product settings */
|
44 |
$tablename = $wpdb->prefix ."ee_product_sync_data";
|
45 |
$query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $tablename ) );
|
46 |
if ( $wpdb->get_var( $query ) === $tablename ) {
|
51 |
$this->import_last_sync_in_db();
|
52 |
}
|
53 |
}
|
54 |
+
/* cteate table for save auto sync product call */
|
55 |
$tablename = $wpdb->prefix ."ee_product_sync_call";
|
56 |
+
$query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $tablename ) );
|
57 |
+
if ( $wpdb->get_var( $query ) === $tablename ) {
|
58 |
+
}else{
|
59 |
+
$sql_create = "CREATE TABLE ".$tablename." ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT, `sync_product_ids` LONGTEXT NULL, `w_total_product` INT(10) NOT NULL , `total_sync_product` INT(10) NOT NULL ,last_sync DATETIME NOT NULL, create_sync DATETIME NOT NULL, next_sync DATETIME NOT NULL, `last_sync_product_id` BIGINT(20) NOT NULL, `action_scheduler_id` INT(10) NOT NULL, `status` INT(1) NOT NULL COMMENT '0 failed, 1 completed', PRIMARY KEY (`id`) );";
|
60 |
+
if(!maybe_create_table( $tablename, $sql_create )){ }
|
61 |
+
}
|
62 |
+
|
63 |
+
/* cteate table for save GMC sync product list */
|
64 |
+
$tablename = $wpdb->prefix ."ee_products_sync_list";
|
65 |
+
$query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $tablename ) );
|
66 |
+
if ( $wpdb->get_var( $query ) === $tablename ) {
|
67 |
+
}else{
|
68 |
+
$sql_create = "CREATE TABLE ".$tablename." ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT , `gmc_id` VARCHAR(200) NOT NULL , `name` VARCHAR(200) NOT NULL , `product_id` VARCHAR(100) NOT NULL , `google_status` VARCHAR(50) NOT NULL , `image_link` VARCHAR(200) NOT NULL, `issues` LONGTEXT NOT NULL, PRIMARY KEY (`id`) );";
|
69 |
+
if(maybe_create_table( $tablename, $sql_create )){
|
70 |
+
$this->TVC_Admin_Helper->import_gmc_products_sync_in_db();
|
71 |
+
|
72 |
+
$product_status = $this->TVC_Admin_DB_Helper->tvc_get_counts_groupby('ee_products_sync_list','google_status');
|
73 |
+
$syncProductStat = array("approved" => 0, "disapproved" => 0, "pending" => 0 );
|
74 |
+
foreach ($product_status as $key => $value) {
|
75 |
+
if(isset($value['google_status']) ){
|
76 |
+
$syncProductStat[$value['google_status']] = (isset($value['count']) && $value['count'] >0)?$value['count']:0;
|
77 |
+
}
|
78 |
+
}
|
79 |
+
$syncProductStat["total"] = $this->TVC_Admin_DB_Helper->tvc_row_count('ee_products_sync_list');
|
80 |
+
$google_detail = $this->TVC_Admin_Helper->get_ee_options_data();
|
81 |
+
$google_detail['prod_sync_status'] = (object)$syncProductStat;
|
82 |
+
$this->TVC_Admin_Helper->set_ee_options_data($google_detail);
|
83 |
+
}
|
84 |
+
}
|
85 |
+
|
86 |
}
|
87 |
|
88 |
public function import_last_sync_in_db(){
|
171 |
}
|
172 |
}
|
173 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
174 |
|
175 |
public function tvc_get_map_product_attribute($products, $tvc_currency, $merchantId){
|
176 |
if(!empty($products)){
|
181 |
foreach ($products as $postkey => $postvalue) {
|
182 |
$product_ids[] = $postvalue->w_product_id;
|
183 |
$postmeta = [];
|
184 |
+
$postmeta = $this->TVC_Admin_Helper->tvc_get_post_meta($postvalue->w_product_id);
|
185 |
$prd = wc_get_product($postvalue->w_product_id);
|
186 |
$postObj = (object) array_merge((array) get_post($postvalue->w_product_id), (array) $postmeta);
|
187 |
|
240 |
$p_variations = $prd->get_available_variations();
|
241 |
if(!empty($p_variations)){
|
242 |
foreach ($p_variations as $v_key => $v_value) {
|
243 |
+
$postmeta_var = (object)$this->TVC_Admin_Helper->tvc_get_post_meta($v_value['variation_id']);
|
244 |
$formArray_val = $formArray['title'];
|
245 |
$product['title'] = (isset($postObj->$formArray_val))?$postObj->$formArray_val:get_the_title($postvalue->w_product_id);
|
246 |
$tvc_temp_desc_key = $formArray['description'];
|
admin/class-tvc-admin-db-helper.php
CHANGED
@@ -58,6 +58,17 @@ if ( ! class_exists( 'TVC_Admin_DB_Helper' ) ) {
|
|
58 |
return ;
|
59 |
}
|
60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
public function tvc_get_results_in_array($table, $where, $fields, $concat = false){
|
62 |
global $wpdb;
|
63 |
$tablename = $wpdb->prefix .$table;
|
@@ -76,6 +87,27 @@ if ( ! class_exists( 'TVC_Admin_DB_Helper' ) ) {
|
|
76 |
}
|
77 |
}
|
78 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
public function tvc_get_last_row($table, $fields=null){
|
80 |
if($table ==""){
|
81 |
return;
|
@@ -92,10 +124,22 @@ if ( ! class_exists( 'TVC_Admin_DB_Helper' ) ) {
|
|
92 |
}
|
93 |
}
|
94 |
|
95 |
-
|
96 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
97 |
|
|
|
|
|
|
|
|
|
|
|
|
|
98 |
}
|
99 |
-
}
|
100 |
-
|
101 |
-
?>
|
58 |
return ;
|
59 |
}
|
60 |
|
61 |
+
public function tvc_check_row($table, $where){
|
62 |
+
global $wpdb;
|
63 |
+
$tablename = $wpdb->prefix .$table;
|
64 |
+
if($table =="" || $where == ""){
|
65 |
+
return;
|
66 |
+
}else{
|
67 |
+
$sql = "select count(*) from ".$tablename." where ".$where;
|
68 |
+
return $wpdb->get_var($sql);
|
69 |
+
}
|
70 |
+
}
|
71 |
+
|
72 |
public function tvc_get_results_in_array($table, $where, $fields, $concat = false){
|
73 |
global $wpdb;
|
74 |
$tablename = $wpdb->prefix .$table;
|
87 |
}
|
88 |
}
|
89 |
|
90 |
+
public function tvc_get_results($table, $where = null, $fields = array()){
|
91 |
+
global $wpdb;
|
92 |
+
$tablename = $wpdb->prefix .$table;
|
93 |
+
if($table =="" ){
|
94 |
+
return;
|
95 |
+
}else {
|
96 |
+
$p_where ="";
|
97 |
+
if($where){
|
98 |
+
$p_where = "where";
|
99 |
+
}
|
100 |
+
if( !empty($fields) ) {
|
101 |
+
$fields = implode(',', $fields);
|
102 |
+
$sql = "select ".$fields." from ".$tablename." ".$p_where." ".$where;
|
103 |
+
return $wpdb->get_results($sql);
|
104 |
+
}else{
|
105 |
+
$sql = "select * from ".$tablename." ".$p_where." ".$where;
|
106 |
+
return $wpdb->get_results($sql);
|
107 |
+
}
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
public function tvc_get_last_row($table, $fields=null){
|
112 |
if($table ==""){
|
113 |
return;
|
124 |
}
|
125 |
}
|
126 |
|
127 |
+
public function tvc_get_counts_groupby($table, $fields_by){
|
128 |
+
global $wpdb;
|
129 |
+
$tablename = $wpdb->prefix .$table;
|
130 |
+
if($table =="" || $fields_by == ""){
|
131 |
+
return;
|
132 |
+
}else{
|
133 |
+
$sql = "select ".$fields_by.", count(*) as count from ".$tablename." GROUP BY ".$fields_by." ORDER BY count DESC ";
|
134 |
+
return $wpdb->get_results($sql, ARRAY_A);
|
135 |
+
}
|
136 |
+
}
|
137 |
|
138 |
+
public function tvc_safe_truncate_table($table){
|
139 |
+
$query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $table ) );
|
140 |
+
if ( $wpdb->get_var( $query ) === $table ) {
|
141 |
+
$wpdb->query("TRUNCATE TABLE IF EXISTS ".$table);
|
142 |
+
}
|
143 |
+
}
|
144 |
}
|
145 |
+
}
|
|
|
|
admin/class-tvc-admin-helper.php
CHANGED
@@ -30,7 +30,32 @@ Class TVC_Admin_Helper{
|
|
30 |
require_once(ENHANCAD_PLUGIN_DIR . 'includes/setup/ShoppingApi.php');
|
31 |
}
|
32 |
}
|
33 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
public function is_need_to_update_api_to_db(){
|
35 |
if($this->get_subscriptionId() != ""){
|
36 |
$google_detail = $this->get_ee_options_data();
|
@@ -38,7 +63,7 @@ Class TVC_Admin_Helper{
|
|
38 |
$current = current_time( 'timestamp' );
|
39 |
//echo date( 'M-d-Y H:i', current_time( 'timestamp' ))."==>".date( 'M-d-Y H:i', $google_detail['sync_time']);
|
40 |
$diffrent_hours = floor(( $current - $google_detail['sync_time'])/(60*60));
|
41 |
-
if($diffrent_hours >
|
42 |
return true;
|
43 |
}
|
44 |
}else if(empty($google_detail)){
|
@@ -47,6 +72,9 @@ Class TVC_Admin_Helper{
|
|
47 |
}
|
48 |
return false;
|
49 |
}
|
|
|
|
|
|
|
50 |
public function is_ee_options_data_empty(){
|
51 |
if($this->get_subscriptionId() != ""){
|
52 |
if(empty($this->get_ee_options_data())){
|
@@ -54,51 +82,44 @@ Class TVC_Admin_Helper{
|
|
54 |
}
|
55 |
}
|
56 |
}
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
}
|
64 |
}
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
$ads_edrt = get_option('ads_edrt');
|
70 |
-
|
71 |
-
$tvc_setting_db = [];
|
72 |
-
$tvc_setting_db['subscription_id'] = $this->get_subscriptionId();
|
73 |
-
$tvc_setting_db['enhanced_e_commerce_tracking'] = ((isset($ee_options_settings['ga_eeT']) && ($ee_options_settings['ga_eeT'] == "on" || $ee_options_settings['ga_eeT']))?1:0);
|
74 |
-
$tvc_setting_db['add_gtag_snippet'] = ((isset($ee_options_settings['ga_ST']) && ($ee_options_settings['ga_ST'] == "on" || $ee_options_settings['ga_ST']))?1:0);
|
75 |
-
|
76 |
-
|
77 |
-
$tvc_setting_db['google-add'] ="";
|
78 |
-
$tvc_setting_db['remarketing_tags'] = (($ads_ert == "on" || $ads_ert)?1:0);
|
79 |
-
$tvc_setting_db['dynamic_remarketing_tags'] = (($ads_edrt == "on" || $ads_edrt)?1:0);
|
80 |
-
$customApiObj = new CustomApi();
|
81 |
-
$response = $customApiObj->updateTrackingOption($tvc_setting_db);
|
82 |
-
|
83 |
-
}
|
84 |
-
//return true;
|
85 |
-
}
|
86 |
-
public function set_update_api_to_db($googleDetail = null){
|
87 |
if(empty($googleDetail)){
|
88 |
$google_detail = $this->customApiObj->getGoogleAnalyticDetail();
|
89 |
-
if(
|
90 |
-
if
|
91 |
-
$googleDetail = $google_detail->data
|
92 |
}
|
93 |
}else{
|
94 |
-
|
95 |
}
|
96 |
}
|
97 |
$syncProductStat = [];
|
98 |
$syncProductList = [];
|
99 |
$campaigns_list = [];
|
100 |
-
if(isset($googleDetail->google_merchant_center_id)
|
101 |
-
|
102 |
if(isset($syncProduct_list_res->data) && isset($syncProduct_list_res->status) && $syncProduct_list_res->status == 200){
|
103 |
if (isset($syncProduct_list_res->data->statistics)) {
|
104 |
$syncProductStat = $syncProduct_list_res->data->statistics;
|
@@ -106,8 +127,22 @@ Class TVC_Admin_Helper{
|
|
106 |
if (isset($syncProduct_list_res->data->products)) {
|
107 |
$syncProductList = $syncProduct_list_res->data->products;
|
108 |
}
|
109 |
-
}
|
110 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
$shopping_api = new ShoppingApi();
|
112 |
$campaigns_list_res = $shopping_api->getCampaigns();
|
113 |
if(isset($campaigns_list_res->data) && isset($campaigns_list_res->status) && $campaigns_list_res->status == 200) {
|
@@ -116,28 +151,90 @@ Class TVC_Admin_Helper{
|
|
116 |
}
|
117 |
}
|
118 |
}
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
$tvc_msg = "Configuration Setting";
|
123 |
-
}
|
124 |
-
if(!empty($syncProductList)){
|
125 |
-
$tvc_msg = ($tvc_msg != "")?$tvc_msg.", Product Sync":"Product Sync";
|
126 |
-
}
|
127 |
-
if(!empty($campaigns_list)){
|
128 |
-
$tvc_msg = ($tvc_msg != "")?$tvc_msg.", Shopping Campaigns":"Shopping Campaigns";
|
129 |
-
}*/
|
130 |
-
return "Details updated successfully.";
|
131 |
}
|
132 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
public function set_ee_options_data($ee_options_data){
|
134 |
update_option("ee_api_data", serialize($ee_options_data));
|
135 |
}
|
136 |
-
|
|
|
|
|
137 |
public function set_ee_additional_data($ee_additional_data){
|
138 |
update_option("ee_additional_data", serialize($ee_additional_data));
|
139 |
}
|
140 |
-
|
|
|
|
|
141 |
public function get_ee_additional_data(){
|
142 |
if(!empty($this->ee_additional_data)){
|
143 |
return $this->ee_additional_data;
|
@@ -146,7 +243,9 @@ Class TVC_Admin_Helper{
|
|
146 |
return $this->ee_additional_data;
|
147 |
}
|
148 |
}
|
149 |
-
|
|
|
|
|
150 |
public function get_ee_options_settings(){
|
151 |
if(!empty($this->e_options_settings)){
|
152 |
return $this->e_options_settings;
|
@@ -155,7 +254,9 @@ Class TVC_Admin_Helper{
|
|
155 |
return $this->e_options_settings;
|
156 |
}
|
157 |
}
|
158 |
-
|
|
|
|
|
159 |
public function get_subscriptionId(){
|
160 |
if(!empty($this->subscriptionId)){
|
161 |
return $this->subscriptionId;
|
@@ -168,6 +269,9 @@ Class TVC_Admin_Helper{
|
|
168 |
return $this->subscriptionId;
|
169 |
}
|
170 |
}
|
|
|
|
|
|
|
171 |
public function get_merchantId(){
|
172 |
if(!empty($this->merchantId)){
|
173 |
return $this->merchantId;
|
@@ -181,6 +285,9 @@ Class TVC_Admin_Helper{
|
|
181 |
return $this->merchantId;
|
182 |
}
|
183 |
}
|
|
|
|
|
|
|
184 |
public function get_main_merchantId(){
|
185 |
if(!empty($this->main_merchantId)){
|
186 |
return $this->main_merchantId;
|
@@ -194,7 +301,9 @@ Class TVC_Admin_Helper{
|
|
194 |
return $this->main_merchantId;
|
195 |
}
|
196 |
}
|
197 |
-
|
|
|
|
|
198 |
public function get_time_zone(){
|
199 |
if(!empty($this->time_zone)){
|
200 |
return $this->time_zone;
|
@@ -245,6 +354,7 @@ Class TVC_Admin_Helper{
|
|
245 |
return $this->woo_country;
|
246 |
}
|
247 |
}
|
|
|
248 |
//tvc_customer = >google_ads_id
|
249 |
public function get_currentCustomerId(){
|
250 |
if(!empty($this->currentCustomerId)){
|
@@ -284,7 +394,7 @@ Class TVC_Admin_Helper{
|
|
284 |
$spinner_gif = ENHANCAD_PLUGIN_URL . '/admin/images/ajax-loader.gif';
|
285 |
echo '<div class="feed-spinner" id="feed-spinner" style="display:none;">
|
286 |
<img id="img-spinner" src="' . $spinner_gif . '" alt="Loading" />
|
287 |
-
</div>';
|
288 |
}
|
289 |
|
290 |
public function get_gmcAttributes() {
|
@@ -306,7 +416,7 @@ Class TVC_Admin_Helper{
|
|
306 |
return $attributes;
|
307 |
}
|
308 |
/* start display form input*/
|
309 |
-
public function tvc_language_select($name, $class_id, string $label="Please Select", string $sel_val = "en", bool $require = false){
|
310 |
if($name){
|
311 |
$countries_list = $this->get_gmc_language_list();
|
312 |
?>
|
@@ -320,7 +430,7 @@ Class TVC_Admin_Helper{
|
|
320 |
<?php
|
321 |
}
|
322 |
}
|
323 |
-
public function tvc_countries_select($name, $class_id, string $label="Please Select", bool $require = false){
|
324 |
if($name){
|
325 |
$countries_list = $this->get_gmc_countries_list();
|
326 |
$sel_val = $this->get_woo_country();
|
@@ -335,7 +445,7 @@ Class TVC_Admin_Helper{
|
|
335 |
<?php
|
336 |
}
|
337 |
}
|
338 |
-
public function tvc_select($name, $class_id, string $label="Please Select", string $sel_val = null, bool $require = false, $option_list = array()){
|
339 |
if(!empty($option_list) && $name){
|
340 |
?>
|
341 |
<select class="form-control select2 <?php echo $class_id; ?> <?php echo ($require == true)?"field-required":""; ?>" name="<?php echo $name; ?>" id="<?php echo $class_id; ?>" >
|
@@ -396,8 +506,6 @@ Class TVC_Admin_Helper{
|
|
396 |
$setting_status['google_analytic_msg']= "";
|
397 |
}
|
398 |
// for google shopping
|
399 |
-
//echo "<pre>";
|
400 |
-
//print_r($googleDetail);
|
401 |
if(property_exists($googleDetail,"google_merchant_center_id") && property_exists($googleDetail,"google_ads_id") ){
|
402 |
//main tab
|
403 |
if( $googleDetail->google_merchant_center_id != "" && $googleDetail->google_ads_id != ""){
|
@@ -632,15 +740,15 @@ Class TVC_Admin_Helper{
|
|
632 |
public function call_domain_claim(){
|
633 |
$googleDetail = [];
|
634 |
$google_detail = $this->get_ee_options_data();
|
635 |
-
//print_r($google_detail);
|
636 |
if(isset($google_detail['setting']) && $google_detail['setting']){
|
637 |
$googleDetail = $google_detail['setting'];
|
638 |
if($googleDetail->is_site_verified == '0'){
|
639 |
return array('error'=>true, 'msg'=>"First need to verified your site. Click on site verification refresh icon to verified your site.");
|
640 |
}else if(property_exists($googleDetail,"is_domain_claim") && $googleDetail->is_domain_claim == '0'){
|
|
|
641 |
$postData = [
|
642 |
'merchant_id' => $googleDetail->merchant_id,
|
643 |
-
|
644 |
'subscription_id' => $googleDetail->id,
|
645 |
'account_id' => $googleDetail->google_merchant_center_id
|
646 |
];
|
@@ -664,9 +772,10 @@ Class TVC_Admin_Helper{
|
|
664 |
if(isset($google_detail['setting']) && $google_detail['setting']){
|
665 |
$googleDetail = $google_detail['setting'];
|
666 |
if(property_exists($googleDetail,"is_site_verified") && $googleDetail->is_site_verified == '0'){
|
|
|
667 |
$postData = [
|
668 |
-
'merchant_id' => $googleDetail->merchant_id,
|
669 |
-
'website_url' =>
|
670 |
'subscription_id' => $googleDetail->id,
|
671 |
'account_id' => $googleDetail->google_merchant_center_id
|
672 |
];
|
@@ -745,4 +854,145 @@ Class TVC_Admin_Helper{
|
|
745 |
return $this->TVC_Admin_DB_Helper->tvc_get_last_row('ee_product_sync_call', array("total_sync_product","create_sync","next_sync","status"));
|
746 |
}
|
747 |
|
748 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
require_once(ENHANCAD_PLUGIN_DIR . 'includes/setup/ShoppingApi.php');
|
31 |
}
|
32 |
}
|
33 |
+
/*
|
34 |
+
* verstion auto updated
|
35 |
+
*/
|
36 |
+
public function need_auto_update_db(){
|
37 |
+
$old_ee_auto_update_id ="tvc_3.0.4";
|
38 |
+
$new_ee_auto_update_id ="tvc_4.0.0";
|
39 |
+
$ee_auto_update_id = get_option('ee_auto_update_id');
|
40 |
+
if($ee_auto_update_id!=""){
|
41 |
+
if( $ee_auto_update_id != $new_ee_auto_update_id){
|
42 |
+
global $wpdb;
|
43 |
+
$tablename = $wpdb->prefix ."ee_products_sync_list";
|
44 |
+
$wpdb->query("DROP TABLE IF EXISTS ".$tablename);
|
45 |
+
$tablename = $wpdb->prefix ."ee_product_sync_data";
|
46 |
+
$this->TVC_Admin_DB_Helper->tvc_safe_truncate_table($tablename);
|
47 |
+
$tablename = $wpdb->prefix ."ee_product_sync_call";
|
48 |
+
$this->TVC_Admin_DB_Helper->tvc_safe_truncate_table($tablename);
|
49 |
+
new TVC_Admin_Auto_Product_sync_Helper();
|
50 |
+
update_option("ee_auto_update_id", $new_ee_auto_update_id);
|
51 |
+
}
|
52 |
+
}else{
|
53 |
+
update_option("ee_auto_update_id", $old_ee_auto_update_id);
|
54 |
+
}
|
55 |
+
}
|
56 |
+
/*
|
57 |
+
* Check auto update time
|
58 |
+
*/
|
59 |
public function is_need_to_update_api_to_db(){
|
60 |
if($this->get_subscriptionId() != ""){
|
61 |
$google_detail = $this->get_ee_options_data();
|
63 |
$current = current_time( 'timestamp' );
|
64 |
//echo date( 'M-d-Y H:i', current_time( 'timestamp' ))."==>".date( 'M-d-Y H:i', $google_detail['sync_time']);
|
65 |
$diffrent_hours = floor(( $current - $google_detail['sync_time'])/(60*60));
|
66 |
+
if($diffrent_hours > 11){
|
67 |
return true;
|
68 |
}
|
69 |
}else if(empty($google_detail)){
|
72 |
}
|
73 |
return false;
|
74 |
}
|
75 |
+
/*
|
76 |
+
* if user has subscription id and if DB data is empty then call update data
|
77 |
+
*/
|
78 |
public function is_ee_options_data_empty(){
|
79 |
if($this->get_subscriptionId() != ""){
|
80 |
if(empty($this->get_ee_options_data())){
|
82 |
}
|
83 |
}
|
84 |
}
|
85 |
+
|
86 |
+
/*
|
87 |
+
* Update user only subscription details in DB
|
88 |
+
*/
|
89 |
+
public function update_subscription_details_api_to_db($googleDetail = null){
|
90 |
+
if(empty($googleDetail)){
|
91 |
+
$google_detail = $this->customApiObj->getGoogleAnalyticDetail();
|
92 |
+
if(property_exists($google_detail,"error") && $google_detail->error == false){
|
93 |
+
if(property_exists($google_detail,"data") && $google_detail->data != ""){
|
94 |
+
$googleDetail = $google_detail->data;
|
95 |
+
}
|
96 |
+
}
|
97 |
+
}
|
98 |
+
if(!empty($googleDetail)){
|
99 |
+
$get_ee_options_data = $this->get_ee_options_data();
|
100 |
+
$get_ee_options_data["setting"] = $googleDetail;
|
101 |
+
$this->set_ee_options_data($get_ee_options_data);
|
102 |
}
|
103 |
}
|
104 |
+
/*
|
105 |
+
* Update user subscription and shopping details in DB
|
106 |
+
*/
|
107 |
+
public function set_update_api_to_db($googleDetail = null, $is_import_gmc_products = true){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
if(empty($googleDetail)){
|
109 |
$google_detail = $this->customApiObj->getGoogleAnalyticDetail();
|
110 |
+
if(property_exists($google_detail,"error") && $google_detail->error == false){
|
111 |
+
if(property_exists($google_detail,"data") && $google_detail->data != "") {
|
112 |
+
$googleDetail = $google_detail->data;
|
113 |
}
|
114 |
}else{
|
115 |
+
return array("error"=>true, "message"=>"Please try after some time.");
|
116 |
}
|
117 |
}
|
118 |
$syncProductStat = [];
|
119 |
$syncProductList = [];
|
120 |
$campaigns_list = [];
|
121 |
+
if(isset($googleDetail->google_merchant_center_id) && $googleDetail->google_merchant_center_id != ""){
|
122 |
+
/*$syncProduct_list_res = $this->customApiObj->getSyncProductList(['merchant_id' => $this->get_merchantId()]);
|
123 |
if(isset($syncProduct_list_res->data) && isset($syncProduct_list_res->status) && $syncProduct_list_res->status == 200){
|
124 |
if (isset($syncProduct_list_res->data->statistics)) {
|
125 |
$syncProductStat = $syncProduct_list_res->data->statistics;
|
127 |
if (isset($syncProduct_list_res->data->products)) {
|
128 |
$syncProductList = $syncProduct_list_res->data->products;
|
129 |
}
|
130 |
+
}*/
|
131 |
+
if($is_import_gmc_products){
|
132 |
+
$this->import_gmc_products_sync_in_db();
|
133 |
+
}
|
134 |
+
$product_status = $this->TVC_Admin_DB_Helper->tvc_get_counts_groupby('ee_products_sync_list','google_status');
|
135 |
+
$syncProductStat = array("approved" => 0, "disapproved" => 0, "pending" => 0 );
|
136 |
+
foreach ($product_status as $key => $value) {
|
137 |
+
if(isset($value['google_status']) ){
|
138 |
+
$syncProductStat[$value['google_status']] = (isset($value['count']) && $value['count'] >0)?$value['count']:0;
|
139 |
+
}
|
140 |
+
}
|
141 |
+
$syncProductStat["total"] = $this->TVC_Admin_DB_Helper->tvc_row_count('ee_products_sync_list');
|
142 |
+
}else{
|
143 |
+
$syncProductStat = array("total" =>0, "approved" => 0, "disapproved" => 0, "pending" => 0 );
|
144 |
+
}
|
145 |
+
if(isset($googleDetail->google_ads_id) && $googleDetail->google_ads_id != ""){
|
146 |
$shopping_api = new ShoppingApi();
|
147 |
$campaigns_list_res = $shopping_api->getCampaigns();
|
148 |
if(isset($campaigns_list_res->data) && isset($campaigns_list_res->status) && $campaigns_list_res->status == 200) {
|
151 |
}
|
152 |
}
|
153 |
}
|
154 |
+
|
155 |
+
$this->set_ee_options_data(array("setting" => $googleDetail, "prod_sync_status" => (object) $syncProductStat, "campaigns_list"=>$campaigns_list, "sync_time"=>current_time( 'timestamp' )));
|
156 |
+
return array("error"=>false, "message"=>"Details updated successfully.");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
157 |
}
|
158 |
+
/*
|
159 |
+
* import GMC products in DB
|
160 |
+
*/
|
161 |
+
public function import_gmc_products_sync_in_db($next_page_token = null){
|
162 |
+
$merchant_id = $this->get_merchantId();
|
163 |
+
$last_row = $this->TVC_Admin_DB_Helper->tvc_get_last_row('ee_products_sync_list',array("gmc_id"));
|
164 |
+
if(!empty($last_row) && isset($last_row['gmc_id']) && $last_row['gmc_id'] != $merchant_id){
|
165 |
+
global $wpdb;
|
166 |
+
$tablename = $wpdb->prefix ."ee_products_sync_list";
|
167 |
+
$wpdb->query("DROP TABLE IF EXISTS ".$tablename);
|
168 |
+
$tablename = $wpdb->prefix ."ee_product_sync_data";
|
169 |
+
$this->TVC_Admin_DB_Helper->tvc_safe_truncate_table($tablename);
|
170 |
+
$tablename = $wpdb->prefix ."ee_product_sync_call";
|
171 |
+
$this->TVC_Admin_DB_Helper->tvc_safe_truncate_table($tablename);
|
172 |
+
new TVC_Admin_Auto_Product_sync_Helper();
|
173 |
+
}
|
174 |
+
if( $merchant_id != "" ){
|
175 |
+
$args = array( 'merchant_id' => $merchant_id );
|
176 |
+
if($next_page_token != ""){
|
177 |
+
$args["pageToken"] = $next_page_token;
|
178 |
+
}
|
179 |
+
$syncProduct_list_res = $this->customApiObj->getSyncProductList($args);
|
180 |
+
if(isset($syncProduct_list_res->data) && isset($syncProduct_list_res->status) && $syncProduct_list_res->status == 200){
|
181 |
+
if (isset($syncProduct_list_res->data->products)) {
|
182 |
+
$rs_next_page_token = $syncProduct_list_res->data->nextPageToken;
|
183 |
+
$sync_product_list = $syncProduct_list_res->data->products;
|
184 |
+
if(!empty($sync_product_list)){
|
185 |
+
foreach ($sync_product_list as $key => $value) {
|
186 |
+
$googleStatus =$value->googleStatus;
|
187 |
+
if ($value->googleStatus != "disapproved" && $value->googleStatus != "approved") {
|
188 |
+
$googleStatus = "pending";
|
189 |
+
}
|
190 |
+
$t_data = array(
|
191 |
+
'gmc_id' => $merchant_id,
|
192 |
+
'name'=>$value->name,
|
193 |
+
'product_id'=>$value->productId,
|
194 |
+
'google_status'=>$googleStatus,
|
195 |
+
'image_link'=> $value->imageLink,
|
196 |
+
'issues'=>json_encode($value->issues)
|
197 |
+
);
|
198 |
+
$where ="product_id = '".$value->productId."'";
|
199 |
+
$row_count = $this->TVC_Admin_DB_Helper->tvc_check_row('ee_products_sync_list', $where);
|
200 |
+
if($row_count == 0){
|
201 |
+
$this->TVC_Admin_DB_Helper->tvc_add_row('ee_products_sync_list', $t_data);
|
202 |
+
}
|
203 |
+
}
|
204 |
+
}
|
205 |
+
if($rs_next_page_token!=""){
|
206 |
+
$this->import_gmc_products_sync_in_db($rs_next_page_token);
|
207 |
+
}
|
208 |
+
}
|
209 |
+
}
|
210 |
+
}
|
211 |
+
}
|
212 |
+
/*
|
213 |
+
* get API data from DB
|
214 |
+
*/
|
215 |
+
public function get_ee_options_data(){
|
216 |
+
if(!empty($this->ee_options_data)){
|
217 |
+
return $this->ee_options_data;
|
218 |
+
}else{
|
219 |
+
$this->ee_options_data = unserialize(get_option('ee_api_data'));
|
220 |
+
return $this->ee_options_data;
|
221 |
+
}
|
222 |
+
}
|
223 |
+
/*
|
224 |
+
* set API data in DB
|
225 |
+
*/
|
226 |
public function set_ee_options_data($ee_options_data){
|
227 |
update_option("ee_api_data", serialize($ee_options_data));
|
228 |
}
|
229 |
+
/*
|
230 |
+
* set additional data in DB
|
231 |
+
*/
|
232 |
public function set_ee_additional_data($ee_additional_data){
|
233 |
update_option("ee_additional_data", serialize($ee_additional_data));
|
234 |
}
|
235 |
+
/*
|
236 |
+
* get additional data from DB
|
237 |
+
*/
|
238 |
public function get_ee_additional_data(){
|
239 |
if(!empty($this->ee_additional_data)){
|
240 |
return $this->ee_additional_data;
|
243 |
return $this->ee_additional_data;
|
244 |
}
|
245 |
}
|
246 |
+
/*
|
247 |
+
* get plugin setting data from DB
|
248 |
+
*/
|
249 |
public function get_ee_options_settings(){
|
250 |
if(!empty($this->e_options_settings)){
|
251 |
return $this->e_options_settings;
|
254 |
return $this->e_options_settings;
|
255 |
}
|
256 |
}
|
257 |
+
/*
|
258 |
+
* get subscriptionId
|
259 |
+
*/
|
260 |
public function get_subscriptionId(){
|
261 |
if(!empty($this->subscriptionId)){
|
262 |
return $this->subscriptionId;
|
269 |
return $this->subscriptionId;
|
270 |
}
|
271 |
}
|
272 |
+
/*
|
273 |
+
* get merchantId
|
274 |
+
*/
|
275 |
public function get_merchantId(){
|
276 |
if(!empty($this->merchantId)){
|
277 |
return $this->merchantId;
|
285 |
return $this->merchantId;
|
286 |
}
|
287 |
}
|
288 |
+
/*
|
289 |
+
* get main_merchantId
|
290 |
+
*/
|
291 |
public function get_main_merchantId(){
|
292 |
if(!empty($this->main_merchantId)){
|
293 |
return $this->main_merchantId;
|
301 |
return $this->main_merchantId;
|
302 |
}
|
303 |
}
|
304 |
+
/*
|
305 |
+
* get admin time zone
|
306 |
+
*/
|
307 |
public function get_time_zone(){
|
308 |
if(!empty($this->time_zone)){
|
309 |
return $this->time_zone;
|
354 |
return $this->woo_country;
|
355 |
}
|
356 |
}
|
357 |
+
|
358 |
//tvc_customer = >google_ads_id
|
359 |
public function get_currentCustomerId(){
|
360 |
if(!empty($this->currentCustomerId)){
|
394 |
$spinner_gif = ENHANCAD_PLUGIN_URL . '/admin/images/ajax-loader.gif';
|
395 |
echo '<div class="feed-spinner" id="feed-spinner" style="display:none;">
|
396 |
<img id="img-spinner" src="' . $spinner_gif . '" alt="Loading" />
|
397 |
+
</div>';
|
398 |
}
|
399 |
|
400 |
public function get_gmcAttributes() {
|
416 |
return $attributes;
|
417 |
}
|
418 |
/* start display form input*/
|
419 |
+
public function tvc_language_select($name, $class_id="", string $label="Please Select", string $sel_val = "en", bool $require = false){
|
420 |
if($name){
|
421 |
$countries_list = $this->get_gmc_language_list();
|
422 |
?>
|
430 |
<?php
|
431 |
}
|
432 |
}
|
433 |
+
public function tvc_countries_select($name, $class_id="", string $label="Please Select", bool $require = false){
|
434 |
if($name){
|
435 |
$countries_list = $this->get_gmc_countries_list();
|
436 |
$sel_val = $this->get_woo_country();
|
445 |
<?php
|
446 |
}
|
447 |
}
|
448 |
+
public function tvc_select($name, $class_id="", string $label="Please Select", string $sel_val = null, bool $require = false, $option_list = array()){
|
449 |
if(!empty($option_list) && $name){
|
450 |
?>
|
451 |
<select class="form-control select2 <?php echo $class_id; ?> <?php echo ($require == true)?"field-required":""; ?>" name="<?php echo $name; ?>" id="<?php echo $class_id; ?>" >
|
506 |
$setting_status['google_analytic_msg']= "";
|
507 |
}
|
508 |
// for google shopping
|
|
|
|
|
509 |
if(property_exists($googleDetail,"google_merchant_center_id") && property_exists($googleDetail,"google_ads_id") ){
|
510 |
//main tab
|
511 |
if( $googleDetail->google_merchant_center_id != "" && $googleDetail->google_ads_id != ""){
|
740 |
public function call_domain_claim(){
|
741 |
$googleDetail = [];
|
742 |
$google_detail = $this->get_ee_options_data();
|
|
|
743 |
if(isset($google_detail['setting']) && $google_detail['setting']){
|
744 |
$googleDetail = $google_detail['setting'];
|
745 |
if($googleDetail->is_site_verified == '0'){
|
746 |
return array('error'=>true, 'msg'=>"First need to verified your site. Click on site verification refresh icon to verified your site.");
|
747 |
}else if(property_exists($googleDetail,"is_domain_claim") && $googleDetail->is_domain_claim == '0'){
|
748 |
+
//'website_url' => $googleDetail->site_url,
|
749 |
$postData = [
|
750 |
'merchant_id' => $googleDetail->merchant_id,
|
751 |
+
'website_url' => get_site_url(),
|
752 |
'subscription_id' => $googleDetail->id,
|
753 |
'account_id' => $googleDetail->google_merchant_center_id
|
754 |
];
|
772 |
if(isset($google_detail['setting']) && $google_detail['setting']){
|
773 |
$googleDetail = $google_detail['setting'];
|
774 |
if(property_exists($googleDetail,"is_site_verified") && $googleDetail->is_site_verified == '0'){
|
775 |
+
//'website_url' => $googleDetail->site_url,
|
776 |
$postData = [
|
777 |
+
'merchant_id' => $googleDetail->merchant_id,
|
778 |
+
'website_url' => get_site_url(),
|
779 |
'subscription_id' => $googleDetail->id,
|
780 |
'account_id' => $googleDetail->google_merchant_center_id
|
781 |
];
|
854 |
return $this->TVC_Admin_DB_Helper->tvc_get_last_row('ee_product_sync_call', array("total_sync_product","create_sync","next_sync","status"));
|
855 |
}
|
856 |
|
857 |
+
public function tvc_get_post_meta($post_id){
|
858 |
+
$where ="post_id = ".$post_id;
|
859 |
+
$rows = $this->TVC_Admin_DB_Helper->tvc_get_results_in_array('postmeta', $where, array('meta_key','meta_value'));
|
860 |
+
$metas = array();
|
861 |
+
if(!empty($rows)){
|
862 |
+
foreach($rows as $val){
|
863 |
+
$metas[$val['meta_key']] = $val['meta_value'];
|
864 |
+
}
|
865 |
+
}
|
866 |
+
return $metas;
|
867 |
+
}
|
868 |
+
|
869 |
+
public function getTableColumns($table) {
|
870 |
+
global $wpdb;
|
871 |
+
$tablename = $wpdb->prefix .$table;
|
872 |
+
return $wpdb->get_results("SELECT column_name as field FROM information_schema.columns WHERE table_name = '$table'");
|
873 |
+
}
|
874 |
+
|
875 |
+
public function getTableData($table = null, $columns = array()) {
|
876 |
+
if($table ==""){
|
877 |
+
$table = $wpdb->prefix.'postmeta';
|
878 |
+
}
|
879 |
+
global $wpdb;
|
880 |
+
return $wpdb->get_results("SELECT DISTINCT " . implode(',', $columns) . " as field FROM $table");
|
881 |
+
}
|
882 |
+
/* message notification */
|
883 |
+
public function set_ee_msg_nofification_list($ee_msg_list){
|
884 |
+
update_option("ee_msg_nofifications", serialize($ee_msg_list));
|
885 |
+
}
|
886 |
+
public function get_ee_msg_nofification_list(){
|
887 |
+
return unserialize(get_option('ee_msg_nofifications'));
|
888 |
+
}
|
889 |
+
public function add_ee_msg_nofification($key, $html, $title = null, $link = null, $link_title = null, $overwrite= false, $link_type = "internal"){
|
890 |
+
$ee_msg_list = $this->get_ee_msg_nofification_list();
|
891 |
+
if((!isset($ee_msg_list[$key]) && $html !="") ||($overwrite == true && isset($ee_msg_list[$key]) && $html !="")){
|
892 |
+
$msg = array();
|
893 |
+
$date_formate=get_option('date_format')." ".get_option('time_format');
|
894 |
+
if($date_formate ==""){
|
895 |
+
$date_formate = 'M-d-Y';
|
896 |
+
}
|
897 |
+
$msg["title"] = isset($title)?$title:"";
|
898 |
+
$msg["date"] = date( $date_formate, current_time( 'timestamp' ) );
|
899 |
+
$msg["html"] = base64_encode((isset($html))?$html:"");
|
900 |
+
if($link != ""){
|
901 |
+
$msg["link"] = $link;
|
902 |
+
$msg["link_title"] = (isset($link_title) && $link_title)?$link_title:"Learn more";
|
903 |
+
$msg["link_type"] = $link_type;
|
904 |
+
}
|
905 |
+
$msg["active"] = 1;
|
906 |
+
$ee_msg_list[$key] = $msg;
|
907 |
+
$this->set_ee_msg_nofification_list($ee_msg_list);
|
908 |
+
}
|
909 |
+
}
|
910 |
+
|
911 |
+
public function add_tvc_fixed_nofification(){
|
912 |
+
$nofifications = [];
|
913 |
+
/*
|
914 |
+
* add fixed notification
|
915 |
+
*/
|
916 |
+
$nofifications["tvc_f_notif_1"] = array(
|
917 |
+
"tittle"=>"Congratulations..!! You are one step closer.",
|
918 |
+
"html"=>"Thanks for installing the new avatar of Enhanced Ecommerce for WooCommerce plugin. Explore the full potential of Google Analytics, Google Ads and Google shopping by setting up all your Google accounts and take data driven decisions to scale your eCommerce business faster."
|
919 |
+
);
|
920 |
+
$nofifications["tvc_f_notif_2"] = array(
|
921 |
+
"tittle"=>"Share your feedback.",
|
922 |
+
"html"=>"Your feedback is very important to us. Please write about your experience and the the new feature requests here.",
|
923 |
+
"link"=>"https://wordpress.org/support/plugin/enhanced-e-commerce-for-woocommerce-store/reviews/",
|
924 |
+
"link_title"=>"Share Feedback",
|
925 |
+
"link_type"=>"external"
|
926 |
+
);
|
927 |
+
/*
|
928 |
+
* add payment notification
|
929 |
+
*/
|
930 |
+
$google_detail = $this->get_ee_options_data();
|
931 |
+
if(isset($google_detail['setting'])){
|
932 |
+
$googleDetail = $google_detail['setting'];
|
933 |
+
|
934 |
+
if(isset($googleDetail->subscription_expiry_date) && !in_array($googleDetail->plan_id, array("1"))){
|
935 |
+
$current = strtotime("now");
|
936 |
+
//echo "<br>curent date: ".date( 'M-d-Y H:i',$current);
|
937 |
+
$subscription_expiry_time = strtotime($googleDetail->subscription_expiry_date);
|
938 |
+
//echo "<br>subscription expiry date: ".date( 'M-d-Y H:i',$subscription_expiry_time);
|
939 |
+
$diffrent_day = floor(( $subscription_expiry_time - $current)/(60*60*24) +1);
|
940 |
+
if($diffrent_day < 6 && $diffrent_day > 0){
|
941 |
+
$befor_day = $diffrent_day." ".($diffrent_day == 1 ? 'day':'days');
|
942 |
+
$nofifications["tvc_pay_not_".date("YYYY_m_d",$current)] = array(
|
943 |
+
"tittle"=>"Gentle reminder",
|
944 |
+
"html"=>"Your plan is expiring in ".$befor_day.". Payment will be auto debited from your configured paypal account on “next billing date”."
|
945 |
+
);
|
946 |
+
}
|
947 |
+
$diffrent_day = floor(( $current - $subscription_expiry_time)/(60*60*24)-1);
|
948 |
+
/*if($diffrent_day == 5 ){
|
949 |
+
$nofifications["tvc_expired_plan_not_".date("YYYY_m_d",$current)] = array(
|
950 |
+
"tittle"=>"Your plan expired.",
|
951 |
+
"html"=>"Your subscription plan has been expiring in some time."
|
952 |
+
);
|
953 |
+
}*/
|
954 |
+
if($diffrent_day == 6 ){
|
955 |
+
$nofifications["tvc_expired_plan_not_".date("YYYY_m_d",$current)] = array(
|
956 |
+
"tittle"=>"Plan Expired..!!",
|
957 |
+
"html"=>"Your plan is expired now. Contact “analytics2@tatvic.com” or call us at “(415) 968-6313” to renew your plan."
|
958 |
+
);
|
959 |
+
}
|
960 |
+
}
|
961 |
+
|
962 |
+
}
|
963 |
+
/*
|
964 |
+
* add notifications
|
965 |
+
*/
|
966 |
+
if(!empty($nofifications)){
|
967 |
+
foreach ($nofifications as $key => $value){
|
968 |
+
if(isset($value["html"]) && $value["html"] != ""){
|
969 |
+
$n_link = isset($value["link"])?$value["link"]:"";
|
970 |
+
$n_link_title = isset($value["link_title"])?$value["link_title"]:"";
|
971 |
+
$link_type = isset($value["link_type"])?$value["link_type"]:"";
|
972 |
+
$this->add_ee_msg_nofification( $key, $value["html"], $value["tittle"], $n_link, $n_link_title, "", $link_type);
|
973 |
+
}
|
974 |
+
}
|
975 |
+
}
|
976 |
+
}
|
977 |
+
|
978 |
+
public function active_licence($licence_key, $subscription_id){
|
979 |
+
if($licence_key != ""){
|
980 |
+
$customObj = new CustomApi();
|
981 |
+
return $customObj->active_licence_Key($licence_key, $subscription_id);
|
982 |
+
}
|
983 |
+
}
|
984 |
+
|
985 |
+
public function get_pro_plan_site(){
|
986 |
+
return "https://codecanyon.net/item/actionable-google-analytics-for-woocommerce/9899552?utm_source=TatvicEE&utm_medium=DashboardBuyBottom&utm_campaign=WPlisting";
|
987 |
+
}
|
988 |
+
|
989 |
+
public function is_ga_property(){
|
990 |
+
$data = $this->get_ee_options_settings();
|
991 |
+
$is_connected = false;
|
992 |
+
if((isset($data['ga_id']) && $data['ga_id'] != '') || (isset($data['ga_id']) && $data['ga_id'] != '')){
|
993 |
+
return true;
|
994 |
+
}else{
|
995 |
+
return false;
|
996 |
+
}
|
997 |
+
}
|
998 |
+
}
|
admin/css/bootstrap.rtl.min.css
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@charset "UTF-8";/*!
|
2 |
+
* Bootstrap v5.0.1 (https://getbootstrap.com/)
|
3 |
+
* Copyright 2011-2021 The Bootstrap Authors
|
4 |
+
* Copyright 2011-2021 Twitter, Inc.
|
5 |
+
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
6 |
+
*/:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0))}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-font-sans-serif);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=email],[type=number],[type=tel],[type=url]{direction:ltr}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-right:0;list-style:none}.list-inline{padding-right:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-left:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{width:100%;padding-left:var(--bs-gutter-x,.75rem);padding-right:var(--bs-gutter-x,.75rem);margin-left:auto;margin-right:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-left:calc(var(--bs-gutter-x)/ -2);margin-right:calc(var(--bs-gutter-x)/ -2)}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-left:calc(var(--bs-gutter-x)/ 2);padding-right:calc(var(--bs-gutter-x)/ 2);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.3333333333%}.col-2{flex:0 0 auto;width:16.6666666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.3333333333%}.col-5{flex:0 0 auto;width:41.6666666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.3333333333%}.col-8{flex:0 0 auto;width:66.6666666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.3333333333%}.col-11{flex:0 0 auto;width:91.6666666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-right:8.3333333333%}.offset-2{margin-right:16.6666666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.3333333333%}.offset-5{margin-right:41.6666666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.3333333333%}.offset-8{margin-right:66.6666666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.3333333333%}.offset-11{margin-right:91.6666666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.3333333333%}.col-sm-2{flex:0 0 auto;width:16.6666666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.3333333333%}.col-sm-5{flex:0 0 auto;width:41.6666666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.3333333333%}.col-sm-8{flex:0 0 auto;width:66.6666666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.3333333333%}.col-sm-11{flex:0 0 auto;width:91.6666666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-right:0}.offset-sm-1{margin-right:8.3333333333%}.offset-sm-2{margin-right:16.6666666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.3333333333%}.offset-sm-5{margin-right:41.6666666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.3333333333%}.offset-sm-8{margin-right:66.6666666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.3333333333%}.offset-sm-11{margin-right:91.6666666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.3333333333%}.col-md-2{flex:0 0 auto;width:16.6666666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.3333333333%}.col-md-5{flex:0 0 auto;width:41.6666666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.3333333333%}.col-md-8{flex:0 0 auto;width:66.6666666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.3333333333%}.col-md-11{flex:0 0 auto;width:91.6666666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-right:0}.offset-md-1{margin-right:8.3333333333%}.offset-md-2{margin-right:16.6666666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.3333333333%}.offset-md-5{margin-right:41.6666666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.3333333333%}.offset-md-8{margin-right:66.6666666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.3333333333%}.offset-md-11{margin-right:91.6666666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.3333333333%}.col-lg-2{flex:0 0 auto;width:16.6666666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.3333333333%}.col-lg-5{flex:0 0 auto;width:41.6666666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.3333333333%}.col-lg-8{flex:0 0 auto;width:66.6666666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.3333333333%}.col-lg-11{flex:0 0 auto;width:91.6666666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-right:0}.offset-lg-1{margin-right:8.3333333333%}.offset-lg-2{margin-right:16.6666666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.3333333333%}.offset-lg-5{margin-right:41.6666666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.3333333333%}.offset-lg-8{margin-right:66.6666666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.3333333333%}.offset-lg-11{margin-right:91.6666666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.3333333333%}.col-xl-2{flex:0 0 auto;width:16.6666666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.3333333333%}.col-xl-5{flex:0 0 auto;width:41.6666666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.3333333333%}.col-xl-8{flex:0 0 auto;width:66.6666666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.3333333333%}.col-xl-11{flex:0 0 auto;width:91.6666666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-right:0}.offset-xl-1{margin-right:8.3333333333%}.offset-xl-2{margin-right:16.6666666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.3333333333%}.offset-xl-5{margin-right:41.6666666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.3333333333%}.offset-xl-8{margin-right:66.6666666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.3333333333%}.offset-xl-11{margin-right:91.6666666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.3333333333%}.col-xxl-2{flex:0 0 auto;width:16.6666666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.3333333333%}.col-xxl-5{flex:0 0 auto;width:41.6666666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.3333333333%}.col-xxl-8{flex:0 0 auto;width:66.6666666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.3333333333%}.col-xxl-11{flex:0 0 auto;width:91.6666666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-right:0}.offset-xxl-1{margin-right:8.3333333333%}.offset-xxl-2{margin-right:16.6666666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.3333333333%}.offset-xxl-5{margin-right:41.6666666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.3333333333%}.offset-xxl-8{margin-right:66.6666666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.3333333333%}.offset-xxl-11{margin-right:91.6666666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-bg:transparent;--bs-table-accent-bg:transparent;--bs-table-striped-color:#212529;--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:#212529;--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:#212529;--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg:#cfe2ff;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg:#e2e3e5;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg:#d1e7dd;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg:#cff4fc;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg:#fff3cd;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg:#f8d7da;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg:#f8f9fa;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg:#212529;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{max-width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem .75rem .375rem 2.25rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-left:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-right:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;font-size:1.25rem}.form-check{display:block;min-height:1.5rem;padding-right:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:right;margin-right:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{opacity:.5}.form-switch{padding-right:2.5em}.form-switch .form-check-input{width:2em;margin-right:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:right center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:left center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-left:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);padding:1rem .75rem}.form-floating>label{position:absolute;top:0;right:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:100% 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(-.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(-.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(-.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-left:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu){border-top-left-radius:0;border-bottom-left-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-left:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-left:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) left calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-right:.5em}.input-group .form-control.is-valid,.input-group .form-select.is-valid,.was-validated .input-group .form-control:valid,.was-validated .input-group .form-select:valid{z-index:1}.input-group .form-control.is-valid:focus,.input-group .form-select.is-valid:focus,.was-validated .input-group .form-control:valid:focus,.was-validated .input-group .form-select:valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-left:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-left:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) left calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-right:.5em}.input-group .form-control.is-invalid,.input-group .form-select.is-invalid,.was-validated .input-group .form-control:invalid,.was-validated .input-group .form-select:invalid{z-index:2}.input-group .form-control.is-invalid:focus,.input-group .form-select.is-invalid:focus,.was-validated .input-group .form-control:invalid:focus,.was-validated .input-group .form-select:invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:active+.btn-primary,.btn-check:checked+.btn-primary,.btn-primary.active,.btn-primary:active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:active+.btn-primary:focus,.btn-check:checked+.btn-primary:focus,.btn-primary.active:focus,.btn-primary:active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:active+.btn-secondary,.btn-check:checked+.btn-secondary,.btn-secondary.active,.btn-secondary:active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:active+.btn-secondary:focus,.btn-check:checked+.btn-secondary:focus,.btn-secondary.active:focus,.btn-secondary:active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:active+.btn-success,.btn-check:checked+.btn-success,.btn-success.active,.btn-success:active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:active+.btn-success:focus,.btn-check:checked+.btn-success:focus,.btn-success.active:focus,.btn-success:active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:active+.btn-info,.btn-check:checked+.btn-info,.btn-info.active,.btn-info:active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:active+.btn-info:focus,.btn-check:checked+.btn-info:focus,.btn-info.active:focus,.btn-info:active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info.disabled,.btn-info:disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:active+.btn-warning,.btn-check:checked+.btn-warning,.btn-warning.active,.btn-warning:active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:active+.btn-warning:focus,.btn-check:checked+.btn-warning:focus,.btn-warning.active:focus,.btn-warning:active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:active+.btn-danger,.btn-check:checked+.btn-danger,.btn-danger.active,.btn-danger:active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:active+.btn-danger:focus,.btn-check:checked+.btn-danger:focus,.btn-danger.active:focus,.btn-danger:active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:active+.btn-light,.btn-check:checked+.btn-light,.btn-light.active,.btn-light:active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:active+.btn-light:focus,.btn-check:checked+.btn-light:focus,.btn-light.active:focus,.btn-light:active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light.disabled,.btn-light:disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:active+.btn-dark,.btn-check:checked+.btn-dark,.btn-dark.active,.btn-dark:active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:active+.btn-dark:focus,.btn-check:checked+.btn-dark:focus,.btn-dark.active:focus,.btn-dark:active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:active+.btn-outline-primary,.btn-check:checked+.btn-outline-primary,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show,.btn-outline-primary:active{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:active+.btn-outline-primary:focus,.btn-check:checked+.btn-outline-primary:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus,.btn-outline-primary:active:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0d6efd;background-color:transparent}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:active+.btn-outline-secondary,.btn-check:checked+.btn-outline-secondary,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show,.btn-outline-secondary:active{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:active+.btn-outline-secondary:focus,.btn-check:checked+.btn-outline-secondary:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus,.btn-outline-secondary:active:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:active+.btn-outline-success,.btn-check:checked+.btn-outline-success,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show,.btn-outline-success:active{color:#fff;background-color:#198754;border-color:#198754}.btn-check:active+.btn-outline-success:focus,.btn-check:checked+.btn-outline-success:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus,.btn-outline-success:active:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#198754;background-color:transparent}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:active+.btn-outline-info,.btn-check:checked+.btn-outline-info,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show,.btn-outline-info:active{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:active+.btn-outline-info:focus,.btn-check:checked+.btn-outline-info:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus,.btn-outline-info:active:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#0dcaf0;background-color:transparent}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:active+.btn-outline-warning,.btn-check:checked+.btn-outline-warning,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show,.btn-outline-warning:active{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:active+.btn-outline-warning:focus,.btn-check:checked+.btn-outline-warning:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus,.btn-outline-warning:active:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:active+.btn-outline-danger,.btn-check:checked+.btn-outline-danger,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show,.btn-outline-danger:active{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:active+.btn-outline-danger:focus,.btn-check:checked+.btn-outline-danger:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus,.btn-outline-danger:active:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:active+.btn-outline-light,.btn-check:checked+.btn-outline-light,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show,.btn-outline-light:active{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:active+.btn-outline-light:focus,.btn-check:checked+.btn-outline-light:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus,.btn-outline-light:active:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:active+.btn-outline-dark,.btn-check:checked+.btn-outline-dark,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show,.btn-outline-dark:active{color:#fff;background-color:#212529;border-color:#212529}.btn-check:active+.btn-outline-dark:focus,.btn-check:checked+.btn-outline-dark:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus,.btn-outline-dark:active:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#212529;background-color:transparent}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropend,.dropstart,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-left:.3em solid transparent;border-bottom:0;border-right:.3em solid transparent}.dropdown-toggle:empty::after{margin-right:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:right;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;right:0;margin-top:.125rem}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:0;border-left:.3em solid transparent;border-bottom:.3em solid;border-right:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-right:0}.dropend .dropdown-menu[data-bs-popper]{top:0;left:auto;right:100%;margin-top:0;margin-right:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-left:0;border-bottom:.3em solid transparent;border-right:.3em solid}.dropend .dropdown-toggle:empty::after{margin-right:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;left:100%;right:auto;margin-top:0;margin-left:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-right:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-left:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-right:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:focus,.dropdown-menu-dark .dropdown-item:hover{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-right:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-right:0}.dropstart .dropdown-toggle-split::before{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-right-radius:0;border-top-left-radius:0}.nav{display:flex;flex-wrap:wrap;padding-right:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:0 0;border:1px solid transparent;border-top-right-radius:.25rem;border-top-left-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-left:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-right:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-right-radius:calc(.25rem - 1px);border-top-left-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-left-radius:calc(.25rem - 1px);border-bottom-right-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-right:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-left:-.5rem;margin-bottom:-.5rem;margin-right:-.5rem;border-bottom:0}.card-header-pills{margin-left:-.5rem;margin-right:-.5rem}.card-img-overlay{position:absolute;top:0;left:0;bottom:0;right:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-right-radius:calc(.25rem - 1px);border-top-left-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-left-radius:calc(.25rem - 1px);border-bottom-right-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-right:0;border-right:0}.card-group>.card:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:not(:first-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-right-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:right;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-right:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-right-radius:.25rem;border-top-left-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-right-radius:calc(.25rem - 1px);border-top-left-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-left-radius:calc(.25rem - 1px);border-bottom-right-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-left:0;border-right:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-right:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:right;padding-left:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-right:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-right:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item:last-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-left:3rem}.alert-dismissible .btn-close{position:absolute;top:0;left:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@-webkit-keyframes progress-bar-stripes{0%{background-position-x:1rem}}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#0d6efd;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.list-group{display:flex;flex-direction:column;padding-right:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-right-radius:inherit;border-top-left-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem rgba(0,0,0,.15);border-radius:.25rem}.toast:not(.showing):not(.show){opacity:0}.toast.hide{display:none}.toast-container{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:.75rem}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-right-radius:calc(.25rem - 1px);border-top-left-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-left:-.375rem;margin-right:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal{position:fixed;top:0;right:0;z-index:1060;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-right-radius:calc(.3rem - 1px);border-top-left-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-.5rem auto -.5rem -.5rem}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-left-radius:calc(.3rem - 1px);border-bottom-right-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:right;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[data-popper-placement^=right],.bs-tooltip-end{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.bs-tooltip-auto[data-popper-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[data-popper-placement^=left],.bs-tooltip-start{padding:0 .4rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:276px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:right;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;right:50%;display:block;width:1rem;margin-right:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid #d8d8d8;border-top-right-radius:calc(.3rem - 1px);border-top-left-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem 1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:right;width:100%;margin-left:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{right:0}.carousel-control-next{left:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;left:0;bottom:0;right:0;z-index:2;display:flex;justify-content:center;padding:0;margin-left:15%;margin-bottom:1rem;margin-right:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-left:3px;margin-right:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;left:15%;bottom:1.25rem;right:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@-webkit-keyframes spinner-border{to{transform:rotate(360deg)}}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-left-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1050;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1rem}.offcanvas-header .btn-close{padding:.5rem .5rem;margin:-.5rem auto -.5rem -.5rem}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem 1rem;overflow-y:auto}.offcanvas-start{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translateX(100%)}.offcanvas-end{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translateX(-100%)}.offcanvas-top{top:0;left:0;right:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{left:0;right:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:focus,.link-primary:hover{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:focus,.link-secondary:hover{color:#565e64}.link-success{color:#198754}.link-success:focus,.link-success:hover{color:#146c43}.link-info{color:#0dcaf0}.link-info:focus,.link-info:hover{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:focus,.link-warning:hover{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:focus,.link-danger:hover{color:#b02a37}.link-light{color:#f8f9fa}.link-light:focus,.link-light:hover{color:#f9fafb}.link-dark{color:#212529}.link-dark:focus,.link-dark:hover{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;right:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio:calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio:calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;left:0;right:0;z-index:1030}.fixed-bottom{position:fixed;left:0;bottom:0;right:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:right!important}.float-end{float:left!important}.float-none{float:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{right:0!important}.start-50{right:50%!important}.start-100{right:100%!important}.end-0{left:0!important}.end-50{left:50%!important}.end-100{left:100%!important}.translate-middle{transform:translate(50%,-50%)!important}.translate-middle-x{transform:translateX(50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-left:1px solid #dee2e6!important}.border-end-0{border-left:0!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-right:1px solid #dee2e6!important}.border-start-0{border-right:0!important}.border-primary{border-color:#0d6efd!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#198754!important}.border-info{border-color:#0dcaf0!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#212529!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-left:0!important}.me-1{margin-left:.25rem!important}.me-2{margin-left:.5rem!important}.me-3{margin-left:1rem!important}.me-4{margin-left:1.5rem!important}.me-5{margin-left:3rem!important}.me-auto{margin-left:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-right:0!important}.ms-1{margin-right:.25rem!important}.ms-2{margin-right:.5rem!important}.ms-3{margin-right:1rem!important}.ms-4{margin-right:1.5rem!important}.ms-5{margin-right:3rem!important}.ms-auto{margin-right:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-left:0!important}.pe-1{padding-left:.25rem!important}.pe-2{padding-left:.5rem!important}.pe-3{padding-left:1rem!important}.pe-4{padding-left:1.5rem!important}.pe-5{padding-left:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-right:0!important}.ps-1{padding-right:.25rem!important}.ps-2{padding-right:.5rem!important}.ps-3{padding-right:1rem!important}.ps-4{padding-right:1.5rem!important}.ps-5{padding-right:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:right!important}.text-end{text-align:left!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-primary{color:#0d6efd!important}.text-secondary{color:#6c757d!important}.text-success{color:#198754!important}.text-info{color:#0dcaf0!important}.text-warning{color:#ffc107!important}.text-danger{color:#dc3545!important}.text-light{color:#f8f9fa!important}.text-dark{color:#212529!important}.text-white{color:#fff!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-reset{color:inherit!important}.bg-primary{background-color:#0d6efd!important}.bg-secondary{background-color:#6c757d!important}.bg-success{background-color:#198754!important}.bg-info{background-color:#0dcaf0!important}.bg-warning{background-color:#ffc107!important}.bg-danger{background-color:#dc3545!important}.bg-light{background-color:#f8f9fa!important}.bg-dark{background-color:#212529!important}.bg-body{background-color:#fff!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-top{border-top-right-radius:.25rem!important;border-top-left-radius:.25rem!important}.rounded-end{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-bottom{border-bottom-left-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-start{border-bottom-right-radius:.25rem!important;border-top-right-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:right!important}.float-sm-end{float:left!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-left:0!important}.me-sm-1{margin-left:.25rem!important}.me-sm-2{margin-left:.5rem!important}.me-sm-3{margin-left:1rem!important}.me-sm-4{margin-left:1.5rem!important}.me-sm-5{margin-left:3rem!important}.me-sm-auto{margin-left:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-right:0!important}.ms-sm-1{margin-right:.25rem!important}.ms-sm-2{margin-right:.5rem!important}.ms-sm-3{margin-right:1rem!important}.ms-sm-4{margin-right:1.5rem!important}.ms-sm-5{margin-right:3rem!important}.ms-sm-auto{margin-right:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-left:0!important}.pe-sm-1{padding-left:.25rem!important}.pe-sm-2{padding-left:.5rem!important}.pe-sm-3{padding-left:1rem!important}.pe-sm-4{padding-left:1.5rem!important}.pe-sm-5{padding-left:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-right:0!important}.ps-sm-1{padding-right:.25rem!important}.ps-sm-2{padding-right:.5rem!important}.ps-sm-3{padding-right:1rem!important}.ps-sm-4{padding-right:1.5rem!important}.ps-sm-5{padding-right:3rem!important}.text-sm-start{text-align:right!important}.text-sm-end{text-align:left!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:right!important}.float-md-end{float:left!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-left:0!important}.me-md-1{margin-left:.25rem!important}.me-md-2{margin-left:.5rem!important}.me-md-3{margin-left:1rem!important}.me-md-4{margin-left:1.5rem!important}.me-md-5{margin-left:3rem!important}.me-md-auto{margin-left:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-right:0!important}.ms-md-1{margin-right:.25rem!important}.ms-md-2{margin-right:.5rem!important}.ms-md-3{margin-right:1rem!important}.ms-md-4{margin-right:1.5rem!important}.ms-md-5{margin-right:3rem!important}.ms-md-auto{margin-right:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-left:0!important}.pe-md-1{padding-left:.25rem!important}.pe-md-2{padding-left:.5rem!important}.pe-md-3{padding-left:1rem!important}.pe-md-4{padding-left:1.5rem!important}.pe-md-5{padding-left:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-right:0!important}.ps-md-1{padding-right:.25rem!important}.ps-md-2{padding-right:.5rem!important}.ps-md-3{padding-right:1rem!important}.ps-md-4{padding-right:1.5rem!important}.ps-md-5{padding-right:3rem!important}.text-md-start{text-align:right!important}.text-md-end{text-align:left!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:right!important}.float-lg-end{float:left!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-left:0!important}.me-lg-1{margin-left:.25rem!important}.me-lg-2{margin-left:.5rem!important}.me-lg-3{margin-left:1rem!important}.me-lg-4{margin-left:1.5rem!important}.me-lg-5{margin-left:3rem!important}.me-lg-auto{margin-left:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-right:0!important}.ms-lg-1{margin-right:.25rem!important}.ms-lg-2{margin-right:.5rem!important}.ms-lg-3{margin-right:1rem!important}.ms-lg-4{margin-right:1.5rem!important}.ms-lg-5{margin-right:3rem!important}.ms-lg-auto{margin-right:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-left:0!important}.pe-lg-1{padding-left:.25rem!important}.pe-lg-2{padding-left:.5rem!important}.pe-lg-3{padding-left:1rem!important}.pe-lg-4{padding-left:1.5rem!important}.pe-lg-5{padding-left:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-right:0!important}.ps-lg-1{padding-right:.25rem!important}.ps-lg-2{padding-right:.5rem!important}.ps-lg-3{padding-right:1rem!important}.ps-lg-4{padding-right:1.5rem!important}.ps-lg-5{padding-right:3rem!important}.text-lg-start{text-align:right!important}.text-lg-end{text-align:left!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:right!important}.float-xl-end{float:left!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-left:0!important}.me-xl-1{margin-left:.25rem!important}.me-xl-2{margin-left:.5rem!important}.me-xl-3{margin-left:1rem!important}.me-xl-4{margin-left:1.5rem!important}.me-xl-5{margin-left:3rem!important}.me-xl-auto{margin-left:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-right:0!important}.ms-xl-1{margin-right:.25rem!important}.ms-xl-2{margin-right:.5rem!important}.ms-xl-3{margin-right:1rem!important}.ms-xl-4{margin-right:1.5rem!important}.ms-xl-5{margin-right:3rem!important}.ms-xl-auto{margin-right:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-left:0!important}.pe-xl-1{padding-left:.25rem!important}.pe-xl-2{padding-left:.5rem!important}.pe-xl-3{padding-left:1rem!important}.pe-xl-4{padding-left:1.5rem!important}.pe-xl-5{padding-left:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-right:0!important}.ps-xl-1{padding-right:.25rem!important}.ps-xl-2{padding-right:.5rem!important}.ps-xl-3{padding-right:1rem!important}.ps-xl-4{padding-right:1.5rem!important}.ps-xl-5{padding-right:3rem!important}.text-xl-start{text-align:right!important}.text-xl-end{text-align:left!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:right!important}.float-xxl-end{float:left!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-left:0!important}.me-xxl-1{margin-left:.25rem!important}.me-xxl-2{margin-left:.5rem!important}.me-xxl-3{margin-left:1rem!important}.me-xxl-4{margin-left:1.5rem!important}.me-xxl-5{margin-left:3rem!important}.me-xxl-auto{margin-left:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-right:0!important}.ms-xxl-1{margin-right:.25rem!important}.ms-xxl-2{margin-right:.5rem!important}.ms-xxl-3{margin-right:1rem!important}.ms-xxl-4{margin-right:1.5rem!important}.ms-xxl-5{margin-right:3rem!important}.ms-xxl-auto{margin-right:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-left:0!important}.pe-xxl-1{padding-left:.25rem!important}.pe-xxl-2{padding-left:.5rem!important}.pe-xxl-3{padding-left:1rem!important}.pe-xxl-4{padding-left:1.5rem!important}.pe-xxl-5{padding-left:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-right:0!important}.ps-xxl-1{padding-right:.25rem!important}.ps-xxl-2{padding-right:.5rem!important}.ps-xxl-3{padding-right:1rem!important}.ps-xxl-4{padding-right:1.5rem!important}.ps-xxl-5{padding-right:3rem!important}.text-xxl-start{text-align:right!important}.text-xxl-end{text-align:left!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
|
7 |
+
/*# sourceMappingURL=bootstrap.rtl.min.css.map */
|
admin/css/custom-style.css
CHANGED
@@ -1,1143 +1,2531 @@
|
|
|
|
1 |
html,
|
2 |
body {
|
3 |
-
|
4 |
}
|
5 |
|
6 |
body {
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
|
|
16 |
}
|
17 |
|
18 |
p {
|
19 |
-
|
20 |
-
|
21 |
}
|
22 |
|
23 |
a {
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
}
|
28 |
|
29 |
a:hover {
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
}
|
35 |
|
36 |
a:focus {
|
37 |
-
|
38 |
-
|
39 |
}
|
40 |
|
41 |
ul {
|
42 |
-
|
43 |
}
|
44 |
|
45 |
a:focus,
|
46 |
button:focus,
|
47 |
input[type="checkbox"],
|
48 |
input[type="radio"] {
|
49 |
-
|
50 |
}
|
51 |
|
52 |
:focus {
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
}
|
58 |
|
59 |
.text-underline {
|
60 |
-
|
|
|
|
|
|
|
|
|
61 |
}
|
62 |
|
63 |
section {
|
64 |
-
|
65 |
}
|
66 |
|
67 |
.title {
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
}
|
72 |
|
73 |
.sub-title {
|
74 |
-
|
75 |
-
|
|
|
|
|
|
|
|
|
76 |
}
|
77 |
|
78 |
.campaigns .campaign-date {
|
79 |
-
|
80 |
-
|
81 |
}
|
82 |
|
83 |
.campaigns .radio-buttons .custom-control-label {
|
84 |
-
|
85 |
}
|
86 |
|
87 |
.chart {
|
88 |
-
|
89 |
-
|
90 |
-
margin-bottom: 15px;
|
91 |
-
background-color: #FFFFFF;
|
92 |
}
|
93 |
|
94 |
-
.
|
95 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
}
|
97 |
|
|
|
|
|
|
|
|
|
98 |
.table-section {
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
|
|
|
|
|
|
103 |
}
|
104 |
|
105 |
.table-section .table {
|
106 |
-
|
107 |
}
|
108 |
|
109 |
.table-section .table thead th {
|
110 |
-
|
111 |
-
|
|
|
|
|
112 |
}
|
113 |
|
114 |
.table-section .table tr th,
|
115 |
.table-section .table tr td {
|
116 |
-
|
117 |
}
|
118 |
|
119 |
.table-section .table tr td {
|
120 |
-
|
|
|
121 |
}
|
122 |
|
123 |
.table-section .table tr td.product-image {
|
124 |
-
|
125 |
}
|
126 |
|
127 |
.table-section .table tr td.product-image img {
|
128 |
-
|
129 |
-
|
130 |
-
|
|
|
|
|
|
|
|
|
|
|
131 |
}
|
132 |
|
133 |
.table-section .pagination {
|
134 |
-
|
135 |
-
|
136 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
}
|
138 |
|
139 |
.btn-white {
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
}
|
149 |
|
150 |
.btn-white:focus {
|
151 |
-
|
152 |
-
|
153 |
}
|
154 |
|
155 |
.btn-grey {
|
156 |
-
|
157 |
}
|
158 |
|
159 |
.text-underline {
|
160 |
-
|
161 |
}
|
162 |
|
163 |
.arrow-angle {
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
}
|
170 |
|
171 |
.popup-modal .modal-dialog .modal-content {
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
}
|
176 |
|
177 |
.popup-modal .modal-dialog .modal-header {
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
}
|
187 |
|
188 |
.accordion .card {
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
padding:0 !important;
|
193 |
-
max-width:100% !important;
|
194 |
}
|
195 |
|
196 |
.accordion .card:last-child {
|
197 |
-
|
198 |
}
|
199 |
|
200 |
.accordion .card .card-header {
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
}
|
206 |
|
207 |
.accordion .card .card-header .btn {
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
}
|
218 |
|
219 |
.accordion .card .card-header .btn:hover {
|
220 |
-
|
221 |
}
|
222 |
|
223 |
.accordion .card .card-header .btn:focus {
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
}
|
229 |
|
230 |
.accordion .card .card-header .btn:after {
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
}
|
243 |
|
244 |
.accordion .card .card-header .btn.collapsed:after {
|
245 |
-
|
246 |
-
|
247 |
}
|
248 |
|
249 |
.accordion .card .card-body {
|
250 |
-
|
251 |
}
|
252 |
|
253 |
.accordion .card .card-body p {
|
254 |
-
|
255 |
-
|
256 |
}
|
257 |
|
258 |
.accordion .card .card-body .table-section {
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
}
|
263 |
|
264 |
.accordion .card .card-body .table-section .table tr td {
|
265 |
-
|
266 |
}
|
267 |
|
268 |
.accordion-section .accordion .card {
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
}
|
274 |
|
275 |
.accordion-section .accordion .card .card-header {
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
}
|
281 |
|
282 |
.accordion-section .accordion .card .card-header .btn {
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
}
|
291 |
|
292 |
.accordion-section .accordion .card .card-header .btn:hover {
|
293 |
-
|
294 |
}
|
295 |
|
296 |
.accordion-section .accordion .card .card-header .btn:focus {
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
}
|
302 |
|
303 |
.accordion-section .accordion .card .card-body {
|
304 |
-
|
305 |
}
|
306 |
|
307 |
.nbk-tbl {
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
}
|
313 |
|
314 |
.card-wrapper {
|
315 |
-
|
316 |
-
|
317 |
}
|
318 |
|
319 |
.wrapper-main {
|
320 |
-
|
321 |
-
|
322 |
-
padding-bottom: 15px;
|
323 |
}
|
324 |
|
325 |
.configuration-section .note-follow {
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
}
|
331 |
|
332 |
.configuration-section .note-follow p {
|
333 |
-
|
334 |
}
|
335 |
|
336 |
.configuration-section .confg-card .card {
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
|
|
|
|
|
|
341 |
}
|
342 |
|
343 |
.configuration-section .confg-card .card .card-header {
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
}
|
350 |
|
351 |
.configuration-section .confg-card .card .card-header:first-child {
|
352 |
-
|
353 |
}
|
354 |
|
355 |
.configuration-section .confg-card .card .card-header .confg-title {
|
356 |
-
|
357 |
-
|
358 |
-
|
|
|
359 |
}
|
360 |
|
361 |
.configuration-section .confg-card .card .card-body {
|
362 |
-
|
363 |
}
|
364 |
|
365 |
.configuration-section .confg-card .card .card-body .list-unstyled {
|
366 |
-
|
367 |
}
|
368 |
|
369 |
.configuration-section .confg-card .card .card-body .list-unstyled li {
|
370 |
-
|
371 |
-
|
372 |
}
|
373 |
|
374 |
.configuration-section .confg-card .card .card-body .list-unstyled li:last-child {
|
375 |
-
|
376 |
}
|
377 |
|
378 |
.configuration-section .confg-card .card .card-body .list-unstyled li .text {
|
379 |
-
|
380 |
}
|
381 |
|
382 |
.configuration-section .confg-card .card .card-body .list-unstyled li .list-image img {
|
383 |
-
|
384 |
}
|
385 |
|
386 |
.configuration-section .confg-card .card .card-footer {
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
}
|
393 |
|
394 |
.configuration-section .confg-card .card .card-footer:last-child {
|
395 |
-
|
396 |
}
|
397 |
|
398 |
.configuration-section .confg-card .card .card-footer .explr {
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
}
|
405 |
|
406 |
.border-right {
|
407 |
-
|
408 |
}
|
409 |
|
410 |
@media (min-width: 576px) {
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
}
|
415 |
|
416 |
.dataTables_paginate .page-item .page-link {
|
417 |
-
|
418 |
}
|
419 |
|
420 |
.dataTables_paginate .page-item.active .page-link {
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
}
|
426 |
|
427 |
.dataTables_paginate .page-item.disabled {
|
428 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
429 |
}
|
430 |
|
431 |
.header-section {
|
432 |
-
|
|
|
433 |
}
|
434 |
|
435 |
.header-section .top-section {
|
436 |
-
|
437 |
-
|
438 |
}
|
439 |
|
440 |
.header-section .top-section p {
|
441 |
-
|
442 |
-
|
|
|
|
|
443 |
}
|
444 |
|
445 |
.header-section .navbar-section {
|
446 |
-
|
447 |
-
|
448 |
-
|
|
|
|
|
|
|
449 |
}
|
450 |
|
451 |
.header-section .navbar-section .navbar-brand img {
|
452 |
-
|
453 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
454 |
}
|
455 |
|
456 |
.header-section .navbar-section .account-dropdown .btn {
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
}
|
461 |
|
462 |
.header-section .navbar-section .account-dropdown .btn.dropdown-toggle::after {
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
|
|
|
|
|
|
|
|
|
|
467 |
}
|
468 |
|
469 |
.header-section .navbar-section .account-dropdown .btn:focus {
|
470 |
-
|
471 |
-
|
472 |
}
|
473 |
|
474 |
.header-section .navbar-section .account-dropdown .dropdown-menu {
|
475 |
-
|
476 |
-
|
477 |
-
|
|
|
|
|
|
|
|
|
|
|
478 |
}
|
479 |
|
480 |
.header-section .navbar-section .account-dropdown .dropdown-menu .dropdown-item {
|
481 |
-
|
482 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
483 |
}
|
484 |
|
485 |
.header-section .navbar-section .account-dropdown .dropdown-menu .dropdown-item:focus {
|
486 |
-
|
487 |
-
|
488 |
}
|
489 |
|
490 |
.form-group {
|
491 |
-
|
492 |
}
|
493 |
|
494 |
.form-control, .select2.select2-container--default .select2-selection--single {
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
|
|
|
|
|
|
|
|
500 |
.form-control::-webkit-input-placeholder, .select2.select2-container--default .select2-selection--single::-webkit-input-placeholder {
|
501 |
-
|
502 |
}
|
503 |
|
504 |
.form-control::-ms-input-placeholder, .select2.select2-container--default .select2-selection--single::-ms-input-placeholder {
|
505 |
-
|
506 |
}
|
507 |
|
508 |
.form-control:-ms-input-placeholder, .select2.select2-container--default .select2-selection--single:-ms-input-placeholder {
|
509 |
-
|
510 |
}
|
511 |
|
512 |
.form-control::placeholder, .select2.select2-container--default .select2-selection--single::placeholder {
|
513 |
-
|
514 |
}
|
515 |
|
516 |
.form-control:focus, .select2.select2-container--default .select2-selection--single:focus {
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
}
|
523 |
|
524 |
.select2 {
|
525 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
526 |
}
|
527 |
|
528 |
.select2.select2-container--default .select2-selection__arrow b {
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
|
|
|
|
|
|
|
|
|
|
533 |
}
|
534 |
|
535 |
.select2.select2-container--default.select2-container--open .select2-selection__arrow b {
|
536 |
-
|
537 |
-
|
|
|
|
|
|
|
|
|
538 |
}
|
539 |
|
540 |
.select2-dropdown {
|
541 |
-
|
542 |
}
|
543 |
|
544 |
.select2-dropdown .select2-results__options .select2-results__option--highlighted {
|
545 |
-
|
546 |
-
|
547 |
}
|
548 |
|
549 |
.select2-dropdown .select2-results__options .select2-results__option--selected {
|
550 |
-
|
551 |
-
|
552 |
}
|
553 |
|
554 |
.input-daterange .form-control, .input-daterange .select2.select2-container--default .select2-selection--single, .select2.select2-container--default .input-daterange .select2-selection--single {
|
555 |
-
|
556 |
-
|
|
|
|
|
|
|
557 |
}
|
558 |
|
559 |
.input-daterange .text {
|
560 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
561 |
}
|
562 |
|
563 |
.datepicker.datepicker-dropdown {
|
564 |
-
|
565 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
566 |
}
|
567 |
|
568 |
.datepicker th {
|
569 |
-
|
570 |
}
|
571 |
|
572 |
.datepicker td,
|
573 |
.datepicker th {
|
574 |
-
|
575 |
-
|
|
|
576 |
}
|
577 |
|
578 |
.datepicker td.day.active {
|
579 |
-
|
580 |
}
|
581 |
|
582 |
.datepicker td.day.today {
|
583 |
-
|
584 |
-
|
585 |
}
|
586 |
|
587 |
.datepicker td span.month.active {
|
588 |
-
|
589 |
}
|
590 |
|
591 |
.datepicker td span.year.active, .datepicker td span.year.focused {
|
592 |
-
|
593 |
}
|
594 |
|
595 |
.custom-control .custom-control-input:focus ~ .custom-control-label::before {
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
}
|
601 |
|
602 |
.custom-control.custom-radio .custom-control-label {
|
603 |
-
|
604 |
}
|
605 |
|
606 |
.custom-control.custom-radio .custom-control-label::before {
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
}
|
614 |
|
615 |
.custom-control.custom-radio .custom-control-input:checked ~ .custom-control-label::before {
|
616 |
-
|
617 |
-
border-color: #6b6b6b;
|
618 |
}
|
619 |
|
620 |
.custom-control.custom-radio .custom-control-input:checked ~ .custom-control-label::after {
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
}
|
629 |
|
630 |
.custom-control.custom-checkbox .custom-control-label:before {
|
631 |
-
|
632 |
-
|
|
|
633 |
}
|
634 |
|
635 |
.custom-control.custom-checkbox .custom-control-input:checked ~ .custom-control-label:before {
|
636 |
-
|
637 |
-
|
|
|
638 |
}
|
639 |
|
640 |
.custom-control.custom-checkbox .custom-control-input:checked ~ .custom-control-label:after {
|
641 |
-
|
642 |
-
|
643 |
-
margin-top: -3px;
|
644 |
}
|
645 |
|
646 |
.custom-control.custom-checkbox .custom-control-input:focus:not(:checked) ~ .custom-control-label::before {
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
}
|
653 |
|
654 |
.custom-switch .custom-control-label:before {
|
655 |
-
|
|
|
|
|
656 |
}
|
657 |
|
658 |
.custom-switch .custom-control-label:after {
|
659 |
-
|
660 |
-
|
661 |
-
border-radius: 50%;
|
662 |
-
top: 1.5px;
|
663 |
-
left: calc(-2.65rem + 2px);
|
664 |
}
|
665 |
|
666 |
.custom-switch .custom-control-input:checked ~ .custom-control-label:after {
|
667 |
-
|
668 |
-
|
669 |
-
|
|
|
670 |
}
|
671 |
|
672 |
-
.custom-
|
673 |
-
|
674 |
-
background-color: #FFFFFF;
|
675 |
}
|
676 |
|
677 |
textarea.form-control, .select2.select2-container--default textarea.select2-selection--single {
|
678 |
-
|
679 |
}
|
680 |
|
681 |
.form-label-control {
|
682 |
-
|
|
|
683 |
}
|
684 |
|
685 |
.campaign-date .custom-control-label {
|
686 |
-
|
687 |
}
|
688 |
|
689 |
.campaign-date .custom-control-label .custom-radio .select2 {
|
690 |
-
|
691 |
}
|
692 |
|
693 |
.wiz-tab .nav-pills {
|
694 |
-
|
695 |
-
|
|
|
|
|
696 |
}
|
697 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
698 |
.wiz-tab .nav-pills .nav-item .nav-link {
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
|
|
715 |
}
|
716 |
|
717 |
.wiz-tab .nav-pills .nav-item .nav-link.active {
|
718 |
-
|
|
|
|
|
719 |
}
|
720 |
|
721 |
.tab-content {
|
722 |
-
|
723 |
-
|
724 |
}
|
725 |
|
726 |
.tab-content .tab-card {
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
margin-bottom: 15px;
|
731 |
}
|
732 |
|
733 |
.tab-content .tab-card.bg-none {
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
}
|
738 |
|
739 |
.tab-content .tab-card .text-header {
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
744 |
}
|
745 |
|
746 |
.tab-content .tab-card .db-btn {
|
747 |
-
|
748 |
-
margin-bottom: 15px;
|
749 |
}
|
750 |
|
751 |
.tab-content .tab-card .db-btn .btn {
|
752 |
-
|
753 |
}
|
754 |
|
755 |
.tab-content .tab-card .custom-control-label {
|
756 |
-
|
757 |
}
|
758 |
|
759 |
.tab-content .white-box {
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
}
|
765 |
|
766 |
.tab-content .white-box:last-child {
|
767 |
-
|
768 |
}
|
769 |
|
770 |
.tab-content .text-m {
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
}
|
775 |
|
776 |
.btn-google {
|
777 |
-
|
778 |
-
|
|
|
|
|
|
|
779 |
}
|
780 |
|
781 |
.btn-google img {
|
782 |
-
|
783 |
-
|
784 |
}
|
785 |
|
786 |
.licence {
|
787 |
-
|
788 |
-
|
789 |
-
|
|
|
790 |
}
|
791 |
|
792 |
.licence p {
|
793 |
-
|
794 |
-
|
795 |
}
|
796 |
|
797 |
.licence .input-group {
|
798 |
-
|
799 |
}
|
800 |
|
801 |
.licence .input-group .form-control, .licence .input-group .select2.select2-container--default .select2-selection--single, .select2.select2-container--default .licence .input-group .select2-selection--single {
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
margin-right: 15px;
|
806 |
-
font-size: 14px;
|
807 |
-
color: #000000;
|
808 |
}
|
809 |
|
810 |
.licence .input-group .input-group-append {
|
811 |
-
|
812 |
}
|
813 |
|
814 |
.licence .input-group .input-group-append .btn {
|
815 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
816 |
}
|
817 |
|
818 |
.ecom-track {
|
819 |
-
|
820 |
-
|
821 |
}
|
822 |
|
823 |
.ecom-track li {
|
824 |
-
|
825 |
-
|
826 |
}
|
827 |
|
828 |
.ecom-track li .img-icon {
|
829 |
-
|
830 |
-
|
831 |
}
|
832 |
|
833 |
.ecom-track li .trk-text {
|
834 |
-
|
835 |
}
|
836 |
|
837 |
.premium-list {
|
838 |
-
|
839 |
-
|
840 |
}
|
841 |
|
842 |
.premium-list li {
|
843 |
-
|
844 |
-
|
845 |
}
|
846 |
|
847 |
.premium-list li span {
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
}
|
852 |
|
853 |
.premium-list li span:before {
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
}
|
863 |
|
864 |
.google-account-analytics .ga-title {
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
}
|
869 |
|
870 |
.google-account-analytics .ga-text {
|
871 |
-
|
872 |
}
|
873 |
|
874 |
-
.
|
875 |
-
|
876 |
-
|
|
|
|
|
|
|
|
|
877 |
}
|
878 |
|
879 |
-
.
|
880 |
-
|
881 |
-
|
|
|
882 |
}
|
883 |
|
884 |
-
.
|
885 |
-
|
886 |
-
|
887 |
-
font-weight: 700;
|
888 |
}
|
889 |
|
890 |
-
.
|
891 |
-
|
892 |
}
|
893 |
|
894 |
-
.
|
895 |
-
|
896 |
-
|
897 |
}
|
898 |
|
899 |
-
.
|
900 |
-
|
901 |
-
counter-increment: index;
|
902 |
-
position: absolute;
|
903 |
-
top: 0;
|
904 |
-
left: 0;
|
905 |
}
|
906 |
|
907 |
-
.wizard-section.campaign-wizard {
|
908 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
909 |
}
|
910 |
|
911 |
-
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li
|
912 |
-
|
|
|
|
|
913 |
}
|
914 |
|
915 |
-
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li::before {
|
916 |
-
|
917 |
-
width: 10px;
|
918 |
-
height: 10px;
|
919 |
-
background-color: #000;
|
920 |
-
display: inline-block;
|
921 |
-
position: absolute;
|
922 |
-
left: 50%;
|
923 |
-
top: 50%;
|
924 |
-
margin-top: -5px;
|
925 |
-
border-radius: 50%;
|
926 |
-
z-index: 10;
|
927 |
}
|
928 |
|
929 |
-
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li.
|
930 |
-
|
|
|
|
|
931 |
}
|
932 |
|
933 |
-
.wizard-section.campaign-wizard .wizard-content .wizard .
|
934 |
-
|
935 |
-
text-decoration: underline;
|
936 |
-
margin-bottom: 1rem;
|
937 |
-
font-weight: 400;
|
938 |
}
|
939 |
|
940 |
-
.wizard-section.campaign-wizard .wizard-content .wizard .
|
941 |
-
|
942 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
943 |
}
|
944 |
|
945 |
-
.
|
946 |
-
|
947 |
-
|
948 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
949 |
}
|
950 |
|
951 |
-
.
|
952 |
-
|
|
|
953 |
}
|
954 |
|
955 |
-
.
|
956 |
-
|
957 |
-
|
|
|
|
|
|
|
|
|
|
|
958 |
}
|
959 |
|
960 |
-
.
|
961 |
-
|
962 |
-
font-weight: 400;
|
963 |
-
margin-bottom: 15px;
|
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 |
-
.wizard-section {
|
990 |
-
|
991 |
}
|
992 |
|
993 |
-
.wizard-section .wizard-content .wizard {
|
994 |
-
|
|
|
|
|
|
|
995 |
}
|
996 |
|
997 |
-
.wizard-section .wizard-content .wizard .
|
998 |
-
|
|
|
|
|
999 |
}
|
1000 |
|
1001 |
-
.wizard-section
|
1002 |
-
|
1003 |
-
|
|
|
1004 |
}
|
1005 |
|
1006 |
-
.wizard-section .wizard-content .wizard .
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
font-weight: 700;
|
1011 |
}
|
1012 |
|
1013 |
-
.
|
1014 |
-
|
1015 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1016 |
}
|
1017 |
|
1018 |
.wizard-section .wizard-content .wizard .steps ul li a {
|
1019 |
-
|
1020 |
-
|
|
|
|
|
1021 |
}
|
1022 |
|
1023 |
.wizard-section .wizard-content .wizard .steps ul li .step {
|
1024 |
-
|
1025 |
-
|
1026 |
-
|
1027 |
-
|
1028 |
-
|
1029 |
-
|
1030 |
-
|
1031 |
-
|
1032 |
-
|
1033 |
-
|
|
|
|
|
1034 |
}
|
1035 |
|
1036 |
.wizard-section .wizard-content .wizard .steps ul li:before {
|
1037 |
-
|
1038 |
}
|
1039 |
|
1040 |
.wizard-section .wizard-content .wizard .steps ul li:after {
|
1041 |
-
|
1042 |
-
height: 0.5px !important;
|
1043 |
-
background: #000000 !important;
|
1044 |
-
position: absolute;
|
1045 |
-
left: 50%;
|
1046 |
-
top: 50% !important;
|
1047 |
-
-webkit-transform: translateY(-50%);
|
1048 |
-
transform: translateY(-50%);
|
1049 |
-
width: 100% !important;
|
1050 |
}
|
1051 |
|
1052 |
.wizard-section .wizard-content .wizard .steps ul li .wiz-title {
|
1053 |
-
|
1054 |
-
|
1055 |
-
|
1056 |
-
|
1057 |
}
|
1058 |
|
1059 |
.wizard-section .wizard-content .wizard .actions {
|
1060 |
-
|
1061 |
-
|
|
|
|
|
|
|
|
|
1062 |
}
|
1063 |
|
1064 |
.wizard-section .wizard-content .wizard .actions ul {
|
1065 |
-
|
1066 |
-
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
|
|
|
|
|
|
|
|
|
|
1072 |
}
|
1073 |
|
1074 |
.wizard-section .wizard-content .wizard .actions ul li a.next-step, .wizard-section .wizard-content .wizard .actions ul li a.prev-step {
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
|
1080 |
-
|
1081 |
}
|
1082 |
|
1083 |
.wizard-section .wizard-content .wizard .actions ul li a.next-step:hover, .wizard-section .wizard-content .wizard .actions ul li a.prev-step:hover {
|
1084 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1085 |
}
|
1086 |
|
1087 |
.wizard-section .wizard-content .wizard .actions ul li.disabled {
|
1088 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1089 |
}
|
1090 |
|
1091 |
.creating-account {
|
1092 |
-
|
1093 |
-
counter-reset: indexing;
|
1094 |
}
|
1095 |
|
1096 |
.creating-account li {
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1100 |
}
|
1101 |
|
1102 |
-
.
|
1103 |
-
|
1104 |
-
|
1105 |
-
|
1106 |
-
|
1107 |
-
|
1108 |
}
|
1109 |
-
/*# sourceMappingURL=style.css.map */
|
1110 |
|
1111 |
-
.
|
1112 |
-
|
1113 |
}
|
1114 |
|
1115 |
-
.
|
1116 |
-
|
1117 |
-
border-radius: 25px;
|
1118 |
-
background-color: #EEEEEE;
|
1119 |
-
border-color: #d1d1d1;
|
1120 |
-
background-clip: border-box;
|
1121 |
-
border: 1px solid rgba(0,0,0,.125);
|
1122 |
}
|
1123 |
|
1124 |
-
.
|
1125 |
-
|
1126 |
-
|
1127 |
-
border-color: #2D73C5;
|
1128 |
-
background-clip: border-box;
|
1129 |
-
border: 1px solid rgba(0,0,0,.125);
|
1130 |
-
color: #fff !important;
|
1131 |
}
|
1132 |
|
1133 |
-
|
1134 |
-
|
|
|
1135 |
}
|
1136 |
|
1137 |
-
.
|
1138 |
-
|
1139 |
-
|
|
|
1140 |
|
|
|
1141 |
#feed-spinner {
|
1142 |
/* height: 50px; */
|
1143 |
left: 0;
|
@@ -1152,9 +2540,6 @@ textarea.form-control, .select2.select2-container--default textarea.select2-sele
|
|
1152 |
background: rgba(255,255,255,0.65);
|
1153 |
bottom: 0;
|
1154 |
right: 0;
|
1155 |
-
/* display: flex;
|
1156 |
-
justify-content: center;
|
1157 |
-
align-items: center;*/
|
1158 |
}
|
1159 |
#feed-spinner img {
|
1160 |
position: absolute;
|
@@ -1163,9 +2548,112 @@ textarea.form-control, .select2.select2-container--default textarea.select2-sele
|
|
1163 |
transform: translate(-50%,-50%);
|
1164 |
}
|
1165 |
|
1166 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1167 |
height: 100%;
|
1168 |
-
|
1169 |
-
|
1170 |
-
|
1171 |
-
|
|
|
|
1 |
+
@import url("https://fonts.googleapis.com/css2?family=Lato:wght@300;400;700;900&display=swap");
|
2 |
html,
|
3 |
body {
|
4 |
+
height: 100%;
|
5 |
}
|
6 |
|
7 |
body {
|
8 |
+
margin: 0;
|
9 |
+
padding: 0;
|
10 |
+
-webkit-font-smoothing: antialiased;
|
11 |
+
-moz-osx-font-smoothing: grayscale;
|
12 |
+
font-size: 14px;
|
13 |
+
color: #25283D;
|
14 |
+
font-weight: 400;
|
15 |
+
line-height: normal;
|
16 |
+
background-color: #F2F2F2;
|
17 |
+
font-family: 'Lato', sans-serif;
|
18 |
}
|
19 |
|
20 |
p {
|
21 |
+
font-size: 14px;
|
22 |
+
line-height: 18px;
|
23 |
}
|
24 |
|
25 |
a {
|
26 |
+
-webkit-transition: all ease 0.5s;
|
27 |
+
transition: all ease 0.5s;
|
28 |
+
color: #2D62ED;
|
29 |
}
|
30 |
|
31 |
a:hover {
|
32 |
+
text-decoration: none;
|
33 |
+
-webkit-transition: all ease 0.5s;
|
34 |
+
transition: all ease 0.5s;
|
35 |
+
color: #2D62ED;
|
36 |
}
|
37 |
|
38 |
a:focus {
|
39 |
+
-webkit-box-shadow: none !important;
|
40 |
+
box-shadow: none !important;
|
41 |
}
|
42 |
|
43 |
ul {
|
44 |
+
margin-bottom: 0;
|
45 |
}
|
46 |
|
47 |
a:focus,
|
48 |
button:focus,
|
49 |
input[type="checkbox"],
|
50 |
input[type="radio"] {
|
51 |
+
outline: none;
|
52 |
}
|
53 |
|
54 |
:focus {
|
55 |
+
-ms-box-shadow: none;
|
56 |
+
-webkit-box-shadow: none;
|
57 |
+
box-shadow: none;
|
58 |
+
outline: none;
|
59 |
}
|
60 |
|
61 |
.text-underline {
|
62 |
+
text-decoration: underline;
|
63 |
+
}
|
64 |
+
|
65 |
+
.blue-color {
|
66 |
+
color: #2D62ED !important;
|
67 |
}
|
68 |
|
69 |
section {
|
70 |
+
padding: 10px 0;
|
71 |
}
|
72 |
|
73 |
.title {
|
74 |
+
font-size: 16px;
|
75 |
+
font-weight: 700;
|
76 |
+
margin-bottom: 20px;
|
77 |
}
|
78 |
|
79 |
.sub-title {
|
80 |
+
margin-bottom: 5px;
|
81 |
+
font-size: 14px;
|
82 |
+
}
|
83 |
+
|
84 |
+
.upgrade {
|
85 |
+
color: #03D7FD;
|
86 |
}
|
87 |
|
88 |
.campaigns .campaign-date {
|
89 |
+
border: 1px solid #A9A9A9;
|
90 |
+
padding: 8px;
|
91 |
}
|
92 |
|
93 |
.campaigns .radio-buttons .custom-control-label {
|
94 |
+
width: 100%;
|
95 |
}
|
96 |
|
97 |
.chart {
|
98 |
+
margin-bottom: 15px;
|
99 |
+
background-color: #FFFFFF;
|
|
|
|
|
100 |
}
|
101 |
|
102 |
+
.chart canvas {
|
103 |
+
-ms-box-shadow: 0 3px 6px #00000029;
|
104 |
+
-webkit-box-shadow: 0 3px 6px #00000029;
|
105 |
+
box-shadow: 0 3px 6px #00000029;
|
106 |
+
border-radius: 10px;
|
107 |
+
}
|
108 |
+
|
109 |
+
.chart .sub-title {
|
110 |
+
margin-bottom: 10px;
|
111 |
+
color: #5E5E5E;
|
112 |
}
|
113 |
|
114 |
+
/*.dataTables_length {
|
115 |
+
display: none;
|
116 |
+
}*/
|
117 |
+
|
118 |
.table-section {
|
119 |
+
padding: 8px;
|
120 |
+
margin-bottom: 15px;
|
121 |
+
background-color: #FFFFFF;
|
122 |
+
border-radius: 10px;
|
123 |
+
-ms-box-shadow: 0 3px 6px #00000029;
|
124 |
+
-webkit-box-shadow: 0 3px 6px #00000029;
|
125 |
+
box-shadow: 0 3px 6px #00000029;
|
126 |
}
|
127 |
|
128 |
.table-section .table {
|
129 |
+
margin-bottom: 0;
|
130 |
}
|
131 |
|
132 |
.table-section .table thead th {
|
133 |
+
border: 0;
|
134 |
+
padding: 0.45rem;
|
135 |
+
color: #25283D;
|
136 |
+
vertical-align: top;
|
137 |
}
|
138 |
|
139 |
.table-section .table tr th,
|
140 |
.table-section .table tr td {
|
141 |
+
border: 0;
|
142 |
}
|
143 |
|
144 |
.table-section .table tr td {
|
145 |
+
padding: 0.45rem;
|
146 |
+
color: #5E5E5E;
|
147 |
}
|
148 |
|
149 |
.table-section .table tr td.product-image {
|
150 |
+
width: 70px;
|
151 |
}
|
152 |
|
153 |
.table-section .table tr td.product-image img {
|
154 |
+
width: 100%;
|
155 |
+
-o-object-fit: cover;
|
156 |
+
object-fit: cover;
|
157 |
+
}
|
158 |
+
|
159 |
+
.table-section .table tr td .text-underline {
|
160 |
+
text-decoration: none;
|
161 |
+
color: #5E5E5E;
|
162 |
}
|
163 |
|
164 |
.table-section .pagination {
|
165 |
+
-webkit-box-pack: end;
|
166 |
+
-ms-flex-pack: end;
|
167 |
+
justify-content: flex-end;
|
168 |
+
}
|
169 |
+
|
170 |
+
.btn {
|
171 |
+
border-radius: 500px;
|
172 |
+
padding: 0.375rem 1rem;
|
173 |
+
font-size: 14px;
|
174 |
+
}
|
175 |
+
|
176 |
+
.btn:focus, .btn:active {
|
177 |
+
-ms-box-shadow: none !important;
|
178 |
+
-webkit-box-shadow: none !important;
|
179 |
+
box-shadow: none !important;
|
180 |
+
outline: 0 !important;
|
181 |
+
}
|
182 |
+
|
183 |
+
.btn-primary {
|
184 |
+
background-color: #2D62ED;
|
185 |
+
border-color: #2D62ED;
|
186 |
+
}
|
187 |
+
|
188 |
+
.btn-primary:hover, .btn-primary:focus, .btn-primary.focus {
|
189 |
+
background-color: #1248d5 !important;
|
190 |
+
border-color: #1248d5 !important;
|
191 |
+
}
|
192 |
+
|
193 |
+
.btn-secondary {
|
194 |
+
background-color: #FFFFFF;
|
195 |
+
border-color: #FFFFFF;
|
196 |
+
color: #2D62ED !important;
|
197 |
+
}
|
198 |
+
|
199 |
+
.btn-secondary:hover, .btn-secondary:focus, .btn-secondary.focus {
|
200 |
+
background-color: #1248d5 !important;
|
201 |
+
border-color: #1248d5 !important;
|
202 |
+
color: #FFFFFF !important;
|
203 |
+
}
|
204 |
+
|
205 |
+
.btn-default {
|
206 |
+
background-color: #F2F2F2;
|
207 |
+
border-color: #F2F2F2;
|
208 |
+
color: #25283D;
|
209 |
+
}
|
210 |
+
|
211 |
+
.btn-default:hover, .btn-default:focus, .btn-default.focus {
|
212 |
+
background-color: #d9d9d9 !important;
|
213 |
+
border-color: #d9d9d9 !important;
|
214 |
+
}
|
215 |
+
|
216 |
+
.btn-outline-primary {
|
217 |
+
color: #2D62ED;
|
218 |
+
border-color: #2D62ED;
|
219 |
+
}
|
220 |
+
|
221 |
+
.btn-outline-primary:hover, .btn-outline-primary:focus, .btn-outline-primary.focus {
|
222 |
+
background-color: #2D62ED !important;
|
223 |
+
border-color: #2D62ED !important;
|
224 |
+
color: #FFFFFF !important;
|
225 |
}
|
226 |
|
227 |
.btn-white {
|
228 |
+
background-color: #FFFFFF;
|
229 |
+
border: 1px solid #000000;
|
230 |
+
color: #000000;
|
231 |
+
padding: 5px 10px;
|
232 |
+
font-size: 14px;
|
233 |
+
line-height: normal;
|
234 |
+
border-radius: 0;
|
235 |
+
font-weight: 700;
|
236 |
}
|
237 |
|
238 |
.btn-white:focus {
|
239 |
+
-webkit-box-shadow: none !important;
|
240 |
+
box-shadow: none !important;
|
241 |
}
|
242 |
|
243 |
.btn-grey {
|
244 |
+
background-color: #F2F2F2 !important;
|
245 |
}
|
246 |
|
247 |
.text-underline {
|
248 |
+
text-decoration: underline;
|
249 |
}
|
250 |
|
251 |
.arrow-angle {
|
252 |
+
border-color: #888 transparent transparent transparent;
|
253 |
+
border-style: solid;
|
254 |
+
border-width: 8px 7px 0 7px;
|
255 |
+
height: 0;
|
256 |
+
width: 0;
|
257 |
}
|
258 |
|
259 |
.popup-modal .modal-dialog .modal-content {
|
260 |
+
border-radius: 15px;
|
261 |
+
border: 1px solid #707070;
|
262 |
+
background: #FAFAFA;
|
263 |
}
|
264 |
|
265 |
.popup-modal .modal-dialog .modal-header {
|
266 |
+
border: 0;
|
267 |
+
padding: 30px;
|
268 |
+
}
|
269 |
+
|
270 |
+
.popup-modal .modal-dialog .modal-header .modal-title {
|
271 |
+
font-weight: 700;
|
272 |
+
}
|
273 |
+
|
274 |
+
.popup-modal .modal-dialog .modal-body {
|
275 |
+
padding: 30px;
|
276 |
+
}
|
277 |
+
|
278 |
+
.popup-modal .modal-dialog .modal-body p {
|
279 |
+
color: #5E5E5E;
|
280 |
+
}
|
281 |
+
|
282 |
+
.popup-modal .modal-dialog .close {
|
283 |
+
position: absolute;
|
284 |
+
right: 10px;
|
285 |
+
top: 5px;
|
286 |
+
padding: 0;
|
287 |
+
margin: 0;
|
288 |
+
font-weight: 300;
|
289 |
+
opacity: 1;
|
290 |
+
color: #25283D;
|
291 |
+
font-size: 1.8rem;
|
292 |
+
}
|
293 |
+
|
294 |
+
.popup-modal .modal-dialog .mw-100 {
|
295 |
+
min-width: 100px;
|
296 |
}
|
297 |
|
298 |
.accordion .card {
|
299 |
+
margin-bottom: 15px;
|
300 |
+
background-color: transparent;
|
301 |
+
border: 1px solid #d1d1d1 !important;
|
|
|
|
|
302 |
}
|
303 |
|
304 |
.accordion .card:last-child {
|
305 |
+
margin-bottom: 0 !important;
|
306 |
}
|
307 |
|
308 |
.accordion .card .card-header {
|
309 |
+
padding: 0;
|
310 |
+
background-color: transparent;
|
311 |
+
border-radius: 0;
|
312 |
+
border: 0;
|
313 |
}
|
314 |
|
315 |
.accordion .card .card-header .btn {
|
316 |
+
padding: 5px 15px;
|
317 |
+
display: block;
|
318 |
+
width: 100%;
|
319 |
+
text-align: left;
|
320 |
+
color: #000000;
|
321 |
+
font-weight: 500;
|
322 |
+
font-size: 14px;
|
323 |
+
position: relative;
|
324 |
+
padding-right: 40px !important;
|
325 |
}
|
326 |
|
327 |
.accordion .card .card-header .btn:hover {
|
328 |
+
text-decoration: none;
|
329 |
}
|
330 |
|
331 |
.accordion .card .card-header .btn:focus {
|
332 |
+
text-decoration: none;
|
333 |
+
outline: none;
|
334 |
+
-webkit-box-shadow: none;
|
335 |
+
box-shadow: none;
|
336 |
}
|
337 |
|
338 |
.accordion .card .card-header .btn:after {
|
339 |
+
content: "";
|
340 |
+
border-color: #888 transparent transparent transparent;
|
341 |
+
border-style: solid;
|
342 |
+
border-width: 8px 7px 0 7px;
|
343 |
+
height: 0;
|
344 |
+
width: 0;
|
345 |
+
position: absolute;
|
346 |
+
right: 10px;
|
347 |
+
top: 11px;
|
348 |
+
-webkit-transform: rotate(180deg);
|
349 |
+
transform: rotate(180deg);
|
350 |
}
|
351 |
|
352 |
.accordion .card .card-header .btn.collapsed:after {
|
353 |
+
-webkit-transform: rotate(0deg);
|
354 |
+
transform: rotate(0deg);
|
355 |
}
|
356 |
|
357 |
.accordion .card .card-body {
|
358 |
+
padding: 10px 15px;
|
359 |
}
|
360 |
|
361 |
.accordion .card .card-body p {
|
362 |
+
font-size: 14px;
|
363 |
+
margin-bottom: 0.35rem;
|
364 |
}
|
365 |
|
366 |
.accordion .card .card-body .table-section {
|
367 |
+
border: 0;
|
368 |
+
padding: 0;
|
369 |
+
margin-bottom: 0;
|
370 |
}
|
371 |
|
372 |
.accordion .card .card-body .table-section .table tr td {
|
373 |
+
font-size: 14px;
|
374 |
}
|
375 |
|
376 |
.accordion-section .accordion .card {
|
377 |
+
margin-bottom: 15px;
|
378 |
+
border-radius: 0;
|
379 |
+
border: 1px solid #d1d1d1;
|
380 |
+
background-color: #ffffff;
|
381 |
}
|
382 |
|
383 |
.accordion-section .accordion .card .card-header {
|
384 |
+
padding: 0;
|
385 |
+
background-color: transparent;
|
386 |
+
border-radius: 0;
|
387 |
+
border: 0;
|
388 |
}
|
389 |
|
390 |
.accordion-section .accordion .card .card-header .btn {
|
391 |
+
padding: 5px 10px;
|
392 |
+
display: block;
|
393 |
+
width: 100%;
|
394 |
+
text-align: left;
|
395 |
+
color: #000000;
|
396 |
+
font-weight: 700;
|
397 |
+
font-size: 14px;
|
398 |
}
|
399 |
|
400 |
.accordion-section .accordion .card .card-header .btn:hover {
|
401 |
+
text-decoration: none;
|
402 |
}
|
403 |
|
404 |
.accordion-section .accordion .card .card-header .btn:focus {
|
405 |
+
text-decoration: none;
|
406 |
+
outline: none;
|
407 |
+
-webkit-box-shadow: none;
|
408 |
+
box-shadow: none;
|
409 |
}
|
410 |
|
411 |
.accordion-section .accordion .card .card-body {
|
412 |
+
padding: 10px 15px;
|
413 |
}
|
414 |
|
415 |
.nbk-tbl {
|
416 |
+
background-color: transparent;
|
417 |
+
border: 0;
|
418 |
+
padding: 0;
|
419 |
+
margin-bottom: 0;
|
420 |
}
|
421 |
|
422 |
.card-wrapper {
|
423 |
+
max-width: 100%;
|
424 |
+
margin: 0 auto;
|
425 |
}
|
426 |
|
427 |
.wrapper-main {
|
428 |
+
max-width: 90%;
|
429 |
+
margin: 0 auto;
|
|
|
430 |
}
|
431 |
|
432 |
.configuration-section .note-follow {
|
433 |
+
border: 1px solid #A9A9A9;
|
434 |
+
padding: 10px 15px;
|
435 |
+
border-radius: 10px;
|
436 |
+
margin-bottom: 15px;
|
437 |
}
|
438 |
|
439 |
.configuration-section .note-follow p {
|
440 |
+
margin-bottom: 0;
|
441 |
}
|
442 |
|
443 |
.configuration-section .confg-card .card {
|
444 |
+
border-radius: 15px;
|
445 |
+
background-color: #FFFFFF;
|
446 |
+
-ms-box-shadow: 0 3px 5px #00000029;
|
447 |
+
-webkit-box-shadow: 0 3px 5px #00000029;
|
448 |
+
box-shadow: 0 3px 5px #00000029;
|
449 |
+
height: 100%;
|
450 |
+
border: 0;
|
451 |
}
|
452 |
|
453 |
.configuration-section .confg-card .card .card-header {
|
454 |
+
background-color: #000338;
|
455 |
+
border: 0;
|
456 |
+
text-align: center;
|
457 |
+
padding-left: 15px;
|
458 |
+
padding-right: 15px;
|
459 |
}
|
460 |
|
461 |
.configuration-section .confg-card .card .card-header:first-child {
|
462 |
+
border-radius: calc(15px - 1px) calc(15px - 1px) 0 0;
|
463 |
}
|
464 |
|
465 |
.configuration-section .confg-card .card .card-header .confg-title {
|
466 |
+
font-weight: 700;
|
467 |
+
font-size: 14px;
|
468 |
+
color: #FFFFFF;
|
469 |
+
margin: 0;
|
470 |
}
|
471 |
|
472 |
.configuration-section .confg-card .card .card-body {
|
473 |
+
padding: 15px;
|
474 |
}
|
475 |
|
476 |
.configuration-section .confg-card .card .card-body .list-unstyled {
|
477 |
+
margin: 0;
|
478 |
}
|
479 |
|
480 |
.configuration-section .confg-card .card .card-body .list-unstyled li {
|
481 |
+
display: block;
|
482 |
+
margin-bottom: 10px;
|
483 |
}
|
484 |
|
485 |
.configuration-section .confg-card .card .card-body .list-unstyled li:last-child {
|
486 |
+
margin-bottom: 0;
|
487 |
}
|
488 |
|
489 |
.configuration-section .confg-card .card .card-body .list-unstyled li .text {
|
490 |
+
display: block;
|
491 |
}
|
492 |
|
493 |
.configuration-section .confg-card .card .card-body .list-unstyled li .list-image img {
|
494 |
+
max-width: 18px;
|
495 |
}
|
496 |
|
497 |
.configuration-section .confg-card .card .card-footer {
|
498 |
+
background-color: transparent;
|
499 |
+
border: 0;
|
500 |
+
text-align: center;
|
501 |
+
padding-left: 15px;
|
502 |
+
padding-right: 15px;
|
503 |
}
|
504 |
|
505 |
.configuration-section .confg-card .card .card-footer:last-child {
|
506 |
+
border-radius: 0 0 calc(15px - 1px) calc(15px - 1px);
|
507 |
}
|
508 |
|
509 |
.configuration-section .confg-card .card .card-footer .explr {
|
510 |
+
padding: 0;
|
511 |
+
font-weight: 700;
|
512 |
+
font-size: 14px;
|
513 |
+
text-decoration: underline;
|
514 |
+
color: #000000;
|
515 |
}
|
516 |
|
517 |
.border-right {
|
518 |
+
border-right: 1px solid #A9A9A9;
|
519 |
}
|
520 |
|
521 |
@media (min-width: 576px) {
|
522 |
+
.modal-sm-custom {
|
523 |
+
max-width: 355px;
|
524 |
+
}
|
525 |
}
|
526 |
|
527 |
.dataTables_paginate .page-item .page-link {
|
528 |
+
color: #000000;
|
529 |
}
|
530 |
|
531 |
.dataTables_paginate .page-item.active .page-link {
|
532 |
+
background-color: #000000;
|
533 |
+
border-color: #000000;
|
534 |
+
color: #ffffff !important;
|
535 |
+
font-weight: 700;
|
536 |
}
|
537 |
|
538 |
.dataTables_paginate .page-item.disabled {
|
539 |
+
opacity: 0.5;
|
540 |
+
}
|
541 |
+
|
542 |
+
.loader-section {
|
543 |
+
position: fixed;
|
544 |
+
top: 0;
|
545 |
+
bottom: 0;
|
546 |
+
left: 0;
|
547 |
+
right: 0;
|
548 |
+
height: 100%;
|
549 |
+
background-color: rgba(255, 255, 255, 0.85);
|
550 |
+
display: -webkit-box;
|
551 |
+
display: -ms-flexbox;
|
552 |
+
display: flex;
|
553 |
+
-webkit-box-pack: center;
|
554 |
+
-ms-flex-pack: center;
|
555 |
+
justify-content: center;
|
556 |
+
-webkit-box-align: center;
|
557 |
+
-ms-flex-align: center;
|
558 |
+
align-items: center;
|
559 |
+
z-index: 999;
|
560 |
+
}
|
561 |
+
|
562 |
+
.loader-section img {
|
563 |
+
max-width: 80px;
|
564 |
+
}
|
565 |
+
|
566 |
+
.border-right {
|
567 |
+
border-right: 0 !important;
|
568 |
+
}
|
569 |
+
|
570 |
+
.right-content {
|
571 |
+
border: 0.5px solid #A9A9A9;
|
572 |
+
border-radius: 15px;
|
573 |
+
margin-bottom: 30px;
|
574 |
+
padding: 15px;
|
575 |
+
}
|
576 |
+
|
577 |
+
.right-content:last-child {
|
578 |
+
margin-bottom: 0;
|
579 |
+
}
|
580 |
+
|
581 |
+
.right-content p {
|
582 |
+
margin-bottom: 0;
|
583 |
+
}
|
584 |
+
|
585 |
+
.right-content .content-section {
|
586 |
+
position: relative;
|
587 |
+
padding-left: 30px;
|
588 |
+
}
|
589 |
+
|
590 |
+
.right-content .content-section .content-icon {
|
591 |
+
position: absolute;
|
592 |
+
left: 0;
|
593 |
+
top: 0;
|
594 |
+
}
|
595 |
+
|
596 |
+
.right-content .content-section .content-icon img {
|
597 |
+
width: 20px;
|
598 |
+
}
|
599 |
+
|
600 |
+
.right-content .pagination {
|
601 |
+
margin-top: 5px;
|
602 |
+
}
|
603 |
+
|
604 |
+
.right-content .pagination .page-item .page-link {
|
605 |
+
padding: 0 5px;
|
606 |
+
border: 0;
|
607 |
+
color: #25283D;
|
608 |
+
}
|
609 |
+
.right-content .pagination .page-item .paging_info{padding: 0 5px; border: 0; color: #25283D; margin-top: 1px; display: inline-block;}
|
610 |
+
.right-content .pagination .page-item span.page-link {
|
611 |
+
cursor: pointer;
|
612 |
+
}
|
613 |
+
|
614 |
+
.right-content .pagination .page-item.page-prev img {
|
615 |
+
-webkit-transform: rotate(90deg);
|
616 |
+
transform: rotate(90deg);
|
617 |
+
}
|
618 |
+
|
619 |
+
.right-content .pagination .page-item.page-next img {
|
620 |
+
-webkit-transform: rotate(-90deg);
|
621 |
+
transform: rotate(-90deg);
|
622 |
+
}
|
623 |
+
|
624 |
+
.listing-content {
|
625 |
+
margin-bottom: 0;
|
626 |
+
margin-top: 15px;
|
627 |
+
}
|
628 |
+
|
629 |
+
.listing-content li {
|
630 |
+
margin-bottom: 12px;
|
631 |
+
font-size: 14px;
|
632 |
+
position: relative;
|
633 |
+
padding-left: 24px;
|
634 |
+
color: #5E5E5E;
|
635 |
+
}
|
636 |
+
|
637 |
+
.listing-content li:last-child {
|
638 |
+
margin-bottom: 0;
|
639 |
+
}
|
640 |
+
|
641 |
+
.listing-content li .tick-icon {
|
642 |
+
position: absolute;
|
643 |
+
left: 0;
|
644 |
+
top: 5px;
|
645 |
+
width: 14px;
|
646 |
+
}
|
647 |
+
|
648 |
+
.custom-tooltip {
|
649 |
+
position: relative;
|
650 |
+
}
|
651 |
+
|
652 |
+
.custom-tooltip:hover .tooltip-drop {
|
653 |
+
display: block;
|
654 |
+
}
|
655 |
+
|
656 |
+
.custom-tooltip .tooltip-drop {
|
657 |
+
position: absolute;
|
658 |
+
background-color: #C0F2CA;
|
659 |
+
padding: 25px 15px 15px 15px;
|
660 |
+
top: 0;
|
661 |
+
border-radius: 15px;
|
662 |
+
min-width: 16rem;
|
663 |
+
z-index: 1;
|
664 |
+
display: none;
|
665 |
+
}
|
666 |
+
|
667 |
+
.custom-tooltip .tooltip-drop .tooltip-title {
|
668 |
+
font-size: 16px;
|
669 |
+
color: #5E5E5E;
|
670 |
+
}
|
671 |
+
|
672 |
+
.custom-tooltip .tooltip-drop p {
|
673 |
+
font-size: 12px;
|
674 |
+
color: #757575;
|
675 |
+
font-weight: 400;
|
676 |
+
margin-bottom: 0;
|
677 |
+
}
|
678 |
+
|
679 |
+
.alert-message {
|
680 |
+
text-align: right;
|
681 |
+
}
|
682 |
+
|
683 |
+
.alert-message .alert {
|
684 |
+
display: inline-block;
|
685 |
+
border-radius: 500px;
|
686 |
+
border: 0;
|
687 |
+
padding-top: 0.5rem;
|
688 |
+
padding-bottom: 0.5rem;
|
689 |
+
color: #FFFFFF;
|
690 |
+
background-color: #66BB6A;
|
691 |
+
padding-left: 30px;
|
692 |
+
}
|
693 |
+
.alert-message.tvc-alert-success .alert:after {
|
694 |
+
content: '\2713';
|
695 |
+
position: absolute;
|
696 |
+
left: 12px;
|
697 |
+
}
|
698 |
+
|
699 |
+
.alert-message .error {
|
700 |
+
display: inline-block;
|
701 |
+
border-radius: 500px;
|
702 |
+
border: 0;
|
703 |
+
padding-top: 0.5rem;
|
704 |
+
padding-bottom: 0.5rem;
|
705 |
+
color: #FFFFFF;
|
706 |
+
background-color: #dc3232;
|
707 |
+
}
|
708 |
+
|
709 |
+
.tooltip.show {
|
710 |
+
opacity: 1;
|
711 |
+
}
|
712 |
+
|
713 |
+
.tooltip .arrow {
|
714 |
+
display: none;
|
715 |
+
}
|
716 |
+
|
717 |
+
.tooltip .tooltip-inner {
|
718 |
+
background-color: #FFFFFF;
|
719 |
+
color: #5E5E5E;
|
720 |
+
font-size: 12px;
|
721 |
+
text-align: left;
|
722 |
}
|
723 |
|
724 |
.header-section {
|
725 |
+
display: block;
|
726 |
+
background-color: #FFFFFF;
|
727 |
}
|
728 |
|
729 |
.header-section .top-section {
|
730 |
+
background-color: #25283D;
|
731 |
+
padding: 8px 15px;
|
732 |
}
|
733 |
|
734 |
.header-section .top-section p {
|
735 |
+
margin-bottom: 0;
|
736 |
+
text-align: center;
|
737 |
+
color: #FFFFFF;
|
738 |
+
font-weight: 700;
|
739 |
}
|
740 |
|
741 |
.header-section .navbar-section {
|
742 |
+
padding: 15px 0;
|
743 |
+
margin-bottom: 0;
|
744 |
+
}
|
745 |
+
|
746 |
+
.header-section .navbar-section .navbar-brand {
|
747 |
+
padding-left: 15px;
|
748 |
}
|
749 |
|
750 |
.header-section .navbar-section .navbar-brand img {
|
751 |
+
max-width: 150px;
|
752 |
+
max-height: 30px;
|
753 |
+
}
|
754 |
+
|
755 |
+
.header-section .navbar-section .nav-btn {
|
756 |
+
position: relative;
|
757 |
+
margin: 0 18px;
|
758 |
+
}
|
759 |
+
|
760 |
+
.header-section .navbar-section .nav-btn .nav-icon {
|
761 |
+
max-width: 19px;
|
762 |
+
}
|
763 |
+
|
764 |
+
.header-section .navbar-section .nav-btn .not-count {
|
765 |
+
position: absolute;
|
766 |
+
top: -5px;
|
767 |
+
right: -15px;
|
768 |
+
width: 20px;
|
769 |
+
height: 20px;
|
770 |
+
line-height: 20px;
|
771 |
+
text-align: center;
|
772 |
+
padding: 0;
|
773 |
+
border-radius: 50%;
|
774 |
+
background-color: #2D62ED;
|
775 |
+
}
|
776 |
+
|
777 |
+
.header-section .navbar-section .nav-btn .free-plan {
|
778 |
+
background-color: rgba(8, 114, 252, 0.1);
|
779 |
+
color: #0872FC;
|
780 |
+
border-radius: 500px;
|
781 |
+
padding: 5px 10px;
|
782 |
+
font-size: 14px;
|
783 |
+
font-weight: 400;
|
784 |
+
text-transform: capitalize;
|
785 |
}
|
786 |
|
787 |
.header-section .navbar-section .account-dropdown .btn {
|
788 |
+
border: 0;
|
789 |
+
font-size: 14px;
|
790 |
+
font-weight: 700;
|
791 |
}
|
792 |
|
793 |
.header-section .navbar-section .account-dropdown .btn.dropdown-toggle::after {
|
794 |
+
border: solid black;
|
795 |
+
border-style: solid;
|
796 |
+
border-width: 0 1px 1px 0;
|
797 |
+
vertical-align: middle;
|
798 |
+
-webkit-transform: rotate(45deg);
|
799 |
+
transform: rotate(45deg);
|
800 |
+
padding: 3px;
|
801 |
+
margin-left: 10px;
|
802 |
+
margin-top: -2px;
|
803 |
}
|
804 |
|
805 |
.header-section .navbar-section .account-dropdown .btn:focus {
|
806 |
+
-webkit-box-shadow: none;
|
807 |
+
box-shadow: none;
|
808 |
}
|
809 |
|
810 |
.header-section .navbar-section .account-dropdown .dropdown-menu {
|
811 |
+
padding: 0;
|
812 |
+
margin: -15px 1rem 0 0;
|
813 |
+
border-radius: 0;
|
814 |
+
border: 0;
|
815 |
+
border-radius: 5px;
|
816 |
+
-ms-box-shadow: 0 3px 6px #00000029;
|
817 |
+
-webkit-box-shadow: 0 3px 6px #00000029;
|
818 |
+
box-shadow: 0 3px 6px #00000029;
|
819 |
}
|
820 |
|
821 |
.header-section .navbar-section .account-dropdown .dropdown-menu .dropdown-item {
|
822 |
+
font-size: 14px;
|
823 |
+
padding: 5px 10px;
|
824 |
+
}
|
825 |
+
|
826 |
+
.header-section .navbar-section .account-dropdown .dropdown-menu .dropdown-item:first-child {
|
827 |
+
border-radius: 4px 4px 0 0;
|
828 |
+
}
|
829 |
+
|
830 |
+
.header-section .navbar-section .account-dropdown .dropdown-menu .dropdown-item:last-child {
|
831 |
+
border-radius: 0 0 4px 4px;
|
832 |
}
|
833 |
|
834 |
.header-section .navbar-section .account-dropdown .dropdown-menu .dropdown-item:focus {
|
835 |
+
color: #16181b;
|
836 |
+
background-color: #f8f9fa;
|
837 |
}
|
838 |
|
839 |
.form-group {
|
840 |
+
position: relative;
|
841 |
}
|
842 |
|
843 |
.form-control, .select2.select2-container--default .select2-selection--single {
|
844 |
+
border-color: #707070;
|
845 |
+
height: 30px;
|
846 |
+
font-size: 14px;
|
847 |
+
background-color: #FFFFFF;
|
848 |
+
border-width: 0.5px;
|
849 |
+
border-radius: 15px;
|
850 |
+
padding-left: 7px;
|
851 |
+
}
|
852 |
+
.wp-core-ui select{padding-left: 15px; margin-top: 2px; border-radius: 15px; background-position: right 8px top 55%;}
|
853 |
.form-control::-webkit-input-placeholder, .select2.select2-container--default .select2-selection--single::-webkit-input-placeholder {
|
854 |
+
color: #B2B2B2;
|
855 |
}
|
856 |
|
857 |
.form-control::-ms-input-placeholder, .select2.select2-container--default .select2-selection--single::-ms-input-placeholder {
|
858 |
+
color: #B2B2B2;
|
859 |
}
|
860 |
|
861 |
.form-control:-ms-input-placeholder, .select2.select2-container--default .select2-selection--single:-ms-input-placeholder {
|
862 |
+
color: #B2B2B2;
|
863 |
}
|
864 |
|
865 |
.form-control::placeholder, .select2.select2-container--default .select2-selection--single::placeholder {
|
866 |
+
color: #B2B2B2;
|
867 |
}
|
868 |
|
869 |
.form-control:focus, .select2.select2-container--default .select2-selection--single:focus {
|
870 |
+
-ms-box-shadow: none;
|
871 |
+
-webkit-box-shadow: none;
|
872 |
+
box-shadow: none;
|
873 |
+
outline: none;
|
874 |
+
border-color: #1A2750;
|
875 |
}
|
876 |
|
877 |
.select2 {
|
878 |
+
width: 100% !important;
|
879 |
+
}
|
880 |
+
|
881 |
+
/*.select2.select2-container--default .select2-selection--single .select2-selection__rendered {
|
882 |
+
line-height: 38px;
|
883 |
+
}*/
|
884 |
+
|
885 |
+
.select2.select2-container--default .select2-selection__arrow {
|
886 |
+
height: 40px !important;
|
887 |
}
|
888 |
|
889 |
.select2.select2-container--default .select2-selection__arrow b {
|
890 |
+
border: solid #888888 !important;
|
891 |
+
border-style: solid;
|
892 |
+
border-width: 0 1px 1px 0 !important;
|
893 |
+
vertical-align: middle;
|
894 |
+
-webkit-transform: rotate(45deg);
|
895 |
+
transform: rotate(45deg);
|
896 |
+
padding: 3px;
|
897 |
+
margin-left: -8px !important;
|
898 |
+
margin-top: -5.5px !important;
|
899 |
}
|
900 |
|
901 |
.select2.select2-container--default.select2-container--open .select2-selection__arrow b {
|
902 |
+
border: solid #888888;
|
903 |
+
border-style: solid;
|
904 |
+
border-width: 0 1px 1px 0 !important;
|
905 |
+
-webkit-transform: rotate(-135deg);
|
906 |
+
transform: rotate(-135deg);
|
907 |
+
margin-top: 0 !important;
|
908 |
}
|
909 |
|
910 |
.select2-dropdown {
|
911 |
+
border-color: #707070 !important;
|
912 |
}
|
913 |
|
914 |
.select2-dropdown .select2-results__options .select2-results__option--highlighted {
|
915 |
+
background-color: #5c85f1 !important;
|
916 |
+
color: #FFFFFF !important;
|
917 |
}
|
918 |
|
919 |
.select2-dropdown .select2-results__options .select2-results__option--selected {
|
920 |
+
background-color: #2D62ED !important;
|
921 |
+
color: #FFFFFF !important;
|
922 |
}
|
923 |
|
924 |
.input-daterange .form-control, .input-daterange .select2.select2-container--default .select2-selection--single, .select2.select2-container--default .input-daterange .select2-selection--single {
|
925 |
+
text-align: left;
|
926 |
+
border-radius: 10px !important;
|
927 |
+
border-width: 0.5px;
|
928 |
+
height: 35px;
|
929 |
+
background: url(../images/icon/arrow-down-sign-to-navigate.svg) no-repeat 95%;
|
930 |
}
|
931 |
|
932 |
.input-daterange .text {
|
933 |
+
font-size: 14px;
|
934 |
+
}
|
935 |
+
|
936 |
+
.campaing-date {
|
937 |
+
width: 350px;
|
938 |
+
}
|
939 |
+
|
940 |
+
.campaing-date .input-group {
|
941 |
+
-webkit-box-align: center;
|
942 |
+
-ms-flex-align: center;
|
943 |
+
align-items: center;
|
944 |
}
|
945 |
|
946 |
.datepicker.datepicker-dropdown {
|
947 |
+
border: 0;
|
948 |
+
font-size: 14px;
|
949 |
+
border-radius: 15px;
|
950 |
+
-ms-box-shadow: 0 3px 6px #272D3B33;
|
951 |
+
-webkit-box-shadow: 0 3px 6px #272D3B33;
|
952 |
+
box-shadow: 0 3px 6px #272D3B33;
|
953 |
+
width: 220px;
|
954 |
+
}
|
955 |
+
|
956 |
+
.datepicker .table-condensed {
|
957 |
+
width: 100%;
|
958 |
}
|
959 |
|
960 |
.datepicker th {
|
961 |
+
font-weight: 500 !important;
|
962 |
}
|
963 |
|
964 |
.datepicker td,
|
965 |
.datepicker th {
|
966 |
+
width: 30px !important;
|
967 |
+
height: 30px !important;
|
968 |
+
border-radius: 50% !important;
|
969 |
}
|
970 |
|
971 |
.datepicker td.day.active {
|
972 |
+
background: #1A2750 !important;
|
973 |
}
|
974 |
|
975 |
.datepicker td.day.today {
|
976 |
+
background: #2D62ED !important;
|
977 |
+
color: #FFFFFF;
|
978 |
}
|
979 |
|
980 |
.datepicker td span.month.active {
|
981 |
+
background: #1A2750 !important;
|
982 |
}
|
983 |
|
984 |
.datepicker td span.year.active, .datepicker td span.year.focused {
|
985 |
+
background: #1A2750 !important;
|
986 |
}
|
987 |
|
988 |
.custom-control .custom-control-input:focus ~ .custom-control-label::before {
|
989 |
+
-ms-box-shadow: none;
|
990 |
+
-webkit-box-shadow: none;
|
991 |
+
box-shadow: none;
|
992 |
+
outline: none;
|
993 |
}
|
994 |
|
995 |
.custom-control.custom-radio .custom-control-label {
|
996 |
+
padding-left: 0;
|
997 |
}
|
998 |
|
999 |
.custom-control.custom-radio .custom-control-label::before {
|
1000 |
+
width: 16px;
|
1001 |
+
height: 16px;
|
1002 |
+
background-color: transparent;
|
1003 |
+
border-width: 1px;
|
1004 |
+
border-color: #707070;
|
1005 |
+
top: 1px;
|
1006 |
}
|
1007 |
|
1008 |
.custom-control.custom-radio .custom-control-input:checked ~ .custom-control-label::before {
|
1009 |
+
border-color: #707070;
|
|
|
1010 |
}
|
1011 |
|
1012 |
.custom-control.custom-radio .custom-control-input:checked ~ .custom-control-label::after {
|
1013 |
+
width: 8px;
|
1014 |
+
height: 8px;
|
1015 |
+
border-radius: 50%;
|
1016 |
+
background-image: none;
|
1017 |
+
background-color: #2D62ED;
|
1018 |
+
margin-left: 4px;
|
1019 |
+
top: 5px;
|
1020 |
}
|
1021 |
|
1022 |
.custom-control.custom-checkbox .custom-control-label:before {
|
1023 |
+
border-radius: 2px;
|
1024 |
+
margin-top: -3px;
|
1025 |
+
border-color: #5E5E5E;
|
1026 |
}
|
1027 |
|
1028 |
.custom-control.custom-checkbox .custom-control-input:checked ~ .custom-control-label:before {
|
1029 |
+
background-color: #2D62ED;
|
1030 |
+
border-color: #2D62ED;
|
1031 |
+
border-radius: 2px;
|
1032 |
}
|
1033 |
|
1034 |
.custom-control.custom-checkbox .custom-control-input:checked ~ .custom-control-label:after {
|
1035 |
+
margin-top: -3px;
|
1036 |
+
background-image: url(../img/tick-white.svg);
|
|
|
1037 |
}
|
1038 |
|
1039 |
.custom-control.custom-checkbox .custom-control-input:focus:not(:checked) ~ .custom-control-label::before {
|
1040 |
+
-ms-box-shadow: none;
|
1041 |
+
-webkit-box-shadow: none;
|
1042 |
+
box-shadow: none;
|
1043 |
+
outline: none;
|
1044 |
+
border-color: #2D62ED;
|
1045 |
}
|
1046 |
|
1047 |
.custom-switch .custom-control-label:before {
|
1048 |
+
width: 35px;
|
1049 |
+
height: 20px;
|
1050 |
+
border-radius: 500px;
|
1051 |
}
|
1052 |
|
1053 |
.custom-switch .custom-control-label:after {
|
1054 |
+
left: calc(-2.25rem + 3px);
|
1055 |
+
top: calc(.25rem + 4px);
|
|
|
|
|
|
|
1056 |
}
|
1057 |
|
1058 |
.custom-switch .custom-control-input:checked ~ .custom-control-label:after {
|
1059 |
+
-webkit-transform: translateX(1.25rem);
|
1060 |
+
transform: translateX(1.25rem);
|
1061 |
+
top: calc(.25rem + 4px);
|
1062 |
+
left: calc(-2.25rem + 1px);
|
1063 |
}
|
1064 |
|
1065 |
+
.custom-control-label {
|
1066 |
+
color: #5E5E5E;
|
|
|
1067 |
}
|
1068 |
|
1069 |
textarea.form-control, .select2.select2-container--default textarea.select2-selection--single {
|
1070 |
+
height: auto !important;
|
1071 |
}
|
1072 |
|
1073 |
.form-label-control {
|
1074 |
+
margin-bottom: 0.8rem;
|
1075 |
+
font-weight: 700;
|
1076 |
}
|
1077 |
|
1078 |
.campaign-date .custom-control-label {
|
1079 |
+
display: inline;
|
1080 |
}
|
1081 |
|
1082 |
.campaign-date .custom-control-label .custom-radio .select2 {
|
1083 |
+
vertical-align: middle;
|
1084 |
}
|
1085 |
|
1086 |
.wiz-tab .nav-pills {
|
1087 |
+
-ms-box-shadow: 0 1px 2px #00000029;
|
1088 |
+
-webkit-box-shadow: 0 1px 2px #00000029;
|
1089 |
+
box-shadow: 0 1px 2px #00000029;
|
1090 |
+
background-color: #FFFFFF;
|
1091 |
}
|
1092 |
|
1093 |
+
.wiz-tab .nav-pills .nav-item {
|
1094 |
+
-ms-flex-preferred-size: auto;
|
1095 |
+
flex-basis: auto;
|
1096 |
+
-webkit-box-flex: initial;
|
1097 |
+
-ms-flex-positive: initial;
|
1098 |
+
flex-grow: initial;
|
1099 |
+
margin-bottom: 0px !important;
|
1100 |
+
}
|
1101 |
+
.wiz-tab .nav-pills .nav-item .nav-link a{color: #000000;}
|
1102 |
.wiz-tab .nav-pills .nav-item .nav-link {
|
1103 |
+
color: #000000;
|
1104 |
+
padding: 15px 20px;
|
1105 |
+
-webkit-box-align: center;
|
1106 |
+
-ms-flex-align: center;
|
1107 |
+
align-items: center;
|
1108 |
+
-webkit-box-pack: center;
|
1109 |
+
-ms-flex-pack: center;
|
1110 |
+
justify-content: center;
|
1111 |
+
display: -webkit-box;
|
1112 |
+
display: -ms-flexbox;
|
1113 |
+
display: flex;
|
1114 |
+
height: 100%;
|
1115 |
+
border-radius: 0;
|
1116 |
+
font-size: 14px;
|
1117 |
+
font-weight: 700;
|
1118 |
+
text-transform: uppercase;
|
1119 |
+
border-bottom: 2px solid transparent;
|
1120 |
}
|
1121 |
|
1122 |
.wiz-tab .nav-pills .nav-item .nav-link.active {
|
1123 |
+
border-color: #0872FC !important;
|
1124 |
+
color: #0872FC !important;
|
1125 |
+
background-color: transparent !important;
|
1126 |
}
|
1127 |
|
1128 |
.tab-content {
|
1129 |
+
margin-top: 15px;
|
1130 |
+
padding-bottom: 15px;
|
1131 |
}
|
1132 |
|
1133 |
.tab-content .tab-card {
|
1134 |
+
background: #ffffff;
|
1135 |
+
padding: 30px;
|
1136 |
+
border-radius: 15px;
|
|
|
1137 |
}
|
1138 |
|
1139 |
.tab-content .tab-card.bg-none {
|
1140 |
+
background: none;
|
1141 |
+
border: 0;
|
1142 |
+
padding: 0;
|
1143 |
}
|
1144 |
|
1145 |
.tab-content .tab-card .text-header {
|
1146 |
+
font-size: 20px;
|
1147 |
+
font-weight: 700;
|
1148 |
+
margin-bottom: 1.5rem;
|
1149 |
+
}
|
1150 |
+
|
1151 |
+
.tab-content .tab-card .working {
|
1152 |
+
max-width: 100%;
|
1153 |
+
text-align: center;
|
1154 |
+
}
|
1155 |
+
|
1156 |
+
.tab-content .tab-card .working img {
|
1157 |
+
max-width: 100%;
|
1158 |
+
margin: 0 auto;
|
1159 |
}
|
1160 |
|
1161 |
.tab-content .tab-card .db-btn {
|
1162 |
+
margin-top: 30px;
|
|
|
1163 |
}
|
1164 |
|
1165 |
.tab-content .tab-card .db-btn .btn {
|
1166 |
+
margin-right: 30px;
|
1167 |
}
|
1168 |
|
1169 |
.tab-content .tab-card .custom-control-label {
|
1170 |
+
font-size: 14px;
|
1171 |
}
|
1172 |
|
1173 |
.tab-content .white-box {
|
1174 |
+
background-color: #FFFFFF;
|
1175 |
+
border: 1px solid #d1d1d1;
|
1176 |
+
padding: 10px;
|
1177 |
+
margin-bottom: 15px;
|
1178 |
}
|
1179 |
|
1180 |
.tab-content .white-box:last-child {
|
1181 |
+
margin-bottom: 0;
|
1182 |
}
|
1183 |
|
1184 |
.tab-content .text-m {
|
1185 |
+
display: block;
|
1186 |
+
margin-bottom: 0.35rem;
|
1187 |
+
font-size: 14px;
|
1188 |
}
|
1189 |
|
1190 |
.btn-google {
|
1191 |
+
-ms-box-shadow: 3px 3px 3px #00000029;
|
1192 |
+
-webkit-box-shadow: 3px 3px 3px #00000029;
|
1193 |
+
box-shadow: 3px 3px 3px #00000029;
|
1194 |
+
font-weight: 900;
|
1195 |
+
font-size: 14px;
|
1196 |
}
|
1197 |
|
1198 |
.btn-google img {
|
1199 |
+
width: 25px;
|
1200 |
+
margin-right: 1.5rem;
|
1201 |
}
|
1202 |
|
1203 |
.licence {
|
1204 |
+
border: 0.5px solid #A9A9A9;
|
1205 |
+
padding: 30px;
|
1206 |
+
margin-bottom: 15px;
|
1207 |
+
border-radius: 15px;
|
1208 |
}
|
1209 |
|
1210 |
.licence p {
|
1211 |
+
margin-bottom: 0.35rem;
|
1212 |
+
font-size: 14px;
|
1213 |
}
|
1214 |
|
1215 |
.licence .input-group {
|
1216 |
+
margin-top: 15px;
|
1217 |
}
|
1218 |
|
1219 |
.licence .input-group .form-control, .licence .input-group .select2.select2-container--default .select2-selection--single, .select2.select2-container--default .licence .input-group .select2-selection--single {
|
1220 |
+
border-radius: 10px;
|
1221 |
+
margin-right: 15px;
|
1222 |
+
color: #000000;
|
|
|
|
|
|
|
1223 |
}
|
1224 |
|
1225 |
.licence .input-group .input-group-append {
|
1226 |
+
margin-left: 0;
|
1227 |
}
|
1228 |
|
1229 |
.licence .input-group .input-group-append .btn {
|
1230 |
+
width: 40px;
|
1231 |
+
height: 40px;
|
1232 |
+
padding: 0;
|
1233 |
+
border-radius: 50%;
|
1234 |
+
line-height: normal;
|
1235 |
+
}
|
1236 |
+
|
1237 |
+
.licence .input-group .input-group-append .btn img {
|
1238 |
+
max-width: 18px;
|
1239 |
}
|
1240 |
|
1241 |
.ecom-track {
|
1242 |
+
margin-top: 5px;
|
1243 |
+
margin-bottom: 0;
|
1244 |
}
|
1245 |
|
1246 |
.ecom-track li {
|
1247 |
+
margin-bottom: 15px;
|
1248 |
+
font-size: 14px;
|
1249 |
}
|
1250 |
|
1251 |
.ecom-track li .img-icon {
|
1252 |
+
width: 18px;
|
1253 |
+
margin-right: 5px;
|
1254 |
}
|
1255 |
|
1256 |
.ecom-track li .trk-text {
|
1257 |
+
vertical-align: middle;
|
1258 |
}
|
1259 |
|
1260 |
.premium-list {
|
1261 |
+
margin-bottom: 0;
|
1262 |
+
margin-top: 15px;
|
1263 |
}
|
1264 |
|
1265 |
.premium-list li {
|
1266 |
+
margin-bottom: 15px;
|
1267 |
+
font-size: 14px;
|
1268 |
}
|
1269 |
|
1270 |
.premium-list li span {
|
1271 |
+
position: relative;
|
1272 |
+
display: block;
|
1273 |
+
padding-left: 15px;
|
1274 |
}
|
1275 |
|
1276 |
.premium-list li span:before {
|
1277 |
+
content: '';
|
1278 |
+
width: 5px;
|
1279 |
+
height: 5px;
|
1280 |
+
border-radius: 50%;
|
1281 |
+
background: #000;
|
1282 |
+
position: absolute;
|
1283 |
+
left: 0;
|
1284 |
+
top: 7px;
|
1285 |
}
|
1286 |
|
1287 |
.google-account-analytics .ga-title {
|
1288 |
+
font-size: 14px;
|
1289 |
+
font-weight: 700;
|
1290 |
+
margin-bottom: 0;
|
1291 |
}
|
1292 |
|
1293 |
.google-account-analytics .ga-text {
|
1294 |
+
margin-bottom: 0;
|
1295 |
}
|
1296 |
|
1297 |
+
.google-account-analytics .acc-num {
|
1298 |
+
display: inline-block;
|
1299 |
+
border: 0.5px solid #A9A9A9;
|
1300 |
+
border-radius: 10px;
|
1301 |
+
padding: 5px 8px;
|
1302 |
+
min-width: 180px;
|
1303 |
+
text-align: right;
|
1304 |
}
|
1305 |
|
1306 |
+
.google-account-analytics .acc-num .ga-text {
|
1307 |
+
font-weight: 900;
|
1308 |
+
border-right: 1px solid #A9A9A9;
|
1309 |
+
padding: 0 5px;
|
1310 |
}
|
1311 |
|
1312 |
+
.google-account-analytics .acc-num .ga-text:last-child {
|
1313 |
+
border-right: 0;
|
1314 |
+
padding-right: 0;
|
|
|
1315 |
}
|
1316 |
|
1317 |
+
.google-account-analytics .acc-num p {
|
1318 |
+
display: inline-block;
|
1319 |
}
|
1320 |
|
1321 |
+
.content-heading {
|
1322 |
+
font-size: 18px;
|
1323 |
+
font-weight: 700;
|
1324 |
}
|
1325 |
|
1326 |
+
.wizard-section.campaign-wizard {
|
1327 |
+
padding: 0;
|
|
|
|
|
|
|
|
|
1328 |
}
|
1329 |
|
1330 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .steps {
|
1331 |
+
border-radius: 0 !important;
|
1332 |
+
-ms-box-shadow: none;
|
1333 |
+
-webkit-box-shadow: none;
|
1334 |
+
box-shadow: none;
|
1335 |
+
background-color: transparent;
|
1336 |
+
max-width: 520px;
|
1337 |
+
margin: 0 auto 20px auto;
|
1338 |
}
|
1339 |
|
1340 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li {
|
1341 |
+
text-align: center;
|
1342 |
+
border-right: 0;
|
1343 |
+
padding: 0 25px;
|
1344 |
}
|
1345 |
|
1346 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li:last-child::before {
|
1347 |
+
display: none;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1348 |
}
|
1349 |
|
1350 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li .wiz-title {
|
1351 |
+
color: #5E5E5E;
|
1352 |
+
font-size: 14px;
|
1353 |
+
font-weight: 400;
|
1354 |
}
|
1355 |
|
1356 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li .step {
|
1357 |
+
visibility: hidden;
|
|
|
|
|
|
|
1358 |
}
|
1359 |
|
1360 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li a::before {
|
1361 |
+
content: '' !important;
|
1362 |
+
width: 16px;
|
1363 |
+
height: 16px;
|
1364 |
+
border: 1px solid #707070;
|
1365 |
+
display: inline-block;
|
1366 |
+
position: absolute;
|
1367 |
+
margin: 0 auto;
|
1368 |
+
left: 0;
|
1369 |
+
right: 0;
|
1370 |
+
top: 0;
|
1371 |
+
border-radius: 50%;
|
1372 |
+
z-index: 10;
|
1373 |
+
background-color: #F2F2F2;
|
1374 |
}
|
1375 |
|
1376 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li::before {
|
1377 |
+
content: '' !important;
|
1378 |
+
width: 100%;
|
1379 |
+
border: 2px solid #5E5E5E;
|
1380 |
+
display: inline-block;
|
1381 |
+
position: absolute;
|
1382 |
+
left: 50%;
|
1383 |
+
top: 0;
|
1384 |
+
margin-top: 5px;
|
1385 |
+
}
|
1386 |
+
|
1387 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li.current {
|
1388 |
+
background-color: transparent;
|
1389 |
+
}
|
1390 |
+
|
1391 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li.current .wiz-title {
|
1392 |
+
color: #25283D;
|
1393 |
+
font-weight: 700;
|
1394 |
+
}
|
1395 |
+
|
1396 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li.current a::after {
|
1397 |
+
content: '' !important;
|
1398 |
+
width: calc(16px - 8px);
|
1399 |
+
height: calc(16px - 8px);
|
1400 |
+
background-color: #2D62ED;
|
1401 |
+
display: inline-block;
|
1402 |
+
position: absolute;
|
1403 |
+
margin: 0 auto;
|
1404 |
+
left: 0;
|
1405 |
+
right: 0;
|
1406 |
+
top: 0;
|
1407 |
+
margin-top: 4px;
|
1408 |
+
border-radius: 50%;
|
1409 |
+
z-index: 10;
|
1410 |
+
}
|
1411 |
+
|
1412 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li.done a::before {
|
1413 |
+
top: 0;
|
1414 |
+
width: 16px;
|
1415 |
+
height: 16px;
|
1416 |
+
background-size: 16px auto;
|
1417 |
+
border-color: transparent;
|
1418 |
+
}
|
1419 |
+
|
1420 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li.done a::after {
|
1421 |
+
display: none;
|
1422 |
}
|
1423 |
|
1424 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .steps ul li.done a .wiz-title {
|
1425 |
+
color: #25283D;
|
1426 |
+
font-weight: 400;
|
1427 |
}
|
1428 |
|
1429 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .content {
|
1430 |
+
background-color: transparent;
|
1431 |
+
-ms-box-shadow: none;
|
1432 |
+
-webkit-box-shadow: none;
|
1433 |
+
box-shadow: none;
|
1434 |
+
padding: 0;
|
1435 |
+
margin-bottom: 30px;
|
1436 |
+
overflow: initial;
|
1437 |
}
|
1438 |
|
1439 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .content > .body {
|
1440 |
+
padding: 0;
|
|
|
|
|
1441 |
}
|
1442 |
|
1443 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .content .card-wrapper {
|
1444 |
+
background-color: #F2F2F2;
|
1445 |
+
-ms-box-shadow: none;
|
1446 |
+
-webkit-box-shadow: none;
|
1447 |
+
box-shadow: none;
|
1448 |
+
padding: 0;
|
1449 |
+
border-radius: 15px;
|
1450 |
}
|
1451 |
|
1452 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .content .card-wrapper .row:first-child {
|
1453 |
+
background-color: #000338;
|
1454 |
+
padding: 15px;
|
1455 |
+
margin-bottom: 1rem;
|
1456 |
+
margin-left: 0;
|
1457 |
+
margin-right: 0;
|
1458 |
+
border-radius: calc(15px - 1px) calc(15px - 1px) 0 0;
|
1459 |
}
|
1460 |
|
1461 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .content .card-wrapper .row:first-child .heading-tbl {
|
1462 |
+
margin-bottom: 0;
|
1463 |
+
font-size: 15px;
|
1464 |
+
color: #FFFFFF;
|
1465 |
+
text-decoration: none;
|
1466 |
+
font-weight: normal;
|
1467 |
+
border-right: 1px solid #FFFFFF;
|
1468 |
+
text-align: center;
|
1469 |
}
|
1470 |
|
1471 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .content .card-wrapper .row:first-child .col-6:last-child .heading-tbl {
|
1472 |
+
border-right: 0;
|
1473 |
}
|
1474 |
|
1475 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .content .card-wrapper .row .col-6 .form-group {
|
1476 |
+
padding-left: 15px;
|
1477 |
+
padding-right: 15px;
|
1478 |
}
|
1479 |
|
1480 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .content .card-wrapper .row .col-6 .form-group .form-label-control {
|
1481 |
+
margin-bottom: 0;
|
1482 |
}
|
1483 |
|
1484 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .content .heading-tbl {
|
1485 |
+
font-size: 16px;
|
1486 |
+
text-decoration: underline;
|
1487 |
+
margin-bottom: 1rem;
|
1488 |
+
font-weight: 400;
|
1489 |
}
|
1490 |
|
1491 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .content .td-head {
|
1492 |
+
display: block;
|
1493 |
+
font-weight: 700;
|
1494 |
+
text-align: right;
|
1495 |
}
|
1496 |
|
1497 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .actions {
|
1498 |
+
position: static;
|
1499 |
+
height: auto;
|
1500 |
+
padding: 0;
|
1501 |
}
|
1502 |
|
1503 |
+
.wizard-section.campaign-wizard .wizard-content .wizard .actions ul {
|
1504 |
+
-webkit-box-pack: start;
|
1505 |
+
-ms-flex-pack: start;
|
1506 |
+
justify-content: flex-start;
|
|
|
1507 |
}
|
1508 |
|
1509 |
+
.sync-new-product .product-card {
|
1510 |
+
background-color: #F2F2F2;
|
1511 |
+
border-radius: 10px;
|
1512 |
+
-ms-box-shadow: 0 3px 6px #00000029;
|
1513 |
+
-webkit-box-shadow: 0 3px 6px #00000029;
|
1514 |
+
box-shadow: 0 3px 6px #00000029;
|
1515 |
+
margin-top: 1rem;
|
1516 |
+
}
|
1517 |
+
|
1518 |
+
.sync-new-product .product-card .row {
|
1519 |
+
margin-left: 0;
|
1520 |
+
margin-right: 0;
|
1521 |
+
}
|
1522 |
+
|
1523 |
+
.sync-new-product .product-card .row [class*="col-"] {
|
1524 |
+
padding: 0;
|
1525 |
+
}
|
1526 |
+
|
1527 |
+
.sync-new-product .product-card .row [class*="col-"]:first-child .card {
|
1528 |
+
border-radius: calc(10px - 1px) 0 0 calc(10px - 1px);
|
1529 |
+
margin-left: -1px;
|
1530 |
+
}
|
1531 |
+
|
1532 |
+
.sync-new-product .product-card .row [class*="col-"]:last-child .card {
|
1533 |
+
border-radius: 0 0 calc(10px - 1px) calc(10px - 1px);
|
1534 |
+
margin-right: -1px;
|
1535 |
+
}
|
1536 |
+
|
1537 |
+
.sync-new-product .product-card .row [class*="col"]:last-child .card:after {
|
1538 |
+
border-right: 0;
|
1539 |
+
}
|
1540 |
+
|
1541 |
+
.sync-new-product .product-card .card {
|
1542 |
+
border: 0;
|
1543 |
+
padding: 10px 5px;
|
1544 |
+
text-align: center;
|
1545 |
+
border-radius: 0;
|
1546 |
+
background-color: transparent;
|
1547 |
+
}
|
1548 |
+
|
1549 |
+
.sync-new-product .product-card .col:after {
|
1550 |
+
content: '';
|
1551 |
+
border-right: 1px solid #A9A9A9;
|
1552 |
+
display: block;
|
1553 |
+
position: absolute;
|
1554 |
+
top: 25px;
|
1555 |
+
bottom: 5px;
|
1556 |
+
right: 0;
|
1557 |
+
}
|
1558 |
+
.sync-new-product .product-card .col:last-child:after {
|
1559 |
+
border-right: 0;
|
1560 |
+
}
|
1561 |
+
|
1562 |
+
.sync-new-product .product-card .card.active {
|
1563 |
+
background-color: #FFFFFF;
|
1564 |
+
}
|
1565 |
+
|
1566 |
+
.sync-new-product .product-card .card.active .pro-title, .sync-new-product .product-card .card.active .pro-count {
|
1567 |
+
color: #2D62ED !important;
|
1568 |
+
}
|
1569 |
+
|
1570 |
+
.sync-new-product .product-card .card.active:before {
|
1571 |
+
content: '';
|
1572 |
+
border-bottom: 2px solid #2D62ED;
|
1573 |
+
display: block;
|
1574 |
+
position: absolute;
|
1575 |
+
left: 5px;
|
1576 |
+
bottom: 0;
|
1577 |
+
right: 5px;
|
1578 |
+
}
|
1579 |
+
|
1580 |
+
.sync-new-product .product-card .card.active:after {
|
1581 |
+
border-color: #FFFFFF;
|
1582 |
+
}
|
1583 |
+
|
1584 |
+
.sync-new-product .product-card .card .pro-title {
|
1585 |
+
font-weight: 400;
|
1586 |
+
margin-bottom: 0;
|
1587 |
+
}
|
1588 |
+
|
1589 |
+
.sync-new-product .product-card .card .pro-count {
|
1590 |
+
font-size: 35px;
|
1591 |
+
font-weight: 900;
|
1592 |
+
margin-bottom: 0;
|
1593 |
+
}
|
1594 |
+
|
1595 |
+
.sync-new-product .product-card .card.pending .pro-count, .sync-new-product .product-card .card.pending .pro-title {
|
1596 |
+
color: #5E5E5E;
|
1597 |
+
}
|
1598 |
+
|
1599 |
+
.sync-new-product .product-card .card.approved .pro-count, .sync-new-product .product-card .card.approved .pro-title {
|
1600 |
+
color: #66BB6A;
|
1601 |
+
}
|
1602 |
+
|
1603 |
+
.sync-new-product .product-card .card.disapproved .pro-count, .sync-new-product .product-card .card.disapproved .pro-title {
|
1604 |
+
color: #EE2C3C;
|
1605 |
+
}
|
1606 |
+
|
1607 |
+
.sync-new-product .title {
|
1608 |
+
font-size: 14px;
|
1609 |
+
font-weight: 500;
|
1610 |
+
}
|
1611 |
+
|
1612 |
+
.feature-list-section {
|
1613 |
+
background: transparent linear-gradient(63deg, #03D7FD 0%, #0872FC 100%) 0% 0% no-repeat padding-box;
|
1614 |
+
border-radius: 15px;
|
1615 |
+
padding: 15px 30px;
|
1616 |
+
margin-top: 30px;
|
1617 |
+
}
|
1618 |
+
|
1619 |
+
.feature-list-section .feature-heading {
|
1620 |
+
text-align: center;
|
1621 |
+
margin-bottom: 30px;
|
1622 |
+
}
|
1623 |
+
|
1624 |
+
.feature-list-section .feature-heading span {
|
1625 |
+
border-bottom: 1px solid #FFFFFF;
|
1626 |
+
padding: 0 10px 5px 10px;
|
1627 |
+
font-size: 18px;
|
1628 |
+
color: #FFFFFF;
|
1629 |
+
}
|
1630 |
+
|
1631 |
+
.feature-list-section .media {
|
1632 |
+
position: relative;
|
1633 |
+
max-width: 85%;
|
1634 |
+
}
|
1635 |
+
|
1636 |
+
.feature-list-section .media .feature-icon {
|
1637 |
+
width: 50px;
|
1638 |
+
margin-right: 20px;
|
1639 |
+
}
|
1640 |
+
|
1641 |
+
.feature-list-section .media .feature-icon .img-tg {
|
1642 |
+
max-width: 50px;
|
1643 |
+
}
|
1644 |
+
|
1645 |
+
.feature-list-section .media .title-feature {
|
1646 |
+
color: #FFFFFF;
|
1647 |
+
font-size: 14px;
|
1648 |
+
font-weight: 900;
|
1649 |
+
margin-bottom: 6px;
|
1650 |
+
}
|
1651 |
+
|
1652 |
+
.feature-list-section .media .feature-content {
|
1653 |
+
color: #FFFFFF;
|
1654 |
+
font-weight: 300;
|
1655 |
+
margin-bottom: 0;
|
1656 |
+
}
|
1657 |
+
|
1658 |
+
.feature-list-section .media.lock .feature-icon, .feature-list-section .media.lock .media-body {
|
1659 |
+
opacity: 0.5;
|
1660 |
+
}
|
1661 |
+
|
1662 |
+
.feature-list-section .media .lock-icon {
|
1663 |
+
position: absolute;
|
1664 |
+
top: 12px;
|
1665 |
+
left: -30px;
|
1666 |
+
}
|
1667 |
+
|
1668 |
+
.feature-list-section .list-section {
|
1669 |
+
margin-bottom: 0;
|
1670 |
+
}
|
1671 |
+
|
1672 |
+
.feature-list-section .list-section .row > [class*="col-"] {
|
1673 |
+
padding-bottom: 15px;
|
1674 |
+
display: -webkit-box;
|
1675 |
+
display: -ms-flexbox;
|
1676 |
+
display: flex;
|
1677 |
+
-webkit-box-pack: center;
|
1678 |
+
-ms-flex-pack: center;
|
1679 |
+
justify-content: center;
|
1680 |
+
}
|
1681 |
+
|
1682 |
+
.feature-list-section .unlock-premium {
|
1683 |
+
text-align: center;
|
1684 |
+
margin-top: 50px;
|
1685 |
+
}
|
1686 |
+
|
1687 |
+
.feature-list-section .unlock-premium .btn:hover img, .feature-list-section .unlock-premium .btn:focus img {
|
1688 |
+
-webkit-filter: grayscale(100%) brightness(100);
|
1689 |
+
filter: grayscale(100%) brightness(100);
|
1690 |
+
}
|
1691 |
+
|
1692 |
+
.google-slider {
|
1693 |
+
margin-top: 30px;
|
1694 |
+
-ms-box-shadow: 1px 1px 4px #00000026;
|
1695 |
+
-webkit-box-shadow: 1px 1px 4px #00000026;
|
1696 |
+
box-shadow: 1px 1px 4px #00000026;
|
1697 |
+
padding: 30px;
|
1698 |
+
border-radius: 15px;
|
1699 |
+
}
|
1700 |
+
|
1701 |
+
.google-slider .slider-img img {
|
1702 |
+
max-width: 400px;
|
1703 |
+
}
|
1704 |
+
|
1705 |
+
.google-slider .sld-hd {
|
1706 |
+
font-size: 12px;
|
1707 |
+
color: #A9A9A9;
|
1708 |
+
margin-bottom: 15px;
|
1709 |
+
}
|
1710 |
+
|
1711 |
+
.google-slider .sld-sbhd {
|
1712 |
+
font-size: 18px;
|
1713 |
+
margin-bottom: 15px;
|
1714 |
+
font-weight: 700;
|
1715 |
+
}
|
1716 |
+
|
1717 |
+
.google-slider .sld-cnt {
|
1718 |
+
font-size: 14px;
|
1719 |
+
color: #5E5E5E;
|
1720 |
+
}
|
1721 |
+
|
1722 |
+
.google-slider .sld-list {
|
1723 |
+
margin-bottom: 0;
|
1724 |
+
margin-top: 30px;
|
1725 |
+
}
|
1726 |
+
|
1727 |
+
.google-slider .sld-list li {
|
1728 |
+
margin-bottom: 12px;
|
1729 |
+
font-weight: 700;
|
1730 |
+
font-size: 14px;
|
1731 |
+
position: relative;
|
1732 |
+
padding-left: 24px;
|
1733 |
+
}
|
1734 |
+
|
1735 |
+
.google-slider .sld-list li:last-child {
|
1736 |
+
margin-bottom: 0;
|
1737 |
+
}
|
1738 |
+
|
1739 |
+
.google-slider .sld-list li .tick-icon {
|
1740 |
+
position: absolute;
|
1741 |
+
left: 0;
|
1742 |
+
top: 5px;
|
1743 |
+
width: 14px;
|
1744 |
+
}
|
1745 |
+
|
1746 |
+
.google-slider .carousel-item {
|
1747 |
+
padding: 0 30px;
|
1748 |
+
}
|
1749 |
+
|
1750 |
+
.testimonials {
|
1751 |
+
margin-top: 30px;
|
1752 |
+
}
|
1753 |
+
|
1754 |
+
.testimonials ul li {
|
1755 |
+
margin-bottom: 15px;
|
1756 |
+
}
|
1757 |
+
|
1758 |
+
.testimonials ul li:last-child {
|
1759 |
+
margin-bottom: 0;
|
1760 |
+
}
|
1761 |
+
|
1762 |
+
.testimonials ul li:nth-child(even) .user-details {
|
1763 |
+
-webkit-box-ordinal-group: 3;
|
1764 |
+
-ms-flex-order: 2;
|
1765 |
+
order: 2;
|
1766 |
+
margin-left: 50px;
|
1767 |
+
margin-right: 0 !important;
|
1768 |
+
}
|
1769 |
+
|
1770 |
+
.testimonials ul li:nth-child(even) .media-body {
|
1771 |
+
-webkit-box-ordinal-group: 2;
|
1772 |
+
-ms-flex-order: 1;
|
1773 |
+
order: 1;
|
1774 |
+
}
|
1775 |
+
|
1776 |
+
.testimonials ul li .testimonila-box {
|
1777 |
+
background-color: #000338;
|
1778 |
+
padding: 15px 30px;
|
1779 |
+
border-radius: 15px;
|
1780 |
+
}
|
1781 |
+
|
1782 |
+
.testimonials ul li .testimonila-box .user-details {
|
1783 |
+
margin-right: 50px;
|
1784 |
+
}
|
1785 |
+
|
1786 |
+
.testimonials ul li .testimonila-box .user-details .user-image-box {
|
1787 |
+
width: 100px;
|
1788 |
+
height: 100px;
|
1789 |
+
border-radius: 50%;
|
1790 |
+
margin: 0 auto 5px auto;
|
1791 |
+
}
|
1792 |
+
|
1793 |
+
.testimonials ul li .testimonila-box .user-details .user-image-box .user-image {
|
1794 |
+
border-radius: 50%;
|
1795 |
+
width: 100%;
|
1796 |
+
height: 100%;
|
1797 |
+
-o-object-fit: cover;
|
1798 |
+
object-fit: cover;
|
1799 |
+
}
|
1800 |
+
|
1801 |
+
.testimonials ul li .testimonila-box .user-details .user-name {
|
1802 |
+
font-size: 12px;
|
1803 |
+
color: #FFFFFF;
|
1804 |
+
margin-bottom: 3px;
|
1805 |
+
text-align: center;
|
1806 |
+
}
|
1807 |
+
|
1808 |
+
.testimonials ul li .testimonila-box .user-details .designation {
|
1809 |
+
color: #FFFFFF;
|
1810 |
+
font-weight: 300;
|
1811 |
+
text-align: center;
|
1812 |
+
font-size: 12px;
|
1813 |
+
margin-bottom: 0;
|
1814 |
+
}
|
1815 |
+
|
1816 |
+
.testimonials ul li .testimonila-box .testi-content {
|
1817 |
+
color: #FFFFFF;
|
1818 |
+
font-size: 13px;
|
1819 |
+
font-weight: 300;
|
1820 |
+
padding: 0 20px;
|
1821 |
+
margin-bottom: 0;
|
1822 |
+
}
|
1823 |
+
|
1824 |
+
.testimonials ul li .testimonila-box .quote {
|
1825 |
+
font-weight: 900;
|
1826 |
+
font-size: 30px;
|
1827 |
+
opacity: rgba(255, 255, 255, 0.5);
|
1828 |
+
margin-bottom: 0;
|
1829 |
+
}
|
1830 |
+
|
1831 |
+
.carousel-indicators {
|
1832 |
+
bottom: -30px;
|
1833 |
+
}
|
1834 |
+
|
1835 |
+
.carousel-indicators li {
|
1836 |
+
width: 7px;
|
1837 |
+
height: 7px;
|
1838 |
+
border: 1px solid #FFFFFF;
|
1839 |
+
background-color: transparent;
|
1840 |
+
border-radius: 50%;
|
1841 |
+
opacity: 1;
|
1842 |
+
}
|
1843 |
+
|
1844 |
+
.carousel-indicators li.active {
|
1845 |
+
background-color: #FFFFFF;
|
1846 |
+
border-color: #FFFFFF;
|
1847 |
+
}
|
1848 |
+
|
1849 |
+
.carousel-control-prev, .carousel-control-next {
|
1850 |
+
opacity: 1;
|
1851 |
+
width: auto;
|
1852 |
+
bottom: auto;
|
1853 |
+
top: 50%;
|
1854 |
+
-webkit-transform: translateY(-50%);
|
1855 |
+
transform: translateY(-50%);
|
1856 |
+
left: -15px;
|
1857 |
+
}
|
1858 |
+
|
1859 |
+
.carousel-control-prev .carousel-control-prev-icon, .carousel-control-next .carousel-control-prev-icon {
|
1860 |
+
background-image: none;
|
1861 |
+
}
|
1862 |
+
|
1863 |
+
.carousel-control-prev .carousel-control-prev-icon img, .carousel-control-next .carousel-control-prev-icon img {
|
1864 |
+
-webkit-transform: rotate(90deg);
|
1865 |
+
transform: rotate(90deg);
|
1866 |
+
width: 15px;
|
1867 |
+
}
|
1868 |
+
|
1869 |
+
.carousel-control-next {
|
1870 |
+
left: auto;
|
1871 |
+
right: -15px;
|
1872 |
+
}
|
1873 |
+
|
1874 |
+
.carousel-control-next .carousel-control-next-icon {
|
1875 |
+
background-image: none;
|
1876 |
+
}
|
1877 |
+
|
1878 |
+
.carousel-control-next .carousel-control-next-icon img {
|
1879 |
+
-webkit-transform: rotate(-90deg);
|
1880 |
+
transform: rotate(-90deg);
|
1881 |
+
width: 15px;
|
1882 |
+
}
|
1883 |
+
|
1884 |
+
.rating {
|
1885 |
+
padding: 30px 0 0 0;
|
1886 |
+
text-align: center;
|
1887 |
+
}
|
1888 |
+
|
1889 |
+
.rating .rating-text {
|
1890 |
+
font-size: 18px;
|
1891 |
+
font-weight: 700;
|
1892 |
+
margin-left: 24px;
|
1893 |
+
}
|
1894 |
+
|
1895 |
+
.upgrade-section {
|
1896 |
+
margin-bottom: 30px;
|
1897 |
+
}
|
1898 |
+
|
1899 |
+
.upgrade-section .upgrade-info {
|
1900 |
+
background-color: #F2F2F2;
|
1901 |
+
padding: 10px 15px;
|
1902 |
+
border-radius: 15px;
|
1903 |
+
}
|
1904 |
+
|
1905 |
+
.upgrade-section .upgrade-info span {
|
1906 |
+
font-size: 16px;
|
1907 |
+
}
|
1908 |
+
|
1909 |
+
.upgrade-section .upgrade-info .btn-outline-primary {
|
1910 |
+
background-color: #FFFFFF;
|
1911 |
+
}
|
1912 |
+
|
1913 |
+
.upgrade-section .package-details {
|
1914 |
+
margin-top: 30px;
|
1915 |
+
}
|
1916 |
+
|
1917 |
+
.upgrade-section .package-details .package-card {
|
1918 |
+
border: 0;
|
1919 |
+
border-radius: 15px;
|
1920 |
+
-ms-box-shadow: 0 3px 10px #00000029;
|
1921 |
+
-webkit-box-shadow: 0 3px 10px #00000029;
|
1922 |
+
box-shadow: 0 3px 10px #00000029;
|
1923 |
+
}
|
1924 |
+
|
1925 |
+
.upgrade-section .package-details .package-card .card-header {
|
1926 |
+
border-radius: calc(15px - 1px) calc(15px - 1px) 0 0;
|
1927 |
+
border-bottom: 0;
|
1928 |
+
background: transparent -webkit-gradient(linear, right top, left top, from(#03D7FD), to(#0872FC)) 0% 0% no-repeat padding-box;
|
1929 |
+
background: transparent linear-gradient(270deg, #03D7FD 0%, #0872FC 100%) 0% 0% no-repeat padding-box;
|
1930 |
+
padding: 25px;
|
1931 |
+
}
|
1932 |
+
|
1933 |
+
.upgrade-section .package-details .package-card .card-header .package-name {
|
1934 |
+
color: #FFFFFF;
|
1935 |
+
font-weight: 900;
|
1936 |
+
font-size: 18px;
|
1937 |
+
margin-bottom: 0;
|
1938 |
+
}
|
1939 |
+
|
1940 |
+
.upgrade-section .package-details .package-card .card-body {
|
1941 |
+
padding: 25px 25px 0 25px;
|
1942 |
+
}
|
1943 |
+
|
1944 |
+
.upgrade-section .package-details .package-card .card-body .service-provide li {
|
1945 |
+
color: #7F7F7F;
|
1946 |
+
border-bottom: 1px solid #EDEDED;
|
1947 |
+
padding-bottom: 10px;
|
1948 |
+
padding-top: 10px;
|
1949 |
+
}
|
1950 |
+
|
1951 |
+
.upgrade-section .package-details .package-card .card-body .service-provide li:first-child {
|
1952 |
+
padding-top: 0;
|
1953 |
+
}
|
1954 |
+
|
1955 |
+
.upgrade-section .package-details .package-card .card-body .service-provide li:last-child {
|
1956 |
+
border-bottom: 0;
|
1957 |
+
}
|
1958 |
+
|
1959 |
+
.upgrade-section .package-details .package-card .card-body .service-provide li img {
|
1960 |
+
max-width: 15px;
|
1961 |
+
}
|
1962 |
+
|
1963 |
+
.upgrade-section .package-details .package-card .card-footer {
|
1964 |
+
border-radius: 0 0 calc(15px - 1px) calc(15px - 1px);
|
1965 |
+
border-bottom: 0;
|
1966 |
+
background-color: transparent;
|
1967 |
+
border-top: 0;
|
1968 |
+
text-align: center;
|
1969 |
+
padding: 25px;
|
1970 |
+
}
|
1971 |
+
|
1972 |
+
.back-btn {
|
1973 |
+
padding: 0;
|
1974 |
+
color: #25283D;
|
1975 |
+
position: absolute;
|
1976 |
+
top: -25px;
|
1977 |
+
left: 0;
|
1978 |
+
font-size: 12px;
|
1979 |
+
}
|
1980 |
+
|
1981 |
+
.back-btn span {
|
1982 |
+
vertical-align: middle;
|
1983 |
+
padding-left: 3px;
|
1984 |
+
}
|
1985 |
+
|
1986 |
+
.edit-section .edit-tabs {
|
1987 |
+
border: 0.5px solid #A9A9A9;
|
1988 |
+
border-radius: 15px;
|
1989 |
+
}
|
1990 |
+
|
1991 |
+
.edit-section .edit-tabs .nav-item {
|
1992 |
+
margin-bottom: 0;
|
1993 |
+
}
|
1994 |
+
|
1995 |
+
.edit-section .edit-tabs .nav-item:last-child .nav-link {
|
1996 |
+
border-right: 0;
|
1997 |
+
border-radius: 0 calc(15px - 1px) calc(15px - 1px) 0;
|
1998 |
+
margin-right: -1px;
|
1999 |
+
}
|
2000 |
+
|
2001 |
+
.edit-section .edit-tabs .nav-item:first-child .nav-link {
|
2002 |
+
border-radius: calc(15px - 1px) 0 0 calc(15px - 1px);
|
2003 |
+
}
|
2004 |
+
|
2005 |
+
.edit-section .edit-tabs .nav-link {
|
2006 |
+
border: 0;
|
2007 |
+
border-right: 0.5px solid #A9A9A9;
|
2008 |
+
border-radius: 0;
|
2009 |
+
color: #5E5E5E;
|
2010 |
+
font-size: 16px;
|
2011 |
+
font-weight: 700;
|
2012 |
+
padding: 12px 8px;
|
2013 |
+
}
|
2014 |
+
.edit-section .edit-tabs .nav-link a{
|
2015 |
+
color: #5E5E5E;
|
2016 |
+
}
|
2017 |
+
|
2018 |
+
.edit-section .edit-tabs .nav-link.active {
|
2019 |
+
background-color: #000338 !important;
|
2020 |
+
color: #FFFFFF !important;
|
2021 |
+
}
|
2022 |
+
.edit-section .edit-tabs .nav-link.active a{
|
2023 |
+
background-color: #000338 !important;
|
2024 |
+
color: #FFFFFF !important;
|
2025 |
+
}
|
2026 |
+
|
2027 |
+
.product-title {
|
2028 |
+
font-size: 16px;
|
2029 |
+
font-weight: 700;
|
2030 |
+
color: #5E5E5E;
|
2031 |
+
margin-bottom: 15px;
|
2032 |
+
}
|
2033 |
+
|
2034 |
+
.total-products {
|
2035 |
+
margin-top: 30px;
|
2036 |
+
}
|
2037 |
+
|
2038 |
+
.total-products .table-section {
|
2039 |
+
background-color: #F2F2F2;
|
2040 |
+
border-radius: 15px;
|
2041 |
+
padding: 0 15px;
|
2042 |
+
border: 0;
|
2043 |
+
-ms-box-shadow: none;
|
2044 |
+
-webkit-box-shadow: none;
|
2045 |
+
box-shadow: none;
|
2046 |
+
}
|
2047 |
+
|
2048 |
+
.total-products .table-section .table th, .total-products .table-section .table td {
|
2049 |
+
color: #5E5E5E;
|
2050 |
+
}
|
2051 |
+
|
2052 |
+
.total-products .table-section .table tr th {
|
2053 |
+
padding: 10px 10px;
|
2054 |
+
}
|
2055 |
+
|
2056 |
+
.total-products .table-section .table tbody tr td {
|
2057 |
+
padding: 25px 10px;
|
2058 |
+
background-color: #FFFFFF;
|
2059 |
+
vertical-align: middle;
|
2060 |
+
position: relative;
|
2061 |
+
}
|
2062 |
+
|
2063 |
+
.total-products .table-section .table tbody tr td:after {
|
2064 |
+
content: '';
|
2065 |
+
border-right: 1px solid #A9A9A9;
|
2066 |
+
display: block;
|
2067 |
+
position: absolute;
|
2068 |
+
top: 10px;
|
2069 |
+
bottom: 20px;
|
2070 |
+
right: 0;
|
2071 |
+
}
|
2072 |
+
.total-products .table-section .table tbody tr td:before{
|
2073 |
+
content: '';
|
2074 |
+
border-bottom: 10px solid #f2f2f2;
|
2075 |
+
position: absolute;
|
2076 |
+
display: block;
|
2077 |
+
width: 100%;
|
2078 |
+
top: 10px;
|
2079 |
+
bottom: 0px;
|
2080 |
+
right: 0;
|
2081 |
+
}
|
2082 |
+
|
2083 |
+
.total-products .table-section .table tbody tr td:first-child {
|
2084 |
+
border-radius: 15px 0 0 15px;
|
2085 |
+
}
|
2086 |
+
|
2087 |
+
.total-products .table-section .table tbody tr td:first-child:after {
|
2088 |
+
border-right: 0;
|
2089 |
+
}
|
2090 |
+
|
2091 |
+
.total-products .table-section .table tbody tr td:last-child {
|
2092 |
+
border-radius: 0 15px 15px 0;
|
2093 |
+
}
|
2094 |
+
|
2095 |
+
.total-products .table-section .table tbody tr td:last-child:after {
|
2096 |
+
border-right: 0;
|
2097 |
+
}
|
2098 |
+
|
2099 |
+
.total-products .table-section .table tbody tr td.product-image {
|
2100 |
+
width: 80px;
|
2101 |
+
}
|
2102 |
+
|
2103 |
+
.smart-shopping-section .sec-title {
|
2104 |
+
font-size: 16px;
|
2105 |
+
font-weight: 700;
|
2106 |
+
}
|
2107 |
+
|
2108 |
+
.smart-shopping-section .create-campaign-btn .btn {
|
2109 |
+
width: 190px;
|
2110 |
+
}
|
2111 |
+
|
2112 |
+
.account-performance {
|
2113 |
+
margin-top: 15px;
|
2114 |
+
}
|
2115 |
+
|
2116 |
+
.pro-account {
|
2117 |
+
max-width: 250px;
|
2118 |
+
position: relative;
|
2119 |
+
margin-top: 30px;
|
2120 |
+
}
|
2121 |
+
|
2122 |
+
.pro-account .card {
|
2123 |
+
border: 0;
|
2124 |
+
border-radius: 10px;
|
2125 |
+
-ms-box-shadow: 0 3px 6px #272D3B33;
|
2126 |
+
-webkit-box-shadow: 0 3px 6px #272D3B33;
|
2127 |
+
box-shadow: 0 3px 6px #272D3B33;
|
2128 |
+
}
|
2129 |
+
|
2130 |
+
.pro-account .card .card-footer {
|
2131 |
+
background-color: transparent;
|
2132 |
+
border-top: 0;
|
2133 |
+
text-align: center;
|
2134 |
+
}
|
2135 |
+
|
2136 |
+
.pro-account .card .card-body .account-img {
|
2137 |
+
margin-bottom: 15px;
|
2138 |
+
position: absolute;
|
2139 |
+
top: -60px;
|
2140 |
+
}
|
2141 |
+
|
2142 |
+
.pro-account .card .card-body .account-img img {
|
2143 |
+
max-width: 100%;
|
2144 |
+
}
|
2145 |
+
|
2146 |
+
.pro-account .card .card-body .pro-content {
|
2147 |
+
margin-top: 90px;
|
2148 |
+
}
|
2149 |
+
|
2150 |
+
.pro-account .card .card-body .pro-content p {
|
2151 |
+
margin-bottom: 0;
|
2152 |
+
}
|
2153 |
+
|
2154 |
+
.pro-account .card .card-body .userName {
|
2155 |
+
font-weight: 900;
|
2156 |
+
font-size: 14px;
|
2157 |
+
}
|
2158 |
+
|
2159 |
+
/*.dataTables_info {
|
2160 |
+
display: none;
|
2161 |
+
}*/
|
2162 |
+
|
2163 |
+
.informanal-section {
|
2164 |
+
margin-left: 3px;
|
2165 |
+
}
|
2166 |
+
|
2167 |
+
.informanal-section img {
|
2168 |
+
width: 12px;
|
2169 |
+
}
|
2170 |
+
|
2171 |
+
.mt--top {
|
2172 |
+
margin-top: -60px;
|
2173 |
+
}
|
2174 |
+
|
2175 |
+
.bottom-section {
|
2176 |
+
position: fixed;
|
2177 |
+
right: 70px;
|
2178 |
+
bottom: 30px;
|
2179 |
+
}
|
2180 |
+
|
2181 |
+
.bottom-section .dropdown .btn {
|
2182 |
+
width: 50px;
|
2183 |
+
height: 50px;
|
2184 |
+
padding: 10px;
|
2185 |
+
background-color: #000338;
|
2186 |
+
position: relative;
|
2187 |
+
z-index: 1001;
|
2188 |
+
}
|
2189 |
+
|
2190 |
+
.bottom-section .dropdown .btn img {
|
2191 |
+
max-width: 100%;
|
2192 |
+
max-height: 100%;
|
2193 |
+
}
|
2194 |
+
|
2195 |
+
.bottom-section .dropdown .dropdown-menu {
|
2196 |
+
background-color: transparent;
|
2197 |
+
border: 0;
|
2198 |
+
min-width: auto;
|
2199 |
+
display: block !important;
|
2200 |
+
-webkit-transform: none !important;
|
2201 |
+
transform: none !important;
|
2202 |
+
top: auto !important;
|
2203 |
+
bottom: 100%;
|
2204 |
+
padding: 0;
|
2205 |
+
margin: 0;
|
2206 |
+
right: 0;
|
2207 |
+
}
|
2208 |
+
|
2209 |
+
.bottom-section .dropdown .dropdown-menu li {
|
2210 |
+
padding: 0;
|
2211 |
+
position: relative;
|
2212 |
+
margin: 10px 0;
|
2213 |
+
}
|
2214 |
+
|
2215 |
+
.bottom-section .dropdown .dropdown-menu li .item-text {
|
2216 |
+
padding-left: 45px;
|
2217 |
+
padding-top: 10px;
|
2218 |
+
display: block;
|
2219 |
+
color: #000338;
|
2220 |
+
display: none;
|
2221 |
+
}
|
2222 |
+
|
2223 |
+
.bottom-section .dropdown .dropdown-menu li:after {
|
2224 |
+
content: '';
|
2225 |
+
height: 100%;
|
2226 |
+
width: 1px;
|
2227 |
+
border-left: 1px dashed #000338;
|
2228 |
+
position: absolute;
|
2229 |
+
top: 100%;
|
2230 |
+
bottom: 0;
|
2231 |
+
left: 50%;
|
2232 |
+
-webkit-transform: translateX(-50%);
|
2233 |
+
transform: translateX(-50%);
|
2234 |
+
}
|
2235 |
+
|
2236 |
+
.bottom-section .dropdown .dropdown-menu li .dropdown-item {
|
2237 |
+
width: calc(50px - 10px);
|
2238 |
+
height: calc(50px - 10px);
|
2239 |
+
padding: 0;
|
2240 |
+
background-color: #FFFFFF;
|
2241 |
+
border-radius: 50%;
|
2242 |
+
position: relative;
|
2243 |
+
z-index: 1;
|
2244 |
+
margin: 0 auto;
|
2245 |
+
}
|
2246 |
+
|
2247 |
+
.bottom-section .dropdown .dropdown-menu li .dropdown-item img {
|
2248 |
+
max-width: 50%;
|
2249 |
+
position: absolute;
|
2250 |
+
top: 50%;
|
2251 |
+
left: 50%;
|
2252 |
+
-webkit-transform: translate(-50%, -50%);
|
2253 |
+
transform: translate(-50%, -50%);
|
2254 |
+
}
|
2255 |
+
|
2256 |
+
.bottom-section .dropdown .dropdown-menu li .dropdown-item:hover {
|
2257 |
+
background-color: #03D7FD;
|
2258 |
+
}
|
2259 |
+
|
2260 |
+
.bottom-section .dropdown .dropdown-menu li .dropdown-item:hover img {
|
2261 |
+
-webkit-filter: grayscale(100%) brightness(30%) sepia(100%) hue-rotate(-180deg) saturate(700%) contrast(0.8);
|
2262 |
+
filter: grayscale(100%) brightness(30%) sepia(100%) hue-rotate(-180deg) saturate(700%) contrast(0.8);
|
2263 |
+
}
|
2264 |
+
|
2265 |
+
.bottom-section .dropdown .dropdown-menu li .dropdown-item:hover .item-text {
|
2266 |
+
display: block;
|
2267 |
+
}
|
2268 |
+
|
2269 |
+
.tapme .tooltip-inner {
|
2270 |
+
background-color: #03D7FD;
|
2271 |
+
color: #000338;
|
2272 |
+
border-radius: 500px;
|
2273 |
+
-ms-box-shadow: 0 3px 6px #00000029;
|
2274 |
+
-webkit-box-shadow: 0 3px 6px #00000029;
|
2275 |
+
box-shadow: 0 3px 6px #00000029;
|
2276 |
+
font-weight: 700;
|
2277 |
+
}
|
2278 |
+
|
2279 |
+
.wizard-section {
|
2280 |
+
padding: 20px 0;
|
2281 |
+
}
|
2282 |
+
|
2283 |
+
.wizard-section .wizard-content .wizard {
|
2284 |
+
overflow: initial;
|
2285 |
+
position: relative;
|
2286 |
+
}
|
2287 |
+
|
2288 |
+
.wizard-section .wizard-content .wizard .steps {
|
2289 |
+
margin-bottom: 15px;
|
2290 |
+
border-radius: 15px;
|
2291 |
+
background: #fff;
|
2292 |
+
-ms-box-shadow: 0 0 10px #00000029;
|
2293 |
+
-webkit-box-shadow: 0 0 10px #00000029;
|
2294 |
+
box-shadow: 0 0 10px #00000029;
|
2295 |
+
}
|
2296 |
+
|
2297 |
+
.wizard-section .wizard-content .wizard .steps ul li {
|
2298 |
+
text-align: left;
|
2299 |
+
padding: 15px 30px;
|
2300 |
+
border-right: 1px solid #EDEDED;
|
2301 |
+
}
|
2302 |
+
|
2303 |
+
.wizard-section .wizard-content .wizard .steps ul li:first-child {
|
2304 |
+
border-radius: 15px 0 0 15px;
|
2305 |
+
}
|
2306 |
+
|
2307 |
+
.wizard-section .wizard-content .wizard .steps ul li:last-child {
|
2308 |
+
border-right: 0;
|
2309 |
+
border-radius: 0 15px 15px 0;
|
2310 |
+
}
|
2311 |
+
|
2312 |
+
.wizard-section .wizard-content .wizard .steps ul li.current {
|
2313 |
+
background-color: #2D62ED;
|
2314 |
+
}
|
2315 |
+
|
2316 |
+
.wizard-section .wizard-content .wizard .steps ul li.current .step, .wizard-section .wizard-content .wizard .steps ul li.current .wiz-title {
|
2317 |
+
font-weight: 400;
|
2318 |
+
color: #FFFFFF;
|
2319 |
+
}
|
2320 |
+
|
2321 |
+
.wizard-section .wizard-content .wizard .steps ul li.current .step {
|
2322 |
+
background-color: transparent;
|
2323 |
+
}
|
2324 |
+
|
2325 |
+
.wizard-section .wizard-content .wizard .steps ul li.done a {
|
2326 |
+
padding-left: 25px;
|
2327 |
+
}
|
2328 |
+
|
2329 |
+
.wizard-section .wizard-content .wizard .steps ul li.done a:before {
|
2330 |
+
content: '' !important;
|
2331 |
+
width: 24px;
|
2332 |
+
height: 24px;
|
2333 |
+
position: absolute;
|
2334 |
+
background: url(../images/icon/tick-round.svg) no-repeat left top;
|
2335 |
+
background-size: 24px auto;
|
2336 |
+
top: 8px;
|
2337 |
+
left: -15px;
|
2338 |
+
}
|
2339 |
+
|
2340 |
+
.wizard-section .wizard-content .wizard .steps ul li.done .step {
|
2341 |
+
background-color: transparent;
|
2342 |
+
border-color: transparent;
|
2343 |
+
color: #9D9D9D;
|
2344 |
+
font-weight: 400;
|
2345 |
+
}
|
2346 |
+
|
2347 |
+
.wizard-section .wizard-content .wizard .steps ul li.done .wiz-title {
|
2348 |
+
color: #9D9D9D;
|
2349 |
+
font-weight: 400;
|
2350 |
}
|
2351 |
|
2352 |
.wizard-section .wizard-content .wizard .steps ul li a {
|
2353 |
+
padding: 0;
|
2354 |
+
margin: 0;
|
2355 |
+
-webkit-transition: none;
|
2356 |
+
transition: none;
|
2357 |
}
|
2358 |
|
2359 |
.wizard-section .wizard-content .wizard .steps ul li .step {
|
2360 |
+
width: auto;
|
2361 |
+
height: auto;
|
2362 |
+
border: 0;
|
2363 |
+
font-size: 14px;
|
2364 |
+
color: #9D9D9D;
|
2365 |
+
line-height: normal;
|
2366 |
+
border-radius: 0;
|
2367 |
+
position: static;
|
2368 |
+
margin: 0;
|
2369 |
+
display: block;
|
2370 |
+
text-align: left;
|
2371 |
+
font-weight: 700;
|
2372 |
}
|
2373 |
|
2374 |
.wizard-section .wizard-content .wizard .steps ul li:before {
|
2375 |
+
content: none !important;
|
2376 |
}
|
2377 |
|
2378 |
.wizard-section .wizard-content .wizard .steps ul li:after {
|
2379 |
+
content: none !important;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2380 |
}
|
2381 |
|
2382 |
.wizard-section .wizard-content .wizard .steps ul li .wiz-title {
|
2383 |
+
color: #9D9D9D;
|
2384 |
+
font-weight: 700;
|
2385 |
+
display: block;
|
2386 |
+
margin-top: 5px;
|
2387 |
}
|
2388 |
|
2389 |
.wizard-section .wizard-content .wizard .actions {
|
2390 |
+
margin-top: 0;
|
2391 |
+
text-align: center;
|
2392 |
+
position: absolute;
|
2393 |
+
height: 60px;
|
2394 |
+
bottom: 0;
|
2395 |
+
padding: 0 30px;
|
2396 |
}
|
2397 |
|
2398 |
.wizard-section .wizard-content .wizard .actions ul {
|
2399 |
+
width: 100%;
|
2400 |
+
display: -webkit-box;
|
2401 |
+
display: -ms-flexbox;
|
2402 |
+
display: flex;
|
2403 |
+
-webkit-box-pack: center;
|
2404 |
+
-ms-flex-pack: center;
|
2405 |
+
justify-content: center;
|
2406 |
+
}
|
2407 |
+
|
2408 |
+
.wizard-section .wizard-content .wizard .actions ul li {
|
2409 |
+
margin-left: 0 !important;
|
2410 |
+
margin-right: 25px;
|
2411 |
}
|
2412 |
|
2413 |
.wizard-section .wizard-content .wizard .actions ul li a.next-step, .wizard-section .wizard-content .wizard .actions ul li a.prev-step {
|
2414 |
+
background: #2D62ED;
|
2415 |
+
min-width: 100px;
|
2416 |
+
font-weight: 700;
|
2417 |
+
color: #FFFFFF;
|
2418 |
+
border: 1px solid #2D62ED;
|
2419 |
+
border-radius: 500px;
|
2420 |
}
|
2421 |
|
2422 |
.wizard-section .wizard-content .wizard .actions ul li a.next-step:hover, .wizard-section .wizard-content .wizard .actions ul li a.prev-step:hover {
|
2423 |
+
background-color: #1248d5 !important;
|
2424 |
+
border-color: #1248d5 !important;
|
2425 |
+
color: #FFFFFF;
|
2426 |
+
}
|
2427 |
+
|
2428 |
+
.wizard-section .wizard-content .wizard .actions ul li a.prev-step {
|
2429 |
+
background-color: #F2F2F2;
|
2430 |
+
border-color: #F2F2F2;
|
2431 |
+
color: #25283D;
|
2432 |
+
}
|
2433 |
+
|
2434 |
+
.wizard-section .wizard-content .wizard .actions ul li a.prev-step:hover {
|
2435 |
+
background-color: #d9d9d9 !important;
|
2436 |
+
border-color: #d9d9d9 !important;
|
2437 |
+
color: #25283D;
|
2438 |
}
|
2439 |
|
2440 |
.wizard-section .wizard-content .wizard .actions ul li.disabled {
|
2441 |
+
display: none;
|
2442 |
+
}
|
2443 |
+
|
2444 |
+
.wizard-section .wizard-content .wizard .content {
|
2445 |
+
background-color: #FFFFFF;
|
2446 |
+
border-radius: 15px;
|
2447 |
+
-ms-box-shadow: 0 0 10px #00000029;
|
2448 |
+
-webkit-box-shadow: 0 0 10px #00000029;
|
2449 |
+
box-shadow: 0 0 10px #00000029;
|
2450 |
+
padding: 30px 30px 90px 30px;
|
2451 |
}
|
2452 |
|
2453 |
.creating-account {
|
2454 |
+
margin-bottom: 1rem;
|
|
|
2455 |
}
|
2456 |
|
2457 |
.creating-account li {
|
2458 |
+
position: relative;
|
2459 |
+
margin-bottom: 5px;
|
2460 |
+
color: #5E5E5E;
|
2461 |
+
}
|
2462 |
+
|
2463 |
+
.information {
|
2464 |
+
width: 20px;
|
2465 |
+
height: 20px;
|
2466 |
+
line-height: 20px;
|
2467 |
+
background-color: #5CB16D;
|
2468 |
+
border-radius: 50%;
|
2469 |
+
display: inline-block;
|
2470 |
+
color: #FFFFFF;
|
2471 |
+
text-align: center;
|
2472 |
+
font-size: 12px;
|
2473 |
+
position: relative;
|
2474 |
+
z-index: 2;
|
2475 |
+
}
|
2476 |
+
|
2477 |
+
.advance-settings {
|
2478 |
+
display: inline-block;
|
2479 |
+
position: relative;
|
2480 |
+
margin-left: 5px;
|
2481 |
+
}
|
2482 |
+
|
2483 |
+
.advance-settings .setting-icon {
|
2484 |
+
width: 20px;
|
2485 |
+
height: 20px;
|
2486 |
+
line-height: 16px;
|
2487 |
+
border: 1px solid #2D62ED;
|
2488 |
+
border-radius: 50%;
|
2489 |
+
display: block;
|
2490 |
+
color: #FFFFFF;
|
2491 |
+
text-align: center;
|
2492 |
+
font-size: 18px;
|
2493 |
+
color: #2D62ED;
|
2494 |
+
font-weight: 700;
|
2495 |
}
|
2496 |
|
2497 |
+
.advance-settings .dropdown-menu {
|
2498 |
+
background-color: #F7F7F7;
|
2499 |
+
min-width: 27rem;
|
2500 |
+
border-radius: 15px;
|
2501 |
+
border: 0;
|
2502 |
+
padding: 15px;
|
2503 |
}
|
|
|
2504 |
|
2505 |
+
.advance-settings .dropdown-menu .form-group {
|
2506 |
+
margin-bottom: 5px;
|
2507 |
}
|
2508 |
|
2509 |
+
.configuration-section .card {
|
2510 |
+
padding: 0px !important;
|
|
|
|
|
|
|
|
|
|
|
2511 |
}
|
2512 |
|
2513 |
+
.container {
|
2514 |
+
max-width: 100% !important;
|
2515 |
+
margin: 0px !important;
|
|
|
|
|
|
|
|
|
2516 |
}
|
2517 |
|
2518 |
+
.custom-thresold-label{
|
2519 |
+
font-size: 14px;
|
2520 |
+
color: #5E5E5E;
|
2521 |
}
|
2522 |
|
2523 |
+
.right-content .pagination .page-item .page-link img{
|
2524 |
+
width: 100%;
|
2525 |
+
height: 100%;
|
2526 |
+
}
|
2527 |
|
2528 |
+
/*# sourceMappingURL=style.css.map */
|
2529 |
#feed-spinner {
|
2530 |
/* height: 50px; */
|
2531 |
left: 0;
|
2540 |
background: rgba(255,255,255,0.65);
|
2541 |
bottom: 0;
|
2542 |
right: 0;
|
|
|
|
|
|
|
2543 |
}
|
2544 |
#feed-spinner img {
|
2545 |
position: absolute;
|
2548 |
transform: translate(-50%,-50%);
|
2549 |
}
|
2550 |
|
2551 |
+
/* slick slider */
|
2552 |
+
.slick-slider{
|
2553 |
+
position: relative;
|
2554 |
+
display: block;
|
2555 |
+
box-sizing: border-box;
|
2556 |
+
-webkit-user-select: none;
|
2557 |
+
-moz-user-select: none;
|
2558 |
+
-ms-user-select: none;
|
2559 |
+
user-select: none;
|
2560 |
+
|
2561 |
+
-webkit-touch-callout: none;
|
2562 |
+
-khtml-user-select: none;
|
2563 |
+
-ms-touch-action: pan-y;
|
2564 |
+
touch-action: pan-y;
|
2565 |
+
-webkit-tap-highlight-color: transparent;
|
2566 |
+
}
|
2567 |
+
|
2568 |
+
.slick-list{
|
2569 |
+
position: relative;
|
2570 |
+
|
2571 |
+
display: block;
|
2572 |
+
overflow: hidden;
|
2573 |
+
|
2574 |
+
margin: 0;
|
2575 |
+
padding: 0;
|
2576 |
+
}
|
2577 |
+
.slick-list:focus{
|
2578 |
+
outline: none;
|
2579 |
+
}
|
2580 |
+
.slick-list.dragging{
|
2581 |
+
cursor: pointer;
|
2582 |
+
cursor: hand;
|
2583 |
+
}
|
2584 |
+
|
2585 |
+
.slick-slider .slick-track, .slick-slider .slick-list{
|
2586 |
+
-webkit-transform: translate3d(0, 0, 0);
|
2587 |
+
-moz-transform: translate3d(0, 0, 0);
|
2588 |
+
-ms-transform: translate3d(0, 0, 0);
|
2589 |
+
-o-transform: translate3d(0, 0, 0);
|
2590 |
+
transform: translate3d(0, 0, 0);
|
2591 |
+
}
|
2592 |
+
|
2593 |
+
.slick-track{
|
2594 |
+
position: relative;
|
2595 |
+
top: 0;
|
2596 |
+
left: 0;
|
2597 |
+
|
2598 |
+
display: block;
|
2599 |
+
margin-left: auto;
|
2600 |
+
margin-right: auto;
|
2601 |
+
}
|
2602 |
+
.slick-track:before, .slick-track:after{
|
2603 |
+
display: table;
|
2604 |
+
|
2605 |
+
content: '';
|
2606 |
+
}
|
2607 |
+
.slick-track:after{
|
2608 |
+
clear: both;
|
2609 |
+
}
|
2610 |
+
.slick-loading .slick-track{
|
2611 |
+
visibility: hidden;
|
2612 |
+
}
|
2613 |
+
|
2614 |
+
.slick-slide{
|
2615 |
+
display: none;
|
2616 |
+
float: left;
|
2617 |
+
|
2618 |
+
height: 100%;
|
2619 |
+
min-height: 1px;
|
2620 |
+
}
|
2621 |
+
[dir='rtl'] .slick-slide{
|
2622 |
+
float: right;
|
2623 |
+
}
|
2624 |
+
.slick-slide img{
|
2625 |
+
display: block;
|
2626 |
+
}
|
2627 |
+
.slick-slide.slick-loading img{
|
2628 |
+
display: none;
|
2629 |
+
}
|
2630 |
+
.slick-slide.dragging img{
|
2631 |
+
pointer-events: none;
|
2632 |
+
}
|
2633 |
+
.slick-initialized .slick-slide{
|
2634 |
+
display: block;
|
2635 |
+
}
|
2636 |
+
.slick-loading .slick-slide{
|
2637 |
+
visibility: hidden;
|
2638 |
+
}
|
2639 |
+
.slick-vertical .slick-slide{
|
2640 |
+
display: block;
|
2641 |
+
height: auto;
|
2642 |
+
border: 1px solid transparent;
|
2643 |
+
}
|
2644 |
+
.slick-arrow.slick-hidden {
|
2645 |
+
display: none;
|
2646 |
+
}
|
2647 |
+
.tvc-hide{
|
2648 |
+
display: none;
|
2649 |
+
}
|
2650 |
+
.tvc_licence_key_change_wapper{height: 40px;}
|
2651 |
+
.tvc_licence_key_change{cursor: pointer;}
|
2652 |
+
.tvc_licence_key_change_wapper.google-account-analytics .acc-num{text-align: left; min-width: 100%; border: 1.3px solid #b4b9be; display: table;
|
2653 |
height: 100%;
|
2654 |
+
vertical-align: middle;
|
2655 |
+
background: #f4f4f4; border-radius: 20px; padding: 5px 15px;}
|
2656 |
+
.tvc_licence_key_change_wapper.google-account-analytics .acc-num .tvc_licence_key_change{display: table-cell; vertical-align: middle;}
|
2657 |
+
.tvc_licence_key_change_wapper.google-account-analytics .acc-num .tvc_licence_key{display: table-cell; letter-spacing: 8px;
|
2658 |
+
font-size: 15px; width: calc(100% - 110px); vertical-align: middle; font-weight: 400;}
|
2659 |
+
.tvc_licence_key_change_wapper.google-account-analytics .acc-num .tvc_licence_key_title{vertical-align: middle; display: table-cell;}
|
admin/css/dataTables.bootstrap4.min.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important;border-spacing:0}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:auto;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:.85em}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap;justify-content:flex-end}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable>thead>tr>th:active,table.dataTable>thead>tr>td:active{outline:none}table.dataTable>thead>tr>th:not(.sorting_disabled),table.dataTable>thead>tr>td:not(.sorting_disabled){padding-right:30px}table.dataTable>thead .sorting,table.dataTable>thead .sorting_asc,table.dataTable>thead .sorting_desc,table.dataTable>thead .sorting_asc_disabled,table.dataTable>thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable>thead .sorting:before,table.dataTable>thead .sorting:after,table.dataTable>thead .sorting_asc:before,table.dataTable>thead .sorting_asc:after,table.dataTable>thead .sorting_desc:before,table.dataTable>thead .sorting_desc:after,table.dataTable>thead .sorting_asc_disabled:before,table.dataTable>thead .sorting_asc_disabled:after,table.dataTable>thead .sorting_desc_disabled:before,table.dataTable>thead .sorting_desc_disabled:after{position:absolute;bottom:.9em;display:block;opacity:.3}table.dataTable>thead .sorting:before,table.dataTable>thead .sorting_asc:before,table.dataTable>thead .sorting_desc:before,table.dataTable>thead .sorting_asc_disabled:before,table.dataTable>thead .sorting_desc_disabled:before{right:1em;content:"↑"}table.dataTable>thead .sorting:after,table.dataTable>thead .sorting_asc:after,table.dataTable>thead .sorting_desc:after,table.dataTable>thead .sorting_asc_disabled:after,table.dataTable>thead .sorting_desc_disabled:after{right:.5em;content:"↓"}table.dataTable>thead .sorting_asc:before,table.dataTable>thead .sorting_desc:after{opacity:1}table.dataTable>thead .sorting_asc_disabled:before,table.dataTable>thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:before,div.dataTables_scrollBody table thead .sorting_asc:before,div.dataTables_scrollBody table thead .sorting_desc:before,div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:center !important}}table.dataTable.table-sm>thead>tr>th:not(.sorting_disabled){padding-right:20px}table.dataTable.table-sm .sorting:before,table.dataTable.table-sm .sorting_asc:before,table.dataTable.table-sm .sorting_desc:before{top:5px;right:.85em}table.dataTable.table-sm .sorting:after,table.dataTable.table-sm .sorting_asc:after,table.dataTable.table-sm .sorting_desc:after{top:5px}table.table-bordered.dataTable{border-right-width:0}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:1px}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^=col-]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^=col-]:last-child{padding-right:0}
|
admin/css/enhanced-ecommerce-google-analytics-admin.css
CHANGED
@@ -11,30 +11,7 @@
|
|
11 |
body{
|
12 |
background: #f1f1f1 !important;
|
13 |
}
|
14 |
-
|
15 |
-
font-family: 'Lato', sans-serif;
|
16 |
-
font-size: 16px;
|
17 |
-
}
|
18 |
-
.tvc_plugin_container .tvc_plugin_sidebar, .tvc_plugin_container .right-content ol li{
|
19 |
-
font-size: 14px;
|
20 |
-
}
|
21 |
-
.tvc_plugin_container .right-content p, .tvc_plugin_container .right-content ol{
|
22 |
-
margin-bottom: 0.5rem;
|
23 |
-
}
|
24 |
-
.nav-link.active{
|
25 |
-
color: #fff !important;
|
26 |
-
background-color: #2D73C5 !important;
|
27 |
-
}
|
28 |
-
a.aga-tab{
|
29 |
-
color:#4A4A4A !important;
|
30 |
-
line-height: 2em;
|
31 |
-
}
|
32 |
-
.table td{
|
33 |
-
vertical-align: middle !important;
|
34 |
-
}
|
35 |
-
td{
|
36 |
-
width:8%;
|
37 |
-
}
|
38 |
.popover{
|
39 |
max-width:500px !important;
|
40 |
}
|
@@ -54,9 +31,7 @@ input[type=checkbox]{
|
|
54 |
-ms-transition: all 1.5s ease;
|
55 |
transition: all 1.5s ease;
|
56 |
}
|
57 |
-
|
58 |
-
font-size: 15px;
|
59 |
-
}
|
60 |
input[type=checkbox]:checked::before {
|
61 |
height:16px;
|
62 |
width:16px;
|
@@ -68,35 +43,7 @@ input[type=checkbox]:checked::before {
|
|
68 |
h5{
|
69 |
margin-top: 5px;
|
70 |
}
|
71 |
-
|
72 |
-
.container{
|
73 |
-
margin-left: 8% !important;
|
74 |
-
width:auto;
|
75 |
-
}
|
76 |
-
.banner{
|
77 |
-
width:100%;
|
78 |
-
}
|
79 |
-
.banner-new {
|
80 |
-
background: #253574;
|
81 |
-
margin-left: 10px;
|
82 |
-
padding: 10px;
|
83 |
-
}
|
84 |
-
.banner-new p {
|
85 |
-
color: #fff;
|
86 |
-
text-align: center;
|
87 |
-
font-size: 20px;
|
88 |
-
margin-bottom: 0;
|
89 |
-
}
|
90 |
-
.banner-new a {color: #fff;}
|
91 |
-
.clickhere-txt {vertical-align: middle;display: grid;}
|
92 |
-
.clickhere-txt a{font-size: 12px;text-decoration: underline;}
|
93 |
-
}
|
94 |
-
@media only screen and (min-width: 1920px){
|
95 |
-
.container{
|
96 |
-
margin-left: 6% !important;
|
97 |
-
width:auto;
|
98 |
-
}
|
99 |
-
}
|
100 |
.try-btn{
|
101 |
width: auto;
|
102 |
border: black;
|
@@ -154,44 +101,21 @@ h5{
|
|
154 |
}
|
155 |
.ee-oauth-container{
|
156 |
display: inline-block;
|
157 |
-
width:
|
158 |
max-width: 100%;
|
159 |
padding: 5px;
|
160 |
border: 1px solid #bfbfbf;
|
161 |
-
height:
|
162 |
-
border-radius:
|
163 |
background-color: #fff;
|
164 |
}
|
165 |
.left {
|
166 |
float: left;
|
167 |
}
|
168 |
/* checkbox admin*/
|
169 |
-
.wizard-section .wizard-content .wizard .actions ul li a.next-step, .wizard-section .wizard-content .wizard .actions ul li a.prev-step{
|
170 |
-
color: #fff !important;
|
171 |
-
background-color: #1e7e34 !important;
|
172 |
-
border-color: #1c7430;
|
173 |
-
cursor: pointer;
|
174 |
-
text-decoration: none;
|
175 |
-
display: inline-block;
|
176 |
-
font-weight: 400;
|
177 |
-
color: #212529;
|
178 |
-
text-align: center;
|
179 |
-
vertical-align: middle;
|
180 |
-
-webkit-user-select: none;
|
181 |
-
-moz-user-select: none;
|
182 |
-
-ms-user-select: none;
|
183 |
-
user-select: none;
|
184 |
-
background-color: transparent;
|
185 |
-
border: 1px solid transparent;
|
186 |
-
padding: .375rem .75rem;
|
187 |
-
font-size: 1rem;
|
188 |
-
line-height: 1.5;
|
189 |
-
border-radius: .25rem;
|
190 |
-
transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;
|
191 |
-
}
|
192 |
|
193 |
.tvc_ee_plugin_form .align-middle{margin: 0 auto;}
|
194 |
-
|
195 |
.tvc_ee_plugin_form [type="checkbox"]:not(:checked),
|
196 |
.tvc_ee_plugin_form [type="checkbox"]:checked {
|
197 |
position: absolute;
|
@@ -210,6 +134,8 @@ h5{
|
|
210 |
position: relative;
|
211 |
padding-left: 22px;
|
212 |
cursor: pointer;
|
|
|
|
|
213 |
}
|
214 |
|
215 |
.tvc_ee_plugin_form [type="checkbox"]:not(:checked)+label:before,
|
@@ -218,8 +144,8 @@ h5{
|
|
218 |
position: absolute;
|
219 |
left: 0;
|
220 |
top: 2px;
|
221 |
-
width:
|
222 |
-
height:
|
223 |
background: #fff;
|
224 |
border-radius: 3px;
|
225 |
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .1);
|
@@ -237,7 +163,7 @@ h5{
|
|
237 |
position: absolute;
|
238 |
top: 4px;
|
239 |
left: 2px;
|
240 |
-
font-size:
|
241 |
font-weight: bold;
|
242 |
line-height: 0.8;
|
243 |
color: #fff;
|
@@ -254,25 +180,14 @@ h5{
|
|
254 |
opacity: 1;
|
255 |
transform: scale(1);
|
256 |
}
|
257 |
-
|
258 |
-
.nav-tabs .nav-link.active a{color: #fff; text-decoration: none; }
|
259 |
-
.nav-tabs .nav-link a{text-decoration: none; max-height: 15px; display: inline-block;}
|
260 |
-
.nav-tabs .nav-link.active {
|
261 |
-
z-index: 9;
|
262 |
-
border-radius: 0;
|
263 |
-
}
|
264 |
-
|
265 |
-
.nav-tabs .nav-link{text-align: center;
|
266 |
-
padding: .8rem 0; width: 160px; z-index: 9; border: none;}
|
267 |
|
268 |
-
img.config-success, .nav-tabs li img.config-success, .nav-tabs li img.config-fail{
|
269 |
-
|
270 |
-
margin: 3px;
|
271 |
-
margin-top: 0px;
|
272 |
}
|
273 |
.configuration-section img.config-success, .configuration-section img.config-fail {
|
274 |
width: 16px;
|
275 |
-
margin-left:
|
276 |
margin-top: 1px;
|
277 |
}
|
278 |
.tvc-tooltip {
|
@@ -287,19 +202,20 @@ img.config-success, .nav-tabs li img.config-success, .nav-tabs li img.config-fai
|
|
287 |
z-index: 999;
|
288 |
}
|
289 |
.tvc-tooltip .tvc-tooltiptext {
|
|
|
|
|
290 |
visibility: hidden;
|
291 |
position: absolute;
|
292 |
min-width: 400px;
|
293 |
-
background-color: #
|
294 |
-
border:1px solid #2D73C5;
|
295 |
color: #fff;
|
296 |
text-align: left;
|
297 |
-
padding:
|
298 |
-
border-radius:
|
299 |
-
z-index: 999;
|
300 |
-
|
301 |
transition: opacity .6s;
|
302 |
cursor: auto;
|
|
|
303 |
}
|
304 |
.tvc-tooltip .tvc-tooltiptext a{
|
305 |
color: #fff;
|
@@ -315,33 +231,35 @@ img.config-success, .nav-tabs li img.config-success, .nav-tabs li img.config-fai
|
|
315 |
left: 98%;
|
316 |
}
|
317 |
.configuration-section .tvc-tooltip-right{
|
318 |
-
top: -
|
319 |
left: 102%;
|
320 |
}
|
321 |
.tvc-tooltip.active .tvc-tooltip-right {
|
322 |
-
top: -
|
323 |
left: 103%;
|
324 |
}
|
|
|
|
|
|
|
|
|
325 |
.tvc-tooltip-right::after {
|
326 |
content: "";
|
327 |
position: absolute;
|
328 |
-
top:
|
329 |
right: 100%;
|
|
|
330 |
margin-top: -5px;
|
331 |
border-width: 5px;
|
332 |
border-style: solid;
|
333 |
-
border-color: transparent #
|
334 |
}
|
335 |
-
.tvc-tooltip
|
336 |
-
|
337 |
-
|
338 |
-
top: 100%;
|
339 |
-
left: 50%;
|
340 |
-
margin-left: -5px;
|
341 |
-
border-width: 5px;
|
342 |
-
border-style: solid;
|
343 |
-
border-color: #555 transparent transparent transparent;
|
344 |
}
|
|
|
|
|
|
|
345 |
#ee_plugin_form .align-middle{position: relative;}
|
346 |
|
347 |
|
@@ -432,23 +350,12 @@ button.tvc_animate_btn:hover::after, button.tvc_animate_btn:focus::after {
|
|
432 |
line-height: 22px;
|
433 |
min-height: 30px;
|
434 |
}
|
435 |
-
|
436 |
-
margin-top: 20px;
|
437 |
-
background-color: #fff;
|
438 |
-
position: relative;
|
439 |
-
}
|
440 |
.wp-core-ui .notice.is-dismissible {
|
441 |
padding: 0 1.4rem 0 1rem;
|
442 |
-
|
443 |
-
}
|
444 |
-
#googleShoppingFeed .card{
|
445 |
-
padding: 0.7rem;
|
446 |
}
|
447 |
-
|
448 |
-
.gsf-sec .card .card-footer{padding: 5px !important;}
|
449 |
-
#googleShoppingFeed .card .card-header{padding: 15px 5px;}
|
450 |
-
#googleShoppingFeed .card .card-header .confg-title{font-size: 15px;}
|
451 |
-
.tvc_plugin_container .modal-dialog{ max-width: 650px;}
|
452 |
.change_prodct_feed_cat {text-decoration: underline; transition: all ease 0.5s; color: #03a2b7; margin-left: 10px; cursor: pointer;}
|
453 |
.config-head-active a{ color: #fff !important;}
|
454 |
#staticBackdrop .modal-body, #tvc_google_connect .modal-body{padding: 2rem;}
|
@@ -498,9 +405,11 @@ button.tvc_animate_btn:hover::after, button.tvc_animate_btn:focus::after {
|
|
498 |
color: #1e7e34;
|
499 |
}
|
500 |
.tvc-api-sunc{
|
501 |
-
margin-bottom: 20px;
|
502 |
text-align: right;
|
503 |
}
|
|
|
|
|
|
|
504 |
.tvc-api-sunc span{
|
505 |
color: #03a2b7;
|
506 |
font-weight: 700;
|
@@ -510,22 +419,6 @@ button.tvc_animate_btn:hover::after, button.tvc_animate_btn:focus::after {
|
|
510 |
0% { transform: rotate(0deg); }
|
511 |
100% { transform: rotate(360deg); }
|
512 |
}
|
513 |
-
.tvc-menu-free-plan{ position: absolute;
|
514 |
-
right: 35px;
|
515 |
-
top: 11px;}
|
516 |
-
.tvc-menu-free-plan span {
|
517 |
-
color: #03a2b7;
|
518 |
-
font-size: 14px;
|
519 |
-
font-weight: 700;
|
520 |
-
padding: 7px 16px;
|
521 |
-
height: 100% !important;
|
522 |
-
vertical-align: middle;
|
523 |
-
border-radius: 25px;
|
524 |
-
background-color: #EEEEEE;
|
525 |
-
border-color: #d1d1d1;
|
526 |
-
background-clip: border-box;
|
527 |
-
border: 1px solid rgba(0,0,0,.125);
|
528 |
-
}
|
529 |
|
530 |
/* popup */
|
531 |
.popup-modal.overlay {
|
@@ -543,19 +436,14 @@ button.tvc_animate_btn:hover::after, button.tvc_animate_btn:focus::after {
|
|
543 |
}
|
544 |
.popup-modal .modal-dialog .modal-content{
|
545 |
margin: 20px auto;
|
546 |
-
|
547 |
-
background: #fff;
|
548 |
-
border-radius: 5px;
|
549 |
-
position: relative;
|
550 |
-
transition: all 5s ease-in-out;
|
551 |
-
border: none;}
|
552 |
.popup-modal .modal-dialog .modal-content .close{
|
553 |
position: absolute;
|
554 |
top: 0px;
|
555 |
right: 10px;
|
556 |
transition: all 200ms;
|
557 |
font-size: 30px;
|
558 |
-
|
559 |
text-decoration: none;
|
560 |
}
|
561 |
.popup-modal .tvc-text{
|
@@ -563,6 +451,7 @@ button.tvc_animate_btn:hover::after, button.tvc_animate_btn:focus::after {
|
|
563 |
max-width: 25rem;
|
564 |
width: 100%;
|
565 |
font-size: 14px;
|
|
|
566 |
}
|
567 |
#feed-spinner img{width: 60px;}
|
568 |
/* Popup box BEGIN */
|
@@ -644,19 +533,20 @@ button.tvc_animate_btn:hover::after, button.tvc_animate_btn:focus::after {
|
|
644 |
.tvc-notice-error .call_both_verification-spinner{
|
645 |
right: 5px;top: 10px;margin-left: 0;
|
646 |
}
|
647 |
-
|
|
|
648 |
border-spacing: 0;
|
649 |
width: 100%; border-color: grey; margin-top: 5px;}
|
650 |
|
651 |
-
.product-auto-sync-details table tr {
|
652 |
display: table-row;
|
653 |
vertical-align: inherit;
|
654 |
border-color: inherit;
|
655 |
}
|
656 |
-
.product-auto-sync-details table tr th {
|
657 |
padding-top: 11px;
|
658 |
padding-bottom: 11px;
|
659 |
-
background-color: #
|
660 |
color: white;
|
661 |
border: 1px solid #ddd;
|
662 |
text-align: left;
|
@@ -664,15 +554,114 @@ button.tvc_animate_btn:hover::after, button.tvc_animate_btn:focus::after {
|
|
664 |
display: table-cell;
|
665 |
vertical-align: inherit;
|
666 |
font-weight: bold;
|
667 |
-
text-align: center;
|
668 |
-
font-size: 15px;
|
669 |
}
|
670 |
-
.product-auto-sync-details table tr td {
|
671 |
display: table-cell;
|
672 |
vertical-align: inherit;
|
673 |
border: 1px solid #ddd;
|
674 |
text-align: left;
|
675 |
padding: 8px 3px;
|
676 |
-
text-align: center;
|
677 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
678 |
}
|
11 |
body{
|
12 |
background: #f1f1f1 !important;
|
13 |
}
|
14 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
.popover{
|
16 |
max-width:500px !important;
|
17 |
}
|
31 |
-ms-transition: all 1.5s ease;
|
32 |
transition: all 1.5s ease;
|
33 |
}
|
34 |
+
|
|
|
|
|
35 |
input[type=checkbox]:checked::before {
|
36 |
height:16px;
|
37 |
width:16px;
|
43 |
h5{
|
44 |
margin-top: 5px;
|
45 |
}
|
46 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
.try-btn{
|
48 |
width: auto;
|
49 |
border: black;
|
101 |
}
|
102 |
.ee-oauth-container{
|
103 |
display: inline-block;
|
104 |
+
width: 200px;
|
105 |
max-width: 100%;
|
106 |
padding: 5px;
|
107 |
border: 1px solid #bfbfbf;
|
108 |
+
height: 40px;
|
109 |
+
border-radius: 30px;
|
110 |
background-color: #fff;
|
111 |
}
|
112 |
.left {
|
113 |
float: left;
|
114 |
}
|
115 |
/* checkbox admin*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
116 |
|
117 |
.tvc_ee_plugin_form .align-middle{margin: 0 auto;}
|
118 |
+
/*.tvc_ee_plugin_form .align-middle label, label.tvc-custom-control-input{margin: 0 auto; font-size: 15px;} */
|
119 |
.tvc_ee_plugin_form [type="checkbox"]:not(:checked),
|
120 |
.tvc_ee_plugin_form [type="checkbox"]:checked {
|
121 |
position: absolute;
|
134 |
position: relative;
|
135 |
padding-left: 22px;
|
136 |
cursor: pointer;
|
137 |
+
color: #5E5E5E;
|
138 |
+
font-size: 14px;
|
139 |
}
|
140 |
|
141 |
.tvc_ee_plugin_form [type="checkbox"]:not(:checked)+label:before,
|
144 |
position: absolute;
|
145 |
left: 0;
|
146 |
top: 2px;
|
147 |
+
width: 15px;
|
148 |
+
height: 15px;
|
149 |
background: #fff;
|
150 |
border-radius: 3px;
|
151 |
box-shadow: inset 0 1px 3px rgba(0, 0, 0, .1);
|
163 |
position: absolute;
|
164 |
top: 4px;
|
165 |
left: 2px;
|
166 |
+
font-size: 13px;
|
167 |
font-weight: bold;
|
168 |
line-height: 0.8;
|
169 |
color: #fff;
|
180 |
opacity: 1;
|
181 |
transform: scale(1);
|
182 |
}
|
183 |
+
#ee_plugin_form table th{padding: .75em 0; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
184 |
|
185 |
+
img.config-success, .nav-tabs li img.config-success, img.config-fail ,.nav-tabs li img.config-fail{
|
186 |
+
width: 14px; margin-right: 2px;
|
|
|
|
|
187 |
}
|
188 |
.configuration-section img.config-success, .configuration-section img.config-fail {
|
189 |
width: 16px;
|
190 |
+
margin-left: 3px;
|
191 |
margin-top: 1px;
|
192 |
}
|
193 |
.tvc-tooltip {
|
202 |
z-index: 999;
|
203 |
}
|
204 |
.tvc-tooltip .tvc-tooltiptext {
|
205 |
+
font-weight: normal;
|
206 |
+
font-size: 14px;
|
207 |
visibility: hidden;
|
208 |
position: absolute;
|
209 |
min-width: 400px;
|
210 |
+
background-color: #000338;
|
|
|
211 |
color: #fff;
|
212 |
text-align: left;
|
213 |
+
padding: 5px 6px;
|
214 |
+
border-radius: 15px 50px 30px 5px;
|
215 |
+
z-index: 999;
|
|
|
216 |
transition: opacity .6s;
|
217 |
cursor: auto;
|
218 |
+
|
219 |
}
|
220 |
.tvc-tooltip .tvc-tooltiptext a{
|
221 |
color: #fff;
|
231 |
left: 98%;
|
232 |
}
|
233 |
.configuration-section .tvc-tooltip-right{
|
234 |
+
top: -32px;
|
235 |
left: 102%;
|
236 |
}
|
237 |
.tvc-tooltip.active .tvc-tooltip-right {
|
238 |
+
top: -32px;
|
239 |
left: 103%;
|
240 |
}
|
241 |
+
.edit-tabs li:last-child .tvc-tooltip-right {
|
242 |
+
top: -32px;
|
243 |
+
left: 100%;
|
244 |
+
}
|
245 |
.tvc-tooltip-right::after {
|
246 |
content: "";
|
247 |
position: absolute;
|
248 |
+
top: 83%;
|
249 |
right: 100%;
|
250 |
+
|
251 |
margin-top: -5px;
|
252 |
border-width: 5px;
|
253 |
border-style: solid;
|
254 |
+
border-color: transparent #000338 transparent transparent;
|
255 |
}
|
256 |
+
#syncProduct.popup-modal .tvc-tooltip{ position: absolute;
|
257 |
+
display: inline-block;
|
258 |
+
width: auto; top: -5px; margin-left: 2px;
|
|
|
|
|
|
|
|
|
|
|
|
|
259 |
}
|
260 |
+
#syncProduct.popup-modal .tvc-tooltip .tvc-tooltip-right{ bottom: 6px;
|
261 |
+
left: 125%; min-width: 285px; top: auto;}
|
262 |
+
|
263 |
#ee_plugin_form .align-middle{position: relative;}
|
264 |
|
265 |
|
350 |
line-height: 22px;
|
351 |
min-height: 30px;
|
352 |
}
|
353 |
+
|
|
|
|
|
|
|
|
|
354 |
.wp-core-ui .notice.is-dismissible {
|
355 |
padding: 0 1.4rem 0 1rem;
|
356 |
+
margin: 10px 14px 0 2px;
|
|
|
|
|
|
|
357 |
}
|
358 |
+
.tvc_plugin_container .modal-dialog{ max-width: 700px;}
|
|
|
|
|
|
|
|
|
359 |
.change_prodct_feed_cat {text-decoration: underline; transition: all ease 0.5s; color: #03a2b7; margin-left: 10px; cursor: pointer;}
|
360 |
.config-head-active a{ color: #fff !important;}
|
361 |
#staticBackdrop .modal-body, #tvc_google_connect .modal-body{padding: 2rem;}
|
405 |
color: #1e7e34;
|
406 |
}
|
407 |
.tvc-api-sunc{
|
|
|
408 |
text-align: right;
|
409 |
}
|
410 |
+
#googleShoppingFeed .tvc-api-sunc{
|
411 |
+
margin-bottom: 5px;
|
412 |
+
}
|
413 |
.tvc-api-sunc span{
|
414 |
color: #03a2b7;
|
415 |
font-weight: 700;
|
419 |
0% { transform: rotate(0deg); }
|
420 |
100% { transform: rotate(360deg); }
|
421 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
422 |
|
423 |
/* popup */
|
424 |
.popup-modal.overlay {
|
436 |
}
|
437 |
.popup-modal .modal-dialog .modal-content{
|
438 |
margin: 20px auto;
|
439 |
+
}
|
|
|
|
|
|
|
|
|
|
|
440 |
.popup-modal .modal-dialog .modal-content .close{
|
441 |
position: absolute;
|
442 |
top: 0px;
|
443 |
right: 10px;
|
444 |
transition: all 200ms;
|
445 |
font-size: 30px;
|
446 |
+
|
447 |
text-decoration: none;
|
448 |
}
|
449 |
.popup-modal .tvc-text{
|
451 |
max-width: 25rem;
|
452 |
width: 100%;
|
453 |
font-size: 14px;
|
454 |
+
border-radius: 15px;
|
455 |
}
|
456 |
#feed-spinner img{width: 60px;}
|
457 |
/* Popup box BEGIN */
|
533 |
.tvc-notice-error .call_both_verification-spinner{
|
534 |
right: 5px;top: 10px;margin-left: 0;
|
535 |
}
|
536 |
+
|
537 |
+
.tvc-table table, .product-auto-sync-details table { border-collapse: collapse;
|
538 |
border-spacing: 0;
|
539 |
width: 100%; border-color: grey; margin-top: 5px;}
|
540 |
|
541 |
+
.tvc-table table tr, .product-auto-sync-details table tr {
|
542 |
display: table-row;
|
543 |
vertical-align: inherit;
|
544 |
border-color: inherit;
|
545 |
}
|
546 |
+
.tvc-table table tr th, .product-auto-sync-details table tr th {
|
547 |
padding-top: 11px;
|
548 |
padding-bottom: 11px;
|
549 |
+
background-color: #000338;
|
550 |
color: white;
|
551 |
border: 1px solid #ddd;
|
552 |
text-align: left;
|
554 |
display: table-cell;
|
555 |
vertical-align: inherit;
|
556 |
font-weight: bold;
|
557 |
+
text-align: center;
|
|
|
558 |
}
|
559 |
+
.tvc-table table tr td, .product-auto-sync-details table tr td {
|
560 |
display: table-cell;
|
561 |
vertical-align: inherit;
|
562 |
border: 1px solid #ddd;
|
563 |
text-align: left;
|
564 |
padding: 8px 3px;
|
565 |
+
text-align: center;
|
566 |
+
}
|
567 |
+
#tvc-account-page .tvc-table table tr th{padding: 14px; width: 25%;
|
568 |
+
text-align: left;
|
569 |
+
}
|
570 |
+
#tvc-account-page .tvc-table{margin-top:30px; }
|
571 |
+
#productSync .shop-category{text-align: right;}
|
572 |
+
|
573 |
+
.tvc_plugin_container .notice, div.error, div.updated {margin: 0;}
|
574 |
+
.select2-container--default .select2-selection--single .select2-selection__arrow b{top: 35%; border: solid #2f3d4a !important; border-width: 0 2px 2px 0 !important;}
|
575 |
+
.tvc-notification{position: relative;}
|
576 |
+
.tvc-notification-dropdown-menu{
|
577 |
+
width: 420px;
|
578 |
+
right: 0;
|
579 |
+
left: auto;
|
580 |
+
background: #F1F1F1;
|
581 |
+
|
582 |
+
}
|
583 |
+
.tvc-notification .tvc-msg.plain{ position: relative;
|
584 |
+
color: #757575;
|
585 |
+
background: #fff;
|
586 |
+
border-radius: 2px;
|
587 |
+
font-size: 13px;
|
588 |
+
font-size: .8125rem;
|
589 |
+
margin: 7px; padding: 0px 10px;}
|
590 |
+
/*.tvc-notification li:last-child .tvc-msg.plain,*/
|
591 |
+
.tvc-notification li:last-child{margin-bottom: 0;}
|
592 |
+
.tvc-notification .tvc-msg_title{color: #1e1e1e;
|
593 |
+
font-size: 16px;
|
594 |
+
font-size: 1rem;
|
595 |
+
font-style: normal;
|
596 |
+
line-height: 1.5;
|
597 |
+
font-weight: 700;
|
598 |
+
margin: 3px 0;}
|
599 |
+
.tvc-notification .tvc-dropdown{display: inline;}
|
600 |
+
.tvc-notification .tvc-msg_content {padding: 10px 0;}
|
601 |
+
.tvc-notification .tvc-msg_actions{border-top: 1px solid #e0e0e0; padding: 10px 0;}
|
602 |
+
.tvc-notification .tvc-notification-button{display: inline-flex; border-radius: 15px; text-decoration: none; align-items: center; border: 0; padding: 6px 12px;}
|
603 |
+
.tvc-notification .tvc-notification-button.is-tertiary{ white-space: nowrap; color: #007cba; background: transparent; outline: 1px solid transparent;}
|
604 |
+
.tvc-notification .tvc-notification-button.is-secondary{
|
605 |
+
box-shadow: inset 0 0 0 1px #007cba;
|
606 |
+
outline: 1px solid transparent;}
|
607 |
+
.tvc-notification .dropdown-menu{padding: 0; margin-top: 10px; border: 0.5px solid #A9A9A9;}
|
608 |
+
.tvc-notification .dropdown-menu:before {
|
609 |
+
content: "";
|
610 |
+
position: absolute;
|
611 |
+
top: 0;
|
612 |
+
right: 0;
|
613 |
+
width: 0;
|
614 |
+
height: 0;
|
615 |
+
transform: translate(-1rem, -100%);
|
616 |
+
border-left: 0.75rem solid transparent;
|
617 |
+
border-right: 0.75rem solid transparent;
|
618 |
+
border-bottom: 0.75rem solid #A9A9A9;
|
619 |
+
}
|
620 |
+
#sync-product #tvc-sync-product-list_wrapper{padding: 10px 0;}
|
621 |
+
#sync-product table.dataTable{margin-top: 0px !important;}
|
622 |
+
#tvc-sync-product-list_paginate{ margin-top: 10px;}
|
623 |
+
/*#sync-product table tbody{display: table-caption;}*/
|
624 |
+
.tvc-help-slider .slick-slide::-webkit-scrollbar-track, .tvc-b-value-slider .slick-slide::-webkit-scrollbar-track, #sync-product .dataTables_scrollBody::-webkit-scrollbar-track {
|
625 |
+
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
|
626 |
+
background-color: #F5F5F5;
|
627 |
+
border-radius: 10px;
|
628 |
+
}
|
629 |
+
|
630 |
+
.tvc-help-slider .slick-slide::-webkit-scrollbar, .tvc-b-value-slider .slick-slide::-webkit-scrollbar, #sync-product .dataTables_scrollBody::-webkit-scrollbar {
|
631 |
+
width: 8px;
|
632 |
+
background-color: #F5F5F5;
|
633 |
+
}
|
634 |
+
|
635 |
+
.tvc-help-slider .slick-slide::-webkit-scrollbar-thumb, .tvc-b-value-slider .slick-slide::-webkit-scrollbar-thumb, #sync-product .dataTables_scrollBody::-webkit-scrollbar-thumb {
|
636 |
+
background-color: #777;
|
637 |
+
border-radius: 10px;
|
638 |
+
}
|
639 |
+
#sync-product .dataTables_length label{margin: 0;}
|
640 |
+
#sync-product div.dataTables_filter input{border-radius: 15px;}
|
641 |
+
.tvc-licence .input-group .form-control{height: 40px; letter-spacing: 8px; font-size: 18px;}
|
642 |
+
button#ee_submit_plugin, button#google-add{ min-width: 80px;}
|
643 |
+
.ga-text span{font-weight:normal;}
|
644 |
+
.tvc-help-slider, .tvc-b-value-slider{
|
645 |
+
height: 120px;
|
646 |
+
padding: 0;
|
647 |
+
}
|
648 |
+
.slick-slide{
|
649 |
+
overflow-y: auto;
|
650 |
+
height: 120px;
|
651 |
+
}
|
652 |
+
.tvc-footer-links{text-align: center;}
|
653 |
+
.tvc-footer-links a{text-decoration: underline; margin-left: 5px; margin-right: 5px;}
|
654 |
+
.right-content .content-section .slick-slide img{display: inline-block;
|
655 |
+
margin: 0 3px;}
|
656 |
+
ul.nav.nav-pills.nav-justified{position: relative;}
|
657 |
+
.tvc-help-need{position: absolute; right: 15px; bottom: 15px;}
|
658 |
+
.tvc_plugin_container .container{ padding-left: 2px;}
|
659 |
+
.tvc_plugin_container{margin-top: 10px;}
|
660 |
+
|
661 |
+
img{
|
662 |
+
image-rendering: -moz-crisp-edges;
|
663 |
+
image-rendering: -o-crisp-edges;
|
664 |
+
image-rendering: -webkit-optimize-contrast;
|
665 |
+
image-rendering: crisp-edges;
|
666 |
+
-ms-interpolation-mode: nearest-neighbor;
|
667 |
}
|
admin/images/banner.png
DELETED
Binary file
|
admin/images/cotlw.gif
DELETED
Binary file
|
admin/images/icon/add.svg
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs" version="1.1" width="14.907" height="14.907" x="0" y="0" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512" xml:space="preserve" class=""><g transform="matrix(1,0,0,1,0,0)">
|
3 |
+
<linearGradient xmlns="http://www.w3.org/2000/svg" id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="0" y1="258" x2="512" y2="512" gradientTransform="matrix(1 0 0 -1 0 514)"><stop stop-opacity="1" stop-color="#42445a" offset="0"/><stop stop-opacity="1" stop-color="#0872fc" offset="1"/></linearGradient>
|
4 |
+
<path xmlns="http://www.w3.org/2000/svg" style="fill:url(#SVGID_1_);" d="M512,256c0,141.503-114.517,256-256,256C114.497,512,0,397.483,0,256c0-11.046,8.954-20,20-20 s20,8.954,20,20c0,119.392,96.622,216,216,216c119.392,0,216-96.622,216-216c0-119.392-96.622-216-216-216c-11.046,0-20-8.954-20-20 s8.954-20,20-20C397.503,0,512,114.517,512,256z M160.406,61.8l25.869-10.716c10.204-4.228,15.051-15.927,10.823-26.132 s-15.926-15.054-26.132-10.823l-25.869,10.716c-10.204,4.228-15.051,15.927-10.823,26.132 C138.488,61.148,150.168,66.038,160.406,61.8z M93.366,113.165l19.799-19.799c7.811-7.811,7.811-20.475,0-28.285 s-20.475-7.811-28.285,0L65.081,84.88c-7.811,7.811-7.811,20.475,0,28.285C72.89,120.974,85.555,120.976,93.366,113.165z M24.952,197.099c10.227,4.236,21.914-0.642,26.132-10.823l10.716-25.87c4.228-10.205-0.619-21.904-10.823-26.132 c-10.207-4.227-21.904,0.619-26.132,10.823l-10.716,25.869C9.901,181.172,14.748,192.871,24.952,197.099z M256,156 c-11.046,0-20,8.954-20,20v60h-60c-11.046,0-20,8.954-20,20c0,11.046,8.954,20,20,20h60v60c0,11.046,8.954,20,20,20 c11.046,0,20-8.954,20-20v-60h60c11.046,0,20-8.954,20-20s-8.954-20-20-20h-60v-60C276,164.954,267.046,156,256,156z" fill=""/>
|
5 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
6 |
+
</g>
|
7 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
8 |
+
</g>
|
9 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
10 |
+
</g>
|
11 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
12 |
+
</g>
|
13 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
14 |
+
</g>
|
15 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
16 |
+
</g>
|
17 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
18 |
+
</g>
|
19 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
20 |
+
</g>
|
21 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
22 |
+
</g>
|
23 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
24 |
+
</g>
|
25 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
26 |
+
</g>
|
27 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
28 |
+
</g>
|
29 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
30 |
+
</g>
|
31 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
32 |
+
</g>
|
33 |
+
<g xmlns="http://www.w3.org/2000/svg">
|
34 |
+
</g>
|
35 |
+
</g></svg>
|
admin/images/icon/arrow-down-sign-to-navigate.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="10.915" height="6.222" viewBox="0 0 10.915 6.222"><defs><style>.a{fill:#25283d;}</style></defs><g transform="translate(-0.001 -97.141)"><path class="a" d="M5.458,103.362a.762.762,0,0,1-.54-.224L.225,98.445a.764.764,0,0,1,1.081-1.081l4.153,4.153,4.153-4.153a.764.764,0,1,1,1.081,1.081L6,103.139A.762.762,0,0,1,5.458,103.362Z" transform="translate(0 0)"/></g></svg>
|
admin/images/icon/information.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 25 25"><defs><style>.a{fill:#25283d;}</style></defs><circle class="a" cx="1.221" cy="1.221" r="1.221" transform="translate(11.279 17.261)"/><path class="a" d="M12.5,0A12.5,12.5,0,1,0,25,12.5,12.493,12.493,0,0,0,12.5,0Zm0,23.047A10.547,10.547,0,1,1,23.047,12.5,10.541,10.541,0,0,1,12.5,23.047Z"/><path class="a" d="M179.906,128.5A3.911,3.911,0,0,0,176,132.406a.977.977,0,0,0,1.953,0,1.953,1.953,0,1,1,1.953,1.953.977.977,0,0,0-.977.977v2.441a.977.977,0,0,0,1.953,0v-1.588a3.907,3.907,0,0,0-.977-7.689Z" transform="translate(-167.406 -122.226)"/></svg>
|
admin/images/icon/informationI.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="13.164" height="13.164" viewBox="0 0 13.164 13.164"><defs><style>.a{fill:#5e5e5e;}</style></defs><path class="a" d="M6.582,0a6.582,6.582,0,1,0,6.582,6.582A6.59,6.59,0,0,0,6.582,0Zm0,11.967a5.385,5.385,0,1,1,5.385-5.385A5.391,5.391,0,0,1,6.582,11.967Z"/><path class="a" d="M145.8,70a.8.8,0,1,0,.8.8A.8.8,0,0,0,145.8,70Z" transform="translate(-139.218 -67.208)"/><path class="a" d="M150.6,140a.6.6,0,0,0-.6.6v3.59a.6.6,0,1,0,1.2,0V140.6A.6.6,0,0,0,150.6,140Z" transform="translate(-144.016 -134.415)"/></svg>
|
admin/images/icon/lamp.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="31.266" height="31.266" viewBox="0 0 31.266 31.266"><defs><style>.a{fill:#25283d;stroke:#25283d;stroke-width:0.5px;}</style></defs><g transform="translate(0.25 0.25)"><g transform="translate(6.41 6.41)"><path class="a" d="M15.9,29.357H12.051a2.081,2.081,0,0,1-1.923-2.307V24.357a4.452,4.452,0,0,0-1.666-3.333A8.861,8.861,0,0,1,5,13.845,9.123,9.123,0,0,1,13.845,5a9.009,9.009,0,0,1,6.41,2.564,9.126,9.126,0,0,1,2.692,6.41A8.621,8.621,0,0,1,19.614,20.9a4.681,4.681,0,0,0-1.795,3.589v2.948A1.972,1.972,0,0,1,15.9,29.357ZM13.973,6.282a7.862,7.862,0,0,0-7.692,7.563A7.535,7.535,0,0,0,9.23,20a5.586,5.586,0,0,1,2.179,4.359v2.692c0,.256,0,1.026.641,1.026H15.9a.606.606,0,0,0,.641-.641V24.485a6.23,6.23,0,0,1,2.307-4.615,7.475,7.475,0,0,0,2.82-5.9,7.663,7.663,0,0,0-2.307-5.512,7.556,7.556,0,0,0-5.384-2.179Z" transform="translate(-5 -5)"/></g><g transform="translate(11.537 25.638)"><path class="a" d="M16.051,21.282H9.641a.641.641,0,1,1,0-1.282h6.41a.641.641,0,1,1,0,1.282Z" transform="translate(-9 -20)"/></g><g transform="translate(14.742)"><path class="a" d="M12.141,3.846A.606.606,0,0,1,11.5,3.2V.641a.641.641,0,0,1,1.282,0V3.2A.606.606,0,0,1,12.141,3.846Z" transform="translate(-11.5)"/></g><g transform="translate(23.267 4.423)"><path class="a" d="M18.855,6.463a.771.771,0,0,1-.513-.128.62.62,0,0,1,0-.9l1.795-1.795a.635.635,0,0,1,.9.9L19.24,6.334A1.291,1.291,0,0,1,18.855,6.463Z" transform="translate(-18.15 -3.45)"/></g><g transform="translate(26.92 14.742)"><path class="a" d="M24.2,12.782H21.641a.641.641,0,0,1,0-1.282H24.2a.641.641,0,1,1,0,1.282Z" transform="translate(-21 -11.5)"/></g><g transform="translate(23.267 23.395)"><path class="a" d="M20.65,21.263a.771.771,0,0,1-.513-.128L18.342,19.34a.635.635,0,0,1,.9-.9l1.795,1.795a.62.62,0,0,1,0,.9c0,.128-.128.128-.385.128Z" transform="translate(-18.15 -18.25)"/></g><g transform="translate(4.294 23.395)"><path class="a" d="M4.055,21.263a.771.771,0,0,1-.513-.128.62.62,0,0,1,0-.9l1.795-1.795a.635.635,0,1,1,.9.9L4.44,21.134a.471.471,0,0,1-.385.128Z" transform="translate(-3.35 -18.25)"/></g><g transform="translate(0 14.742)"><path class="a" d="M3.2,12.782H.641a.641.641,0,0,1,0-1.282H3.2a.641.641,0,0,1,0,1.282Z" transform="translate(0 -11.5)"/></g><g transform="translate(4.294 4.294)"><path class="a" d="M5.85,6.491a.771.771,0,0,1-.513-.128L3.542,4.44a.635.635,0,0,1,.9-.9L6.234,5.337a.62.62,0,0,1,0,.9c-.128.128-.256.256-.385.256Z" transform="translate(-3.35 -3.35)"/></g><g transform="translate(14.742 9.614)"><path class="a" d="M17.269,13.91a.606.606,0,0,1-.641-.641,4.542,4.542,0,0,0-4.487-4.487.641.641,0,0,1,0-1.282,5.745,5.745,0,0,1,5.769,5.769A.606.606,0,0,1,17.269,13.91Z" transform="translate(-11.5 -7.5)"/></g></g></svg>
|
admin/images/icon/left-angle-arrow.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="6.929" height="11.029" viewBox="0 0 6.929 11.029"><defs><style>.a{fill:none;stroke:#5e5e5e;stroke-linecap:round;stroke-width:2px;}</style></defs><g transform="translate(1.414 1.414)"><g transform="translate(0 4.1)"><line class="a" x1="4.1" y1="4.1"/></g><line class="a" x1="4.1" y2="4.1" transform="translate(0)"/></g></svg>
|
admin/images/icon/notification.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="19.459" height="22.14" viewBox="0 0 19.459 22.14"><g transform="translate(-30.999)"><path d="M47.431,11.367V9.3a6.714,6.714,0,0,0-4.757-6.414V1.946a1.946,1.946,0,0,0-3.892,0v.937A6.714,6.714,0,0,0,34.026,9.3v2.07a10.185,10.185,0,0,1-2.846,7.081.649.649,0,0,0,.468,1.1h5.9a3.243,3.243,0,0,0,6.356,0h5.9a.649.649,0,0,0,.468-1.1A10.185,10.185,0,0,1,47.431,11.367ZM40.08,1.946a.649.649,0,0,1,1.3,0v.68c-.213-.021-.43-.031-.649-.031s-.435.011-.649.031Zm.649,18.9a1.949,1.949,0,0,1-1.834-1.3h3.669A1.949,1.949,0,0,1,40.728,20.843Zm-7.683-2.595a11.468,11.468,0,0,0,2.278-6.881V9.3a5.405,5.405,0,0,1,10.811,0v2.07a11.468,11.468,0,0,0,2.278,6.881Z"/></g></svg>
|
admin/images/icon/refresh.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="14.907" height="14.907" viewBox="0 0 14.907 14.907"><defs><style>.a{fill:#0872fc;}</style></defs><g transform="translate(0 0)"><path class="a" d="M1.79,8.141a5.9,5.9,0,0,1-.044-.687,5.683,5.683,0,0,1,9.535-4.2l-.5.512a.447.447,0,0,0-.114.437A.457.457,0,0,0,11,4.5c.088.018,2.976.948,2.792.911a.442.442,0,0,0,.515-.515c-.018-.088-.657-3.3-.62-3.112a.433.433,0,0,0-.734-.218l-.428.419A7.458,7.458,0,0,0,0,7.453v.017c0,.246.011.436.024.582a.437.437,0,0,0,.349.389l.9.179a.437.437,0,0,0,.519-.48Zm0,0"/><path class="a" d="M34.385,215.613l-.9-.183a.437.437,0,0,0-.521.481,5.945,5.945,0,0,1,.045.692,5.676,5.676,0,0,1-9.535,4.193l.5-.5a.447.447,0,0,0,.114-.437.457.457,0,0,0-.332-.3c-.088-.018-2.976-.948-2.792-.911a.428.428,0,0,0-.393.122.435.435,0,0,0-.122.393l.62,3.083a.437.437,0,0,0,.306.332.42.42,0,0,0,.428-.113l.419-.419A7.442,7.442,0,0,0,34.757,216.6v-.026c0-.194-.007-.384-.023-.572a.437.437,0,0,0-.348-.39Zm0,0" transform="translate(-19.85 -209.149)"/></g></svg>
|
admin/images/icon/right-arrow.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="21.717" height="18.067" viewBox="0 0 21.717 18.067"><defs><style>.a{fill:#fff;}</style></defs><g transform="translate(1.507 -40.092)"><g transform="translate(-1.507 40.092)"><path class="a" d="M21.37,49.536l-7.843-7.843a1.192,1.192,0,0,0-1.681,0l-.712.712a1.18,1.18,0,0,0-.347.84,1.2,1.2,0,0,0,.347.85l4.575,4.585H1.173A1.16,1.16,0,0,0,0,49.85v1.007a1.2,1.2,0,0,0,1.173,1.22H15.761l-4.627,4.611a1.177,1.177,0,0,0,0,1.669l.712.71a1.192,1.192,0,0,0,1.681,0l7.843-7.843a1.2,1.2,0,0,0,0-1.687Z" transform="translate(0 -41.346)"/></g></g></svg>
|
admin/images/icon/tick-round.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="41" height="41" viewBox="0 0 41 41"><defs><style>.a{fill:#66bb6a;}.b{fill:#fff;stroke:#fff;}</style></defs><g transform="translate(-1199 -247)"><circle class="a" cx="20.5" cy="20.5" r="20.5" transform="translate(1199 247)"/><g transform="translate(1205.572 257.288)"><g transform="translate(0 0)"><path class="b" d="M26.263,68.388a1.333,1.333,0,0,0-1.885,0L8.412,84.355,2.275,78.217A1.333,1.333,0,1,0,.39,80.1l7.08,7.08a1.333,1.333,0,0,0,1.885,0L26.263,70.273A1.333,1.333,0,0,0,26.263,68.388Z" transform="translate(0 -67.997)"/></g></g></g></svg>
|
admin/images/icon/undraw_update_uxn2.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="248.265" height="151.87" viewBox="0 0 248.265 151.87"><defs><style>.a,.j{fill:#0872fc;}.a,.b,.f,.g{opacity:0.1;}.b,.e{fill:#03d7fd;}.c{fill:url(#a);}.d{fill:#fbbebe;}.h{fill:#3f3d56;}.i{fill:#ff007c;}.k{fill:#434175;}</style><linearGradient id="a" x1="27.757" y1="1" x2="27.757" y2="0.003" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="gray" stop-opacity="0.251"/><stop offset="0.54" stop-color="gray" stop-opacity="0.122"/><stop offset="1" stop-color="gray" stop-opacity="0.102"/></linearGradient></defs><path class="a" d="M642.879,316.847a6.872,6.872,0,0,0-3.988.435,5.876,5.876,0,0,1-4.811-.021,6.72,6.72,0,0,0-5.631.109,3.481,3.481,0,0,1-1.622.407c-2.283,0-4.183-2.3-4.578-5.334a4.42,4.42,0,0,0,1.141-1.232,6.412,6.412,0,0,1,11.448-.038,4.406,4.406,0,0,0,3.8,2.083h.06C640.527,313.265,642.1,314.723,642.879,316.847Z" transform="translate(-492.827 -265.582)"/><path class="b" d="M649.869,280.2l-3.691,2.342,2.24-4.076a3.662,3.662,0,0,0-2.233-.8h-.059a4.317,4.317,0,0,1-.766-.055l-1.246.792.537-.975a4.442,4.442,0,0,1-2.188-1.665l-2.24,1.427,1.427-2.571a6.556,6.556,0,0,0-5.015-2.537,6.877,6.877,0,0,0-5.74,3.543,4.28,4.28,0,0,1-3.8,2.045h-.126c-2.571,0-4.654,2.915-4.654,6.509s2.083,6.509,4.654,6.509a3.5,3.5,0,0,0,1.622-.4,6.711,6.711,0,0,1,5.631-.112,5.876,5.876,0,0,0,4.789.012,6.727,6.727,0,0,1,5.584.107,3.484,3.484,0,0,0,1.6.4c2.571,0,4.654-2.913,4.654-6.509a8.266,8.266,0,0,0-.977-3.983Z" transform="translate(-492.872 -238.462)"/><path class="c" d="M568.4,302.824c.145-.021.29-.05.433-.086a1.362,1.362,0,0,1-.121.414,1.781,1.781,0,0,1-.675.594.207.207,0,0,0-.262-.017c-.307.181-.552.447-.877.6-.114.057-.238.1-.345.164a1.887,1.887,0,0,0-.642.668.476.476,0,0,0-.076.476.385.385,0,0,0,.131.117.759.759,0,0,0,.452.136,1.693,1.693,0,0,0,.285-.059c.1-.017.257,0,.385-.024a2.167,2.167,0,0,0,.542-.14l.635-.221a3.492,3.492,0,0,0,.526-.216c.1-.052.195-.117.3-.166a2.352,2.352,0,0,1,.357-.126l.361-.107a.388.388,0,0,1,.164-.021c.05,0,.093.04.143.055a.426.426,0,0,0,.238-.021l.421-.121a.792.792,0,0,0,.25-.1.766.766,0,0,0,.224-.644,4.888,4.888,0,0,0-.124-1.068.338.338,0,0,0-.135.1c-.043-.062-.093-.119-.138-.174a2.065,2.065,0,0,1-.419-.77,1.378,1.378,0,0,0,.376-.419,9.2,9.2,0,0,0-.9-2.449c-.147-.238-.316-.476-.476-.713-.438-.694-.528-1.572-1.027-2.221a.385.385,0,0,1,0-.454c.057-.074.15-.147.131-.238s-.081-.131-.055-.193.043-.048.069-.071c.083-.078.074-.214.081-.331a1.632,1.632,0,0,1,.364-.792.459.459,0,0,1,.133-.145c.045-.029.1-.04.143-.069.162-.1.15-.335.226-.509.1-.238.352-.347.518-.533.209-.238.262-.568.476-.775a.593.593,0,0,1,.071-.059,3.784,3.784,0,0,0-.128,1.084c-.021,1.253.288,2.552.143,3.8a2.623,2.623,0,0,0,1.344,2.466,6.42,6.42,0,0,0,1.046.445c.537.193,1.07.39,1.6.609q.556.238,1.1.5a14.107,14.107,0,0,1,1.3.725,5,5,0,0,1,1.4,1.16,1.119,1.119,0,0,0,.618-.238c.14.112.312.2.445.319a1.356,1.356,0,0,1,.35.692h-.055l.019.371a.157.157,0,0,1-.014.093.183.183,0,0,1-.05.045l-.285.193c-.207.14-.435.316-.447.568a.283.283,0,0,0,.062.2.44.44,0,0,0,.254.114,4.44,4.44,0,0,0,1.508.138.989.989,0,0,0,.642-.295,1.265,1.265,0,0,0,.238-.616c.062-.373.114-.749.155-1.127a2.473,2.473,0,0,1,.152-.747.088.088,0,0,1,.04-.05h.069a.1.1,0,0,0,.045-.071,4.565,4.565,0,0,0,.133-1.12.784.784,0,0,0-.045-.288.575.575,0,0,0-.4-.307,3.062,3.062,0,0,0-.511-.059,2.322,2.322,0,0,1-.426-.081.409.409,0,0,0-.176-.021.126.126,0,0,0-.109.124.143.143,0,0,0,.024.059l-.145-.029c-.117-.021-.283-.074-.454-.114v-.09a.178.178,0,0,0-.1-.159l-2.447-1.308-.459-.238c-1-.537-2.04-1.032-3.044-1.569-.069.021-.124-.057-.143-.124s-.033-.152-.1-.181-.074-.017-.1-.043a.1.1,0,0,1-.017-.081c.033-.49.383-.939.312-1.427a1.723,1.723,0,0,1-.088-.614,2.517,2.517,0,0,1,.186-.388c.119-.3,0-.656.131-.951a2.234,2.234,0,0,0,.178-.6,4.136,4.136,0,0,1,.373-1.189,2.117,2.117,0,0,1,.345-.526c.074-.081.157-.152.226-.238a1.929,1.929,0,0,0,.352-.92,4.421,4.421,0,0,0,.05-1.8,2.551,2.551,0,0,1-.114-.606c0-.238.1-.528-.021-.725a.635.635,0,0,0,.238-.4.457.457,0,0,1,.033-.162.419.419,0,0,1,.155-.14.644.644,0,0,0,.238-.637c.126.057.259-.071.319-.2s.107-.283.238-.335a1.824,1.824,0,0,1,.278-.04c.147-.038.238-.181.342-.292a2.615,2.615,0,0,1,.787-.487,8.736,8.736,0,0,0,2.14-1.729,7.267,7.267,0,0,0,.923-1.044,3.372,3.372,0,0,0,.2-.335h.017v.019a.461.461,0,0,0,.033.121c.029.1.064.193.1.288a2.1,2.1,0,0,0,.411.785,1.047,1.047,0,0,0,.093.083.957.957,0,0,0,.119.081,1.465,1.465,0,0,0,.545.164c.071,0,.145.014.219.017h.219l1.5.04a4.324,4.324,0,0,1-.521-2.63c.086-2.335.54-4.692.119-6.989a1.82,1.82,0,0,0-.288-.78,1.612,1.612,0,0,0-.951-.516,5.736,5.736,0,0,1-1.061-.271,4.39,4.39,0,0,0-.835-.4,1.845,1.845,0,0,0-.666,0c-.271.04-.54.088-.809.143l-.064.014h-.321l-.026.012-.024.012-.024.012-.024.012-.024.014-.021.014-.021.014-.021.017-.019.014-.021.019-.017.014-.021.021-.014.017a.112.112,0,0,0-.021.026v.014l-.026.038h0a.681.681,0,0,0-.052.112.516.516,0,0,0-.017.057,1.088,1.088,0,0,0-.021.121v.185a.753.753,0,0,0,.021.207,2.259,2.259,0,0,0-.107,3.822,1.034,1.034,0,0,1,0,.112v.024a3.04,3.04,0,0,1-.041.39,5.318,5.318,0,0,0-1.115-.1c-.224,0-.447.019-.673.038-.238-.285-.457-.6-.671-.908l-.495-.725a7.313,7.313,0,0,1-.476-.744c-.121-.238-.216-.476-.35-.713-.278-.476-.735-.87-.79-1.415l-.131.029c-.071-.119-.162-.238-.2-.309a6.034,6.034,0,0,1-.411-1.208,1.868,1.868,0,0,0-.2-.625,1.4,1.4,0,0,0-.288-.3,1.9,1.9,0,0,0-.618-.39.794.794,0,0,0-.63.036c-.033-.012-.064-.026-.1-.036a.766.766,0,0,0-.7.081.951.951,0,0,0-.309.649,1.61,1.61,0,0,0,.167.984,3.918,3.918,0,0,0,.792.82,3.2,3.2,0,0,1,.5.618,6.753,6.753,0,0,1-.038,1.5c-.036.214-.09.423-.109.637-.069.778.335,1.555.193,2.321a.561.561,0,0,0,.261.6,2.981,2.981,0,0,0,.678.185c.447.114.837.4,1.286.509.209.05.426.059.633.114h.033a1.505,1.505,0,0,0-.333.633c-.09.39,0,.806-.1,1.189a2.708,2.708,0,0,1-.454.873L573,282.461a10.15,10.15,0,0,1-.8,1.053c-.5.545-1.363.977-1.615,1.634l-.021-.048c-.359.264-.492.756-.78,1.1-.138.167-.311.3-.464.454a5.1,5.1,0,0,0-.5.749,11.421,11.421,0,0,0-1.161,1.848c-.159.345-.283.713-.409,1.061a40.155,40.155,0,0,0-1.65,4.195,7.866,7.866,0,0,0-.333,1.039,2.021,2.021,0,0,0,.326,1.1c.281.523.587,1.032.837,1.569.147.314.273.637.435.951s.395.642.578.973A11.2,11.2,0,0,1,568.4,302.824Zm6.131-26.56-.043-.021a1.521,1.521,0,0,1-.452-.3,3.5,3.5,0,0,1-.694-1.643c-.014-.067-.029-.136-.04-.2A9.719,9.719,0,0,1,574.532,276.264Z" transform="translate(-449.389 -236.199)"/><path class="d" d="M589.722,271.382a1.843,1.843,0,0,0-.2-.621,1.408,1.408,0,0,0-.29-.3,1.9,1.9,0,0,0-.618-.385.771.771,0,0,0-.713.081.937.937,0,0,0-.309.644,1.592,1.592,0,0,0,.167.977,4.079,4.079,0,0,0,.792.816,3.094,3.094,0,0,1,.518.644,1.8,1.8,0,0,0,.238.345.445.445,0,0,0,.373.147.644.644,0,0,0,.3-.178c.112-.1.416-.276.426-.433s-.238-.414-.288-.533A6.013,6.013,0,0,1,589.722,271.382Z" transform="translate(-466.399 -236.884)"/><path class="e" d="M600.4,287.294a5.43,5.43,0,0,0-1.5-.185,7.832,7.832,0,0,1-2.518-.043,4.365,4.365,0,0,1-.6-.262,1.55,1.55,0,0,1-.449-.295,3.444,3.444,0,0,1-.7-1.631,10.651,10.651,0,0,1-.19-1.736,1.365,1.365,0,0,1-.659.174.476.476,0,0,1-.459-.426,7.08,7.08,0,0,1-.031,1.617c-.036.212-.09.419-.109.633-.069.77.338,1.543.193,2.3a.556.556,0,0,0,.262.595,2.965,2.965,0,0,0,.68.185c.447.114.839.4,1.289.5.209.05.426.059.633.114.3.078.566.238.868.3.226.04.459.012.69.031s.395.069.592.076a1.722,1.722,0,0,0,1.277-.633,5.491,5.491,0,0,0,.735-1.325Z" transform="translate(-470.667 -246.694)"/><path class="f" d="M600.4,287.294a5.43,5.43,0,0,0-1.5-.185,7.832,7.832,0,0,1-2.518-.043,4.365,4.365,0,0,1-.6-.262,1.55,1.55,0,0,1-.449-.295,3.444,3.444,0,0,1-.7-1.631,10.651,10.651,0,0,1-.19-1.736,1.365,1.365,0,0,1-.659.174.476.476,0,0,1-.459-.426,7.08,7.08,0,0,1-.031,1.617c-.036.212-.09.419-.109.633-.069.77.338,1.543.193,2.3a.556.556,0,0,0,.262.595,2.965,2.965,0,0,0,.68.185c.447.114.839.4,1.289.5.209.05.426.059.633.114.3.078.566.238.868.3.226.04.459.012.69.031s.395.069.592.076a1.722,1.722,0,0,0,1.277-.633,5.491,5.491,0,0,0,.735-1.325Z" transform="translate(-470.667 -246.694)"/><g class="g" transform="translate(72.29 32.622)"><path class="h" d="M454.239,652.08V653.3a4.59,4.59,0,0,1-9.179,0V652.08a4.59,4.59,0,1,1,9.179,0Z" transform="translate(-430.062 -557.213)"/><path class="h" d="M445.06,565.8V564.58a4.59,4.59,0,1,1,9.179,0V565.8a4.537,4.537,0,0,1-.2,1.327,4.587,4.587,0,0,1-8.982-1.327Z" transform="translate(-430.062 -490.521)"/><path class="h" d="M454.239,608.29v1.225a4.59,4.59,0,0,1-9.179,0V608.29a4.59,4.59,0,1,1,9.179,0Z" transform="translate(-430.062 -523.837)"/><path class="h" d="M449.65,691.24a4.6,4.6,0,0,1,4.59,4.592v1.222a4.59,4.59,0,0,1-9.179,0v-1.222A4.6,4.6,0,0,1,449.65,691.24Z" transform="translate(-430.062 -590.56)"/><path class="f" d="M445.06,579.78v1.106a4.587,4.587,0,0,0,8.982,1.325Z" transform="translate(-430.062 -505.605)"/><path class="f" d="M445.06,623.53v1.108a4.59,4.59,0,0,0,8.982,1.327Z" transform="translate(-430.062 -538.951)"/><path class="f" d="M445.06,667.29V668.4a4.59,4.59,0,0,0,8.982,1.327Z" transform="translate(-430.062 -572.305)"/><path class="f" d="M445.06,711v1.106a4.587,4.587,0,0,0,8.982,1.327Z" transform="translate(-430.062 -605.621)"/><path class="h" d="M402.6,618.582l.366.281a1.734,1.734,0,0,0,2.468-2.378,1.693,1.693,0,0,0-.35-.366l-.366-.276a1.734,1.734,0,0,0-2.119,2.747Z" transform="translate(-397.182 -532.816)"/><path class="h" d="M417.8,625.9l.366.283a1.734,1.734,0,0,1-2.119,2.747l-.366-.283A1.734,1.734,0,0,1,417.8,625.9Z" transform="translate(-407.159 -540.484)"/><path class="h" d="M430.885,636l.366.283a1.734,1.734,0,0,1-2.119,2.747l-.366-.283A1.734,1.734,0,0,1,430.885,636Z" transform="translate(-417.129 -548.182)"/><path class="h" d="M443.96,646.1l.366.283a1.734,1.734,0,1,1-2.119,2.747l-.371-.283a1.734,1.734,0,0,1,2.119-2.747Z" transform="translate(-427.091 -555.88)"/><path class="f" d="M404.9,621.824l.333.254A1.734,1.734,0,0,0,407.7,619.7Z" transform="translate(-399.453 -536.032)"/><path class="f" d="M418,631.924l.333.254A1.734,1.734,0,0,0,420.8,629.8Z" transform="translate(-409.437 -543.73)"/><path class="f" d="M431.08,642.024l.331.255a1.734,1.734,0,0,0,2.471-2.378Z" transform="translate(-419.407 -551.428)"/><path class="e" d="M394.487,296.627a5.2,5.2,0,1,0,0,10.4,5.2,5.2,0,1,0,0,10.4,5.2,5.2,0,1,0,0,10.406,5.2,5.2,0,1,0,0,10.4H419.58a5.2,5.2,0,1,0,0-10.405,5.2,5.2,0,1,0,0-10.406,5.2,5.2,0,1,0,0-10.4,5.2,5.2,0,1,0,0-10.4,5.2,5.2,0,1,0,0-10.406,5.2,5.2,0,1,0,0-10.4h-1.146c-.659-4.475-5.707-7.957-11.859-7.957s-11.2,3.481-11.859,7.957h-.238a5.2,5.2,0,1,0,0,10.4,5.2,5.2,0,1,0,0,10.406Z" transform="translate(-387.446 -267.86)"/><path class="f" d="M389.72,306.521a5.217,5.217,0,0,0,5.2,5.2h25.093l-24.941-10.4h-.152A5.217,5.217,0,0,0,389.72,306.521Z" transform="translate(-387.882 -293.363)"/><path class="f" d="M441.286,350.323a5.232,5.232,0,0,1-5.2,5.2H411l24.943-10.406h.152a5.232,5.232,0,0,1,5.191,5.2Z" transform="translate(-404.102 -326.747)"/><path class="f" d="M441.286,437.783a5.217,5.217,0,0,1-5.2,5.2H411l24.943-10.4h.152A5.217,5.217,0,0,1,441.286,437.783Z" transform="translate(-404.102 -393.409)"/><path class="f" d="M441.286,525.323a5.217,5.217,0,0,1-5.2,5.2H411l24.943-10.4h.152A5.217,5.217,0,0,1,441.286,525.323Z" transform="translate(-404.102 -460.132)"/><path class="f" d="M389.72,394.031a5.217,5.217,0,0,0,5.2,5.2h25.093l-24.941-10.4h-.152A5.217,5.217,0,0,0,389.72,394.031Z" transform="translate(-387.882 -360.063)"/><path class="f" d="M389.72,481.533a5.232,5.232,0,0,0,5.2,5.2h25.093L395.075,476.33h-.152A5.232,5.232,0,0,0,389.72,481.533Z" transform="translate(-387.882 -426.756)"/><path class="e" d="M386.705,611.7l8.264-4.449a4.342,4.342,0,0,1-1.053-6.057,1.945,1.945,0,0,0-2.635-.792l-.378.2c-1.011-1.358-3.294-1.608-5.317-.518s-3.07,3.132-2.495,4.723l-.074.04a4.353,4.353,0,0,1,1.052,6.063,1.946,1.946,0,0,0,2.636.791Z" transform="translate(-381.992 -520.564)"/><path class="f" d="M382.264,621.653a1.952,1.952,0,0,0,2.635.792L393.155,618,383.1,619l-.05.026A1.952,1.952,0,0,0,382.264,621.653Z" transform="translate(-382.024 -534.736)"/><path class="f" d="M410.653,618.145a1.95,1.95,0,0,1-.79,2.635l-8.264,4.449,6.368-7.847.05-.029A1.952,1.952,0,0,1,410.653,618.145Z" transform="translate(-396.937 -534.068)"/></g><g class="g" transform="translate(44.938 111.481)"><path class="h" d="M287.7,709.428v.35a1.317,1.317,0,0,1-2.632,0v-.35a1.317,1.317,0,1,1,2.632,0Z" transform="translate(-280.763 -682.235)"/><path class="h" d="M285.07,685.049V684.7a1.317,1.317,0,0,1,2.632,0v.352a1.273,1.273,0,0,1-.057.38,1.315,1.315,0,0,1-2.575-.38Z" transform="translate(-280.767 -663.471)"/><path class="h" d="M287.7,696.888v.35a1.317,1.317,0,0,1-2.632,0v-.35a1.317,1.317,0,1,1,2.632,0Z" transform="translate(-280.763 -672.677)"/><path class="h" d="M286.384,720.83a1.32,1.32,0,0,1,1.315,1.317v.35a1.317,1.317,0,1,1-2.632,0v-.35A1.32,1.32,0,0,1,286.384,720.83Z" transform="translate(-280.763 -691.973)"/><path class="f" d="M285.07,688.89v.316a1.315,1.315,0,0,0,2.575.381Z" transform="translate(-280.767 -667.628)"/><path class="f" d="M285.07,701.43v.316a1.315,1.315,0,0,0,2.575.38Z" transform="translate(-280.767 -677.186)"/><path class="f" d="M285.07,714v.316a1.315,1.315,0,0,0,2.575.38Z" transform="translate(-280.767 -686.767)"/><path class="f" d="M285.07,726.51v.316a1.315,1.315,0,0,0,2.575.38Z" transform="translate(-280.767 -696.302)"/><path class="h" d="M272.916,699.994l.1.083a.5.5,0,0,0,.713-.683.477.477,0,0,0-.1-.107l-.1-.081a.5.5,0,1,0-.609.787Z" transform="translate(-271.359 -675.412)"/><path class="h" d="M277.26,702.107l.1.081a.5.5,0,1,1-.606.787l-.107-.081a.5.5,0,0,1,.609-.787Z" transform="translate(-274.202 -677.622)"/><path class="h" d="M281.051,705.026l.1.081a.5.5,0,1,1-.606.787l-.1-.081a.5.5,0,0,1,.606-.787Z" transform="translate(-277.102 -679.855)"/><path class="h" d="M284.8,707.926l.1.081a.5.5,0,1,1-.606.787l-.1-.081a.5.5,0,0,1,.606-.787Z" transform="translate(-279.96 -682.065)"/><path class="f" d="M273.56,700.939l.1.074a.5.5,0,0,0,.713-.682Z" transform="translate(-271.994 -676.348)"/><path class="f" d="M277.32,703.829l.1.074a.5.5,0,0,0,.713-.682Z" transform="translate(-274.86 -678.551)"/><path class="f" d="M281.07,706.721l.1.071a.5.5,0,0,0,.7-.088.5.5,0,0,0,0-.594Z" transform="translate(-277.718 -680.753)"/><path class="e" d="M270.7,607.725a3.391,3.391,0,0,1-1.434,4.474,1.492,1.492,0,0,1-.057,2.983,1.491,1.491,0,1,1,0,2.982,1.491,1.491,0,0,0,1.491,1.491h7.193a3.334,3.334,0,0,1,1.491-4.473,1.492,1.492,0,0,1-.057-2.983,1.492,1.492,0,0,1,.057-2.983,1.491,1.491,0,0,1,0-2.982,1.491,1.491,0,1,1,0-2.982,1.491,1.491,0,0,0-1.491-1.491h-.328c-.19-1.282-1.638-2.28-3.4-2.28s-3.21,1-3.4,2.28H270.7a3.334,3.334,0,0,1-1.491,4.473A1.491,1.491,0,0,0,270.7,607.725Z" transform="translate(-268.678 -599.48)"/><path class="f" d="M269.21,610.561a1.5,1.5,0,0,0,1.491,1.491h7.193l-7.148-2.982H270.7a1.5,1.5,0,0,0-1.491,1.491Z" transform="translate(-268.678 -606.79)"/><path class="f" d="M283.984,623.1a1.5,1.5,0,0,1-1.491,1.491H275.3l7.148-2.982h.045A1.5,1.5,0,0,1,283.984,623.1Z" transform="translate(-273.32 -616.347)"/><path class="f" d="M283.984,648.213a1.5,1.5,0,0,1-1.491,1.491H275.3l7.148-2.984h.045a1.5,1.5,0,0,1,1.491,1.493Z" transform="translate(-273.32 -635.486)"/><path class="f" d="M283.984,673.271a1.5,1.5,0,0,1-1.491,1.491H275.3l7.148-2.982h.045a1.5,1.5,0,0,1,1.491,1.491Z" transform="translate(-273.32 -654.587)"/><path class="f" d="M269.21,635.641a1.5,1.5,0,0,0,1.491,1.491h7.193l-7.148-2.982H270.7a1.5,1.5,0,0,0-1.491,1.491Z" transform="translate(-268.678 -625.905)"/><path class="f" d="M269.21,660.731a1.5,1.5,0,0,0,1.491,1.491h7.193l-7.148-2.982H270.7A1.5,1.5,0,0,0,269.21,660.731Z" transform="translate(-268.678 -645.029)"/><path class="i" d="M269.25,698.031l2.378-1.277a1.241,1.241,0,0,1-.3-1.736.556.556,0,0,0-.756-.226l-.107.057a1.373,1.373,0,0,0-2.238,1.206l-.021.012a1.241,1.241,0,0,1,.3,1.736A.559.559,0,0,0,269.25,698.031Z" transform="translate(-267.893 -671.909)"/><path class="f" d="M267.047,700.917a.559.559,0,0,0,.756.238l2.378-1.275-2.894.266h-.014a.559.559,0,0,0-.226.77Z" transform="translate(-266.974 -676.005)"/><path class="f" d="M275.184,699.889a.561.561,0,0,1-.226.756l-2.378,1.275,1.824-2.25h.014a.561.561,0,0,1,.766.219Z" transform="translate(-271.247 -675.791)"/></g><g class="g" transform="translate(163.649 9.046)"><path class="h" d="M834.26,637.065v1.491a5.6,5.6,0,0,0,11.191,0v-1.491a5.6,5.6,0,0,0-11.191,0Z" transform="translate(-818.07 -521.427)"/><path class="h" d="M845.451,531.886V530.4a5.6,5.6,0,0,0-11.191,0v1.491a5.5,5.5,0,0,0,.238,1.617,5.593,5.593,0,0,0,10.939-1.617Z" transform="translate(-818.07 -440.124)"/><path class="h" d="M834.26,583.725v1.493a5.6,5.6,0,1,0,11.191,0v-1.493a5.6,5.6,0,1,0-11.191,0Z" transform="translate(-818.07 -480.772)"/><path class="h" d="M839.855,684.8a5.612,5.612,0,0,0-5.6,5.6v1.491a5.6,5.6,0,0,0,11.191,0V690.4A5.61,5.61,0,0,0,839.855,684.8Z" transform="translate(-818.07 -562.075)"/><path class="f" d="M846.259,548.93v1.348A5.593,5.593,0,0,1,835.32,551.9Z" transform="translate(-818.878 -458.516)"/><path class="f" d="M846.259,602.27v1.348a5.593,5.593,0,0,1-10.939,1.617Z" transform="translate(-818.878 -499.171)"/><path class="f" d="M846.259,655.6v1.348a5.593,5.593,0,0,1-10.939,1.617Z" transform="translate(-818.878 -539.819)"/><path class="f" d="M846.259,708.93v1.348A5.593,5.593,0,0,1,835.32,711.9Z" transform="translate(-818.878 -580.467)"/><path class="h" d="M918.1,596.2l-.447.345a2.114,2.114,0,0,1-3.011-2.9,2.044,2.044,0,0,1,.428-.445l.447-.345A2.114,2.114,0,0,1,918.1,596.2Z" transform="translate(-879.04 -491.655)"/><path class="h" d="M899.425,605.144l-.445.34a2.114,2.114,0,1,0,2.583,3.346l.445-.342a2.114,2.114,0,0,0-2.583-3.348Z" transform="translate(-866.738 -501.022)"/><path class="h" d="M883.467,617.469l-.447.345a2.114,2.114,0,1,0,2.583,3.346l.447-.342a2.114,2.114,0,1,0-2.583-3.348Z" transform="translate(-854.573 -510.42)"/><path class="h" d="M867.656,629.666l-.445.342a2.114,2.114,0,1,0,2.583,3.348l.445-.345a2.114,2.114,0,1,0-2.583-3.346Z" transform="translate(-842.558 -519.69)"/><path class="f" d="M918.062,600.172l-.4.312a2.114,2.114,0,0,1-3.011-2.9Z" transform="translate(-879.04 -495.596)"/><path class="f" d="M902.187,612.482l-.4.309a2.114,2.114,0,0,1-3-2.9Z" transform="translate(-866.96 -504.979)"/><path class="f" d="M886.164,624.79l-.4.312a2.114,2.114,0,0,1-3.011-2.9Z" transform="translate(-854.73 -514.362)"/><path class="e" d="M803.258,203.784a6.342,6.342,0,0,1,0,12.684,6.342,6.342,0,1,1,0,12.683,6.342,6.342,0,0,1,0,12.681,6.342,6.342,0,1,1,0,12.684H772.669a6.342,6.342,0,0,1,0-12.684,6.342,6.342,0,1,1,0-12.683,6.342,6.342,0,1,1,0-12.681,6.342,6.342,0,0,1,0-12.684,6.342,6.342,0,1,1,0-12.683,6.342,6.342,0,1,1,0-12.681h1.4c.8-5.455,6.968-9.7,14.456-9.7s13.652,4.245,14.456,9.7h.278a6.342,6.342,0,1,1,0,12.683,6.342,6.342,0,0,1,0,12.681Z" transform="translate(-766.176 -168.72)"/><path class="f" d="M830.408,215.852a6.359,6.359,0,0,1-6.34,6.34H793.48l30.4-12.682h.188A6.359,6.359,0,0,1,830.408,215.852Z" transform="translate(-786.987 -199.81)"/><path class="f" d="M767.6,269.182a6.359,6.359,0,0,0,6.342,6.34h30.586l-30.4-12.682h-.185a6.361,6.361,0,0,0-6.342,6.342Z" transform="translate(-767.261 -240.458)"/><path class="f" d="M767.6,375.85a6.361,6.361,0,0,0,6.342,6.342h30.586l-30.4-12.682h-.185a6.359,6.359,0,0,0-6.342,6.34Z" transform="translate(-767.261 -321.762)"/><path class="f" d="M767.6,482.512a6.361,6.361,0,0,0,6.342,6.342h30.586l-30.4-12.684h-.185a6.361,6.361,0,0,0-6.342,6.342Z" transform="translate(-767.261 -403.058)"/><path class="f" d="M830.408,322.512a6.359,6.359,0,0,1-6.34,6.342H793.48l30.4-12.684h.188A6.359,6.359,0,0,1,830.408,322.512Z" transform="translate(-786.987 -281.106)"/><path class="f" d="M830.408,429.182a6.359,6.359,0,0,1-6.34,6.34H793.48l30.4-12.682h.188A6.359,6.359,0,0,1,830.408,429.182Z" transform="translate(-786.987 -362.41)"/><path class="e" d="M898.188,587.78l-10.073-5.422a3.522,3.522,0,0,0,.839-6.218,2.378,2.378,0,0,1,3.658-2.133l.461.238c1.232-1.665,4.012-1.959,6.478-.633s3.745,3.819,3.042,5.757l.093.05a3.556,3.556,0,0,0-.9,6.211,2.378,2.378,0,0,1-3.6,2.15Z" transform="translate(-858.279 -476.694)"/><path class="f" d="M914.424,599.921a2.378,2.378,0,0,1-3.213.951L901.14,595.45l12.259,1.213.062.033a2.378,2.378,0,0,1,.963,3.225Z" transform="translate(-869.045 -493.973)"/><path class="f" d="M886.986,595.7a2.378,2.378,0,0,0,.963,3.213l10.073,5.422-7.764-9.564-.059-.033A2.378,2.378,0,0,0,886.986,595.7Z" transform="translate(-858.043 -493.214)"/></g><ellipse class="h" cx="124.132" cy="5.469" rx="124.132" ry="5.469" transform="translate(0 140.931)"/><ellipse class="f" cx="26.872" cy="3.584" rx="26.872" ry="3.584" transform="translate(92.505 142.579)"/><path class="h" d="M547.408,369.494a5.469,5.469,0,0,1-6.482-5.964c.623-5.507,2.561-14.38,7.862-27.7,6.145-15.443,3.928-19.174-2.656-30.248C544,302,541.594,297.949,539,292.741c-6.7-13.379-4.152-23.69-.847-29.965a30.448,30.448,0,0,1,9.1-10.556l5.189,8.585-.476.476c-.012,0,.238,0,.6.659a20.739,20.739,0,0,0-4.915,6.295c-2.877,5.762-2.5,12.366,1.13,19.612,2.428,4.856,4.73,8.73,6.761,12.147,3.648,6.135,6.528,10.982,7.481,17.1.987,6.333-.238,13.146-4.064,22.781-5.044,12.672-6.658,20.6-7.151,24.86a5.481,5.481,0,0,1-4.392,4.756Z" transform="translate(-426.17 -223.318)"/><path class="j" d="M409,22.009,431.009,0l22.222,22.009h-15.1V38.838H424.1V22.116Z" transform="translate(-311.739)"/><ellipse class="f" cx="14.03" cy="1.871" rx="14.03" ry="1.871" transform="translate(153.382 142.327)"/><path class="h" d="M764.98,540.839a2.854,2.854,0,0,1-3.384-3.113c.323-2.875,1.336-7.507,4.1-14.461,3.208-8.064,2.05-10.011-1.386-15.795-1.11-1.867-2.378-3.986-3.731-6.706-3.491-6.984-2.164-12.366-.438-15.643a15.9,15.9,0,0,1,4.756-5.512l2.709,4.483-.252.238s.128,0,.314.345a10.815,10.815,0,0,0-2.568,3.286c-1.5,3.008-1.3,6.454.592,10.24,1.268,2.535,2.468,4.559,3.529,6.342,1.9,3.2,3.408,5.733,3.907,8.929.514,3.305-.121,6.863-2.124,11.89-2.632,6.616-3.477,10.756-3.734,12.979a2.854,2.854,0,0,1-2.292,2.485Z" transform="translate(-596.595 -396.634)"/><path class="j" d="M655.44,296.951l11.491-11.491,11.6,11.491H670.65v8.787h-7.324v-8.73Z" transform="translate(-499.575 -217.577)"/><ellipse class="f" cx="14.03" cy="1.871" rx="14.03" ry="1.871" transform="translate(57.31 142.327)"/><path class="h" d="M347.237,540.839a2.854,2.854,0,0,0,3.384-3.113c-.323-2.875-1.336-7.507-4.1-14.461-3.208-8.064-2.05-10.011,1.386-15.795,1.111-1.867,2.378-3.986,3.731-6.706,3.491-6.984,2.164-12.366.438-15.643a15.9,15.9,0,0,0-4.756-5.512l-2.709,4.483.252.238s-.128,0-.314.345a10.815,10.815,0,0,1,2.568,3.286c1.5,3.008,1.3,6.454-.592,10.24-1.267,2.535-2.468,4.559-3.529,6.342-1.9,3.2-3.408,5.733-3.907,8.929-.514,3.305.121,6.863,2.124,11.89,2.632,6.616,3.477,10.756,3.733,12.979a2.854,2.854,0,0,0,2.292,2.485Z" transform="translate(-276.869 -396.634)"/><path class="j" d="M274.535,296.951,263.045,285.46l-11.6,11.491h7.885v8.787h7.324v-8.73Z" transform="translate(-191.647 -217.577)"/><ellipse class="f" cx="4.994" cy="0.595" rx="4.994" ry="0.595" transform="translate(114.253 69.861) rotate(-16.49)"/><ellipse class="f" cx="4.994" cy="0.595" rx="4.994" ry="0.595" transform="translate(116.393 74.618) rotate(-16.49)"/><ellipse class="f" cx="4.994" cy="0.595" rx="4.994" ry="0.595" transform="translate(118.77 78.184) rotate(-16.49)"/><ellipse class="f" cx="4.994" cy="0.595" rx="4.994" ry="0.595" transform="translate(120.674 81.751) rotate(-16.49)"/><path class="j" d="M919.88,701.586h-10.1a3.16,3.16,0,0,0-1.873-5.216,2.1,2.1,0,0,1,1.873-3.162h.461c.264-1.8,2.3-3.206,4.77-3.208s4.518,1.4,4.777,3.2h.093a4.683,4.683,0,0,0,2.1,6.283,2.1,2.1,0,0,1-2.095,2.1Z" transform="translate(-710.33 -556.993)"/><path class="f" d="M928.922,705.552a2.1,2.1,0,0,1-2.093,2.095h-10.1l10.035-4.2h.062A2.1,2.1,0,0,1,928.922,705.552Z" transform="translate(-717.279 -567.244)"/><path class="f" d="M908.17,723.315a2.1,2.1,0,0,0,2.1,2.093h10.1l-10.042-4.178h-.055A2.1,2.1,0,0,0,908.17,723.315Z" transform="translate(-710.754 -580.796)"/><path class="j" d="M678.812,707.125h-5.733a2.659,2.659,0,0,0-1.189-3.567,1.189,1.189,0,0,1,1.189-1.189h.264a2.927,2.927,0,0,1,5.417,0h.052A2.659,2.659,0,0,0,680,705.931a1.189,1.189,0,0,1-1.189,1.189Z" transform="translate(-530.662 -565.034)"/><path class="f" d="M683.812,709.389a1.189,1.189,0,0,1-1.189,1.189H676.89L682.6,708.2h.026A1.189,1.189,0,0,1,683.812,709.389Z" transform="translate(-534.473 -570.865)"/><path class="f" d="M672.05,719.419a1.189,1.189,0,0,0,1.189,1.189h5.731l-5.707-2.378h-.036A1.189,1.189,0,0,0,672.05,719.419Z" transform="translate(-530.784 -578.51)"/><path class="j" d="M202.274,712.027H190.146a3.794,3.794,0,0,0-2.241-6.258,2.514,2.514,0,0,1,2.241-3.791h.552c.316-2.162,2.758-3.845,5.724-3.848s5.41,1.677,5.731,3.836h.109A5.689,5.689,0,0,0,204.7,709.5a2.514,2.514,0,0,1-2.436,2.512Z" transform="translate(-161.503 -563.19)"/><path class="f" d="M213.087,716.783a2.518,2.518,0,0,1-2.509,2.514H198.45l12.038-5.037h.074A2.523,2.523,0,0,1,213.087,716.783Z" transform="translate(-169.807 -575.484)"/><path class="f" d="M188.22,738.044a2.521,2.521,0,0,0,2.516,2.509h12.128l-12.049-5.013h-.074A2.523,2.523,0,0,0,188.22,738.044Z" transform="translate(-162.01 -591.703)"/><path class="a" d="M307.727,263.184a4.832,4.832,0,0,0-2.8.3,4.107,4.107,0,0,1-3.353,0,4.709,4.709,0,0,0-3.943.076,2.447,2.447,0,0,1-1.134.285c-1.6,0-2.927-1.61-3.2-3.736a3.078,3.078,0,0,0,.8-.861,4.493,4.493,0,0,1,8.019-.026,3.091,3.091,0,0,0,2.654,1.458h.043A3.367,3.367,0,0,1,307.727,263.184Z" transform="translate(-242.094 -226.786)"/><path class="b" d="M312.59,237.5l-2.583,1.638,1.567-2.854a2.542,2.542,0,0,0-1.562-.559h-.04a2.853,2.853,0,0,1-.535-.038l-.878.554.376-.682A3.122,3.122,0,0,1,307.4,234.4l-1.572,1,.989-1.8a4.589,4.589,0,0,0-3.51-1.774,4.8,4.8,0,0,0-4.019,2.478,3.008,3.008,0,0,1-2.656,1.427h-.078c-1.8,0-3.258,2.04-3.258,4.556s1.46,4.556,3.258,4.556a2.418,2.418,0,0,0,1.134-.285,4.708,4.708,0,0,1,3.943-.076,4.162,4.162,0,0,0,1.686.361,4.112,4.112,0,0,0,1.665-.354,4.706,4.706,0,0,1,3.907.076,2.435,2.435,0,0,0,1.122.278c1.8,0,3.258-2.04,3.258-4.556A5.791,5.791,0,0,0,312.59,237.5Z" transform="translate(-242.101 -207.769)"/><path class="a" d="M210.62,373.184a4.832,4.832,0,0,1,2.792.3,4.1,4.1,0,0,0,3.351,0,4.708,4.708,0,0,1,3.943.076,2.454,2.454,0,0,0,1.134.285c1.6,0,2.93-1.61,3.206-3.736a3.041,3.041,0,0,1-.8-.861,4.493,4.493,0,0,0-8.019-.026,3.091,3.091,0,0,1-2.663,1.455h-.04A3.345,3.345,0,0,0,210.62,373.184Z" transform="translate(-179.083 -310.627)"/><path class="b" d="M187.959,347.493l2.583,1.638-1.569-2.854a2.547,2.547,0,0,1,1.562-.559h.043a2.856,2.856,0,0,0,.535-.038l.875.554-.376-.682a3.127,3.127,0,0,0,1.534-1.163l1.567.994-.992-1.8a4.594,4.594,0,0,1,3.512-1.774,4.815,4.815,0,0,1,4.019,2.478,3.006,3.006,0,0,0,2.656,1.427h.086c1.8,0,3.258,2.04,3.258,4.556s-1.458,4.556-3.258,4.556a2.433,2.433,0,0,1-1.134-.285,4.708,4.708,0,0,0-3.943-.076,4.15,4.15,0,0,1-1.684.361,4.1,4.1,0,0,1-1.665-.354,4.711,4.711,0,0,0-3.909.076,2.428,2.428,0,0,1-1.122.278c-1.8,0-3.258-2.04-3.258-4.556A5.79,5.79,0,0,1,187.959,347.493Z" transform="translate(-161.292 -291.603)"/><path class="d" d="M623.625,401.146a1.242,1.242,0,0,1,.433.136,1.024,1.024,0,0,1,.378.507,4.471,4.471,0,0,1,.252,1.586,3.4,3.4,0,0,1-.164,1.286.8.8,0,0,1-.214.335.742.742,0,0,1-.295.143.787.787,0,0,1-.692-.086,1.1,1.1,0,0,1-.307-.713,1.681,1.681,0,0,0-.411-.994c-.2-.183-.476-.276-.621-.5a1.068,1.068,0,0,1,.029-.923c.093-.262.238-.789.5-.923S623.342,401.093,623.625,401.146Z" transform="translate(-492.551 -336.685)"/><path class="d" d="M577.4,405.468a2.031,2.031,0,0,0,.426.787c.121.14.271.309.207.476a.4.4,0,0,1-.114.155,5.8,5.8,0,0,1-3.389,1.455.127.127,0,0,1-.06,0c-.036-.017-.045-.062-.05-.1a1.262,1.262,0,0,1,0-.39,1.16,1.16,0,0,1,.587-.685,1.864,1.864,0,0,0,.69-.6c.181-.34.1-.782.319-1.1a1.153,1.153,0,0,1,.808-.416c.1-.017.333-.136.423-.081S577.365,405.361,577.4,405.468Z" transform="translate(-456.36 -339.728)"/><path class="e" d="M624.454,401.217a.126.126,0,0,1,.109-.124.373.373,0,0,1,.176.024,2.619,2.619,0,0,0,.426.078,3.093,3.093,0,0,1,.514.059.58.58,0,0,1,.4.3.765.765,0,0,1,.045.285,4.517,4.517,0,0,1-.133,1.113.079.079,0,0,1-.045.069.168.168,0,0,1-.069,0,.09.09,0,0,0-.04.048,2.456,2.456,0,0,0-.152.744c-.043.373-.093.747-.155,1.118a1.246,1.246,0,0,1-.238.611,1.011,1.011,0,0,1-.642.295,4.519,4.519,0,0,1-1.512-.138.44.44,0,0,1-.254-.114.292.292,0,0,1-.062-.2c0-.238.238-.426.447-.564l.309-.188a.152.152,0,0,0,.05-.045.172.172,0,0,0,.014-.093l-.019-.366a1.046,1.046,0,0,1,.906.576c.04.078.078.171.159.2a.212.212,0,0,0,.25-.152.64.64,0,0,0,0-.321c-.167-.9-.126-1.819-.238-2.725a.6.6,0,0,0-.093-.285C624.556,401.36,624.465,401.307,624.454,401.217Z" transform="translate(-493.258 -336.787)"/><path class="e" d="M569.811,412.046c-.043.069-.109.121-.147.195a.164.164,0,0,0,.031.216.211.211,0,0,0,.133.014,4.478,4.478,0,0,0,2.414-1.092,1.663,1.663,0,0,0,.295-.326c.078-.119.145-.264.278-.314a4.826,4.826,0,0,1,.126,1.061.754.754,0,0,1-.238.64.769.769,0,0,1-.238.1l-.421.119a.425.425,0,0,1-.238.021,1.058,1.058,0,0,0-.145-.052.343.343,0,0,0-.162.019l-.361.107a2.066,2.066,0,0,0-.359.124c-.1.05-.2.114-.3.169a3.733,3.733,0,0,1-.526.212l-.637.221a2.245,2.245,0,0,1-.542.14,2.324,2.324,0,0,0-.385.021c-.128.021-.188.05-.288.059a.773.773,0,0,1-.452-.133.446.446,0,0,1-.131-.119c-.09-.14,0-.328.078-.476a1.84,1.84,0,0,1,.644-.666c.112-.062.238-.107.345-.162.326-.157.571-.421.877-.6S569.947,411.822,569.811,412.046Z" transform="translate(-451.082 -344.141)"/><path class="d" d="M614.92,298.583a2.659,2.659,0,0,0,1.127.44,4.771,4.771,0,0,0,.637.033,16.515,16.515,0,0,0,2.654-.221,3.285,3.285,0,0,1-.835-1.3,2.175,2.175,0,0,1-.04-.813,6.379,6.379,0,0,1,.238-1.025,6.812,6.812,0,0,1-1.122-.029c-.212-.021-.732-.214-.918-.067s-.043.616-.038.839a.086.086,0,0,1,0,.024,2.674,2.674,0,0,1-.214.98,1.843,1.843,0,0,1-1.489,1.137Z" transform="translate(-487.24 -256.342)"/><path class="f" d="M621.922,296.443a2.24,2.24,0,0,0,1.829.281,6.378,6.378,0,0,1,.238-1.025,6.812,6.812,0,0,1-1.122-.029c-.212-.021-.732-.214-.918-.067S621.917,296.219,621.922,296.443Z" transform="translate(-492.527 -256.342)"/><circle class="d" cx="2.235" cy="2.235" r="2.235" transform="translate(128.382 35.891)"/><path class="e" d="M587.4,312.445a1.044,1.044,0,0,0,.5.9,1.922,1.922,0,0,0,.547.193,10.753,10.753,0,0,0,3.12.385,1.74,1.74,0,0,0,.661-.138.713.713,0,0,0,.409-.511.29.29,0,0,1,.185-.3.632.632,0,0,0,.238-.633c.128.057.262-.071.321-.2s.107-.281.238-.333a1.783,1.783,0,0,1,.278-.04c.147-.038.238-.181.342-.29a2.574,2.574,0,0,1,.79-.476,8.76,8.76,0,0,0,2.14-1.719,7.2,7.2,0,0,0,.923-1.034c.074-.109.143-.221.2-.335a9.441,9.441,0,0,0,.516-1.177,1.37,1.37,0,0,0,.131-.675.55.55,0,0,0,0-.062,1.287,1.287,0,0,0-.2-.409,1.712,1.712,0,0,0-.916-.754,2.633,2.633,0,0,0-1.189.1,2.906,2.906,0,0,1-.4.062,3.716,3.716,0,0,1-1.244-.2l-.445-.121c-.221-.062-.333-.331-.556-.378a.81.81,0,0,0-.3.017,4.1,4.1,0,0,0-1.317.43,2,2,0,0,0-.255.174,1.627,1.627,0,0,0-.595.877c-.093.388,0,.8-.1,1.189a2.631,2.631,0,0,1-.454.866l-1.089,1.565a9.508,9.508,0,0,1-.8,1.044C588.494,311.1,587.417,311.579,587.4,312.445Z" transform="translate(-466.264 -263.013)"/><path class="d" d="M592.782,271.382a1.842,1.842,0,0,0-.2-.621,1.407,1.407,0,0,0-.29-.3,1.9,1.9,0,0,0-.618-.385.771.771,0,0,0-.713.081.937.937,0,0,0-.309.644,1.591,1.591,0,0,0,.167.977,4.079,4.079,0,0,0,.792.816,3.094,3.094,0,0,1,.518.644,1.8,1.8,0,0,0,.238.345.445.445,0,0,0,.373.147.645.645,0,0,0,.3-.178c.112-.1.416-.276.426-.433s-.238-.414-.288-.533A6.017,6.017,0,0,1,592.782,271.382Z" transform="translate(-468.731 -236.884)"/><path class="k" d="M565.51,348.149c.281.518.59,1.023.839,1.558.145.312.273.633.435.935s.395.64.58.965a11.22,11.22,0,0,1,.966,2.673,5.379,5.379,0,0,0,1.9-.668c.038-.024.076-.048.112-.074a1.369,1.369,0,0,0,.385-.423,8.97,8.97,0,0,0-.9-2.43c-.145-.238-.314-.476-.476-.713-.44-.69-.53-1.56-1.03-2.207a.378.378,0,0,1,0-.449c.057-.074.15-.145.131-.238s-.083-.131-.055-.193.043-.048.069-.069c.083-.078.074-.214.081-.328a1.624,1.624,0,0,1,.364-.79.509.509,0,0,1,.133-.143c.045-.029.1-.04.145-.069.159-.1.147-.333.224-.507.1-.238.354-.342.518-.528.212-.238.264-.564.476-.768a.616.616,0,0,1,.074-.059,3.639,3.639,0,0,0-.131,1.077c-.021,1.244.29,2.533.143,3.769a2.6,2.6,0,0,0,1.346,2.452,6.434,6.434,0,0,0,1.049.44c.537.19,1.073.388,1.6.606q.557.238,1.1.5a13.558,13.558,0,0,1,1.3.713,5,5,0,0,1,1.4,1.151,1.251,1.251,0,0,0,.9-.5,3.47,3.47,0,0,0,.5-.937,2.582,2.582,0,0,0,.238-.882.169.169,0,0,0-.1-.159l-2.452-1.3-.459-.238c-1-.533-2.045-1.025-3.049-1.558-.067.019-.124-.057-.143-.124s-.033-.15-.1-.181-.074-.014-.1-.04a.1.1,0,0,1-.017-.081c.033-.476.383-.932.312-1.415a1.7,1.7,0,0,1-.088-.609,2.851,2.851,0,0,1,.185-.385c.121-.295,0-.652.133-.951a2.14,2.14,0,0,0,.176-.6,4.1,4.1,0,0,1,.376-1.189,2.14,2.14,0,0,1,.345-.523c.074-.078.157-.15.238-.238a1.9,1.9,0,0,0,.352-.913,4.365,4.365,0,0,0,.05-1.788,2.636,2.636,0,0,1-.114-.6c0-.271.121-.587-.067-.782a.6.6,0,0,0-.273-.14,8.667,8.667,0,0,0-1.329-.238l-2.05-.266a1.9,1.9,0,0,1-.682-.176,1.363,1.363,0,0,1-.573-.735c-.361.262-.495.751-.782,1.089a5.35,5.35,0,0,1-.476.452,5.474,5.474,0,0,0-.514.633,11.206,11.206,0,0,0-1.161,1.836c-.159.342-.283.7-.411,1.053a42.763,42.763,0,0,0-1.665,4.164,8,8,0,0,0-.333,1.032A2,2,0,0,0,565.51,348.149Z" transform="translate(-449.313 -287.769)"/><path class="f" d="M610.772,334.693a.611.611,0,0,1,.074.3c-.045-.238-.357-.352-.376-.575,0-.1,0-.1.074-.043S610.682,334.605,610.772,334.693Z" transform="translate(-483.848 -285.908)"/><path class="f" d="M607.1,338.527a.475.475,0,0,1,.14.209.528.528,0,0,1,.029.366c-.045-.021-.06-.078-.074-.126a.886.886,0,0,0-.1-.216c-.036-.059-.207-.2-.2-.262S607.052,338.494,607.1,338.527Z" transform="translate(-481.119 -289.057)"/><path class="f" d="M607.3,304.9a2.379,2.379,0,0,0,.476.314c.442.224.932.342,1.379.559a6.408,6.408,0,0,1,.64.373l1.325.839a1.579,1.579,0,0,1,.292.221c.157.171.157.476.3.652a.882.882,0,0,0,.644.3,2.118,2.118,0,0,0,.713-.121,3.663,3.663,0,0,0,.409-.15,1.942,1.942,0,0,0,.392-.224,1.127,1.127,0,0,0,.476-.732,1.469,1.469,0,0,0-.078-.6,2.24,2.24,0,0,0-.143-.361,1.173,1.173,0,0,0-.112-.19,2.108,2.108,0,0,0-1.358-.735c-.273-.052-.552-.086-.825-.133a2.9,2.9,0,0,1-.4.062,3.717,3.717,0,0,1-1.244-.2l-.445-.121c-.221-.062-.333-.331-.556-.378a.811.811,0,0,0-.3.017,4.1,4.1,0,0,0-1.317.43A2,2,0,0,0,607.3,304.9Z" transform="translate(-481.432 -262.99)"/><path class="e" d="M597.63,282c.057.54.511.937.789,1.4.136.238.238.476.352.713a7.225,7.225,0,0,0,.476.737l.5.713a7.458,7.458,0,0,0,.951,1.206,10.855,10.855,0,0,1,1.812.828,9.183,9.183,0,0,0,1.55.314,2.108,2.108,0,0,1,1.358.735,2.021,2.021,0,0,1,.254.554,1.459,1.459,0,0,1,.078.6,1.127,1.127,0,0,1-.476.73,2.472,2.472,0,0,1-.8.373,2.06,2.06,0,0,1-.713.121.873.873,0,0,1-.644-.3c-.145-.181-.143-.476-.3-.649a1.456,1.456,0,0,0-.293-.221l-1.325-.839a6.4,6.4,0,0,0-.64-.373c-.447-.219-.937-.335-1.379-.561a1.671,1.671,0,0,1-.951-1.082,10.531,10.531,0,0,0-2.195-4c.029,0,.019-.071.031-.1a1.284,1.284,0,0,1,.649-.656,3.8,3.8,0,0,1,.92-.24Z" transform="translate(-472.842 -246.016)"/><path class="k" d="M622.433,278.659a.8.8,0,0,1,.093-.476,1.049,1.049,0,0,1,.735-.388c.269-.057.537-.1.809-.143a1.857,1.857,0,0,1,.668-.012,4.52,4.52,0,0,1,.835.395,5.785,5.785,0,0,0,1.061.271,1.605,1.605,0,0,1,.951.511,1.782,1.782,0,0,1,.283.792c.423,2.283-.033,4.623-.119,6.944a4.229,4.229,0,0,0,.523,2.616l-1.5-.038a1.843,1.843,0,0,1-1.1-.269,1.8,1.8,0,0,1-.5-.863,2.672,2.672,0,0,1-.193-.773c-.024-.547.285-1.082.186-1.617a1.8,1.8,0,0,0-.69-1.006,6.308,6.308,0,0,1-.911-.811,2.943,2.943,0,0,1-.476-2.074,7.827,7.827,0,0,0,.074-1.289,1.627,1.627,0,0,0-.34-.906A1.256,1.256,0,0,1,622.433,278.659Z" transform="translate(-492.962 -242.675)"/><path class="f" d="M622.513,278.765a1.03,1.03,0,0,1,.713-.385.7.7,0,0,0-.357.281.8.8,0,0,0-.093.476,1.246,1.246,0,0,0,.385.866,1.627,1.627,0,0,1,.34.9,7.849,7.849,0,0,1-.074,1.291,3,3,0,0,0,.476,2.071,6.3,6.3,0,0,0,.911.811,1.809,1.809,0,0,1,.68.987c.1.537-.209,1.072-.185,1.617a2.65,2.65,0,0,0,.193.773,1.365,1.365,0,0,0,1.605,1.132l1.065.029c.024.038.048.076.074.114l-1.5-.038a1.843,1.843,0,0,1-1.1-.269,1.8,1.8,0,0,1-.5-.863,2.672,2.672,0,0,1-.193-.773c-.024-.547.285-1.082.185-1.617a1.8,1.8,0,0,0-.678-.985,6.3,6.3,0,0,1-.911-.811,2.943,2.943,0,0,1-.476-2.074,7.834,7.834,0,0,0,.074-1.289,1.627,1.627,0,0,0-.34-.906,1.256,1.256,0,0,1-.385-.866.8.8,0,0,1,.1-.476Z" transform="translate(-492.949 -243.257)"/><path class="f" d="M575.37,364.632l2.766,6.718a1.369,1.369,0,0,0,.385-.423,8.972,8.972,0,0,0-.9-2.43c-.145-.238-.314-.476-.476-.713-.44-.69-.53-1.56-1.03-2.207a.378.378,0,0,1,0-.449c.057-.074.15-.145.131-.238s-.083-.131-.055-.193.043-.048.069-.069c.083-.078.074-.214.081-.328a1.624,1.624,0,0,1,.364-.789.509.509,0,0,1,.133-.143c.045-.029.1-.04.145-.069.159-.1.147-.333.224-.507.1-.238.354-.342.518-.528.212-.238.264-.564.476-.768l.019-.048-.209-1.3Z" transform="translate(-457.095 -305.582)"/></svg>
|
admin/images/new-2.gif
DELETED
Binary file
|
admin/images/new-img.gif
DELETED
Binary file
|
admin/images/plugin_bk.png
DELETED
Binary file
|
admin/images/woo_banner_adv.gif
DELETED
Binary file
|
admin/js/dataTables.bootstrap4.min.js
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
DataTables Bootstrap 4 integration
|
3 |
+
©2011-2017 SpryMedia Ltd - datatables.net/license
|
4 |
+
*/
|
5 |
+
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var e=a.length,d=0;d<e;d++){var f=a[d];if(b.call(c,f,d,a))return{i:d,v:f}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.ISOLATE_POLYFILLS=!1;
|
6 |
+
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};$jscomp.getGlobal=function(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
|
7 |
+
$jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX="$jscp$";var $jscomp$lookupPolyfilledValue=function(a,b){var c=$jscomp.propertyToPolyfillSymbol[b];if(null==c)return a[b];c=a[c];return void 0!==c?c:a[b]};
|
8 |
+
$jscomp.polyfill=function(a,b,c,e){b&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(a,b,c,e):$jscomp.polyfillUnisolated(a,b,c,e))};$jscomp.polyfillUnisolated=function(a,b,c,e){c=$jscomp.global;a=a.split(".");for(e=0;e<a.length-1;e++){var d=a[e];if(!(d in c))return;c=c[d]}a=a[a.length-1];e=c[a];b=b(e);b!=e&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})};
|
9 |
+
$jscomp.polyfillIsolated=function(a,b,c,e){var d=a.split(".");a=1===d.length;e=d[0];e=!a&&e in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var f=0;f<d.length-1;f++){var l=d[f];if(!(l in e))return;e=e[l]}d=d[d.length-1];c=$jscomp.IS_SYMBOL_NATIVE&&"es6"===c?e[d]:null;b=b(c);null!=b&&(a?$jscomp.defineProperty($jscomp.polyfills,d,{configurable:!0,writable:!0,value:b}):b!==c&&($jscomp.propertyToPolyfillSymbol[d]=$jscomp.IS_SYMBOL_NATIVE?$jscomp.global.Symbol(d):$jscomp.POLYFILL_PREFIX+d,d=
|
10 |
+
$jscomp.propertyToPolyfillSymbol[d],$jscomp.defineProperty(e,d,{configurable:!0,writable:!0,value:b})))};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(b,c){return $jscomp.findInternal(this,b,c).v}},"es6","es3");
|
11 |
+
(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,c){b||(b=window);c&&c.fn.dataTable||(c=require("datatables.net")(b,c).$);return a(c,b,b.document)}:a(jQuery,window,document)})(function(a,b,c,e){var d=a.fn.dataTable;a.extend(!0,d.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
|
12 |
+
renderer:"bootstrap"});a.extend(d.ext.classes,{sWrapper:"dataTables_wrapper dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"custom-select custom-select-sm form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"});d.ext.renderer.pageButton.bootstrap=function(f,l,A,B,m,t){var u=new d.Api(f),C=f.oClasses,n=f.oLanguage.oPaginate,D=f.oLanguage.oAria.paginate||{},h,k,v=0,y=function(q,w){var x,E=function(p){p.preventDefault();
|
13 |
+
a(p.currentTarget).hasClass("disabled")||u.page()==p.data.action||u.page(p.data.action).draw("page")};var r=0;for(x=w.length;r<x;r++){var g=w[r];if(Array.isArray(g))y(q,g);else{k=h="";switch(g){case "ellipsis":h="…";k="disabled";break;case "first":h=n.sFirst;k=g+(0<m?"":" disabled");break;case "previous":h=n.sPrevious;k=g+(0<m?"":" disabled");break;case "next":h=n.sNext;k=g+(m<t-1?"":" disabled");break;case "last":h=n.sLast;k=g+(m<t-1?"":" disabled");break;default:h=g+1,k=m===g?"active":""}if(h){var F=
|
14 |
+
a("<li>",{"class":C.sPageButton+" "+k,id:0===A&&"string"===typeof g?f.sTableId+"_"+g:null}).append(a("<a>",{href:"#","aria-controls":f.sTableId,"aria-label":D[g],"data-dt-idx":v,tabindex:f.iTabIndex,"class":"page-link"}).html(h)).appendTo(q);f.oApi._fnBindAction(F,{action:g},E);v++}}}};try{var z=a(l).find(c.activeElement).data("dt-idx")}catch(q){}y(a(l).empty().html('<ul class="pagination"/>').children("ul"),B);z!==e&&a(l).find("[data-dt-idx="+z+"]").trigger("focus")};return d});
|
admin/js/jquery.dataTables.min.js
ADDED
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
Copyright 2008-2021 SpryMedia Ltd.
|
3 |
+
|
4 |
+
This source file is free software, available under the following license:
|
5 |
+
MIT license - http://datatables.net/license
|
6 |
+
|
7 |
+
This source file is distributed in the hope that it will be useful, but
|
8 |
+
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
9 |
+
or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
|
10 |
+
|
11 |
+
For details please refer to: http://www.datatables.net
|
12 |
+
DataTables 1.10.24
|
13 |
+
©2008-2021 SpryMedia Ltd - datatables.net/license
|
14 |
+
*/
|
15 |
+
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(k,y,z){k instanceof String&&(k=String(k));for(var q=k.length,G=0;G<q;G++){var O=k[G];if(y.call(z,O,G,k))return{i:G,v:O}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.ISOLATE_POLYFILLS=!1;
|
16 |
+
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(k,y,z){if(k==Array.prototype||k==Object.prototype)return k;k[y]=z.value;return k};$jscomp.getGlobal=function(k){k=["object"==typeof globalThis&&globalThis,k,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var y=0;y<k.length;++y){var z=k[y];if(z&&z.Math==Math)return z}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this);
|
17 |
+
$jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX="$jscp$";var $jscomp$lookupPolyfilledValue=function(k,y){var z=$jscomp.propertyToPolyfillSymbol[y];if(null==z)return k[y];z=k[z];return void 0!==z?z:k[y]};
|
18 |
+
$jscomp.polyfill=function(k,y,z,q){y&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(k,y,z,q):$jscomp.polyfillUnisolated(k,y,z,q))};$jscomp.polyfillUnisolated=function(k,y,z,q){z=$jscomp.global;k=k.split(".");for(q=0;q<k.length-1;q++){var G=k[q];if(!(G in z))return;z=z[G]}k=k[k.length-1];q=z[k];y=y(q);y!=q&&null!=y&&$jscomp.defineProperty(z,k,{configurable:!0,writable:!0,value:y})};
|
19 |
+
$jscomp.polyfillIsolated=function(k,y,z,q){var G=k.split(".");k=1===G.length;q=G[0];q=!k&&q in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var O=0;O<G.length-1;O++){var ma=G[O];if(!(ma in q))return;q=q[ma]}G=G[G.length-1];z=$jscomp.IS_SYMBOL_NATIVE&&"es6"===z?q[G]:null;y=y(z);null!=y&&(k?$jscomp.defineProperty($jscomp.polyfills,G,{configurable:!0,writable:!0,value:y}):y!==z&&($jscomp.propertyToPolyfillSymbol[G]=$jscomp.IS_SYMBOL_NATIVE?$jscomp.global.Symbol(G):$jscomp.POLYFILL_PREFIX+G,
|
20 |
+
G=$jscomp.propertyToPolyfillSymbol[G],$jscomp.defineProperty(q,G,{configurable:!0,writable:!0,value:y})))};$jscomp.polyfill("Array.prototype.find",function(k){return k?k:function(y,z){return $jscomp.findInternal(this,y,z).v}},"es6","es3");
|
21 |
+
(function(k){"function"===typeof define&&define.amd?define(["jquery"],function(y){return k(y,window,document)}):"object"===typeof exports?module.exports=function(y,z){y||(y=window);z||(z="undefined"!==typeof window?require("jquery"):require("jquery")(y));return k(z,y,y.document)}:k(jQuery,window,document)})(function(k,y,z,q){function G(a){var b,c,d={};k.each(a,function(e,f){(b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" ")&&(c=e.replace(b[0],b[2].toLowerCase()),
|
22 |
+
d[c]=e,"o"===b[1]&&G(a[e]))});a._hungarianMap=d}function O(a,b,c){a._hungarianMap||G(a);var d;k.each(b,function(e,f){d=a._hungarianMap[e];d===q||!c&&b[d]!==q||("o"===d.charAt(0)?(b[d]||(b[d]={}),k.extend(!0,b[d],b[e]),O(a[d],b[d],c)):b[d]=b[e])})}function ma(a){var b=u.defaults.oLanguage,c=b.sDecimal;c&&Va(c);if(a){var d=a.sZeroRecords;!a.sEmptyTable&&d&&"No data available in table"===b.sEmptyTable&&V(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&d&&"Loading..."===b.sLoadingRecords&&V(a,a,
|
23 |
+
"sZeroRecords","sLoadingRecords");a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&c!==a&&Va(a)}}function yb(a){R(a,"ordering","bSort");R(a,"orderMulti","bSortMulti");R(a,"orderClasses","bSortClasses");R(a,"orderCellsTop","bSortCellsTop");R(a,"order","aaSorting");R(a,"orderFixed","aaSortingFixed");R(a,"paging","bPaginate");R(a,"pagingType","sPaginationType");R(a,"pageLength","iDisplayLength");R(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":
|
24 |
+
"");"boolean"===typeof a.scrollX&&(a.scrollX=a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&O(u.models.oSearch,a[b])}function zb(a){R(a,"orderable","bSortable");R(a,"orderData","aDataSort");R(a,"orderSequence","asSorting");R(a,"orderDataType","sortDataType");var b=a.aDataSort;"number"!==typeof b||Array.isArray(b)||(a.aDataSort=[b])}function Ab(a){if(!u.__browser){var b={};u.__browser=b;var c=k("<div/>").css({position:"fixed",top:0,left:-1*k(y).scrollLeft(),height:1,
|
25 |
+
width:1,overflow:"hidden"}).append(k("<div/>").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(k("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}k.extend(a.oBrowser,u.__browser);a.oScroll.iBarWidth=u.__browser.barWidth}
|
26 |
+
function Bb(a,b,c,d,e,f){var g=!1;if(c!==q){var h=c;g=!0}for(;d!==e;)a.hasOwnProperty(d)&&(h=g?b(h,a[d],d,a):a[d],g=!0,d+=f);return h}function Wa(a,b){var c=u.defaults.column,d=a.aoColumns.length;c=k.extend({},u.models.oColumn,c,{nTh:b?b:z.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=k.extend({},u.models.oSearch,c[d]);Da(a,d,k(b).data())}function Da(a,b,c){b=a.aoColumns[b];
|
27 |
+
var d=a.oClasses,e=k(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var f=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);f&&(b.sWidthOrig=f[1])}c!==q&&null!==c&&(zb(c),O(u.defaults.column,c,!0),c.mDataProp===q||c.mData||(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),c.sClass&&e.addClass(c.sClass),k.extend(b,c),V(b,c,"sWidth","sWidthOrig"),c.iDataSort!==q&&(b.aDataSort=[c.iDataSort]),V(b,c,"aDataSort"));var g=b.mData,h=ia(g),
|
28 |
+
l=b.mRender?ia(b.mRender):null;c=function(n){return"string"===typeof n&&-1!==n.indexOf("@")};b._bAttrSrc=k.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(n,m,p){var t=h(n,m,q,p);return l&&m?l(t,m,n,p):t};b.fnSetData=function(n,m,p){return da(g)(n,m,p)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==k.inArray("asc",b.asSorting);c=-1!==k.inArray("desc",b.asSorting);b.bSortable&&(a||c)?a&&!c?
|
29 |
+
(b.sSortingClass=d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI):(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI="")}function ra(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Xa(a);for(var c=0,d=b.length;c<d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;""===b.sY&&""===b.sX||Ea(a);H(a,null,"column-sizing",[a])}function sa(a,b){a=Fa(a,"bVisible");
|
30 |
+
return"number"===typeof a[b]?a[b]:null}function ta(a,b){a=Fa(a,"bVisible");b=k.inArray(b,a);return-1!==b?b:null}function na(a){var b=0;k.each(a.aoColumns,function(c,d){d.bVisible&&"none"!==k(d.nTh).css("display")&&b++});return b}function Fa(a,b){var c=[];k.map(a.aoColumns,function(d,e){d[b]&&c.push(e)});return c}function Ya(a){var b=a.aoColumns,c=a.aoData,d=u.ext.type.detect,e,f,g;var h=0;for(e=b.length;h<e;h++){var l=b[h];var n=[];if(!l.sType&&l._sManualType)l.sType=l._sManualType;else if(!l.sType){var m=
|
31 |
+
0;for(f=d.length;m<f;m++){var p=0;for(g=c.length;p<g;p++){n[p]===q&&(n[p]=S(a,p,h,"type"));var t=d[m](n[p],a);if(!t&&m!==d.length-1)break;if("html"===t)break}if(t){l.sType=t;break}}l.sType||(l.sType="string")}}}function Cb(a,b,c,d){var e,f,g,h=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){var l=b[e];var n=l.targets!==q?l.targets:l.aTargets;Array.isArray(n)||(n=[n]);var m=0;for(f=n.length;m<f;m++)if("number"===typeof n[m]&&0<=n[m]){for(;h.length<=n[m];)Wa(a);d(n[m],l)}else if("number"===typeof n[m]&&
|
32 |
+
0>n[m])d(h.length+n[m],l);else if("string"===typeof n[m]){var p=0;for(g=h.length;p<g;p++)("_all"==n[m]||k(h[p].nTh).hasClass(n[m]))&&d(p,l)}}if(c)for(e=0,a=c.length;e<a;e++)d(e,c[e])}function ea(a,b,c,d){var e=a.aoData.length,f=k.extend(!0,{},u.models.oRow,{src:c?"dom":"data",idx:e});f._aData=b;a.aoData.push(f);for(var g=a.aoColumns,h=0,l=g.length;h<l;h++)g[h].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==q&&(a.aIds[b]=f);!c&&a.oFeatures.bDeferRender||Za(a,e,c,d);return e}function Ga(a,
|
33 |
+
b){var c;b instanceof k||(b=k(b));return b.map(function(d,e){c=$a(a,e);return ea(a,c.data,e,c.cells)})}function S(a,b,c,d){var e=a.iDraw,f=a.aoColumns[c],g=a.aoData[b]._aData,h=f.sDefaultContent,l=f.fnGetData(g,d,{settings:a,row:b,col:c});if(l===q)return a.iDrawError!=e&&null===h&&(aa(a,0,"Requested unknown parameter "+("function"==typeof f.mData?"{function}":"'"+f.mData+"'")+" for row "+b+", column "+c,4),a.iDrawError=e),h;if((l===g||null===l)&&null!==h&&d!==q)l=h;else if("function"===typeof l)return l.call(g);
|
34 |
+
return null===l&&"display"==d?"":l}function Db(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d,{settings:a,row:b,col:c})}function ab(a){return k.map(a.match(/(\\.|[^\.])+/g)||[""],function(b){return b.replace(/\\\./g,".")})}function ia(a){if(k.isPlainObject(a)){var b={};k.each(a,function(d,e){e&&(b[d]=ia(e))});return function(d,e,f,g){var h=b[e]||b._;return h!==q?h(d,e,f,g):d}}if(null===a)return function(d){return d};if("function"===typeof a)return function(d,e,f,g){return a(d,e,f,g)};if("string"!==
|
35 |
+
typeof a||-1===a.indexOf(".")&&-1===a.indexOf("[")&&-1===a.indexOf("("))return function(d,e){return d[a]};var c=function(d,e,f){if(""!==f){var g=ab(f);for(var h=0,l=g.length;h<l;h++){f=g[h].match(ua);var n=g[h].match(oa);if(f){g[h]=g[h].replace(ua,"");""!==g[h]&&(d=d[g[h]]);n=[];g.splice(0,h+1);g=g.join(".");if(Array.isArray(d))for(h=0,l=d.length;h<l;h++)n.push(c(d[h],e,g));d=f[0].substring(1,f[0].length-1);d=""===d?n:n.join(d);break}else if(n){g[h]=g[h].replace(oa,"");d=d[g[h]]();continue}if(null===
|
36 |
+
d||d[g[h]]===q)return q;d=d[g[h]]}}return d};return function(d,e){return c(d,e,a)}}function da(a){if(k.isPlainObject(a))return da(a._);if(null===a)return function(){};if("function"===typeof a)return function(c,d,e){a(c,"set",d,e)};if("string"!==typeof a||-1===a.indexOf(".")&&-1===a.indexOf("[")&&-1===a.indexOf("("))return function(c,d){c[a]=d};var b=function(c,d,e){e=ab(e);var f=e[e.length-1];for(var g,h,l=0,n=e.length-1;l<n;l++){if("__proto__"===e[l]||"constructor"===e[l])throw Error("Cannot set prototype values");
|
37 |
+
g=e[l].match(ua);h=e[l].match(oa);if(g){e[l]=e[l].replace(ua,"");c[e[l]]=[];f=e.slice();f.splice(0,l+1);g=f.join(".");if(Array.isArray(d))for(h=0,n=d.length;h<n;h++)f={},b(f,d[h],g),c[e[l]].push(f);else c[e[l]]=d;return}h&&(e[l]=e[l].replace(oa,""),c=c[e[l]](d));if(null===c[e[l]]||c[e[l]]===q)c[e[l]]={};c=c[e[l]]}if(f.match(oa))c[f.replace(oa,"")](d);else c[f.replace(ua,"")]=d};return function(c,d){return b(c,d,a)}}function bb(a){return T(a.aoData,"_aData")}function Ha(a){a.aoData.length=0;a.aiDisplayMaster.length=
|
38 |
+
0;a.aiDisplay.length=0;a.aIds={}}function Ia(a,b,c){for(var d=-1,e=0,f=a.length;e<f;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===q&&a.splice(d,1)}function va(a,b,c,d){var e=a.aoData[b],f,g=function(l,n){for(;l.childNodes.length;)l.removeChild(l.firstChild);l.innerHTML=S(a,b,n,"display")};if("dom"!==c&&(c&&"auto"!==c||"dom"!==e.src)){var h=e.anCells;if(h)if(d!==q)g(h[d],d);else for(c=0,f=h.length;c<f;c++)g(h[c],c)}else e._aData=$a(a,e,d,d===q?q:e._aData).data;e._aSortData=null;e._aFilterData=null;g=
|
39 |
+
a.aoColumns;if(d!==q)g[d].sType=null;else{c=0;for(f=g.length;c<f;c++)g[c].sType=null;cb(a,e)}}function $a(a,b,c,d){var e=[],f=b.firstChild,g,h=0,l,n=a.aoColumns,m=a._rowReadObject;d=d!==q?d:m?{}:[];var p=function(x,r){if("string"===typeof x){var A=x.indexOf("@");-1!==A&&(A=x.substring(A+1),da(x)(d,r.getAttribute(A)))}},t=function(x){if(c===q||c===h)g=n[h],l=x.innerHTML.trim(),g&&g._bAttrSrc?(da(g.mData._)(d,l),p(g.mData.sort,x),p(g.mData.type,x),p(g.mData.filter,x)):m?(g._setter||(g._setter=da(g.mData)),
|
40 |
+
g._setter(d,l)):d[h]=l;h++};if(f)for(;f;){var v=f.nodeName.toUpperCase();if("TD"==v||"TH"==v)t(f),e.push(f);f=f.nextSibling}else for(e=b.anCells,f=0,v=e.length;f<v;f++)t(e[f]);(b=b.firstChild?b:b.nTr)&&(b=b.getAttribute("id"))&&da(a.rowId)(d,b);return{data:d,cells:e}}function Za(a,b,c,d){var e=a.aoData[b],f=e._aData,g=[],h,l;if(null===e.nTr){var n=c||z.createElement("tr");e.nTr=n;e.anCells=g;n._DT_RowIndex=b;cb(a,e);var m=0;for(h=a.aoColumns.length;m<h;m++){var p=a.aoColumns[m];e=(l=c?!1:!0)?z.createElement(p.sCellType):
|
41 |
+
d[m];e._DT_CellIndex={row:b,column:m};g.push(e);if(l||!(!p.mRender&&p.mData===m||k.isPlainObject(p.mData)&&p.mData._===m+".display"))e.innerHTML=S(a,b,m,"display");p.sClass&&(e.className+=" "+p.sClass);p.bVisible&&!c?n.appendChild(e):!p.bVisible&&c&&e.parentNode.removeChild(e);p.fnCreatedCell&&p.fnCreatedCell.call(a.oInstance,e,S(a,b,m),f,b,m)}H(a,"aoRowCreatedCallback",null,[n,f,b,g])}}function cb(a,b){var c=b.nTr,d=b._aData;if(c){if(a=a.rowIdFn(d))c.id=a;d.DT_RowClass&&(a=d.DT_RowClass.split(" "),
|
42 |
+
b.__rowc=b.__rowc?Ja(b.__rowc.concat(a)):a,k(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));d.DT_RowAttr&&k(c).attr(d.DT_RowAttr);d.DT_RowData&&k(c).data(d.DT_RowData)}}function Eb(a){var b,c,d=a.nTHead,e=a.nTFoot,f=0===k("th, td",d).length,g=a.oClasses,h=a.aoColumns;f&&(c=k("<tr/>").appendTo(d));var l=0;for(b=h.length;l<b;l++){var n=h[l];var m=k(n.nTh).addClass(n.sClass);f&&m.appendTo(c);a.oFeatures.bSort&&(m.addClass(n.sSortingClass),!1!==n.bSortable&&(m.attr("tabindex",a.iTabIndex).attr("aria-controls",
|
43 |
+
a.sTableId),db(a,n.nTh,l)));n.sTitle!=m[0].innerHTML&&m.html(n.sTitle);eb(a,"header")(a,m,n,g)}f&&wa(a.aoHeader,d);k(d).children("tr").attr("role","row");k(d).children("tr").children("th, td").addClass(g.sHeaderTH);k(e).children("tr").children("th, td").addClass(g.sFooterTH);if(null!==e)for(a=a.aoFooter[0],l=0,b=a.length;l<b;l++)n=h[l],n.nTf=a[l].cell,n.sClass&&k(n.nTf).addClass(n.sClass)}function xa(a,b,c){var d,e,f=[],g=[],h=a.aoColumns.length;if(b){c===q&&(c=!1);var l=0;for(d=b.length;l<d;l++){f[l]=
|
44 |
+
b[l].slice();f[l].nTr=b[l].nTr;for(e=h-1;0<=e;e--)a.aoColumns[e].bVisible||c||f[l].splice(e,1);g.push([])}l=0;for(d=f.length;l<d;l++){if(a=f[l].nTr)for(;e=a.firstChild;)a.removeChild(e);e=0;for(b=f[l].length;e<b;e++){var n=h=1;if(g[l][e]===q){a.appendChild(f[l][e].cell);for(g[l][e]=1;f[l+h]!==q&&f[l][e].cell==f[l+h][e].cell;)g[l+h][e]=1,h++;for(;f[l][e+n]!==q&&f[l][e].cell==f[l][e+n].cell;){for(c=0;c<h;c++)g[l+c][e+n]=1;n++}k(f[l][e].cell).attr("rowspan",h).attr("colspan",n)}}}}}function fa(a){var b=
|
45 |
+
H(a,"aoPreDrawCallback","preDraw",[a]);if(-1!==k.inArray(!1,b))U(a,!1);else{b=[];var c=0,d=a.asStripeClasses,e=d.length,f=a.oLanguage,g=a.iInitDisplayStart,h="ssp"==P(a),l=a.aiDisplay;a.bDrawing=!0;g!==q&&-1!==g&&(a._iDisplayStart=h?g:g>=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=-1);g=a._iDisplayStart;var n=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,U(a,!1);else if(!h)a.iDraw++;else if(!a.bDestroying&&!Fb(a))return;if(0!==l.length)for(f=h?a.aoData.length:n,h=h?0:g;h<f;h++){var m=
|
46 |
+
l[h],p=a.aoData[m];null===p.nTr&&Za(a,m);var t=p.nTr;if(0!==e){var v=d[c%e];p._sRowStripe!=v&&(k(t).removeClass(p._sRowStripe).addClass(v),p._sRowStripe=v)}H(a,"aoRowCallback",null,[t,p._aData,c,h,m]);b.push(t);c++}else c=f.sZeroRecords,1==a.iDraw&&"ajax"==P(a)?c=f.sLoadingRecords:f.sEmptyTable&&0===a.fnRecordsTotal()&&(c=f.sEmptyTable),b[0]=k("<tr/>",{"class":e?d[0]:""}).append(k("<td />",{valign:"top",colSpan:na(a),"class":a.oClasses.sRowEmpty}).html(c))[0];H(a,"aoHeaderCallback","header",[k(a.nTHead).children("tr")[0],
|
47 |
+
bb(a),g,n,l]);H(a,"aoFooterCallback","footer",[k(a.nTFoot).children("tr")[0],bb(a),g,n,l]);d=k(a.nTBody);d.children().detach();d.append(k(b));H(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function ja(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&Gb(a);d?ya(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;fa(a);a._drawHold=!1}function Hb(a){var b=a.oClasses,c=k(a.nTable);c=k("<div/>").insertBefore(c);var d=a.oFeatures,
|
48 |
+
e=k("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var f=a.sDom.split(""),g,h,l,n,m,p,t=0;t<f.length;t++){g=null;h=f[t];if("<"==h){l=k("<div/>")[0];n=f[t+1];if("'"==n||'"'==n){m="";for(p=2;f[t+p]!=n;)m+=f[t+p],p++;"H"==m?m=b.sJUIHeader:"F"==m&&(m=b.sJUIFooter);-1!=m.indexOf(".")?(n=m.split("."),l.id=n[0].substr(1,n[0].length-1),l.className=n[1]):"#"==m.charAt(0)?l.id=m.substr(1,
|
49 |
+
m.length-1):l.className=m;t+=p}e.append(l);e=k(l)}else if(">"==h)e=e.parent();else if("l"==h&&d.bPaginate&&d.bLengthChange)g=Ib(a);else if("f"==h&&d.bFilter)g=Jb(a);else if("r"==h&&d.bProcessing)g=Kb(a);else if("t"==h)g=Lb(a);else if("i"==h&&d.bInfo)g=Mb(a);else if("p"==h&&d.bPaginate)g=Nb(a);else if(0!==u.ext.feature.length)for(l=u.ext.feature,p=0,n=l.length;p<n;p++)if(h==l[p].cFeature){g=l[p].fnInit(a);break}g&&(l=a.aanFeatures,l[h]||(l[h]=[]),l[h].push(g),e.append(g))}c.replaceWith(e);a.nHolding=
|
50 |
+
null}function wa(a,b){b=k(b).children("tr");var c,d,e;a.splice(0,a.length);var f=0;for(e=b.length;f<e;f++)a.push([]);f=0;for(e=b.length;f<e;f++){var g=b[f];for(c=g.firstChild;c;){if("TD"==c.nodeName.toUpperCase()||"TH"==c.nodeName.toUpperCase()){var h=1*c.getAttribute("colspan");var l=1*c.getAttribute("rowspan");h=h&&0!==h&&1!==h?h:1;l=l&&0!==l&&1!==l?l:1;var n=0;for(d=a[f];d[n];)n++;var m=n;var p=1===h?!0:!1;for(d=0;d<h;d++)for(n=0;n<l;n++)a[f+n][m+d]={cell:c,unique:p},a[f+n].nTr=g}c=c.nextSibling}}}
|
51 |
+
function Ka(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],wa(c,b)));b=0;for(var e=c.length;b<e;b++)for(var f=0,g=c[b].length;f<g;f++)!c[b][f].unique||d[f]&&a.bSortCellsTop||(d[f]=c[b][f].cell);return d}function La(a,b,c){H(a,"aoServerParams","serverParams",[b]);if(b&&Array.isArray(b)){var d={},e=/(.*?)\[\]$/;k.each(b,function(m,p){(m=p.name.match(e))?(m=m[0],d[m]||(d[m]=[]),d[m].push(p.value)):d[p.name]=p.value});b=d}var f=a.ajax,g=a.oInstance,h=function(m){H(a,null,"xhr",[a,m,a.jqXHR]);c(m)};if(k.isPlainObject(f)&&
|
52 |
+
f.data){var l=f.data;var n="function"===typeof l?l(b,a):l;b="function"===typeof l&&n?n:k.extend(!0,b,n);delete f.data}n={data:b,success:function(m){var p=m.error||m.sError;p&&aa(a,0,p);a.json=m;h(m)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(m,p,t){t=H(a,null,"xhr",[a,null,a.jqXHR]);-1===k.inArray(!0,t)&&("parsererror"==p?aa(a,0,"Invalid JSON response",1):4===m.readyState&&aa(a,0,"Ajax error",7));U(a,!1)}};a.oAjaxData=b;H(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(g,
|
53 |
+
a.sAjaxSource,k.map(b,function(m,p){return{name:p,value:m}}),h,a):a.sAjaxSource||"string"===typeof f?a.jqXHR=k.ajax(k.extend(n,{url:f||a.sAjaxSource})):"function"===typeof f?a.jqXHR=f.call(g,b,h,a):(a.jqXHR=k.ajax(k.extend(n,f)),f.data=l)}function Fb(a){return a.bAjaxDataGet?(a.iDraw++,U(a,!0),La(a,Ob(a),function(b){Pb(a,b)}),!1):!0}function Ob(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,f=a.aoPreSearchCols,g=[],h=pa(a);var l=a._iDisplayStart;var n=!1!==d.bPaginate?a._iDisplayLength:
|
54 |
+
-1;var m=function(x,r){g.push({name:x,value:r})};m("sEcho",a.iDraw);m("iColumns",c);m("sColumns",T(b,"sName").join(","));m("iDisplayStart",l);m("iDisplayLength",n);var p={draw:a.iDraw,columns:[],order:[],start:l,length:n,search:{value:e.sSearch,regex:e.bRegex}};for(l=0;l<c;l++){var t=b[l];var v=f[l];n="function"==typeof t.mData?"function":t.mData;p.columns.push({data:n,name:t.sName,searchable:t.bSearchable,orderable:t.bSortable,search:{value:v.sSearch,regex:v.bRegex}});m("mDataProp_"+l,n);d.bFilter&&
|
55 |
+
(m("sSearch_"+l,v.sSearch),m("bRegex_"+l,v.bRegex),m("bSearchable_"+l,t.bSearchable));d.bSort&&m("bSortable_"+l,t.bSortable)}d.bFilter&&(m("sSearch",e.sSearch),m("bRegex",e.bRegex));d.bSort&&(k.each(h,function(x,r){p.order.push({column:r.col,dir:r.dir});m("iSortCol_"+x,r.col);m("sSortDir_"+x,r.dir)}),m("iSortingCols",h.length));b=u.ext.legacy.ajax;return null===b?a.sAjaxSource?g:p:b?g:p}function Pb(a,b){var c=function(g,h){return b[g]!==q?b[g]:b[h]},d=Ma(a,b),e=c("sEcho","draw"),f=c("iTotalRecords",
|
56 |
+
"recordsTotal");c=c("iTotalDisplayRecords","recordsFiltered");if(e!==q){if(1*e<a.iDraw)return;a.iDraw=1*e}Ha(a);a._iRecordsTotal=parseInt(f,10);a._iRecordsDisplay=parseInt(c,10);e=0;for(f=d.length;e<f;e++)ea(a,d[e]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;fa(a);a._bInitComplete||Na(a,b);a.bAjaxDataGet=!0;U(a,!1)}function Ma(a,b){a=k.isPlainObject(a.ajax)&&a.ajax.dataSrc!==q?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===a?b.aaData||b[a]:""!==a?ia(a)(b):b}function Jb(a){var b=a.oClasses,
|
57 |
+
c=a.sTableId,d=a.oLanguage,e=a.oPreviousSearch,f=a.aanFeatures,g='<input type="search" class="'+b.sFilterInput+'"/>',h=d.sSearch;h=h.match(/_INPUT_/)?h.replace("_INPUT_",g):h+g;b=k("<div/>",{id:f.f?null:c+"_filter","class":b.sFilter}).append(k("<label/>").append(h));var l=function(){var m=this.value?this.value:"";m!=e.sSearch&&(ya(a,{sSearch:m,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,fa(a))};f=null!==a.searchDelay?a.searchDelay:"ssp"===P(a)?400:0;var n=
|
58 |
+
k("input",b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT",f?fb(l,f):l).on("mouseup",function(m){setTimeout(function(){l.call(n[0])},10)}).on("keypress.DT",function(m){if(13==m.keyCode)return!1}).attr("aria-controls",c);k(a.nTable).on("search.dt.DT",function(m,p){if(a===p)try{n[0]!==z.activeElement&&n.val(e.sSearch)}catch(t){}});return b[0]}function ya(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,f=function(h){d.sSearch=h.sSearch;d.bRegex=
|
59 |
+
h.bRegex;d.bSmart=h.bSmart;d.bCaseInsensitive=h.bCaseInsensitive},g=function(h){return h.bEscapeRegex!==q?!h.bEscapeRegex:h.bRegex};Ya(a);if("ssp"!=P(a)){Qb(a,b.sSearch,c,g(b),b.bSmart,b.bCaseInsensitive);f(b);for(b=0;b<e.length;b++)Rb(a,e[b].sSearch,b,g(e[b]),e[b].bSmart,e[b].bCaseInsensitive);Sb(a)}else f(b);a.bFiltered=!0;H(a,null,"search",[a])}function Sb(a){for(var b=u.ext.search,c=a.aiDisplay,d,e,f=0,g=b.length;f<g;f++){for(var h=[],l=0,n=c.length;l<n;l++)e=c[l],d=a.aoData[e],b[f](a,d._aFilterData,
|
60 |
+
e,d._aData,l)&&h.push(e);c.length=0;k.merge(c,h)}}function Rb(a,b,c,d,e,f){if(""!==b){var g=[],h=a.aiDisplay;d=gb(b,d,e,f);for(e=0;e<h.length;e++)b=a.aoData[h[e]]._aFilterData[c],d.test(b)&&g.push(h[e]);a.aiDisplay=g}}function Qb(a,b,c,d,e,f){e=gb(b,d,e,f);var g=a.oPreviousSearch.sSearch,h=a.aiDisplayMaster;f=[];0!==u.ext.search.length&&(c=!0);var l=Tb(a);if(0>=b.length)a.aiDisplay=h.slice();else{if(l||c||d||g.length>b.length||0!==b.indexOf(g)||a.bSorted)a.aiDisplay=h.slice();b=a.aiDisplay;for(c=
|
61 |
+
0;c<b.length;c++)e.test(a.aoData[b[c]]._sFilterRow)&&f.push(b[c]);a.aiDisplay=f}}function gb(a,b,c,d){a=b?a:hb(a);c&&(a="^(?=.*?"+k.map(a.match(/"[^"]+"|[^ ]+/g)||[""],function(e){if('"'===e.charAt(0)){var f=e.match(/^"(.*)"$/);e=f?f[1]:e}return e.replace('"',"")}).join(")(?=.*?")+").*$");return new RegExp(a,d?"i":"")}function Tb(a){var b=a.aoColumns,c,d,e=u.ext.type.search;var f=!1;var g=0;for(c=a.aoData.length;g<c;g++){var h=a.aoData[g];if(!h._aFilterData){var l=[];var n=0;for(d=b.length;n<d;n++){f=
|
62 |
+
b[n];if(f.bSearchable){var m=S(a,g,n,"filter");e[f.sType]&&(m=e[f.sType](m));null===m&&(m="");"string"!==typeof m&&m.toString&&(m=m.toString())}else m="";m.indexOf&&-1!==m.indexOf("&")&&(Oa.innerHTML=m,m=rc?Oa.textContent:Oa.innerText);m.replace&&(m=m.replace(/[\r\n\u2028]/g,""));l.push(m)}h._aFilterData=l;h._sFilterRow=l.join(" ");f=!0}}return f}function Ub(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex,caseInsensitive:a.bCaseInsensitive}}function Vb(a){return{sSearch:a.search,bSmart:a.smart,
|
63 |
+
bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function Mb(a){var b=a.sTableId,c=a.aanFeatures.i,d=k("<div/>",{"class":a.oClasses.sInfo,id:c?null:b+"_info"});c||(a.aoDrawCallback.push({fn:Wb,sName:"information"}),d.attr("role","status").attr("aria-live","polite"),k(a.nTable).attr("aria-describedby",b+"_info"));return d[0]}function Wb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+1,e=a.fnDisplayEnd(),f=a.fnRecordsTotal(),g=a.fnRecordsDisplay(),h=g?c.sInfo:c.sInfoEmpty;
|
64 |
+
g!==f&&(h+=" "+c.sInfoFiltered);h+=c.sInfoPostFix;h=Xb(a,h);c=c.fnInfoCallback;null!==c&&(h=c.call(a.oInstance,a,d,e,f,g,h));k(b).html(h)}}function Xb(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength,f=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a,f)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(f/
|
65 |
+
e)))}function za(a){var b=a.iInitDisplayStart,c=a.aoColumns;var d=a.oFeatures;var e=a.bDeferLoading;if(a.bInitialised){Hb(a);Eb(a);xa(a,a.aoHeader);xa(a,a.aoFooter);U(a,!0);d.bAutoWidth&&Xa(a);var f=0;for(d=c.length;f<d;f++){var g=c[f];g.sWidth&&(g.nTh.style.width=K(g.sWidth))}H(a,null,"preInit",[a]);ja(a);c=P(a);if("ssp"!=c||e)"ajax"==c?La(a,[],function(h){var l=Ma(a,h);for(f=0;f<l.length;f++)ea(a,l[f]);a.iInitDisplayStart=b;ja(a);U(a,!1);Na(a,h)},a):(U(a,!1),Na(a))}else setTimeout(function(){za(a)},
|
66 |
+
200)}function Na(a,b){a._bInitComplete=!0;(b||a.oInit.aaData)&&ra(a);H(a,null,"plugin-init",[a,b]);H(a,"aoInitComplete","init",[a,b])}function ib(a,b){b=parseInt(b,10);a._iDisplayLength=b;jb(a);H(a,null,"length",[a,b])}function Ib(a){var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=Array.isArray(d[0]),f=e?d[0]:d;d=e?d[1]:d;e=k("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect});for(var g=0,h=f.length;g<h;g++)e[0][g]=new Option("number"===typeof d[g]?a.fnFormatNumber(d[g]):d[g],
|
67 |
+
f[g]);var l=k("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(l[0].id=c+"_length");l.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",e[0].outerHTML));k("select",l).val(a._iDisplayLength).on("change.DT",function(n){ib(a,k(this).val());fa(a)});k(a.nTable).on("length.dt.DT",function(n,m,p){a===m&&k("select",l).val(p)});return l[0]}function Nb(a){var b=a.sPaginationType,c=u.ext.pager[b],d="function"===typeof c,e=function(g){fa(g)};b=k("<div/>").addClass(a.oClasses.sPaging+b)[0];
|
68 |
+
var f=a.aanFeatures;d||c.fnInit(a,b,e);f.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(g){if(d){var h=g._iDisplayStart,l=g._iDisplayLength,n=g.fnRecordsDisplay(),m=-1===l;h=m?0:Math.ceil(h/l);l=m?1:Math.ceil(n/l);n=c(h,l);var p;m=0;for(p=f.p.length;m<p;m++)eb(g,"pageButton")(g,f.p[m],m,n,h,l)}else c.fnUpdate(g,e)},sName:"pagination"}));return b}function kb(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,f=a.fnRecordsDisplay();0===f||-1===e?d=0:"number"===typeof b?(d=b*e,d>f&&
|
69 |
+
(d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<f&&(d+=e):"last"==b?d=Math.floor((f-1)/e)*e:aa(a,0,"Unknown paging action: "+b,5);b=a._iDisplayStart!==d;a._iDisplayStart=d;b&&(H(a,null,"page",[a]),c&&fa(a));return b}function Kb(a){return k("<div/>",{id:a.aanFeatures.r?null:a.sTableId+"_processing","class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function U(a,b){a.oFeatures.bProcessing&&k(a.aanFeatures.r).css("display",b?"block":"none");
|
70 |
+
H(a,null,"processing",[a,b])}function Lb(a){var b=k(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,f=a.oClasses,g=b.children("caption"),h=g.length?g[0]._captionSide:null,l=k(b[0].cloneNode(!1)),n=k(b[0].cloneNode(!1)),m=b.children("tfoot");m.length||(m=null);l=k("<div/>",{"class":f.sScrollWrapper}).append(k("<div/>",{"class":f.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?d?K(d):null:"100%"}).append(k("<div/>",
|
71 |
+
{"class":f.sScrollHeadInner}).css({"box-sizing":"content-box",width:c.sXInner||"100%"}).append(l.removeAttr("id").css("margin-left",0).append("top"===h?g:null).append(b.children("thead"))))).append(k("<div/>",{"class":f.sScrollBody}).css({position:"relative",overflow:"auto",width:d?K(d):null}).append(b));m&&l.append(k("<div/>",{"class":f.sScrollFoot}).css({overflow:"hidden",border:0,width:d?d?K(d):null:"100%"}).append(k("<div/>",{"class":f.sScrollFootInner}).append(n.removeAttr("id").css("margin-left",
|
72 |
+
0).append("bottom"===h?g:null).append(b.children("tfoot")))));b=l.children();var p=b[0];f=b[1];var t=m?b[2]:null;if(d)k(f).on("scroll.DT",function(v){v=this.scrollLeft;p.scrollLeft=v;m&&(t.scrollLeft=v)});k(f).css("max-height",e);c.bCollapse||k(f).css("height",e);a.nScrollHead=p;a.nScrollBody=f;a.nScrollFoot=t;a.aoDrawCallback.push({fn:Ea,sName:"scrolling"});return l[0]}function Ea(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY;b=b.iBarWidth;var f=k(a.nScrollHead),g=f[0].style,h=f.children("div"),l=
|
73 |
+
h[0].style,n=h.children("table");h=a.nScrollBody;var m=k(h),p=h.style,t=k(a.nScrollFoot).children("div"),v=t.children("table"),x=k(a.nTHead),r=k(a.nTable),A=r[0],E=A.style,I=a.nTFoot?k(a.nTFoot):null,W=a.oBrowser,M=W.bScrollOversize,C=T(a.aoColumns,"nTh"),B=[],ba=[],X=[],lb=[],Aa,Yb=function(F){F=F.style;F.paddingTop="0";F.paddingBottom="0";F.borderTopWidth="0";F.borderBottomWidth="0";F.height=0};var ha=h.scrollHeight>h.clientHeight;if(a.scrollBarVis!==ha&&a.scrollBarVis!==q)a.scrollBarVis=ha,ra(a);
|
74 |
+
else{a.scrollBarVis=ha;r.children("thead, tfoot").remove();if(I){var ka=I.clone().prependTo(r);var la=I.find("tr");ka=ka.find("tr")}var mb=x.clone().prependTo(r);x=x.find("tr");ha=mb.find("tr");mb.find("th, td").removeAttr("tabindex");c||(p.width="100%",f[0].style.width="100%");k.each(Ka(a,mb),function(F,Y){Aa=sa(a,F);Y.style.width=a.aoColumns[Aa].sWidth});I&&Z(function(F){F.style.width=""},ka);f=r.outerWidth();""===c?(E.width="100%",M&&(r.find("tbody").height()>h.offsetHeight||"scroll"==m.css("overflow-y"))&&
|
75 |
+
(E.width=K(r.outerWidth()-b)),f=r.outerWidth()):""!==d&&(E.width=K(d),f=r.outerWidth());Z(Yb,ha);Z(function(F){X.push(F.innerHTML);B.push(K(k(F).css("width")))},ha);Z(function(F,Y){-1!==k.inArray(F,C)&&(F.style.width=B[Y])},x);k(ha).height(0);I&&(Z(Yb,ka),Z(function(F){lb.push(F.innerHTML);ba.push(K(k(F).css("width")))},ka),Z(function(F,Y){F.style.width=ba[Y]},la),k(ka).height(0));Z(function(F,Y){F.innerHTML='<div class="dataTables_sizing">'+X[Y]+"</div>";F.childNodes[0].style.height="0";F.childNodes[0].style.overflow=
|
76 |
+
"hidden";F.style.width=B[Y]},ha);I&&Z(function(F,Y){F.innerHTML='<div class="dataTables_sizing">'+lb[Y]+"</div>";F.childNodes[0].style.height="0";F.childNodes[0].style.overflow="hidden";F.style.width=ba[Y]},ka);r.outerWidth()<f?(la=h.scrollHeight>h.offsetHeight||"scroll"==m.css("overflow-y")?f+b:f,M&&(h.scrollHeight>h.offsetHeight||"scroll"==m.css("overflow-y"))&&(E.width=K(la-b)),""!==c&&""===d||aa(a,1,"Possible column misalignment",6)):la="100%";p.width=K(la);g.width=K(la);I&&(a.nScrollFoot.style.width=
|
77 |
+
K(la));!e&&M&&(p.height=K(A.offsetHeight+b));c=r.outerWidth();n[0].style.width=K(c);l.width=K(c);d=r.height()>h.clientHeight||"scroll"==m.css("overflow-y");e="padding"+(W.bScrollbarLeft?"Left":"Right");l[e]=d?b+"px":"0px";I&&(v[0].style.width=K(c),t[0].style.width=K(c),t[0].style[e]=d?b+"px":"0px");r.children("colgroup").insertBefore(r.children("thead"));m.trigger("scroll");!a.bSorted&&!a.bFiltered||a._drawHold||(h.scrollTop=0)}}function Z(a,b,c){for(var d=0,e=0,f=b.length,g,h;e<f;){g=b[e].firstChild;
|
78 |
+
for(h=c?c[e].firstChild:null;g;)1===g.nodeType&&(c?a(g,h,d):a(g,d),d++),g=g.nextSibling,h=c?h.nextSibling:null;e++}}function Xa(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll,e=d.sY,f=d.sX,g=d.sXInner,h=c.length,l=Fa(a,"bVisible"),n=k("th",a.nTHead),m=b.getAttribute("width"),p=b.parentNode,t=!1,v,x=a.oBrowser;d=x.bScrollOversize;(v=b.style.width)&&-1!==v.indexOf("%")&&(m=v);for(v=0;v<l.length;v++){var r=c[l[v]];null!==r.sWidth&&(r.sWidth=Zb(r.sWidthOrig,p),t=!0)}if(d||!t&&!f&&!e&&h==na(a)&&h==n.length)for(v=
|
79 |
+
0;v<h;v++)l=sa(a,v),null!==l&&(c[l].sWidth=K(n.eq(v).width()));else{h=k(b).clone().css("visibility","hidden").removeAttr("id");h.find("tbody tr").remove();var A=k("<tr/>").appendTo(h.find("tbody"));h.find("thead, tfoot").remove();h.append(k(a.nTHead).clone()).append(k(a.nTFoot).clone());h.find("tfoot th, tfoot td").css("width","");n=Ka(a,h.find("thead")[0]);for(v=0;v<l.length;v++)r=c[l[v]],n[v].style.width=null!==r.sWidthOrig&&""!==r.sWidthOrig?K(r.sWidthOrig):"",r.sWidthOrig&&f&&k(n[v]).append(k("<div/>").css({width:r.sWidthOrig,
|
80 |
+
margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(v=0;v<l.length;v++)t=l[v],r=c[t],k($b(a,t)).clone(!1).append(r.sContentPadding).appendTo(A);k("[name]",h).removeAttr("name");r=k("<div/>").css(f||e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(h).appendTo(p);f&&g?h.width(g):f?(h.css("width","auto"),h.removeAttr("width"),h.width()<p.clientWidth&&m&&h.width(p.clientWidth)):e?h.width(p.clientWidth):m&&h.width(m);for(v=e=0;v<l.length;v++)p=k(n[v]),g=p.outerWidth()-
|
81 |
+
p.width(),p=x.bBounding?Math.ceil(n[v].getBoundingClientRect().width):p.outerWidth(),e+=p,c[l[v]].sWidth=K(p-g);b.style.width=K(e);r.remove()}m&&(b.style.width=K(m));!m&&!f||a._reszEvt||(b=function(){k(y).on("resize.DT-"+a.sInstance,fb(function(){ra(a)}))},d?setTimeout(b,1E3):b(),a._reszEvt=!0)}function Zb(a,b){if(!a)return 0;a=k("<div/>").css("width",K(a)).appendTo(b||z.body);b=a[0].offsetWidth;a.remove();return b}function $b(a,b){var c=ac(a,b);if(0>c)return null;var d=a.aoData[c];return d.nTr?d.anCells[b]:
|
82 |
+
k("<td/>").html(S(a,c,b,"display"))[0]}function ac(a,b){for(var c,d=-1,e=-1,f=0,g=a.aoData.length;f<g;f++)c=S(a,f,b,"display")+"",c=c.replace(sc,""),c=c.replace(/ /g," "),c.length>d&&(d=c.length,e=f);return e}function K(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function pa(a){var b=[],c=a.aoColumns;var d=a.aaSortingFixed;var e=k.isPlainObject(d);var f=[];var g=function(m){m.length&&!Array.isArray(m[0])?f.push(m):k.merge(f,m)};Array.isArray(d)&&g(d);
|
83 |
+
e&&d.pre&&g(d.pre);g(a.aaSorting);e&&d.post&&g(d.post);for(a=0;a<f.length;a++){var h=f[a][0];g=c[h].aDataSort;d=0;for(e=g.length;d<e;d++){var l=g[d];var n=c[l].sType||"string";f[a]._idx===q&&(f[a]._idx=k.inArray(f[a][1],c[l].asSorting));b.push({src:h,col:l,dir:f[a][1],index:f[a]._idx,type:n,formatter:u.ext.type.order[n+"-pre"]})}}return b}function Gb(a){var b,c=[],d=u.ext.type.order,e=a.aoData,f=0,g=a.aiDisplayMaster;Ya(a);var h=pa(a);var l=0;for(b=h.length;l<b;l++){var n=h[l];n.formatter&&f++;bc(a,
|
84 |
+
n.col)}if("ssp"!=P(a)&&0!==h.length){l=0;for(b=g.length;l<b;l++)c[g[l]]=l;f===h.length?g.sort(function(m,p){var t,v=h.length,x=e[m]._aSortData,r=e[p]._aSortData;for(t=0;t<v;t++){var A=h[t];var E=x[A.col];var I=r[A.col];E=E<I?-1:E>I?1:0;if(0!==E)return"asc"===A.dir?E:-E}E=c[m];I=c[p];return E<I?-1:E>I?1:0}):g.sort(function(m,p){var t,v=h.length,x=e[m]._aSortData,r=e[p]._aSortData;for(t=0;t<v;t++){var A=h[t];var E=x[A.col];var I=r[A.col];A=d[A.type+"-"+A.dir]||d["string-"+A.dir];E=A(E,I);if(0!==E)return E}E=
|
85 |
+
c[m];I=c[p];return E<I?-1:E>I?1:0})}a.bSorted=!0}function cc(a){var b=a.aoColumns,c=pa(a);a=a.oLanguage.oAria;for(var d=0,e=b.length;d<e;d++){var f=b[d];var g=f.asSorting;var h=f.sTitle.replace(/<.*?>/g,"");var l=f.nTh;l.removeAttribute("aria-sort");f.bSortable&&(0<c.length&&c[0].col==d?(l.setAttribute("aria-sort","asc"==c[0].dir?"ascending":"descending"),f=g[c[0].index+1]||g[0]):f=g[0],h+="asc"===f?a.sSortAscending:a.sSortDescending);l.setAttribute("aria-label",h)}}function nb(a,b,c,d){var e=a.aaSorting,
|
86 |
+
f=a.aoColumns[b].asSorting,g=function(h,l){var n=h._idx;n===q&&(n=k.inArray(h[1],f));return n+1<f.length?n+1:l?null:0};"number"===typeof e[0]&&(e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=k.inArray(b,T(e,"0")),-1!==c?(b=g(e[c],!0),null===b&&1===e.length&&(b=0),null===b?e.splice(c,1):(e[c][1]=f[b],e[c]._idx=b)):(e.push([b,f[0],0]),e[e.length-1]._idx=0)):e.length&&e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=f[b],e[0]._idx=b):(e.length=0,e.push([b,f[0]]),e[0]._idx=0);ja(a);"function"==typeof d&&d(a)}
|
87 |
+
function db(a,b,c,d){var e=a.aoColumns[c];ob(b,{},function(f){!1!==e.bSortable&&(a.oFeatures.bProcessing?(U(a,!0),setTimeout(function(){nb(a,c,f.shiftKey,d);"ssp"!==P(a)&&U(a,!1)},0)):nb(a,c,f.shiftKey,d))})}function Pa(a){var b=a.aLastSort,c=a.oClasses.sSortColumn,d=pa(a),e=a.oFeatures,f;if(e.bSort&&e.bSortClasses){e=0;for(f=b.length;e<f;e++){var g=b[e].src;k(T(a.aoData,"anCells",g)).removeClass(c+(2>e?e+1:3))}e=0;for(f=d.length;e<f;e++)g=d[e].src,k(T(a.aoData,"anCells",g)).addClass(c+(2>e?e+1:3))}a.aLastSort=
|
88 |
+
d}function bc(a,b){var c=a.aoColumns[b],d=u.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,ta(a,b)));for(var f,g=u.ext.type.order[c.sType+"-pre"],h=0,l=a.aoData.length;h<l;h++)if(c=a.aoData[h],c._aSortData||(c._aSortData=[]),!c._aSortData[b]||d)f=d?e[h]:S(a,h,b,"sort"),c._aSortData[b]=g?g(f):f}function Qa(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:k.extend(!0,[],a.aaSorting),search:Ub(a.oPreviousSearch),columns:k.map(a.aoColumns,
|
89 |
+
function(c,d){return{visible:c.bVisible,search:Ub(a.aoPreSearchCols[d])}})};H(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=b;a.fnStateSaveCallback.call(a.oInstance,a,b)}}function dc(a,b,c){var d,e,f=a.aoColumns;b=function(h){if(h&&h.time){var l=H(a,"aoStateLoadParams","stateLoadParams",[a,h]);if(-1===k.inArray(!1,l)&&(l=a.iStateDuration,!(0<l&&h.time<+new Date-1E3*l||h.columns&&f.length!==h.columns.length))){a.oLoadedState=k.extend(!0,{},h);h.start!==q&&(a._iDisplayStart=h.start,a.iInitDisplayStart=
|
90 |
+
h.start);h.length!==q&&(a._iDisplayLength=h.length);h.order!==q&&(a.aaSorting=[],k.each(h.order,function(n,m){a.aaSorting.push(m[0]>=f.length?[0,m[1]]:m)}));h.search!==q&&k.extend(a.oPreviousSearch,Vb(h.search));if(h.columns)for(d=0,e=h.columns.length;d<e;d++)l=h.columns[d],l.visible!==q&&(f[d].bVisible=l.visible),l.search!==q&&k.extend(a.aoPreSearchCols[d],Vb(l.search));H(a,"aoStateLoaded","stateLoaded",[a,h])}}c()};if(a.oFeatures.bStateSave){var g=a.fnStateLoadCallback.call(a.oInstance,a,b);g!==
|
91 |
+
q&&b(g)}else c()}function Ra(a){var b=u.settings;a=k.inArray(a,T(b,"nTable"));return-1!==a?b[a]:null}function aa(a,b,c,d){c="DataTables warning: "+(a?"table id="+a.sTableId+" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+d);if(b)y.console&&console.log&&console.log(c);else if(b=u.ext,b=b.sErrMode||b.errMode,a&&H(a,null,"error",[a,d,c]),"alert"==b)alert(c);else{if("throw"==b)throw Error(c);"function"==typeof b&&b(a,d,c)}}function V(a,b,c,d){Array.isArray(c)?
|
92 |
+
k.each(c,function(e,f){Array.isArray(f)?V(a,b,f[0],f[1]):V(a,b,f)}):(d===q&&(d=c),b[c]!==q&&(a[d]=b[c]))}function pb(a,b,c){var d;for(d in b)if(b.hasOwnProperty(d)){var e=b[d];k.isPlainObject(e)?(k.isPlainObject(a[d])||(a[d]={}),k.extend(!0,a[d],e)):c&&"data"!==d&&"aaData"!==d&&Array.isArray(e)?a[d]=e.slice():a[d]=e}return a}function ob(a,b,c){k(a).on("click.DT",b,function(d){k(a).trigger("blur");c(d)}).on("keypress.DT",b,function(d){13===d.which&&(d.preventDefault(),c(d))}).on("selectstart.DT",function(){return!1})}
|
93 |
+
function Q(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function H(a,b,c,d){var e=[];b&&(e=k.map(a[b].slice().reverse(),function(f,g){return f.fn.apply(a.oInstance,d)}));null!==c&&(b=k.Event(c+".dt"),k(a.nTable).trigger(b,d),e.push(b.result));return e}function jb(a){var b=a._iDisplayStart,c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function eb(a,b){a=a.renderer;var c=u.ext.renderer[b];return k.isPlainObject(a)&&a[b]?c[a[b]]||c._:"string"===typeof a?c[a]||
|
94 |
+
c._:c._}function P(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function Ba(a,b){var c=ec.numbers_length,d=Math.floor(c/2);b<=c?a=qa(0,b):a<=d?(a=qa(0,c-2),a.push("ellipsis"),a.push(b-1)):(a>=b-1-d?a=qa(b-(c-2),b):(a=qa(a-d+2,a+d-1),a.push("ellipsis"),a.push(b-1)),a.splice(0,0,"ellipsis"),a.splice(0,0,0));a.DT_el="span";return a}function Va(a){k.each({num:function(b){return Sa(b,a)},"num-fmt":function(b){return Sa(b,a,qb)},"html-num":function(b){return Sa(b,a,Ta)},"html-num-fmt":function(b){return Sa(b,
|
95 |
+
a,Ta,qb)}},function(b,c){L.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(L.type.search[b+a]=L.type.search.html)})}function fc(a){return function(){var b=[Ra(this[u.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return u.ext.internal[a].apply(this,b)}}var u=function(a){this.$=function(f,g){return this.api(!0).$(f,g)};this._=function(f,g){return this.api(!0).rows(f,g).data()};this.api=function(f){return f?new D(Ra(this[L.iApiIndex])):new D(this)};this.fnAddData=function(f,g){var h=this.api(!0);
|
96 |
+
f=Array.isArray(f)&&(Array.isArray(f[0])||k.isPlainObject(f[0]))?h.rows.add(f):h.row.add(f);(g===q||g)&&h.draw();return f.flatten().toArray()};this.fnAdjustColumnSizing=function(f){var g=this.api(!0).columns.adjust(),h=g.settings()[0],l=h.oScroll;f===q||f?g.draw(!1):(""!==l.sX||""!==l.sY)&&Ea(h)};this.fnClearTable=function(f){var g=this.api(!0).clear();(f===q||f)&&g.draw()};this.fnClose=function(f){this.api(!0).row(f).child.hide()};this.fnDeleteRow=function(f,g,h){var l=this.api(!0);f=l.rows(f);var n=
|
97 |
+
f.settings()[0],m=n.aoData[f[0][0]];f.remove();g&&g.call(this,n,m);(h===q||h)&&l.draw();return m};this.fnDestroy=function(f){this.api(!0).destroy(f)};this.fnDraw=function(f){this.api(!0).draw(f)};this.fnFilter=function(f,g,h,l,n,m){n=this.api(!0);null===g||g===q?n.search(f,h,l,m):n.column(g).search(f,h,l,m);n.draw()};this.fnGetData=function(f,g){var h=this.api(!0);if(f!==q){var l=f.nodeName?f.nodeName.toLowerCase():"";return g!==q||"td"==l||"th"==l?h.cell(f,g).data():h.row(f).data()||null}return h.data().toArray()};
|
98 |
+
this.fnGetNodes=function(f){var g=this.api(!0);return f!==q?g.row(f).node():g.rows().nodes().flatten().toArray()};this.fnGetPosition=function(f){var g=this.api(!0),h=f.nodeName.toUpperCase();return"TR"==h?g.row(f).index():"TD"==h||"TH"==h?(f=g.cell(f).index(),[f.row,f.columnVisible,f.column]):null};this.fnIsOpen=function(f){return this.api(!0).row(f).child.isShown()};this.fnOpen=function(f,g,h){return this.api(!0).row(f).child(g,h).show().child()[0]};this.fnPageChange=function(f,g){f=this.api(!0).page(f);
|
99 |
+
(g===q||g)&&f.draw(!1)};this.fnSetColumnVis=function(f,g,h){f=this.api(!0).column(f).visible(g);(h===q||h)&&f.columns.adjust().draw()};this.fnSettings=function(){return Ra(this[L.iApiIndex])};this.fnSort=function(f){this.api(!0).order(f).draw()};this.fnSortListener=function(f,g,h){this.api(!0).order.listener(f,g,h)};this.fnUpdate=function(f,g,h,l,n){var m=this.api(!0);h===q||null===h?m.row(g).data(f):m.cell(g,h).data(f);(n===q||n)&&m.columns.adjust();(l===q||l)&&m.draw();return 0};this.fnVersionCheck=
|
100 |
+
L.fnVersionCheck;var b=this,c=a===q,d=this.length;c&&(a={});this.oApi=this.internal=L.internal;for(var e in u.ext.internal)e&&(this[e]=fc(e));this.each(function(){var f={},g=1<d?pb(f,a,!0):a,h=0,l;f=this.getAttribute("id");var n=!1,m=u.defaults,p=k(this);if("table"!=this.nodeName.toLowerCase())aa(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{yb(m);zb(m.column);O(m,m,!0);O(m.column,m.column,!0);O(m,k.extend(g,p.data()),!0);var t=u.settings;h=0;for(l=t.length;h<l;h++){var v=t[h];
|
101 |
+
if(v.nTable==this||v.nTHead&&v.nTHead.parentNode==this||v.nTFoot&&v.nTFoot.parentNode==this){var x=g.bRetrieve!==q?g.bRetrieve:m.bRetrieve;if(c||x)return v.oInstance;if(g.bDestroy!==q?g.bDestroy:m.bDestroy){v.oInstance.fnDestroy();break}else{aa(v,0,"Cannot reinitialise DataTable",3);return}}if(v.sTableId==this.id){t.splice(h,1);break}}if(null===f||""===f)this.id=f="DataTables_Table_"+u.ext._unique++;var r=k.extend(!0,{},u.models.oSettings,{sDestroyWidth:p[0].style.width,sInstance:f,sTableId:f});r.nTable=
|
102 |
+
this;r.oApi=b.internal;r.oInit=g;t.push(r);r.oInstance=1===b.length?b:p.dataTable();yb(g);ma(g.oLanguage);g.aLengthMenu&&!g.iDisplayLength&&(g.iDisplayLength=Array.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]);g=pb(k.extend(!0,{},m),g);V(r.oFeatures,g,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));V(r,g,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed",
|
103 |
+
"aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"]]);V(r.oScroll,g,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);V(r.oLanguage,g,"fnInfoCallback");Q(r,"aoDrawCallback",g.fnDrawCallback,
|
104 |
+
"user");Q(r,"aoServerParams",g.fnServerParams,"user");Q(r,"aoStateSaveParams",g.fnStateSaveParams,"user");Q(r,"aoStateLoadParams",g.fnStateLoadParams,"user");Q(r,"aoStateLoaded",g.fnStateLoaded,"user");Q(r,"aoRowCallback",g.fnRowCallback,"user");Q(r,"aoRowCreatedCallback",g.fnCreatedRow,"user");Q(r,"aoHeaderCallback",g.fnHeaderCallback,"user");Q(r,"aoFooterCallback",g.fnFooterCallback,"user");Q(r,"aoInitComplete",g.fnInitComplete,"user");Q(r,"aoPreDrawCallback",g.fnPreDrawCallback,"user");r.rowIdFn=
|
105 |
+
ia(g.rowId);Ab(r);var A=r.oClasses;k.extend(A,u.ext.classes,g.oClasses);p.addClass(A.sTable);r.iInitDisplayStart===q&&(r.iInitDisplayStart=g.iDisplayStart,r._iDisplayStart=g.iDisplayStart);null!==g.iDeferLoading&&(r.bDeferLoading=!0,f=Array.isArray(g.iDeferLoading),r._iRecordsDisplay=f?g.iDeferLoading[0]:g.iDeferLoading,r._iRecordsTotal=f?g.iDeferLoading[1]:g.iDeferLoading);var E=r.oLanguage;k.extend(!0,E,g.oLanguage);E.sUrl?(k.ajax({dataType:"json",url:E.sUrl,success:function(C){ma(C);O(m.oLanguage,
|
106 |
+
C);k.extend(!0,E,C);H(r,null,"i18n",[r]);za(r)},error:function(){za(r)}}),n=!0):H(r,null,"i18n",[r]);null===g.asStripeClasses&&(r.asStripeClasses=[A.sStripeOdd,A.sStripeEven]);f=r.asStripeClasses;var I=p.children("tbody").find("tr").eq(0);-1!==k.inArray(!0,k.map(f,function(C,B){return I.hasClass(C)}))&&(k("tbody tr",this).removeClass(f.join(" ")),r.asDestroyStripes=f.slice());f=[];t=this.getElementsByTagName("thead");0!==t.length&&(wa(r.aoHeader,t[0]),f=Ka(r));if(null===g.aoColumns)for(t=[],h=0,l=
|
107 |
+
f.length;h<l;h++)t.push(null);else t=g.aoColumns;h=0;for(l=t.length;h<l;h++)Wa(r,f?f[h]:null);Cb(r,g.aoColumnDefs,t,function(C,B){Da(r,C,B)});if(I.length){var W=function(C,B){return null!==C.getAttribute("data-"+B)?B:null};k(I[0]).children("th, td").each(function(C,B){var ba=r.aoColumns[C];if(ba.mData===C){var X=W(B,"sort")||W(B,"order");B=W(B,"filter")||W(B,"search");if(null!==X||null!==B)ba.mData={_:C+".display",sort:null!==X?C+".@data-"+X:q,type:null!==X?C+".@data-"+X:q,filter:null!==B?C+".@data-"+
|
108 |
+
B:q},Da(r,C)}})}var M=r.oFeatures;f=function(){if(g.aaSorting===q){var C=r.aaSorting;h=0;for(l=C.length;h<l;h++)C[h][1]=r.aoColumns[h].asSorting[0]}Pa(r);M.bSort&&Q(r,"aoDrawCallback",function(){if(r.bSorted){var ba=pa(r),X={};k.each(ba,function(lb,Aa){X[Aa.src]=Aa.dir});H(r,null,"order",[r,ba,X]);cc(r)}});Q(r,"aoDrawCallback",function(){(r.bSorted||"ssp"===P(r)||M.bDeferRender)&&Pa(r)},"sc");C=p.children("caption").each(function(){this._captionSide=k(this).css("caption-side")});var B=p.children("thead");
|
109 |
+
0===B.length&&(B=k("<thead/>").appendTo(p));r.nTHead=B[0];B=p.children("tbody");0===B.length&&(B=k("<tbody/>").appendTo(p));r.nTBody=B[0];B=p.children("tfoot");0===B.length&&0<C.length&&(""!==r.oScroll.sX||""!==r.oScroll.sY)&&(B=k("<tfoot/>").appendTo(p));0===B.length||0===B.children().length?p.addClass(A.sNoFooter):0<B.length&&(r.nTFoot=B[0],wa(r.aoFooter,r.nTFoot));if(g.aaData)for(h=0;h<g.aaData.length;h++)ea(r,g.aaData[h]);else(r.bDeferLoading||"dom"==P(r))&&Ga(r,k(r.nTBody).children("tr"));r.aiDisplay=
|
110 |
+
r.aiDisplayMaster.slice();r.bInitialised=!0;!1===n&&za(r)};g.bStateSave?(M.bStateSave=!0,Q(r,"aoDrawCallback",Qa,"state_save"),dc(r,g,f)):f()}});b=null;return this},L,w,J,rb={},gc=/[\r\n\u2028]/g,Ta=/<.*?>/g,tc=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,uc=/(\/|\.|\*|\+|\?|\||\(|\)|\[|\]|\{|\}|\\|\$|\^|\-)/g,qb=/['\u00A0,$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,ca=function(a){return a&&!0!==a&&"-"!==a?!1:!0},hc=function(a){var b=parseInt(a,10);return!isNaN(b)&&
|
111 |
+
isFinite(a)?b:null},ic=function(a,b){rb[b]||(rb[b]=new RegExp(hb(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace(rb[b],"."):a},sb=function(a,b,c){var d="string"===typeof a;if(ca(a))return!0;b&&d&&(a=ic(a,b));c&&d&&(a=a.replace(qb,""));return!isNaN(parseFloat(a))&&isFinite(a)},jc=function(a,b,c){return ca(a)?!0:ca(a)||"string"===typeof a?sb(a.replace(Ta,""),b,c)?!0:null:null},T=function(a,b,c){var d=[],e=0,f=a.length;if(c!==q)for(;e<f;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e<
|
112 |
+
f;e++)a[e]&&d.push(a[e][b]);return d},Ca=function(a,b,c,d){var e=[],f=0,g=b.length;if(d!==q)for(;f<g;f++)a[b[f]][c]&&e.push(a[b[f]][c][d]);else for(;f<g;f++)e.push(a[b[f]][c]);return e},qa=function(a,b){var c=[];if(b===q){b=0;var d=a}else d=b,b=a;for(a=b;a<d;a++)c.push(a);return c},kc=function(a){for(var b=[],c=0,d=a.length;c<d;c++)a[c]&&b.push(a[c]);return b},Ja=function(a){a:{if(!(2>a.length)){var b=a.slice().sort();for(var c=b[0],d=1,e=b.length;d<e;d++){if(b[d]===c){b=!1;break a}c=b[d]}}b=!0}if(b)return a.slice();
|
113 |
+
b=[];e=a.length;var f,g=0;d=0;a:for(;d<e;d++){c=a[d];for(f=0;f<g;f++)if(b[f]===c)continue a;b.push(c);g++}return b},lc=function(a,b){if(Array.isArray(b))for(var c=0;c<b.length;c++)lc(a,b[c]);else a.push(b);return a};Array.isArray||(Array.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)});String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")});u.util={throttle:function(a,b){var c=b!==q?b:200,d,e;return function(){var f=
|
114 |
+
this,g=+new Date,h=arguments;d&&g<d+c?(clearTimeout(e),e=setTimeout(function(){d=q;a.apply(f,h)},c)):(d=g,a.apply(f,h))}},escapeRegex:function(a){return a.replace(uc,"\\$1")}};var R=function(a,b,c){a[b]!==q&&(a[c]=a[b])},ua=/\[.*?\]$/,oa=/\(\)$/,hb=u.util.escapeRegex,Oa=k("<div>")[0],rc=Oa.textContent!==q,sc=/<.*?>/g,fb=u.util.throttle,mc=[],N=Array.prototype,vc=function(a){var b,c=u.settings,d=k.map(c,function(f,g){return f.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase()){var e=
|
115 |
+
k.inArray(a,d);return-1!==e?[c[e]]:null}if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?b=k(a):a instanceof k&&(b=a)}else return[];if(b)return b.map(function(f){e=k.inArray(this,d);return-1!==e?c[e]:null}).toArray()};var D=function(a,b){if(!(this instanceof D))return new D(a,b);var c=[],d=function(g){(g=vc(g))&&c.push.apply(c,g)};if(Array.isArray(a))for(var e=0,f=a.length;e<f;e++)d(a[e]);else d(a);this.context=Ja(c);b&&k.merge(this,b);this.selector={rows:null,
|
116 |
+
cols:null,opts:null};D.extend(this,this,mc)};u.Api=D;k.extend(D.prototype,{any:function(){return 0!==this.count()},concat:N.concat,context:[],count:function(){return this.flatten().length},each:function(a){for(var b=0,c=this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=this.context;return b.length>a?new D(b[a],this[a]):null},filter:function(a){var b=[];if(N.filter)b=N.filter.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);
|
117 |
+
return new D(this.context,b)},flatten:function(){var a=[];return new D(this.context,a.concat.apply(a,this.toArray()))},join:N.join,indexOf:N.indexOf||function(a,b){b=b||0;for(var c=this.length;b<c;b++)if(this[b]===a)return b;return-1},iterator:function(a,b,c,d){var e=[],f,g,h=this.context,l,n=this.selector;"string"===typeof a&&(d=c,c=b,b=a,a=!1);var m=0;for(f=h.length;m<f;m++){var p=new D(h[m]);if("table"===b){var t=c.call(p,h[m],m);t!==q&&e.push(t)}else if("columns"===b||"rows"===b)t=c.call(p,h[m],
|
118 |
+
this[m],m),t!==q&&e.push(t);else if("column"===b||"column-rows"===b||"row"===b||"cell"===b){var v=this[m];"column-rows"===b&&(l=Ua(h[m],n.opts));var x=0;for(g=v.length;x<g;x++)t=v[x],t="cell"===b?c.call(p,h[m],t.row,t.column,m,x):c.call(p,h[m],t,m,x,l),t!==q&&e.push(t)}}return e.length||d?(a=new D(h,a?e.concat.apply([],e):e),b=a.selector,b.rows=n.rows,b.cols=n.cols,b.opts=n.opts,a):this},lastIndexOf:N.lastIndexOf||function(a,b){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,
|
119 |
+
map:function(a){var b=[];if(N.map)b=N.map.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)b.push(a.call(this,this[c],c));return new D(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},pop:N.pop,push:N.push,reduce:N.reduce||function(a,b){return Bb(this,a,b,0,this.length,1)},reduceRight:N.reduceRight||function(a,b){return Bb(this,a,b,this.length-1,-1,-1)},reverse:N.reverse,selector:null,shift:N.shift,slice:function(){return new D(this.context,this)},sort:N.sort,
|
120 |
+
splice:N.splice,toArray:function(){return N.slice.call(this)},to$:function(){return k(this)},toJQuery:function(){return k(this)},unique:function(){return new D(this.context,Ja(this))},unshift:N.unshift});D.extend=function(a,b,c){if(c.length&&b&&(b instanceof D||b.__dt_wrapper)){var d,e=function(h,l,n){return function(){var m=l.apply(h,arguments);D.extend(m,m,n.methodExt);return m}};var f=0;for(d=c.length;f<d;f++){var g=c[f];b[g.name]="function"===g.type?e(a,g.val,g):"object"===g.type?{}:g.val;b[g.name].__dt_wrapper=
|
121 |
+
!0;D.extend(a,b[g.name],g.propExt)}}};D.register=w=function(a,b){if(Array.isArray(a))for(var c=0,d=a.length;c<d;c++)D.register(a[c],b);else{d=a.split(".");var e=mc,f;a=0;for(c=d.length;a<c;a++){var g=(f=-1!==d[a].indexOf("()"))?d[a].replace("()",""):d[a];a:{var h=0;for(var l=e.length;h<l;h++)if(e[h].name===g){h=e[h];break a}h=null}h||(h={name:g,val:{},methodExt:[],propExt:[],type:"object"},e.push(h));a===c-1?(h.val=b,h.type="function"===typeof b?"function":k.isPlainObject(b)?"object":"other"):e=f?
|
122 |
+
h.methodExt:h.propExt}}};D.registerPlural=J=function(a,b,c){D.register(a,c);D.register(b,function(){var d=c.apply(this,arguments);return d===this?this:d instanceof D?d.length?Array.isArray(d[0])?new D(d.context,d[0]):d[0]:q:d})};var nc=function(a,b){if(Array.isArray(a))return k.map(a,function(d){return nc(d,b)});if("number"===typeof a)return[b[a]];var c=k.map(b,function(d,e){return d.nTable});return k(c).filter(a).map(function(d){d=k.inArray(this,c);return b[d]}).toArray()};w("tables()",function(a){return a!==
|
123 |
+
q&&null!==a?new D(nc(a,this.context)):this});w("table()",function(a){a=this.tables(a);var b=a.context;return b.length?new D(b[0]):a});J("tables().nodes()","table().node()",function(){return this.iterator("table",function(a){return a.nTable},1)});J("tables().body()","table().body()",function(){return this.iterator("table",function(a){return a.nTBody},1)});J("tables().header()","table().header()",function(){return this.iterator("table",function(a){return a.nTHead},1)});J("tables().footer()","table().footer()",
|
124 |
+
function(){return this.iterator("table",function(a){return a.nTFoot},1)});J("tables().containers()","table().container()",function(){return this.iterator("table",function(a){return a.nTableWrapper},1)});w("draw()",function(a){return this.iterator("table",function(b){"page"===a?fa(b):("string"===typeof a&&(a="full-hold"===a?!1:!0),ja(b,!1===a))})});w("page()",function(a){return a===q?this.page.info().page:this.iterator("table",function(b){kb(b,a)})});w("page.info()",function(a){if(0===this.context.length)return q;
|
125 |
+
a=this.context[0];var b=a._iDisplayStart,c=a.oFeatures.bPaginate?a._iDisplayLength:-1,d=a.fnRecordsDisplay(),e=-1===c;return{page:e?0:Math.floor(b/c),pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(),recordsDisplay:d,serverSide:"ssp"===P(a)}});w("page.len()",function(a){return a===q?0!==this.context.length?this.context[0]._iDisplayLength:q:this.iterator("table",function(b){ib(b,a)})});var oc=function(a,b,c){if(c){var d=new D(a);d.one("draw",function(){c(d.ajax.json())})}if("ssp"==
|
126 |
+
P(a))ja(a,b);else{U(a,!0);var e=a.jqXHR;e&&4!==e.readyState&&e.abort();La(a,[],function(f){Ha(a);f=Ma(a,f);for(var g=0,h=f.length;g<h;g++)ea(a,f[g]);ja(a,b);U(a,!1)})}};w("ajax.json()",function(){var a=this.context;if(0<a.length)return a[0].json});w("ajax.params()",function(){var a=this.context;if(0<a.length)return a[0].oAjaxData});w("ajax.reload()",function(a,b){return this.iterator("table",function(c){oc(c,!1===b,a)})});w("ajax.url()",function(a){var b=this.context;if(a===q){if(0===b.length)return q;
|
127 |
+
b=b[0];return b.ajax?k.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",function(c){k.isPlainObject(c.ajax)?c.ajax.url=a:c.ajax=a})});w("ajax.url().load()",function(a,b){return this.iterator("table",function(c){oc(c,!1===b,a)})});var tb=function(a,b,c,d,e){var f=[],g,h,l;var n=typeof b;b&&"string"!==n&&"function"!==n&&b.length!==q||(b=[b]);n=0;for(h=b.length;n<h;n++){var m=b[n]&&b[n].split&&!b[n].match(/[\[\(:]/)?b[n].split(","):[b[n]];var p=0;for(l=m.length;p<l;p++)(g=
|
128 |
+
c("string"===typeof m[p]?m[p].trim():m[p]))&&g.length&&(f=f.concat(g))}a=L.selector[a];if(a.length)for(n=0,h=a.length;n<h;n++)f=a[n](d,e,f);return Ja(f)},ub=function(a){a||(a={});a.filter&&a.search===q&&(a.search=a.filter);return k.extend({search:"none",order:"current",page:"all"},a)},vb=function(a){for(var b=0,c=a.length;b<c;b++)if(0<a[b].length)return a[0]=a[b],a[0].length=1,a.length=1,a.context=[a.context[b]],a;a.length=0;return a},Ua=function(a,b){var c=[],d=a.aiDisplay;var e=a.aiDisplayMaster;
|
129 |
+
var f=b.search;var g=b.order;b=b.page;if("ssp"==P(a))return"removed"===f?[]:qa(0,e.length);if("current"==b)for(g=a._iDisplayStart,a=a.fnDisplayEnd();g<a;g++)c.push(d[g]);else if("current"==g||"applied"==g)if("none"==f)c=e.slice();else if("applied"==f)c=d.slice();else{if("removed"==f){var h={};g=0;for(a=d.length;g<a;g++)h[d[g]]=null;c=k.map(e,function(l){return h.hasOwnProperty(l)?null:l})}}else if("index"==g||"original"==g)for(g=0,a=a.aoData.length;g<a;g++)"none"==f?c.push(g):(e=k.inArray(g,d),(-1===
|
130 |
+
e&&"removed"==f||0<=e&&"applied"==f)&&c.push(g));return c},wc=function(a,b,c){var d;return tb("row",b,function(e){var f=hc(e),g=a.aoData;if(null!==f&&!c)return[f];d||(d=Ua(a,c));if(null!==f&&-1!==k.inArray(f,d))return[f];if(null===e||e===q||""===e)return d;if("function"===typeof e)return k.map(d,function(l){var n=g[l];return e(l,n._aData,n.nTr)?l:null});if(e.nodeName){f=e._DT_RowIndex;var h=e._DT_CellIndex;if(f!==q)return g[f]&&g[f].nTr===e?[f]:[];if(h)return g[h.row]&&g[h.row].nTr===e.parentNode?
|
131 |
+
[h.row]:[];f=k(e).closest("*[data-dt-row]");return f.length?[f.data("dt-row")]:[]}if("string"===typeof e&&"#"===e.charAt(0)&&(f=a.aIds[e.replace(/^#/,"")],f!==q))return[f.idx];f=kc(Ca(a.aoData,d,"nTr"));return k(f).filter(e).map(function(){return this._DT_RowIndex}).toArray()},a,c)};w("rows()",function(a,b){a===q?a="":k.isPlainObject(a)&&(b=a,a="");b=ub(b);var c=this.iterator("table",function(d){return wc(d,a,b)},1);c.selector.rows=a;c.selector.opts=b;return c});w("rows().nodes()",function(){return this.iterator("row",
|
132 |
+
function(a,b){return a.aoData[b].nTr||q},1)});w("rows().data()",function(){return this.iterator(!0,"rows",function(a,b){return Ca(a.aoData,b,"_aData")},1)});J("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){b=b.aoData[c];return"search"===a?b._aFilterData:b._aSortData},1)});J("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row",function(b,c){va(b,c,a)})});J("rows().indexes()","row().index()",function(){return this.iterator("row",function(a,
|
133 |
+
b){return b},1)});J("rows().ids()","row().id()",function(a){for(var b=[],c=this.context,d=0,e=c.length;d<e;d++)for(var f=0,g=this[d].length;f<g;f++){var h=c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);b.push((!0===a?"#":"")+h)}return new D(c,b)});J("rows().remove()","row().remove()",function(){var a=this;this.iterator("row",function(b,c,d){var e=b.aoData,f=e[c],g,h;e.splice(c,1);var l=0;for(g=e.length;l<g;l++){var n=e[l];var m=n.anCells;null!==n.nTr&&(n.nTr._DT_RowIndex=l);if(null!==m)for(n=0,h=m.length;n<
|
134 |
+
h;n++)m[n]._DT_CellIndex.row=l}Ia(b.aiDisplayMaster,c);Ia(b.aiDisplay,c);Ia(a[d],c,!1);0<b._iRecordsDisplay&&b._iRecordsDisplay--;jb(b);c=b.rowIdFn(f._aData);c!==q&&delete b.aIds[c]});this.iterator("table",function(b){for(var c=0,d=b.aoData.length;c<d;c++)b.aoData[c].idx=c});return this});w("rows.add()",function(a){var b=this.iterator("table",function(d){var e,f=[];var g=0;for(e=a.length;g<e;g++){var h=a[g];h.nodeName&&"TR"===h.nodeName.toUpperCase()?f.push(Ga(d,h)[0]):f.push(ea(d,h))}return f},1),
|
135 |
+
c=this.rows(-1);c.pop();k.merge(c,b);return c});w("row()",function(a,b){return vb(this.rows(a,b))});w("row().data()",function(a){var b=this.context;if(a===q)return b.length&&this.length?b[0].aoData[this[0]]._aData:q;var c=b[0].aoData[this[0]];c._aData=a;Array.isArray(a)&&c.nTr&&c.nTr.id&&da(b[0].rowId)(a,c.nTr.id);va(b[0],this[0],"data");return this});w("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr||null:null});w("row.add()",function(a){a instanceof
|
136 |
+
k&&a.length&&(a=a[0]);var b=this.iterator("table",function(c){return a.nodeName&&"TR"===a.nodeName.toUpperCase()?Ga(c,a)[0]:ea(c,a)});return this.row(b[0])});var xc=function(a,b,c,d){var e=[],f=function(g,h){if(Array.isArray(g)||g instanceof k)for(var l=0,n=g.length;l<n;l++)f(g[l],h);else g.nodeName&&"tr"===g.nodeName.toLowerCase()?e.push(g):(l=k("<tr><td></td></tr>").addClass(h),k("td",l).addClass(h).html(g)[0].colSpan=na(a),e.push(l[0]))};f(c,d);b._details&&b._details.detach();b._details=k(e);b._detailsShow&&
|
137 |
+
b._details.insertAfter(b.nTr)},wb=function(a,b){var c=a.context;c.length&&(a=c[0].aoData[b!==q?b:a[0]])&&a._details&&(a._details.remove(),a._detailsShow=q,a._details=q)},pc=function(a,b){var c=a.context;c.length&&a.length&&(a=c[0].aoData[a[0]],a._details&&((a._detailsShow=b)?a._details.insertAfter(a.nTr):a._details.detach(),yc(c[0])))},yc=function(a){var b=new D(a),c=a.aoData;b.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0<T(c,"_details").length&&(b.on("draw.dt.DT_details",
|
138 |
+
function(d,e){a===e&&b.rows({page:"current"}).eq(0).each(function(f){f=c[f];f._detailsShow&&f._details.insertAfter(f.nTr)})}),b.on("column-visibility.dt.DT_details",function(d,e,f,g){if(a===e)for(e=na(e),f=0,g=c.length;f<g;f++)d=c[f],d._details&&d._details.children("td[colspan]").attr("colspan",e)}),b.on("destroy.dt.DT_details",function(d,e){if(a===e)for(d=0,e=c.length;d<e;d++)c[d]._details&&wb(b,d)}))};w("row().child()",function(a,b){var c=this.context;if(a===q)return c.length&&this.length?c[0].aoData[this[0]]._details:
|
139 |
+
q;!0===a?this.child.show():!1===a?wb(this):c.length&&this.length&&xc(c[0],c[0].aoData[this[0]],a,b);return this});w(["row().child.show()","row().child().show()"],function(a){pc(this,!0);return this});w(["row().child.hide()","row().child().hide()"],function(){pc(this,!1);return this});w(["row().child.remove()","row().child().remove()"],function(){wb(this);return this});w("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var zc=
|
140 |
+
/^([^:]+):(name|visIdx|visible)$/,qc=function(a,b,c,d,e){c=[];d=0;for(var f=e.length;d<f;d++)c.push(S(a,e[d],b));return c},Ac=function(a,b,c){var d=a.aoColumns,e=T(d,"sName"),f=T(d,"nTh");return tb("column",b,function(g){var h=hc(g);if(""===g)return qa(d.length);if(null!==h)return[0<=h?h:d.length+h];if("function"===typeof g){var l=Ua(a,c);return k.map(d,function(p,t){return g(t,qc(a,t,0,0,l),f[t])?t:null})}var n="string"===typeof g?g.match(zc):"";if(n)switch(n[2]){case "visIdx":case "visible":h=parseInt(n[1],
|
141 |
+
10);if(0>h){var m=k.map(d,function(p,t){return p.bVisible?t:null});return[m[m.length+h]]}return[sa(a,h)];case "name":return k.map(e,function(p,t){return p===n[1]?t:null});default:return[]}if(g.nodeName&&g._DT_CellIndex)return[g._DT_CellIndex.column];h=k(f).filter(g).map(function(){return k.inArray(this,f)}).toArray();if(h.length||!g.nodeName)return h;h=k(g).closest("*[data-dt-column]");return h.length?[h.data("dt-column")]:[]},a,c)};w("columns()",function(a,b){a===q?a="":k.isPlainObject(a)&&(b=a,
|
142 |
+
a="");b=ub(b);var c=this.iterator("table",function(d){return Ac(d,a,b)},1);c.selector.cols=a;c.selector.opts=b;return c});J("columns().header()","column().header()",function(a,b){return this.iterator("column",function(c,d){return c.aoColumns[d].nTh},1)});J("columns().footer()","column().footer()",function(a,b){return this.iterator("column",function(c,d){return c.aoColumns[d].nTf},1)});J("columns().data()","column().data()",function(){return this.iterator("column-rows",qc,1)});J("columns().dataSrc()",
|
143 |
+
"column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},1)});J("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,f){return Ca(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});J("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return Ca(a.aoData,e,"anCells",b)},1)});J("columns().visible()","column().visible()",function(a,b){var c=
|
144 |
+
this,d=this.iterator("column",function(e,f){if(a===q)return e.aoColumns[f].bVisible;var g=e.aoColumns,h=g[f],l=e.aoData,n;if(a!==q&&h.bVisible!==a){if(a){var m=k.inArray(!0,T(g,"bVisible"),f+1);g=0;for(n=l.length;g<n;g++){var p=l[g].nTr;e=l[g].anCells;p&&p.insertBefore(e[f],e[m]||null)}}else k(T(e.aoData,"anCells",f)).detach();h.bVisible=a}});a!==q&&this.iterator("table",function(e){xa(e,e.aoHeader);xa(e,e.aoFooter);e.aiDisplay.length||k(e.nTBody).find("td[colspan]").attr("colspan",na(e));Qa(e);c.iterator("column",
|
145 |
+
function(f,g){H(f,null,"column-visibility",[f,g,a,b])});(b===q||b)&&c.columns.adjust()});return d});J("columns().indexes()","column().index()",function(a){return this.iterator("column",function(b,c){return"visible"===a?ta(b,c):c},1)});w("columns.adjust()",function(){return this.iterator("table",function(a){ra(a)},1)});w("column.index()",function(a,b){if(0!==this.context.length){var c=this.context[0];if("fromVisible"===a||"toData"===a)return sa(c,b);if("fromData"===a||"toVisible"===a)return ta(c,b)}});
|
146 |
+
w("column()",function(a,b){return vb(this.columns(a,b))});var Bc=function(a,b,c){var d=a.aoData,e=Ua(a,c),f=kc(Ca(d,e,"anCells")),g=k(lc([],f)),h,l=a.aoColumns.length,n,m,p,t,v,x;return tb("cell",b,function(r){var A="function"===typeof r;if(null===r||r===q||A){n=[];m=0;for(p=e.length;m<p;m++)for(h=e[m],t=0;t<l;t++)v={row:h,column:t},A?(x=d[h],r(v,S(a,h,t),x.anCells?x.anCells[t]:null)&&n.push(v)):n.push(v);return n}if(k.isPlainObject(r))return r.column!==q&&r.row!==q&&-1!==k.inArray(r.row,e)?[r]:[];
|
147 |
+
A=g.filter(r).map(function(E,I){return{row:I._DT_CellIndex.row,column:I._DT_CellIndex.column}}).toArray();if(A.length||!r.nodeName)return A;x=k(r).closest("*[data-dt-row]");return x.length?[{row:x.data("dt-row"),column:x.data("dt-column")}]:[]},a,c)};w("cells()",function(a,b,c){k.isPlainObject(a)&&(a.row===q?(c=a,a=null):(c=b,b=null));k.isPlainObject(b)&&(c=b,b=null);if(null===b||b===q)return this.iterator("table",function(m){return Bc(m,a,ub(c))});var d=c?{page:c.page,order:c.order,search:c.search}:
|
148 |
+
{},e=this.columns(b,d),f=this.rows(a,d),g,h,l,n;d=this.iterator("table",function(m,p){m=[];g=0;for(h=f[p].length;g<h;g++)for(l=0,n=e[p].length;l<n;l++)m.push({row:f[p][g],column:e[p][l]});return m},1);d=c&&c.selected?this.cells(d,c):d;k.extend(d.selector,{cols:b,rows:a,opts:c});return d});J("cells().nodes()","cell().node()",function(){return this.iterator("cell",function(a,b,c){return(a=a.aoData[b])&&a.anCells?a.anCells[c]:q},1)});w("cells().data()",function(){return this.iterator("cell",function(a,
|
149 |
+
b,c){return S(a,b,c)},1)});J("cells().cache()","cell().cache()",function(a){a="search"===a?"_aFilterData":"_aSortData";return this.iterator("cell",function(b,c,d){return b.aoData[c][a][d]},1)});J("cells().render()","cell().render()",function(a){return this.iterator("cell",function(b,c,d){return S(b,c,d,a)},1)});J("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(a,b,c){return{row:b,column:c,columnVisible:ta(a,c)}},1)});J("cells().invalidate()","cell().invalidate()",
|
150 |
+
function(a){return this.iterator("cell",function(b,c,d){va(b,c,a,d)})});w("cell()",function(a,b,c){return vb(this.cells(a,b,c))});w("cell().data()",function(a){var b=this.context,c=this[0];if(a===q)return b.length&&c.length?S(b[0],c[0].row,c[0].column):q;Db(b[0],c[0].row,c[0].column,a);va(b[0],c[0].row,"data",c[0].column);return this});w("order()",function(a,b){var c=this.context;if(a===q)return 0!==c.length?c[0].aaSorting:q;"number"===typeof a?a=[[a,b]]:a.length&&!Array.isArray(a[0])&&(a=Array.prototype.slice.call(arguments));
|
151 |
+
return this.iterator("table",function(d){d.aaSorting=a.slice()})});w("order.listener()",function(a,b,c){return this.iterator("table",function(d){db(d,a,b,c)})});w("order.fixed()",function(a){if(!a){var b=this.context;b=b.length?b[0].aaSortingFixed:q;return Array.isArray(b)?{pre:b}:b}return this.iterator("table",function(c){c.aaSortingFixed=k.extend(!0,{},a)})});w(["columns().order()","column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];k.each(b[d],function(f,
|
152 |
+
g){e.push([g,a])});c.aaSorting=e})});w("search()",function(a,b,c,d){var e=this.context;return a===q?0!==e.length?e[0].oPreviousSearch.sSearch:q:this.iterator("table",function(f){f.oFeatures.bFilter&&ya(f,k.extend({},f.oPreviousSearch,{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),1)})});J("columns().search()","column().search()",function(a,b,c,d){return this.iterator("column",function(e,f){var g=e.aoPreSearchCols;if(a===q)return g[f].sSearch;e.oFeatures.bFilter&&
|
153 |
+
(k.extend(g[f],{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),ya(e,e.oPreviousSearch,1))})});w("state()",function(){return this.context.length?this.context[0].oSavedState:null});w("state.clear()",function(){return this.iterator("table",function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});w("state.loaded()",function(){return this.context.length?this.context[0].oLoadedState:null});w("state.save()",function(){return this.iterator("table",function(a){Qa(a)})});
|
154 |
+
u.versionCheck=u.fnVersionCheck=function(a){var b=u.version.split(".");a=a.split(".");for(var c,d,e=0,f=a.length;e<f;e++)if(c=parseInt(b[e],10)||0,d=parseInt(a[e],10)||0,c!==d)return c>d;return!0};u.isDataTable=u.fnIsDataTable=function(a){var b=k(a).get(0),c=!1;if(a instanceof u.Api)return!0;k.each(u.settings,function(d,e){d=e.nScrollHead?k("table",e.nScrollHead)[0]:null;var f=e.nScrollFoot?k("table",e.nScrollFoot)[0]:null;if(e.nTable===b||d===b||f===b)c=!0});return c};u.tables=u.fnTables=function(a){var b=
|
155 |
+
!1;k.isPlainObject(a)&&(b=a.api,a=a.visible);var c=k.map(u.settings,function(d){if(!a||a&&k(d.nTable).is(":visible"))return d.nTable});return b?new D(c):c};u.camelToHungarian=O;w("$()",function(a,b){b=this.rows(b).nodes();b=k(b);return k([].concat(b.filter(a).toArray(),b.find(a).toArray()))});k.each(["on","one","off"],function(a,b){w(b+"()",function(){var c=Array.prototype.slice.call(arguments);c[0]=k.map(c[0].split(/\s/),function(e){return e.match(/\.dt\b/)?e:e+".dt"}).join(" ");var d=k(this.tables().nodes());
|
156 |
+
d[b].apply(d,c);return this})});w("clear()",function(){return this.iterator("table",function(a){Ha(a)})});w("settings()",function(){return new D(this.context,this.context)});w("init()",function(){var a=this.context;return a.length?a[0].oInit:null});w("data()",function(){return this.iterator("table",function(a){return T(a.aoData,"_aData")}).flatten()});w("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,f=b.nTBody,g=b.nTHead,
|
157 |
+
h=b.nTFoot,l=k(e);f=k(f);var n=k(b.nTableWrapper),m=k.map(b.aoData,function(t){return t.nTr}),p;b.bDestroying=!0;H(b,"aoDestroyCallback","destroy",[b]);a||(new D(b)).columns().visible(!0);n.off(".DT").find(":not(tbody *)").off(".DT");k(y).off(".DT-"+b.sInstance);e!=g.parentNode&&(l.children("thead").detach(),l.append(g));h&&e!=h.parentNode&&(l.children("tfoot").detach(),l.append(h));b.aaSorting=[];b.aaSortingFixed=[];Pa(b);k(m).removeClass(b.asStripeClasses.join(" "));k("th, td",g).removeClass(d.sSortable+
|
158 |
+
" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);f.children().detach();f.append(m);g=a?"remove":"detach";l[g]();n[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),l.css("width",b.sDestroyWidth).removeClass(d.sTable),(p=b.asDestroyStripes.length)&&f.children().each(function(t){k(this).addClass(b.asDestroyStripes[t%p])}));c=k.inArray(b,u.settings);-1!==c&&u.settings.splice(c,1)})});k.each(["column","row","cell"],function(a,b){w(b+"s().every()",function(c){var d=this.selector.opts,e=
|
159 |
+
this;return this.iterator(b,function(f,g,h,l,n){c.call(e[b](g,"cell"===b?h:d,"cell"===b?d:q),g,h,l,n)})})});w("i18n()",function(a,b,c){var d=this.context[0];a=ia(a)(d.oLanguage);a===q&&(a=b);c!==q&&k.isPlainObject(a)&&(a=a[c]!==q?a[c]:a._);return a.replace("%d",c)});u.version="1.10.24";u.settings=[];u.models={};u.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};u.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,
|
160 |
+
idx:-1};u.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};u.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,
|
161 |
+
25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,
|
162 |
+
fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){return{}}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},
|
163 |
+
fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",
|
164 |
+
sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:k.extend({},u.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};G(u.defaults);u.defaults.column={aDataSort:null,
|
165 |
+
iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};G(u.defaults.column);u.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,
|
166 |
+
iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],
|
167 |
+
aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:q,oAjaxData:q,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,
|
168 |
+
iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==P(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==P(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,
|
169 |
+
f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};u.ext=L={buttons:{},classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:u.fnVersionCheck,
|
170 |
+
iApiIndex:0,oJUIClasses:{},sVersion:u.version};k.extend(L,{afnFiltering:L.search,aTypes:L.type.detect,ofnSearch:L.type.search,oSort:L.type.order,afnSortData:L.order,aoFeatures:L.feature,oApi:L.internal,oStdClasses:L.classes,oPagination:L.pager});k.extend(u.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",
|
171 |
+
sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_desc_disabled",sSortableDesc:"sorting_asc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",
|
172 |
+
sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var ec=u.ext.pager;k.extend(ec,{simple:function(a,b){return["previous","next"]},full:function(a,b){return["first","previous","next","last"]},numbers:function(a,b){return[Ba(a,b)]},simple_numbers:function(a,b){return["previous",Ba(a,b),"next"]},
|
173 |
+
full_numbers:function(a,b){return["first","previous",Ba(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",Ba(a,b),"last"]},_numbers:Ba,numbers_length:7});k.extend(!0,u.ext.renderer,{pageButton:{_:function(a,b,c,d,e,f){var g=a.oClasses,h=a.oLanguage.oPaginate,l=a.oLanguage.oAria.paginate||{},n,m,p=0,t=function(x,r){var A,E=g.sPageButtonDisabled,I=function(B){kb(a,B.data.action,!0)};var W=0;for(A=r.length;W<A;W++){var M=r[W];if(Array.isArray(M)){var C=k("<"+(M.DT_el||"div")+"/>").appendTo(x);
|
174 |
+
t(C,M)}else{n=null;m=M;C=a.iTabIndex;switch(M){case "ellipsis":x.append('<span class="ellipsis">…</span>');break;case "first":n=h.sFirst;0===e&&(C=-1,m+=" "+E);break;case "previous":n=h.sPrevious;0===e&&(C=-1,m+=" "+E);break;case "next":n=h.sNext;if(0===f||e===f-1)C=-1,m+=" "+E;break;case "last":n=h.sLast;if(0===f||e===f-1)C=-1,m+=" "+E;break;default:n=a.fnFormatNumber(M+1),m=e===M?g.sPageButtonActive:""}null!==n&&(C=k("<a>",{"class":g.sPageButton+" "+m,"aria-controls":a.sTableId,"aria-label":l[M],
|
175 |
+
"data-dt-idx":p,tabindex:C,id:0===c&&"string"===typeof M?a.sTableId+"_"+M:null}).html(n).appendTo(x),ob(C,{action:M},I),p++)}}};try{var v=k(b).find(z.activeElement).data("dt-idx")}catch(x){}t(k(b).empty(),d);v!==q&&k(b).find("[data-dt-idx="+v+"]").trigger("focus")}}});k.extend(u.ext.type.detect,[function(a,b){b=b.oLanguage.sDecimal;return sb(a,b)?"num"+b:null},function(a,b){if(a&&!(a instanceof Date)&&!tc.test(a))return null;b=Date.parse(a);return null!==b&&!isNaN(b)||ca(a)?"date":null},function(a,
|
176 |
+
b){b=b.oLanguage.sDecimal;return sb(a,b,!0)?"num-fmt"+b:null},function(a,b){b=b.oLanguage.sDecimal;return jc(a,b)?"html-num"+b:null},function(a,b){b=b.oLanguage.sDecimal;return jc(a,b,!0)?"html-num-fmt"+b:null},function(a,b){return ca(a)||"string"===typeof a&&-1!==a.indexOf("<")?"html":null}]);k.extend(u.ext.type.search,{html:function(a){return ca(a)?a:"string"===typeof a?a.replace(gc," ").replace(Ta,""):""},string:function(a){return ca(a)?a:"string"===typeof a?a.replace(gc," "):a}});var Sa=function(a,
|
177 |
+
b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=ic(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};k.extend(L.type.order,{"date-pre":function(a){a=Date.parse(a);return isNaN(a)?-Infinity:a},"html-pre":function(a){return ca(a)?"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return ca(a)?"":"string"===typeof a?a.toLowerCase():a.toString?a.toString():""},"string-asc":function(a,b){return a<b?-1:a>b?1:0},"string-desc":function(a,b){return a<
|
178 |
+
b?1:a>b?-1:0}});Va("");k.extend(!0,u.ext.renderer,{header:{_:function(a,b,c,d){k(a.nTable).on("order.dt.DT",function(e,f,g,h){a===f&&(e=c.idx,b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass("asc"==h[e]?d.sSortAsc:"desc"==h[e]?d.sSortDesc:c.sSortingClass))})},jqueryui:function(a,b,c,d){k("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(k("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);k(a.nTable).on("order.dt.DT",function(e,f,g,h){a===f&&(e=c.idx,b.removeClass(d.sSortAsc+
|
179 |
+
" "+d.sSortDesc).addClass("asc"==h[e]?d.sSortAsc:"desc"==h[e]?d.sSortDesc:c.sSortingClass),b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass("asc"==h[e]?d.sSortJUIAsc:"desc"==h[e]?d.sSortJUIDesc:c.sSortingClassJUI))})}}});var xb=function(a){return"string"===typeof a?a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""):a};u.render={number:function(a,b,c,d,e){return{display:function(f){if("number"!==
|
180 |
+
typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return xb(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,a)+f+(e||"")}}},text:function(){return{display:xb,filter:xb}}};k.extend(u.ext.internal,{_fnExternApiFunc:fc,_fnBuildAjax:La,_fnAjaxUpdate:Fb,_fnAjaxParameters:Ob,_fnAjaxUpdateDraw:Pb,_fnAjaxDataSrc:Ma,_fnAddColumn:Wa,_fnColumnOptions:Da,_fnAdjustColumnSizing:ra,
|
181 |
+
_fnVisibleToColumnIndex:sa,_fnColumnIndexToVisible:ta,_fnVisbleColumns:na,_fnGetColumns:Fa,_fnColumnTypes:Ya,_fnApplyColumnDefs:Cb,_fnHungarianMap:G,_fnCamelToHungarian:O,_fnLanguageCompat:ma,_fnBrowserDetect:Ab,_fnAddData:ea,_fnAddTr:Ga,_fnNodeToDataIndex:function(a,b){return b._DT_RowIndex!==q?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return k.inArray(c,a.aoData[b].anCells)},_fnGetCellData:S,_fnSetCellData:Db,_fnSplitObjNotation:ab,_fnGetObjectDataFn:ia,_fnSetObjectDataFn:da,_fnGetDataMaster:bb,
|
182 |
+
_fnClearTable:Ha,_fnDeleteIndex:Ia,_fnInvalidate:va,_fnGetRowElements:$a,_fnCreateTr:Za,_fnBuildHead:Eb,_fnDrawHead:xa,_fnDraw:fa,_fnReDraw:ja,_fnAddOptionsHtml:Hb,_fnDetectHeader:wa,_fnGetUniqueThs:Ka,_fnFeatureHtmlFilter:Jb,_fnFilterComplete:ya,_fnFilterCustom:Sb,_fnFilterColumn:Rb,_fnFilter:Qb,_fnFilterCreateSearch:gb,_fnEscapeRegex:hb,_fnFilterData:Tb,_fnFeatureHtmlInfo:Mb,_fnUpdateInfo:Wb,_fnInfoMacros:Xb,_fnInitialise:za,_fnInitComplete:Na,_fnLengthChange:ib,_fnFeatureHtmlLength:Ib,_fnFeatureHtmlPaginate:Nb,
|
183 |
+
_fnPageChange:kb,_fnFeatureHtmlProcessing:Kb,_fnProcessingDisplay:U,_fnFeatureHtmlTable:Lb,_fnScrollDraw:Ea,_fnApplyToChildren:Z,_fnCalculateColumnWidths:Xa,_fnThrottle:fb,_fnConvertToWidth:Zb,_fnGetWidestNode:$b,_fnGetMaxLenString:ac,_fnStringToCss:K,_fnSortFlatten:pa,_fnSort:Gb,_fnSortAria:cc,_fnSortListener:nb,_fnSortAttachListener:db,_fnSortingClasses:Pa,_fnSortData:bc,_fnSaveState:Qa,_fnLoadState:dc,_fnSettingsFromNode:Ra,_fnLog:aa,_fnMap:V,_fnBindAction:ob,_fnCallbackReg:Q,_fnCallbackFire:H,
|
184 |
+
_fnLengthOverflow:jb,_fnRenderer:eb,_fnDataSource:P,_fnRowAttributes:cb,_fnExtend:pb,_fnCalculateEnd:function(){}});k.fn.dataTable=u;u.$=k;k.fn.dataTableSettings=u.settings;k.fn.dataTableExt=u.ext;k.fn.DataTable=function(a){return k(this).dataTable(a).api()};k.each(u,function(a,b){k.fn.DataTable[a]=b});return k.fn.dataTable});
|
admin/js/slick.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
!function(i){"use strict";"function"==typeof define&&define.amd?define(["jquery"],i):"undefined"!=typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function(i){"use strict";var e=window.Slick||{};(e=function(){var e=0;return function(t,o){var s,n=this;n.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:i(t),appendDots:i(t),arrows:!0,asNavFor:null,prevArrow:'<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',nextArrow:'<button class="slick-next" aria-label="Next" type="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(e,t){return i('<button type="button" />').text(t+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,focusOnChange:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},n.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,scrolling:!1,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,sliding:!1,slideOffset:0,swipeLeft:null,swiping:!1,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},i.extend(n,n.initials),n.activeBreakpoint=null,n.animType=null,n.animProp=null,n.breakpoints=[],n.breakpointSettings=[],n.cssTransitions=!1,n.focussed=!1,n.interrupted=!1,n.hidden="hidden",n.paused=!0,n.positionProp=null,n.respondTo=null,n.rowCount=1,n.shouldClick=!0,n.$slider=i(t),n.$slidesCache=null,n.transformType=null,n.transitionType=null,n.visibilityChange="visibilitychange",n.windowWidth=0,n.windowTimer=null,s=i(t).data("slick")||{},n.options=i.extend({},n.defaults,o,s),n.currentSlide=n.options.initialSlide,n.originalSettings=n.options,void 0!==document.mozHidden?(n.hidden="mozHidden",n.visibilityChange="mozvisibilitychange"):void 0!==document.webkitHidden&&(n.hidden="webkitHidden",n.visibilityChange="webkitvisibilitychange"),n.autoPlay=i.proxy(n.autoPlay,n),n.autoPlayClear=i.proxy(n.autoPlayClear,n),n.autoPlayIterator=i.proxy(n.autoPlayIterator,n),n.changeSlide=i.proxy(n.changeSlide,n),n.clickHandler=i.proxy(n.clickHandler,n),n.selectHandler=i.proxy(n.selectHandler,n),n.setPosition=i.proxy(n.setPosition,n),n.swipeHandler=i.proxy(n.swipeHandler,n),n.dragHandler=i.proxy(n.dragHandler,n),n.keyHandler=i.proxy(n.keyHandler,n),n.instanceUid=e++,n.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,n.registerBreakpoints(),n.init(!0)}}()).prototype.activateADA=function(){this.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},e.prototype.addSlide=e.prototype.slickAdd=function(e,t,o){var s=this;if("boolean"==typeof t)o=t,t=null;else if(t<0||t>=s.slideCount)return!1;s.unload(),"number"==typeof t?0===t&&0===s.$slides.length?i(e).appendTo(s.$slideTrack):o?i(e).insertBefore(s.$slides.eq(t)):i(e).insertAfter(s.$slides.eq(t)):!0===o?i(e).prependTo(s.$slideTrack):i(e).appendTo(s.$slideTrack),s.$slides=s.$slideTrack.children(this.options.slide),s.$slideTrack.children(this.options.slide).detach(),s.$slideTrack.append(s.$slides),s.$slides.each(function(e,t){i(t).attr("data-slick-index",e)}),s.$slidesCache=s.$slides,s.reinit()},e.prototype.animateHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.animate({height:e},i.options.speed)}},e.prototype.animateSlide=function(e,t){var o={},s=this;s.animateHeight(),!0===s.options.rtl&&!1===s.options.vertical&&(e=-e),!1===s.transformsEnabled?!1===s.options.vertical?s.$slideTrack.animate({left:e},s.options.speed,s.options.easing,t):s.$slideTrack.animate({top:e},s.options.speed,s.options.easing,t):!1===s.cssTransitions?(!0===s.options.rtl&&(s.currentLeft=-s.currentLeft),i({animStart:s.currentLeft}).animate({animStart:e},{duration:s.options.speed,easing:s.options.easing,step:function(i){i=Math.ceil(i),!1===s.options.vertical?(o[s.animType]="translate("+i+"px, 0px)",s.$slideTrack.css(o)):(o[s.animType]="translate(0px,"+i+"px)",s.$slideTrack.css(o))},complete:function(){t&&t.call()}})):(s.applyTransition(),e=Math.ceil(e),!1===s.options.vertical?o[s.animType]="translate3d("+e+"px, 0px, 0px)":o[s.animType]="translate3d(0px,"+e+"px, 0px)",s.$slideTrack.css(o),t&&setTimeout(function(){s.disableTransition(),t.call()},s.options.speed))},e.prototype.getNavTarget=function(){var e=this,t=e.options.asNavFor;return t&&null!==t&&(t=i(t).not(e.$slider)),t},e.prototype.asNavFor=function(e){var t=this.getNavTarget();null!==t&&"object"==typeof t&&t.each(function(){var t=i(this).slick("getSlick");t.unslicked||t.slideHandler(e,!0)})},e.prototype.applyTransition=function(i){var e=this,t={};!1===e.options.fade?t[e.transitionType]=e.transformType+" "+e.options.speed+"ms "+e.options.cssEase:t[e.transitionType]="opacity "+e.options.speed+"ms "+e.options.cssEase,!1===e.options.fade?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.autoPlay=function(){var i=this;i.autoPlayClear(),i.slideCount>i.options.slidesToShow&&(i.autoPlayTimer=setInterval(i.autoPlayIterator,i.options.autoplaySpeed))},e.prototype.autoPlayClear=function(){var i=this;i.autoPlayTimer&&clearInterval(i.autoPlayTimer)},e.prototype.autoPlayIterator=function(){var i=this,e=i.currentSlide+i.options.slidesToScroll;i.paused||i.interrupted||i.focussed||(!1===i.options.infinite&&(1===i.direction&&i.currentSlide+1===i.slideCount-1?i.direction=0:0===i.direction&&(e=i.currentSlide-i.options.slidesToScroll,i.currentSlide-1==0&&(i.direction=1))),i.slideHandler(e))},e.prototype.buildArrows=function(){var e=this;!0===e.options.arrows&&(e.$prevArrow=i(e.options.prevArrow).addClass("slick-arrow"),e.$nextArrow=i(e.options.nextArrow).addClass("slick-arrow"),e.slideCount>e.options.slidesToShow?(e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.prependTo(e.options.appendArrows),e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.appendTo(e.options.appendArrows),!0!==e.options.infinite&&e.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},e.prototype.buildDots=function(){var e,t,o=this;if(!0===o.options.dots){for(o.$slider.addClass("slick-dotted"),t=i("<ul />").addClass(o.options.dotsClass),e=0;e<=o.getDotCount();e+=1)t.append(i("<li />").append(o.options.customPaging.call(this,o,e)));o.$dots=t.appendTo(o.options.appendDots),o.$dots.find("li").first().addClass("slick-active")}},e.prototype.buildOut=function(){var e=this;e.$slides=e.$slider.children(e.options.slide+":not(.slick-cloned)").addClass("slick-slide"),e.slideCount=e.$slides.length,e.$slides.each(function(e,t){i(t).attr("data-slick-index",e).data("originalStyling",i(t).attr("style")||"")}),e.$slider.addClass("slick-slider"),e.$slideTrack=0===e.slideCount?i('<div class="slick-track"/>').appendTo(e.$slider):e.$slides.wrapAll('<div class="slick-track"/>').parent(),e.$list=e.$slideTrack.wrap('<div class="slick-list"/>').parent(),e.$slideTrack.css("opacity",0),!0!==e.options.centerMode&&!0!==e.options.swipeToSlide||(e.options.slidesToScroll=1),i("img[data-lazy]",e.$slider).not("[src]").addClass("slick-loading"),e.setupInfinite(),e.buildArrows(),e.buildDots(),e.updateDots(),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),!0===e.options.draggable&&e.$list.addClass("draggable")},e.prototype.buildRows=function(){var i,e,t,o,s,n,r,l=this;if(o=document.createDocumentFragment(),n=l.$slider.children(),l.options.rows>1){for(r=l.options.slidesPerRow*l.options.rows,s=Math.ceil(n.length/r),i=0;i<s;i++){var d=document.createElement("div");for(e=0;e<l.options.rows;e++){var a=document.createElement("div");for(t=0;t<l.options.slidesPerRow;t++){var c=i*r+(e*l.options.slidesPerRow+t);n.get(c)&&a.appendChild(n.get(c))}d.appendChild(a)}o.appendChild(d)}l.$slider.empty().append(o),l.$slider.children().children().children().css({width:100/l.options.slidesPerRow+"%",display:"inline-block"})}},e.prototype.checkResponsive=function(e,t){var o,s,n,r=this,l=!1,d=r.$slider.width(),a=window.innerWidth||i(window).width();if("window"===r.respondTo?n=a:"slider"===r.respondTo?n=d:"min"===r.respondTo&&(n=Math.min(a,d)),r.options.responsive&&r.options.responsive.length&&null!==r.options.responsive){s=null;for(o in r.breakpoints)r.breakpoints.hasOwnProperty(o)&&(!1===r.originalSettings.mobileFirst?n<r.breakpoints[o]&&(s=r.breakpoints[o]):n>r.breakpoints[o]&&(s=r.breakpoints[o]));null!==s?null!==r.activeBreakpoint?(s!==r.activeBreakpoint||t)&&(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):null!==r.activeBreakpoint&&(r.activeBreakpoint=null,r.options=r.originalSettings,!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e),l=s),e||!1===l||r.$slider.trigger("breakpoint",[r,l])}},e.prototype.changeSlide=function(e,t){var o,s,n,r=this,l=i(e.currentTarget);switch(l.is("a")&&e.preventDefault(),l.is("li")||(l=l.closest("li")),n=r.slideCount%r.options.slidesToScroll!=0,o=n?0:(r.slideCount-r.currentSlide)%r.options.slidesToScroll,e.data.message){case"previous":s=0===o?r.options.slidesToScroll:r.options.slidesToShow-o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide-s,!1,t);break;case"next":s=0===o?r.options.slidesToScroll:o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide+s,!1,t);break;case"index":var d=0===e.data.index?0:e.data.index||l.index()*r.options.slidesToScroll;r.slideHandler(r.checkNavigable(d),!1,t),l.children().trigger("focus");break;default:return}},e.prototype.checkNavigable=function(i){var e,t;if(e=this.getNavigableIndexes(),t=0,i>e[e.length-1])i=e[e.length-1];else for(var o in e){if(i<e[o]){i=t;break}t=e[o]}return i},e.prototype.cleanUpEvents=function(){var e=this;e.options.dots&&null!==e.$dots&&(i("li",e.$dots).off("click.slick",e.changeSlide).off("mouseenter.slick",i.proxy(e.interrupt,e,!0)).off("mouseleave.slick",i.proxy(e.interrupt,e,!1)),!0===e.options.accessibility&&e.$dots.off("keydown.slick",e.keyHandler)),e.$slider.off("focus.slick blur.slick"),!0===e.options.arrows&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow&&e.$prevArrow.off("click.slick",e.changeSlide),e.$nextArrow&&e.$nextArrow.off("click.slick",e.changeSlide),!0===e.options.accessibility&&(e.$prevArrow&&e.$prevArrow.off("keydown.slick",e.keyHandler),e.$nextArrow&&e.$nextArrow.off("keydown.slick",e.keyHandler))),e.$list.off("touchstart.slick mousedown.slick",e.swipeHandler),e.$list.off("touchmove.slick mousemove.slick",e.swipeHandler),e.$list.off("touchend.slick mouseup.slick",e.swipeHandler),e.$list.off("touchcancel.slick mouseleave.slick",e.swipeHandler),e.$list.off("click.slick",e.clickHandler),i(document).off(e.visibilityChange,e.visibility),e.cleanUpSlideEvents(),!0===e.options.accessibility&&e.$list.off("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().off("click.slick",e.selectHandler),i(window).off("orientationchange.slick.slick-"+e.instanceUid,e.orientationChange),i(window).off("resize.slick.slick-"+e.instanceUid,e.resize),i("[draggable!=true]",e.$slideTrack).off("dragstart",e.preventDefault),i(window).off("load.slick.slick-"+e.instanceUid,e.setPosition)},e.prototype.cleanUpSlideEvents=function(){var e=this;e.$list.off("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.off("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.cleanUpRows=function(){var i,e=this;e.options.rows>1&&((i=e.$slides.children().children()).removeAttr("style"),e.$slider.empty().append(i))},e.prototype.clickHandler=function(i){!1===this.shouldClick&&(i.stopImmediatePropagation(),i.stopPropagation(),i.preventDefault())},e.prototype.destroy=function(e){var t=this;t.autoPlayClear(),t.touchObject={},t.cleanUpEvents(),i(".slick-cloned",t.$slider).detach(),t.$dots&&t.$dots.remove(),t.$prevArrow&&t.$prevArrow.length&&(t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.prevArrow)&&t.$prevArrow.remove()),t.$nextArrow&&t.$nextArrow.length&&(t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.nextArrow)&&t.$nextArrow.remove()),t.$slides&&(t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){i(this).attr("style",i(this).data("originalStyling"))}),t.$slideTrack.children(this.options.slide).detach(),t.$slideTrack.detach(),t.$list.detach(),t.$slider.append(t.$slides)),t.cleanUpRows(),t.$slider.removeClass("slick-slider"),t.$slider.removeClass("slick-initialized"),t.$slider.removeClass("slick-dotted"),t.unslicked=!0,e||t.$slider.trigger("destroy",[t])},e.prototype.disableTransition=function(i){var e=this,t={};t[e.transitionType]="",!1===e.options.fade?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.fadeSlide=function(i,e){var t=this;!1===t.cssTransitions?(t.$slides.eq(i).css({zIndex:t.options.zIndex}),t.$slides.eq(i).animate({opacity:1},t.options.speed,t.options.easing,e)):(t.applyTransition(i),t.$slides.eq(i).css({opacity:1,zIndex:t.options.zIndex}),e&&setTimeout(function(){t.disableTransition(i),e.call()},t.options.speed))},e.prototype.fadeSlideOut=function(i){var e=this;!1===e.cssTransitions?e.$slides.eq(i).animate({opacity:0,zIndex:e.options.zIndex-2},e.options.speed,e.options.easing):(e.applyTransition(i),e.$slides.eq(i).css({opacity:0,zIndex:e.options.zIndex-2}))},e.prototype.filterSlides=e.prototype.slickFilter=function(i){var e=this;null!==i&&(e.$slidesCache=e.$slides,e.unload(),e.$slideTrack.children(this.options.slide).detach(),e.$slidesCache.filter(i).appendTo(e.$slideTrack),e.reinit())},e.prototype.focusHandler=function(){var e=this;e.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*",function(t){t.stopImmediatePropagation();var o=i(this);setTimeout(function(){e.options.pauseOnFocus&&(e.focussed=o.is(":focus"),e.autoPlay())},0)})},e.prototype.getCurrent=e.prototype.slickCurrentSlide=function(){return this.currentSlide},e.prototype.getDotCount=function(){var i=this,e=0,t=0,o=0;if(!0===i.options.infinite)if(i.slideCount<=i.options.slidesToShow)++o;else for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else if(!0===i.options.centerMode)o=i.slideCount;else if(i.options.asNavFor)for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else o=1+Math.ceil((i.slideCount-i.options.slidesToShow)/i.options.slidesToScroll);return o-1},e.prototype.getLeft=function(i){var e,t,o,s,n=this,r=0;return n.slideOffset=0,t=n.$slides.first().outerHeight(!0),!0===n.options.infinite?(n.slideCount>n.options.slidesToShow&&(n.slideOffset=n.slideWidth*n.options.slidesToShow*-1,s=-1,!0===n.options.vertical&&!0===n.options.centerMode&&(2===n.options.slidesToShow?s=-1.5:1===n.options.slidesToShow&&(s=-2)),r=t*n.options.slidesToShow*s),n.slideCount%n.options.slidesToScroll!=0&&i+n.options.slidesToScroll>n.slideCount&&n.slideCount>n.options.slidesToShow&&(i>n.slideCount?(n.slideOffset=(n.options.slidesToShow-(i-n.slideCount))*n.slideWidth*-1,r=(n.options.slidesToShow-(i-n.slideCount))*t*-1):(n.slideOffset=n.slideCount%n.options.slidesToScroll*n.slideWidth*-1,r=n.slideCount%n.options.slidesToScroll*t*-1))):i+n.options.slidesToShow>n.slideCount&&(n.slideOffset=(i+n.options.slidesToShow-n.slideCount)*n.slideWidth,r=(i+n.options.slidesToShow-n.slideCount)*t),n.slideCount<=n.options.slidesToShow&&(n.slideOffset=0,r=0),!0===n.options.centerMode&&n.slideCount<=n.options.slidesToShow?n.slideOffset=n.slideWidth*Math.floor(n.options.slidesToShow)/2-n.slideWidth*n.slideCount/2:!0===n.options.centerMode&&!0===n.options.infinite?n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)-n.slideWidth:!0===n.options.centerMode&&(n.slideOffset=0,n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)),e=!1===n.options.vertical?i*n.slideWidth*-1+n.slideOffset:i*t*-1+r,!0===n.options.variableWidth&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,!0===n.options.centerMode&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow+1),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,e+=(n.$list.width()-o.outerWidth())/2)),e},e.prototype.getOption=e.prototype.slickGetOption=function(i){return this.options[i]},e.prototype.getNavigableIndexes=function(){var i,e=this,t=0,o=0,s=[];for(!1===e.options.infinite?i=e.slideCount:(t=-1*e.options.slidesToScroll,o=-1*e.options.slidesToScroll,i=2*e.slideCount);t<i;)s.push(t),t=o+e.options.slidesToScroll,o+=e.options.slidesToScroll<=e.options.slidesToShow?e.options.slidesToScroll:e.options.slidesToShow;return s},e.prototype.getSlick=function(){return this},e.prototype.getSlideCount=function(){var e,t,o=this;return t=!0===o.options.centerMode?o.slideWidth*Math.floor(o.options.slidesToShow/2):0,!0===o.options.swipeToSlide?(o.$slideTrack.find(".slick-slide").each(function(s,n){if(n.offsetLeft-t+i(n).outerWidth()/2>-1*o.swipeLeft)return e=n,!1}),Math.abs(i(e).attr("data-slick-index")-o.currentSlide)||1):o.options.slidesToScroll},e.prototype.goTo=e.prototype.slickGoTo=function(i,e){this.changeSlide({data:{message:"index",index:parseInt(i)}},e)},e.prototype.init=function(e){var t=this;i(t.$slider).hasClass("slick-initialized")||(i(t.$slider).addClass("slick-initialized"),t.buildRows(),t.buildOut(),t.setProps(),t.startLoad(),t.loadSlider(),t.initializeEvents(),t.updateArrows(),t.updateDots(),t.checkResponsive(!0),t.focusHandler()),e&&t.$slider.trigger("init",[t]),!0===t.options.accessibility&&t.initADA(),t.options.autoplay&&(t.paused=!1,t.autoPlay())},e.prototype.initADA=function(){var e=this,t=Math.ceil(e.slideCount/e.options.slidesToShow),o=e.getNavigableIndexes().filter(function(i){return i>=0&&i<e.slideCount});e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),null!==e.$dots&&(e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function(t){var s=o.indexOf(t);i(this).attr({role:"tabpanel",id:"slick-slide"+e.instanceUid+t,tabindex:-1}),-1!==s&&i(this).attr({"aria-describedby":"slick-slide-control"+e.instanceUid+s})}),e.$dots.attr("role","tablist").find("li").each(function(s){var n=o[s];i(this).attr({role:"presentation"}),i(this).find("button").first().attr({role:"tab",id:"slick-slide-control"+e.instanceUid+s,"aria-controls":"slick-slide"+e.instanceUid+n,"aria-label":s+1+" of "+t,"aria-selected":null,tabindex:"-1"})}).eq(e.currentSlide).find("button").attr({"aria-selected":"true",tabindex:"0"}).end());for(var s=e.currentSlide,n=s+e.options.slidesToShow;s<n;s++)e.$slides.eq(s).attr("tabindex",0);e.activateADA()},e.prototype.initArrowEvents=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},i.changeSlide),i.$nextArrow.off("click.slick").on("click.slick",{message:"next"},i.changeSlide),!0===i.options.accessibility&&(i.$prevArrow.on("keydown.slick",i.keyHandler),i.$nextArrow.on("keydown.slick",i.keyHandler)))},e.prototype.initDotEvents=function(){var e=this;!0===e.options.dots&&(i("li",e.$dots).on("click.slick",{message:"index"},e.changeSlide),!0===e.options.accessibility&&e.$dots.on("keydown.slick",e.keyHandler)),!0===e.options.dots&&!0===e.options.pauseOnDotsHover&&i("li",e.$dots).on("mouseenter.slick",i.proxy(e.interrupt,e,!0)).on("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.initSlideEvents=function(){var e=this;e.options.pauseOnHover&&(e.$list.on("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.on("mouseleave.slick",i.proxy(e.interrupt,e,!1)))},e.prototype.initializeEvents=function(){var e=this;e.initArrowEvents(),e.initDotEvents(),e.initSlideEvents(),e.$list.on("touchstart.slick mousedown.slick",{action:"start"},e.swipeHandler),e.$list.on("touchmove.slick mousemove.slick",{action:"move"},e.swipeHandler),e.$list.on("touchend.slick mouseup.slick",{action:"end"},e.swipeHandler),e.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},e.swipeHandler),e.$list.on("click.slick",e.clickHandler),i(document).on(e.visibilityChange,i.proxy(e.visibility,e)),!0===e.options.accessibility&&e.$list.on("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),i(window).on("orientationchange.slick.slick-"+e.instanceUid,i.proxy(e.orientationChange,e)),i(window).on("resize.slick.slick-"+e.instanceUid,i.proxy(e.resize,e)),i("[draggable!=true]",e.$slideTrack).on("dragstart",e.preventDefault),i(window).on("load.slick.slick-"+e.instanceUid,e.setPosition),i(e.setPosition)},e.prototype.initUI=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.show(),i.$nextArrow.show()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.show()},e.prototype.keyHandler=function(i){var e=this;i.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===i.keyCode&&!0===e.options.accessibility?e.changeSlide({data:{message:!0===e.options.rtl?"next":"previous"}}):39===i.keyCode&&!0===e.options.accessibility&&e.changeSlide({data:{message:!0===e.options.rtl?"previous":"next"}}))},e.prototype.lazyLoad=function(){function e(e){i("img[data-lazy]",e).each(function(){var e=i(this),t=i(this).attr("data-lazy"),o=i(this).attr("data-srcset"),s=i(this).attr("data-sizes")||n.$slider.attr("data-sizes"),r=document.createElement("img");r.onload=function(){e.animate({opacity:0},100,function(){o&&(e.attr("srcset",o),s&&e.attr("sizes",s)),e.attr("src",t).animate({opacity:1},200,function(){e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading")}),n.$slider.trigger("lazyLoaded",[n,e,t])})},r.onerror=function(){e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),n.$slider.trigger("lazyLoadError",[n,e,t])},r.src=t})}var t,o,s,n=this;if(!0===n.options.centerMode?!0===n.options.infinite?s=(o=n.currentSlide+(n.options.slidesToShow/2+1))+n.options.slidesToShow+2:(o=Math.max(0,n.currentSlide-(n.options.slidesToShow/2+1)),s=n.options.slidesToShow/2+1+2+n.currentSlide):(o=n.options.infinite?n.options.slidesToShow+n.currentSlide:n.currentSlide,s=Math.ceil(o+n.options.slidesToShow),!0===n.options.fade&&(o>0&&o--,s<=n.slideCount&&s++)),t=n.$slider.find(".slick-slide").slice(o,s),"anticipated"===n.options.lazyLoad)for(var r=o-1,l=s,d=n.$slider.find(".slick-slide"),a=0;a<n.options.slidesToScroll;a++)r<0&&(r=n.slideCount-1),t=(t=t.add(d.eq(r))).add(d.eq(l)),r--,l++;e(t),n.slideCount<=n.options.slidesToShow?e(n.$slider.find(".slick-slide")):n.currentSlide>=n.slideCount-n.options.slidesToShow?e(n.$slider.find(".slick-cloned").slice(0,n.options.slidesToShow)):0===n.currentSlide&&e(n.$slider.find(".slick-cloned").slice(-1*n.options.slidesToShow))},e.prototype.loadSlider=function(){var i=this;i.setPosition(),i.$slideTrack.css({opacity:1}),i.$slider.removeClass("slick-loading"),i.initUI(),"progressive"===i.options.lazyLoad&&i.progressiveLazyLoad()},e.prototype.next=e.prototype.slickNext=function(){this.changeSlide({data:{message:"next"}})},e.prototype.orientationChange=function(){var i=this;i.checkResponsive(),i.setPosition()},e.prototype.pause=e.prototype.slickPause=function(){var i=this;i.autoPlayClear(),i.paused=!0},e.prototype.play=e.prototype.slickPlay=function(){var i=this;i.autoPlay(),i.options.autoplay=!0,i.paused=!1,i.focussed=!1,i.interrupted=!1},e.prototype.postSlide=function(e){var t=this;t.unslicked||(t.$slider.trigger("afterChange",[t,e]),t.animating=!1,t.slideCount>t.options.slidesToShow&&t.setPosition(),t.swipeLeft=null,t.options.autoplay&&t.autoPlay(),!0===t.options.accessibility&&(t.initADA(),t.options.focusOnChange&&i(t.$slides.get(t.currentSlide)).attr("tabindex",0).focus()))},e.prototype.prev=e.prototype.slickPrev=function(){this.changeSlide({data:{message:"previous"}})},e.prototype.preventDefault=function(i){i.preventDefault()},e.prototype.progressiveLazyLoad=function(e){e=e||1;var t,o,s,n,r,l=this,d=i("img[data-lazy]",l.$slider);d.length?(t=d.first(),o=t.attr("data-lazy"),s=t.attr("data-srcset"),n=t.attr("data-sizes")||l.$slider.attr("data-sizes"),(r=document.createElement("img")).onload=function(){s&&(t.attr("srcset",s),n&&t.attr("sizes",n)),t.attr("src",o).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"),!0===l.options.adaptiveHeight&&l.setPosition(),l.$slider.trigger("lazyLoaded",[l,t,o]),l.progressiveLazyLoad()},r.onerror=function(){e<3?setTimeout(function(){l.progressiveLazyLoad(e+1)},500):(t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),l.$slider.trigger("lazyLoadError",[l,t,o]),l.progressiveLazyLoad())},r.src=o):l.$slider.trigger("allImagesLoaded",[l])},e.prototype.refresh=function(e){var t,o,s=this;o=s.slideCount-s.options.slidesToShow,!s.options.infinite&&s.currentSlide>o&&(s.currentSlide=o),s.slideCount<=s.options.slidesToShow&&(s.currentSlide=0),t=s.currentSlide,s.destroy(!0),i.extend(s,s.initials,{currentSlide:t}),s.init(),e||s.changeSlide({data:{message:"index",index:t}},!1)},e.prototype.registerBreakpoints=function(){var e,t,o,s=this,n=s.options.responsive||null;if("array"===i.type(n)&&n.length){s.respondTo=s.options.respondTo||"window";for(e in n)if(o=s.breakpoints.length-1,n.hasOwnProperty(e)){for(t=n[e].breakpoint;o>=0;)s.breakpoints[o]&&s.breakpoints[o]===t&&s.breakpoints.splice(o,1),o--;s.breakpoints.push(t),s.breakpointSettings[t]=n[e].settings}s.breakpoints.sort(function(i,e){return s.options.mobileFirst?i-e:e-i})}},e.prototype.reinit=function(){var e=this;e.$slides=e.$slideTrack.children(e.options.slide).addClass("slick-slide"),e.slideCount=e.$slides.length,e.currentSlide>=e.slideCount&&0!==e.currentSlide&&(e.currentSlide=e.currentSlide-e.options.slidesToScroll),e.slideCount<=e.options.slidesToShow&&(e.currentSlide=0),e.registerBreakpoints(),e.setProps(),e.setupInfinite(),e.buildArrows(),e.updateArrows(),e.initArrowEvents(),e.buildDots(),e.updateDots(),e.initDotEvents(),e.cleanUpSlideEvents(),e.initSlideEvents(),e.checkResponsive(!1,!0),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),e.setPosition(),e.focusHandler(),e.paused=!e.options.autoplay,e.autoPlay(),e.$slider.trigger("reInit",[e])},e.prototype.resize=function(){var e=this;i(window).width()!==e.windowWidth&&(clearTimeout(e.windowDelay),e.windowDelay=window.setTimeout(function(){e.windowWidth=i(window).width(),e.checkResponsive(),e.unslicked||e.setPosition()},50))},e.prototype.removeSlide=e.prototype.slickRemove=function(i,e,t){var o=this;if(i="boolean"==typeof i?!0===(e=i)?0:o.slideCount-1:!0===e?--i:i,o.slideCount<1||i<0||i>o.slideCount-1)return!1;o.unload(),!0===t?o.$slideTrack.children().remove():o.$slideTrack.children(this.options.slide).eq(i).remove(),o.$slides=o.$slideTrack.children(this.options.slide),o.$slideTrack.children(this.options.slide).detach(),o.$slideTrack.append(o.$slides),o.$slidesCache=o.$slides,o.reinit()},e.prototype.setCSS=function(i){var e,t,o=this,s={};!0===o.options.rtl&&(i=-i),e="left"==o.positionProp?Math.ceil(i)+"px":"0px",t="top"==o.positionProp?Math.ceil(i)+"px":"0px",s[o.positionProp]=i,!1===o.transformsEnabled?o.$slideTrack.css(s):(s={},!1===o.cssTransitions?(s[o.animType]="translate("+e+", "+t+")",o.$slideTrack.css(s)):(s[o.animType]="translate3d("+e+", "+t+", 0px)",o.$slideTrack.css(s)))},e.prototype.setDimensions=function(){var i=this;!1===i.options.vertical?!0===i.options.centerMode&&i.$list.css({padding:"0px "+i.options.centerPadding}):(i.$list.height(i.$slides.first().outerHeight(!0)*i.options.slidesToShow),!0===i.options.centerMode&&i.$list.css({padding:i.options.centerPadding+" 0px"})),i.listWidth=i.$list.width(),i.listHeight=i.$list.height(),!1===i.options.vertical&&!1===i.options.variableWidth?(i.slideWidth=Math.ceil(i.listWidth/i.options.slidesToShow),i.$slideTrack.width(Math.ceil(i.slideWidth*i.$slideTrack.children(".slick-slide").length))):!0===i.options.variableWidth?i.$slideTrack.width(5e3*i.slideCount):(i.slideWidth=Math.ceil(i.listWidth),i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0)*i.$slideTrack.children(".slick-slide").length)));var e=i.$slides.first().outerWidth(!0)-i.$slides.first().width();!1===i.options.variableWidth&&i.$slideTrack.children(".slick-slide").width(i.slideWidth-e)},e.prototype.setFade=function(){var e,t=this;t.$slides.each(function(o,s){e=t.slideWidth*o*-1,!0===t.options.rtl?i(s).css({position:"relative",right:e,top:0,zIndex:t.options.zIndex-2,opacity:0}):i(s).css({position:"relative",left:e,top:0,zIndex:t.options.zIndex-2,opacity:0})}),t.$slides.eq(t.currentSlide).css({zIndex:t.options.zIndex-1,opacity:1})},e.prototype.setHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.css("height",e)}},e.prototype.setOption=e.prototype.slickSetOption=function(){var e,t,o,s,n,r=this,l=!1;if("object"===i.type(arguments[0])?(o=arguments[0],l=arguments[1],n="multiple"):"string"===i.type(arguments[0])&&(o=arguments[0],s=arguments[1],l=arguments[2],"responsive"===arguments[0]&&"array"===i.type(arguments[1])?n="responsive":void 0!==arguments[1]&&(n="single")),"single"===n)r.options[o]=s;else if("multiple"===n)i.each(o,function(i,e){r.options[i]=e});else if("responsive"===n)for(t in s)if("array"!==i.type(r.options.responsive))r.options.responsive=[s[t]];else{for(e=r.options.responsive.length-1;e>=0;)r.options.responsive[e].breakpoint===s[t].breakpoint&&r.options.responsive.splice(e,1),e--;r.options.responsive.push(s[t])}l&&(r.unload(),r.reinit())},e.prototype.setPosition=function(){var i=this;i.setDimensions(),i.setHeight(),!1===i.options.fade?i.setCSS(i.getLeft(i.currentSlide)):i.setFade(),i.$slider.trigger("setPosition",[i])},e.prototype.setProps=function(){var i=this,e=document.body.style;i.positionProp=!0===i.options.vertical?"top":"left","top"===i.positionProp?i.$slider.addClass("slick-vertical"):i.$slider.removeClass("slick-vertical"),void 0===e.WebkitTransition&&void 0===e.MozTransition&&void 0===e.msTransition||!0===i.options.useCSS&&(i.cssTransitions=!0),i.options.fade&&("number"==typeof i.options.zIndex?i.options.zIndex<3&&(i.options.zIndex=3):i.options.zIndex=i.defaults.zIndex),void 0!==e.OTransform&&(i.animType="OTransform",i.transformType="-o-transform",i.transitionType="OTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.MozTransform&&(i.animType="MozTransform",i.transformType="-moz-transform",i.transitionType="MozTransition",void 0===e.perspectiveProperty&&void 0===e.MozPerspective&&(i.animType=!1)),void 0!==e.webkitTransform&&(i.animType="webkitTransform",i.transformType="-webkit-transform",i.transitionType="webkitTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.msTransform&&(i.animType="msTransform",i.transformType="-ms-transform",i.transitionType="msTransition",void 0===e.msTransform&&(i.animType=!1)),void 0!==e.transform&&!1!==i.animType&&(i.animType="transform",i.transformType="transform",i.transitionType="transition"),i.transformsEnabled=i.options.useTransform&&null!==i.animType&&!1!==i.animType},e.prototype.setSlideClasses=function(i){var e,t,o,s,n=this;if(t=n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),n.$slides.eq(i).addClass("slick-current"),!0===n.options.centerMode){var r=n.options.slidesToShow%2==0?1:0;e=Math.floor(n.options.slidesToShow/2),!0===n.options.infinite&&(i>=e&&i<=n.slideCount-1-e?n.$slides.slice(i-e+r,i+e+1).addClass("slick-active").attr("aria-hidden","false"):(o=n.options.slidesToShow+i,t.slice(o-e+1+r,o+e+2).addClass("slick-active").attr("aria-hidden","false")),0===i?t.eq(t.length-1-n.options.slidesToShow).addClass("slick-center"):i===n.slideCount-1&&t.eq(n.options.slidesToShow).addClass("slick-center")),n.$slides.eq(i).addClass("slick-center")}else i>=0&&i<=n.slideCount-n.options.slidesToShow?n.$slides.slice(i,i+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):t.length<=n.options.slidesToShow?t.addClass("slick-active").attr("aria-hidden","false"):(s=n.slideCount%n.options.slidesToShow,o=!0===n.options.infinite?n.options.slidesToShow+i:i,n.options.slidesToShow==n.options.slidesToScroll&&n.slideCount-i<n.options.slidesToShow?t.slice(o-(n.options.slidesToShow-s),o+s).addClass("slick-active").attr("aria-hidden","false"):t.slice(o,o+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"));"ondemand"!==n.options.lazyLoad&&"anticipated"!==n.options.lazyLoad||n.lazyLoad()},e.prototype.setupInfinite=function(){var e,t,o,s=this;if(!0===s.options.fade&&(s.options.centerMode=!1),!0===s.options.infinite&&!1===s.options.fade&&(t=null,s.slideCount>s.options.slidesToShow)){for(o=!0===s.options.centerMode?s.options.slidesToShow+1:s.options.slidesToShow,e=s.slideCount;e>s.slideCount-o;e-=1)t=e-1,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t-s.slideCount).prependTo(s.$slideTrack).addClass("slick-cloned");for(e=0;e<o+s.slideCount;e+=1)t=e,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t+s.slideCount).appendTo(s.$slideTrack).addClass("slick-cloned");s.$slideTrack.find(".slick-cloned").find("[id]").each(function(){i(this).attr("id","")})}},e.prototype.interrupt=function(i){var e=this;i||e.autoPlay(),e.interrupted=i},e.prototype.selectHandler=function(e){var t=this,o=i(e.target).is(".slick-slide")?i(e.target):i(e.target).parents(".slick-slide"),s=parseInt(o.attr("data-slick-index"));s||(s=0),t.slideCount<=t.options.slidesToShow?t.slideHandler(s,!1,!0):t.slideHandler(s)},e.prototype.slideHandler=function(i,e,t){var o,s,n,r,l,d=null,a=this;if(e=e||!1,!(!0===a.animating&&!0===a.options.waitForAnimate||!0===a.options.fade&&a.currentSlide===i))if(!1===e&&a.asNavFor(i),o=i,d=a.getLeft(o),r=a.getLeft(a.currentSlide),a.currentLeft=null===a.swipeLeft?r:a.swipeLeft,!1===a.options.infinite&&!1===a.options.centerMode&&(i<0||i>a.getDotCount()*a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o));else if(!1===a.options.infinite&&!0===a.options.centerMode&&(i<0||i>a.slideCount-a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o));else{if(a.options.autoplay&&clearInterval(a.autoPlayTimer),s=o<0?a.slideCount%a.options.slidesToScroll!=0?a.slideCount-a.slideCount%a.options.slidesToScroll:a.slideCount+o:o>=a.slideCount?a.slideCount%a.options.slidesToScroll!=0?0:o-a.slideCount:o,a.animating=!0,a.$slider.trigger("beforeChange",[a,a.currentSlide,s]),n=a.currentSlide,a.currentSlide=s,a.setSlideClasses(a.currentSlide),a.options.asNavFor&&(l=(l=a.getNavTarget()).slick("getSlick")).slideCount<=l.options.slidesToShow&&l.setSlideClasses(a.currentSlide),a.updateDots(),a.updateArrows(),!0===a.options.fade)return!0!==t?(a.fadeSlideOut(n),a.fadeSlide(s,function(){a.postSlide(s)})):a.postSlide(s),void a.animateHeight();!0!==t?a.animateSlide(d,function(){a.postSlide(s)}):a.postSlide(s)}},e.prototype.startLoad=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.hide(),i.$nextArrow.hide()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.hide(),i.$slider.addClass("slick-loading")},e.prototype.swipeDirection=function(){var i,e,t,o,s=this;return i=s.touchObject.startX-s.touchObject.curX,e=s.touchObject.startY-s.touchObject.curY,t=Math.atan2(e,i),(o=Math.round(180*t/Math.PI))<0&&(o=360-Math.abs(o)),o<=45&&o>=0?!1===s.options.rtl?"left":"right":o<=360&&o>=315?!1===s.options.rtl?"left":"right":o>=135&&o<=225?!1===s.options.rtl?"right":"left":!0===s.options.verticalSwiping?o>=35&&o<=135?"down":"up":"vertical"},e.prototype.swipeEnd=function(i){var e,t,o=this;if(o.dragging=!1,o.swiping=!1,o.scrolling)return o.scrolling=!1,!1;if(o.interrupted=!1,o.shouldClick=!(o.touchObject.swipeLength>10),void 0===o.touchObject.curX)return!1;if(!0===o.touchObject.edgeHit&&o.$slider.trigger("edge",[o,o.swipeDirection()]),o.touchObject.swipeLength>=o.touchObject.minSwipe){switch(t=o.swipeDirection()){case"left":case"down":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide+o.getSlideCount()):o.currentSlide+o.getSlideCount(),o.currentDirection=0;break;case"right":case"up":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide-o.getSlideCount()):o.currentSlide-o.getSlideCount(),o.currentDirection=1}"vertical"!=t&&(o.slideHandler(e),o.touchObject={},o.$slider.trigger("swipe",[o,t]))}else o.touchObject.startX!==o.touchObject.curX&&(o.slideHandler(o.currentSlide),o.touchObject={})},e.prototype.swipeHandler=function(i){var e=this;if(!(!1===e.options.swipe||"ontouchend"in document&&!1===e.options.swipe||!1===e.options.draggable&&-1!==i.type.indexOf("mouse")))switch(e.touchObject.fingerCount=i.originalEvent&&void 0!==i.originalEvent.touches?i.originalEvent.touches.length:1,e.touchObject.minSwipe=e.listWidth/e.options.touchThreshold,!0===e.options.verticalSwiping&&(e.touchObject.minSwipe=e.listHeight/e.options.touchThreshold),i.data.action){case"start":e.swipeStart(i);break;case"move":e.swipeMove(i);break;case"end":e.swipeEnd(i)}},e.prototype.swipeMove=function(i){var e,t,o,s,n,r,l=this;return n=void 0!==i.originalEvent?i.originalEvent.touches:null,!(!l.dragging||l.scrolling||n&&1!==n.length)&&(e=l.getLeft(l.currentSlide),l.touchObject.curX=void 0!==n?n[0].pageX:i.clientX,l.touchObject.curY=void 0!==n?n[0].pageY:i.clientY,l.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(l.touchObject.curX-l.touchObject.startX,2))),r=Math.round(Math.sqrt(Math.pow(l.touchObject.curY-l.touchObject.startY,2))),!l.options.verticalSwiping&&!l.swiping&&r>4?(l.scrolling=!0,!1):(!0===l.options.verticalSwiping&&(l.touchObject.swipeLength=r),t=l.swipeDirection(),void 0!==i.originalEvent&&l.touchObject.swipeLength>4&&(l.swiping=!0,i.preventDefault()),s=(!1===l.options.rtl?1:-1)*(l.touchObject.curX>l.touchObject.startX?1:-1),!0===l.options.verticalSwiping&&(s=l.touchObject.curY>l.touchObject.startY?1:-1),o=l.touchObject.swipeLength,l.touchObject.edgeHit=!1,!1===l.options.infinite&&(0===l.currentSlide&&"right"===t||l.currentSlide>=l.getDotCount()&&"left"===t)&&(o=l.touchObject.swipeLength*l.options.edgeFriction,l.touchObject.edgeHit=!0),!1===l.options.vertical?l.swipeLeft=e+o*s:l.swipeLeft=e+o*(l.$list.height()/l.listWidth)*s,!0===l.options.verticalSwiping&&(l.swipeLeft=e+o*s),!0!==l.options.fade&&!1!==l.options.touchMove&&(!0===l.animating?(l.swipeLeft=null,!1):void l.setCSS(l.swipeLeft))))},e.prototype.swipeStart=function(i){var e,t=this;if(t.interrupted=!0,1!==t.touchObject.fingerCount||t.slideCount<=t.options.slidesToShow)return t.touchObject={},!1;void 0!==i.originalEvent&&void 0!==i.originalEvent.touches&&(e=i.originalEvent.touches[0]),t.touchObject.startX=t.touchObject.curX=void 0!==e?e.pageX:i.clientX,t.touchObject.startY=t.touchObject.curY=void 0!==e?e.pageY:i.clientY,t.dragging=!0},e.prototype.unfilterSlides=e.prototype.slickUnfilter=function(){var i=this;null!==i.$slidesCache&&(i.unload(),i.$slideTrack.children(this.options.slide).detach(),i.$slidesCache.appendTo(i.$slideTrack),i.reinit())},e.prototype.unload=function(){var e=this;i(".slick-cloned",e.$slider).remove(),e.$dots&&e.$dots.remove(),e.$prevArrow&&e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.remove(),e.$nextArrow&&e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.remove(),e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")},e.prototype.unslick=function(i){var e=this;e.$slider.trigger("unslick",[e,i]),e.destroy()},e.prototype.updateArrows=function(){var i=this;Math.floor(i.options.slidesToShow/2),!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&!i.options.infinite&&(i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===i.currentSlide?(i.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):i.currentSlide>=i.slideCount-i.options.slidesToShow&&!1===i.options.centerMode?(i.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):i.currentSlide>=i.slideCount-1&&!0===i.options.centerMode&&(i.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},e.prototype.updateDots=function(){var i=this;null!==i.$dots&&(i.$dots.find("li").removeClass("slick-active").end(),i.$dots.find("li").eq(Math.floor(i.currentSlide/i.options.slidesToScroll)).addClass("slick-active"))},e.prototype.visibility=function(){var i=this;i.options.autoplay&&(document[i.hidden]?i.interrupted=!0:i.interrupted=!1)},i.fn.slick=function(){var i,t,o=this,s=arguments[0],n=Array.prototype.slice.call(arguments,1),r=o.length;for(i=0;i<r;i++)if("object"==typeof s||void 0===s?o[i].slick=new e(o[i],s):t=o[i].slick[s].apply(o[i].slick,n),void 0!==t)return t;return o}});
|
admin/js/tvc-ee-custom.js
CHANGED
@@ -45,5 +45,12 @@ var tvc_helper = {
|
|
45 |
let tvc_popup_box = document.getElementById('tvc_popup_box');
|
46 |
tvc_popup_box.classList.add("tvc_popup_box_close");
|
47 |
//tvc_popup_box.style.display = "none";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
}
|
49 |
};
|
45 |
let tvc_popup_box = document.getElementById('tvc_popup_box');
|
46 |
tvc_popup_box.classList.add("tvc_popup_box_close");
|
47 |
//tvc_popup_box.style.display = "none";
|
48 |
+
},
|
49 |
+
loaderSection:function(isShow) {
|
50 |
+
if (isShow){
|
51 |
+
$('#feed-spinner').show();
|
52 |
+
}else{
|
53 |
+
$('#feed-spinner').hide();
|
54 |
+
}
|
55 |
}
|
56 |
};
|
admin/partials/about-plugin.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
$message = new Enhanced_Ecommerce_Google_Settings();
|
3 |
-
$obj = new Enhanced_Ecommerce_Google_Analytics_Admin($plugin_name = 'enhanced-e-commerce-for-woocommerce-store', $version =
|
4 |
$today = $obj->today();
|
5 |
$start = $obj->start_date();
|
6 |
$end = $obj->end_date();
|
@@ -161,7 +161,7 @@ $endtime = $obj->end_time();
|
|
161 |
<tr>
|
162 |
<th class="w-25"></th>
|
163 |
<th class="w-25"></th>
|
164 |
-
<th class=""><a href="
|
165 |
<?php if($today >= $start && $today <= $end && $currentime <= $endtime) {?>
|
166 |
<img class="new-img-blink-side" src='<?php echo plugins_url('../images/discount.gif', __FILE__ ) ?>' />
|
167 |
<?php }?>
|
1 |
<?php
|
2 |
$message = new Enhanced_Ecommerce_Google_Settings();
|
3 |
+
$obj = new Enhanced_Ecommerce_Google_Analytics_Admin($plugin_name = 'enhanced-e-commerce-for-woocommerce-store', $version = PLUGIN_TVC_VERSION);
|
4 |
$today = $obj->today();
|
5 |
$start = $obj->start_date();
|
6 |
$end = $obj->end_date();
|
161 |
<tr>
|
162 |
<th class="w-25"></th>
|
163 |
<th class="w-25"></th>
|
164 |
+
<th class=""><a href="#" target="_blank"><button class="btn btn-primary"><strong>Get premium plugin</strong>
|
165 |
<?php if($today >= $start && $today <= $end && $currentime <= $endtime) {?>
|
166 |
<img class="new-img-blink-side" src='<?php echo plugins_url('../images/discount.gif', __FILE__ ) ?>' />
|
167 |
<?php }?>
|
admin/partials/enhanced-ecommerce-google-analytics-admin-display.php
CHANGED
@@ -15,92 +15,80 @@ if (!defined('ABSPATH')) {
|
|
15 |
exit;
|
16 |
}
|
17 |
class TVC_Tabs {
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
}
|
37 |
-
return ;
|
38 |
-
}
|
39 |
-
protected function create_tabs(){
|
40 |
-
$setting_status = $this->TVC_Admin_Helper->check_setting_status();
|
41 |
-
//print_r($setting_status); exit;
|
42 |
-
/*$today = $obj->today();
|
43 |
-
$start = $obj->start_date();
|
44 |
-
$end = $obj->end_date();
|
45 |
-
$currentime = $obj->current_time();
|
46 |
-
$endtime = $obj->end_time();*/
|
47 |
?>
|
48 |
-
<
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
<?php echo (isset($setting_status['google_ads'])?'<span class="tvc-tooltiptext tvc-tooltip-right">'.$setting_status['google_ads_msg'].'</span>':"") ?>
|
67 |
-
<?php } ?>
|
68 |
-
<div class="border-left aga-tab nav-link <?php echo $this->is_active_tabs('google_ads'); ?>">
|
69 |
-
<?php if(isset($setting_status['google_ads']) ){
|
70 |
-
echo $this->info_htnml($setting_status['google_ads']);
|
71 |
-
}?>
|
72 |
-
<a href="<?php echo $this->site_url.'google_ads'; ?>" class="">Google Ads</a>
|
73 |
-
</div>
|
74 |
-
</li>
|
75 |
-
<?php
|
76 |
-
$sub_tab_active="";
|
77 |
-
if(isset($_GET['tab']) && ($_GET['tab'] == 'google_shopping_feed' || $_GET['tab'] == 'gaa_config_page' || $_GET['tab'] == 'sync_product_page' || $_GET['tab'] == 'shopping_campaigns_page' || $_GET['tab'] == 'add_campaign_page')){
|
78 |
-
$sub_tab_active="active";
|
79 |
-
}
|
80 |
-
?>
|
81 |
-
<li class="nav-item">
|
82 |
-
<div class="tvc-tooltip <?php echo (($sub_tab_active)?$sub_tab_active:$this->is_active_tabs('google_shopping_feed')); ?>">
|
83 |
-
<?php if(isset($setting_status['google_shopping']) && $setting_status['google_shopping'] == false ){?>
|
84 |
-
<?php echo (isset($setting_status['google_shopping_msg'])?'<span class="tvc-tooltiptext tvc-tooltip-right">'.$setting_status['google_shopping_msg'].'</span>':"") ?>
|
85 |
-
<?php } ?>
|
86 |
-
<div class="border-left aga-tab nav-link <?php echo (($sub_tab_active)?$sub_tab_active:$this->is_active_tabs('google_shopping_feed')); ?>">
|
87 |
-
<?php if(isset($setting_status['google_shopping']) ){
|
88 |
-
echo $this->info_htnml($setting_status['google_shopping']);
|
89 |
-
}?>
|
90 |
-
<a href="<?php echo $this->site_url.'google_shopping_feed'; ?>" class="">Google Shopping</a>
|
91 |
-
</div>
|
92 |
-
</li>
|
93 |
-
<?php /*if($today >= $start && $today <= $end && $currentime <= $endtime) {?>
|
94 |
-
<li class="nav-item">
|
95 |
-
<div class="border-left aga-tab nav-link <?php echo $this->is_active_tabs('about_plugin'); ?>"><a href="<?php echo $this->site_url.'about_plugin'; ?>">Premium <img class="new-img-blink" src='<?php echo plugins_url('../images/discount.gif', __FILE__ ) ?>' /></a></div></li>
|
96 |
-
<?php } else { ?>
|
97 |
-
<li class="nav-item"><div class="border-left aga-tab nav-link <?php echo $this->is_active_tabs('about_plugin'); ?>"><a href="<?php echo $this->site_url.'about_plugin'; ?>">Premium <img class="new-img-blink" src='<?php echo plugins_url('../images/new-2.gif', __FILE__ ) ?>' /></a></div></li>
|
98 |
-
<?php }*/ ?>
|
99 |
-
<li class="tvc-menu-free-plan">
|
100 |
-
<span>Free Plan: Products sync limit - 500 </span>
|
101 |
-
</li>
|
102 |
-
</ul>
|
103 |
-
</div>
|
104 |
-
<?php
|
105 |
-
}
|
106 |
} ?>
|
15 |
exit;
|
16 |
}
|
17 |
class TVC_Tabs {
|
18 |
+
protected $TVC_Admin_Helper;
|
19 |
+
protected $site_url;
|
20 |
+
public function __construct() {
|
21 |
+
$this->TVC_Admin_Helper = new TVC_Admin_Helper();
|
22 |
+
$this->site_url = "admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=";
|
23 |
+
|
24 |
+
$this->create_tabs();
|
25 |
+
}
|
26 |
+
protected function info_htnml($validation){
|
27 |
+
if($validation == true){
|
28 |
+
return '<img src="'.ENHANCAD_PLUGIN_URL.'/admin/images/config-success.svg" alt="configuration success" class="config-success">';
|
29 |
+
}else{
|
30 |
+
return '<img src="'.ENHANCAD_PLUGIN_URL.'/admin/images/exclaimation.png" alt="configuration success" class="config-fail">';
|
31 |
+
}
|
32 |
+
}
|
33 |
+
/* add active tab class */
|
34 |
+
protected function is_active_tabs($tab_name=""){
|
35 |
+
if($tab_name!="" && isset($_GET['tab']) && $_GET['tab'] == $tab_name){
|
36 |
+
return "active";
|
37 |
+
}
|
38 |
+
return ;
|
39 |
+
}
|
40 |
+
|
41 |
+
protected function create_tabs(){
|
42 |
+
$setting_status = $this->TVC_Admin_Helper->check_setting_status();
|
43 |
+
?>
|
44 |
+
<ul class="nav nav-pills nav-justified">
|
45 |
+
<li class="nav-item">
|
46 |
+
<div class="tvc-tooltip <?php echo (empty($_GET['tab']))?'active':$this->is_active_tabs('general_settings'); ?>">
|
47 |
+
<?php if(isset($setting_status['google_analytic']) && $setting_status['google_analytic'] == false ){?>
|
48 |
+
<?php echo (isset($setting_status['google_analytic_msg'])?'<span class="tvc-tooltiptext tvc-tooltip-right">'.$setting_status['google_analytic_msg'].'</span>':"") ?>
|
49 |
+
<?php }?>
|
50 |
+
<div class="nav-item nav-link <?php echo (empty($_GET['tab']))?'active':$this->is_active_tabs('general_settings'); ?>">
|
51 |
+
<?php if(isset($setting_status['google_analytic']) ){
|
52 |
+
echo $this->info_htnml($setting_status['google_analytic']);
|
53 |
+
}?>
|
54 |
+
<a href="<?php echo $this->site_url.'general_settings'; ?>" class=""> Google Analytics</a>
|
55 |
+
</div>
|
56 |
+
</div>
|
57 |
+
</li>
|
58 |
+
<li class="nav-item">
|
59 |
+
<div class="tvc-tooltip <?php echo $this->is_active_tabs('google_ads'); ?>">
|
60 |
+
<?php if(isset($setting_status['google_ads']) && $setting_status['google_ads'] == false ){?>
|
61 |
+
<?php echo (isset($setting_status['google_ads'])?'<span class="tvc-tooltiptext tvc-tooltip-right">'.$setting_status['google_ads_msg'].'</span>':"") ?>
|
62 |
+
<?php } ?>
|
63 |
+
<div class="nav-link <?php echo $this->is_active_tabs('google_ads'); ?>">
|
64 |
+
<?php if(isset($setting_status['google_ads']) ){
|
65 |
+
echo $this->info_htnml($setting_status['google_ads']);
|
66 |
+
}?>
|
67 |
+
<a href="<?php echo $this->site_url.'google_ads'; ?>" class="">Google Ads</a>
|
68 |
+
</div>
|
69 |
+
</li>
|
70 |
+
<?php
|
71 |
+
$sub_tab_active="";
|
72 |
+
if(isset($_GET['tab']) && ($_GET['tab'] == 'google_shopping_feed' || $_GET['tab'] == 'gaa_config_page' || $_GET['tab'] == 'sync_product_page' || $_GET['tab'] == 'shopping_campaigns_page' || $_GET['tab'] == 'add_campaign_page')){
|
73 |
+
$sub_tab_active="active";
|
74 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
?>
|
76 |
+
<li class="nav-item">
|
77 |
+
<div class="tvc-tooltip <?php echo (($sub_tab_active)?$sub_tab_active:$this->is_active_tabs('google_shopping_feed')); ?>">
|
78 |
+
<?php if(isset($setting_status['google_shopping']) && $setting_status['google_shopping'] == false ){
|
79 |
+
echo (isset($setting_status['google_shopping_msg'])?'<span class="tvc-tooltiptext tvc-tooltip-right">'.$setting_status['google_shopping_msg'].'</span>':"");
|
80 |
+
} ?>
|
81 |
+
<div class="nav-link <?php echo (($sub_tab_active)?$sub_tab_active:$this->is_active_tabs('google_shopping_feed')); ?>">
|
82 |
+
<?php if(isset($setting_status['google_shopping']) ){
|
83 |
+
echo $this->info_htnml($setting_status['google_shopping']);
|
84 |
+
} ?>
|
85 |
+
<a href="<?php echo $this->site_url.'google_shopping_feed'; ?>" class="">Google Shopping</a>
|
86 |
+
</div>
|
87 |
+
</li>
|
88 |
+
<li class="tvc-help-need">
|
89 |
+
For any query, reach out to us at <a href="tel:+1 (415) 968-6313">+1 (415) 968-6313</a>
|
90 |
+
</li>
|
91 |
+
</ul>
|
92 |
+
<?php
|
93 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
} ?>
|
admin/partials/general-fields.php
CHANGED
@@ -1,104 +1,119 @@
|
|
1 |
<?php
|
2 |
echo "<script>var return_url ='".esc_url($this->url)."';</script>";
|
3 |
$TVC_Admin_Helper = new TVC_Admin_Helper();
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
$
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
}
|
96 |
-
}
|
97 |
}
|
|
|
98 |
}
|
|
|
99 |
} else if(isset($_GET['connect']) && !isset($_POST['ee_submit_plugin'])) {
|
100 |
$googleDetail = [];
|
101 |
-
$class = '
|
102 |
$message_p = esc_html__('Google analytic detail is empty.');
|
103 |
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html($message_p));
|
104 |
}else{
|
@@ -107,17 +122,19 @@ if (isset($_GET['connect']) && isset($_GET['subscription_id'])) {
|
|
107 |
$message = new Enhanced_Ecommerce_Google_Settings();
|
108 |
if (isset($_POST['ee_submit_plugin'])) {
|
109 |
if(!empty($_POST['ga_id'])){
|
110 |
-
|
111 |
}
|
112 |
if(!empty($_POST['gm_id'])){
|
113 |
-
|
114 |
}
|
115 |
if(!empty($_POST['gm_id']) && !empty($_POST['ga_id'])){
|
116 |
-
|
117 |
}
|
118 |
update_option('ads_tracking_id', $_POST['google_ads_id']);
|
119 |
|
120 |
Enhanced_Ecommerce_Google_Settings::add_update_settings('ee_options');
|
|
|
|
|
121 |
/* API Save */
|
122 |
/*if(isset($_POST['ga_eeT'])){
|
123 |
$_POST['enhanced_e_commerce_tracking']=($_POST['ga_eeT']=="on")?1:0;
|
@@ -148,237 +165,275 @@ if (isset($_POST['ee_submit_plugin'])) {
|
|
148 |
$r_message = esc_html__('Connect Google account to enable more features.');
|
149 |
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html('Error : ' . $r_message));
|
150 |
}*/
|
151 |
-
|
152 |
}
|
153 |
$data = unserialize(get_option('ee_options'));
|
154 |
-
$
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
</div>
|
166 |
-
</a>
|
167 |
-
</h3>
|
168 |
-
</div>*/ ?>
|
169 |
-
<div class="card-body">
|
170 |
-
<form id="ee_plugin_form" class="tvc_ee_plugin_form" method="post" action="" enctype="multipart/form-data" >
|
171 |
-
<table class="table table-bordered">
|
172 |
-
<tbody>
|
173 |
-
<tr>
|
174 |
-
<td>
|
175 |
-
<label class="align-middle" for="woocommerce_ee_google_analytics_ga_id">Universal Analytics ID</label>
|
176 |
-
</td>
|
177 |
-
<td>
|
178 |
-
<?php if(isset($data['ga_id']) && $data['ga_id'] != '') { ?>
|
179 |
-
<span class="tvc_title_val"><?= $data['ga_id']; ?></span>
|
180 |
-
<p class="hint-text" style="color: #666;display: inline-block;float: right;padding-top: 5px;">To update analytics id, <a target="_blank" href="<?=esc_url($this->url)?>">click here</a></p>
|
181 |
-
<?php } else {?>
|
182 |
-
<div class="tvc_animate_btn_wrap">
|
183 |
-
<button type="button" class="btn btn-primary tvc_animate_btn" data-toggle="modal" data-target="#staticBackdrop">
|
184 |
-
Connect
|
185 |
-
</button>
|
186 |
-
</div>
|
187 |
-
<?php } ?>
|
188 |
-
</td>
|
189 |
-
|
190 |
-
</tr>
|
191 |
-
<tr>
|
192 |
-
<td>
|
193 |
-
<label class="align-middle" for="woocommerce_ee_google_analytics_ga_id">Google Analytics 4 ID</label>
|
194 |
-
</td>
|
195 |
-
<td>
|
196 |
-
<?php if(isset($data['gm_id']) && $data['gm_id'] != '') { ?>
|
197 |
-
<span class="tvc_title_val"><?= $data['gm_id']; ?></span>
|
198 |
-
<p class="hint-text" style="color: #666;display: inline-block;float: right;padding-top: 5px;">To update google analytics 4 id, <a target="_blank" href="<?=esc_url($this->url)?>">click here</a></p>
|
199 |
-
<?php } else {?>
|
200 |
-
<div class="tvc_animate_btn_wrap">
|
201 |
-
<button type="button" class="btn btn-primary tvc_animate_btn" data-toggle="modal" data-target="#staticBackdrop">
|
202 |
-
Connect
|
203 |
-
</button>
|
204 |
-
</div>
|
205 |
-
<?php } ?>
|
206 |
-
</td>
|
207 |
-
|
208 |
-
</tr>
|
209 |
-
<tr>
|
210 |
-
<td>
|
211 |
-
<label class="align-middle" for="woocommerce_ee_google_analytics_ads_id">Linked Google Ads Account <i style="cursor: help;" class="fas fa-question-circle" title="To link Google Ads and Google Analytics, you’ll need administrative access to a Google Ads account and “Edit permissions” to a Google Analytics account.
|
212 |
-
Why link Google Ads and Analytics account?
|
213 |
-
When you link Google Ads and Analytics, you can:
|
214 |
-
See ad and site performance data in the Google Ads reports in Analytics.
|
215 |
-
Import Analytics goals and Ecommerce transactions into your Google Ads account.
|
216 |
-
Import cross-device conversions into your Google Ads account when you activate Google signals.
|
217 |
-
Import Analytics metrics like Bounce Rate, Avg. Session Duration, and Pages/Session into your Google Ads account.
|
218 |
-
Enhance your Google Ads remarketing with Analytics Remarketing and Dynamic Remarketing.
|
219 |
-
Get richer data in the Analytics Multi-Channel Funnels reports."></i></label>
|
220 |
-
</td>
|
221 |
-
<td>
|
222 |
-
<?php if(isset($data['google_ads_id']) && $data['google_ads_id'] != '') { ?>
|
223 |
-
<span class="tvc_title_val"><?= $data['google_ads_id']; ?></span>
|
224 |
-
<p class="hint-text" style="color: #666;display: inline-block;float: right;padding-top: 5px;">To update ads account id, <a target="_blank" href="<?=esc_url($this->url)?>">click here</a></p>
|
225 |
-
<?php } else {?>
|
226 |
-
<div class="tvc_animate_btn_wrap">
|
227 |
-
<button type="button" class="btn btn-primary tvc_animate_btn" data-toggle="modal" data-target="#staticBackdrop">
|
228 |
-
Connect
|
229 |
-
</button>
|
230 |
-
</div>
|
231 |
-
<?php } ?>
|
232 |
-
</td>
|
233 |
-
|
234 |
-
</tr>
|
235 |
-
<tr>
|
236 |
-
<td>
|
237 |
-
<label class="align-middle" for="woocommerce_ee_google_analytics_merchant_id">Linked Google Merchant Center Account</label>
|
238 |
-
</td>
|
239 |
-
<td>
|
240 |
-
<?php if(isset($data['google_merchant_id']) && $data['google_merchant_id'] != '') { ?>
|
241 |
-
<span class="tvc_title_val"><?= $data['google_merchant_id']; ?></span>
|
242 |
-
<p class="hint-text" style="color: #666;display: inline-block;float: right;padding-top: 5px;">To update merchant account id, <a target="_blank" href="<?=esc_url($this->url)?>">click here</a></p>
|
243 |
-
<?php } else {?>
|
244 |
-
<div class="tvc_animate_btn_wrap">
|
245 |
-
<button type="button" class="btn btn-primary tvc_animate_btn" data-toggle="modal" data-target="#staticBackdrop">
|
246 |
-
Connect
|
247 |
-
</button>
|
248 |
-
</div>
|
249 |
-
<?php } ?>
|
250 |
-
</td>
|
251 |
|
252 |
-
</tr>
|
253 |
-
<tr>
|
254 |
-
<td>
|
255 |
-
<label class="align-middle" for="tracking_code">Tracking Code</label>
|
256 |
-
</td>
|
257 |
-
<td>
|
258 |
-
<label class = "align-middle">
|
259 |
-
<?php $ga_ST = !empty($data['ga_ST']) ? 'checked' : ''; ?>
|
260 |
-
<input type="checkbox" name="ga_ST" id="ga_ST" <?php echo $ga_ST; ?> >
|
261 |
-
<label for="ga_ST">Add Global Site Tracking Code 'gtag.js'</label>
|
262 |
-
|
263 |
-
<i style="cursor: help;" class="fas fa-question-circle" title="This feature adds new gtag.js tracking code to your store. You don't need to enable this if gtag.js is implemented via any third party analytics plugin."></i>
|
264 |
-
<!--<p class="description">This feature adds new gtag.js tracking code to your store. You don't need to enable this if gtag.js is implemented via any third party analytics plugin.</p>-->
|
265 |
-
</label><br/>
|
266 |
-
<label class = "align-middle">
|
267 |
-
<?php $ga_eeT = !empty($data['ga_eeT']) ? 'checked' : ''; ?>
|
268 |
-
<input type="checkbox" name="ga_eeT" id="ga_eeT" <?php echo $ga_eeT; ?> >
|
269 |
-
<label for="ga_eeT">Add Enhanced Ecommerce Tracking Code</label>
|
270 |
-
|
271 |
-
<i style="cursor: help;" class="fas fa-question-circle" title="This feature adds Enhanced Ecommerce Tracking Code to your Store"></i>
|
272 |
-
<!--<p class="description">This feature adds Enhanced Ecommerce Tracking Code to your Store</p>-->
|
273 |
-
</label><br/>
|
274 |
-
<label class = "align-middle">
|
275 |
-
<?php $ga_gUser = !empty($data['ga_gUser']) ? 'checked' : ''; ?>
|
276 |
-
<input type="checkbox" name="ga_gUser" id="ga_gUser" <?php echo $ga_gUser; ?> >
|
277 |
-
<label for="ga_gUser">Add Code to Track the Login Step of Guest Users (Optional)</label>
|
278 |
-
|
279 |
-
<i style="cursor: help;" class="fas fa-question-circle" title="If you have Guest Check out enable, we recommend you to add this code"></i>
|
280 |
-
<!--<p class="description">If you have Guest Check out enable, we recommend you to add this code</p>-->
|
281 |
-
</label><br/>
|
282 |
-
</td>
|
283 |
-
</tr>
|
284 |
-
<tr>
|
285 |
-
<td>
|
286 |
-
<label for="ga_Impr">Impression Thresold</label>
|
287 |
-
</td>
|
288 |
-
<td>
|
289 |
-
<?php $ga_Impr = !empty($data['ga_Impr']) ? $data['ga_Impr'] : 6; ?>
|
290 |
-
<input type="number" min="1" id="ga_Impr" name = "ga_Impr" value = "<?php echo $ga_Impr; ?>">
|
291 |
-
<label for="ga_Impr"></label>
|
292 |
-
<i style="cursor: help;" class="fas fa-question-circle" title="This feature sets Impression threshold for category page. It sends hit after these many numbers of products impressions."></i>
|
293 |
-
<p class="description"><br><b>Note : To avoid processing load on server we recommend upto 6 Impression Thresold.</b></p>
|
294 |
-
</td>
|
295 |
-
</tr>
|
296 |
-
<tr>
|
297 |
-
<td>
|
298 |
-
<label class = "align-middle" for="ga_IPA">I.P. Anoymization</label>
|
299 |
-
</td>
|
300 |
-
<td>
|
301 |
-
<label class = "align-middle">
|
302 |
-
<?php $ga_IPA = !empty($data['ga_IPA']) ? 'checked' : ''; ?>
|
303 |
-
<input class="" type="checkbox" name="ga_IPA" id="ga_IPA" <?php echo $ga_IPA; ?>>
|
304 |
-
<label for="ga_IPA">Enable I.P. Anonymization</label>
|
305 |
-
|
306 |
-
<i style="cursor: help;" class="fas fa-question-circle" title="Use this feature to anonymize (or stop collecting) the I.P Address of your users in Google Analytics. Be in legal compliance by using I.P Anonymization which is important for EU countries As per the GDPR compliance"></i>
|
307 |
-
<!-- <p class="description">Use this feature to anonymize (or stop collecting) the I.P Address of your users in Google Analytics. Be in legal compliance by using I.P Anonymization which is important for EU countries As per the GDPR compliance</p>-->
|
308 |
-
</label>
|
309 |
-
</td>
|
310 |
-
</tr>
|
311 |
-
<tr>
|
312 |
-
<td>
|
313 |
-
<label class = "align-middle" for="ga_OPTOUT">Google Analytics Opt Out</label>
|
314 |
-
</td>
|
315 |
-
<td>
|
316 |
-
<label class = "align-middle">
|
317 |
-
<?php $ga_OPTOUT = !empty($data['ga_OPTOUT']) ? 'checked' : ''; ?>
|
318 |
-
<input class="" type="checkbox" name="ga_OPTOUT" id="ga_OPTOUT" <?php echo $ga_OPTOUT; ?>>
|
319 |
-
<label for="ga_OPTOUT">Enable Google Analytics Opt Out (Optional)</label>
|
320 |
-
|
321 |
-
<i style="cursor: help;" class="fas fa-question-circle" title="Use this feature to provide website visitors the ability to prevent their data from being used by Google Analytics As per the GDPR compliance.Go through the documentation to check the setup"></i>
|
322 |
-
<!--<p class="description">Use this feature to provide website visitors the ability to prevent their data from being used by Google Analytics As per the GDPR compliance.Go through the documentation to check the setup</p>-->
|
323 |
-
</label>
|
324 |
-
</td>
|
325 |
-
</tr>
|
326 |
-
<tr>
|
327 |
-
<td>
|
328 |
-
<label class = "align-middle" for="ga_PrivacyPolicy">Privacy Policy</label>
|
329 |
-
</td>
|
330 |
-
<td>
|
331 |
-
<label class = "align-middle">
|
332 |
-
<?php $ga_PrivacyPolicy = !empty($data['ga_PrivacyPolicy']) ? 'checked' : ''; ?>
|
333 |
-
<input type="checkbox" name="ga_PrivacyPolicy" id="ga_PrivacyPolicy" required="required" <?php echo $ga_PrivacyPolicy; ?>>
|
334 |
-
<label for="ga_PrivacyPolicy">Accept Privacy Policy of Plugin</label>
|
335 |
-
|
336 |
-
<p class="description">By using Tatvic Plugin, you agree to Tatvic plugin's <a href= "https://www.tatvic.com/privacy-policy/?ref=plugin_policy&utm_source=plugin_backend&utm_medium=woo_premium_plugin&utm_campaign=GDPR_complaince_ecomm_plugins" target="_blank">Privacy Policy</a></p>
|
337 |
-
</label>
|
338 |
-
</td>
|
339 |
-
</tr>
|
340 |
-
</tbody>
|
341 |
-
</table>
|
342 |
-
<p class="submit save-for-later" id="save-for-later">
|
343 |
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
352 |
</div>
|
|
|
353 |
</div>
|
354 |
-
|
355 |
-
|
356 |
-
<
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
</div>
|
370 |
-
<div class="modal-footer">
|
371 |
-
<a target="_blank" class="ee-oauth-container btn darken-4 white black-text" href="<?=esc_url($this->url)?>" style="text-transform:none; margin: 0 auto;">
|
372 |
-
<p style="font-size: inherit; margin-top:5px;"><img width="20px" style="margin-right:8px" alt="Google sign-in"
|
373 |
-
src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/53/Google_%22G%22_Logo.svg/512px-Google_%22G%22_Logo.svg.png" />Sign In With Google</p>
|
374 |
-
</a>
|
375 |
-
<!--sigin with google end-->
|
376 |
-
</div>
|
377 |
-
</div>
|
378 |
</div>
|
|
|
379 |
</div>
|
380 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
381 |
</div>
|
382 |
-
|
383 |
</div>
|
384 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
2 |
echo "<script>var return_url ='".esc_url($this->url)."';</script>";
|
3 |
$TVC_Admin_Helper = new TVC_Admin_Helper();
|
4 |
+
$class = "";
|
5 |
+
$message_p = "";
|
6 |
+
if (isset($_GET['connect']) && isset($_GET['subscription_id'])) {
|
7 |
+
/*
|
8 |
+
* save subscription_id in "ee_options" and then API call for get subscription details
|
9 |
+
*/
|
10 |
+
if (isset($_GET['subscription_id']) && $_GET['subscription_id']) {
|
11 |
+
$_POST['subscription_id'] = $_GET['subscription_id'];
|
12 |
+
Enhanced_Ecommerce_Google_Settings::add_update_settings('ee_options');
|
13 |
+
}
|
14 |
+
$customApiObj = new CustomApi();
|
15 |
+
$google_detail = $customApiObj->getGoogleAnalyticDetail();
|
16 |
+
/*
|
17 |
+
* active licence key while come from server page
|
18 |
+
*/
|
19 |
+
$ee_additional_data = $TVC_Admin_Helper->get_ee_additional_data();
|
20 |
+
if(isset($ee_additional_data['temp_active_licence_key']) && $ee_additional_data['temp_active_licence_key'] != ""){
|
21 |
+
$licence_key = $ee_additional_data['temp_active_licence_key'];
|
22 |
+
$TVC_Admin_Helper->active_licence($licence_key, $_GET['subscription_id']);
|
23 |
+
unset($ee_additional_data['temp_active_licence_key']);
|
24 |
+
$TVC_Admin_Helper->set_ee_additional_data($ee_additional_data);
|
25 |
+
}
|
26 |
+
|
27 |
+
if(property_exists($google_detail,"error") && $google_detail->error == false && !isset($_POST['ee_submit_plugin'])){
|
28 |
+
if(property_exists($google_detail,"data") && $google_detail->data != ""){
|
29 |
+
$googleDetail = $google_detail->data;
|
30 |
+
//'website_url' => $googleDetail->site_url,
|
31 |
+
$postData = [
|
32 |
+
'merchant_id' => $googleDetail->merchant_id,
|
33 |
+
'website_url' => get_site_url(),
|
34 |
+
'subscription_id' => $googleDetail->id,
|
35 |
+
'account_id' => $googleDetail->google_merchant_center_id
|
36 |
+
];
|
37 |
|
38 |
+
if ($googleDetail->is_site_verified == '0') {
|
39 |
+
$postData['method']="file";
|
40 |
+
$siteVerificationToken = $customApiObj->siteVerificationToken($postData);
|
41 |
+
if (isset($siteVerificationToken->error) && !empty($siteVerificationToken->errors)) {
|
42 |
+
goto call_method_tag;
|
43 |
+
} else {
|
44 |
+
$myFile = ABSPATH.$siteVerificationToken->data->token;
|
45 |
+
if (!file_exists($myFile)) {
|
46 |
+
$fh = fopen($myFile, 'w+');
|
47 |
+
chmod($myFile,0777);
|
48 |
+
$stringData = "google-site-verification: ".$siteVerificationToken->data->token;
|
49 |
+
fwrite($fh, $stringData);
|
50 |
+
fclose($fh);
|
51 |
+
}
|
52 |
+
$postData['method']="file";
|
53 |
+
$siteVerification = $customApiObj->siteVerification($postData);
|
54 |
+
if (isset($siteVerification->error) && !empty($siteVerification->errors)) {
|
55 |
+
call_method_tag:
|
56 |
+
//methd using tag
|
57 |
+
$postData['method']="meta";
|
58 |
+
$siteVerificationToken_tag = $customApiObj->siteVerificationToken($postData);
|
59 |
+
if(isset($siteVerificationToken_tag->data->token) && $siteVerificationToken_tag->data->token){
|
60 |
+
$TVC_Admin_Helper->set_ee_additional_data(array("add_site_varification_tag"=>1,"site_varification_tag_val"=> base64_encode($siteVerificationToken_tag->data->token)));
|
61 |
+
sleep(1);
|
62 |
+
$siteVerification_tag = $customApiObj->siteVerification($postData);
|
63 |
+
if(isset($siteVerification_tag->error) && !empty($siteVerification_tag->errors)){
|
64 |
+
}else{
|
65 |
+
$googleDetail->is_site_verified = '1';
|
66 |
+
}
|
67 |
+
}
|
68 |
+
} else {
|
69 |
+
$googleDetail->is_site_verified = '1';
|
70 |
+
}
|
71 |
+
}
|
72 |
+
}
|
73 |
+
if ($googleDetail->is_domain_claim == '0') {
|
74 |
+
$claimWebsite = $customApiObj->claimWebsite($postData);
|
75 |
+
if (isset($claimWebsite->error) && !empty($claimWebsite->errors)) {
|
76 |
+
} else {
|
77 |
+
$googleDetail->is_domain_claim = '1';
|
78 |
+
}
|
79 |
+
}
|
80 |
+
$_POST['subscription_id'] = $googleDetail->id;
|
81 |
+
$_POST['ga_eeT'] = (isset($googleDetail->enhanced_e_commerce_tracking) && $googleDetail->enhanced_e_commerce_tracking == "1") ? "on" : "";
|
82 |
+
|
83 |
+
$_POST['ga_ST'] = (isset($googleDetail->add_gtag_snippet) && $googleDetail->add_gtag_snippet == "1") ? "on" : "";
|
84 |
+
$_POST['gm_id'] = $googleDetail->measurement_id;
|
85 |
+
$_POST['ga_id'] = $googleDetail->property_id;
|
86 |
+
$_POST['google_ads_id'] = $googleDetail->google_ads_id;
|
87 |
+
$_POST['google_merchant_id'] = $googleDetail->google_merchant_center_id;
|
88 |
+
$_POST['tracking_option'] = $googleDetail->tracking_option;
|
89 |
+
$_POST['ga_gUser'] = 'on';
|
90 |
+
//$_POST['ga_gCkout'] = 'on';
|
91 |
+
$_POST['ga_Impr'] = 6;
|
92 |
+
$_POST['ga_IPA'] = 'on';
|
93 |
+
$_POST['ga_OPTOUT'] = 'on';
|
94 |
+
$_POST['ga_PrivacyPolicy'] = 'on';
|
95 |
+
$_POST['google-analytic'] = '';
|
96 |
+
//update option in wordpress local database
|
97 |
+
update_option('ads_tracking_id', $googleDetail->google_ads_id);
|
98 |
+
update_option('ads_ert', $googleDetail->remarketing_tags);
|
99 |
+
update_option('ads_edrt', $googleDetail->dynamic_remarketing_tags);
|
100 |
+
Enhanced_Ecommerce_Google_Settings::add_update_settings('ee_options');
|
101 |
+
//save data in DB
|
102 |
+
$TVC_Admin_Helper->set_update_api_to_db($googleDetail, false);
|
103 |
+
if(isset($googleDetail->google_merchant_center_id) || isset($googleDetail->google_ads_id) ){
|
104 |
+
if( $googleDetail->google_merchant_center_id != "" && $googleDetail->google_ads_id != ""){
|
105 |
+
wp_redirect("admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=sync_product_page&welcome_msg=true");
|
106 |
+
exit;
|
107 |
+
}else{
|
108 |
+
wp_redirect("admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=gaa_config_page&welcome_msg=true");
|
109 |
+
exit;
|
|
|
|
|
110 |
}
|
111 |
+
}
|
112 |
}
|
113 |
+
}
|
114 |
} else if(isset($_GET['connect']) && !isset($_POST['ee_submit_plugin'])) {
|
115 |
$googleDetail = [];
|
116 |
+
$class = 'alert-message tvc-alert-error';
|
117 |
$message_p = esc_html__('Google analytic detail is empty.');
|
118 |
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html($message_p));
|
119 |
}else{
|
122 |
$message = new Enhanced_Ecommerce_Google_Settings();
|
123 |
if (isset($_POST['ee_submit_plugin'])) {
|
124 |
if(!empty($_POST['ga_id'])){
|
125 |
+
$_POST['tracking_option'] = "UA";
|
126 |
}
|
127 |
if(!empty($_POST['gm_id'])){
|
128 |
+
$_POST['tracking_option'] = "GA4";
|
129 |
}
|
130 |
if(!empty($_POST['gm_id']) && !empty($_POST['ga_id'])){
|
131 |
+
$_POST['tracking_option'] = "BOTH";
|
132 |
}
|
133 |
update_option('ads_tracking_id', $_POST['google_ads_id']);
|
134 |
|
135 |
Enhanced_Ecommerce_Google_Settings::add_update_settings('ee_options');
|
136 |
+
$class = 'alert-message tvc-alert-success';
|
137 |
+
$message_p = __( 'Your settings have been saved.', 'sample-text-domain' );
|
138 |
/* API Save */
|
139 |
/*if(isset($_POST['ga_eeT'])){
|
140 |
$_POST['enhanced_e_commerce_tracking']=($_POST['ga_eeT']=="on")?1:0;
|
165 |
$r_message = esc_html__('Connect Google account to enable more features.');
|
166 |
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html('Error : ' . $r_message));
|
167 |
}*/
|
|
|
168 |
}
|
169 |
$data = unserialize(get_option('ee_options'));
|
170 |
+
$subscription_id = $TVC_Admin_Helper->get_subscriptionId();
|
171 |
+
$TVC_Admin_Helper->add_spinner_html();
|
172 |
+
$google_detail = $TVC_Admin_Helper->get_ee_options_data();
|
173 |
+
$googleDetail = "";
|
174 |
+
$plan_id = 1;
|
175 |
+
if(isset($google_detail['setting'])){
|
176 |
+
$googleDetail = $google_detail['setting'];
|
177 |
+
if(isset($googleDetail->plan_id) && !in_array($googleDetail->plan_id, array("1"))){
|
178 |
+
$plan_id = $googleDetail->plan_id;
|
179 |
+
}
|
180 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
181 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
182 |
|
183 |
+
?>
|
184 |
+
<div class="tab-content">
|
185 |
+
<?php if($message_p){
|
186 |
+
printf('<div class="%1$s"><div class="alert">%2$s</div></div>', esc_attr($class), esc_html($message_p));
|
187 |
+
}?>
|
188 |
+
<div class="tab-pane show active" id="googleShoppingFeed">
|
189 |
+
<div class="tab-card">
|
190 |
+
<div class="row">
|
191 |
+
<div class="col-md-6 col-lg-8 border-right">
|
192 |
+
<?php if($plan_id == 1){?>
|
193 |
+
<div class="licence tvc-licence" >
|
194 |
+
<div class="tvc_licence_key_wapper <?php if($plan_id != 1){?>tvc-hide<?php }?>">
|
195 |
+
<p>You are using our free plugin, no licence needed ! Happy analyzing..!! :)</p>
|
196 |
+
<p class="font-weight-bold">To unlock more features of google products, consider our <a href="<?php echo $TVC_Admin_Helper->get_pro_plan_site(); ?>" target="_blank">pro version.</a></p>
|
197 |
+
<?php /*
|
198 |
+
<form method="post" name="google-analytic" id="tvc-licence-active">
|
199 |
+
<div class="input-group">
|
200 |
+
<input type="text" id="licence_key" name="licence_key" class="form-control" placeholder="Already purchased? Enter licence key" required="">
|
201 |
+
<div class="input-group-append">
|
202 |
+
<button type="submit" class="btn btn-primary" name="verify-licence-key"><img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/right-arrow.svg'; ?>" alt="active licence key"></button>
|
203 |
+
</div>
|
204 |
+
</div>
|
205 |
+
</form>
|
206 |
+
*/ ?>
|
207 |
+
</div>
|
208 |
+
</div>
|
209 |
+
<?php }?>
|
210 |
+
<div class="google-account-analytics">
|
211 |
+
<div class="row mb-3">
|
212 |
+
<div class="col-6 col-md-6 col-lg-6">
|
213 |
+
<h2 class="ga-title">Connected Google Analytics Account:</h2>
|
214 |
+
</div>
|
215 |
+
<div class="col-6 col-md-6 col-lg-6 text-right">
|
216 |
+
<div class="acc-num">
|
217 |
+
<p class="ga-text">
|
218 |
+
<?php echo ((isset($data['ga_id']) && $data['ga_id'] != '') ? $data['ga_id'] : '<span>Get started</span>'); ?>
|
219 |
+
</p>
|
220 |
+
<?php
|
221 |
+
if (isset($data['ga_id']) && $data['ga_id'] != '') {
|
222 |
+
echo '<p class="ga-text text-right"><a target="_blank" href="' . $this->url . '" class="text-underline"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/refresh.svg" alt="refresh"/></a></p>';
|
223 |
+
} else {
|
224 |
+
echo '<p class="ga-text text-right"><a href="#" class="text-underline" data-toggle="modal" data-target="#tvc_google_connect"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/add.svg" alt="connect account"/></a></p>';
|
225 |
+
}?>
|
226 |
</div>
|
227 |
+
</div>
|
228 |
</div>
|
229 |
+
<div class="row mb-3">
|
230 |
+
<div class="col-6 col-md-6 col-lg-6">
|
231 |
+
<h2 class="ga-title">Connected Google Analytics 4 Account:</h2>
|
232 |
+
</div>
|
233 |
+
<div class="col-6 col-md-6 col-lg-6 text-right">
|
234 |
+
<div class="acc-num">
|
235 |
+
<p class="ga-text">
|
236 |
+
<?php echo ((isset($data['gm_id']) && $data['gm_id'] != '') ? $data['gm_id'] : '<span>Get started</span>'); ?>
|
237 |
+
</p>
|
238 |
+
<?php
|
239 |
+
if (isset($data['gm_id']) && $data['gm_id'] != '') {
|
240 |
+
echo '<p class="ga-text text-right"><a target="_blank" href="' . $this->url . '" class="text-underline"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/refresh.svg" alt="refresh"/></a></p>';
|
241 |
+
} else {
|
242 |
+
echo '<p class="ga-text text-right"><a href="#" class="text-underline" data-toggle="modal" data-target="#tvc_google_connect"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/add.svg" alt="connect account"/></a></p>';
|
243 |
+
}?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
244 |
</div>
|
245 |
+
</div>
|
246 |
</div>
|
247 |
+
<div class="row mb-3">
|
248 |
+
<div class="col-6 col-md-6 col-lg-6">
|
249 |
+
<h2 class="ga-title">Linked Google Ads Account:</h2>
|
250 |
+
</div>
|
251 |
+
<div class="col-6 col-md-6 col-lg-6 text-right">
|
252 |
+
<div class="acc-num">
|
253 |
+
<p class="ga-text">
|
254 |
+
<?php echo ((isset($data['google_ads_id']) && $data['google_ads_id'] != '') ? $data['google_ads_id'] : '<span>Get started</span>'); ?>
|
255 |
+
</p>
|
256 |
+
<?php
|
257 |
+
if (isset($data['google_ads_id']) && $data['google_ads_id'] != '') {
|
258 |
+
echo '<p class="ga-text text-right"><a target="_blank" href="' . $this->url . '" class="text-underline"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/refresh.svg" alt="refresh"/></a></p>';
|
259 |
+
} else {
|
260 |
+
echo '<p class="ga-text text-right"><a href="#" class="text-underline" data-toggle="modal" data-target="#tvc_google_connect"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/add.svg" alt="connect account"/></a></p>';
|
261 |
+
}?>
|
262 |
+
</div>
|
263 |
+
</div>
|
264 |
+
</div>
|
265 |
+
<div class="row mb-3">
|
266 |
+
<div class="col-6 col-md-6 col-lg-6">
|
267 |
+
<h2 class="ga-title">Linked Google Merchant Center Account:</h2>
|
268 |
+
</div>
|
269 |
+
<div class="col-6 col-md-6 col-lg-6 text-right">
|
270 |
+
<div class="acc-num">
|
271 |
+
<p class="ga-text">
|
272 |
+
<?php echo ((isset($data['google_merchant_id']) && $data['google_merchant_id'] != '') ? $data['google_merchant_id'] : '<span>Get started</span>'); ?>
|
273 |
+
</p>
|
274 |
+
<?php
|
275 |
+
if (isset($data['google_merchant_id']) && $data['google_merchant_id'] != '') {
|
276 |
+
echo '<p class="ga-text text-right"><a target="_blank" href="' . $this->url . '" class="text-underline"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/refresh.svg" alt="refresh"/></a></p>';
|
277 |
+
} else {
|
278 |
+
echo '<p class="ga-text text-right"><a href="#" class="text-underline" data-toggle="modal" data-target="#tvc_google_connect"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/add.svg" alt="connect account"/></a></p>';
|
279 |
+
}?>
|
280 |
+
</div>
|
281 |
+
</div>
|
282 |
+
</div>
|
283 |
+
</div>
|
284 |
+
|
285 |
+
<form id="ee_plugin_form" class="tvc_ee_plugin_form" name="google-analytic-setting-form" method="post" >
|
286 |
+
<table class="table">
|
287 |
+
<tbody>
|
288 |
+
<tr>
|
289 |
+
<th>
|
290 |
+
<label class="align-middle" for="tracking_code">Tracking Code</label>
|
291 |
+
</th>
|
292 |
+
<td>
|
293 |
+
<label class = "align-middle">
|
294 |
+
<?php $ga_ST = !empty($data['ga_ST']) ? 'checked' : ''; ?>
|
295 |
+
<input type="checkbox" name="ga_ST" id="ga_ST" <?php echo $ga_ST; ?> >
|
296 |
+
<label class="custom-control-label" for="ga_ST">Add Global Site Tracking Code 'gtag.js'</label>
|
297 |
+
|
298 |
+
<i style="cursor: help;" class="fas fa-question-circle" title="This feature adds new gtag.js tracking code to your store. You don't need to enable this if gtag.js is implemented via any third party analytics plugin."></i>
|
299 |
+
</label><br/>
|
300 |
+
<label class = "align-middle">
|
301 |
+
<?php $ga_eeT = !empty($data['ga_eeT']) ? 'checked' : ''; ?>
|
302 |
+
<input type="checkbox" name="ga_eeT" id="ga_eeT" <?php echo $ga_eeT; ?> >
|
303 |
+
<label class="custom-control-label" for="ga_eeT">Add Enhanced Ecommerce Tracking Code</label>
|
304 |
+
|
305 |
+
<i style="cursor: help;" class="fas fa-question-circle" title="This feature adds Enhanced Ecommerce Tracking Code to your Store"></i>
|
306 |
+
</label><br/>
|
307 |
+
<label class = "align-middle">
|
308 |
+
<?php $ga_gUser = !empty($data['ga_gUser']) ? 'checked' : ''; ?>
|
309 |
+
<input type="checkbox" name="ga_gUser" id="ga_gUser" <?php echo $ga_gUser; ?> >
|
310 |
+
<label class="custom-control-label" for="ga_gUser">Add Code to Track the Login Step of Guest Users (Optional)</label>
|
311 |
+
|
312 |
+
<i style="cursor: help;" class="fas fa-question-circle" title="If you have Guest Check out enable, we recommend you to add this code"></i>
|
313 |
+
</label>
|
314 |
+
</td>
|
315 |
+
</tr>
|
316 |
+
<tr>
|
317 |
+
<th>
|
318 |
+
<label for="ga_Impr">Impression Thresold</label>
|
319 |
+
</th>
|
320 |
+
<td>
|
321 |
+
<?php $ga_Impr = !empty($data['ga_Impr']) ? $data['ga_Impr'] : 6; ?>
|
322 |
+
<input type="number" min="1" id="ga_Impr" name = "ga_Impr" value = "<?php echo $ga_Impr; ?>">
|
323 |
+
<label for="ga_Impr"></label>
|
324 |
+
<i style="cursor: help;" class="fas fa-question-circle" title="This feature sets Impression threshold for category page. It sends hit after these many numbers of products impressions."></i>
|
325 |
+
<p class="description"><b>Note : To avoid processing load on server we recommend upto 6 Impression Thresold.</b></p>
|
326 |
+
</td>
|
327 |
+
</tr>
|
328 |
+
<tr>
|
329 |
+
<th>
|
330 |
+
<label class = "align-middle" for="ga_IPA">I.P. Anoymization</label>
|
331 |
+
</th>
|
332 |
+
<td>
|
333 |
+
<label class = "align-middle">
|
334 |
+
<?php $ga_IPA = !empty($data['ga_IPA']) ? 'checked' : ''; ?>
|
335 |
+
<input class="" type="checkbox" name="ga_IPA" id="ga_IPA" <?php echo $ga_IPA; ?>>
|
336 |
+
<label class="custom-control-label" for="ga_IPA">Enable I.P. Anonymization</label>
|
337 |
+
|
338 |
+
<i style="cursor: help;" class="fas fa-question-circle" title="Use this feature to anonymize (or stop collecting) the I.P Address of your users in Google Analytics. Be in legal compliance by using I.P Anonymization which is important for EU countries As per the GDPR compliance"></i>
|
339 |
+
</label>
|
340 |
+
</td>
|
341 |
+
</tr>
|
342 |
+
<tr>
|
343 |
+
<th>
|
344 |
+
<label class = "align-middle" for="ga_OPTOUT">Google Analytics Opt Out</label>
|
345 |
+
</th>
|
346 |
+
<td>
|
347 |
+
<label class = "align-middle">
|
348 |
+
<?php $ga_OPTOUT = !empty($data['ga_OPTOUT']) ? 'checked' : ''; ?>
|
349 |
+
<input class="" type="checkbox" name="ga_OPTOUT" id="ga_OPTOUT" <?php echo $ga_OPTOUT; ?>>
|
350 |
+
<label class="custom-control-label" for="ga_OPTOUT">Enable Google Analytics Opt Out (Optional)</label>
|
351 |
+
|
352 |
+
<i style="cursor: help;" class="fas fa-question-circle" title="Use this feature to provide website visitors the ability to prevent their data from being used by Google Analytics As per the GDPR compliance.Go through the documentation to check the setup"></i>
|
353 |
+
</label>
|
354 |
+
</td>
|
355 |
+
</tr>
|
356 |
+
<tr>
|
357 |
+
<th>
|
358 |
+
<label class = "align-middle" for="ga_PrivacyPolicy">Privacy Policy</label>
|
359 |
+
</th>
|
360 |
+
<td>
|
361 |
+
<label class = "align-middle">
|
362 |
+
<?php $ga_PrivacyPolicy = !empty($data['ga_PrivacyPolicy']) ? 'checked' : ''; ?>
|
363 |
+
<input type="checkbox" name="ga_PrivacyPolicy" id="ga_PrivacyPolicy" required="required" <?php echo $ga_PrivacyPolicy; ?>>
|
364 |
+
<label class="custom-control-label" for="ga_PrivacyPolicy">Accept Privacy Policy of Plugin</label>
|
365 |
+
|
366 |
+
<p class="description">By using Tatvic Plugin, you agree to Tatvic plugin's <a href= "https://www.tatvic.com/privacy-policy/?ref=plugin_policy&utm_source=plugin_backend&utm_medium=woo_premium_plugin&utm_campaign=GDPR_complaince_ecomm_plugins" target="_blank">Privacy Policy</a></p>
|
367 |
+
</label>
|
368 |
+
</td>
|
369 |
+
</tr>
|
370 |
+
</tbody>
|
371 |
+
</table>
|
372 |
+
<p class="submit save-for-later" id="save-for-later">
|
373 |
+
<input type="hidden" id="ga_id" name = "ga_id" value="<?= (!empty($data['ga_id']))?$data['ga_id']:""; ?>"/>
|
374 |
+
<input type="hidden" id="gm_id" name = "gm_id" value="<?= (!empty($data['gm_id']))?$data['gm_id']:""; ?>"/>
|
375 |
+
<input type="hidden" id="google_ads_id" name = "google_ads_id" value="<?= (!empty($data['google_ads_id']))?$data['google_ads_id']:""; ?>"/>
|
376 |
+
<input type="hidden" id="google_merchant_id" name = "google_merchant_id" value="<?= (!empty($data['google_merchant_id']))?$data['google_merchant_id']:""; ?>"/>
|
377 |
+
<input type="hidden" name="subscription_id" value="<?php echo (!empty($data['subscription_id']))?$data['subscription_id']:""; ?>">
|
378 |
+
<button type="submit" class="btn btn-primary" id="ee_submit_plugin" name="ee_submit_plugin">Save</button>
|
379 |
+
</p>
|
380 |
+
</form>
|
381 |
+
</div>
|
382 |
+
<div class="col-md-6 col-lg-4">
|
383 |
+
<?php echo get_tvc_google_ga_sidebar(); ?>
|
384 |
</div>
|
385 |
+
</div>
|
386 |
</div>
|
387 |
+
</div>
|
388 |
+
</div>
|
389 |
+
<?php echo get_connect_google_popup_html();
|
390 |
+
echo get_connect_google_popup_html_to_active_licence();
|
391 |
+
?>
|
392 |
+
<script>
|
393 |
+
$(document).ready(function () {
|
394 |
+
$(document).on('click','#tvc_google_connect_active_licence_close',function(event){
|
395 |
+
$('#tvc_google_connect_active_licence').modal('hide');
|
396 |
+
});
|
397 |
+
$(document).on('click','.tvc_licence_key_change',function(event){
|
398 |
+
$(".tvc_licence_key_change_wapper").slideUp(500);
|
399 |
+
$(".tvc_licence_key_wapper").slideDown(700);
|
400 |
+
});
|
401 |
+
$(document).on('submit','form#tvc-licence-active',function(event){
|
402 |
+
event.preventDefault();
|
403 |
+
let licence_key = $("#licence_key").val();
|
404 |
+
var form_data = jQuery("#tvc-licence-active").serialize();
|
405 |
+
if(licence_key!=""){
|
406 |
+
var data = {
|
407 |
+
action: "tvc_call_active_licence",
|
408 |
+
licence_key:licence_key
|
409 |
+
};
|
410 |
+
$.ajax({
|
411 |
+
type: "POST",
|
412 |
+
dataType: "json",
|
413 |
+
url: myAjaxNonces.ajaxurl,
|
414 |
+
data: data,
|
415 |
+
beforeSend: function(){
|
416 |
+
tvc_helper.loaderSection(true);
|
417 |
+
},
|
418 |
+
success: function(response){
|
419 |
+
if (response.error === false) {
|
420 |
+
tvc_helper.tvc_alert("success","",response.message);
|
421 |
+
setTimeout(function(){
|
422 |
+
location.reload();
|
423 |
+
}, 2000);
|
424 |
+
}else{
|
425 |
+
if( response.is_connect == false){
|
426 |
+
$('#tvc_google_connect_active_licence').modal('show');
|
427 |
+
}else{
|
428 |
+
tvc_helper.tvc_alert("error","",response.message);
|
429 |
+
}
|
430 |
+
}
|
431 |
+
tvc_helper.loaderSection(false);
|
432 |
+
}
|
433 |
+
});
|
434 |
+
}else{
|
435 |
+
tvc_helper.tvc_alert("error","Licence key is required.");
|
436 |
+
}
|
437 |
+
});
|
438 |
+
});
|
439 |
+
</script>
|
admin/partials/sidebar.php
DELETED
@@ -1,60 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
$obj = new Enhanced_Ecommerce_Google_Analytics_Admin($plugin_name = 'enhanced-e-commerce-for-woocommerce-store', $version = PLUGIN_NAME_VERSION);
|
3 |
-
$today = $obj->today();
|
4 |
-
$start = $obj->start_date();
|
5 |
-
$end = $obj->end_date();
|
6 |
-
$currentime = $obj->current_time();
|
7 |
-
$endtime = $obj->end_time();
|
8 |
-
|
9 |
-
?>
|
10 |
-
<div class="col col-xs-3">
|
11 |
-
<div class="tvc_plugin_sidebar">
|
12 |
-
<div class="card" style="padding: 0px;">
|
13 |
-
<div class="card-header">
|
14 |
-
<h5> Important Links</h5>
|
15 |
-
</div>
|
16 |
-
<div class="card-body">
|
17 |
-
<ul>
|
18 |
-
<li style="padding-bottom:5px;"><a href="http://plugins.tatvic.com/help-center/Installation-Manual.pdf" target="_blank">Installation Manual</a></li>
|
19 |
-
<li style="padding-bottom:5px;"><a href="http://plugins.tatvic.com/help-center/Google-shopping-Guide.pdf" target="_blank">Google shopping guide</a></li>
|
20 |
-
<li style="padding-bottom:5px;"><a href="https://wordpress.org/plugins/enhanced-e-commerce-for-woocommerce-store/faq/" target="_blank">FAQ</a></li>
|
21 |
-
<li style="padding-bottom:5px;"><a href="https://www.tatvic.com/contact/?utm_source=TatvicEE&utm_medium=Dashboard&utm_campaign=WPlisting" target="_blank">Support</a></li>
|
22 |
-
<li style="padding-bottom:5px;"><a href="https://www.tatvic.com/privacy-policy/?ref=plugin_policy&utm_source=plugin_backend&utm_medium=woo_free_plugin&utm_campaign=GDPR_complaince_ecomm_plugins" target="_blank">Privacy Policy</a></li>
|
23 |
-
<li style="padding-bottom:5px;"><a href="https://wordpress.org/plugins/enhanced-e-commerce-for-woocommerce-store/#developers" target="_blank">Change Logs</a></li>
|
24 |
-
</ul>
|
25 |
-
</div>
|
26 |
-
</div>
|
27 |
-
<div class="card" style="padding: 0px;">
|
28 |
-
<div class="card-header">
|
29 |
-
<h5>Rate Us!</h5>
|
30 |
-
</div>
|
31 |
-
<div class="card-body">
|
32 |
-
<ul>
|
33 |
-
<li style="padding-bottom:5px;">Do you Like our Plugin? Please Spare few minutes to give <h3><a href = "https://wordpress.org/support/plugin/enhanced-e-commerce-for-woocommerce-store/reviews/" target="_blank" style="float: right">
|
34 |
-
<div class="rating">
|
35 |
-
<span>☆</span><span>☆</span><span>☆</span><span>☆</span><span>☆</span>
|
36 |
-
</div>
|
37 |
-
</a></h3> Rating..!!</li>
|
38 |
-
</ul>
|
39 |
-
</div>
|
40 |
-
</div>
|
41 |
-
<div class="card" style="padding: 0px;">
|
42 |
-
<div class="card-header">
|
43 |
-
<h5>Tatvic also Offers</h5>
|
44 |
-
</div>
|
45 |
-
<div class="card-body">
|
46 |
-
<ul>
|
47 |
-
<li style="padding-bottom:5px;"><img src='<?php echo plugins_url('../images/woo.png', __FILE__ ) ?>' /> <a href="https://codecanyon.net/item/actionable-google-analytics-for-woocommerce/9899552?utm_source=TatvicEE&utm_medium=DashboardSide&utm_campaign=WPlisting
|
48 |
-
" target="_blank">Actionable Google Analytics for WooCommerce - Premium Version</a>
|
49 |
-
<?php if($today >= $start && $today <= $end && $currentime <= $endtime) {?>
|
50 |
-
<img class="new-img-blink-side" src='<?php echo plugins_url('../images/discount.gif', __FILE__ ) ?>' /><?php } ?></li>
|
51 |
-
<li style="padding-bottom:5px;"><img style="width:25px;height: 25px;" src='<?php echo plugins_url('../images/tatvic_logo.png', __FILE__ ) ?>' /> <a href="https://codecanyon.net/item/google-feed-manager-for-woocommerce-by-tatvic/27104089?utm_source=TatvicEE&utm_medium=Side&utm_campaign=SideGMC" target="_blank">Google Feed Manager For WooCommerce</a></li>
|
52 |
-
<li style="padding-bottom:5px;"><img src='<?php echo plugins_url('../images/m1.png', __FILE__ ) ?>' /> <a href="https://1.envato.market/79Oky" target="_blank">Actionable Google Analytics for Magento</a></li>
|
53 |
-
<li style="padding-bottom:5px;"><img src='<?php echo plugins_url('../images/m2.png', __FILE__ ) ?>' /> <a href="https://marketplace.magento.com/tatvic-actionablegoogleanalytics.html" target="_blank">Actionable Google Analytics for Magento2</a></li>
|
54 |
-
<li style="padding-bottom:5px;"><img src='<?php echo plugins_url('../images/shopify_new.png', __FILE__ ) ?>' /> <a href="https://apps.shopify.com/google-universal-analytics-enhanced-ecommerce" target="_blank">Actionable Google Analytics for Shopify</a></li>
|
55 |
-
<li style="padding-bottom:5px;"><img style="width:25px;height: 25px;" src='<?php echo plugins_url('../images/tatvic_logo.png', __FILE__ ) ?>' /> <a href="https://www.tatvic.com/excel-add-in-google-analytics/?utm_source=excel_tool_signup&utm_medium=woo_free_plugin&utm_campaign=excel_free_trial" target="_blank">Tatvic Ninja Excel AddIn</a></li>
|
56 |
-
</ul>
|
57 |
-
</div>
|
58 |
-
</div>
|
59 |
-
</div>
|
60 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enhanced-ecommerce-google-analytics.php
CHANGED
@@ -16,7 +16,7 @@
|
|
16 |
* Plugin Name: Enhanced E-commerce for Woocommerce store
|
17 |
* Plugin URI: https://www.tatvic.com/tatvic-labs/woocommerce-extension/
|
18 |
* Description: Automates eCommerce tracking in Google Analytics, dynamic remarkting in Google Ads, and provides complete Google Shopping features.
|
19 |
-
* Version: 3.0
|
20 |
* Author: Tatvic
|
21 |
* Author URI: www.tatvic.com
|
22 |
* License: GPL-2.0+
|
@@ -38,7 +38,7 @@ if ( ! defined( 'WPINC' ) ) {
|
|
38 |
* Start at version 1.0.0 and use SemVer - https://semver.org
|
39 |
* Rename this for your plugin and update it as you release new versions.
|
40 |
*/
|
41 |
-
define( '
|
42 |
$fullName = plugin_basename( __FILE__ );
|
43 |
$dir = str_replace('/enhanced-ecommerce-google-analytics.php','',$fullName);
|
44 |
if ( ! defined( 'ENHANCAD_PLUGIN_NAME' ) ) {
|
@@ -52,61 +52,14 @@ if ( ! defined( 'ENHANCAD_PLUGIN_DIR' ) ) {
|
|
52 |
if ( ! defined( 'ENHANCAD_PLUGIN_URL' ) ) {
|
53 |
define( 'ENHANCAD_PLUGIN_URL', plugins_url() . '/' . ENHANCAD_PLUGIN_NAME );
|
54 |
}
|
55 |
-
// Store the transient alive time
|
56 |
-
if ( ! defined( 'TVC_TRANSIENT_LIVE' ) ) {
|
57 |
-
define( 'TVC_TRANSIENT_LIVE', 20 * MINUTE_IN_SECONDS );
|
58 |
-
}
|
59 |
-
// Store the base uploads folder, should also work in a multi site environment
|
60 |
-
if ( ! defined( 'TVC_UPLOADS_DIR' ) ) {
|
61 |
-
$wp_upload_dir = wp_get_upload_dir(); // @since 2.10.0 switched from wp_upload_dir to wp_get_upload_dir.
|
62 |
-
$upload_dir = is_multisite() && defined( 'UPLOADS' ) ? UPLOADS : $wp_upload_dir['basedir'];
|
63 |
-
if ( ! file_exists( $upload_dir ) && ! is_dir( $upload_dir ) ) {
|
64 |
-
define( 'TVC_UPLOADS_DIR', $wp_upload_dir['basedir'] );
|
65 |
-
} else {
|
66 |
-
define( 'TVC_UPLOADS_DIR', $upload_dir );
|
67 |
-
}
|
68 |
-
}
|
69 |
|
70 |
-
if ( ! defined( 'TVC_UPLOADS_URL' ) ) {
|
71 |
-
$wp_upload_dir = wp_upload_dir();
|
72 |
-
// correct baseurl for https if required
|
73 |
-
if ( is_ssl() ) {
|
74 |
-
$url = str_replace( 'http://', 'https://', $wp_upload_dir['baseurl'] );
|
75 |
-
} else {
|
76 |
-
$url = $wp_upload_dir['baseurl'];
|
77 |
-
}
|
78 |
-
define( 'TVC_UPLOADS_URL', apply_filters( 'tvc_corrected_uploads_url', $url ) );
|
79 |
-
}
|
80 |
-
// store the folder that contains the channels data
|
81 |
-
if ( ! defined( 'TVC_CHANNEL_DATA_DIR' ) ) {
|
82 |
-
define( 'TVC_CHANNEL_DATA_DIR', ENHANCAD_PLUGIN_DIR . 'includes/application' );
|
83 |
-
}
|
84 |
-
// store the folder that contains the backup files
|
85 |
-
if ( ! defined( 'TVC_BACKUP_DIR' ) ) {
|
86 |
-
define( 'TVC_BACKUP_DIR', TVC_UPLOADS_DIR . '/tvc-backups' );
|
87 |
-
}
|
88 |
-
// store the folder that contains the feeds
|
89 |
-
if ( ! defined( 'TVC_FEEDS_DIR' ) ) {
|
90 |
-
define( 'TVC_FEEDS_DIR', TVC_UPLOADS_DIR . '/tvc-feeds' );
|
91 |
-
}
|
92 |
-
// Store the plugin constructor
|
93 |
-
if ( ! defined( 'TVC_PLUGIN_CONSTRUCTOR' ) ) {
|
94 |
-
define( 'TVC_PLUGIN_CONSTRUCTOR', plugin_basename( __FILE__ ) );
|
95 |
-
}
|
96 |
-
// Store the plugin title
|
97 |
-
if ( ! defined( 'TVC_EDD_SL_ITEM_NAME' ) ) {
|
98 |
-
define( 'TVC_EDD_SL_ITEM_NAME', 'Tatvic Product Feed Manager' );
|
99 |
-
}
|
100 |
-
// Store the plugin title
|
101 |
-
if ( ! defined( 'TVC_MIN_REQUIRED_WC_VERSION' ) ) {
|
102 |
-
define( 'TVC_MIN_REQUIRED_WC_VERSION', '3.0.0' );
|
103 |
-
}
|
104 |
if ( ! defined( 'TVC_API_CALL_URL' ) ) {
|
105 |
-
define( 'TVC_API_CALL_URL', 'https://connect.tatvic.com/laravelapi/public/api' );
|
106 |
}
|
107 |
if ( ! defined( 'TVC_AUTH_CONNECT_URL' ) ) {
|
108 |
define( 'TVC_AUTH_CONNECT_URL', 'estorenew.tatvic.com' );
|
109 |
}
|
|
|
110 |
if(!defined('TVC_Admin_Helper')){
|
111 |
include(ENHANCAD_PLUGIN_DIR . '/admin/class-tvc-admin-helper.php');
|
112 |
}
|
16 |
* Plugin Name: Enhanced E-commerce for Woocommerce store
|
17 |
* Plugin URI: https://www.tatvic.com/tatvic-labs/woocommerce-extension/
|
18 |
* Description: Automates eCommerce tracking in Google Analytics, dynamic remarkting in Google Ads, and provides complete Google Shopping features.
|
19 |
+
* Version: 3.1.0
|
20 |
* Author: Tatvic
|
21 |
* Author URI: www.tatvic.com
|
22 |
* License: GPL-2.0+
|
38 |
* Start at version 1.0.0 and use SemVer - https://semver.org
|
39 |
* Rename this for your plugin and update it as you release new versions.
|
40 |
*/
|
41 |
+
define( 'PLUGIN_TVC_VERSION', '3.1.0' );
|
42 |
$fullName = plugin_basename( __FILE__ );
|
43 |
$dir = str_replace('/enhanced-ecommerce-google-analytics.php','',$fullName);
|
44 |
if ( ! defined( 'ENHANCAD_PLUGIN_NAME' ) ) {
|
52 |
if ( ! defined( 'ENHANCAD_PLUGIN_URL' ) ) {
|
53 |
define( 'ENHANCAD_PLUGIN_URL', plugins_url() . '/' . ENHANCAD_PLUGIN_NAME );
|
54 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
if ( ! defined( 'TVC_API_CALL_URL' ) ) {
|
57 |
+
define( 'TVC_API_CALL_URL', 'https://connect.tatvic.com/laravelapi/public/api' );
|
58 |
}
|
59 |
if ( ! defined( 'TVC_AUTH_CONNECT_URL' ) ) {
|
60 |
define( 'TVC_AUTH_CONNECT_URL', 'estorenew.tatvic.com' );
|
61 |
}
|
62 |
+
|
63 |
if(!defined('TVC_Admin_Helper')){
|
64 |
include(ENHANCAD_PLUGIN_DIR . '/admin/class-tvc-admin-helper.php');
|
65 |
}
|
google_ads_php.ini
DELETED
@@ -1,14 +0,0 @@
|
|
1 |
-
[GOOGLE_ADS]
|
2 |
-
name = "Google Ads"
|
3 |
-
developerToken = "R0IEth5fQ1Ac59qB2Wf8Aw"
|
4 |
-
loginCustomerId = "9704619790"
|
5 |
-
|
6 |
-
[LOGGING]
|
7 |
-
logFilePath = ""
|
8 |
-
|
9 |
-
[OAUTH2]
|
10 |
-
clientId = "854883711805-4bm7ik0lq2jcdvdk0qu8sgtd4jdc1k7o.apps.googleusercontent.com"
|
11 |
-
clientSecret = "mwgFJ25-FMPEyeNtI-TIMJIZ"
|
12 |
-
refreshToken = "1//0glkEtsa8PNuwCgYIARAAGBASNwF-L9IrBZQjIINEw2MMO_M_mRdKwoNCBwJtHXtahh5Bj4oQR01ErmhaBB2TqE68rkP8JaELISU"
|
13 |
-
developerToken = "R0IEth5fQ1Ac59qB2Wf8Aw"
|
14 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/class-enhanced-ecommerce-google-analytics.php
CHANGED
@@ -67,8 +67,8 @@ class Enhanced_Ecommerce_Google_Analytics {
|
|
67 |
* @since 1.0.0
|
68 |
*/
|
69 |
public function __construct() {
|
70 |
-
if ( defined( '
|
71 |
-
$this->version =
|
72 |
} else {
|
73 |
$this->version = '2.0';
|
74 |
}
|
@@ -110,17 +110,10 @@ class Enhanced_Ecommerce_Google_Analytics {
|
|
110 |
* of the plugin.
|
111 |
*/
|
112 |
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-enhanced-ecommerce-google-analytics-i18n.php';
|
113 |
-
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-tvc-admin-db-helper.php';
|
114 |
-
// Feed Manager Files
|
115 |
-
require_once plugin_dir_path(dirname(__FILE__)) . 'includes/data/class-tvc-queries.php';
|
116 |
-
require_once plugin_dir_path(dirname(__FILE__)) . 'includes/data/class-tvc-file.php';
|
117 |
-
require_once plugin_dir_path(dirname(__FILE__)) . 'includes/user-interface/tvc-url-functions.php';
|
118 |
|
119 |
require_once plugin_dir_path(dirname(__FILE__)) . 'includes/data/class-tvc-ajax-calls.php';
|
120 |
-
require_once plugin_dir_path(dirname(__FILE__)) . 'includes/data/class-tvc-ajax-data.php';
|
121 |
require_once plugin_dir_path(dirname(__FILE__)) . 'includes/data/class-tvc-ajax-file.php';
|
122 |
-
|
123 |
-
require_once plugin_dir_path(dirname(__FILE__)) . 'includes/data/class-tvc-feed-crud-handler.php';
|
124 |
require_once plugin_dir_path(dirname(__FILE__)) . 'includes/data/class-tvc-taxonomies.php';
|
125 |
|
126 |
require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-tvc-register-scripts.php';
|
67 |
* @since 1.0.0
|
68 |
*/
|
69 |
public function __construct() {
|
70 |
+
if ( defined( 'PLUGIN_TVC_VERSION' ) ) {
|
71 |
+
$this->version = PLUGIN_TVC_VERSION;
|
72 |
} else {
|
73 |
$this->version = '2.0';
|
74 |
}
|
110 |
* of the plugin.
|
111 |
*/
|
112 |
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-enhanced-ecommerce-google-analytics-i18n.php';
|
113 |
+
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/class-tvc-admin-db-helper.php';
|
|
|
|
|
|
|
|
|
114 |
|
115 |
require_once plugin_dir_path(dirname(__FILE__)) . 'includes/data/class-tvc-ajax-calls.php';
|
|
|
116 |
require_once plugin_dir_path(dirname(__FILE__)) . 'includes/data/class-tvc-ajax-file.php';
|
|
|
|
|
117 |
require_once plugin_dir_path(dirname(__FILE__)) . 'includes/data/class-tvc-taxonomies.php';
|
118 |
|
119 |
require_once plugin_dir_path(dirname(__FILE__)) . 'includes/class-tvc-register-scripts.php';
|
includes/class-tvc-register-scripts.php
CHANGED
@@ -14,17 +14,12 @@ if ( ! class_exists( 'TVC_Register_Scripts' ) ) :
|
|
14 |
class TVC_Register_Scripts {
|
15 |
// @private storage of scripts version
|
16 |
private $_version_stamp;
|
17 |
-
// @private register minified scripts
|
18 |
-
private $_js_min;
|
19 |
public function __construct() {
|
20 |
-
|
21 |
-
|
22 |
-
$this->_version_stamp = defined( 'WP_DEBUG' ) && WP_DEBUG ? time() : $premium_version_nr . '1.0';
|
23 |
-
$this->_js_min = defined( 'WP_DEBUG' ) && WP_DEBUG ? '' : '.min';
|
24 |
-
|
25 |
add_action( 'admin_enqueue_scripts', array( $this, 'tvc_register_required_nonce' ) );
|
26 |
// only load the next hooks when on the Settings page
|
27 |
-
if (
|
28 |
add_action( 'admin_enqueue_scripts', array( $this, 'tvc_register_required_options_page_scripts' ) );
|
29 |
add_action( 'admin_enqueue_scripts', array( $this, 'tvc_register_required_options_page_nonce' ) );
|
30 |
}
|
@@ -54,7 +49,7 @@ if ( ! class_exists( 'TVC_Register_Scripts' ) ) :
|
|
54 |
*/
|
55 |
public function tvc_register_required_options_page_scripts() {
|
56 |
// enqueue notice handling script
|
57 |
-
wp_enqueue_script( 'tvc_data-handling-script', ENHANCAD_PLUGIN_URL . '/includes/data/js/tvc_ajaxdatahandling
|
58 |
}
|
59 |
/**
|
60 |
* Generate the nonce's for the Settings page.
|
14 |
class TVC_Register_Scripts {
|
15 |
// @private storage of scripts version
|
16 |
private $_version_stamp;
|
|
|
|
|
17 |
public function __construct() {
|
18 |
+
$this->_version_stamp = defined( 'WP_DEBUG' ) && WP_DEBUG ? time() : PLUGIN_TVC_VERSION;
|
19 |
+
|
|
|
|
|
|
|
20 |
add_action( 'admin_enqueue_scripts', array( $this, 'tvc_register_required_nonce' ) );
|
21 |
// only load the next hooks when on the Settings page
|
22 |
+
if ( isset($_GET['page']) && $_GET['page'] == 'enhanced-ecommerce-google-analytics-admin-display' ) {
|
23 |
add_action( 'admin_enqueue_scripts', array( $this, 'tvc_register_required_options_page_scripts' ) );
|
24 |
add_action( 'admin_enqueue_scripts', array( $this, 'tvc_register_required_options_page_nonce' ) );
|
25 |
}
|
49 |
*/
|
50 |
public function tvc_register_required_options_page_scripts() {
|
51 |
// enqueue notice handling script
|
52 |
+
wp_enqueue_script( 'tvc_data-handling-script', ENHANCAD_PLUGIN_URL . '/includes/data/js/tvc_ajaxdatahandling.js', array( 'jquery' ), $this->_version_stamp, true );
|
53 |
}
|
54 |
/**
|
55 |
* Generate the nonce's for the Settings page.
|
includes/data/class-tvc-ajax-calls.php
CHANGED
@@ -12,15 +12,10 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
12 |
}
|
13 |
|
14 |
if ( ! class_exists( 'TVC_Ajax_Calls' ) ) :
|
15 |
-
|
16 |
/**
|
17 |
* Feed Controller Class
|
18 |
*/
|
19 |
class TVC_Ajax_Calls {
|
20 |
-
|
21 |
-
public $_queries;
|
22 |
-
public $_files;
|
23 |
-
|
24 |
public function __construct() { }
|
25 |
|
26 |
protected function safe_ajax_call( $nonce, $registered_nonce_name ) {
|
@@ -28,7 +23,6 @@ if ( ! class_exists( 'TVC_Ajax_Calls' ) ) :
|
|
28 |
/*if ( ! wp_verify_nonce( $nonce, $registered_nonce_name ) ) {
|
29 |
die( 'You are not allowed to do this!' );
|
30 |
}*/
|
31 |
-
|
32 |
// only return results when the user is an admin with manage options
|
33 |
if ( is_admin() ) {
|
34 |
return true;
|
@@ -38,4 +32,4 @@ if ( ! class_exists( 'TVC_Ajax_Calls' ) ) :
|
|
38 |
}
|
39 |
}
|
40 |
// end of TVC_Ajax_Calls class
|
41 |
-
endif;
|
12 |
}
|
13 |
|
14 |
if ( ! class_exists( 'TVC_Ajax_Calls' ) ) :
|
|
|
15 |
/**
|
16 |
* Feed Controller Class
|
17 |
*/
|
18 |
class TVC_Ajax_Calls {
|
|
|
|
|
|
|
|
|
19 |
public function __construct() { }
|
20 |
|
21 |
protected function safe_ajax_call( $nonce, $registered_nonce_name ) {
|
23 |
/*if ( ! wp_verify_nonce( $nonce, $registered_nonce_name ) ) {
|
24 |
die( 'You are not allowed to do this!' );
|
25 |
}*/
|
|
|
26 |
// only return results when the user is an admin with manage options
|
27 |
if ( is_admin() ) {
|
28 |
return true;
|
32 |
}
|
33 |
}
|
34 |
// end of TVC_Ajax_Calls class
|
35 |
+
endif;
|
includes/data/class-tvc-ajax-data.php
DELETED
@@ -1,448 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* TVC Ajax Data Class.
|
5 |
-
*
|
6 |
-
* @package TVC Product Feed Manager/Data/Classes
|
7 |
-
* @version 1.10.0
|
8 |
-
*/
|
9 |
-
|
10 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
-
exit;
|
12 |
-
}
|
13 |
-
|
14 |
-
if ( ! class_exists( 'TVC_Ajax_Data' ) ) :
|
15 |
-
|
16 |
-
/**
|
17 |
-
* Ajax Data Class
|
18 |
-
*/
|
19 |
-
class TVC_Ajax_Data extends TVC_Ajax_Calls {
|
20 |
-
|
21 |
-
public function __construct() {
|
22 |
-
parent::__construct();
|
23 |
-
|
24 |
-
$this->_queries = new TVC_Queries();
|
25 |
-
$this->_files = new TVC_File();
|
26 |
-
|
27 |
-
// hooks
|
28 |
-
add_action( 'wp_ajax_tvcajax-get-list-of-feeds', array( $this, 'tvcajax_get_list_of_feeds' ) );
|
29 |
-
add_action( 'wp_ajax_tvcajax-get-list-of-backups', array( $this, 'tvcajax_get_list_of_backups' ) );
|
30 |
-
add_action( 'wp_ajax_tvcajax-get-settings-options', array( $this, 'tvcajax_get_settings_options' ) );
|
31 |
-
add_action( 'wp_ajax_tvcajax-get-output-fields', array( $this, 'tvcajax_get_output_fields' ) );
|
32 |
-
add_action( 'wp_ajax_tvcajax-get-input-fields', array( $this, 'tvcajax_get_input_fields' ) );
|
33 |
-
add_action( 'wp_ajax_tvcajax-get-feed-data', array( $this, 'tvcajax_get_feed_data' ) );
|
34 |
-
add_action( 'wp_ajax_tvcajax-get-feed-status', array( $this, 'tvcajax_get_feed_status' ) );
|
35 |
-
add_action( 'wp_ajax_tvcajax-get-main-feed-filters', array( $this, 'tvcajax_get_feed_filters' ) );
|
36 |
-
add_action( 'wp_ajax_tvcajax-switch-feed-status', array( $this, 'tvcajax_switch_feed_status_between_hold_and_ok' ) );
|
37 |
-
add_action( 'wp_ajax_tvcajax-duplicate-existing-feed', array( $this, 'tvcajax_duplicate_feed_data' ) );
|
38 |
-
add_action( 'wp_ajax_tvcajax-update-feed-data', array( $this, 'tvcajax_update_feed_data' ) );
|
39 |
-
add_action( 'wp_ajax_tvcajax-delete-feed', array( $this, 'tvcajax_delete_feed' ) );
|
40 |
-
add_action( 'wp_ajax_tvcajax-backup-current-data', array( $this, 'tvcajax_backup_current_data' ) );
|
41 |
-
add_action( 'wp_ajax_tvcajax-delete-backup-file', array( $this, 'tvcajax_delete_backup_file' ) );
|
42 |
-
add_action( 'wp_ajax_tvcajax-restore-backup-file', array( $this, 'tvcajax_restore_backup_file' ) );
|
43 |
-
add_action( 'wp_ajax_tvcajax-duplicate-backup-file', array( $this, 'tvcajax_duplicate_backup_file' ) );
|
44 |
-
add_action( 'wp_ajax_tvcajax-get-next-feed-in-queue', array( $this, 'tvcajax_get_next_feed_in_queue' ) );
|
45 |
-
add_action( 'wp_ajax_tvcajax-register-notice-dismission', array( $this, 'tvcajax_register_notice_dismission' ) );
|
46 |
-
}
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Returns a list of all active feeds to an ajax caller
|
50 |
-
*/
|
51 |
-
public function tvcajax_get_list_of_feeds() {
|
52 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'postFeedsListNonce' ), 'tvcajax-post-feeds-list-nonce' ) ) {
|
53 |
-
$list = $this->_queries->get_feeds_list();
|
54 |
-
|
55 |
-
// the status string entries from the database to identification strings (i.e. OK to ok and On hold in on_hold)
|
56 |
-
if ( $list && ! ctype_lower( $list[0]->status ) ) {
|
57 |
-
tvc_correct_old_feeds_list_status( $list );
|
58 |
-
}
|
59 |
-
|
60 |
-
$this->convert_type_numbers_to_text( $list );
|
61 |
-
|
62 |
-
// add information about the tvc_special_feeds_add_on_active filter to the feed list
|
63 |
-
$result = array(
|
64 |
-
'list' => $list,
|
65 |
-
'special_feed_add_ons_active' => apply_filters( 'tvc_special_feeds_add_on_active', false ),
|
66 |
-
);
|
67 |
-
|
68 |
-
echo json_encode( $result );
|
69 |
-
}
|
70 |
-
|
71 |
-
// IMPORTANT: don't forget to exit
|
72 |
-
exit;
|
73 |
-
}
|
74 |
-
|
75 |
-
/**
|
76 |
-
* Returns a list of backups the user has made
|
77 |
-
*/
|
78 |
-
public function tvcajax_get_list_of_backups() {
|
79 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'postBackupListNonce' ), 'tvcajax-backups-list-nonce' ) ) {
|
80 |
-
echo json_encode( $this->_files->make_list_of_active_backups() );
|
81 |
-
}
|
82 |
-
|
83 |
-
// IMPORTANT: don't forget to exit
|
84 |
-
exit;
|
85 |
-
}
|
86 |
-
|
87 |
-
public function tvcajax_get_settings_options() {
|
88 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'postSetupOptionsNonce' ), 'tvcajax-setting-options-nonce' ) ) {
|
89 |
-
$options = [
|
90 |
-
get_option( 'tvc_auto_feed_fix' ),
|
91 |
-
get_option( 'tvc_third_party_attribute_keywords' ),
|
92 |
-
get_option( 'tvc_notice_mailaddress' ),
|
93 |
-
get_option( 'tvc_disabled_background_mode' ),
|
94 |
-
];
|
95 |
-
echo json_encode( $options );
|
96 |
-
}
|
97 |
-
|
98 |
-
// IMPORTANT: don't forget to exit
|
99 |
-
exit;
|
100 |
-
}
|
101 |
-
|
102 |
-
/**
|
103 |
-
* Retrieves the output fields that are specific for a given merchant and
|
104 |
-
* also adds stored meta data to the output fields
|
105 |
-
*
|
106 |
-
* @access public (ajax triggered)
|
107 |
-
*/
|
108 |
-
public function tvcajax_get_output_fields() {
|
109 |
-
|
110 |
-
// check: if the call is safe
|
111 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'outputFieldsNonce' ), 'tvcajax-output-fields-nonce' ) ) {
|
112 |
-
$data_class = new TVC_Data();
|
113 |
-
|
114 |
-
// get the posted inputs
|
115 |
-
$channel_id = filter_input( INPUT_POST, 'channelId' );
|
116 |
-
$feed_id = filter_input( INPUT_POST, 'feedId' );
|
117 |
-
$channel = trim( $this->_queries->get_channel_short_name_from_db( $channel_id ) );
|
118 |
-
$is_custom = function_exists( 'tvc_channel_is_custom_channel' ) ? tvc_channel_is_custom_channel( $channel_id ) : false;
|
119 |
-
|
120 |
-
if ( ! $is_custom ) {
|
121 |
-
// read the output fields
|
122 |
-
$outputs = $this->_files->get_output_fields_for_specific_channel( $channel );
|
123 |
-
|
124 |
-
// if the feed is a stored feed, look for meta data to add (a feed an id of -1 is a new feed that not yet has been saved)
|
125 |
-
if ( $feed_id >= 0 ) {
|
126 |
-
// add meta data to the feeds output fields
|
127 |
-
$outputs = $data_class->fill_output_fields_with_metadata( $feed_id, $outputs );
|
128 |
-
}
|
129 |
-
} else {
|
130 |
-
$data_class = new TVC_Data();
|
131 |
-
$outputs = $data_class->get_custom_fields_with_metadata( $feed_id );
|
132 |
-
}
|
133 |
-
|
134 |
-
echo json_encode( $outputs );
|
135 |
-
}
|
136 |
-
|
137 |
-
// IMPORTANT: don't forget to exit
|
138 |
-
exit;
|
139 |
-
}
|
140 |
-
|
141 |
-
/**
|
142 |
-
* Gets all the different source fields from the custom products and third party sources and combines them into one list
|
143 |
-
*
|
144 |
-
* @access public (ajax triggered)
|
145 |
-
*/
|
146 |
-
public function tvcajax_get_input_fields() {
|
147 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'inputFieldsNonce' ), 'tvcajax-input-fields-nonce' ) ) {
|
148 |
-
$source_id = filter_input( INPUT_POST, 'sourceId' );
|
149 |
-
|
150 |
-
switch ( $source_id ) {
|
151 |
-
case '1':
|
152 |
-
$data_class = new TVC_Data();
|
153 |
-
|
154 |
-
$custom_product_attributes = $this->_queries->get_custom_product_attributes();
|
155 |
-
$custom_product_fields = $this->_queries->get_custom_product_fields();
|
156 |
-
$product_attributes = $this->_queries->get_all_product_attributes();
|
157 |
-
$product_taxonomies = get_taxonomies();
|
158 |
-
$third_party_custom_fields = $data_class->get_third_party_custom_fields();
|
159 |
-
|
160 |
-
$all_source_fields = $this->combine_custom_attributes_and_feeds(
|
161 |
-
$custom_product_attributes,
|
162 |
-
$custom_product_fields,
|
163 |
-
$product_attributes,
|
164 |
-
$product_taxonomies,
|
165 |
-
$third_party_custom_fields
|
166 |
-
);
|
167 |
-
|
168 |
-
echo json_encode( apply_filters( 'tvc_all_source_fields', $all_source_fields ) );
|
169 |
-
break;
|
170 |
-
|
171 |
-
default:
|
172 |
-
if ( 'valid' === get_option( 'tvc_lic_status' ) ) { // error message for paid versions
|
173 |
-
echo '<div id="error">' . esc_html__(
|
174 |
-
'Could not add custom fields because I could not identify the channel.
|
175 |
-
If not already done add the correct channel in the Manage Channels page.
|
176 |
-
Also try to deactivate and then activate the plugin.',
|
177 |
-
'tvc-product-feed-manager'
|
178 |
-
) . '</div>';
|
179 |
-
|
180 |
-
tvc_write_log_file( sprintf( 'Could not define the channel in a valid Premium plugin version. Feed id = %s', $source_id ) );
|
181 |
-
} else { // error message for free version
|
182 |
-
echo '<div id="error">' . esc_html__(
|
183 |
-
'Could not identify the channel.
|
184 |
-
Try to deactivate and then activate the plugin.
|
185 |
-
If that does not work remove the plugin through the WordPress Plugins page and than reinstall and activate it again.',
|
186 |
-
'tvc-product-feed-manager'
|
187 |
-
) . '</div>';
|
188 |
-
|
189 |
-
tvc_write_log_file( sprintf( 'Could not define the channel in a free plugin version. Feed id = %s', $source_id ) );
|
190 |
-
}
|
191 |
-
|
192 |
-
break;
|
193 |
-
}
|
194 |
-
}
|
195 |
-
|
196 |
-
// IMPORTANT: don't forget to exit
|
197 |
-
exit;
|
198 |
-
}
|
199 |
-
|
200 |
-
public function tvcajax_get_feed_filters() {
|
201 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'inputFeedFiltersNonce' ), 'tvcajax-feed-filters-nonce' ) ) {
|
202 |
-
$feed_id = filter_input( INPUT_POST, 'feedId' );
|
203 |
-
|
204 |
-
$data_class = new TVC_Data();
|
205 |
-
$filters = $data_class->get_filter_query( $feed_id );
|
206 |
-
|
207 |
-
echo $filters ? json_encode( $filters ) : '0';
|
208 |
-
}
|
209 |
-
|
210 |
-
// IMPORTANT: don't forget to exit
|
211 |
-
exit;
|
212 |
-
}
|
213 |
-
|
214 |
-
public function tvcajax_get_feed_data() {
|
215 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'feedDataNonce' ), 'tvcajax-feed-data-nonce' ) ) {
|
216 |
-
$feed_id = filter_input( INPUT_POST, 'sourceId' );
|
217 |
-
$feed_data = $this->_queries->read_feed( $feed_id );
|
218 |
-
|
219 |
-
echo json_encode( $feed_data );
|
220 |
-
}
|
221 |
-
|
222 |
-
// IMPORTANT: don't forget to exit
|
223 |
-
exit;
|
224 |
-
}
|
225 |
-
|
226 |
-
public function tvcajax_get_feed_status() {
|
227 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'feedStatusNonce' ), 'tvcajax-feed-status-nonce' ) ) {
|
228 |
-
$feed_id = filter_input( INPUT_POST, 'sourceId' );
|
229 |
-
|
230 |
-
$feed_master = new TVC_Feed_Master_Class( $feed_id );
|
231 |
-
$feed_data = $feed_master->feed_status_check( $feed_id );
|
232 |
-
|
233 |
-
echo json_encode( $feed_data );
|
234 |
-
}
|
235 |
-
|
236 |
-
// IMPORTANT: don't forget to exit
|
237 |
-
exit;
|
238 |
-
}
|
239 |
-
|
240 |
-
public function tvcajax_update_feed_data() {
|
241 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'updateFeedDataNonce' ), 'tvcajax-update-feed-data-nonce' ) ) {
|
242 |
-
// get the posted feed data
|
243 |
-
$ajax_feed_data = json_decode( filter_input( INPUT_POST, 'feed' ) );
|
244 |
-
$feed_filter = filter_input( INPUT_POST, 'feedFilter' );
|
245 |
-
$m_data = filter_input( INPUT_POST, 'metaData' );
|
246 |
-
|
247 |
-
echo TVC_Feed_CRUD_Handler::create_or_update_feed_data( $ajax_feed_data, $m_data, $feed_filter );
|
248 |
-
}
|
249 |
-
|
250 |
-
exit;
|
251 |
-
}
|
252 |
-
|
253 |
-
public function tvcajax_switch_feed_status_between_hold_and_ok() {
|
254 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'switchFeedStatusNonce' ), 'tvcajax-switch-feed-status-nonce' ) ) {
|
255 |
-
$feed_id = filter_input( INPUT_POST, 'feedId' );
|
256 |
-
|
257 |
-
$feed_status = $this->_queries->get_current_feed_status( $feed_id );
|
258 |
-
$current_status = $feed_status[0]->status_id;
|
259 |
-
|
260 |
-
$new_status = '1' === $current_status ? '2' : '1'; // only allow status 1 or 2
|
261 |
-
|
262 |
-
$result = $this->_queries->switch_feed_status( $feed_id, $new_status );
|
263 |
-
|
264 |
-
echo ( false === $result ) ? $current_status : $new_status;
|
265 |
-
}
|
266 |
-
|
267 |
-
// IMPORTANT: don't forget to exit
|
268 |
-
exit;
|
269 |
-
}
|
270 |
-
|
271 |
-
public function tvcajax_duplicate_feed_data() {
|
272 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'duplicateFeedNonce' ), 'tvcajax-duplicate-existing-feed-nonce' ) ) {
|
273 |
-
$feed_id = filter_input( INPUT_POST, 'feedId' );
|
274 |
-
|
275 |
-
echo TVC_Db_Management::duplicate_feed( $feed_id );
|
276 |
-
}
|
277 |
-
|
278 |
-
// IMPORTANT: don't forget to exit
|
279 |
-
exit;
|
280 |
-
}
|
281 |
-
|
282 |
-
public function tvcajax_delete_feed() {
|
283 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'deleteFeedNonce' ), 'tvcajax-delete-feed-nonce' ) ) {
|
284 |
-
$feed_id = filter_input( INPUT_POST, 'feedId' );
|
285 |
-
|
286 |
-
// only return results when the user is an admin with manage options
|
287 |
-
if ( is_admin() ) {
|
288 |
-
TVC_Feed_Controller::remove_id_from_feed_queue( $feed_id );
|
289 |
-
$this->_queries->delete_meta( $feed_id );
|
290 |
-
echo $this->_queries->delete_feed( $feed_id );
|
291 |
-
}
|
292 |
-
}
|
293 |
-
|
294 |
-
// IMPORTANT: don't forget to exit
|
295 |
-
exit;
|
296 |
-
}
|
297 |
-
|
298 |
-
public function tvcajax_backup_current_data() {
|
299 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'backupNonce' ), 'tvcajax-backup-nonce' ) ) {
|
300 |
-
// only take action when the user is an admin with manage options
|
301 |
-
if ( is_admin() ) {
|
302 |
-
$backup_file_name = filter_input( INPUT_POST, 'fileName' );
|
303 |
-
echo TVC_Db_Management::backup_database_tables( $backup_file_name );
|
304 |
-
}
|
305 |
-
}
|
306 |
-
|
307 |
-
// IMPORTANT: don't forget to exit
|
308 |
-
exit;
|
309 |
-
}
|
310 |
-
|
311 |
-
public function tvcajax_delete_backup_file() {
|
312 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'deleteBackupNonce' ), 'tvcajax-delete-backup-nonce' ) ) {
|
313 |
-
// only take action when the user is an admin with manage options
|
314 |
-
if ( is_admin() ) {
|
315 |
-
$backup_file_name = filter_input( INPUT_POST, 'fileName' );
|
316 |
-
TVC_Db_Management::delete_backup_file( $backup_file_name );
|
317 |
-
}
|
318 |
-
}
|
319 |
-
|
320 |
-
// IMPORTANT: don't forget to exit
|
321 |
-
exit;
|
322 |
-
}
|
323 |
-
|
324 |
-
public function tvcajax_restore_backup_file() {
|
325 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'restoreBackupNonce' ), 'tvcajax-restore-backup-nonce' ) ) {
|
326 |
-
// only take action when the user is an admin with manage options
|
327 |
-
if ( is_admin() ) {
|
328 |
-
$backup_file_name = filter_input( INPUT_POST, 'fileName' );
|
329 |
-
echo TVC_Db_Management::restore_backup( $backup_file_name );
|
330 |
-
}
|
331 |
-
}
|
332 |
-
|
333 |
-
// IMPORTANT: don't forget to exit
|
334 |
-
exit;
|
335 |
-
}
|
336 |
-
|
337 |
-
public function tvcajax_duplicate_backup_file() {
|
338 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'duplicateBackupNonce' ), 'tvcajax-duplicate-backup-nonce' ) ) {
|
339 |
-
// only take action when the user is an admin with manage options
|
340 |
-
if ( is_admin() ) {
|
341 |
-
$backup_file_name = filter_input( INPUT_POST, 'fileName' );
|
342 |
-
TVC_Db_Management::duplicate_backup_file( $backup_file_name );
|
343 |
-
}
|
344 |
-
}
|
345 |
-
|
346 |
-
// IMPORTANT: don't forget to exit
|
347 |
-
exit;
|
348 |
-
}
|
349 |
-
|
350 |
-
public function tvcajax_get_next_feed_in_queue() {
|
351 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'nextFeedInQueueNonce' ), 'tvcajax-next-feed-in-queue-nonce' ) ) {
|
352 |
-
$next_feed_id = TVC_Feed_Controller::get_next_id_from_feed_queue();
|
353 |
-
echo false !== $next_feed_id ? $next_feed_id : 'false';
|
354 |
-
}
|
355 |
-
|
356 |
-
// IMPORTANT: don't forget to exit
|
357 |
-
exit;
|
358 |
-
}
|
359 |
-
|
360 |
-
public function tvcajax_register_notice_dismission() {
|
361 |
-
if ( $this->safe_ajax_call( filter_input( INPUT_POST, 'noticeDismissionNonce' ), 'tvcajax-duplicate-backup-nonce' ) ) {
|
362 |
-
|
363 |
-
// only take action when the user is an admin with manage options
|
364 |
-
if ( is_admin() ) {
|
365 |
-
update_option( 'tvc_license_notice_suppressed', true );
|
366 |
-
echo 'true';
|
367 |
-
} else {
|
368 |
-
echo 'false';
|
369 |
-
}
|
370 |
-
}
|
371 |
-
|
372 |
-
// IMPORTANT: don't forget to exit
|
373 |
-
exit;
|
374 |
-
}
|
375 |
-
|
376 |
-
private function combine_custom_attributes_and_feeds( $attributes, $feeds, $product_attributes, $product_taxonomies, $third_party_fields ) {
|
377 |
-
$prev_dup_array = array(); // used to prevent doubles
|
378 |
-
|
379 |
-
foreach ( $feeds as $feed ) {
|
380 |
-
$obj = new stdClass();
|
381 |
-
|
382 |
-
$obj->attribute_name = $feed;
|
383 |
-
$obj->attribute_label = $feed;
|
384 |
-
|
385 |
-
array_push( $attributes, $obj );
|
386 |
-
array_push( $prev_dup_array, $obj->attribute_label );
|
387 |
-
}
|
388 |
-
|
389 |
-
foreach ( $product_taxonomies as $taxonomy ) {
|
390 |
-
if ( ! in_array( $taxonomy, $prev_dup_array ) ) {
|
391 |
-
$obj = new stdClass();
|
392 |
-
$obj->attribute_name = $taxonomy;
|
393 |
-
$obj->attribute_label = $taxonomy;
|
394 |
-
|
395 |
-
array_push( $attributes, $obj );
|
396 |
-
array_push( $prev_dup_array, $taxonomy );
|
397 |
-
}
|
398 |
-
}
|
399 |
-
|
400 |
-
foreach ( $product_attributes as $attribute_string ) {
|
401 |
-
$attribute_object = maybe_unserialize( $attribute_string->meta_value );
|
402 |
-
|
403 |
-
if ( $attribute_object && ( is_object( $attribute_object ) || is_array( $attribute_object ) ) ) {
|
404 |
-
foreach ( $attribute_object as $attribute ) {
|
405 |
-
if ( ! in_array( $attribute['name'], $prev_dup_array ) ) {
|
406 |
-
$obj = new stdClass();
|
407 |
-
$obj->attribute_name = $attribute['name'];
|
408 |
-
$obj->attribute_label = $attribute['name'];
|
409 |
-
|
410 |
-
array_push( $attributes, $obj );
|
411 |
-
array_push( $prev_dup_array, $attribute['name'] );
|
412 |
-
}
|
413 |
-
}
|
414 |
-
} else {
|
415 |
-
if ( $attribute_object ) {
|
416 |
-
tvc_write_log_file( $attribute_object, 'debug' );
|
417 |
-
}
|
418 |
-
}
|
419 |
-
}
|
420 |
-
|
421 |
-
foreach ( $third_party_fields as $field_label ) {
|
422 |
-
if ( ! in_array( $field_label, $prev_dup_array ) ) {
|
423 |
-
$obj = new stdClass();
|
424 |
-
$obj->attribute_name = $field_label;
|
425 |
-
$obj->attribute_label = $field_label;
|
426 |
-
|
427 |
-
array_push( $attributes, $obj );
|
428 |
-
array_push( $prev_dup_array, $field_label );
|
429 |
-
}
|
430 |
-
}
|
431 |
-
|
432 |
-
return $attributes;
|
433 |
-
}
|
434 |
-
|
435 |
-
private function convert_type_numbers_to_text( &$list ) {
|
436 |
-
$feed_types = tvc_list_feed_type_text();
|
437 |
-
|
438 |
-
foreach ( $list as $feed ) {
|
439 |
-
$feed->feed_type_name = $feed_types[ $feed->feed_type_id ];
|
440 |
-
}
|
441 |
-
}
|
442 |
-
}
|
443 |
-
|
444 |
-
// end of TVC_Ajax_Data_Class
|
445 |
-
|
446 |
-
endif;
|
447 |
-
|
448 |
-
$my_ajax_data_class = new TVC_Ajax_Data();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/data/class-tvc-ajax-file.php
CHANGED
@@ -24,28 +24,64 @@ class TVC_Ajax_File extends TVC_Ajax_Calls {
|
|
24 |
add_action('wp_ajax_tvcajax-get-campaign-categories', array($this, 'tvcajax_get_campaign_categories'));
|
25 |
add_action('wp_ajax_tvcajax-update-campaign-status', array($this, 'tvcajax_update_campaign_status'));
|
26 |
add_action('wp_ajax_tvcajax-delete-campaign', array($this, 'tvcajax_delete_campaign'));
|
27 |
-
|
28 |
-
add_action('wp_ajax_tvcajax-get-category-lists', array($this, 'tvcajax_read_category_lists'));
|
29 |
-
add_action('wp_ajax_tvcajax-delete-feed-file', array($this, 'tvcajax_delete_feed_file'));
|
30 |
-
add_action('wp_ajax_tvcajax-update-feed-file', array($this, 'tvcajax_update_feed_file'));
|
31 |
-
add_action('wp_ajax_tvcajax-log-message', array($this, 'tvcajax_log_message'));
|
32 |
-
add_action('wp_ajax_tvcajax-auto-feed-fix-mode-selection', array($this, 'tvcajax_auto_feed_fix_mode_selection'));
|
33 |
-
add_action('wp_ajax_tvcajax-background-processing-mode-selection', array($this, 'tvcajax_background_processing_mode_selection'));
|
34 |
-
add_action('wp_ajax_tvcajax-feed-logger-status-selection', array($this, 'tvcajax_feed_logger_status_selection'));
|
35 |
-
add_action('wp_ajax_tvcajax-show-product-identifiers-selection', array($this, 'tvcajax_show_product_identifiers_selection'));
|
36 |
-
add_action('wp_ajax_tvcajax-debug-mode-selection', array($this, 'tvcajax_debut_mode_selection'));
|
37 |
-
add_action('wp_ajax_tvcajax-third-party-attribute-keywords', array($this, 'tvcajax_set_third_party_attribute_keywords'));
|
38 |
-
add_action('wp_ajax_tvcajax-set-notice-mailaddress', array($this, 'tvcajax_set_notice_mailaddress'));
|
39 |
-
add_action('wp_ajax_tvcajax-clear-feed-process-data', array($this, 'tvcajax_clear_feed_process_data'));
|
40 |
-
add_action('wp_ajax_tvcajax-reinitiate-plugin', array($this, 'tvcajax_reinitiate_plugin'));
|
41 |
add_action('wp_ajax_tvcajax-product-syncup', array($this, 'tvcajax_product_syncup'));
|
42 |
add_action('wp_ajax_tvcajax-gmc-category-lists', array($this, 'tvcajax_get_gmc_categories'));
|
43 |
add_action('wp_ajax_tvcajax-custom-metrics-dimension', array($this, 'tvcajax_custom_metrics_dimension'));
|
44 |
add_action('wp_ajax_tvcajax-store-time-taken', array($this, 'tvcajax_store_time_taken'));
|
|
|
45 |
add_action('wp_ajax_tvc_call_api_sync', array($this, 'tvc_call_api_sync'));
|
46 |
add_action('wp_ajax_tvc_call_domain_claim', array($this, 'tvc_call_domain_claim'));
|
47 |
add_action('wp_ajax_tvc_call_site_verified', array($this, 'tvc_call_site_verified'));
|
48 |
add_action('wp_ajax_tvc_call_notice_dismiss', array($this, 'tvc_call_notice_dismiss'));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
}
|
50 |
public function tvc_call_notice_dismiss(){
|
51 |
if($this->safe_ajax_call(filter_input(INPUT_POST, 'apiNoticDismissNonce'), 'tvc_call_notice_dismiss-nonce')){
|
@@ -63,8 +99,12 @@ class TVC_Ajax_File extends TVC_Ajax_Calls {
|
|
63 |
public function tvc_call_api_sync(){
|
64 |
if($this->safe_ajax_call(filter_input(INPUT_POST, 'apiSyncupNonce'), 'tvc_call_api_sync-nonce')){
|
65 |
$TVC_Admin_Helper = new TVC_Admin_Helper();
|
66 |
-
$
|
67 |
-
|
|
|
|
|
|
|
|
|
68 |
exit;
|
69 |
}
|
70 |
exit;
|
@@ -309,298 +349,6 @@ class TVC_Ajax_File extends TVC_Ajax_Calls {
|
|
309 |
exit;
|
310 |
}
|
311 |
|
312 |
-
/**
|
313 |
-
* Returns the sub-categories from a selected category
|
314 |
-
*/
|
315 |
-
public function tvcajax_read_next_categories(){
|
316 |
-
// make sure this call is legal
|
317 |
-
if($this->safe_ajax_call(filter_input(INPUT_POST, 'nextCategoryNonce'), 'tvcajax-next-category-nonce')){
|
318 |
-
$file_class = new TVC_File();
|
319 |
-
|
320 |
-
$channel_id = filter_input(INPUT_POST, 'channelId');
|
321 |
-
$requested_level = filter_input(INPUT_POST, 'requestedLevel');
|
322 |
-
$parent_category = filter_input(INPUT_POST, 'parentCategory');
|
323 |
-
$file_language = filter_input(INPUT_POST, 'fileLanguage');
|
324 |
-
$categories = $file_class->get_categories_for_list($channel_id, $requested_level, $parent_category, $file_language);
|
325 |
-
|
326 |
-
if(!is_array($categories)){
|
327 |
-
if('0' === substr($categories, - 1)){
|
328 |
-
chop($categories, '0');
|
329 |
-
}
|
330 |
-
}
|
331 |
-
|
332 |
-
echo json_encode($categories);
|
333 |
-
}
|
334 |
-
|
335 |
-
// IMPORTANT: don't forget to exit
|
336 |
-
exit;
|
337 |
-
}
|
338 |
-
|
339 |
-
/**
|
340 |
-
* Read the category list
|
341 |
-
*/
|
342 |
-
public function tvcajax_read_category_lists(){
|
343 |
-
// make sure this call is legal
|
344 |
-
if($this->safe_ajax_call(filter_input(INPUT_POST, 'categoryListsNonce'), 'tvcajax-category-lists-nonce')){
|
345 |
-
$file_class = new TVC_File();
|
346 |
-
|
347 |
-
$channel_id = filter_input(INPUT_POST, 'channelId');
|
348 |
-
$main_categories_string = filter_input(INPUT_POST, 'mainCategories');
|
349 |
-
$file_language = filter_input(INPUT_POST, 'fileLanguage');
|
350 |
-
$categories_array = explode(' > ', $main_categories_string);
|
351 |
-
$categories = array();
|
352 |
-
$required_levels = count($categories_array) > 0 ? ( count($categories_array) + 1 ) : count($categories_array);
|
353 |
-
|
354 |
-
for($i = 0; $i < $required_levels; $i ++){
|
355 |
-
$parent_category = $i > 0 ? $categories_array[$i - 1] : '';
|
356 |
-
$c = $file_class->get_categories_for_list($channel_id, $i, $parent_category, $file_language);
|
357 |
-
if($c){
|
358 |
-
array_push($categories, $c);
|
359 |
-
}
|
360 |
-
}
|
361 |
-
|
362 |
-
echo json_encode($categories);
|
363 |
-
}
|
364 |
-
|
365 |
-
// IMPORTANT: don't forget to exit
|
366 |
-
exit;
|
367 |
-
}
|
368 |
-
|
369 |
-
/**
|
370 |
-
* Delete a specific feed file
|
371 |
-
*/
|
372 |
-
public function tvcajax_delete_feed_file(){
|
373 |
-
// make sure this call is legal
|
374 |
-
if($this->safe_ajax_call(filter_input(INPUT_POST, 'deleteFeedNonce'), 'tvcajax-delete-feed-nonce')){
|
375 |
-
$file_name = filter_input(INPUT_POST, 'fileTitle');
|
376 |
-
|
377 |
-
if(file_exists(WP_PLUGIN_DIR . '/tvc-product-feed-manager-support/feeds/' . $file_name)){
|
378 |
-
$file = WP_PLUGIN_DIR . '/tvc-product-feed-manager-support/feeds/' . $file_name;
|
379 |
-
}else{
|
380 |
-
$file = TVC_FEEDS_DIR . '/' . $file_name;
|
381 |
-
}
|
382 |
-
|
383 |
-
// only return results when the user is an admin with manage options
|
384 |
-
if(is_admin()){
|
385 |
-
/* translators: %s: Title of the feed file */
|
386 |
-
echo file_exists($file) ? unlink($file) : tvc_show_wp_error(sprintf(esc_html__('Could not find file %s.', 'tvc-product-feed-manager'), $file));
|
387 |
-
}else{
|
388 |
-
echo tvc_show_wp_error(esc_html__('Error deleting the feed. You do not have the correct authorities to delete the file.', 'tvc-product-feed-manager'));
|
389 |
-
}
|
390 |
-
}
|
391 |
-
|
392 |
-
// IMPORTANT: don't forget to exit
|
393 |
-
exit;
|
394 |
-
}
|
395 |
-
|
396 |
-
/**
|
397 |
-
* This function fetches the posted data and triggers the update of the feed file on the server.
|
398 |
-
*/
|
399 |
-
public function tvcajax_update_feed_file(){
|
400 |
-
// make sure this call is legal
|
401 |
-
if($this->safe_ajax_call(filter_input(INPUT_POST, 'updateFeedFileNonce'), 'tvcajax-update-feed-file-nonce')){
|
402 |
-
|
403 |
-
// fetch the data from $_POST
|
404 |
-
$feed_id = filter_input(INPUT_POST, 'feedId');
|
405 |
-
$background_mode_disabled = get_option('tvc_disabled_background_mode', 'false');
|
406 |
-
|
407 |
-
TVC_Feed_Controller::add_id_to_feed_queue($feed_id);
|
408 |
-
|
409 |
-
// if there is no feed processing in progress, of background processing is switched off, start updating the current feed
|
410 |
-
if(!TVC_Feed_Controller::feed_is_processing() || 'true' === $background_mode_disabled){
|
411 |
-
do_action('tvc_manual_feed_update_activated', $feed_id);
|
412 |
-
|
413 |
-
$feed_master_class = new TVC_Feed_Master_Class($feed_id);
|
414 |
-
$feed_master_class->update_feed_file(false);
|
415 |
-
}else{
|
416 |
-
$data_class = new TVC_Data();
|
417 |
-
$data_class->update_feed_status($feed_id, 4); // feed status to waiting in queue
|
418 |
-
echo 'pushed_to_queue';
|
419 |
-
}
|
420 |
-
}
|
421 |
-
|
422 |
-
// IMPORTANT: don't forget to exit
|
423 |
-
exit;
|
424 |
-
}
|
425 |
-
|
426 |
-
/**
|
427 |
-
* Logs a message from a javascript call to the server
|
428 |
-
*/
|
429 |
-
public function tvcajax_log_message(){
|
430 |
-
// make sure this call is legal
|
431 |
-
if($this->safe_ajax_call(filter_input(INPUT_POST, 'logMessageNonce'), 'tvcajax-log-message-nonce')){
|
432 |
-
// fetch the data from $_POST
|
433 |
-
$message = filter_input(INPUT_POST, 'messageList');
|
434 |
-
$file_name = filter_input(INPUT_POST, 'fileName');
|
435 |
-
$text_message = strip_tags($message);
|
436 |
-
|
437 |
-
// only return results when the user is an admin with manage options
|
438 |
-
if(is_admin()){
|
439 |
-
//tvc_write_log_file( $text_message, $file_name );
|
440 |
-
}else{
|
441 |
-
echo tvc_show_wp_error(esc_html__('Error writing the feed. You do not have the correct authorities to write the file.', 'tvc-product-feed-manager'));
|
442 |
-
}
|
443 |
-
}
|
444 |
-
|
445 |
-
// IMPORTANT: don't forget to exit
|
446 |
-
exit;
|
447 |
-
}
|
448 |
-
|
449 |
-
/**
|
450 |
-
* Changes the Auto Feed Fix setting from the Settings page
|
451 |
-
*
|
452 |
-
* @since 1.7.0
|
453 |
-
*/
|
454 |
-
public function tvcajax_auto_feed_fix_mode_selection(){
|
455 |
-
// make sure this call is legal
|
456 |
-
if($this->safe_ajax_call(filter_input(INPUT_POST, 'updateAutoFeedFixNonce'), 'tvcajax-auto-feed-fix-nonce')){
|
457 |
-
$selection = filter_input(INPUT_POST, 'fix_selection');
|
458 |
-
update_option('tvc_auto_feed_fix', $selection);
|
459 |
-
|
460 |
-
echo get_option('tvc_auto_feed_fix');
|
461 |
-
}
|
462 |
-
|
463 |
-
// IMPORTANT: don't forget to exit
|
464 |
-
exit;
|
465 |
-
}
|
466 |
-
|
467 |
-
/**
|
468 |
-
* Changes the Disable Background processing setting from the Settings page
|
469 |
-
*
|
470 |
-
* @since 2.0.7
|
471 |
-
*/
|
472 |
-
public function tvcajax_background_processing_mode_selection(){
|
473 |
-
// make sure this call is legal
|
474 |
-
if($this->safe_ajax_call(filter_input(INPUT_POST, 'backgroundModeNonce'), 'tvcajax-background-mode-nonce')){
|
475 |
-
$selection = filter_input(INPUT_POST, 'mode_selection');
|
476 |
-
update_option('tvc_disabled_background_mode', $selection);
|
477 |
-
|
478 |
-
echo get_option('tvc_disabled_background_mode');
|
479 |
-
}
|
480 |
-
|
481 |
-
// IMPORTANT: don't forget to exit
|
482 |
-
exit;
|
483 |
-
}
|
484 |
-
|
485 |
-
/**
|
486 |
-
* Changes the Feed Process Logger setting from the Settings page.
|
487 |
-
*
|
488 |
-
* @since 2.8.0
|
489 |
-
*/
|
490 |
-
public function tvcajax_feed_logger_status_selection(){
|
491 |
-
// make sure this call is legal
|
492 |
-
if($this->safe_ajax_call(filter_input(INPUT_POST, 'feedLoggerStatusNonce'), 'tvcajax-logger-status-nonce')){
|
493 |
-
$selection = filter_input(INPUT_POST, 'statusSelection');
|
494 |
-
update_option('tvc_process_logger_status', $selection);
|
495 |
-
|
496 |
-
echo get_option('tvc_process_logger_status');
|
497 |
-
}
|
498 |
-
|
499 |
-
// IMPORTANT: don't forget to exit
|
500 |
-
exit;
|
501 |
-
}
|
502 |
-
|
503 |
-
/**
|
504 |
-
* Changes the Show Product Identifiers setting from the Settings page.
|
505 |
-
*
|
506 |
-
* @since 2.10.0
|
507 |
-
*/
|
508 |
-
public function tvcajax_show_product_identifiers_selection(){
|
509 |
-
// make sure this call is legal
|
510 |
-
if($this->safe_ajax_call(filter_input(INPUT_POST, 'showPINonce'), 'tvcajax-show-pi-nonce')){
|
511 |
-
$selection = filter_input(INPUT_POST, 'showPiSelection');
|
512 |
-
update_option('tvc_show_product_identifiers', $selection);
|
513 |
-
|
514 |
-
echo get_option('tvc_show_product_identifiers');
|
515 |
-
}
|
516 |
-
|
517 |
-
// IMPORTANT: don't forget to exit
|
518 |
-
exit;
|
519 |
-
}
|
520 |
-
|
521 |
-
/**
|
522 |
-
* Changes the Debug setting from the Settings page
|
523 |
-
*
|
524 |
-
* @since 1.9.0
|
525 |
-
*/
|
526 |
-
public function tvcajax_debug_mode_selection(){
|
527 |
-
// make sure this call is legal
|
528 |
-
if($this->safe_ajax_call(filter_input(INPUT_POST, 'debugNonce'), 'tvcajax-debug-nonce')){
|
529 |
-
$selection = filter_input(INPUT_POST, 'debug_selection');
|
530 |
-
update_option('tvc_debug_mode', $selection);
|
531 |
-
|
532 |
-
echo get_option('tvc_debug_mode');
|
533 |
-
}
|
534 |
-
|
535 |
-
// IMPORTANT: don't forget to exit
|
536 |
-
exit;
|
537 |
-
}
|
538 |
-
|
539 |
-
public function tvcajax_set_third_party_attribute_keywords(){
|
540 |
-
// make sure this call is legal
|
541 |
-
if($this->safe_ajax_call(filter_input(INPUT_POST, 'thirdPartyKeywordsNonce'), 'tvcajax-set-third-party-keywords-nonce')){
|
542 |
-
$keywords = filter_input(INPUT_POST, 'keywords');
|
543 |
-
update_option('tvc_third_party_attribute_keywords', $keywords);
|
544 |
-
|
545 |
-
echo get_option('tvc_third_party_attribute_keywords');
|
546 |
-
}
|
547 |
-
|
548 |
-
// IMPORTANT: don't forget to exit
|
549 |
-
exit;
|
550 |
-
}
|
551 |
-
|
552 |
-
public function tvcajax_set_notice_mailaddress(){
|
553 |
-
// make sure this call is legal
|
554 |
-
if($this->safe_ajax_call(filter_input(INPUT_POST, 'noticeMailaddressNonce'), 'tvcajax-set-notice-mailaddress-nonce')){
|
555 |
-
$mailaddress = filter_input(INPUT_POST, 'mailaddress');
|
556 |
-
update_option('tvc_notice_mailaddress', $mailaddress);
|
557 |
-
|
558 |
-
echo get_option('tvc_notice_mailaddress');
|
559 |
-
}
|
560 |
-
|
561 |
-
// IMPORTANT: don't forget to exit
|
562 |
-
exit;
|
563 |
-
}
|
564 |
-
|
565 |
-
/**
|
566 |
-
* Re-initiates the plugin, updates the database and loads all cron jobs
|
567 |
-
*
|
568 |
-
* @since 1.9.0
|
569 |
-
*/
|
570 |
-
public function tvcajax_reinitiate_plugin(){
|
571 |
-
if($this->safe_ajax_call(filter_input(INPUT_POST, 'reInitiateNonce'), 'tvcajax-reinitiate-nonce')){
|
572 |
-
|
573 |
-
if(tvc_reinitiate_plugin()){
|
574 |
-
echo 'Plugin re-initiated';
|
575 |
-
}else{
|
576 |
-
echo 'Re-initiation failed!';
|
577 |
-
}
|
578 |
-
}
|
579 |
-
|
580 |
-
// IMPORTANT: don't forget to exit
|
581 |
-
exit;
|
582 |
-
}
|
583 |
-
|
584 |
-
/**
|
585 |
-
* Clears all option data that is related to the feed processing
|
586 |
-
*
|
587 |
-
* @since 1.10.0
|
588 |
-
*/
|
589 |
-
public function tvcajax_clear_feed_process_data(){
|
590 |
-
if($this->safe_ajax_call(filter_input(INPUT_POST, 'clearFeedNonce'), 'tvcajax-clear-feed-nonce')){
|
591 |
-
|
592 |
-
if(tvc_clear_feed_process_data()){
|
593 |
-
echo esc_html__('Feed processing data cleared', 'tvc-product-feed-manager');
|
594 |
-
}else{
|
595 |
-
/* translators: clearing the feed data failed */
|
596 |
-
echo esc_html__('Clearing failed!', 'tvc-product-feed-manager');
|
597 |
-
}
|
598 |
-
}
|
599 |
-
|
600 |
-
// IMPORTANT: don't forget to exit
|
601 |
-
exit;
|
602 |
-
}
|
603 |
-
|
604 |
/**
|
605 |
* Returns the campaign categories from a selected country
|
606 |
*/
|
@@ -656,16 +404,6 @@ class TVC_Ajax_File extends TVC_Ajax_Calls {
|
|
656 |
exit;
|
657 |
}
|
658 |
|
659 |
-
public function getPostMetaData($id){
|
660 |
-
$queries = new TVC_Queries();
|
661 |
-
$column2 = json_decode(json_encode($queries->getTablePostMeta($id)), true);
|
662 |
-
$arr = array();
|
663 |
-
foreach($column2 as $val){
|
664 |
-
$arr[$val['meta_key']] = $val['meta_value'];
|
665 |
-
}
|
666 |
-
return $arr;
|
667 |
-
}
|
668 |
-
|
669 |
/**
|
670 |
* create product batch for product sync up
|
671 |
*/
|
@@ -755,7 +493,6 @@ class TVC_Ajax_File extends TVC_Ajax_Calls {
|
|
755 |
}
|
756 |
|
757 |
$entries = [];
|
758 |
-
//print_r($mappedCats);
|
759 |
if(!empty($mappedCats)){
|
760 |
foreach($mappedCats as $mc_key => $mappedCat){
|
761 |
$all_products = get_posts(array(
|
@@ -775,7 +512,7 @@ class TVC_Ajax_File extends TVC_Ajax_Calls {
|
|
775 |
foreach($all_products as $postkey => $postvalue){
|
776 |
|
777 |
$postmeta = [];
|
778 |
-
$postmeta = $
|
779 |
$prd = wc_get_product($postvalue->ID);
|
780 |
$postObj = (object) array_merge((array) $postvalue, (array) $postmeta);
|
781 |
|
@@ -818,7 +555,7 @@ class TVC_Ajax_File extends TVC_Ajax_Calls {
|
|
818 |
$p_variations = $prd->get_available_variations();
|
819 |
if(!empty($p_variations)){
|
820 |
foreach ($p_variations as $v_key => $v_value) {
|
821 |
-
$postmeta_var = (object)$
|
822 |
$product['title'] = (isset($postObj->$formArray['title']))?$postObj->$formArray['title']:get_the_title($postvalue->ID);
|
823 |
$tvc_temp_desc_key = $formArray['description'];
|
824 |
$product['description'] = (isset($v_value['variation_description']) && $v_value['variation_description'] != "")?$v_value['variation_description']:$postObj->$tvc_temp_desc_key;
|
@@ -944,8 +681,6 @@ class TVC_Ajax_File extends TVC_Ajax_Calls {
|
|
944 |
'method' => 'insert',
|
945 |
'product' => $product
|
946 |
];
|
947 |
-
//print_r($entrie);
|
948 |
-
//exit;
|
949 |
$entries[] = $entrie;
|
950 |
}
|
951 |
|
@@ -970,15 +705,13 @@ class TVC_Ajax_File extends TVC_Ajax_Calls {
|
|
970 |
'body' => wp_json_encode($data)
|
971 |
);
|
972 |
|
973 |
-
$request = wp_remote_post($url, $args);
|
974 |
-
//print_r($request);
|
975 |
|
976 |
// Retrieve information
|
977 |
$response_code = wp_remote_retrieve_response_code($request);
|
978 |
$response_message = wp_remote_retrieve_response_message($request);
|
979 |
$response_body = json_decode(wp_remote_retrieve_body($request));
|
980 |
-
|
981 |
-
//die;
|
982 |
if((isset($response_body->error) && $response_body->error == '')){
|
983 |
$TVC_Admin_Auto_Product_sync_Helper = new TVC_Admin_Auto_Product_sync_Helper();
|
984 |
$TVC_Admin_Auto_Product_sync_Helper->update_last_sync_in_db();
|
@@ -1021,7 +754,7 @@ class TVC_Ajax_File extends TVC_Ajax_Calls {
|
|
1021 |
$subscriptionId = filter_input(INPUT_POST, 'subscriptionId');
|
1022 |
$data = filter_input(INPUT_POST, 'data');
|
1023 |
parse_str($data, $formArray);
|
1024 |
-
//
|
1025 |
|
1026 |
$customDimension = [];
|
1027 |
$customMetrics = [];
|
@@ -1084,10 +817,7 @@ class TVC_Ajax_File extends TVC_Ajax_Calls {
|
|
1084 |
$response_message = wp_remote_retrieve_response_message($request);
|
1085 |
$response_body = json_decode(wp_remote_retrieve_body($request)); */
|
1086 |
|
1087 |
-
|
1088 |
-
// echo "=======";
|
1089 |
-
// print_r($metrResponse);
|
1090 |
-
// exit;
|
1091 |
|
1092 |
|
1093 |
if((isset($dimenResponse->error) && $dimenResponse->error == '' && isset($metrResponse->error) && $metrResponse->error == '')){
|
@@ -1104,12 +834,11 @@ class TVC_Ajax_File extends TVC_Ajax_Calls {
|
|
1104 |
$dimenError = '';
|
1105 |
$message = NULL;
|
1106 |
if($dimenResponse->errors){
|
1107 |
-
|
1108 |
$dimenError = $dimenResponse->errors[0];
|
1109 |
$message = str_replace('this entity', 'dimensions ', $dimenError);
|
1110 |
}
|
1111 |
if($metrResponse->errors){
|
1112 |
-
/* print_r($metrResponse->errors); */
|
1113 |
$metrError = str_replace('this entity', 'metrics ', $metrResponse->errors[0]);
|
1114 |
$message = is_null($message) ? $metrError : $message . ' ' . $metrError;
|
1115 |
}
|
@@ -1211,18 +940,8 @@ class TVC_Ajax_File extends TVC_Ajax_Calls {
|
|
1211 |
return $access_token;
|
1212 |
}
|
1213 |
}
|
1214 |
-
public function woo_country(){
|
1215 |
-
// The country/state
|
1216 |
-
$store_raw_country = get_option('woocommerce_default_country');
|
1217 |
-
// Split the country/state
|
1218 |
-
$split_country = explode(":", $store_raw_country);
|
1219 |
-
return $split_country;
|
1220 |
-
}
|
1221 |
|
1222 |
}
|
1223 |
-
|
1224 |
// End of TVC_Ajax_File_Class
|
1225 |
-
|
1226 |
endif;
|
1227 |
-
|
1228 |
-
$tvcajax_file_class = new TVC_Ajax_File();
|
24 |
add_action('wp_ajax_tvcajax-get-campaign-categories', array($this, 'tvcajax_get_campaign_categories'));
|
25 |
add_action('wp_ajax_tvcajax-update-campaign-status', array($this, 'tvcajax_update_campaign_status'));
|
26 |
add_action('wp_ajax_tvcajax-delete-campaign', array($this, 'tvcajax_delete_campaign'));
|
27 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
add_action('wp_ajax_tvcajax-product-syncup', array($this, 'tvcajax_product_syncup'));
|
29 |
add_action('wp_ajax_tvcajax-gmc-category-lists', array($this, 'tvcajax_get_gmc_categories'));
|
30 |
add_action('wp_ajax_tvcajax-custom-metrics-dimension', array($this, 'tvcajax_custom_metrics_dimension'));
|
31 |
add_action('wp_ajax_tvcajax-store-time-taken', array($this, 'tvcajax_store_time_taken'));
|
32 |
+
|
33 |
add_action('wp_ajax_tvc_call_api_sync', array($this, 'tvc_call_api_sync'));
|
34 |
add_action('wp_ajax_tvc_call_domain_claim', array($this, 'tvc_call_domain_claim'));
|
35 |
add_action('wp_ajax_tvc_call_site_verified', array($this, 'tvc_call_site_verified'));
|
36 |
add_action('wp_ajax_tvc_call_notice_dismiss', array($this, 'tvc_call_notice_dismiss'));
|
37 |
+
add_action('wp_ajax_tvc_call_notification_dismiss', array($this, 'tvc_call_notification_dismiss'));
|
38 |
+
add_action('wp_ajax_tvc_call_active_licence', array($this, 'tvc_call_active_licence'));
|
39 |
+
}
|
40 |
+
//active licence key
|
41 |
+
public function tvc_call_active_licence(){
|
42 |
+
if ( is_admin() ) {
|
43 |
+
$licence_key = isset($_POST['licence_key'])?$_POST['licence_key']:"";
|
44 |
+
$TVC_Admin_Helper = new TVC_Admin_Helper();
|
45 |
+
$subscription_id = $TVC_Admin_Helper->get_subscriptionId();
|
46 |
+
if($subscription_id!="" && $licence_key != ""){
|
47 |
+
$response = $TVC_Admin_Helper->active_licence($licence_key, $subscription_id);
|
48 |
+
|
49 |
+
if($response->error== false){
|
50 |
+
//$key, $html, $title = null, $link = null, $link_title = null, $overwrite= false
|
51 |
+
$TVC_Admin_Helper->add_ee_msg_nofification("active_licence_key", "Your plan is now successfully activated.", "Congratulations!!", "", "", true);
|
52 |
+
$TVC_Admin_Helper->update_subscription_details_api_to_db();
|
53 |
+
echo json_encode(array('error' => false, "is_connect"=>true, 'message' => "The licence key has been activated."));
|
54 |
+
}else{
|
55 |
+
echo json_encode(array('error' => true, "is_connect"=>true, 'message' => $response->message));
|
56 |
+
}
|
57 |
+
}else if($licence_key != ""){
|
58 |
+
$ee_additional_data = $TVC_Admin_Helper->get_ee_additional_data();
|
59 |
+
$ee_additional_data['temp_active_licence_key'] = $licence_key;
|
60 |
+
$TVC_Admin_Helper->set_ee_additional_data($ee_additional_data);
|
61 |
+
echo json_encode(array('error' => true, "is_connect"=>false, 'message' => ""));
|
62 |
+
}else{
|
63 |
+
echo json_encode(array('error' => true, "is_connect"=>false, 'message' => "Licence key is required."));
|
64 |
+
}
|
65 |
+
}
|
66 |
+
exit;
|
67 |
+
}
|
68 |
+
|
69 |
+
public function tvc_call_notification_dismiss(){
|
70 |
+
if($this->safe_ajax_call(filter_input(INPUT_POST, 'TVCNonce'), 'tvc_call_notification_dismiss-nonce')){
|
71 |
+
$ee_dismiss_id = isset($_POST['data']['ee_dismiss_id'])?$_POST['data']['ee_dismiss_id']:"";
|
72 |
+
if($ee_dismiss_id != ""){
|
73 |
+
$TVC_Admin_Helper = new TVC_Admin_Helper();
|
74 |
+
$ee_msg_list = $TVC_Admin_Helper->get_ee_msg_nofification_list();
|
75 |
+
if( isset($ee_msg_list[$ee_dismiss_id]) ){
|
76 |
+
unset($ee_msg_list[$ee_dismiss_id]);
|
77 |
+
$ee_msg_list[$ee_dismiss_id]["active"]=0;
|
78 |
+
$TVC_Admin_Helper->set_ee_msg_nofification_list($ee_msg_list);
|
79 |
+
echo json_encode(array('status' => 'success', 'message' => $ee_additional_data));
|
80 |
+
}
|
81 |
+
|
82 |
+
}
|
83 |
+
}
|
84 |
+
exit;
|
85 |
}
|
86 |
public function tvc_call_notice_dismiss(){
|
87 |
if($this->safe_ajax_call(filter_input(INPUT_POST, 'apiNoticDismissNonce'), 'tvc_call_notice_dismiss-nonce')){
|
99 |
public function tvc_call_api_sync(){
|
100 |
if($this->safe_ajax_call(filter_input(INPUT_POST, 'apiSyncupNonce'), 'tvc_call_api_sync-nonce')){
|
101 |
$TVC_Admin_Helper = new TVC_Admin_Helper();
|
102 |
+
$api_rs = $TVC_Admin_Helper->set_update_api_to_db();
|
103 |
+
if(isset($api_rs['error']) && isset($api_rs['message']) && $api_rs['message']){
|
104 |
+
echo json_encode($api_rs);
|
105 |
+
}else{
|
106 |
+
echo json_encode(array('error' => true, 'message' => "Please try after some time."));
|
107 |
+
}
|
108 |
exit;
|
109 |
}
|
110 |
exit;
|
349 |
exit;
|
350 |
}
|
351 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
352 |
/**
|
353 |
* Returns the campaign categories from a selected country
|
354 |
*/
|
404 |
exit;
|
405 |
}
|
406 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
407 |
/**
|
408 |
* create product batch for product sync up
|
409 |
*/
|
493 |
}
|
494 |
|
495 |
$entries = [];
|
|
|
496 |
if(!empty($mappedCats)){
|
497 |
foreach($mappedCats as $mc_key => $mappedCat){
|
498 |
$all_products = get_posts(array(
|
512 |
foreach($all_products as $postkey => $postvalue){
|
513 |
|
514 |
$postmeta = [];
|
515 |
+
$postmeta = $TVC_Admin_Helper->tvc_get_post_meta($postvalue->ID);
|
516 |
$prd = wc_get_product($postvalue->ID);
|
517 |
$postObj = (object) array_merge((array) $postvalue, (array) $postmeta);
|
518 |
|
555 |
$p_variations = $prd->get_available_variations();
|
556 |
if(!empty($p_variations)){
|
557 |
foreach ($p_variations as $v_key => $v_value) {
|
558 |
+
$postmeta_var = (object)$TVC_Admin_Helper->tvc_get_post_meta($v_value['variation_id']);
|
559 |
$product['title'] = (isset($postObj->$formArray['title']))?$postObj->$formArray['title']:get_the_title($postvalue->ID);
|
560 |
$tvc_temp_desc_key = $formArray['description'];
|
561 |
$product['description'] = (isset($v_value['variation_description']) && $v_value['variation_description'] != "")?$v_value['variation_description']:$postObj->$tvc_temp_desc_key;
|
681 |
'method' => 'insert',
|
682 |
'product' => $product
|
683 |
];
|
|
|
|
|
684 |
$entries[] = $entrie;
|
685 |
}
|
686 |
|
705 |
'body' => wp_json_encode($data)
|
706 |
);
|
707 |
|
708 |
+
$request = wp_remote_post($url, $args);
|
|
|
709 |
|
710 |
// Retrieve information
|
711 |
$response_code = wp_remote_retrieve_response_code($request);
|
712 |
$response_message = wp_remote_retrieve_response_message($request);
|
713 |
$response_body = json_decode(wp_remote_retrieve_body($request));
|
714 |
+
|
|
|
715 |
if((isset($response_body->error) && $response_body->error == '')){
|
716 |
$TVC_Admin_Auto_Product_sync_Helper = new TVC_Admin_Auto_Product_sync_Helper();
|
717 |
$TVC_Admin_Auto_Product_sync_Helper->update_last_sync_in_db();
|
754 |
$subscriptionId = filter_input(INPUT_POST, 'subscriptionId');
|
755 |
$data = filter_input(INPUT_POST, 'data');
|
756 |
parse_str($data, $formArray);
|
757 |
+
// Only for print array
|
758 |
|
759 |
$customDimension = [];
|
760 |
$customMetrics = [];
|
817 |
$response_message = wp_remote_retrieve_response_message($request);
|
818 |
$response_body = json_decode(wp_remote_retrieve_body($request)); */
|
819 |
|
820 |
+
|
|
|
|
|
|
|
821 |
|
822 |
|
823 |
if((isset($dimenResponse->error) && $dimenResponse->error == '' && isset($metrResponse->error) && $metrResponse->error == '')){
|
834 |
$dimenError = '';
|
835 |
$message = NULL;
|
836 |
if($dimenResponse->errors){
|
837 |
+
|
838 |
$dimenError = $dimenResponse->errors[0];
|
839 |
$message = str_replace('this entity', 'dimensions ', $dimenError);
|
840 |
}
|
841 |
if($metrResponse->errors){
|
|
|
842 |
$metrError = str_replace('this entity', 'metrics ', $metrResponse->errors[0]);
|
843 |
$message = is_null($message) ? $metrError : $message . ' ' . $metrError;
|
844 |
}
|
940 |
return $access_token;
|
941 |
}
|
942 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
943 |
|
944 |
}
|
|
|
945 |
// End of TVC_Ajax_File_Class
|
|
|
946 |
endif;
|
947 |
+
$tvcajax_file_class = new TVC_Ajax_File();
|
|
includes/data/class-tvc-feed-crud-handler.php
DELETED
@@ -1,88 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* TVC Feed CRUD Handler class.
|
5 |
-
*
|
6 |
-
* @package TVC Product Feed Manager/Data/Classes
|
7 |
-
* @version 1.0.0
|
8 |
-
*/
|
9 |
-
|
10 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
-
exit;
|
12 |
-
}
|
13 |
-
|
14 |
-
if ( ! class_exists( 'TVC_Feed_CRUD_Handler' ) ) :
|
15 |
-
|
16 |
-
class TVC_Feed_CRUD_Handler {
|
17 |
-
|
18 |
-
/**
|
19 |
-
* @param $feed_data
|
20 |
-
* @param $meta_data_encoded
|
21 |
-
* @param $feed_filter
|
22 |
-
* @return int
|
23 |
-
*/
|
24 |
-
public static function create_or_update_feed_data( $feed_data, $meta_data_encoded, $feed_filter ) {
|
25 |
-
$data_class = new TVC_Data();
|
26 |
-
$queries_class = new TVC_Queries();
|
27 |
-
|
28 |
-
$feed_id = self::get_feed_id_from_feed_data( $feed_data );
|
29 |
-
|
30 |
-
// convert the feed data to a database format
|
31 |
-
$feed_data_to_store = $data_class->convert_ajax_feed_data_to_database_format( $feed_data );
|
32 |
-
$feed_data_types = $data_class->get_types_from_feed_data( $feed_data_to_store, $feed_data );
|
33 |
-
|
34 |
-
// convert country code to country id
|
35 |
-
$feed_data_to_store['country_id'] = $data_class->get_country_id_from_short_code( $feed_data_to_store['country_id'] )->country_id;
|
36 |
-
|
37 |
-
self::add_fixed_data_fields( $feed_data_to_store, $feed_data_types, $feed_id );
|
38 |
-
|
39 |
-
// decode the meta data
|
40 |
-
$meta_data = json_decode( $meta_data_encoded );
|
41 |
-
|
42 |
-
// create or update the feed
|
43 |
-
if ( $feed_id < 0 ) {
|
44 |
-
$actual_feed_id = $queries_class->create_feed( $feed_data_to_store, $feed_data_types );
|
45 |
-
} else {
|
46 |
-
$update_result = $queries_class->update_feed( $feed_id, $feed_data_to_store, $feed_data_types );
|
47 |
-
$actual_feed_id = $update_result ? $feed_id : 0;
|
48 |
-
}
|
49 |
-
|
50 |
-
if ( count( $meta_data ) > 0 ) {
|
51 |
-
$queries_class->update_meta_data( $actual_feed_id, $meta_data );
|
52 |
-
}
|
53 |
-
|
54 |
-
$queries_class->store_feed_filter( $actual_feed_id, $feed_filter );
|
55 |
-
|
56 |
-
return $actual_feed_id;
|
57 |
-
}
|
58 |
-
|
59 |
-
/**
|
60 |
-
* @param $feed_data
|
61 |
-
* @return mixed
|
62 |
-
*/
|
63 |
-
private static function get_feed_id_from_feed_data( $feed_data ) {
|
64 |
-
// use the array_filter to select the feed data element with product_feed_id as name
|
65 |
-
$feed_id_item = array_filter(
|
66 |
-
$feed_data,
|
67 |
-
function( $element ) {
|
68 |
-
return 'product_feed_id' === $element->name;
|
69 |
-
}
|
70 |
-
);
|
71 |
-
// return the feed id
|
72 |
-
return reset( $feed_id_item )->value;
|
73 |
-
}
|
74 |
-
|
75 |
-
/**
|
76 |
-
* @param $feed_data
|
77 |
-
* @param $data_types
|
78 |
-
* @param $feed_id
|
79 |
-
*/
|
80 |
-
private static function add_fixed_data_fields( &$feed_data, &$data_types, $feed_id ) {
|
81 |
-
$feed_data['updated'] = date( 'Y-m-d H:i:s', current_time( 'timestamp' ) );
|
82 |
-
if ( $feed_id < 0 ) {
|
83 |
-
$feed_data['products'] = 0; }
|
84 |
-
array_push( $data_types, '%s', '%d' );
|
85 |
-
}
|
86 |
-
}
|
87 |
-
// end of TVC_Feed_CRUD_Handler class
|
88 |
-
endif;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/data/class-tvc-file.php
DELETED
@@ -1,246 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* TVC Product Feed File Class.
|
4 |
-
*
|
5 |
-
* @package TVC Product Feed Manager/Data/Classes
|
6 |
-
* @version 1.3.1
|
7 |
-
*/
|
8 |
-
|
9 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
10 |
-
exit;
|
11 |
-
}
|
12 |
-
|
13 |
-
if ( ! class_exists( 'TVC_File' ) ) :
|
14 |
-
|
15 |
-
/**
|
16 |
-
* The File Class
|
17 |
-
*/
|
18 |
-
class TVC_File {
|
19 |
-
|
20 |
-
private $_queries;
|
21 |
-
|
22 |
-
public function __construct() {
|
23 |
-
$this->_queries = new TVC_Queries();
|
24 |
-
}
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Reads the correct categories from a channel specific taxonomy text file
|
28 |
-
*
|
29 |
-
* @param int $channel_id
|
30 |
-
* @param string $search_level
|
31 |
-
* @param string $parent_category
|
32 |
-
* @param string $language_code
|
33 |
-
*
|
34 |
-
* @return array|string containing the categories
|
35 |
-
*/
|
36 |
-
public function get_categories_for_list( $channel_id, $search_level, $parent_category, $language_code ) {
|
37 |
-
$channel_class = new TVC_Channel();
|
38 |
-
|
39 |
-
$last_cat = '';
|
40 |
-
$categories = array();
|
41 |
-
$channel_name = $channel_class->get_channel_short_name( $channel_id );
|
42 |
-
|
43 |
-
$path = TVC_CHANNEL_DATA_DIR . "/$channel_name/taxonomy.$language_code.txt";
|
44 |
-
|
45 |
-
if ( file_exists( $path ) ) {
|
46 |
-
$file = fopen( $path, 'r' )
|
47 |
-
or die( esc_html__( 'Unable to open the file containing the categories', 'tvc-product-feed-manager' ) );
|
48 |
-
|
49 |
-
// step over the first lines that do not contain categories
|
50 |
-
while ( strpos( fgets( $file ), '#' ) ) {
|
51 |
-
continue;
|
52 |
-
}
|
53 |
-
|
54 |
-
// step through all the lines in the file
|
55 |
-
while ( ! feof( $file ) ) {
|
56 |
-
// get the line
|
57 |
-
$line = trim( fgets( $file ) );
|
58 |
-
|
59 |
-
// split the line into pieces using the > separator
|
60 |
-
$category_line_array = explode( '>', $line );
|
61 |
-
|
62 |
-
if ( 0 === $search_level ) {
|
63 |
-
if ( trim( $category_line_array [ $search_level ] ) !== $last_cat ) {
|
64 |
-
array_push( $categories, trim( $category_line_array [ $search_level ] ) );
|
65 |
-
$last_cat = trim( $category_line_array [ $search_level ] );
|
66 |
-
}
|
67 |
-
} elseif ( count( $category_line_array ) > $search_level && $search_level > 0 && trim( $category_line_array [ $search_level - 1 ] ) === trim( $parent_category ) ) {
|
68 |
-
if ( trim( $category_line_array [ $search_level ] ) !== $last_cat ) {
|
69 |
-
array_push( $categories, trim( $category_line_array [ $search_level ] ) );
|
70 |
-
$last_cat = trim( $category_line_array [ $search_level ] );
|
71 |
-
}
|
72 |
-
}
|
73 |
-
}
|
74 |
-
|
75 |
-
// don't forget to free the resources
|
76 |
-
fclose( $file );
|
77 |
-
}
|
78 |
-
|
79 |
-
return $categories;
|
80 |
-
}
|
81 |
-
|
82 |
-
public function get_output_fields_for_specific_channel( $channel ) {
|
83 |
-
$fields = array();
|
84 |
-
|
85 |
-
$path = TVC_CHANNEL_DATA_DIR . "/$channel/$channel.txt";
|
86 |
-
|
87 |
-
if ( file_exists( $path ) ) {
|
88 |
-
$file = fopen( $path, 'r' )
|
89 |
-
or die( esc_html__( 'Unable to open the file containing the categories', 'tvc-product-feed-manager' ) );
|
90 |
-
|
91 |
-
// step through all the lines in the file
|
92 |
-
while ( ! feof( $file ) ) {
|
93 |
-
$field_object = new stdClass();
|
94 |
-
|
95 |
-
// get the line
|
96 |
-
$line = fgetcsv( $file, 0, "\t" );
|
97 |
-
|
98 |
-
if ( is_array( $line ) && ! empty( $line[0] ) ) {
|
99 |
-
$field_object->field_id = $line[0];
|
100 |
-
$field_object->category_id = $line[1];
|
101 |
-
$field_object->field_label = $line[2];
|
102 |
-
|
103 |
-
array_push( $fields, $field_object );
|
104 |
-
}
|
105 |
-
}
|
106 |
-
}
|
107 |
-
|
108 |
-
return $fields;
|
109 |
-
}
|
110 |
-
|
111 |
-
/**
|
112 |
-
* Check the standard backup folder and return the .sql file names in it
|
113 |
-
*
|
114 |
-
* @return array
|
115 |
-
*/
|
116 |
-
public function make_list_of_active_backups() {
|
117 |
-
$backups = array();
|
118 |
-
|
119 |
-
$path = TVC_BACKUP_DIR;
|
120 |
-
|
121 |
-
foreach ( glob( $path . '/*.sql' ) as $file ) {
|
122 |
-
$feed = fopen( $file, 'r' );
|
123 |
-
$line = fgets( $feed );
|
124 |
-
fclose( $feed );
|
125 |
-
|
126 |
-
$file_name = str_replace( TVC_BACKUP_DIR . '/', '', $file );
|
127 |
-
$date_string = strtok( $line, '#' );
|
128 |
-
$file_date = strlen( $date_string ) < 15 ? date( 'Y-m-d H:i:s', $date_string ) : 'unknown';
|
129 |
-
|
130 |
-
array_push( $backups, $file_name . '&&' . $file_date );
|
131 |
-
}
|
132 |
-
|
133 |
-
return $backups;
|
134 |
-
}
|
135 |
-
|
136 |
-
public function write_full_backup_file( $backup_file, $backup_string ) {
|
137 |
-
if ( is_writable( TVC_BACKUP_DIR ) ) {
|
138 |
-
$feed = fopen( $backup_file, 'w' );
|
139 |
-
} else {
|
140 |
-
/* translators: %s: Folder that holds the backup files */
|
141 |
-
return sprintf( esc_html__( '1432 - %s is not a writable folder. Make sure you have admin rights to this folder.', 'tvc-product-feed-manager' ), TVC_BACKUP_DIR );
|
142 |
-
}
|
143 |
-
|
144 |
-
if ( false !== $feed ) {
|
145 |
-
fwrite( $feed, $backup_string );
|
146 |
-
fclose( $feed );
|
147 |
-
|
148 |
-
return true;
|
149 |
-
} else {
|
150 |
-
/* translators: %s: Selected backup file */
|
151 |
-
return sprintf( esc_html__( '1433 - Could not write the %s file.', 'tvc-product-feed-manager' ), $backup_file );
|
152 |
-
}
|
153 |
-
}
|
154 |
-
|
155 |
-
public function get_installed_channels_from_file() {
|
156 |
-
$active_channels = array();
|
157 |
-
|
158 |
-
if ( file_exists( TVC_CHANNEL_DATA_DIR ) ) {
|
159 |
-
$dir_iterator = new RecursiveDirectoryIterator( TVC_CHANNEL_DATA_DIR );
|
160 |
-
$iterator = new RecursiveIteratorIterator( $dir_iterator, RecursiveIteratorIterator::SELF_FIRST );
|
161 |
-
|
162 |
-
foreach ( $iterator as $folder ) {
|
163 |
-
if ( $folder->isDir() && $folder->getFilename() !== '.' & $folder->getFilename() !== '..' ) {
|
164 |
-
array_push( $active_channels, $folder->getBaseName() );
|
165 |
-
}
|
166 |
-
}
|
167 |
-
}
|
168 |
-
|
169 |
-
return $active_channels;
|
170 |
-
}
|
171 |
-
|
172 |
-
/**
|
173 |
-
* Takes the installed channel .zip file and unzips it in the channels folder
|
174 |
-
*
|
175 |
-
* @param string $channel_name
|
176 |
-
*
|
177 |
-
* @return bool false if installing the channel failed
|
178 |
-
*/
|
179 |
-
public function unzip_channel_file( $channel_name ) {
|
180 |
-
if ( ! file_exists( TVC_CHANNEL_DATA_DIR ) ) {
|
181 |
-
TVC_Folders::make_channels_support_folder();
|
182 |
-
}
|
183 |
-
|
184 |
-
WP_Filesystem();
|
185 |
-
|
186 |
-
$zip_file = TVC_CHANNEL_DATA_DIR . '/' . $channel_name . '.zip';
|
187 |
-
$destination_path = TVC_CHANNEL_DATA_DIR . '/';
|
188 |
-
|
189 |
-
if ( ! file_exists( $zip_file ) ) {
|
190 |
-
tvc_write_log_file( sprintf( 'Failed installing the Channel %s. Could not download the .zip file from the server.', $channel_name ) );
|
191 |
-
|
192 |
-
return false;
|
193 |
-
}
|
194 |
-
|
195 |
-
$unzip_result = unzip_file( $zip_file, $destination_path );
|
196 |
-
|
197 |
-
if ( is_wp_error( $unzip_result ) ) {
|
198 |
-
tvc_handle_wp_errors_response( $unzip_result, sprintf( 'The installation of channel %s failed. Unable to unpack the channel file in folder %s.', $channel_name, TVC_CHANNEL_DATA_DIR ) );
|
199 |
-
}
|
200 |
-
|
201 |
-
unlink( $zip_file ); // clean up the zip file
|
202 |
-
|
203 |
-
return true;
|
204 |
-
}
|
205 |
-
|
206 |
-
/**
|
207 |
-
* @param $channel_short_name
|
208 |
-
*/
|
209 |
-
public function delete_channel_source_files( $channel_short_name ) {
|
210 |
-
$channel_folder = TVC_CHANNEL_DATA_DIR . '/' . $channel_short_name;
|
211 |
-
|
212 |
-
if ( file_exists( $channel_folder ) && is_dir( $channel_folder ) ) {
|
213 |
-
// remove the channel definition files
|
214 |
-
TVC_Folders::delete_folder( $channel_folder );
|
215 |
-
}
|
216 |
-
|
217 |
-
if ( 'google' === $channel_short_name ) {
|
218 |
-
$free_version_google_folder = ENHANCAD_PLUGIN_DIR . 'includes/application/google';
|
219 |
-
|
220 |
-
if ( file_exists( $free_version_google_folder ) && is_dir( $free_version_google_folder ) ) {
|
221 |
-
TVC_Folders::delete_folder( $free_version_google_folder );
|
222 |
-
}
|
223 |
-
}
|
224 |
-
}
|
225 |
-
|
226 |
-
/**
|
227 |
-
* @param $channel_id
|
228 |
-
*/
|
229 |
-
public function delete_channel_feed_files( $channel_id ) {
|
230 |
-
$feeds = $this->_queries->get_feeds_from_specific_channel( $channel_id );
|
231 |
-
|
232 |
-
foreach ( $feeds as $feed_id ) {
|
233 |
-
$file_url = $this->_queries->get_file_url_from_feed( $feed_id['product_feed_id'] );
|
234 |
-
$file_name = basename( $file_url );
|
235 |
-
$file_path = TVC_FEEDS_DIR . '/' . $file_name;
|
236 |
-
|
237 |
-
if ( file_exists( $file_path ) ) {
|
238 |
-
unlink( $file_path );
|
239 |
-
}
|
240 |
-
}
|
241 |
-
}
|
242 |
-
}
|
243 |
-
|
244 |
-
// end of TVC_File_Class
|
245 |
-
|
246 |
-
endif;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/data/class-tvc-queries.php
DELETED
@@ -1,972 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* TVC Queries Class.
|
5 |
-
*
|
6 |
-
* @package TVC Product Feed Manager/Data/Classes
|
7 |
-
* @version 4.11.0
|
8 |
-
*/
|
9 |
-
|
10 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
-
exit;
|
12 |
-
}
|
13 |
-
|
14 |
-
if ( ! class_exists( 'TVC_Queries' ) ) :
|
15 |
-
|
16 |
-
/**
|
17 |
-
* WP Queries Class
|
18 |
-
*/
|
19 |
-
class TVC_Queries {
|
20 |
-
|
21 |
-
private $_wpdb;
|
22 |
-
|
23 |
-
/**
|
24 |
-
* @var string placeholder containing the wp table prefix
|
25 |
-
*/
|
26 |
-
private $_table_prefix;
|
27 |
-
|
28 |
-
/**
|
29 |
-
* TVC_Queries Constructor
|
30 |
-
*/
|
31 |
-
public function __construct() {
|
32 |
-
// get global WordPress database functions
|
33 |
-
global $wpdb;
|
34 |
-
|
35 |
-
// assign the global wpdb to a variable
|
36 |
-
$this->_wpdb = &$wpdb;
|
37 |
-
|
38 |
-
// assign the wp table prefix to a variable
|
39 |
-
$this->_table_prefix = $this->_wpdb->prefix;
|
40 |
-
}
|
41 |
-
|
42 |
-
public function get_feeds_list() {
|
43 |
-
// filter out all non product feeds when no special feed add-on plugin is active
|
44 |
-
$feed_type_filter = ! apply_filters( 'tvc_special_feeds_add_on_active', false ) ? " WHERE p.feed_type_id = '1'" : '';
|
45 |
-
|
46 |
-
return $this->_wpdb->get_results(
|
47 |
-
"SELECT p.product_feed_id, p.title, p.url, p.updated, p.feed_type_id, p.products, s.status AS status, s.color AS color FROM {$this->_table_prefix}feedmanager_product_feed AS p
|
48 |
-
INNER JOIN {$this->_table_prefix}feedmanager_feed_status AS s on p.status_id = s.status_id{$feed_type_filter}"
|
49 |
-
);
|
50 |
-
}
|
51 |
-
|
52 |
-
public function get_all_feed_names() {
|
53 |
-
return $this->_wpdb->get_results( "SELECT title FROM {$this->_table_prefix}feedmanager_product_feed" );
|
54 |
-
}
|
55 |
-
|
56 |
-
public function get_feed_row( $feed_id ) {
|
57 |
-
return $this->_wpdb->get_row( "SELECT * FROM {$this->_table_prefix}feedmanager_product_feed WHERE product_feed_id = {$feed_id}" );
|
58 |
-
}
|
59 |
-
|
60 |
-
/**
|
61 |
-
* Get a list of all existing countries
|
62 |
-
*
|
63 |
-
* @return array|object|null of the query
|
64 |
-
*/
|
65 |
-
public function read_countries() {
|
66 |
-
return $this->_wpdb->get_results( "SELECT name_short, name FROM {$this->_table_prefix}feedmanager_country ORDER BY name", ARRAY_A );
|
67 |
-
}
|
68 |
-
|
69 |
-
public function get_feedmanager_channel_table() {
|
70 |
-
return $this->_wpdb->get_results( "SELECT * FROM {$this->_table_prefix}feedmanager_channel", ARRAY_A );
|
71 |
-
}
|
72 |
-
|
73 |
-
public function get_feedmanager_product_feed_table() {
|
74 |
-
return $this->_wpdb->get_results( "SELECT * FROM {$this->_table_prefix}feedmanager_product_feed", ARRAY_A );
|
75 |
-
}
|
76 |
-
|
77 |
-
public function get_feedmanager_product_feedmeta_table() {
|
78 |
-
return $this->_wpdb->get_results( "SELECT * FROM {$this->_table_prefix}feedmanager_product_feedmeta", ARRAY_A );
|
79 |
-
}
|
80 |
-
|
81 |
-
public function get_feed_type_id( $feed_id ) {
|
82 |
-
return $this->_wpdb->get_var( "SELECT feed_type_id FROM {$this->_table_prefix}feedmanager_product_feed WHERE product_feed_id = '{$feed_id}'" );
|
83 |
-
}
|
84 |
-
|
85 |
-
public function read_channels() {
|
86 |
-
$google = array( 'channel_id' => '1', 'name' => 'Google Merchant Centre', 'short' => 'google' );
|
87 |
-
return array( $google );
|
88 |
-
}
|
89 |
-
public function get_set_merchant_id(){
|
90 |
-
return $this->_wpdb->get_var( "SELECT * FROM {$this->_table_prefix}feedmanager_default_center WHERE status = 1" );
|
91 |
-
}
|
92 |
-
|
93 |
-
public function get_merchant_info(){
|
94 |
-
return $this->_wpdb->get_row( "SELECT * FROM {$this->_table_prefix}feedmanager_default_center WHERE status = 1");
|
95 |
-
}
|
96 |
-
|
97 |
-
public function get_set_ads_account_id($merchantId = ''){
|
98 |
-
if($merchantId == '') {
|
99 |
-
return $this->_wpdb->get_var( "SELECT * FROM {$this->_table_prefix}adsmanager_default_center WHERE status = 1" );
|
100 |
-
} else {
|
101 |
-
return $this->_wpdb->get_var( "SELECT * FROM {$this->_table_prefix}adsmanager_default_center WHERE status = 1 AND merchant_id = {$merchantId}" );
|
102 |
-
}
|
103 |
-
|
104 |
-
}
|
105 |
-
|
106 |
-
public function get_merchant_center_linked_flag($adsId = '') {
|
107 |
-
return $this->_wpdb->get_row( "SELECT * FROM {$this->_table_prefix}adsmanager_default_center WHERE status = 1 AND merchant_center_linked = 1 AND account_id = {$adsId}" );
|
108 |
-
}
|
109 |
-
|
110 |
-
public function get_claim(){
|
111 |
-
return $this->_wpdb->get_var( "SELECT * FROM {$this->_table_prefix}feedmanager_default_center WHERE claim = 1" );
|
112 |
-
}
|
113 |
-
|
114 |
-
/**
|
115 |
-
* @param $channel_short_name
|
116 |
-
* @param $channel_id
|
117 |
-
* @param $channel_name
|
118 |
-
* @return bool|int
|
119 |
-
*/
|
120 |
-
public function register_a_channel( $channel_short_name, $channel_id, $channel_name ) {
|
121 |
-
return $this->_wpdb->query(
|
122 |
-
$this->_wpdb->prepare(
|
123 |
-
"INSERT INTO {$this->_table_prefix}feedmanager_channel (channel_id, name, short) VALUES
|
124 |
-
( %d, '%s', '%s' )",
|
125 |
-
$channel_id,
|
126 |
-
$channel_name,
|
127 |
-
$channel_short_name
|
128 |
-
)
|
129 |
-
);
|
130 |
-
}
|
131 |
-
|
132 |
-
/**
|
133 |
-
* @param $channel_short_name
|
134 |
-
* @return string|null
|
135 |
-
*/
|
136 |
-
public function get_channel_id( $channel_short_name ) {
|
137 |
-
return $this->_wpdb->get_var( "SELECT channel_id FROM {$this->_table_prefix}feedmanager_channel WHERE short = '{$channel_short_name}'" );
|
138 |
-
}
|
139 |
-
|
140 |
-
/**
|
141 |
-
* @param $channel_id
|
142 |
-
* @return bool|string|null
|
143 |
-
*/
|
144 |
-
public function get_channel_short_name_from_db( $channel_id ) {
|
145 |
-
if ( 'undefined' !== $channel_id ) { // make sure the selected channel is installed
|
146 |
-
return $this->_wpdb->get_var( "SELECT short FROM {$this->_table_prefix}feedmanager_channel WHERE channel_id = {$channel_id}" );
|
147 |
-
} else {
|
148 |
-
return false;
|
149 |
-
}
|
150 |
-
}
|
151 |
-
|
152 |
-
/**
|
153 |
-
* @param $channel_short
|
154 |
-
* @return false|int
|
155 |
-
*/
|
156 |
-
public function remove_channel_from_db( $channel_short ) {
|
157 |
-
$main_table = $this->_table_prefix . 'feedmanager_channel';
|
158 |
-
|
159 |
-
return $this->_wpdb->delete( $main_table, array( 'short' => $channel_short ) );
|
160 |
-
}
|
161 |
-
|
162 |
-
/**
|
163 |
-
* @return bool|int
|
164 |
-
*/
|
165 |
-
public function clean_channel_table() {
|
166 |
-
return $this->_wpdb->query(
|
167 |
-
$this->_wpdb->prepare(
|
168 |
-
"DELETE FROM {$this->_table_prefix}feedmanager_channel WHERE channel_id = %d OR name = %s",
|
169 |
-
0,
|
170 |
-
''
|
171 |
-
)
|
172 |
-
);
|
173 |
-
}
|
174 |
-
|
175 |
-
public function read_active_schedule_data() {
|
176 |
-
return $this->_wpdb->get_results( "SELECT product_feed_id, updated, schedule FROM {$this->_table_prefix}feedmanager_product_feed WHERE status_id=1", ARRAY_A );
|
177 |
-
}
|
178 |
-
|
179 |
-
public function read_failed_feeds() {
|
180 |
-
return $this->_wpdb->get_results( "SELECT product_feed_id, updated, schedule FROM {$this->_table_prefix}feedmanager_product_feed WHERE status_id=5 OR status_id=6", ARRAY_A );
|
181 |
-
}
|
182 |
-
|
183 |
-
public function read_sources() {
|
184 |
-
return $this->_wpdb->get_results( "SELECT source_id, name FROM {$this->_table_prefix}feedmanager_source ORDER BY name", ARRAY_A );
|
185 |
-
}
|
186 |
-
|
187 |
-
public function get_feeds_from_specific_channel( $channel_id ) {
|
188 |
-
return $this->_wpdb->get_results( "SELECT product_feed_id FROM {$this->_table_prefix}feedmanager_product_feed WHERE channel_id = {$channel_id}", ARRAY_A );
|
189 |
-
}
|
190 |
-
|
191 |
-
/**
|
192 |
-
* @param $feed_id
|
193 |
-
* @return array|object|null
|
194 |
-
*/
|
195 |
-
public function get_meta_parents( $feed_id ) {
|
196 |
-
return $this->_wpdb->get_results( "SELECT ID FROM {$this->_table_prefix}posts WHERE post_parent = {$feed_id}", ARRAY_A );
|
197 |
-
}
|
198 |
-
|
199 |
-
/**
|
200 |
-
* @param $feed_id
|
201 |
-
* @return array|object|null
|
202 |
-
*/
|
203 |
-
public function read_feed( $feed_id ) {
|
204 |
-
$result = $this->_wpdb->get_results(
|
205 |
-
"SELECT p.product_feed_id, p.source_id AS source, p.title, p.feed_title, p.feed_description, p.main_category, "
|
206 |
-
. "p.url, p.include_variations, p.is_aggregator, p.status_id, p.base_status_id, p.updated, p.products, p.feed_type_id, p.schedule, c.name_short "
|
207 |
-
. "AS country, m.channel_id AS channel, p.language "
|
208 |
-
. "FROM {$this->_table_prefix}feedmanager_product_feed AS p "
|
209 |
-
. "INNER JOIN {$this->_table_prefix}feedmanager_country AS c ON p.country_id = c.country_id "
|
210 |
-
. "INNER JOIN {$this->_table_prefix}feedmanager_channel AS m ON p.channel_id = m.channel_id "
|
211 |
-
. "WHERE p.product_feed_id = {$feed_id}",
|
212 |
-
ARRAY_A
|
213 |
-
);
|
214 |
-
|
215 |
-
$category_mapping = $this->read_category_mapping( $feed_id );
|
216 |
-
|
217 |
-
if ( isset( $category_mapping[0]['meta_value'] ) && $category_mapping[0]['meta_value'] !== '' ) {
|
218 |
-
$result[0]['category_mapping'] = $category_mapping[0]['meta_value'];
|
219 |
-
} else {
|
220 |
-
$result[0]['category_mapping'] = '';
|
221 |
-
}
|
222 |
-
|
223 |
-
return $result;
|
224 |
-
}
|
225 |
-
|
226 |
-
/**
|
227 |
-
* @param $feed_id
|
228 |
-
* @return array|object|null
|
229 |
-
*/
|
230 |
-
public function read_category_mapping( $feed_id ) {
|
231 |
-
return $this->_wpdb->get_results( "SELECT meta_value FROM {$this->_table_prefix}feedmanager_product_feedmeta WHERE product_feed_id = {$feed_id} AND meta_key = 'category_mapping'", ARRAY_A );
|
232 |
-
}
|
233 |
-
|
234 |
-
/**
|
235 |
-
* @param $feed_id
|
236 |
-
* @return |null
|
237 |
-
*/
|
238 |
-
public function get_feed_status_data( $feed_id ) {
|
239 |
-
$status = $this->_wpdb->get_results(
|
240 |
-
"SELECT product_feed_id, channel_id, title, url, status_id, products, feed_type_id "
|
241 |
-
. "FROM {$this->_table_prefix}feedmanager_product_feed "
|
242 |
-
. "WHERE product_feed_id = '{$feed_id}'",
|
243 |
-
ARRAY_A
|
244 |
-
);
|
245 |
-
|
246 |
-
return $status ? $status[0] : null;
|
247 |
-
}
|
248 |
-
|
249 |
-
/**
|
250 |
-
* Returns the post ids that belong to the selected categories
|
251 |
-
*
|
252 |
-
* @param string $category_string A string that contains the selected categories.
|
253 |
-
* @param bool $with_variation True if product variations should be included in the feed. Default false.
|
254 |
-
*
|
255 |
-
* @return array
|
256 |
-
*/
|
257 |
-
public function get_post_ids( $category_string, $with_variation = false ) {
|
258 |
-
// If the user has not selected a category, return an empty array.
|
259 |
-
if ( empty( $category_string ) ) {
|
260 |
-
return array();
|
261 |
-
}
|
262 |
-
|
263 |
-
$start_product_id = get_transient( 'tvc_start_product_id' ) ? get_transient( 'tvc_start_product_id' ) : -1;
|
264 |
-
|
265 |
-
// Limit the number of products per query to 1000 to prevent a result that is to large to handle by the server.
|
266 |
-
// When the limit is reached a next batch will be requested by the fill_the_background_queue function.
|
267 |
-
// @since 2.11.0
|
268 |
-
$product_query_limit = apply_filters( 'tvc_product_query_limit', 1000 );
|
269 |
-
|
270 |
-
$products_query = "SELECT DISTINCT {$this->_table_prefix}posts.ID
|
271 |
-
FROM {$this->_table_prefix}posts
|
272 |
-
LEFT JOIN {$this->_table_prefix}term_relationships ON ({$this->_table_prefix}posts.ID = {$this->_table_prefix}term_relationships.object_id)
|
273 |
-
LEFT JOIN {$this->_table_prefix}term_taxonomy ON ({$this->_table_prefix}term_relationships.term_taxonomy_id = {$this->_table_prefix}term_taxonomy.term_taxonomy_id)
|
274 |
-
WHERE {$this->_table_prefix}posts.post_type = 'product' AND {$this->_table_prefix}posts.post_status = 'publish'
|
275 |
-
AND {$this->_table_prefix}term_taxonomy.term_id IN ($category_string)
|
276 |
-
AND {$this->_table_prefix}posts.ID > $start_product_id
|
277 |
-
ORDER BY ID LIMIT $product_query_limit";
|
278 |
-
|
279 |
-
// Get all main product ids (simple and variable, but not the variations).
|
280 |
-
$main_products_ids = $this->_wpdb->get_col( $products_query );
|
281 |
-
|
282 |
-
set_transient( 'tvc_start_product_id', end( $main_products_ids ), TVC_TRANSIENT_LIVE );
|
283 |
-
|
284 |
-
// if variations should not be included return the main product ids
|
285 |
-
if ( ! $with_variation || empty( $main_products_ids ) ) {
|
286 |
-
return $main_products_ids;
|
287 |
-
}
|
288 |
-
|
289 |
-
// Put the main ids in a string so it can be attached to a query string.
|
290 |
-
$main_products_ids_string = implode( ', ', $main_products_ids );
|
291 |
-
|
292 |
-
$variation_products_query = "SELECT DISTINCT post_parent FROM {$this->_table_prefix}posts
|
293 |
-
WHERE {$this->_table_prefix}posts.post_parent IN ( {$main_products_ids_string} )
|
294 |
-
AND {$this->_table_prefix}posts.post_type = 'product_variation'
|
295 |
-
AND {$this->_table_prefix}posts.post_status = 'publish'
|
296 |
-
ORDER BY ID";
|
297 |
-
|
298 |
-
// Get the ids of the variable products.
|
299 |
-
$variation_products = $this->_wpdb->get_col( $variation_products_query );
|
300 |
-
|
301 |
-
// If there are no variations, return the main product ids.
|
302 |
-
if ( count( $variation_products ) < 1 ) {
|
303 |
-
return $main_products_ids;
|
304 |
-
}
|
305 |
-
|
306 |
-
$variation_products_ids_string = implode( ', ', $variation_products );
|
307 |
-
|
308 |
-
// Remove the main product ids of products that have a valid variable version from the list to keep only the ids of the simple products.
|
309 |
-
$simple_products_ids = array_diff( $main_products_ids, $variation_products );
|
310 |
-
|
311 |
-
$product_variations_query = "SELECT DISTINCT ID FROM {$this->_table_prefix}posts
|
312 |
-
WHERE {$this->_table_prefix}posts.post_parent IN ( {$variation_products_ids_string} )
|
313 |
-
AND {$this->_table_prefix}posts.post_type = 'product_variation'
|
314 |
-
AND {$this->_table_prefix}posts.post_status = 'publish'
|
315 |
-
ORDER BY ID";
|
316 |
-
|
317 |
-
// Now get the variations.
|
318 |
-
$product_variations_ids = $this->_wpdb->get_col( $product_variations_query );
|
319 |
-
|
320 |
-
// Combine the variable product ids with the remaining simple product ids.
|
321 |
-
$all_product_ids = array_merge( $simple_products_ids, $product_variations_ids );
|
322 |
-
asort( $all_product_ids );
|
323 |
-
|
324 |
-
return $all_product_ids;
|
325 |
-
}
|
326 |
-
|
327 |
-
/**
|
328 |
-
* Gets the required data from the main
|
329 |
-
*
|
330 |
-
* @param string $post_id
|
331 |
-
* @param string $column_string
|
332 |
-
*
|
333 |
-
* @return array|object|null
|
334 |
-
*/
|
335 |
-
public function read_post_data( $post_id, $column_string ) {
|
336 |
-
$selecting_columns = $column_string ? ', ' . $column_string : '';
|
337 |
-
|
338 |
-
$result = $this->_wpdb->get_results(
|
339 |
-
"SELECT DISTINCT ID $selecting_columns
|
340 |
-
FROM {$this->_table_prefix}posts
|
341 |
-
WHERE ID = $post_id"
|
342 |
-
);
|
343 |
-
|
344 |
-
return $result ? $result[0] : null;
|
345 |
-
}
|
346 |
-
|
347 |
-
/**
|
348 |
-
* returns the lowest product id belonging to one or more categories
|
349 |
-
*
|
350 |
-
* @param string $category_string
|
351 |
-
*
|
352 |
-
* @return string
|
353 |
-
*/
|
354 |
-
public function get_lowest_product_id( $category_string ) {
|
355 |
-
$main_table = $this->_table_prefix . 'posts';
|
356 |
-
$term_relationships_table = $this->_table_prefix . 'term_relationships';
|
357 |
-
$term_taxonomy_table = $this->_table_prefix . 'term_taxonomy';
|
358 |
-
|
359 |
-
$result = $this->_wpdb->get_results(
|
360 |
-
"SELECT MIN(ID) FROM $main_table
|
361 |
-
LEFT JOIN $term_relationships_table ON ($main_table.ID = $term_relationships_table.object_id)
|
362 |
-
LEFT JOIN $term_taxonomy_table ON ($term_relationships_table.term_taxonomy_id = $term_taxonomy_table.term_taxonomy_id)
|
363 |
-
WHERE $main_table.post_type = 'product' AND $main_table.post_status = 'publish'
|
364 |
-
AND $term_taxonomy_table.term_id IN ($category_string)",
|
365 |
-
ARRAY_A
|
366 |
-
);
|
367 |
-
|
368 |
-
return $result ? $result[0]['MIN(ID)'] : 0;
|
369 |
-
}
|
370 |
-
|
371 |
-
|
372 |
-
/**
|
373 |
-
* returns the highest product id belonging to one or more categories
|
374 |
-
*
|
375 |
-
* @param string $category_string
|
376 |
-
*
|
377 |
-
* @return string
|
378 |
-
*/
|
379 |
-
public function get_highest_product_id( $category_string ) {
|
380 |
-
$main_table = $this->_table_prefix . 'posts';
|
381 |
-
$term_relationships_table = $this->_table_prefix . 'term_relationships';
|
382 |
-
$term_taxonomy_table = $this->_table_prefix . 'term_taxonomy';
|
383 |
-
|
384 |
-
$result = $this->_wpdb->get_results(
|
385 |
-
"SELECT MAX(ID) FROM $main_table
|
386 |
-
LEFT JOIN $term_relationships_table ON ($main_table.ID = $term_relationships_table.object_id)
|
387 |
-
LEFT JOIN $term_taxonomy_table ON ($term_relationships_table.term_taxonomy_id = $term_taxonomy_table.term_taxonomy_id)
|
388 |
-
WHERE $main_table.post_type = 'product' AND $main_table.post_status = 'publish'
|
389 |
-
AND $term_taxonomy_table.term_id IN ($category_string)",
|
390 |
-
ARRAY_A
|
391 |
-
);
|
392 |
-
|
393 |
-
return $result ? $result[0]['MAX(ID)'] : 0;
|
394 |
-
}
|
395 |
-
|
396 |
-
/**
|
397 |
-
* @param $product_id
|
398 |
-
* @param $parent_product_id
|
399 |
-
* @param $record_ids
|
400 |
-
* @param $meta_columns
|
401 |
-
* @return array
|
402 |
-
*/
|
403 |
-
public function read_meta_data( $product_id, $parent_product_id, $record_ids, $meta_columns ) {
|
404 |
-
$data = array();
|
405 |
-
|
406 |
-
foreach ( $meta_columns as $column ) {
|
407 |
-
$taxonomy = get_taxonomy( $column );
|
408 |
-
|
409 |
-
if ( $taxonomy ) {
|
410 |
-
|
411 |
-
$taxonomy_value = TVC_Taxonomies::make_shop_taxonomies_string( $product_id, $taxonomy->name, ', ' );
|
412 |
-
|
413 |
-
if ( ! $taxonomy_value ) {
|
414 |
-
$taxonomy_value = TVC_Taxonomies::make_shop_taxonomies_string( $parent_product_id, $taxonomy->name, ', ' );
|
415 |
-
}
|
416 |
-
|
417 |
-
if ( $taxonomy_value ) {
|
418 |
-
array_push( $data, $this->make_meta_object( $column, $taxonomy_value, $product_id ) );
|
419 |
-
}
|
420 |
-
}
|
421 |
-
|
422 |
-
foreach ( $record_ids as $rec_id ) {
|
423 |
-
$value = get_post_meta( $rec_id, $column, true );
|
424 |
-
|
425 |
-
if ( $value || '0' === $value ) {
|
426 |
-
array_push( $data, $this->make_meta_object( $column, $value, $rec_id ) );
|
427 |
-
break;
|
428 |
-
} else {
|
429 |
-
$alt_val = maybe_unserialize( get_post_meta( $rec_id, '_product_attributes', true ) );
|
430 |
-
$col_name = str_replace( ' ', '-', strtolower( $column ) );
|
431 |
-
if ( $alt_val && isset( $alt_val[ $col_name ] ) ) {
|
432 |
-
array_push( $data, $this->make_meta_object( $column, $alt_val[ $col_name ]['value'], $rec_id ) );
|
433 |
-
} elseif ( $alt_val && is_array( $alt_val ) ) {
|
434 |
-
foreach ( $alt_val as $v ) {
|
435 |
-
if ( $v['name'] === $column ) {
|
436 |
-
array_push( $data, $this->make_meta_object( $column, $v['value'], $rec_id ) );
|
437 |
-
}
|
438 |
-
}
|
439 |
-
}
|
440 |
-
}
|
441 |
-
}
|
442 |
-
}
|
443 |
-
|
444 |
-
$this->polish_data( $data, $product_id );
|
445 |
-
|
446 |
-
return $data;
|
447 |
-
}
|
448 |
-
|
449 |
-
/**
|
450 |
-
* @param $key
|
451 |
-
* @param $value
|
452 |
-
* @param $id
|
453 |
-
* @return stdClass
|
454 |
-
*/
|
455 |
-
private function make_meta_object( $key, $value, $id ) {
|
456 |
-
$obj = new stdClass();
|
457 |
-
$obj->meta_key = $key;
|
458 |
-
$obj->meta_value = $value;
|
459 |
-
$obj->post_id = $id;
|
460 |
-
|
461 |
-
return $obj;
|
462 |
-
}
|
463 |
-
|
464 |
-
/**
|
465 |
-
* @param $data
|
466 |
-
* @param $main_post_id
|
467 |
-
*/
|
468 |
-
private function polish_data( &$data, $main_post_id ) {
|
469 |
-
$site_url = get_option( 'siteurl' );
|
470 |
-
|
471 |
-
foreach ( $data as $row ) {
|
472 |
-
// make sure the _wp_attached_file data contains a valid url
|
473 |
-
if ( '_wp_attached_file' === $row->meta_key ) {
|
474 |
-
$row->meta_value = $this->get_post_thumbnail_url( $main_post_id, 'large' );
|
475 |
-
|
476 |
-
// if the _wp_attached_file data is not a valid url than add the url data
|
477 |
-
if ( ! filter_var( $row->meta_value, FILTER_VALIDATE_URL ) ) {
|
478 |
-
$row->meta_value = $site_url . '/wp-content/uploads/' . $row->meta_value;
|
479 |
-
}
|
480 |
-
}
|
481 |
-
|
482 |
-
// convert the time stamp format to a usable date time format for the feed
|
483 |
-
if ( '_sale_price_dates_from' === $row->meta_key || '_sale_price_dates_to' === $row->meta_key ) {
|
484 |
-
$row->meta_value = tvc_convert_price_date_to_feed_format( $row->meta_value );
|
485 |
-
}
|
486 |
-
}
|
487 |
-
}
|
488 |
-
|
489 |
-
/**
|
490 |
-
* @param $feed_id
|
491 |
-
* @return false|int
|
492 |
-
*/
|
493 |
-
public function delete_feed( $feed_id ) {
|
494 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feed';
|
495 |
-
|
496 |
-
return $this->_wpdb->delete( $main_table, array( 'product_feed_id' => $feed_id ) );
|
497 |
-
}
|
498 |
-
|
499 |
-
/**
|
500 |
-
* @param $feed_id
|
501 |
-
* @return false|int
|
502 |
-
*/
|
503 |
-
public function delete_meta( $feed_id ) {
|
504 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feedmeta';
|
505 |
-
|
506 |
-
return $this->_wpdb->delete( $main_table, array( 'product_feed_id' => $feed_id ) );
|
507 |
-
}
|
508 |
-
|
509 |
-
/**
|
510 |
-
* Gets the meta data from a specific feed. It does not include the category mapping and feed filter data.
|
511 |
-
*
|
512 |
-
* @param string $feed_id
|
513 |
-
*
|
514 |
-
* @return array|bool|object|null
|
515 |
-
*/
|
516 |
-
public function read_metadata( $feed_id ) {
|
517 |
-
if ( $feed_id ) {
|
518 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feedmeta';
|
519 |
-
|
520 |
-
return $this->_wpdb->get_results( "SELECT * FROM $main_table WHERE product_feed_id = $feed_id AND meta_key != 'category_mapping' AND meta_key != 'product_filter_query' ORDER BY meta_id", ARRAY_A );
|
521 |
-
} else {
|
522 |
-
return false;
|
523 |
-
}
|
524 |
-
}
|
525 |
-
|
526 |
-
/**
|
527 |
-
* Fetches the Feed Filter data from a specific feed.
|
528 |
-
*
|
529 |
-
* @param string $feed_id
|
530 |
-
*
|
531 |
-
* @return array|bool|object|null
|
532 |
-
*/
|
533 |
-
public function get_product_filter_query( $feed_id ) {
|
534 |
-
if ( $feed_id ) {
|
535 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feedmeta';
|
536 |
-
|
537 |
-
return $this->_wpdb->get_results( "SELECT meta_value FROM $main_table WHERE product_feed_id = $feed_id AND meta_key = 'product_filter_query'", ARRAY_A );
|
538 |
-
} else {
|
539 |
-
tvc_write_log_file( sprintf( 'Function get_filter_query returned false on feed %s', $feed_id ) );
|
540 |
-
|
541 |
-
return false;
|
542 |
-
}
|
543 |
-
}
|
544 |
-
|
545 |
-
public function get_columns_from_post_table() {
|
546 |
-
return $this->_wpdb->get_results( "SHOW COLUMNS FROM {$this->_table_prefix}posts" );
|
547 |
-
}
|
548 |
-
|
549 |
-
public function get_custom_product_attributes() {
|
550 |
-
$main_table = $this->_table_prefix . 'woocommerce_attribute_taxonomies';
|
551 |
-
|
552 |
-
return $this->_wpdb->get_results( "SELECT attribute_name, attribute_label FROM $main_table" );
|
553 |
-
}
|
554 |
-
|
555 |
-
public function get_custom_product_fields() {
|
556 |
-
$keywords_array = explode( ',', get_option( 'tvc_third_party_attribute_keywords', '%wpmr%,%cpf%,%unit%,%bto%,%yoast%' ) );
|
557 |
-
$main_table = $this->_wpdb->postmeta;
|
558 |
-
|
559 |
-
$query_string = "SELECT DISTINCT meta_key FROM $main_table WHERE meta_key NOT BETWEEN '_' AND '_z'";
|
560 |
-
|
561 |
-
foreach ( $keywords_array as $keyword ) {
|
562 |
-
$query_string .= " OR meta_key LIKE '" . trim( $keyword ) . "'";
|
563 |
-
}
|
564 |
-
|
565 |
-
$query_string .= ' ORDER BY meta_key';
|
566 |
-
|
567 |
-
return $this->_wpdb->get_col( $query_string );
|
568 |
-
}
|
569 |
-
|
570 |
-
public function clear_feed_batch_options() {
|
571 |
-
$this->_wpdb->query( "DELETE FROM {$this->_wpdb->options} WHERE option_name LIKE '%_batch_%'" );
|
572 |
-
}
|
573 |
-
|
574 |
-
/**
|
575 |
-
* @since 2.0.11
|
576 |
-
*/
|
577 |
-
public function clear_feed_batch_sitemeta() {
|
578 |
-
$this->_wpdb->query( "DELETE FROM {$this->_wpdb->sitemeta} WHERE meta_key LIKE '%_batch_%'" );
|
579 |
-
}
|
580 |
-
|
581 |
-
public function get_own_variable_product_attributes( $variable_id ) {
|
582 |
-
$keywords = get_option( 'tvc_third_party_attribute_keywords', '%wpmr%,%cpf%,%unit%,%bto%,%yoast%' );
|
583 |
-
$wpmr_attributes = array();
|
584 |
-
|
585 |
-
if ( $keywords ) {
|
586 |
-
$keywords_array = explode( ',', $keywords );
|
587 |
-
$main_table = $this->_wpdb->postmeta;
|
588 |
-
$query_where_string = count( $keywords_array ) > 0 ? "WHERE (meta_key LIKE '" . trim( $keywords_array[0] ) . "'" : '';
|
589 |
-
|
590 |
-
for ( $i = 1; $i < count( $keywords_array ); $i ++ ) {
|
591 |
-
$query_where_string .= " OR meta_key LIKE '" . trim( $keywords_array[ $i ] ) . "'";
|
592 |
-
}
|
593 |
-
|
594 |
-
$query_where_string .= count( $keywords_array ) > 0 ? ') AND ' : '';
|
595 |
-
|
596 |
-
foreach ( $this->_wpdb->get_results( "SELECT meta_key, meta_value FROM $main_table $query_where_string (post_id = $variable_id)" ) as $key => $row ) {
|
597 |
-
$wpmr_attributes[ $row->meta_key ] = $row->meta_value;
|
598 |
-
}
|
599 |
-
}
|
600 |
-
|
601 |
-
return $wpmr_attributes;
|
602 |
-
}
|
603 |
-
|
604 |
-
public function get_all_product_attributes() {
|
605 |
-
$main_table = $this->_wpdb->postmeta;
|
606 |
-
|
607 |
-
return $this->_wpdb->get_results( "SELECT DISTINCT meta_value FROM $main_table WHERE meta_key = '_product_attributes'" );
|
608 |
-
}
|
609 |
-
|
610 |
-
public function get_current_feed_status( $feed_id ) {
|
611 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feed';
|
612 |
-
|
613 |
-
return $this->_wpdb->get_results( "SELECT status_id FROM $main_table WHERE product_feed_id = $feed_id" );
|
614 |
-
}
|
615 |
-
|
616 |
-
public function get_country_id( $country_code ) {
|
617 |
-
$main_table = $this->_table_prefix . 'feedmanager_country';
|
618 |
-
|
619 |
-
return $this->_wpdb->get_row( "SELECT country_id FROM $main_table WHERE name_short = '$country_code'" );
|
620 |
-
}
|
621 |
-
|
622 |
-
public function get_feed_ids_with_specific_status( $status_id ) {
|
623 |
-
return $this->_wpdb->get_results( "SELECT product_feed_id FROM {$this->_table_prefix}feedmanager_product_feed WHERE status_id = '$status_id'" );
|
624 |
-
}
|
625 |
-
|
626 |
-
public function switch_feed_status( $feed_id, $new_status ) {
|
627 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feed';
|
628 |
-
|
629 |
-
return $this->_wpdb->update(
|
630 |
-
$main_table,
|
631 |
-
array(
|
632 |
-
'status_id' => $new_status,
|
633 |
-
'base_status_id' => $new_status,
|
634 |
-
),
|
635 |
-
array( 'product_feed_id' => $feed_id )
|
636 |
-
);
|
637 |
-
}
|
638 |
-
|
639 |
-
public function set_nr_feed_products( $feed_id, $nr_products ) {
|
640 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feed';
|
641 |
-
|
642 |
-
return $this->_wpdb->update( $main_table, array( 'products' => $nr_products ), array( 'product_feed_id' => $feed_id ) );
|
643 |
-
}
|
644 |
-
|
645 |
-
public function get_nr_feed_products( $feed_id ) {
|
646 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feed';
|
647 |
-
|
648 |
-
return $this->_wpdb->get_row( "SELECT products FROM $main_table WHERE product_feed_id = '$feed_id'" );
|
649 |
-
}
|
650 |
-
|
651 |
-
/**
|
652 |
-
* Updates a new feed in the product_feed table.
|
653 |
-
*
|
654 |
-
* @param (string) $feed_id
|
655 |
-
* @param (array) $feed_data
|
656 |
-
* @param (array) $data_types
|
657 |
-
*
|
658 |
-
* @return (int|false) nr of affected rows
|
659 |
-
* @since 1.0.0
|
660 |
-
*
|
661 |
-
*/
|
662 |
-
public function update_feed( $feed_id, $feed_data, $data_types ) {
|
663 |
-
|
664 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feed';
|
665 |
-
|
666 |
-
return $this->_wpdb->update(
|
667 |
-
$main_table,
|
668 |
-
$feed_data,
|
669 |
-
array(
|
670 |
-
'product_feed_id' => $feed_id,
|
671 |
-
),
|
672 |
-
$data_types,
|
673 |
-
array(
|
674 |
-
'%d',
|
675 |
-
)
|
676 |
-
);
|
677 |
-
}
|
678 |
-
|
679 |
-
/**
|
680 |
-
* Update Feed update Meta Data
|
681 |
-
* @param $feed_id
|
682 |
-
* @param $feed_url
|
683 |
-
* @param $nr_products
|
684 |
-
* @return false|int
|
685 |
-
*/
|
686 |
-
public function update_feed_update_data( $feed_id, $feed_url, $nr_products ) {
|
687 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feed';
|
688 |
-
|
689 |
-
return $this->_wpdb->update(
|
690 |
-
$main_table,
|
691 |
-
array(
|
692 |
-
'updated' => date( 'Y-m-d H:i:s', current_time( 'timestamp' ) ),
|
693 |
-
'url' => $feed_url,
|
694 |
-
'products' => $nr_products,
|
695 |
-
),
|
696 |
-
array( 'product_feed_id' => $feed_id ),
|
697 |
-
array( '%s', '%s', '%s' ),
|
698 |
-
array( '%d' )
|
699 |
-
);
|
700 |
-
}
|
701 |
-
|
702 |
-
/**
|
703 |
-
* @param $feed_id
|
704 |
-
* @return mixed
|
705 |
-
*/
|
706 |
-
public function get_file_url_from_feed( $feed_id ) {
|
707 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feed';
|
708 |
-
$result = $this->_wpdb->get_row( "SELECT url FROM $main_table WHERE product_feed_id = $feed_id", ARRAY_A );
|
709 |
-
|
710 |
-
return $result['url'];
|
711 |
-
}
|
712 |
-
|
713 |
-
/**
|
714 |
-
* Sets the status id of a feed
|
715 |
-
*
|
716 |
-
* @param string $feed_id
|
717 |
-
* @param int $status
|
718 |
-
*
|
719 |
-
* @return bool
|
720 |
-
*/
|
721 |
-
public function update_feed_file_status( $feed_id, $status ) {
|
722 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feed';
|
723 |
-
|
724 |
-
return $this->_wpdb->update( $main_table, array( 'status_id' => $status ), array( 'product_feed_id' => $feed_id ), array( '%d' ), array( '%d' ) );
|
725 |
-
}
|
726 |
-
|
727 |
-
/**
|
728 |
-
* @param $feed_id
|
729 |
-
* @param $meta_data
|
730 |
-
* @return false|int
|
731 |
-
*/
|
732 |
-
public function update_meta_data( $feed_id, $meta_data ) {
|
733 |
-
// TODO: Onderstaande proces is nog niet echt efficient. In plaats van het standaard verwijderen
|
734 |
-
// van elke bestaande regel met het geselecteerde id nummer, zou ik eerst moeten kijken of
|
735 |
-
// deze regel wel is gewijzigd. Indien een regel niet is gewijzigd zou ik hem ook niet moeten
|
736 |
-
// verwijderen.
|
737 |
-
|
738 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feedmeta';
|
739 |
-
|
740 |
-
// first remove all meta data belonging to this feed except the product_filter_query
|
741 |
-
//$this->_wpdb->delete( $main_data, array( 'product_feed_id' => $feed_id ) ); // could not use it because it can't work with !=
|
742 |
-
$this->_wpdb->query( "DELETE FROM $main_table WHERE product_feed_id = $feed_id AND meta_key != 'product_filter_query'" );
|
743 |
-
|
744 |
-
$counter = 0;
|
745 |
-
|
746 |
-
for ( $i = 0; $i < count( $meta_data ); $i ++ ) {
|
747 |
-
if ( ! empty( $meta_data[ $i ]->value ) && '{}' !== $meta_data[ $i ]->value ) {
|
748 |
-
$result = $this->_wpdb->insert(
|
749 |
-
$main_table,
|
750 |
-
array(
|
751 |
-
'product_feed_id' => $feed_id,
|
752 |
-
'meta_key' => $meta_data[ $i ]->key,
|
753 |
-
'meta_value' => $meta_data[ $i ]->value,
|
754 |
-
),
|
755 |
-
array(
|
756 |
-
'%d',
|
757 |
-
'%s',
|
758 |
-
'%s',
|
759 |
-
)
|
760 |
-
);
|
761 |
-
|
762 |
-
$counter += $result;
|
763 |
-
}
|
764 |
-
}
|
765 |
-
|
766 |
-
return $counter;
|
767 |
-
}
|
768 |
-
|
769 |
-
/**
|
770 |
-
* Resets the status_id's of failed feeds.
|
771 |
-
*
|
772 |
-
* @since 2.7.0
|
773 |
-
*/
|
774 |
-
public function reset_all_feed_status() {
|
775 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feed';
|
776 |
-
$failed_ids = $this->_wpdb->get_results( "SELECT product_feed_id FROM $main_table WHERE status_id > '2' OR status_id = '0'", 'ARRAY_A' );
|
777 |
-
|
778 |
-
foreach ( $failed_ids as $feed_id ) {
|
779 |
-
$id = $feed_id['product_feed_id'];
|
780 |
-
$base_status = $this->_wpdb->get_var( "SELECT base_status_id FROM $main_table WHERE product_feed_id = '$id'" );
|
781 |
-
$new_status = '1' === $base_status || '2' === $base_status ? $base_status : '2';
|
782 |
-
|
783 |
-
$this->_wpdb->update(
|
784 |
-
$main_table,
|
785 |
-
array(
|
786 |
-
'status_id' => $new_status,
|
787 |
-
'products' => 0,
|
788 |
-
),
|
789 |
-
array(
|
790 |
-
'product_feed_id' => $id,
|
791 |
-
),
|
792 |
-
array(
|
793 |
-
'%s',
|
794 |
-
'%d',
|
795 |
-
)
|
796 |
-
);
|
797 |
-
}
|
798 |
-
}
|
799 |
-
|
800 |
-
public function store_feed_filter( $feed_id, $filter ) {
|
801 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feedmeta';
|
802 |
-
|
803 |
-
if ( $filter ) {
|
804 |
-
$exists = $this->_wpdb->get_results( "SELECT meta_id FROM $main_table WHERE product_feed_id = $feed_id AND meta_key = 'product_filter_query'" );
|
805 |
-
|
806 |
-
if ( $exists ) {
|
807 |
-
$this->_wpdb->update(
|
808 |
-
$main_table,
|
809 |
-
array(
|
810 |
-
'meta_value' => $filter,
|
811 |
-
),
|
812 |
-
array(
|
813 |
-
'product_feed_id' => $feed_id,
|
814 |
-
'meta_key' => 'product_filter_query',
|
815 |
-
),
|
816 |
-
array(
|
817 |
-
'%s',
|
818 |
-
),
|
819 |
-
array(
|
820 |
-
'%d',
|
821 |
-
'%s',
|
822 |
-
)
|
823 |
-
);
|
824 |
-
} else {
|
825 |
-
$this->_wpdb->insert(
|
826 |
-
$main_table,
|
827 |
-
array(
|
828 |
-
'product_feed_id' => $feed_id,
|
829 |
-
'meta_key' => 'product_filter_query',
|
830 |
-
'meta_value' => $filter,
|
831 |
-
),
|
832 |
-
array(
|
833 |
-
'%d',
|
834 |
-
'%s',
|
835 |
-
'%s',
|
836 |
-
)
|
837 |
-
);
|
838 |
-
}
|
839 |
-
} else {
|
840 |
-
$this->_wpdb->query( "DELETE FROM $main_table WHERE product_feed_id = $feed_id AND meta_key = 'product_filter_query'" );
|
841 |
-
}
|
842 |
-
}
|
843 |
-
|
844 |
-
public function insert_meta_data( $feed_id, $meta_data, $feed_filter_data, $category_mapping ) {
|
845 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feedmeta';
|
846 |
-
|
847 |
-
$counter = 0;
|
848 |
-
|
849 |
-
for ( $i = 0; $i < count( $meta_data ); $i ++ ) {
|
850 |
-
$result = $this->_wpdb->insert(
|
851 |
-
$main_table,
|
852 |
-
array(
|
853 |
-
'product_feed_id' => $feed_id,
|
854 |
-
'meta_key' => $meta_data[ $i ]['meta_key'],
|
855 |
-
'meta_value' => $meta_data[ $i ]['meta_value'],
|
856 |
-
),
|
857 |
-
array(
|
858 |
-
'%d',
|
859 |
-
'%s',
|
860 |
-
'%s',
|
861 |
-
)
|
862 |
-
);
|
863 |
-
|
864 |
-
$counter += $result;
|
865 |
-
}
|
866 |
-
|
867 |
-
for ( $i = 0; $i < count( $feed_filter_data ); $i++ ) {
|
868 |
-
$this->store_feed_filter( $feed_id, $feed_filter_data[ $i ]['meta_value'] );
|
869 |
-
}
|
870 |
-
|
871 |
-
$counter += $this->_wpdb->insert(
|
872 |
-
$main_table,
|
873 |
-
array(
|
874 |
-
'product_feed_id' => $feed_id,
|
875 |
-
'meta_key' => 'category_mapping',
|
876 |
-
'meta_value' => $category_mapping[0]['meta_value'],
|
877 |
-
),
|
878 |
-
array(
|
879 |
-
'%d',
|
880 |
-
'%s',
|
881 |
-
'%s',
|
882 |
-
)
|
883 |
-
);
|
884 |
-
|
885 |
-
return $counter;
|
886 |
-
}
|
887 |
-
|
888 |
-
public function title_exists( $feed_title ) {
|
889 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feed';
|
890 |
-
$count = $this->_wpdb->get_var( "SELECT COUNT(*) FROM $main_table WHERE title = '$feed_title'" );
|
891 |
-
|
892 |
-
return $count > 0 ? true : false;
|
893 |
-
}
|
894 |
-
|
895 |
-
/**
|
896 |
-
* Inserts a new feed in the product_feed table and returns its new id.
|
897 |
-
*
|
898 |
-
* @param array $feed_data_to_store
|
899 |
-
* @param array $feed_types
|
900 |
-
*
|
901 |
-
* @return integer containing the id of the new feed
|
902 |
-
* @since 1.0.0
|
903 |
-
*
|
904 |
-
*/
|
905 |
-
public function create_feed( $feed_data_to_store, $feed_types ) {
|
906 |
-
|
907 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feed';
|
908 |
-
|
909 |
-
$this->_wpdb->insert(
|
910 |
-
$main_table,
|
911 |
-
$feed_data_to_store,
|
912 |
-
$feed_types
|
913 |
-
);
|
914 |
-
|
915 |
-
return $this->_wpdb->insert_id;
|
916 |
-
}
|
917 |
-
|
918 |
-
public function getCountryID($feed_id){
|
919 |
-
$countryID = $this->_wpdb->get_results("SELECT country_id FROM {$this->_table_prefix}feedmanager_product_feed WHERE product_feed_id = ".$feed_id);
|
920 |
-
|
921 |
-
return $countryID;
|
922 |
-
}
|
923 |
-
|
924 |
-
public function getScheduleTime($feed_id){
|
925 |
-
$scheduleTime = $this->_wpdb->get_results("SELECT schedule FROM {$this->_table_prefix}feedmanager_product_feed WHERE product_feed_id = ".$feed_id);
|
926 |
-
|
927 |
-
return $scheduleTime;
|
928 |
-
}
|
929 |
-
|
930 |
-
public function getFeedData($feed_id){
|
931 |
-
$feedData = $this->_wpdb->get_results("SELECT title,feed_description,feed_title FROM {$this->_table_prefix}feedmanager_product_feed WHERE product_feed_id = ".$feed_id);
|
932 |
-
|
933 |
-
return $feedData;
|
934 |
-
}
|
935 |
-
|
936 |
-
public function getCountryCode($countryID){
|
937 |
-
$countryCode = $this->_wpdb->get_results("SELECT name_short FROM {$this->_table_prefix}feedmanager_country WHERE country_id =".$countryID[0]->country_id);
|
938 |
-
return $countryCode;
|
939 |
-
}
|
940 |
-
|
941 |
-
public function insertGmcFeedId($feedID,$feed_id){
|
942 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feed';
|
943 |
-
return $this->_wpdb->update( $main_table, array( 'gmc_feed_id' => $feedID ), array( 'product_feed_id' => $feed_id ) );
|
944 |
-
}
|
945 |
-
|
946 |
-
public function getGmcFeedId($feed_id){
|
947 |
-
$gmcFeedId = $this->_wpdb->get_results("SELECT gmc_feed_id FROM {$this->_table_prefix}feedmanager_product_feed WHERE product_feed_id =". $feed_id);
|
948 |
-
return $gmcFeedId;
|
949 |
-
}
|
950 |
-
|
951 |
-
public function getFeedURL($feed_id){
|
952 |
-
$main_table = $this->_table_prefix . 'feedmanager_product_feed';
|
953 |
-
return $this->_wpdb->get_results("SELECT url,feed_title,status_id FROM $main_table WHERE product_feed_id =". $feed_id);
|
954 |
-
}
|
955 |
-
|
956 |
-
public function getTableColumns($table) {
|
957 |
-
return $this->_wpdb->get_results("SELECT column_name as field FROM information_schema.columns WHERE table_name = '$table'");
|
958 |
-
}
|
959 |
-
|
960 |
-
public function getTableData($table = 'wp_postmeta', $columns = array()) {
|
961 |
-
return $this->_wpdb->get_results("SELECT DISTINCT " . implode(',', $columns) . " as field FROM $table");
|
962 |
-
}
|
963 |
-
|
964 |
-
public function getTablePostMeta($post_id) {
|
965 |
-
global $wpdb;
|
966 |
-
$tve_table_prefix = $wpdb->prefix;
|
967 |
-
return $this->_wpdb->get_results("SELECT meta_key,meta_value FROM ".$tve_table_prefix."postmeta where post_id=" . $post_id);
|
968 |
-
}
|
969 |
-
}
|
970 |
-
// End of TVC_Queries class
|
971 |
-
|
972 |
-
endif;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/data/js/tvc_ajaxdatahandling.js
CHANGED
@@ -1,718 +1,2 @@
|
|
1 |
"use strict";
|
2 |
-
var myAjaxNonces;
|
3 |
-
|
4 |
-
function tvc_getFeedList( callback ) {
|
5 |
-
|
6 |
-
jQuery.post(
|
7 |
-
myAjaxNonces.ajaxurl,
|
8 |
-
{
|
9 |
-
action: 'tvcajax-get-list-of-feeds',
|
10 |
-
postFeedsListNonce: myAjaxNonces.postFeedsListNonce,
|
11 |
-
|
12 |
-
},
|
13 |
-
function( response ) {
|
14 |
-
|
15 |
-
callback( tvc_validateResponse( response ) );
|
16 |
-
}
|
17 |
-
);
|
18 |
-
}
|
19 |
-
|
20 |
-
function tvc_getBackupsList( callback ) {
|
21 |
-
jQuery.post(
|
22 |
-
myAjaxNonces.ajaxurl,
|
23 |
-
{
|
24 |
-
action: 'tvcajax-get-list-of-backups',
|
25 |
-
postBackupListNonce: myAjaxNonces.postBackupListNonce,
|
26 |
-
|
27 |
-
},
|
28 |
-
function( response ) {
|
29 |
-
|
30 |
-
callback( tvc_validateResponse( response ) );
|
31 |
-
}
|
32 |
-
);
|
33 |
-
}
|
34 |
-
|
35 |
-
function tvc_getSettingsOptions( callback ) {
|
36 |
-
|
37 |
-
jQuery.post(
|
38 |
-
myAjaxNonces.ajaxurl,
|
39 |
-
{
|
40 |
-
action: 'tvcajax-get-settings-options',
|
41 |
-
postSetupOptionsNonce: myAjaxNonces.postSetupOptionsNonce,
|
42 |
-
|
43 |
-
},
|
44 |
-
function( response ) {
|
45 |
-
|
46 |
-
callback( tvc_validateResponse( response ) );
|
47 |
-
}
|
48 |
-
);
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Reads and returns all possible output fields from the selected merchant
|
53 |
-
*
|
54 |
-
* @param {int} feedId
|
55 |
-
* @param {int} channelId
|
56 |
-
* @param callback
|
57 |
-
* @returns list with output fields
|
58 |
-
*/
|
59 |
-
function tvc_getOutputFields( feedId, channelId, callback ) {
|
60 |
-
|
61 |
-
jQuery.post(
|
62 |
-
myAjaxNonces.ajaxurl,
|
63 |
-
{
|
64 |
-
action: 'tvcajax-get-output-fields',
|
65 |
-
feedId: feedId,
|
66 |
-
channelId: channelId,
|
67 |
-
outputFieldsNonce: myAjaxNonces.outputFieldsNonce,
|
68 |
-
|
69 |
-
},
|
70 |
-
function( response ) {
|
71 |
-
|
72 |
-
callback( tvc_validateResponse( response ) );
|
73 |
-
}
|
74 |
-
);
|
75 |
-
}
|
76 |
-
|
77 |
-
/**
|
78 |
-
* Reads and returns all possible source fields from the selected source
|
79 |
-
*
|
80 |
-
* @param {int} sourceId
|
81 |
-
* @param callback
|
82 |
-
* @returns list with input fields
|
83 |
-
*/
|
84 |
-
function tvc_getSourceFields( sourceId, callback ) {
|
85 |
-
|
86 |
-
jQuery.post(
|
87 |
-
myAjaxNonces.ajaxurl,
|
88 |
-
{
|
89 |
-
action: 'tvcajax-get-input-fields',
|
90 |
-
sourceId: sourceId,
|
91 |
-
inputFieldsNonce: myAjaxNonces.inputFieldsNonce,
|
92 |
-
|
93 |
-
},
|
94 |
-
function( response ) {
|
95 |
-
|
96 |
-
callback( tvc_validateResponse( response ) );
|
97 |
-
}
|
98 |
-
);
|
99 |
-
}
|
100 |
-
|
101 |
-
/**
|
102 |
-
* Get main feed filters
|
103 |
-
* @param feedId
|
104 |
-
* @param callback
|
105 |
-
*/
|
106 |
-
function tvc_getMainFeedFilters( feedId, callback ) {
|
107 |
-
|
108 |
-
jQuery.post(
|
109 |
-
myAjaxNonces.ajaxurl,
|
110 |
-
{
|
111 |
-
action: 'tvcajax-get-main-feed-filters',
|
112 |
-
feedId: feedId,
|
113 |
-
inputFeedFiltersNonce: myAjaxNonces.inputFeedFiltersNonce,
|
114 |
-
|
115 |
-
},
|
116 |
-
function( response ) {
|
117 |
-
|
118 |
-
callback( tvc_validateResponse( response ) );
|
119 |
-
}
|
120 |
-
);
|
121 |
-
}
|
122 |
-
|
123 |
-
/**
|
124 |
-
* Fetch next category
|
125 |
-
* @param channelId
|
126 |
-
* @param requestedLevel
|
127 |
-
* @param parentCategory
|
128 |
-
* @param language
|
129 |
-
* @param callback
|
130 |
-
*/
|
131 |
-
function tvc_getNextCategories( channelId, requestedLevel, parentCategory, language, callback ) {
|
132 |
-
|
133 |
-
jQuery.post(
|
134 |
-
myAjaxNonces.ajaxurl,
|
135 |
-
{
|
136 |
-
action: 'tvcajax-get-next-categories',
|
137 |
-
channelId: channelId,
|
138 |
-
requestedLevel: requestedLevel,
|
139 |
-
parentCategory: parentCategory,
|
140 |
-
fileLanguage: language,
|
141 |
-
nextCategoryNonce: myAjaxNonces.nextCategoryNonce,
|
142 |
-
|
143 |
-
},
|
144 |
-
function( response ) {
|
145 |
-
|
146 |
-
response = response.trim();
|
147 |
-
|
148 |
-
if ( response.substr( response.length - 1 ) === '0' ) {
|
149 |
-
response = response.substring( 0, response.length - 1 );
|
150 |
-
}
|
151 |
-
|
152 |
-
callback( tvc_validateResponse( response ) );
|
153 |
-
}
|
154 |
-
);
|
155 |
-
}
|
156 |
-
|
157 |
-
/**
|
158 |
-
* Get Category Listing from String
|
159 |
-
* @param channelId
|
160 |
-
* @param mainCategoriesString
|
161 |
-
* @param language
|
162 |
-
* @param callback
|
163 |
-
*/
|
164 |
-
function tvc_getCategoryListsFromString( channelId, mainCategoriesString, language, callback ) {
|
165 |
-
jQuery.post(
|
166 |
-
myAjaxNonces.ajaxurl,
|
167 |
-
{
|
168 |
-
action: 'tvcajax-get-category-lists',
|
169 |
-
channelId: channelId,
|
170 |
-
mainCategories: mainCategoriesString,
|
171 |
-
fileLanguage: language,
|
172 |
-
categoryListsNonce: myAjaxNonces.categoryListsNonce,
|
173 |
-
|
174 |
-
},
|
175 |
-
function( response ) {
|
176 |
-
|
177 |
-
callback( tvc_validateResponse( response ) );
|
178 |
-
}
|
179 |
-
);
|
180 |
-
}
|
181 |
-
|
182 |
-
/**
|
183 |
-
* Ajax Call for update feed to database
|
184 |
-
* @param feedData
|
185 |
-
* @param metaData
|
186 |
-
* @param feedFilter
|
187 |
-
* @param callback
|
188 |
-
*/
|
189 |
-
function tvc_updateFeedToDb( feedData, metaData, feedFilter, callback ) {
|
190 |
-
jQuery.post(
|
191 |
-
myAjaxNonces.ajaxurl,
|
192 |
-
{
|
193 |
-
action: 'tvcajax-update-feed-data',
|
194 |
-
feed: JSON.stringify( feedData ),
|
195 |
-
feedFilter: feedFilter ? feedFilter[ 0 ][ 'meta_value' ] : '',
|
196 |
-
metaData: JSON.stringify( metaData ),
|
197 |
-
updateFeedDataNonce: myAjaxNonces.updateFeedDataNonce,
|
198 |
-
},
|
199 |
-
function( response ) {
|
200 |
-
console.log(response);
|
201 |
-
callback( tvc_validateResponse( response ) );
|
202 |
-
}
|
203 |
-
);
|
204 |
-
}
|
205 |
-
|
206 |
-
/**
|
207 |
-
* Ajax call for update XML feed file
|
208 |
-
* @param feed_id
|
209 |
-
* @param callback
|
210 |
-
*/
|
211 |
-
function tvc_updateFeedFile( feed_id, callback ) {
|
212 |
-
jQuery.post(
|
213 |
-
myAjaxNonces.ajaxurl,
|
214 |
-
{
|
215 |
-
action: 'tvcajax-update-feed-file',
|
216 |
-
dataType: 'text',
|
217 |
-
feedId: feed_id,
|
218 |
-
updateFeedFileNonce: myAjaxNonces.updateFeedFileNonce,
|
219 |
-
|
220 |
-
},
|
221 |
-
function( response ) {
|
222 |
-
|
223 |
-
callback( tvc_validateResponse( response ) );
|
224 |
-
}
|
225 |
-
);
|
226 |
-
}
|
227 |
-
|
228 |
-
/**
|
229 |
-
* Update current/selected feed status
|
230 |
-
* @param feedId
|
231 |
-
* @param callback
|
232 |
-
*/
|
233 |
-
function tvc_getCurrentFeedStatus( feedId, callback ) {
|
234 |
-
|
235 |
-
jQuery.post(
|
236 |
-
myAjaxNonces.ajaxurl,
|
237 |
-
{
|
238 |
-
action: 'tvcajax-get-feed-status',
|
239 |
-
sourceId: feedId,
|
240 |
-
feedStatusNonce: myAjaxNonces.feedStatusNonce,
|
241 |
-
|
242 |
-
},
|
243 |
-
function( response ) {
|
244 |
-
|
245 |
-
callback( tvc_validateResponse( response ) );
|
246 |
-
}
|
247 |
-
);
|
248 |
-
}
|
249 |
-
|
250 |
-
function tvc_getFeedData( feedId, callback ) {
|
251 |
-
|
252 |
-
jQuery.post(
|
253 |
-
myAjaxNonces.ajaxurl,
|
254 |
-
{
|
255 |
-
action: 'tvcajax-get-feed-data',
|
256 |
-
sourceId: feedId,
|
257 |
-
feedDataNonce: myAjaxNonces.feedDataNonce,
|
258 |
-
|
259 |
-
},
|
260 |
-
function( response ) {
|
261 |
-
|
262 |
-
callback( tvc_validateResponse( response ) );
|
263 |
-
}
|
264 |
-
);
|
265 |
-
}
|
266 |
-
|
267 |
-
/**
|
268 |
-
* Switch feed status auto/manual
|
269 |
-
* @param feedId
|
270 |
-
* @param callback
|
271 |
-
*/
|
272 |
-
function tvc_switchFeedStatus( feedId, callback ) {
|
273 |
-
|
274 |
-
jQuery.post(
|
275 |
-
myAjaxNonces.ajaxurl,
|
276 |
-
{
|
277 |
-
action: 'tvcajax-switch-feed-status',
|
278 |
-
feedId: feedId,
|
279 |
-
switchFeedStatusNonce: myAjaxNonces.switchFeedStatusNonce,
|
280 |
-
|
281 |
-
},
|
282 |
-
function( response ) {
|
283 |
-
|
284 |
-
tvc_switchStatusAction( feedId, response );
|
285 |
-
callback( tvc_validateResponse( response ) );
|
286 |
-
}
|
287 |
-
);
|
288 |
-
}
|
289 |
-
|
290 |
-
/**
|
291 |
-
* Duplicate/Clone existing feed
|
292 |
-
* @param feedId
|
293 |
-
* @param callback
|
294 |
-
*/
|
295 |
-
function tvc_duplicateExistingFeed( feedId, callback ) {
|
296 |
-
|
297 |
-
jQuery.post(
|
298 |
-
myAjaxNonces.ajaxurl,
|
299 |
-
{
|
300 |
-
action: 'tvcajax-duplicate-existing-feed',
|
301 |
-
feedId: feedId,
|
302 |
-
duplicateFeedNonce: myAjaxNonces.duplicateFeedNonce,
|
303 |
-
|
304 |
-
},
|
305 |
-
function( response ) {
|
306 |
-
|
307 |
-
if ( response.trim() ) {
|
308 |
-
tvc_resetFeedList();
|
309 |
-
}
|
310 |
-
|
311 |
-
callback( tvc_validateResponse( response ) );
|
312 |
-
}
|
313 |
-
);
|
314 |
-
}
|
315 |
-
|
316 |
-
/**
|
317 |
-
* Log message on server
|
318 |
-
* @param message
|
319 |
-
* @param fileName
|
320 |
-
* @param callback
|
321 |
-
*/
|
322 |
-
function tvc_logMessageOnServer( message, fileName, callback ) {
|
323 |
-
|
324 |
-
jQuery.post(
|
325 |
-
myAjaxNonces.ajaxurl,
|
326 |
-
{
|
327 |
-
action: 'tvcajax-log-message',
|
328 |
-
messageList: message,
|
329 |
-
fileName: fileName,
|
330 |
-
logMessageNonce: myAjaxNonces.logMessageNonce,
|
331 |
-
|
332 |
-
},
|
333 |
-
function( result ) {
|
334 |
-
|
335 |
-
callback( result.trim() );
|
336 |
-
}
|
337 |
-
);
|
338 |
-
}
|
339 |
-
|
340 |
-
function tvc_auto_feed_fix_mode( selection, callback ) {
|
341 |
-
|
342 |
-
jQuery.post(
|
343 |
-
myAjaxNonces.ajaxurl,
|
344 |
-
{
|
345 |
-
action: 'tvcajax-auto-feed-fix-mode-selection',
|
346 |
-
fix_selection: selection,
|
347 |
-
updateAutoFeedFixNonce: myAjaxNonces.setAutoFeedFixNonce,
|
348 |
-
|
349 |
-
},
|
350 |
-
function( response ) {
|
351 |
-
|
352 |
-
callback( response.trim() );
|
353 |
-
}
|
354 |
-
);
|
355 |
-
}
|
356 |
-
|
357 |
-
/**
|
358 |
-
* Ajax for background process of selected feeds
|
359 |
-
* @param selection
|
360 |
-
* @param callback
|
361 |
-
*/
|
362 |
-
function tvc_background_processing_mode( selection, callback ) {
|
363 |
-
|
364 |
-
jQuery.post(
|
365 |
-
myAjaxNonces.ajaxurl,
|
366 |
-
{
|
367 |
-
action: 'tvcajax-background-processing-mode-selection',
|
368 |
-
mode_selection: selection,
|
369 |
-
backgroundModeNonce: myAjaxNonces.setBackgroundModeNonce,
|
370 |
-
|
371 |
-
},
|
372 |
-
function( response ) {
|
373 |
-
|
374 |
-
callback( response.trim() );
|
375 |
-
}
|
376 |
-
);
|
377 |
-
}
|
378 |
-
|
379 |
-
function tvc_feed_logger_status( selection, callback ) {
|
380 |
-
|
381 |
-
jQuery.post(
|
382 |
-
myAjaxNonces.ajaxurl,
|
383 |
-
{
|
384 |
-
action: 'tvcajax-feed-logger-status-selection',
|
385 |
-
statusSelection: selection,
|
386 |
-
feedLoggerStatusNonce: myAjaxNonces.setFeedLoggerStatusNonce,
|
387 |
-
|
388 |
-
},
|
389 |
-
function( response ) {
|
390 |
-
|
391 |
-
callback( response.trim() );
|
392 |
-
}
|
393 |
-
);
|
394 |
-
}
|
395 |
-
|
396 |
-
/**
|
397 |
-
* Sets the Show Product Identifiers option.
|
398 |
-
*
|
399 |
-
* @since 2.10.0.
|
400 |
-
*
|
401 |
-
* @param selection
|
402 |
-
* @param callback
|
403 |
-
*/
|
404 |
-
function tvc_show_pi_status( selection, callback ) {
|
405 |
-
|
406 |
-
jQuery.post(
|
407 |
-
myAjaxNonces.ajaxurl,
|
408 |
-
{
|
409 |
-
action: 'tvcajax-show-product-identifiers-selection',
|
410 |
-
showPiSelection: selection,
|
411 |
-
showPINonce: myAjaxNonces.setShowPINonce,
|
412 |
-
|
413 |
-
},
|
414 |
-
function( response ) {
|
415 |
-
|
416 |
-
callback( response.trim() );
|
417 |
-
}
|
418 |
-
);
|
419 |
-
}
|
420 |
-
|
421 |
-
function tvc_change_third_party_attribute_keywords( keywords, callback ) {
|
422 |
-
|
423 |
-
jQuery.post(
|
424 |
-
myAjaxNonces.ajaxurl,
|
425 |
-
{
|
426 |
-
action: 'tvcajax-third-party-attribute-keywords',
|
427 |
-
keywords: keywords,
|
428 |
-
thirdPartyKeywordsNonce: myAjaxNonces.setThirdPartyKeywordsNonce,
|
429 |
-
|
430 |
-
},
|
431 |
-
function( response ) {
|
432 |
-
|
433 |
-
callback( response.trim() );
|
434 |
-
}
|
435 |
-
);
|
436 |
-
}
|
437 |
-
|
438 |
-
function tvc_change_notice_mailaddress( mailAddress, callback ) {
|
439 |
-
|
440 |
-
jQuery.post(
|
441 |
-
myAjaxNonces.ajaxurl,
|
442 |
-
{
|
443 |
-
action: 'tvcajax-set-notice-mailaddress',
|
444 |
-
mailaddress: mailAddress,
|
445 |
-
noticeMailaddressNonce: myAjaxNonces.setNoticeMailaddressNonce,
|
446 |
-
|
447 |
-
},
|
448 |
-
function( response ) {
|
449 |
-
|
450 |
-
callback( response.trim() );
|
451 |
-
}
|
452 |
-
);
|
453 |
-
}
|
454 |
-
|
455 |
-
function tvc_change_background_processing_time_limit( limit, callback ) {
|
456 |
-
|
457 |
-
jQuery.post(
|
458 |
-
myAjaxNonces.ajaxurl,
|
459 |
-
{
|
460 |
-
action: 'tvcajax-background-processing-time-limit',
|
461 |
-
limit: limit,
|
462 |
-
batchProcessingLimitNonce: myAjaxNonces.setBatchProcessingLimitNonce,
|
463 |
-
|
464 |
-
},
|
465 |
-
function( response ) {
|
466 |
-
|
467 |
-
callback( response.trim() );
|
468 |
-
}
|
469 |
-
);
|
470 |
-
}
|
471 |
-
|
472 |
-
function tvc_clear_feed_process_data( callback ) {
|
473 |
-
jQuery.post(
|
474 |
-
myAjaxNonces.ajaxurl,
|
475 |
-
{
|
476 |
-
action: 'tvcajax-clear-feed-process-data',
|
477 |
-
clearFeedNonce: myAjaxNonces.setClearFeedProcessNonce,
|
478 |
-
|
479 |
-
},
|
480 |
-
function( response ) {
|
481 |
-
|
482 |
-
callback( response );
|
483 |
-
}
|
484 |
-
);
|
485 |
-
}
|
486 |
-
|
487 |
-
function tvc_reinitiate_plugin( callback ) {
|
488 |
-
jQuery.post(
|
489 |
-
myAjaxNonces.ajaxurl,
|
490 |
-
{
|
491 |
-
action: 'tvcajax-reinitiate-plugin',
|
492 |
-
reInitiateNonce: myAjaxNonces.setReInitiateNonce,
|
493 |
-
|
494 |
-
},
|
495 |
-
function( response ) {
|
496 |
-
|
497 |
-
callback( response );
|
498 |
-
}
|
499 |
-
);
|
500 |
-
}
|
501 |
-
|
502 |
-
/**
|
503 |
-
* Takes the response of an ajax call and checks if it's ok. When not, it will display the error and return
|
504 |
-
* an empty list.
|
505 |
-
*
|
506 |
-
* @param {String} response
|
507 |
-
*
|
508 |
-
* @returns {String}
|
509 |
-
*/
|
510 |
-
function tvc_validateResponse( response ) {
|
511 |
-
|
512 |
-
response = response.trim(); // remove php ajax response white spaces
|
513 |
-
|
514 |
-
// when the response contains no error message
|
515 |
-
if ( response.indexOf( '<div id=\'error\'>' ) < 0 && response.indexOf( '<b>Fatal error</b>' ) < 0 && response.indexOf( '<b>Notice</b>' ) < 0 && response.indexOf( '<b>Warning</b>' ) < 0 && response.indexOf( '<b>Catchable fatal error</b>' ) < 0 && response.indexOf( '<div id="error">' ) < 0 ) {
|
516 |
-
|
517 |
-
if ( response.indexOf( '[]' ) < 0 ) {
|
518 |
-
|
519 |
-
if ( response !== '' ) {
|
520 |
-
|
521 |
-
return (
|
522 |
-
response
|
523 |
-
);
|
524 |
-
} else {
|
525 |
-
|
526 |
-
return (
|
527 |
-
'1'
|
528 |
-
);
|
529 |
-
}
|
530 |
-
} else { // if it has an error message
|
531 |
-
|
532 |
-
// return an empty list
|
533 |
-
return (
|
534 |
-
'0'
|
535 |
-
);
|
536 |
-
}
|
537 |
-
} else {
|
538 |
-
|
539 |
-
tvc_show_error_message( response.replace( '[]', '' ) );
|
540 |
-
tvc_hideFeedSpinner();
|
541 |
-
|
542 |
-
tvc_logMessageOnServer(
|
543 |
-
response,
|
544 |
-
'error',
|
545 |
-
function( result ) {
|
546 |
-
|
547 |
-
// return an empty list
|
548 |
-
return (
|
549 |
-
'0'
|
550 |
-
);
|
551 |
-
}
|
552 |
-
);
|
553 |
-
}
|
554 |
-
}
|
555 |
-
|
556 |
-
/**
|
557 |
-
* Deletes a specific feed file
|
558 |
-
*
|
559 |
-
* This function first removes the file from the server and than from the feed database.
|
560 |
-
* After that it will refresh the Feed List.
|
561 |
-
*
|
562 |
-
* @param {int} id
|
563 |
-
* @param {string} feedTitle
|
564 |
-
* @returns nothing
|
565 |
-
*/
|
566 |
-
function tvc_deleteFeed( id, feedTitle ) {
|
567 |
-
var feedSpinnerElement = jQuery( '#feed-spinner' );
|
568 |
-
var feedListMessageElement = jQuery( '#feed-list-message' );
|
569 |
-
|
570 |
-
// clear old messages
|
571 |
-
feedListMessageElement.empty();
|
572 |
-
|
573 |
-
// remove the file
|
574 |
-
tvc_removeFeedFile(
|
575 |
-
function() {
|
576 |
-
feedSpinnerElement.show();
|
577 |
-
|
578 |
-
// delete the file entry in the database
|
579 |
-
tvc_deleteFeedFromDb(
|
580 |
-
id,
|
581 |
-
function( response ) {
|
582 |
-
feedSpinnerElement.show();
|
583 |
-
|
584 |
-
response = response.trim();
|
585 |
-
|
586 |
-
if ( response === '1' ) {
|
587 |
-
// reset the feed list
|
588 |
-
tvc_resetFeedList();
|
589 |
-
feedSpinnerElement.hide();
|
590 |
-
} else {
|
591 |
-
// report the result to the user
|
592 |
-
feedListMessageElement.append( response );
|
593 |
-
feedSpinnerElement.hide();
|
594 |
-
}
|
595 |
-
},
|
596 |
-
id
|
597 |
-
);
|
598 |
-
},
|
599 |
-
feedTitle
|
600 |
-
);
|
601 |
-
}
|
602 |
-
|
603 |
-
function tvc_removeFeedFile( callback, feedTitle ) {
|
604 |
-
|
605 |
-
jQuery.post(
|
606 |
-
myAjaxNonces.ajaxurl,
|
607 |
-
{
|
608 |
-
action: 'tvcajax-delete-feed-file',
|
609 |
-
fileTitle: feedTitle,
|
610 |
-
deleteFeedNonce: myAjaxNonces.deleteFeedNonce,
|
611 |
-
|
612 |
-
},
|
613 |
-
function( response ) {
|
614 |
-
|
615 |
-
callback( tvc_validateResponse( response ) );
|
616 |
-
}
|
617 |
-
);
|
618 |
-
}
|
619 |
-
|
620 |
-
function tvc_deleteFeedFromDb( feedId, callback ) {
|
621 |
-
|
622 |
-
jQuery.post(
|
623 |
-
myAjaxNonces.ajaxurl,
|
624 |
-
{
|
625 |
-
action: 'tvcajax-delete-feed',
|
626 |
-
feedId: feedId,
|
627 |
-
deleteFeedNonce: myAjaxNonces.deleteFeedNonce,
|
628 |
-
|
629 |
-
},
|
630 |
-
function( response ) {
|
631 |
-
|
632 |
-
callback( tvc_validateResponse( response ) );
|
633 |
-
}
|
634 |
-
);
|
635 |
-
}
|
636 |
-
|
637 |
-
function tvc_checkNextFeedInQueue( callback ) {
|
638 |
-
jQuery.post(
|
639 |
-
myAjaxNonces.ajaxurl,
|
640 |
-
{
|
641 |
-
action: 'tvcajax-get-next-feed-in-queue',
|
642 |
-
nextFeedInQueueNonce: myAjaxNonces.nextFeedInQueueNonce,
|
643 |
-
|
644 |
-
},
|
645 |
-
function( response ) {
|
646 |
-
|
647 |
-
callback( tvc_validateResponse( response ) );
|
648 |
-
}
|
649 |
-
);
|
650 |
-
}
|
651 |
-
|
652 |
-
function tvc_initiateBackup( fileName, callback ) {
|
653 |
-
|
654 |
-
jQuery.post(
|
655 |
-
myAjaxNonces.ajaxurl,
|
656 |
-
{
|
657 |
-
action: 'tvcajax-backup-current-data',
|
658 |
-
fileName: fileName,
|
659 |
-
backupNonce: myAjaxNonces.backupNonce,
|
660 |
-
|
661 |
-
},
|
662 |
-
function( response ) {
|
663 |
-
|
664 |
-
callback( tvc_validateResponse( response ) );
|
665 |
-
}
|
666 |
-
);
|
667 |
-
}
|
668 |
-
|
669 |
-
function tvc_deleteBackup( fileName, callback ) {
|
670 |
-
|
671 |
-
jQuery.post(
|
672 |
-
myAjaxNonces.ajaxurl,
|
673 |
-
{
|
674 |
-
action: 'tvcajax-delete-backup-file',
|
675 |
-
fileName: fileName,
|
676 |
-
deleteBackupNonce: myAjaxNonces.deleteBackupNonce,
|
677 |
-
|
678 |
-
},
|
679 |
-
function( response ) {
|
680 |
-
|
681 |
-
callback( tvc_validateResponse( response ) );
|
682 |
-
}
|
683 |
-
);
|
684 |
-
}
|
685 |
-
|
686 |
-
function tvc_restoreBackup( fileName, callback ) {
|
687 |
-
|
688 |
-
jQuery.post(
|
689 |
-
myAjaxNonces.ajaxurl,
|
690 |
-
{
|
691 |
-
action: 'tvcajax-restore-backup-file',
|
692 |
-
fileName: fileName,
|
693 |
-
restoreBackupNonce: myAjaxNonces.restoreBackupNonce,
|
694 |
-
|
695 |
-
},
|
696 |
-
function( response ) {
|
697 |
-
|
698 |
-
callback( tvc_validateResponse( response ) );
|
699 |
-
}
|
700 |
-
);
|
701 |
-
}
|
702 |
-
|
703 |
-
function tvc_duplicateBackup( fileName, callback ) {
|
704 |
-
|
705 |
-
jQuery.post(
|
706 |
-
myAjaxNonces.ajaxurl,
|
707 |
-
{
|
708 |
-
action: 'tvcajax-duplicate-backup-file',
|
709 |
-
fileName: fileName,
|
710 |
-
duplicateBackupNonce: myAjaxNonces.duplicateBackupNonce,
|
711 |
-
|
712 |
-
},
|
713 |
-
function( response ) {
|
714 |
-
|
715 |
-
callback( tvc_validateResponse( response ) );
|
716 |
-
}
|
717 |
-
);
|
718 |
-
}
|
1 |
"use strict";
|
2 |
+
var myAjaxNonces;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/data/js/tvc_ajaxdatahandling.min.js
DELETED
@@ -1,364 +0,0 @@
|
|
1 |
-
var myAjaxNonces;
|
2 |
-
|
3 |
-
function tvc_getFeedList(a) {
|
4 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
5 |
-
action: "tvcajax-get-list-of-feeds",
|
6 |
-
postFeedsListNonce: myAjaxNonces.postFeedsListNonce
|
7 |
-
}, function (b) {
|
8 |
-
a(tvc_validateResponse(b))
|
9 |
-
})
|
10 |
-
}
|
11 |
-
|
12 |
-
function tvc_getBackupsList(a) {
|
13 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
14 |
-
action: "tvcajax-get-list-of-backups",
|
15 |
-
postBackupListNonce: myAjaxNonces.postBackupListNonce
|
16 |
-
}, function (b) {
|
17 |
-
a(tvc_validateResponse(b))
|
18 |
-
})
|
19 |
-
}
|
20 |
-
|
21 |
-
function tvc_getSettingsOptions(a) {
|
22 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
23 |
-
action: "tvcajax-get-settings-options",
|
24 |
-
postSetupOptionsNonce: myAjaxNonces.postSetupOptionsNonce
|
25 |
-
}, function (b) {
|
26 |
-
a(tvc_validateResponse(b))
|
27 |
-
})
|
28 |
-
}
|
29 |
-
|
30 |
-
function tvc_getOutputFields(a, b, c) {
|
31 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
32 |
-
action: "tvcajax-get-output-fields",
|
33 |
-
feedId: a,
|
34 |
-
channelId: b,
|
35 |
-
outputFieldsNonce: myAjaxNonces.outputFieldsNonce
|
36 |
-
}, function (d) {
|
37 |
-
c(tvc_validateResponse(d))
|
38 |
-
})
|
39 |
-
}
|
40 |
-
|
41 |
-
function tvc_getSourceFields(a, b) {
|
42 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
43 |
-
action: "tvcajax-get-input-fields",
|
44 |
-
sourceId: a,
|
45 |
-
inputFieldsNonce: myAjaxNonces.inputFieldsNonce
|
46 |
-
}, function (c) {
|
47 |
-
b(tvc_validateResponse(c))
|
48 |
-
})
|
49 |
-
}
|
50 |
-
|
51 |
-
function tvc_getMainFeedFilters(a, b) {
|
52 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
53 |
-
action: "tvcajax-get-main-feed-filters",
|
54 |
-
feedId: a,
|
55 |
-
inputFeedFiltersNonce: myAjaxNonces.inputFeedFiltersNonce
|
56 |
-
}, function (c) {
|
57 |
-
b(tvc_validateResponse(c))
|
58 |
-
})
|
59 |
-
}
|
60 |
-
|
61 |
-
function tvc_getNextCategories(c, b, a, e, d) {
|
62 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
63 |
-
action: "tvcajax-get-next-categories",
|
64 |
-
channelId: c,
|
65 |
-
requestedLevel: b,
|
66 |
-
parentCategory: a,
|
67 |
-
fileLanguage: e,
|
68 |
-
nextCategoryNonce: myAjaxNonces.nextCategoryNonce
|
69 |
-
}, function (f) {
|
70 |
-
f = f.trim();
|
71 |
-
if (f.substr(f.length - 1) === "0") {
|
72 |
-
f = f.substring(0, f.length - 1)
|
73 |
-
}
|
74 |
-
d(tvc_validateResponse(f))
|
75 |
-
})
|
76 |
-
}
|
77 |
-
|
78 |
-
function tvc_getCategoryListsFromString(b, a, d, c) {
|
79 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
80 |
-
action: "tvcajax-get-category-lists",
|
81 |
-
channelId: b,
|
82 |
-
mainCategories: a,
|
83 |
-
fileLanguage: d,
|
84 |
-
categoryListsNonce: myAjaxNonces.categoryListsNonce
|
85 |
-
}, function (e) {
|
86 |
-
c(tvc_validateResponse(e))
|
87 |
-
})
|
88 |
-
}
|
89 |
-
|
90 |
-
function tvc_updateFeedToDb(b, a, c, d) {
|
91 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
92 |
-
action: "tvcajax-update-feed-data",
|
93 |
-
feed: JSON.stringify(b),
|
94 |
-
feedFilter: c ? c[0]["meta_value"] : "",
|
95 |
-
metaData: JSON.stringify(a),
|
96 |
-
updateFeedDataNonce: myAjaxNonces.updateFeedDataNonce
|
97 |
-
}, function (e) {
|
98 |
-
d(tvc_validateResponse(e))
|
99 |
-
})
|
100 |
-
}
|
101 |
-
|
102 |
-
function tvc_updateFeedFile(a, b) {
|
103 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
104 |
-
action: "tvcajax-update-feed-file",
|
105 |
-
dataType: "text",
|
106 |
-
feedId: a,
|
107 |
-
updateFeedFileNonce: myAjaxNonces.updateFeedFileNonce
|
108 |
-
}, function (c) {
|
109 |
-
b(tvc_validateResponse(c))
|
110 |
-
})
|
111 |
-
}
|
112 |
-
|
113 |
-
function tvc_getCurrentFeedStatus(a, b) {
|
114 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
115 |
-
action: "tvcajax-get-feed-status",
|
116 |
-
sourceId: a,
|
117 |
-
feedStatusNonce: myAjaxNonces.feedStatusNonce
|
118 |
-
}, function (c) {
|
119 |
-
b(tvc_validateResponse(c))
|
120 |
-
})
|
121 |
-
}
|
122 |
-
|
123 |
-
function tvc_getFeedData(a, b) {
|
124 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
125 |
-
action: "tvcajax-get-feed-data",
|
126 |
-
sourceId: a,
|
127 |
-
feedDataNonce: myAjaxNonces.feedDataNonce
|
128 |
-
}, function (c) {
|
129 |
-
b(tvc_validateResponse(c))
|
130 |
-
})
|
131 |
-
}
|
132 |
-
|
133 |
-
function tvc_switchFeedStatus(a, b) {
|
134 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
135 |
-
action: "tvcajax-switch-feed-status",
|
136 |
-
feedId: a,
|
137 |
-
switchFeedStatusNonce: myAjaxNonces.switchFeedStatusNonce
|
138 |
-
}, function (c) {
|
139 |
-
tvc_switchStatusAction(a, c);
|
140 |
-
b(tvc_validateResponse(c))
|
141 |
-
})
|
142 |
-
}
|
143 |
-
|
144 |
-
function tvc_duplicateExistingFeed(a, b) {
|
145 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
146 |
-
action: "tvcajax-duplicate-existing-feed",
|
147 |
-
feedId: a,
|
148 |
-
duplicateFeedNonce: myAjaxNonces.duplicateFeedNonce
|
149 |
-
}, function (c) {
|
150 |
-
if (c.trim()) {
|
151 |
-
tvc_resetFeedList()
|
152 |
-
}
|
153 |
-
b(tvc_validateResponse(c))
|
154 |
-
})
|
155 |
-
}
|
156 |
-
|
157 |
-
function tvc_logMessageOnServer(a, c, b) {
|
158 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
159 |
-
action: "tvcajax-log-message",
|
160 |
-
messageList: a,
|
161 |
-
fileName: c,
|
162 |
-
logMessageNonce: myAjaxNonces.logMessageNonce
|
163 |
-
}, function (d) {
|
164 |
-
b(d.trim())
|
165 |
-
})
|
166 |
-
}
|
167 |
-
|
168 |
-
function tvc_auto_feed_fix_mode(a, b) {
|
169 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
170 |
-
action: "tvcajax-auto-feed-fix-mode-selection",
|
171 |
-
fix_selection: a,
|
172 |
-
updateAutoFeedFixNonce: myAjaxNonces.setAutoFeedFixNonce
|
173 |
-
}, function (c) {
|
174 |
-
b(c.trim())
|
175 |
-
})
|
176 |
-
}
|
177 |
-
|
178 |
-
function tvc_background_processing_mode(a, b) {
|
179 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
180 |
-
action: "tvcajax-background-processing-mode-selection",
|
181 |
-
mode_selection: a,
|
182 |
-
backgroundModeNonce: myAjaxNonces.setBackgroundModeNonce
|
183 |
-
}, function (c) {
|
184 |
-
b(c.trim())
|
185 |
-
})
|
186 |
-
}
|
187 |
-
|
188 |
-
function tvc_feed_logger_status(a, b) {
|
189 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
190 |
-
action: "tvcajax-feed-logger-status-selection",
|
191 |
-
statusSelection: a,
|
192 |
-
feedLoggerStatusNonce: myAjaxNonces.setFeedLoggerStatusNonce
|
193 |
-
}, function (c) {
|
194 |
-
b(c.trim())
|
195 |
-
})
|
196 |
-
}
|
197 |
-
|
198 |
-
function tvc_show_pi_status(a, b) {
|
199 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
200 |
-
action: "tvcajax-show-product-identifiers-selection",
|
201 |
-
showPiSelection: a,
|
202 |
-
showPINonce: myAjaxNonces.setShowPINonce
|
203 |
-
}, function (c) {
|
204 |
-
b(c.trim())
|
205 |
-
})
|
206 |
-
}
|
207 |
-
|
208 |
-
function tvc_change_third_party_attribute_keywords(a, b) {
|
209 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
210 |
-
action: "tvcajax-third-party-attribute-keywords",
|
211 |
-
keywords: a,
|
212 |
-
thirdPartyKeywordsNonce: myAjaxNonces.setThirdPartyKeywordsNonce
|
213 |
-
}, function (c) {
|
214 |
-
b(c.trim())
|
215 |
-
})
|
216 |
-
}
|
217 |
-
|
218 |
-
function tvc_change_notice_mailaddress(a, b) {
|
219 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
220 |
-
action: "tvcajax-set-notice-mailaddress",
|
221 |
-
mailaddress: a,
|
222 |
-
noticeMailaddressNonce: myAjaxNonces.setNoticeMailaddressNonce
|
223 |
-
}, function (c) {
|
224 |
-
b(c.trim())
|
225 |
-
})
|
226 |
-
}
|
227 |
-
|
228 |
-
function tvc_change_background_processing_time_limit(a, b) {
|
229 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
230 |
-
action: "tvcajax-background-processing-time-limit",
|
231 |
-
limit: a,
|
232 |
-
batchProcessingLimitNonce: myAjaxNonces.setBatchProcessingLimitNonce
|
233 |
-
}, function (c) {
|
234 |
-
b(c.trim())
|
235 |
-
})
|
236 |
-
}
|
237 |
-
|
238 |
-
function tvc_clear_feed_process_data(a) {
|
239 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
240 |
-
action: "tvcajax-clear-feed-process-data",
|
241 |
-
clearFeedNonce: myAjaxNonces.setClearFeedProcessNonce
|
242 |
-
}, function (b) {
|
243 |
-
a(b)
|
244 |
-
})
|
245 |
-
}
|
246 |
-
|
247 |
-
function tvc_reinitiate_plugin(a) {
|
248 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
249 |
-
action: "tvcajax-reinitiate-plugin",
|
250 |
-
reInitiateNonce: myAjaxNonces.setReInitiateNonce
|
251 |
-
}, function (b) {
|
252 |
-
a(b)
|
253 |
-
})
|
254 |
-
}
|
255 |
-
|
256 |
-
function tvc_validateResponse(a) {
|
257 |
-
a = a.trim();
|
258 |
-
if (a.indexOf("<div id='error'>") < 0 && a.indexOf("<b>Fatal error</b>") < 0 && a.indexOf("<b>Notice</b>") < 0 && a.indexOf("<b>Warning</b>") < 0 && a.indexOf("<b>Catchable fatal error</b>") < 0 && a.indexOf('<div id="error">') < 0) {
|
259 |
-
if (a.indexOf("[]") < 0) {
|
260 |
-
if (a !== "") {
|
261 |
-
return (a)
|
262 |
-
} else {
|
263 |
-
return ("1")
|
264 |
-
}
|
265 |
-
} else {
|
266 |
-
return ("0")
|
267 |
-
}
|
268 |
-
} else {
|
269 |
-
tvc_show_error_message(a.replace("[]", ""));
|
270 |
-
tvc_hideFeedSpinner();
|
271 |
-
tvc_logMessageOnServer(a, "error", function (b) {
|
272 |
-
return ("0")
|
273 |
-
})
|
274 |
-
}
|
275 |
-
}
|
276 |
-
|
277 |
-
function tvc_deleteFeed(d, b) {
|
278 |
-
var a = jQuery("#feed-spinner");
|
279 |
-
var c = jQuery("#feed-list-message");
|
280 |
-
c.empty();
|
281 |
-
tvc_removeFeedFile(function () {
|
282 |
-
a.show();
|
283 |
-
tvc_deleteFeedFromDb(d, function (e) {
|
284 |
-
a.show();
|
285 |
-
e = e.trim();
|
286 |
-
if (e === "1") {
|
287 |
-
tvc_resetFeedList();
|
288 |
-
a.hide()
|
289 |
-
} else {
|
290 |
-
c.append(e);
|
291 |
-
a.hide()
|
292 |
-
}
|
293 |
-
}, d)
|
294 |
-
}, b)
|
295 |
-
}
|
296 |
-
|
297 |
-
function tvc_removeFeedFile(b, a) {
|
298 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
299 |
-
action: "tvcajax-delete-feed-file",
|
300 |
-
fileTitle: a,
|
301 |
-
deleteFeedNonce: myAjaxNonces.deleteFeedNonce
|
302 |
-
}, function (c) {
|
303 |
-
b(tvc_validateResponse(c))
|
304 |
-
})
|
305 |
-
}
|
306 |
-
|
307 |
-
function tvc_deleteFeedFromDb(a, b) {
|
308 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
309 |
-
action: "tvcajax-delete-feed",
|
310 |
-
feedId: a,
|
311 |
-
deleteFeedNonce: myAjaxNonces.deleteFeedNonce
|
312 |
-
}, function (c) {
|
313 |
-
b(tvc_validateResponse(c))
|
314 |
-
})
|
315 |
-
}
|
316 |
-
|
317 |
-
function tvc_checkNextFeedInQueue(a) {
|
318 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
319 |
-
action: "tvcajax-get-next-feed-in-queue",
|
320 |
-
nextFeedInQueueNonce: myAjaxNonces.nextFeedInQueueNonce
|
321 |
-
}, function (b) {
|
322 |
-
a(tvc_validateResponse(b))
|
323 |
-
})
|
324 |
-
}
|
325 |
-
|
326 |
-
function tvc_initiateBackup(b, a) {
|
327 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
328 |
-
action: "tvcajax-backup-current-data",
|
329 |
-
fileName: b,
|
330 |
-
backupNonce: myAjaxNonces.backupNonce
|
331 |
-
}, function (c) {
|
332 |
-
a(tvc_validateResponse(c))
|
333 |
-
})
|
334 |
-
}
|
335 |
-
|
336 |
-
function tvc_deleteBackup(b, a) {
|
337 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
338 |
-
action: "tvcajax-delete-backup-file",
|
339 |
-
fileName: b,
|
340 |
-
deleteBackupNonce: myAjaxNonces.deleteBackupNonce
|
341 |
-
}, function (c) {
|
342 |
-
a(tvc_validateResponse(c))
|
343 |
-
})
|
344 |
-
}
|
345 |
-
|
346 |
-
function tvc_restoreBackup(b, a) {
|
347 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
348 |
-
action: "tvcajax-restore-backup-file",
|
349 |
-
fileName: b,
|
350 |
-
restoreBackupNonce: myAjaxNonces.restoreBackupNonce
|
351 |
-
}, function (c) {
|
352 |
-
a(tvc_validateResponse(c))
|
353 |
-
})
|
354 |
-
}
|
355 |
-
|
356 |
-
function tvc_duplicateBackup(b, a) {
|
357 |
-
jQuery.post(myAjaxNonces.ajaxurl, {
|
358 |
-
action: "tvcajax-duplicate-backup-file",
|
359 |
-
fileName: b,
|
360 |
-
duplicateBackupNonce: myAjaxNonces.duplicateBackupNonce
|
361 |
-
}, function (c) {
|
362 |
-
a(tvc_validateResponse(c))
|
363 |
-
})
|
364 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/setup/CustomApi.php
CHANGED
@@ -60,8 +60,6 @@ class CustomApi{
|
|
60 |
// ));
|
61 |
// $this->response = curl_exec($ch);
|
62 |
// $this->response = json_decode($this->response);
|
63 |
-
// echo "<pre>";
|
64 |
-
// print_r($this->response);
|
65 |
// die;
|
66 |
|
67 |
$url = $this->apiDomain . '/plans/feature-list';
|
@@ -103,6 +101,10 @@ class CustomApi{
|
|
103 |
public function getGoogleAnalyticDetail() {
|
104 |
try {
|
105 |
$url = $this->apiDomain . '/customer-subscriptions/subscription-detail';
|
|
|
|
|
|
|
|
|
106 |
$ee_options_data = unserialize(get_option('ee_options'));
|
107 |
if(isset($ee_options_data['subscription_id'])) {
|
108 |
$ee_subscription_id = $ee_options_data['subscription_id'];
|
@@ -114,22 +116,18 @@ class CustomApi{
|
|
114 |
'subscription_id' => $ee_subscription_id,
|
115 |
'domain' => $actual_link
|
116 |
];
|
117 |
-
$
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
$
|
129 |
-
$response_message = wp_remote_retrieve_response_message($request);
|
130 |
-
$response_body = json_decode(wp_remote_retrieve_body($request));
|
131 |
-
|
132 |
-
if ((isset($response_body->error) && $response_body->error == '')) {
|
133 |
if ($response_body->data) {
|
134 |
$store_raw_country = get_option('woocommerce_default_country');
|
135 |
// Split the country/state
|
@@ -148,20 +146,31 @@ class CustomApi{
|
|
148 |
$GLOBALS['tatvicData']['refresh_token'] = $response_body->data->refresh_token;
|
149 |
$_SESSION['access_token'] = $response_body->data->access_token;
|
150 |
$_SESSION['refresh_token'] = $response_body->data->refresh_token;
|
151 |
-
//exit;
|
152 |
-
|
153 |
}
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
165 |
} catch (Exception $e) {
|
166 |
return $e->getMessage();
|
167 |
}
|
@@ -204,14 +213,62 @@ class CustomApi{
|
|
204 |
return $e->getMessage();
|
205 |
}
|
206 |
}
|
207 |
-
|
208 |
-
public function verifyLicenceKey($postData) {
|
209 |
try {
|
210 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
211 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
212 |
$data = [
|
213 |
-
'key' => $
|
214 |
-
'domain' =>
|
215 |
];
|
216 |
$args = array(
|
217 |
'headers' => array(
|
@@ -221,23 +278,14 @@ class CustomApi{
|
|
221 |
'method' => 'POST',
|
222 |
'body' => wp_json_encode($data)
|
223 |
);
|
224 |
-
|
225 |
// Send remote request
|
226 |
$request = wp_remote_post($url, $args);
|
227 |
-
|
228 |
// Retrieve information
|
229 |
$response_code = wp_remote_retrieve_response_code($request);
|
230 |
$response_message = wp_remote_retrieve_response_message($request);
|
231 |
$response_body = json_decode(wp_remote_retrieve_body($request));
|
232 |
if ((isset($response_body->error) && $response_body->error == '')) {
|
233 |
-
|
234 |
-
return new WP_REST_Response(
|
235 |
-
array(
|
236 |
-
'status' => $response_code,
|
237 |
-
'message' => $response_message,
|
238 |
-
'data' => $response_body->data
|
239 |
-
)
|
240 |
-
);
|
241 |
} else {
|
242 |
return new WP_Error($response_code, $response_message, $response_body);
|
243 |
}
|
@@ -323,7 +371,8 @@ class CustomApi{
|
|
323 |
}
|
324 |
|
325 |
public function getSyncProductList($postData) {
|
326 |
-
try {
|
|
|
327 |
$header = array(
|
328 |
"Authorization: Bearer MTIzNA==",
|
329 |
"content-type: application/json",
|
@@ -335,7 +384,7 @@ class CustomApi{
|
|
335 |
curl_setopt_array($ch, array(
|
336 |
CURLOPT_URL => esc_url($curl_url),
|
337 |
CURLOPT_RETURNTRANSFER => true,
|
338 |
-
CURLOPT_TIMEOUT =>
|
339 |
CURLOPT_HTTPHEADER => $header,
|
340 |
CURLOPT_POSTFIELDS => $postData
|
341 |
));
|
@@ -357,32 +406,6 @@ class CustomApi{
|
|
357 |
}
|
358 |
return $return;
|
359 |
}
|
360 |
-
|
361 |
-
// $url = $this->apiDomain . '/products/list';
|
362 |
-
// $args = array(
|
363 |
-
// 'headers' => array(
|
364 |
-
// 'Authorization' => "Bearer $this->token",
|
365 |
-
// 'Content-Type' => 'application/json'
|
366 |
-
// ),
|
367 |
-
// 'body' => wp_json_encode($postData)
|
368 |
-
// );
|
369 |
-
// // Send remote request
|
370 |
-
// $request = wp_remote_post($url, $args);
|
371 |
-
// // Retrieve information
|
372 |
-
// $response_code = wp_remote_retrieve_response_code($request);
|
373 |
-
// $response_message = wp_remote_retrieve_response_message($request);
|
374 |
-
// $response_body = json_decode(wp_remote_retrieve_body($request));
|
375 |
-
// if ((isset($response_body->error) && $response_body->error == '')) {
|
376 |
-
// return new WP_REST_Response(
|
377 |
-
// array(
|
378 |
-
// 'status' => $response_code,
|
379 |
-
// 'message' => $response_message,
|
380 |
-
// 'data' => $response_body->data
|
381 |
-
// )
|
382 |
-
// );
|
383 |
-
// } else {
|
384 |
-
// return new WP_Error($response_code, $response_message, $response_body);
|
385 |
-
// }
|
386 |
} catch (Exception $e) {
|
387 |
return $e->getMessage();
|
388 |
}
|
@@ -734,4 +757,4 @@ class CustomApi{
|
|
734 |
}
|
735 |
}
|
736 |
|
737 |
-
}
|
60 |
// ));
|
61 |
// $this->response = curl_exec($ch);
|
62 |
// $this->response = json_decode($this->response);
|
|
|
|
|
63 |
// die;
|
64 |
|
65 |
$url = $this->apiDomain . '/plans/feature-list';
|
101 |
public function getGoogleAnalyticDetail() {
|
102 |
try {
|
103 |
$url = $this->apiDomain . '/customer-subscriptions/subscription-detail';
|
104 |
+
$header = array(
|
105 |
+
"Authorization: Bearer ".$this->token,
|
106 |
+
"content-type: application/json"
|
107 |
+
);
|
108 |
$ee_options_data = unserialize(get_option('ee_options'));
|
109 |
if(isset($ee_options_data['subscription_id'])) {
|
110 |
$ee_subscription_id = $ee_options_data['subscription_id'];
|
116 |
'subscription_id' => $ee_subscription_id,
|
117 |
'domain' => $actual_link
|
118 |
];
|
119 |
+
$postData = json_encode($data);
|
120 |
+
$ch = curl_init();
|
121 |
+
curl_setopt_array($ch, array(
|
122 |
+
CURLOPT_URL => $url,
|
123 |
+
CURLOPT_RETURNTRANSFER => true,
|
124 |
+
CURLOPT_TIMEOUT => 1000,
|
125 |
+
CURLOPT_HTTPHEADER => $header,
|
126 |
+
CURLOPT_POSTFIELDS => $postData
|
127 |
+
));
|
128 |
+
$response = curl_exec($ch);
|
129 |
+
$response_body = json_decode($response);
|
130 |
+
if((isset($response_body->error) && $response_body->error == '')) {
|
|
|
|
|
|
|
|
|
131 |
if ($response_body->data) {
|
132 |
$store_raw_country = get_option('woocommerce_default_country');
|
133 |
// Split the country/state
|
146 |
$GLOBALS['tatvicData']['refresh_token'] = $response_body->data->refresh_token;
|
147 |
$_SESSION['access_token'] = $response_body->data->access_token;
|
148 |
$_SESSION['refresh_token'] = $response_body->data->refresh_token;
|
|
|
|
|
149 |
}
|
150 |
+
$return = new \stdClass();
|
151 |
+
if (isset($response_body->error) && $response_body->error == '') {
|
152 |
+
$return->error = false;
|
153 |
+
$return->data = $response_body->data;
|
154 |
+
$return->message = $response_body->message;
|
155 |
+
return $return;
|
156 |
+
} else {
|
157 |
+
if (isset($response_body->data)) {
|
158 |
+
$return->error = false;
|
159 |
+
$return->data = $response_body->data;
|
160 |
+
$return->message = $response_body->message;
|
161 |
+
} else {
|
162 |
+
$return->error = true;
|
163 |
+
$return->data = [];
|
164 |
+
if(isset($response_body->errors->key[0])){
|
165 |
+
$return->message = $response_body->errors->key[0];
|
166 |
+
}else{
|
167 |
+
$return->message = "Please try after some time.";
|
168 |
+
}
|
169 |
+
}
|
170 |
+
return $return;
|
171 |
+
}
|
172 |
+
//return (object) array( 'status' => $response_code, 'message' => $response_message, 'data' => $response_body->data );
|
173 |
+
}
|
174 |
} catch (Exception $e) {
|
175 |
return $e->getMessage();
|
176 |
}
|
213 |
return $e->getMessage();
|
214 |
}
|
215 |
}
|
216 |
+
public function active_licence_Key($licence_key, $subscription_id) {
|
|
|
217 |
try {
|
218 |
+
$header = array(
|
219 |
+
"Authorization: Bearer MTIzNA==",
|
220 |
+
"content-type: application/json"
|
221 |
+
);
|
222 |
+
$curl_url = $this->apiDomain . "/licence/activation";
|
223 |
+
$postData = [
|
224 |
+
'key' => $licence_key,
|
225 |
+
'domain' => get_site_url(),
|
226 |
+
'subscription_id'=>$subscription_id
|
227 |
+
];
|
228 |
+
$postData = json_encode($postData);
|
229 |
+
$ch = curl_init();
|
230 |
+
curl_setopt_array($ch, array(
|
231 |
+
CURLOPT_URL => esc_url($curl_url),
|
232 |
+
CURLOPT_RETURNTRANSFER => true,
|
233 |
+
CURLOPT_TIMEOUT => 1000,
|
234 |
+
CURLOPT_HTTPHEADER => $header,
|
235 |
+
CURLOPT_POSTFIELDS => $postData
|
236 |
+
));
|
237 |
+
$response = curl_exec($ch);
|
238 |
+
$response = json_decode($response);
|
239 |
+
$return = new \stdClass();
|
240 |
+
if (isset($response->error) && $response->error == '') {
|
241 |
+
$return->error = false;
|
242 |
+
$return->data = $response->data;
|
243 |
+
$return->message = $response->message;
|
244 |
+
return $return;
|
245 |
+
} else {
|
246 |
+
if (isset($response->data)) {
|
247 |
+
$return->error = false;
|
248 |
+
$return->data = $response->data;
|
249 |
+
$return->message = $response->message;
|
250 |
+
} else {
|
251 |
+
$return->error = true;
|
252 |
+
$return->data = [];
|
253 |
+
if(isset($response->errors->key[0])){
|
254 |
+
$return->message = $response->errors->key[0];
|
255 |
+
}else{
|
256 |
+
$return->message = "Check your entered licese key.";
|
257 |
+
}
|
258 |
|
259 |
+
}
|
260 |
+
return $return;
|
261 |
+
}
|
262 |
+
} catch (Exception $e) {
|
263 |
+
return $e->getMessage();
|
264 |
+
}
|
265 |
+
}
|
266 |
+
public function verifyLicenceKey($licence_key, $subscription_id) {
|
267 |
+
try {
|
268 |
+
echo $url = $this->apiDomain . '/licence/verify-key';
|
269 |
$data = [
|
270 |
+
'key' => $licence_key,
|
271 |
+
'domain' => get_site_url()
|
272 |
];
|
273 |
$args = array(
|
274 |
'headers' => array(
|
278 |
'method' => 'POST',
|
279 |
'body' => wp_json_encode($data)
|
280 |
);
|
|
|
281 |
// Send remote request
|
282 |
$request = wp_remote_post($url, $args);
|
|
|
283 |
// Retrieve information
|
284 |
$response_code = wp_remote_retrieve_response_code($request);
|
285 |
$response_message = wp_remote_retrieve_response_message($request);
|
286 |
$response_body = json_decode(wp_remote_retrieve_body($request));
|
287 |
if ((isset($response_body->error) && $response_body->error == '')) {
|
288 |
+
return new WP_REST_Response(array('status' => $response_code, 'message' => $response_message,'data' => $response_body->data ));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
289 |
} else {
|
290 |
return new WP_Error($response_code, $response_message, $response_body);
|
291 |
}
|
371 |
}
|
372 |
|
373 |
public function getSyncProductList($postData) {
|
374 |
+
try {
|
375 |
+
$postData["maxResults"] = 100;
|
376 |
$header = array(
|
377 |
"Authorization: Bearer MTIzNA==",
|
378 |
"content-type: application/json",
|
384 |
curl_setopt_array($ch, array(
|
385 |
CURLOPT_URL => esc_url($curl_url),
|
386 |
CURLOPT_RETURNTRANSFER => true,
|
387 |
+
CURLOPT_TIMEOUT => 1000,
|
388 |
CURLOPT_HTTPHEADER => $header,
|
389 |
CURLOPT_POSTFIELDS => $postData
|
390 |
));
|
406 |
}
|
407 |
return $return;
|
408 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
409 |
} catch (Exception $e) {
|
410 |
return $e->getMessage();
|
411 |
}
|
757 |
}
|
758 |
}
|
759 |
|
760 |
+
}
|
includes/setup/ShoppingApi.php
CHANGED
@@ -11,7 +11,7 @@ class ShoppingApi {
|
|
11 |
$this->customApiObj = new CustomApi();
|
12 |
$this->customApiObj->getGoogleAnalyticDetail();
|
13 |
|
14 |
-
|
15 |
$this->apiDomain = TVC_API_CALL_URL;
|
16 |
//$this->apiDomain = 'http://127.0.0.1:8000/api';
|
17 |
$this->token = 'MTIzNA==';
|
@@ -37,7 +37,6 @@ class ShoppingApi {
|
|
37 |
|
38 |
// Send remote request
|
39 |
$request = wp_remote_post($url, $args);
|
40 |
-
//print_r($request);
|
41 |
// Retrieve information
|
42 |
$response_code = wp_remote_retrieve_response_code($request);
|
43 |
$response_message = wp_remote_retrieve_response_message($request);
|
@@ -310,11 +309,10 @@ class ShoppingApi {
|
|
310 |
'body' => wp_json_encode($data)
|
311 |
);
|
312 |
|
313 |
-
|
314 |
-
print_r($args); */
|
315 |
// Send remote request
|
316 |
$request = wp_remote_post($url, $args);
|
317 |
-
|
318 |
|
319 |
// Retrieve information
|
320 |
$response_code = wp_remote_retrieve_response_code($request);
|
@@ -359,20 +357,16 @@ class ShoppingApi {
|
|
359 |
),
|
360 |
'body' => wp_json_encode($data)
|
361 |
);
|
362 |
-
|
363 |
-
|
364 |
// Send remote request
|
365 |
$request = wp_remote_post($url, $args);
|
366 |
-
|
367 |
-
|
368 |
// Retrieve information
|
369 |
$response_code = wp_remote_retrieve_response_code($request);
|
370 |
$response_message = wp_remote_retrieve_response_message($request);
|
371 |
$response_body = json_decode(wp_remote_retrieve_body($request));
|
372 |
-
//
|
373 |
-
// print_r($response_message);
|
374 |
-
// print_r($response_body);
|
375 |
-
// exit;
|
376 |
if (!is_wp_error($request) && (isset($response_body->error) && $response_body->error == '')) {
|
377 |
// return new WP_REST_Response(
|
378 |
// array(
|
@@ -418,11 +412,10 @@ class ShoppingApi {
|
|
418 |
'body' => wp_json_encode($data)
|
419 |
);
|
420 |
|
421 |
-
|
422 |
-
print_r($args); */
|
423 |
// Send remote request
|
424 |
$request = wp_remote_request($url, $args);
|
425 |
-
|
426 |
|
427 |
// Retrieve information
|
428 |
$response_code = wp_remote_retrieve_response_code($request);
|
11 |
$this->customApiObj = new CustomApi();
|
12 |
$this->customApiObj->getGoogleAnalyticDetail();
|
13 |
|
14 |
+
//$queries = new TVC_Queries();
|
15 |
$this->apiDomain = TVC_API_CALL_URL;
|
16 |
//$this->apiDomain = 'http://127.0.0.1:8000/api';
|
17 |
$this->token = 'MTIzNA==';
|
37 |
|
38 |
// Send remote request
|
39 |
$request = wp_remote_post($url, $args);
|
|
|
40 |
// Retrieve information
|
41 |
$response_code = wp_remote_retrieve_response_code($request);
|
42 |
$response_message = wp_remote_retrieve_response_message($request);
|
309 |
'body' => wp_json_encode($data)
|
310 |
);
|
311 |
|
312 |
+
|
|
|
313 |
// Send remote request
|
314 |
$request = wp_remote_post($url, $args);
|
315 |
+
|
316 |
|
317 |
// Retrieve information
|
318 |
$response_code = wp_remote_retrieve_response_code($request);
|
357 |
),
|
358 |
'body' => wp_json_encode($data)
|
359 |
);
|
360 |
+
|
361 |
+
|
362 |
// Send remote request
|
363 |
$request = wp_remote_post($url, $args);
|
364 |
+
|
|
|
365 |
// Retrieve information
|
366 |
$response_code = wp_remote_retrieve_response_code($request);
|
367 |
$response_message = wp_remote_retrieve_response_message($request);
|
368 |
$response_body = json_decode(wp_remote_retrieve_body($request));
|
369 |
+
//
|
|
|
|
|
|
|
370 |
if (!is_wp_error($request) && (isset($response_body->error) && $response_body->error == '')) {
|
371 |
// return new WP_REST_Response(
|
372 |
// array(
|
412 |
'body' => wp_json_encode($data)
|
413 |
);
|
414 |
|
415 |
+
|
|
|
416 |
// Send remote request
|
417 |
$request = wp_remote_request($url, $args);
|
418 |
+
|
419 |
|
420 |
// Retrieve information
|
421 |
$response_code = wp_remote_retrieve_response_code($request);
|
includes/setup/SmartShoppingCampaign.php
DELETED
@@ -1,431 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
//require __DIR__ . '/../../vendor/autoload.php';
|
4 |
-
|
5 |
-
use Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder;
|
6 |
-
use Google\Ads\GoogleAds\Lib\V4\GoogleAdsClientBuilder;
|
7 |
-
use Google\Ads\GoogleAds\V4\Resources\CampaignBudget;
|
8 |
-
use Google\Ads\GoogleAds\V4\Enums\BudgetDeliveryMethodEnum\BudgetDeliveryMethod;
|
9 |
-
use Google\Ads\GoogleAds\V4\Services\CampaignBudgetOperation;
|
10 |
-
use Google\Ads\GoogleAds\V4\Resources\Campaign\ShoppingSetting;
|
11 |
-
use Google\Ads\GoogleAds\V4\Resources\Campaign;
|
12 |
-
use Google\Ads\GoogleAds\V4\Enums\AdvertisingChannelTypeEnum\AdvertisingChannelType;
|
13 |
-
use Google\Ads\GoogleAds\V4\Enums\AdvertisingChannelSubTypeEnum\AdvertisingChannelSubType;
|
14 |
-
use Google\Ads\GoogleAds\V4\Services\CampaignOperation;
|
15 |
-
use Google\Ads\GoogleAds\V4\Common\MaximizeConversionValue;
|
16 |
-
use Google\Ads\GoogleAds\V4\Enums\CampaignStatusEnum\CampaignStatus;
|
17 |
-
use Google\Ads\GoogleAds\V4\Resources\AdGroup;
|
18 |
-
use Google\Ads\GoogleAds\V4\Enums\AdGroupStatusEnum\AdGroupStatus;
|
19 |
-
use Google\Ads\GoogleAds\V4\Enums\AdGroupTypeEnum\AdGroupType;
|
20 |
-
use Google\Ads\GoogleAds\V4\Services\AdGroupOperation;
|
21 |
-
use Google\Ads\GoogleAds\V4\Resources\AdGroupAd;
|
22 |
-
use Google\Ads\GoogleAds\V4\Resources\Ad;
|
23 |
-
use Google\Ads\GoogleAds\V4\Services\AdGroupAdOperation;
|
24 |
-
use Google\Ads\GoogleAds\V4\Common\ShoppingSmartAdInfo;
|
25 |
-
use Google\Ads\GoogleAds\V4\Resources\AdGroupCriterion;
|
26 |
-
use Google\Ads\GoogleAds\V4\Enums\AdGroupAdStatusEnum\AdGroupAdStatus;
|
27 |
-
use Google\Ads\GoogleAds\V4\Common\ListingGroupInfo;
|
28 |
-
use Google\Ads\GoogleAds\V4\Services\AdGroupCriterionOperation;
|
29 |
-
use Google\Ads\GoogleAds\V4\Enums\ListingGroupTypeEnum\ListingGroupType;
|
30 |
-
use Google\Ads\GoogleAds\Lib\V4\GoogleAdsException;
|
31 |
-
use Google\ApiCore\ApiException;
|
32 |
-
use Google\Ads\GoogleAds\V4\Resources\ConversionAction;
|
33 |
-
use Google\Ads\GoogleAds\V4\Enums\ConversionActionCategoryEnum\ConversionActionCategory;
|
34 |
-
use Google\Ads\GoogleAds\V4\Enums\ConversionActionTypeEnum\ConversionActionType;
|
35 |
-
use Google\Ads\GoogleAds\V4\Enums\ConversionActionStatusEnum\ConversionActionStatus;
|
36 |
-
use Google\Ads\GoogleAds\V4\Services\ConversionActionOperation;
|
37 |
-
use Google\Ads\GoogleAds\Util\V4\ResourceNames;
|
38 |
-
|
39 |
-
class SmartShoppingCampaign
|
40 |
-
{
|
41 |
-
private $customerId;
|
42 |
-
private $merchantId;
|
43 |
-
private $credentials;
|
44 |
-
private $createDefaultListing;
|
45 |
-
private $oAuth2Credential;
|
46 |
-
private $googleAdsClient;
|
47 |
-
private $budgetResourceName;
|
48 |
-
|
49 |
-
public function __construct()
|
50 |
-
{
|
51 |
-
$queries = new TVC_Queries();
|
52 |
-
|
53 |
-
$this->customerId = $queries->get_set_ads_account_id();
|
54 |
-
// $this->customerId = TVC_CUSTOMER;
|
55 |
-
$this->merchantId = $queries->get_set_merchant_id();
|
56 |
-
// $this->merchantId = TVC_MERCHANT;
|
57 |
-
$this->merchantId = (isset($GLOBALS['tatvicData']['tvc_merchant'])) ? $GLOBALS['tatvicData']['tvc_merchant']:"";
|
58 |
-
$this->customerId = (isset($GLOBALS['tatvicData']['tvc_customer'])) ? $GLOBALS['tatvicData']['tvc_customer']:"";
|
59 |
-
|
60 |
-
$this->createDefualtListing = true;
|
61 |
-
|
62 |
-
$credentials_file = ENHANCAD_PLUGIN_DIR.'includes/setup/json/client-secrets.json';
|
63 |
-
$str = file_get_contents($credentials_file);
|
64 |
-
$this->credentials = $str ? json_decode($str, true) : [];
|
65 |
-
|
66 |
-
// Generate a refreshable OAuth2 credential for authentication.
|
67 |
-
$this->oAuth2Credential = (new OAuth2TokenBuilder())
|
68 |
-
->withClientId($this->credentials['web']['client_id'])
|
69 |
-
->withClientSecret($this->credentials['web']['client_secret'])
|
70 |
-
->withRefreshToken($this->credentials['web']['manager_refresh_token'])
|
71 |
-
->build();
|
72 |
-
|
73 |
-
// Construct a Google Ads client configured from a properties file and the
|
74 |
-
// OAuth2 credentials above.
|
75 |
-
$this->googleAdsClient = (new GoogleAdsClientBuilder())
|
76 |
-
->fromFile(ENHANCAD_PLUGIN_DIR.'/google_ads_php.ini')
|
77 |
-
->withOAuth2Credential($this->oAuth2Credential)
|
78 |
-
->build();
|
79 |
-
|
80 |
-
}
|
81 |
-
|
82 |
-
public function getCustomerCurrency() {
|
83 |
-
$customerServiceClient = $this->googleAdsClient->getCustomerServiceClient();
|
84 |
-
$customer = $customerServiceClient->getCustomer(ResourceNames::forCustomer($this->customerId));
|
85 |
-
$currencyCode = $customer->getCurrencyCode();
|
86 |
-
return $currencyCode->getValue();
|
87 |
-
}
|
88 |
-
public function createConversionAction() {
|
89 |
-
// Creates a conversion action.
|
90 |
-
$conversionAction = new ConversionAction([
|
91 |
-
'name' => 'Conversion Action #' . uniqid(),
|
92 |
-
'category' => ConversionActionCategory::PBDEFAULT,
|
93 |
-
'type' => ConversionActionType::WEBPAGE,
|
94 |
-
'status' => ConversionActionStatus::ENABLED,
|
95 |
-
'view_through_lookback_window_days' => 15,
|
96 |
-
// 'value_settings' => new ValueSettings([
|
97 |
-
// 'default_value' => 23.41,
|
98 |
-
// 'always_use_default_value' => true
|
99 |
-
// ])
|
100 |
-
]);
|
101 |
-
|
102 |
-
// Creates a conversion action operation.
|
103 |
-
$conversionActionOperation = new ConversionActionOperation();
|
104 |
-
$conversionActionOperation->setCreate($conversionAction);
|
105 |
-
|
106 |
-
// Issues a mutate request to add the conversion action.
|
107 |
-
$conversionActionServiceClient = $this->googleAdsClient->getConversionActionServiceClient();
|
108 |
-
$response = $conversionActionServiceClient->mutateConversionActions(
|
109 |
-
$this->customerId,
|
110 |
-
[$conversionActionOperation]
|
111 |
-
);
|
112 |
-
|
113 |
-
// printf("Added %d conversion actions:%s", $response->getResults()->count(), PHP_EOL);
|
114 |
-
|
115 |
-
foreach ($response->getResults() as $addedConversionAction) {
|
116 |
-
return $addedConversionAction->getResourceName();
|
117 |
-
/** @var ConversionAction $addedConversionAction */
|
118 |
-
printf(
|
119 |
-
"New conversion action added with resource name: '%s'%s",
|
120 |
-
$addedConversionAction->getResourceName(),
|
121 |
-
PHP_EOL
|
122 |
-
);
|
123 |
-
}
|
124 |
-
}
|
125 |
-
/**
|
126 |
-
* Creates a new campaign budget for Smart Shopping ads in the specified client account.
|
127 |
-
*
|
128 |
-
* @param GoogleAdsClient $googleAdsClient the Google Ads API client
|
129 |
-
* @param int $customerId the customer ID
|
130 |
-
* @return string the resource name of the newly created budget
|
131 |
-
*/
|
132 |
-
public function addCampaignBudget($campaign_name, $budget) {
|
133 |
-
// Creates a campaign budget.
|
134 |
-
$budget = new CampaignBudget([
|
135 |
-
'name' => $campaign_name .'Budget #' . uniqid(),
|
136 |
-
'delivery_method' => BudgetDeliveryMethod::STANDARD,
|
137 |
-
// The budget is specified in the local currency of the account.
|
138 |
-
// The amount should be specified in micros, where one million is equivalent to one
|
139 |
-
// unit.
|
140 |
-
'amount_micros' => $budget * 1000000,
|
141 |
-
// Budgets for Smart Shopping campaigns cannot be shared.
|
142 |
-
'explicitly_shared' => false
|
143 |
-
]);
|
144 |
-
|
145 |
-
// Creates a campaign budget operation.
|
146 |
-
$campaignBudgetOperation = new CampaignBudgetOperation();
|
147 |
-
$campaignBudgetOperation->setCreate($budget);
|
148 |
-
|
149 |
-
// Issues a mutate request.
|
150 |
-
$campaignBudgetServiceClient = $this->googleAdsClient->getCampaignBudgetServiceClient();
|
151 |
-
$response = $campaignBudgetServiceClient->mutateCampaignBudgets(
|
152 |
-
$this->customerId,
|
153 |
-
[$campaignBudgetOperation]
|
154 |
-
);
|
155 |
-
|
156 |
-
/** @var CampaignBudget $addedBudget */
|
157 |
-
$addedBudget = $response->getResults()[0];
|
158 |
-
// printf(
|
159 |
-
// "Added a budget with resource name '%s'.%s",
|
160 |
-
// $addedBudget->getResourceName(),
|
161 |
-
// PHP_EOL
|
162 |
-
// );
|
163 |
-
$this->budgetResourceName = $addedBudget->getResourceName();
|
164 |
-
return $addedBudget->getResourceName();
|
165 |
-
}
|
166 |
-
|
167 |
-
/**
|
168 |
-
* Creates a new shopping campaign for Smart Shopping ads in the specified client account.
|
169 |
-
*
|
170 |
-
* @param GoogleAdsClient $googleAdsClient the Google Ads API client
|
171 |
-
* @param int $customerId the customer ID
|
172 |
-
* @param string $budgetResourceName the resource name of budget for a new campaign
|
173 |
-
* @param int $merchantCenterAccountId the Merchant Center account ID
|
174 |
-
* @return string the resource name of the newly created campaign
|
175 |
-
*/
|
176 |
-
|
177 |
-
public function addSmartShoppingCampaign($campaign_name, $budgetResource, $salesCountry) {
|
178 |
-
|
179 |
-
if($salesCountry == '') {
|
180 |
-
$salesCountry = 'US';
|
181 |
-
}
|
182 |
-
// Configures the shopping settings for Smart Shopping campaigns.
|
183 |
-
$shoppingSettings = new ShoppingSetting([
|
184 |
-
// Sets the sales country of products to include in the campaign.
|
185 |
-
// Only products from Merchant Center targeting this country will appear in the
|
186 |
-
// campaign.
|
187 |
-
'sales_country' => $salesCountry,
|
188 |
-
'merchant_id' => $this->merchantId
|
189 |
-
]);
|
190 |
-
|
191 |
-
// Creates the campaign.
|
192 |
-
$campaign = new Campaign([
|
193 |
-
'name' => $campaign_name .'Campaign #' . uniqid(),
|
194 |
-
// Configures settings related to shopping campaigns including
|
195 |
-
// advertising channel type, advertising sub-type and shopping setting.
|
196 |
-
'advertising_channel_type' => AdvertisingChannelType::SHOPPING,
|
197 |
-
'advertising_channel_sub_type' => AdvertisingChannelSubType::SHOPPING_SMART_ADS,
|
198 |
-
'shopping_setting' => $shoppingSettings,
|
199 |
-
// Recommendation: Set the campaign to PAUSED when creating it to prevent
|
200 |
-
// the ads from immediately serving. Set to ENABLED once you've added
|
201 |
-
// targeting and the ads are ready to serve.
|
202 |
-
'status' => CampaignStatus::PAUSED,
|
203 |
-
// 'bidding_strategy_type' => BiddingStrategyType::TARGET_CPA,
|
204 |
-
// Bidding strategy must be set directly on the campaign.
|
205 |
-
// Setting a portfolio bidding strategy by resource name is not supported.
|
206 |
-
// Maximize conversion value is the only strategy supported for Smart Shopping
|
207 |
-
// campaigns.
|
208 |
-
// An optional ROAS (Return on Advertising Spend) can be set for
|
209 |
-
// MaximizeConversionValue.
|
210 |
-
// The ROAS value must be specified as a ratio in the API. It is calculated by dividing
|
211 |
-
// "total value" by "total spend".
|
212 |
-
// For more information on maximize conversion value, see the support article:
|
213 |
-
// http://support.google.com/google-ads/answer/7684216.
|
214 |
-
'maximize_conversion_value' => new MaximizeConversionValue(['target_roas' => 3.5]),
|
215 |
-
// Sets the budget.
|
216 |
-
'campaign_budget' => $budgetResource
|
217 |
-
]);
|
218 |
-
|
219 |
-
// Creates a campaign operation.
|
220 |
-
$campaignOperation = new CampaignOperation();
|
221 |
-
$campaignOperation->setCreate($campaign);
|
222 |
-
|
223 |
-
// Issues a mutate request to add the campaign.
|
224 |
-
$campaignServiceClient = $this->googleAdsClient->getCampaignServiceClient();
|
225 |
-
$response = $campaignServiceClient->mutateCampaigns($this->customerId, [$campaignOperation]);
|
226 |
-
|
227 |
-
/** @var Campaign $addedCampaign */
|
228 |
-
$addedCampaign = $response->getResults()[0];
|
229 |
-
$addedCampaignResourceName = $addedCampaign->getResourceName();
|
230 |
-
// printf(
|
231 |
-
// "Added a Smart Shopping campaign with resource name: '%s'.%s",
|
232 |
-
// $addedCampaignResourceName,
|
233 |
-
// PHP_EOL
|
234 |
-
// );
|
235 |
-
|
236 |
-
return $addedCampaignResourceName;
|
237 |
-
}
|
238 |
-
|
239 |
-
/**
|
240 |
-
* Creates a new ad group in the specified Smart Shopping campaign.
|
241 |
-
*
|
242 |
-
* @param GoogleAdsClient $googleAdsClient the Google Ads API client
|
243 |
-
* @param int $customerId the customer ID
|
244 |
-
* @param string $campaignResourceName the resource name of the campaign that
|
245 |
-
* the new ad group will belong to
|
246 |
-
* @return string the resource name of the newly created ad group
|
247 |
-
*/
|
248 |
-
private function addSmartShoppingAdGroup($campaignResourceName) {
|
249 |
-
// Creates an ad group.
|
250 |
-
$adGroup = new AdGroup([
|
251 |
-
'name' => $campaignResourceName .'Ad Group #' . uniqid(),
|
252 |
-
'campaign' => $campaignResourceName,
|
253 |
-
// Sets the ad group type to SHOPPING_SMART_ADS. This cannot be set to other types.
|
254 |
-
'type' => AdGroupType::SHOPPING_SMART_ADS,
|
255 |
-
'status' => AdGroupStatus::ENABLED
|
256 |
-
]);
|
257 |
-
|
258 |
-
// Creates an ad group operation.
|
259 |
-
$adGroupOperation = new AdGroupOperation();
|
260 |
-
$adGroupOperation->setCreate($adGroup);
|
261 |
-
|
262 |
-
// Issues a mutate request to add the ad group.
|
263 |
-
$adGroupServiceClient = $this->googleAdsClient->getAdGroupServiceClient();
|
264 |
-
$response = $adGroupServiceClient->mutateAdGroups($this->customerId, [$adGroupOperation]);
|
265 |
-
|
266 |
-
/** @var AdGroup $addedAdGroup */
|
267 |
-
$addedAdGroup = $response->getResults()[0];
|
268 |
-
$addedAdGroupResourceName = $addedAdGroup->getResourceName();
|
269 |
-
// printf(
|
270 |
-
// "Added a Smart Shopping ad group with resource name: '%s'.%s",
|
271 |
-
// $addedAdGroupResourceName,
|
272 |
-
// PHP_EOL
|
273 |
-
// );
|
274 |
-
|
275 |
-
return $addedAdGroupResourceName;
|
276 |
-
}
|
277 |
-
|
278 |
-
/**
|
279 |
-
* Creates a new ad group ad in the specified Smart Shopping ad group.
|
280 |
-
*
|
281 |
-
* @param GoogleAdsClient $googleAdsClient the Google Ads API client
|
282 |
-
* @param int $customerId the customer ID
|
283 |
-
* @param string $adGroupResourceName the resource name of the ad group that
|
284 |
-
* the new ad group ad will belong to
|
285 |
-
*/
|
286 |
-
private function addSmartShoppingAdGroupAd($adGroupResourceName) {
|
287 |
-
// Creates a new ad group ad.
|
288 |
-
$adGroupAd = new AdGroupAd([
|
289 |
-
// Sets a new Smart Shopping ad.
|
290 |
-
'ad' => new Ad(['shopping_smart_ad' => new ShoppingSmartAdInfo()]),
|
291 |
-
// Sets the ad group.
|
292 |
-
'ad_group' => $adGroupResourceName
|
293 |
-
]);
|
294 |
-
|
295 |
-
// Creates an ad group ad operation.
|
296 |
-
$adGroupAdOperation = new AdGroupAdOperation();
|
297 |
-
$adGroupAdOperation->setCreate($adGroupAd);
|
298 |
-
|
299 |
-
// Issues a mutate request to add the ad group ad.
|
300 |
-
$adGroupAdServiceClient = $this->googleAdsClient->getAdGroupAdServiceClient();
|
301 |
-
$response = $adGroupAdServiceClient->mutateAdGroupAds($this->customerId, [$adGroupAdOperation]);
|
302 |
-
|
303 |
-
/** @var AdGroupAd $addedAdGroupAd */
|
304 |
-
$addedAdGroupAd = $response->getResults()[0];
|
305 |
-
// printf(
|
306 |
-
// "Added a Smart Shopping ad group ad with resource name: '%s'.%s",
|
307 |
-
// $addedAdGroupAd->getResourceName(),
|
308 |
-
// PHP_EOL
|
309 |
-
// );
|
310 |
-
}
|
311 |
-
|
312 |
-
/**
|
313 |
-
* Creates a new Shopping listing group for the specified ad group. This is known as a "product
|
314 |
-
* group" in the Google Ads user interface. The listing group will be added to the ad group
|
315 |
-
* using an "ad group criterion". For more information on listing groups see the Google Ads
|
316 |
-
* API Shopping guide: https://developers.google.com/google-ads/api/docs/shopping-ads/overview.
|
317 |
-
*
|
318 |
-
* @param GoogleAdsClient $googleAdsClient the Google Ads API client
|
319 |
-
* @param int $customerId the customer ID
|
320 |
-
* @param string $adGroupResourceName the resource name of the ad group that
|
321 |
-
* the new listing group will belong to
|
322 |
-
*/
|
323 |
-
private function addShoppingListingGroup($adGroupResourceName) {
|
324 |
-
// Creates a new ad group criterion. This will contain a listing group.
|
325 |
-
// This will be the listing group for 'All products' and will contain a single root node.
|
326 |
-
$adGroupCriterion = new AdGroupCriterion([
|
327 |
-
'ad_group' => $adGroupResourceName,
|
328 |
-
'status' => AdGroupAdStatus::ENABLED,
|
329 |
-
// Creates a new listing group. This will be the top-level "root" node.
|
330 |
-
// Sets the type of the listing group to be a biddable unit.
|
331 |
-
'listing_group' => new ListingGroupInfo(['type' => ListingGroupType::UNIT])
|
332 |
-
// Note: Listing groups do not require bids for Smart Shopping campaigns.
|
333 |
-
]);
|
334 |
-
|
335 |
-
// Creates an ad group criterion operation.
|
336 |
-
$adGroupCriterionOperation = new AdGroupCriterionOperation();
|
337 |
-
$adGroupCriterionOperation->setCreate($adGroupCriterion);
|
338 |
-
|
339 |
-
// Issues a mutate request to add the ad group criterion.
|
340 |
-
$adGroupCriterionServiceClient = $this->googleAdsClient->getAdGroupCriterionServiceClient();
|
341 |
-
$response = $adGroupCriterionServiceClient->mutateAdGroupCriteria(
|
342 |
-
$this->customerId,
|
343 |
-
[$adGroupCriterionOperation]
|
344 |
-
);
|
345 |
-
|
346 |
-
/** @var AdGroupCriterion $addedAdGroupCriterion */
|
347 |
-
$addedAdGroupCriterion = $response->getResults()[0];
|
348 |
-
// printf(
|
349 |
-
// "Added an ad group criterion containing a listing group with resource name: '%s'.%s",
|
350 |
-
// $addedAdGroupCriterion->getResourceName(),
|
351 |
-
// PHP_EOL
|
352 |
-
// );
|
353 |
-
}
|
354 |
-
|
355 |
-
/**
|
356 |
-
* @return array
|
357 |
-
* Get woocommerce default set country
|
358 |
-
*/
|
359 |
-
public function woo_country(){
|
360 |
-
// The country/state
|
361 |
-
$store_raw_country = get_option( 'woocommerce_default_country' );
|
362 |
-
// Split the country/state
|
363 |
-
$split_country = explode( ":", $store_raw_country );
|
364 |
-
return $split_country;
|
365 |
-
}
|
366 |
-
|
367 |
-
public function createSmartShoppingCampaign($campaign_name = '', $budget = '', $salesCountry = '') {
|
368 |
-
|
369 |
-
try {
|
370 |
-
if((isset($_COOKIE['add_conversions']) && $_COOKIE['add_conversions'] == 1) || !isset($_COOKIE['add_conversions'])) {
|
371 |
-
self::createConversionAction();
|
372 |
-
}
|
373 |
-
|
374 |
-
// Creates a budget to be used by the campaign that will be created below.
|
375 |
-
$budgetResourceName = self::addCampaignBudget($campaign_name, $budget);
|
376 |
-
|
377 |
-
// Creates a Smart Shopping campaign.
|
378 |
-
$campaignResourceName = self::addSmartShoppingCampaign($campaign_name, $budgetResourceName, $salesCountry);
|
379 |
-
|
380 |
-
// Creates a Smart Shopping ad group.
|
381 |
-
$adGroupResourceName = self::addSmartShoppingAdGroup($campaignResourceName);
|
382 |
-
|
383 |
-
// Creates a Smart Shopping ad group ad.
|
384 |
-
self::addSmartShoppingAdGroupAd($adGroupResourceName);
|
385 |
-
|
386 |
-
if ($this->createDefaultListing) {
|
387 |
-
// A product group is a subset of inventory. Listing groups are the equivalent
|
388 |
-
// of product groups in the API and allow you to bid on the chosen group or
|
389 |
-
// exclude a group from bidding.
|
390 |
-
// This method creates an ad group criterion containing a listing group.
|
391 |
-
self::addShoppingListingGroup($adGroupResourceName);
|
392 |
-
}
|
393 |
-
|
394 |
-
return $campaignResourceName;
|
395 |
-
|
396 |
-
} catch (GoogleAdsException $googleAdsException) {
|
397 |
-
printf(
|
398 |
-
"Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
|
399 |
-
$googleAdsException->getRequestId(),
|
400 |
-
PHP_EOL,
|
401 |
-
PHP_EOL
|
402 |
-
);
|
403 |
-
foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
|
404 |
-
/** @var GoogleAdsError $error */
|
405 |
-
$response = [];
|
406 |
-
$response['error'] = $error->getMessage();
|
407 |
-
return $response;
|
408 |
-
// printf(
|
409 |
-
// "\t%s: %s%s",
|
410 |
-
// $error->getErrorCode()->getErrorCode(),
|
411 |
-
// $error->getMessage(),
|
412 |
-
// PHP_EOL
|
413 |
-
// );
|
414 |
-
}
|
415 |
-
exit(1);
|
416 |
-
} catch (ApiException $apiException) {
|
417 |
-
$response = [];
|
418 |
-
$response['error'] = $apiException->getMessage();
|
419 |
-
return $response;
|
420 |
-
// printf(
|
421 |
-
// "ApiException was thrown with message '%s'.%s",
|
422 |
-
// $apiException->getMessage(),
|
423 |
-
// PHP_EOL
|
424 |
-
// );
|
425 |
-
exit(1);
|
426 |
-
}
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
}
|
431 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/setup/add-campaign.php
CHANGED
@@ -1,479 +1,379 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
class AddCampaign {
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
$this->gmail = isset($_COOKIE['g_mail']) ? $_COOKIE['g_mail'] : '';
|
23 |
-
|
24 |
-
$this->merchantId = (isset($GLOBALS['tatvicData']['tvc_merchant'])) ? $GLOBALS['tatvicData']['tvc_merchant'] : "";
|
25 |
-
$this->currentCustomerId = (isset($GLOBALS['tatvicData']['tvc_customer'])) ? $GLOBALS['tatvicData']['tvc_customer'] : "";
|
26 |
-
|
27 |
-
|
28 |
-
$this->html_run();
|
29 |
-
|
30 |
-
echo "<script>
|
31 |
-
$(document).ready(function() {
|
32 |
-
$('.select2').select2();
|
33 |
-
});
|
34 |
-
jQuery('.create-merchant-center').addClass('active');
|
35 |
-
jQuery('.create-google-ads').addClass('active');
|
36 |
-
jQuery('.sync-products').addClass('active');
|
37 |
-
jQuery('.create-smart-shopping').addClass('active');
|
38 |
-
function changeCategory() {
|
39 |
-
let dimension = jQuery('#dimension').val();
|
40 |
-
let level = jQuery('#dimension').find('option[value='+dimension+']'). attr('level');
|
41 |
-
jQuery('#category_level').val(level);
|
42 |
-
}
|
43 |
-
function selectCountry() {
|
44 |
-
var sales_country = document.getElementById('sales_country').value;
|
45 |
-
var customer_id = $this->currentCustomerId;
|
46 |
-
jQuery('#feed-spinner').css('display', 'block');
|
47 |
-
jQuery.post(
|
48 |
-
myAjaxNonces.ajaxurl,
|
49 |
-
{
|
50 |
-
action: 'tvcajax-get-campaign-categories',
|
51 |
-
countryCode: sales_country,
|
52 |
-
customerId: customer_id,
|
53 |
-
campaignCategoryListsNonce: myAjaxNonces.campaignCategoryListsNonce,
|
54 |
-
|
55 |
-
},
|
56 |
-
function( response ) {
|
57 |
-
console.log('==');
|
58 |
-
let categories = JSON.parse(response);
|
59 |
-
console.log(categories);
|
60 |
-
// callback( tvc_validateResponse( response ) );
|
61 |
-
jQuery('#dimension').html('');
|
62 |
-
jQuery.each(categories, function(key, category) {
|
63 |
-
jQuery('#dimension')
|
64 |
-
.append(jQuery('<option value='+category.id+' level='+category.level+'>'+category.name+'</option>'));
|
65 |
-
});
|
66 |
-
jQuery('#feed-spinner').css('display', 'none');
|
67 |
-
}
|
68 |
-
);
|
69 |
-
}
|
70 |
-
function showLoader() {
|
71 |
-
if($('#campaign-name').val()!=''&&$('#campaign-budget').val()!=''){
|
72 |
-
jQuery('#feed-spinner').css('display', 'block');
|
73 |
-
}
|
74 |
-
}
|
75 |
-
</script>";
|
76 |
}
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
}
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
}
|
97 |
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
|
|
|
|
104 |
}
|
105 |
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
$
|
111 |
-
if
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
}
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
$
|
123 |
-
$
|
124 |
-
|
125 |
-
$account_performance = [];
|
126 |
-
$product_performance = [];
|
127 |
-
$product_partition_performance = [];
|
128 |
-
$api_obj = new ShoppingApi();
|
129 |
-
|
130 |
-
$campaigns_list_res = $api_obj->getCampaigns();
|
131 |
-
|
132 |
-
if (isset($campaigns_list_res->errors) && !empty($campaigns_list_res->errors)) {
|
133 |
-
|
134 |
-
} else {
|
135 |
-
|
136 |
-
$campaigns_list_res = $campaigns_list_res->data;
|
137 |
-
|
138 |
-
if (isset($campaigns_list_res['status']) && $campaigns_list_res['status'] == 200) {
|
139 |
-
$campaigns_list = $campaigns_list_res['data'];
|
140 |
-
}
|
141 |
}
|
|
|
|
|
142 |
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
}
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
164 |
} else {
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
$campaign_name = $_POST['campaign_name'];
|
183 |
-
$campaign_budget = $_POST['campaign_budget'];
|
184 |
-
$sales_country = $_POST['sales_country'];
|
185 |
-
$all_products = $_POST['all_products'];
|
186 |
-
$category_id = $_POST['dimension'];
|
187 |
-
$category_level = $_POST['category_level'];
|
188 |
-
|
189 |
-
$campaign = $api_obj->createCampaign($campaign_name, $campaign_budget, $sales_country, $all_products, $category_id, $category_level);
|
190 |
-
if (isset($campaign->errors) && !empty($campaign->errors)) {
|
191 |
-
$class = 'notice notice-error';
|
192 |
-
$message = esc_html__((isset($campaign->errors) && isset($campaign->errors[0])) ? $campaign->errors[0] : 'Error', 'sample-text-domain');
|
193 |
-
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html('Error : ' . $message));
|
194 |
-
} else {
|
195 |
-
// if ($campaign['status'] == 200) {
|
196 |
-
// echo "<pre>";
|
197 |
-
// print_r($campaign);
|
198 |
-
//// print_r($campaign->message);
|
199 |
-
// print_r($campaign->data);
|
200 |
-
// exit;
|
201 |
-
// $campaign = $campaign->data;
|
202 |
-
$class = 'notice notice-success';
|
203 |
-
$message = esc_html__('Smart Shopping Campaign Created Successfully with Resource name ' . $campaign->data, 'sample-text-domain');
|
204 |
-
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html($message));
|
205 |
-
// $url = admin_url('admin.php?page=tvc-configuration-page');
|
206 |
-
//wp_redirect($url);
|
207 |
-
// }
|
208 |
-
}
|
209 |
-
}
|
210 |
-
if (isset($_POST['update_campaign'])) {
|
211 |
-
$campaign_name = $_POST['campaign_name'];
|
212 |
-
$campaign_budget = $_POST['campaign_budget'];
|
213 |
-
$campaign_id = $_POST['campaign_id'];
|
214 |
-
$budget_id = $_POST['budget_id'];
|
215 |
-
$sales_country = $_POST['sales_country'];
|
216 |
-
$all_products = $_POST['all_products'];
|
217 |
-
$ad_group_id = $_POST['ad_group_id'];
|
218 |
-
$ad_group_resource_name = $_POST['ad_group_resource_name'];
|
219 |
-
$category_id = isset($_POST['dimension']) ? $_POST['dimension'] : '';
|
220 |
-
$category_level = $_POST['category_level'];
|
221 |
-
|
222 |
-
$campaign = $api_obj->updateCampaign($campaign_name, $campaign_budget, $campaign_id, $budget_id, $sales_country, $all_products, $category_id, $category_level, $ad_group_id, $ad_group_resource_name);
|
223 |
-
if (isset($campaign->errors) && !empty($campaign->errors)) {
|
224 |
-
$class = 'notice notice-error';
|
225 |
-
$message = esc_html__(isset($campaign->errors) ? $campaign->errors[0] : 'Error', 'sample-text-domain');
|
226 |
-
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html('Error : ' . $message));
|
227 |
-
} else {
|
228 |
-
$campaign = $campaign->data;
|
229 |
-
if ($campaign['status'] == 200) {
|
230 |
-
$campaign = $campaign['data'];
|
231 |
-
$class = 'notice notice-success';
|
232 |
-
$message = esc_html__('Smart Shopping Campaign Updated Successfully with Resource name ' . $campaign, 'sample-text-domain');
|
233 |
-
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html($message));
|
234 |
-
// $url = admin_url('admin.php?page=tvc-configuration-page');
|
235 |
-
//wp_redirect($url);
|
236 |
-
}
|
237 |
-
}
|
238 |
-
echo "<script>jQuery('#feed-spinner').css('display', 'none');</script>";
|
239 |
-
//header("Location:" . admin_url('admin.php?page=actionable-google-analytics-admin-display&tab=add_campaign_page&edit='.$campaign_id), true, 301);
|
240 |
-
//exit();
|
241 |
-
/* $url = admin_url('admin.php?page=tvc-configuration-page');
|
242 |
-
wp_redirect($url); */
|
243 |
-
}
|
244 |
-
|
245 |
-
echo'<div class="container-fluid">
|
246 |
-
<div class="row">
|
247 |
-
<div class= "col col-12">
|
248 |
-
<div class="card mw-100" style="padding:0;">
|
249 |
-
<div class="card-body">
|
250 |
-
<div class="tab-pane show active" id="googleShoppingFeed">
|
251 |
-
<div class="row">
|
252 |
-
<div class="col-md-6 col-lg-8 border-right">';
|
253 |
-
if (!isset($_GET['edit'])) {
|
254 |
-
echo '<form method="post" id="create-form">
|
255 |
-
<div class="form-group">
|
256 |
-
<h2 class="lead">Create a Smart Shopping Campaign to promote your products</h2>
|
257 |
-
<p style="text-align:left; font-size: 14px;">A Smart Shopping campaign shows your products to potential customers across Google, Google Search Partners, the Google Display Network, YouTube, and Gmail.</p>
|
258 |
-
<p style="text-align:left">
|
259 |
-
<a href="https://support.google.com/google-ads/answer/7674739?hl=en" target="_blank">Learn more about Smart Shopping Campaigns.</a>
|
260 |
-
</p>
|
261 |
-
</div>
|
262 |
-
<div class="form-row" style="margin-bottom: 0">
|
263 |
-
<div class="col-md-12 row">
|
264 |
-
<label for="campaign-name" class="form-group col-md-4 mt-2 text-left font-weight-bold">Campaign name: </label>
|
265 |
-
<input type="text" class="form-group col-md-6" name="campaign_name" id="campaign-name" required>
|
266 |
-
</div>
|
267 |
-
<div class="col-md-12 row">
|
268 |
-
<label for="campaign-budget" class="form-group col-md-4 mt-2 mb-0 text-left"><span class="font-weight-bold">Daily Campaign Budget (' . $currency . '):</span> <p style="text-align:left;font-size: 11px;">Only pay if someone clicks your ad. Recommended minimum budget of ' . $currency . ' 5 per day.</p></label>
|
269 |
-
<input type="number" class="form-group col-md-6" name="campaign_budget" id="campaign-budget" style="height: 35px;" required>
|
270 |
-
</div>
|
271 |
-
<div class="col-md-12 row">
|
272 |
-
<label for="sales-country" class="form-group col-md-4 mt-2 text-left"><span class="font-weight-bold">Target Country:</span> <p style="text-align:left;font-size: 11px;">If you want to target multiple countries, then create multiple campaigns.</p></label>
|
273 |
-
' . $this->country_dropdown() . '
|
274 |
-
</div>
|
275 |
-
<div class="col-md-12 row">
|
276 |
-
<label for="campaign-products" class="form-group col-md-4 mt-2 text-left font-weight-bold">Products in campaign: </label>
|
277 |
-
<label class="mt-2"><input type="radio" id="campaign-products" name="all_products" value="1" checked />Include all Merchant Center products</label>
|
278 |
-
</div>
|
279 |
-
<div class="col-md-12 row" style="display:none;">
|
280 |
-
<div class="col-md-4"></div>
|
281 |
-
<label class=""><input type="radio" id="campaign-product-partition" value="0" name="all_products" />Select products using product partition filters</label>
|
282 |
-
</div>
|
283 |
-
<div class="col-md-12 row" style="display:none;">
|
284 |
-
<div class="col-md-4"></div>
|
285 |
-
<label>Product Partition filter dimension:</label><b> Category</b>
|
286 |
-
</div>
|
287 |
-
<div class="col-md-12 row" style="display:none;">
|
288 |
-
<div class="col-md-4"></div>
|
289 |
-
<label>Dimension Value:</label>
|
290 |
-
<input type="hidden" name="category_level" id="category_level" value="" />
|
291 |
-
<select class="col-md-3 ml-2" name="dimension" id="dimension" onchange="changeCategory()">';
|
292 |
-
for ($i = 0; $i < count($categories); $i++) {
|
293 |
-
echo '<option value="' . $categories[$i]->id . '" level="' . $categories[$i]->level . '">' . $categories[$i]->name . '</option>';
|
294 |
-
}
|
295 |
-
echo '</select>
|
296 |
-
</div>
|
297 |
-
<div class="col-md-12 row">
|
298 |
-
<label class="form-group col-md-12 mt-2 mb-0 text-left font-weight-bold">Campaign duration: </label>
|
299 |
-
<p class="ml-3" style="text-align:left; font-size: 14px;">Your campaign will run until you pause it. You can pause your campaign at any time, however it can take up to 30 days for google to optimize your products and ads.</p>
|
300 |
-
</div>
|
301 |
-
</div>
|
302 |
-
<div class="col-12 text-center">
|
303 |
-
<button onclick="showLoader()" type="submit" class="btn btn-primary btn-success" id="create_campaign" name="create_campaign">Create Smart Shopping Campaign</button>
|
304 |
-
</div>
|
305 |
-
</form>
|
306 |
-
<hr>
|
307 |
-
<form method="post">
|
308 |
-
<div class="text-left">
|
309 |
-
<p style="font-size: 14px;">Please note that campaigns will be created with accounts configured in previous steps.</p>
|
310 |
-
<p style="font-size: 14px;"><span>Google Merchant Center : ' . $this->merchantId . '</span> <span>Google Ads Account Id : ' . $this->currentCustomerId . '</span></p>
|
311 |
-
</div>
|
312 |
-
</form>';
|
313 |
-
} else if (isset($_GET['edit']) && $_GET['edit'] != '') {
|
314 |
-
echo '<form method="post">
|
315 |
-
<div class="form-group">
|
316 |
-
<h2 class="lead">Create/Update a Smart Shopping Campaign to promote your products</h2>
|
317 |
-
<p style="text-align:left; font-size: 14px;">A Smart Shopping campaign shows your products to potential customers across Google, Google Search Partners, the Google Display Network, YouTube, and Gmail.</p>
|
318 |
-
<p style="text-align:left">
|
319 |
-
<a href="https://support.google.com/google-ads/answer/7674739?hl=en" target="_blank">Learn more about Smart Shopping Campaigns.</a>
|
320 |
-
</p>
|
321 |
-
</div>
|
322 |
-
<div class="form-row" style="margin-bottom: 0">
|
323 |
-
<div class="col-md-12 row">
|
324 |
-
<label for="campaign-name" class="form-group col-md-4 mt-2 text-left font-weight-bold">Campaign name: </label>
|
325 |
-
<input type="text" class="form-group col-md-6" name="campaign_name" value="';
|
326 |
-
if (isset($campaign_details) && $campaign_details != '') {
|
327 |
-
echo $campaign_details->compaignName;
|
328 |
-
}
|
329 |
-
echo '" id="campaign-name" required>
|
330 |
-
</div>
|
331 |
-
<div class="col-md-12 row">
|
332 |
-
<label for="campaign-budget" class="form-group col-md-4 mt-2 mb-0 text-left"><span class="font-weight-bold">Daily Campaign Budget (' . $currency . '):</span> <p style="text-align:left;font-size: 11px;">Only pay if someone clicks your ad. Recommended minimum budget of '.(isset($campaign_details) && $campaign_details != ''?$campaign_details->dailyBudget.' '.$currency:'').' per day.</p></label>
|
333 |
-
<input type="number" class="form-group col-md-6" name="campaign_budget" id="campaign-budget" value="';
|
334 |
-
if (isset($campaign_details) && $campaign_details != '') {
|
335 |
-
echo $campaign_details->dailyBudget;
|
336 |
-
}
|
337 |
-
echo '" style="height: 35px;" required>
|
338 |
-
</div>
|
339 |
-
<input type="hidden" name="campaign_id" value="';
|
340 |
-
if (isset($campaign_details) && $campaign_details != '') {
|
341 |
-
echo $campaign_details->compaignId;
|
342 |
-
}
|
343 |
-
echo '" />
|
344 |
-
<input type="hidden" name="budget_id" value="';
|
345 |
-
if (isset($campaign_details) && $campaign_details != '') {
|
346 |
-
echo $campaign_details->budgetId;
|
347 |
-
}
|
348 |
-
echo '" />
|
349 |
-
<input type="hidden" name="ad_group_id" value="';
|
350 |
-
if (isset($campaign_details) && $campaign_details != '') {
|
351 |
-
echo $campaign_details->adGroupId;
|
352 |
-
}
|
353 |
-
echo '" />
|
354 |
-
<input type="hidden" name="ad_group_resource_name" value="';
|
355 |
-
if (isset($campaign_details) && $campaign_details != '') {
|
356 |
-
echo $campaign_details->adGroupResourceName;
|
357 |
-
}
|
358 |
-
echo '" />
|
359 |
-
<div class="col-md-12 row">
|
360 |
-
<label for="sales-country" class="form-group col-md-4 mt-2 text-left"><span class="font-weight-bold">Target Country:</span> <p style="text-align:left;font-size: 11px;">If you want to target multiple countries, then create multiple campaigns.</p></label>
|
361 |
-
' . $this->country_dropdown($defaultCountry, true) . '
|
362 |
-
</div>
|
363 |
-
<div class="col-md-12 row">
|
364 |
-
<label for="campaign-products" class="form-group col-md-4 mt-2 text-left font-weight-bold">Products in campaign: </label>
|
365 |
-
<label class="mt-2">';
|
366 |
-
if (isset($campaign_details) && $campaign_details->category_level > 0 && $campaign_details->category_id > 0) {
|
367 |
-
echo '<input type="radio" id="campaign-products" name="all_products" value="1" />';
|
368 |
-
} else {
|
369 |
-
echo '<input type="radio" id="campaign-products" name="all_products" value="1" checked />';
|
370 |
-
}
|
371 |
-
echo 'Include all Merchant Center products</label>
|
372 |
-
</div>
|
373 |
-
<div class="col-md-12 row">
|
374 |
-
<div class="col-md-4"></div>
|
375 |
-
<label class="">';
|
376 |
-
if (isset($campaign_details) && $campaign_details->category_level > 0 && $campaign_details->category_id > 0) {
|
377 |
-
echo '<input type="radio" id="campaign-product-partition" value="0" name="all_products" checked />';
|
378 |
-
} else {
|
379 |
-
echo '<input type="radio" id="campaign-product-partition" value="0" name="all_products" />';
|
380 |
-
}
|
381 |
-
echo 'Select products using product partition filters</label>
|
382 |
-
</div>
|
383 |
-
<div class="col-md-12 row">
|
384 |
-
<div class="col-md-4"></div>
|
385 |
-
<label>Product Partition filter dimension:</label><b> Category</b>
|
386 |
-
</div>
|
387 |
-
<div class="col-md-12 row">
|
388 |
-
<div class="col-md-4"></div>
|
389 |
-
<label>Dimension Value:</label>
|
390 |
-
<input type="hidden" name="category_level" id="category_level" value="';
|
391 |
-
if (isset($campaign_details) && $campaign_details != '') {
|
392 |
-
echo $campaign_details->category_level;
|
393 |
-
}
|
394 |
-
echo '" />
|
395 |
-
<select class="col-md-3 ml-2" name="dimension" id="dimension" onchange="changeCategory()">';
|
396 |
-
if (isset($campaign_details) && $campaign_details != '') {
|
397 |
-
for ($i = 0; $i < count($categories); $i++) {
|
398 |
-
if ($campaign_details->category_id == $categories[$i]->id) {
|
399 |
echo '<option value="' . $categories[$i]->id . '" level="' . $categories[$i]->level . '" selected="selected">' . $categories[$i]->name . '</option>';
|
400 |
-
|
401 |
echo '<option value="' . $categories[$i]->id . '" level="' . $categories[$i]->level . '">' . $categories[$i]->name . '</option>';
|
|
|
402 |
}
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
<button onclick="showLoader()" type="submit" class="btn btn-primary btn-success" id="update_campaign" name="update_campaign">Update Smart Shopping Campaign</button>
|
414 |
-
</div>
|
415 |
-
</form>
|
416 |
-
<hr>
|
417 |
-
<form method="post">
|
418 |
-
<div class="text-left">
|
419 |
-
<p style="font-size: 14px;">Please note that campaigns will be created with accounts configured in previous steps.</p>
|
420 |
-
<p style="font-size: 14px;"><span>Google Merchant Center : ' . $this->merchantId . '</span> <span>Google Ads Account Id : ' . $this->currentCustomerId . '</span></p>
|
421 |
-
</div>
|
422 |
-
</form>';
|
423 |
-
}
|
424 |
-
echo ' </div>
|
425 |
-
<div class="col-md-6 col-lg-4">
|
426 |
-
<div class="right-content">
|
427 |
-
'.get_tvc_help_html().'
|
428 |
-
</div>
|
429 |
-
</div>
|
430 |
-
</div>
|
431 |
-
</div>
|
432 |
-
</div>
|
433 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
434 |
</div>
|
|
|
435 |
</div>
|
436 |
-
</div>
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
|
|
2 |
class AddCampaign {
|
3 |
+
public $response;
|
4 |
+
public $post_data;
|
5 |
+
protected $merchantId;
|
6 |
+
protected $new_campaign;
|
7 |
+
protected $TVC_Admin_Helper;
|
8 |
+
|
9 |
+
public function __construct() {
|
10 |
+
global $wpdb;
|
11 |
+
$this->includes();
|
12 |
+
$this->TVC_Admin_Helper = new TVC_Admin_Helper();
|
13 |
+
$this->post_data = $_POST;
|
14 |
+
$this->merchantId = $this->TVC_Admin_Helper->get_merchantId();
|
15 |
+
$this->currentCustomerId = $this->TVC_Admin_Helper->get_currentCustomerId();
|
16 |
+
$this->html_run();
|
17 |
+
}
|
18 |
+
public function includes() {
|
19 |
+
if (!class_exists('ShoppingApi')) {
|
20 |
+
require_once(__DIR__ . '/ShoppingApi.php');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
}
|
22 |
+
}
|
23 |
+
public function html_run() {
|
24 |
+
$this->TVC_Admin_Helper->add_spinner_html();
|
25 |
+
$this->create_form();
|
26 |
+
}
|
27 |
+
|
28 |
+
public function country_dropdown($selected_code = '', $is_disabled = false) {
|
29 |
+
$getCountris = file_get_contents(__DIR__ . "/json/countries.json");
|
30 |
+
$contData = json_decode($getCountris);
|
31 |
+
$wooCountry = $this->TVC_Admin_Helper->get_woo_country();
|
32 |
+
$is_disabled = ($is_disabled) ? "style='max-width:30rem;height:35px;pointer-events:none;background:#f2f2f2;'" : "style='max-width: 30rem;height: 35px;'";
|
33 |
+
$data = "<select id='sales_country' name='sales_country' class='form-group col-md-6' readonly='true' $is_disabled onchange='selectCountry()'>";
|
34 |
+
foreach ($contData as $key => $value) {
|
35 |
+
$selected = ($value->code == $wooCountry) ? "selected='selected'" : "";
|
36 |
+
$data .= "<option value=" . $value->code . " " . $selected . " >" . $value->name . "</option>";
|
37 |
}
|
38 |
+
$data .= "</select>";
|
39 |
+
return $data;
|
40 |
+
}
|
41 |
+
|
42 |
+
public function create_form() {
|
43 |
+
$campaigns_list = [];
|
44 |
+
$categories = [];
|
45 |
+
$campaign_performance = [];
|
46 |
+
$account_performance = [];
|
47 |
+
$product_performance = [];
|
48 |
+
$product_partition_performance = [];
|
49 |
+
$api_obj = new ShoppingApi();
|
50 |
+
|
51 |
+
$campaigns_list_res = $api_obj->getCampaigns();
|
52 |
+
if(isset($campaigns_list_res->errors) && !empty($campaigns_list_res->errors)){
|
53 |
+
}else if( isset($campaigns_list_res->data) ){
|
54 |
+
$campaigns_list_res = $campaigns_list_res->data;
|
55 |
+
if(isset($campaigns_list_res['status']) && $campaigns_list_res['status'] == 200){
|
56 |
+
$campaigns_list = $campaigns_list_res['data'];
|
57 |
+
}
|
58 |
}
|
59 |
|
60 |
+
$defaultCountry = $this->TVC_Admin_Helper->get_woo_country();
|
61 |
+
$category_list = $api_obj->getCategories($defaultCountry);
|
62 |
+
if(isset($category_list->errors) && !empty($category_list->errors)){
|
63 |
+
}else{
|
64 |
+
$category_list = isset($category_list->data) ? $category_list->data : [];
|
65 |
+
if (isset($category_list['status']) && $category_list['status'] == 200) {
|
66 |
+
$categories = $category_list['data'];
|
67 |
+
}
|
68 |
}
|
69 |
|
70 |
+
$currency = $this->TVC_Admin_Helper->get_user_currency_symbol();
|
71 |
+
if (isset($_GET['edit']) && $_GET['edit'] != '') {
|
72 |
+
$campaign_details_res = $api_obj->getCampaignDetails($_GET['edit']);
|
73 |
+
if (isset($campaign_details_res->errors) && !empty($campaign_details_res->errors)) {
|
74 |
+
$error_code = array_keys($campaign_details_res->errors)[0];
|
75 |
+
if($error_code == 404){
|
76 |
+
$error_msg = 'Campaign details not found';
|
77 |
+
}else{
|
78 |
+
if (isset($campaign_details_res->error_data) && !empty($campaign_details_res->error_data)) {
|
79 |
+
// $error_msg = array_values($campaign_details_res->error_data)[0]->errors[0];
|
80 |
+
}
|
81 |
}
|
82 |
+
$class = 'notice notice-error';
|
83 |
+
$message = esc_html__(isset($error_msg) ? $error_msg : 'There was some error fetching campaign details.', 'sample-text-domain');
|
84 |
+
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html('Error : ' . $message));
|
85 |
+
} else {
|
86 |
+
$campaign_details = $campaign_details_res->data;
|
87 |
+
if ($campaign_details['status'] == 200) {
|
88 |
+
$campaign_details = $campaign_details['data'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
}
|
90 |
+
}
|
91 |
+
}
|
92 |
|
93 |
+
if (isset($_POST['create_campaign'])) {
|
94 |
+
$campaign_name = isset($_POST['campaign_name'])?$_POST['campaign_name']:"";
|
95 |
+
$campaign_budget = isset($_POST['campaign_budget'])?$_POST['campaign_budget']:"";
|
96 |
+
$sales_country = isset($_POST['sales_country'])?$_POST['sales_country']:"";
|
97 |
+
$all_products = isset($_POST['all_products'])?$_POST['all_products']:"";
|
98 |
+
$category_id = isset($_POST['dimension'])?$_POST['dimension']:"";
|
99 |
+
$category_level = isset($_POST['category_level'])?$_POST['category_level']:"";
|
100 |
+
|
101 |
+
$campaign = $api_obj->createCampaign($campaign_name, $campaign_budget, $sales_country, $all_products, $category_id, $category_level);
|
102 |
+
if(isset($campaign->errors) && !empty($campaign->errors)){
|
103 |
+
$class = 'notice notice-error';
|
104 |
+
$message = esc_html__((isset($campaign->errors) && isset($campaign->errors[0])) ? $campaign->errors[0] : 'Error', 'sample-text-domain');
|
105 |
+
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html('Error : ' . $message));
|
106 |
+
}else{
|
107 |
+
$class = 'notice notice-success';
|
108 |
+
$campaign_neme = isset($campaign->data)?'with Resource name '.$campaign->data:"";
|
109 |
+
$message = esc_html__('Smart Shopping Campaign Created Successfully '.$campaign_neme, 'sample-text-domain');
|
110 |
+
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html($message));
|
111 |
+
}
|
112 |
+
}
|
113 |
+
if (isset($_POST['update_campaign'])) {
|
114 |
+
$campaign_name = isset($_POST['campaign_name'])?$_POST['campaign_name']:"";
|
115 |
+
$campaign_budget = isset($_POST['campaign_budget'])?$_POST['campaign_budget']:"";
|
116 |
+
$campaign_id = isset($_POST['campaign_id'])?$_POST['campaign_id']:"";
|
117 |
+
$budget_id = isset($_POST['budget_id'])?$_POST['budget_id']:"";
|
118 |
+
$sales_country = isset($_POST['sales_country'])?$_POST['sales_country']:"";
|
119 |
+
$all_products = isset($_POST['all_products'])?$_POST['all_products']:"";
|
120 |
+
$ad_group_id = isset($_POST['ad_group_id'])?$_POST['ad_group_id']:"";
|
121 |
+
$ad_group_resource_name = isset($_POST['ad_group_resource_name'])?$_POST['ad_group_resource_name']:"";
|
122 |
+
$category_id = isset($_POST['dimension']) ? $_POST['dimension']:"";
|
123 |
+
$category_level = isset($_POST['category_level'])?$_POST['category_level']:"";
|
124 |
+
|
125 |
+
$campaign = $api_obj->updateCampaign($campaign_name, $campaign_budget, $campaign_id, $budget_id, $sales_country, $all_products, $category_id, $category_level, $ad_group_id, $ad_group_resource_name);
|
126 |
+
|
127 |
+
if (isset($campaign->errors) && !empty($campaign->errors)) {
|
128 |
+
$class = 'notice notice-error';
|
129 |
+
$message = esc_html__(isset($campaign->errors) ? $campaign->errors[0] : 'Error', 'sample-text-domain');
|
130 |
+
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html('Error : ' . $message));
|
131 |
+
} else if(isset($campaign->data)){
|
132 |
+
$campaign = $campaign->data;
|
133 |
+
if ($campaign['status'] == 200) {
|
134 |
+
$campaign_neme = isset($campaign['data'])?'with Resource name '.$campaign['data']:"";
|
135 |
+
$class = 'notice notice-success';
|
136 |
+
$message = esc_html__('Smart Shopping Campaign Updated Successfully ' . $campaign_neme, 'sample-text-domain');
|
137 |
+
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html($message));
|
138 |
+
// $url = admin_url('admin.php?page=tvc-configuration-page');
|
139 |
+
//wp_redirect($url);
|
140 |
}
|
141 |
+
}
|
142 |
+
echo "<script>jQuery('#feed-spinner').css('display', 'none');</script>";
|
143 |
+
} ?>
|
144 |
+
|
145 |
+
<div class="tab-content">
|
146 |
+
<div class="tab-pane show active" id="googleShoppingFeed">
|
147 |
+
<div class="tab-card">
|
148 |
+
<div class="row">
|
149 |
+
<div class="col-md-6 col-lg-8 edit-section">
|
150 |
+
<div class="edit-header-section">
|
151 |
+
<script>
|
152 |
+
var back_img = '<img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/left-angle-arrow.svg'; ?>" alt="back"/>';
|
153 |
+
document.write('<a href="' + document.referrer + '" class="back-btn">'+back_img+'<span>Back</span></a>');
|
154 |
+
</script>
|
155 |
+
</div>
|
156 |
+
<?php
|
157 |
+
if (!isset($_GET['edit'])) { ?>
|
158 |
+
<form method="post" id="create-form">
|
159 |
+
<div class="form-group">
|
160 |
+
<h2 class="lead">Create a Smart Shopping Campaign to promote your products</h2>
|
161 |
+
<p style="text-align:left; font-size: 14px;">A Smart Shopping campaign shows your products to potential customers across Google, Google Search Partners, the Google Display Network, YouTube, and Gmail.</p>
|
162 |
+
<p style="text-align:left">
|
163 |
+
<a href="https://support.google.com/google-ads/answer/7674739?hl=en" target="_blank">Learn more about Smart Shopping Campaigns.</a>
|
164 |
+
</p>
|
165 |
+
</div>
|
166 |
+
<div class="form-row" style="margin-bottom: 0">
|
167 |
+
<div class="col-md-12 row">
|
168 |
+
<label for="campaign-name" class="form-group col-md-4 mt-2 text-left font-weight-bold">Campaign name: </label>
|
169 |
+
<input type="text" class="form-group col-md-6" name="campaign_name" id="campaign-name" required>
|
170 |
+
</div>
|
171 |
+
<div class="col-md-12 row">
|
172 |
+
<label for="campaign-budget" class="form-group col-md-4 mt-2 mb-0 text-left"><span class="font-weight-bold">Daily Campaign Budget (<?php echo $currency ;?>):</span> <p style="text-align:left;font-size: 11px;">Only pay if someone clicks your ad. Recommended minimum budget of <?php echo $currency ; ?>5 per day.</p></label>
|
173 |
+
<input type="number" class="form-group col-md-6" name="campaign_budget" id="campaign-budget" style="height: 35px;" required>
|
174 |
+
</div>
|
175 |
+
<div class="col-md-12 row">
|
176 |
+
<label for="sales-country" class="form-group col-md-4 mt-2 text-left"><span class="font-weight-bold">Target Country:</span> <p style="text-align:left;font-size: 11px;">If you want to target multiple countries, then create multiple campaigns.</p></label><?php echo $this->country_dropdown(); ?>
|
177 |
+
</div>
|
178 |
+
<div class="col-md-12 row">
|
179 |
+
<label for="campaign-products" class="form-group col-md-4 mt-2 text-left font-weight-bold">Products in campaign: </label>
|
180 |
+
<label class="mt-2"><input type="radio" id="campaign-products" name="all_products" value="1" checked />Include all Merchant Center products</label>
|
181 |
+
</div>
|
182 |
+
<div class="col-md-12 row" style="display:none;">
|
183 |
+
<div class="col-md-4"></div>
|
184 |
+
<label class=""><input type="radio" id="campaign-product-partition" value="0" name="all_products" />Select products using product partition filters</label>
|
185 |
+
</div>
|
186 |
+
<div class="col-md-12 row" style="display:none;">
|
187 |
+
<div class="col-md-4"></div>
|
188 |
+
<label>Product Partition filter dimension:</label><b> Category</b>
|
189 |
+
</div>
|
190 |
+
<div class="col-md-12 row" style="display:none;">
|
191 |
+
<div class="col-md-4"></div>
|
192 |
+
<label>Dimension Value:</label>
|
193 |
+
<input type="hidden" name="category_level" id="category_level" value="" />
|
194 |
+
<select class="col-md-3 ml-2" name="dimension" id="dimension" onchange="changeCategory()">
|
195 |
+
<?php
|
196 |
+
for ($i = 0; $i < count($categories); $i++) {
|
197 |
+
echo '<option value="' . $categories[$i]->id . '" level="' . $categories[$i]->level . '">' . $categories[$i]->name . '</option>';
|
198 |
+
} ?>
|
199 |
+
</select>
|
200 |
+
</div>
|
201 |
+
<div class="col-md-12 row">
|
202 |
+
<label class="form-group col-md-12 mt-2 mb-0 text-left font-weight-bold">Campaign duration: </label>
|
203 |
+
<p class="ml-3" style="text-align:left; font-size: 14px;">Your campaign will run until you pause it. You can pause your campaign at any time, however it can take up to 30 days for google to optimize your products and ads.</p>
|
204 |
+
</div>
|
205 |
+
</div>
|
206 |
+
<div class="col-12 row">
|
207 |
+
<button onclick="showLoader()" type="submit" class="btn btn-primary" id="create_campaign" name="create_campaign">Create Smart Shopping Campaign</button>
|
208 |
+
</div>
|
209 |
+
</form>
|
210 |
+
<hr>
|
211 |
+
<form method="post">
|
212 |
+
<div class="text-left">
|
213 |
+
<p style="font-size: 14px;">Please note that campaigns will be created with accounts configured in previous steps.</p>
|
214 |
+
<p style="font-size: 14px;"><span>Google Merchant Center : <?php echo $this->merchantId; ?></span> <span>Google Ads Account Id : <?php echo $this->currentCustomerId; ?></span></p>
|
215 |
+
</div>
|
216 |
+
</form>
|
217 |
+
<?php
|
218 |
+
} else if (isset($_GET['edit']) && $_GET['edit'] != '') { ?>
|
219 |
+
<form method="post">
|
220 |
+
<div class="form-group">
|
221 |
+
<h2 class="lead">Create/Update a Smart Shopping Campaign to promote your products</h2>
|
222 |
+
<p style="text-align:left; font-size: 14px;">A Smart Shopping campaign shows your products to potential customers across Google, Google Search Partners, the Google Display Network, YouTube, and Gmail.</p>
|
223 |
+
<p style="text-align:left">
|
224 |
+
<a href="https://support.google.com/google-ads/answer/7674739?hl=en" target="_blank">Learn more about Smart Shopping Campaigns.</a>
|
225 |
+
</p>
|
226 |
+
</div>
|
227 |
+
<div class="form-row" style="margin-bottom: 0">
|
228 |
+
<div class="col-md-12 row">
|
229 |
+
<label for="campaign-name" class="form-group col-md-4 mt-2 text-left font-weight-bold">Campaign name: </label>
|
230 |
+
<input type="text" class="form-group col-md-6" name="campaign_name" value="<?php echo (isset($campaign_details) && $campaign_details != '')?$campaign_details->compaignName:""; ?>" id="campaign-name" required>
|
231 |
+
</div>
|
232 |
+
<div class="col-md-12 row">
|
233 |
+
<label for="campaign-budget" class="form-group col-md-4 mt-2 mb-0 text-left"><span class="font-weight-bold">Daily Campaign Budget (<?php echo $currency; ?>):</span> <p style="text-align:left;font-size: 11px;">Only pay if someone clicks your ad. Recommended minimum budget of <?php echo $currency; ?>5 per day.</p></label>
|
234 |
+
<input type="number" class="form-group col-md-6" name="campaign_budget" id="campaign-budget" value="<?php echo (isset($campaign_details) && $campaign_details != '')?$campaign_details->dailyBudget:""; ?>" style="height: 35px;" required>
|
235 |
+
</div>
|
236 |
+
<input type="hidden" name="campaign_id" value="<?php echo (isset($campaign_details) && $campaign_details != '')?$campaign_details->compaignId:""; ?>" />
|
237 |
+
<input type="hidden" name="budget_id" value="<?php echo (isset($campaign_details) && $campaign_details != '')?$campaign_details->budgetId:""; ?>" />
|
238 |
+
<input type="hidden" name="ad_group_id" value="<?php echo (isset($campaign_details) && $campaign_details != '')?$campaign_details->adGroupId:""; ?>" />
|
239 |
+
<input type="hidden" name="ad_group_resource_name" value="<?php echo(isset($campaign_details) && $campaign_details != '')? $campaign_details->adGroupResourceName:""; ?>" />
|
240 |
+
<div class="col-md-12 row">
|
241 |
+
<label for="sales-country" class="form-group col-md-4 mt-2 text-left"><span class="font-weight-bold">Target Country:</span> <p style="text-align:left;font-size: 11px;">If you want to target multiple countries, then create multiple campaigns.</p></label>
|
242 |
+
<?php echo $this->country_dropdown($defaultCountry, true); ?>
|
243 |
+
</div>
|
244 |
+
<div class="col-md-12 row">
|
245 |
+
<label for="campaign-products" class="form-group col-md-4 mt-2 text-left font-weight-bold">Products in campaign: </label>
|
246 |
+
<label class="mt-2">
|
247 |
+
<?php
|
248 |
+
if(isset($campaign_details) && $campaign_details->category_level > 0 && $campaign_details->category_id > 0){
|
249 |
+
echo '<input type="radio" id="campaign-products" name="all_products" value="1" />';
|
250 |
+
}else{
|
251 |
+
echo '<input type="radio" id="campaign-products" name="all_products" value="1" checked />';
|
252 |
+
} ?> Include all Merchant Center products</label>
|
253 |
+
</div>
|
254 |
+
<div class="col-md-12 row" style="display: none;">
|
255 |
+
<div class="col-md-4"></div>
|
256 |
+
<label class="">
|
257 |
+
<?php
|
258 |
+
if (isset($campaign_details) && $campaign_details->category_level > 0 && $campaign_details->category_id > 0) {
|
259 |
+
echo '<input type="radio" id="campaign-product-partition" value="0" name="all_products" checked />';
|
260 |
} else {
|
261 |
+
echo '<input type="radio" id="campaign-product-partition" value="0" name="all_products" />';
|
262 |
+
} ?> Select products using product partition filters</label>
|
263 |
+
</div>
|
264 |
+
<div class="col-md-12 row" style="display: none;">
|
265 |
+
<div class="col-md-4"></div>
|
266 |
+
<label>Product Partition filter dimension:</label><b> Category</b>
|
267 |
+
</div>
|
268 |
+
<div class="col-md-12 row" style="display: none;">
|
269 |
+
<div class="col-md-4"></div>
|
270 |
+
<label>Dimension Value:</label>
|
271 |
+
<input type="hidden" name="category_level" id="category_level" value=" <?php echo (isset($campaign_details) && $campaign_details != '')?$campaign_details->category_level:""; ?>" />
|
272 |
+
<select class="col-md-3 ml-2" name="dimension" id="dimension" onchange="changeCategory()">
|
273 |
+
<?php
|
274 |
+
if (isset($campaign_details) && $campaign_details != '') {
|
275 |
+
for ($i = 0; $i < count($categories); $i++) {
|
276 |
+
if ($campaign_details->category_id == $categories[$i]->id) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
277 |
echo '<option value="' . $categories[$i]->id . '" level="' . $categories[$i]->level . '" selected="selected">' . $categories[$i]->name . '</option>';
|
278 |
+
} else {
|
279 |
echo '<option value="' . $categories[$i]->id . '" level="' . $categories[$i]->level . '">' . $categories[$i]->name . '</option>';
|
280 |
+
}
|
281 |
}
|
282 |
+
}?>
|
283 |
+
</select>
|
284 |
+
</div>
|
285 |
+
<div class="col-md-12 row">
|
286 |
+
<label class="form-group col-md-12 mt-2 mb-0 text-left font-weight-bold">Campaign duration: </label>
|
287 |
+
<p class="ml-3" style="text-align:left; font-size: 14px;">Your campaign will run until you pause it. You can pause your campaign at any time, however it can take up to 30 days for google to optimize your products and ads.</p>
|
288 |
+
</div>
|
289 |
+
</div>
|
290 |
+
<div class="col-12 row">
|
291 |
+
<button onclick="showLoader()" type="submit" class="btn btn-primary btn-success" id="update_campaign" name="update_campaign">Update Smart Shopping Campaign</button>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
292 |
</div>
|
293 |
+
</form>
|
294 |
+
<hr>
|
295 |
+
<form method="post">
|
296 |
+
<div class="text-left">
|
297 |
+
<p style="font-size: 14px;">Please note that campaigns will be created with accounts configured in previous steps.</p>
|
298 |
+
<p style="font-size: 14px;"><span>Google Merchant Center : <?php echo $this->merchantId; ?></span> <span>Google Ads Account Id : <?php echo $this->currentCustomerId; ?></span></p>
|
299 |
+
</div>
|
300 |
+
</form>
|
301 |
+
<?php } ?>
|
302 |
+
</div>
|
303 |
+
<div class="col-md-6 col-lg-4">
|
304 |
+
<?php echo get_tvc_help_html(); ?>
|
305 |
</div>
|
306 |
+
</div>
|
307 |
</div>
|
308 |
+
</div>
|
309 |
+
</div>
|
310 |
+
|
311 |
+
<script>
|
312 |
+
$(document).ready(function() {
|
313 |
+
$('.select2').select2();
|
314 |
+
});
|
315 |
+
jQuery('.create-merchant-center').addClass('active');
|
316 |
+
jQuery('.create-google-ads').addClass('active');
|
317 |
+
jQuery('.sync-products').addClass('active');
|
318 |
+
jQuery('.create-smart-shopping').addClass('active');
|
319 |
+
function changeCategory() {
|
320 |
+
let dimension = jQuery('#dimension').val();
|
321 |
+
let level = jQuery('#dimension').find('option[value='+dimension+']'). attr('level');
|
322 |
+
jQuery('#category_level').val(level);
|
323 |
+
}
|
324 |
+
function selectCountry() {
|
325 |
+
var sales_country = document.getElementById('sales_country').value;
|
326 |
+
var customer_id = "<?php echo $this->currentCustomerId; ?>";
|
327 |
+
jQuery('#feed-spinner').css('display', 'block');
|
328 |
+
jQuery.post(
|
329 |
+
myAjaxNonces.ajaxurl,
|
330 |
+
{
|
331 |
+
action: 'tvcajax-get-campaign-categories',
|
332 |
+
countryCode: sales_country,
|
333 |
+
customerId: customer_id,
|
334 |
+
campaignCategoryListsNonce: myAjaxNonces.campaignCategoryListsNonce
|
335 |
+
},
|
336 |
+
function( response ) {
|
337 |
+
|
338 |
+
let categories = JSON.parse(response);
|
339 |
+
// callback( tvc_validateResponse( response ) );
|
340 |
+
jQuery('#dimension').html('');
|
341 |
+
jQuery.each(categories, function(key, category) {
|
342 |
+
jQuery('#dimension').append(jQuery('<option value='+category.id+' level='+category.level+'>'+category.name+'</option>'));
|
343 |
+
});
|
344 |
+
jQuery('#feed-spinner').css('display', 'none');
|
345 |
+
}
|
346 |
+
);
|
347 |
+
}
|
348 |
+
function showLoader() {
|
349 |
+
if($('#campaign-name').val()!=''&&$('#campaign-budget').val()!=''){
|
350 |
+
jQuery('#feed-spinner').css('display', 'block');
|
351 |
+
}
|
352 |
+
}
|
353 |
+
</script>
|
354 |
+
<?php
|
355 |
+
}
|
356 |
+
public function success_message($customerId) {
|
357 |
+
$class = 'notice notice-success';
|
358 |
+
$message = esc_html__($customerId . ' Set as default Ads Account ID.', 'sample-text-domain');
|
359 |
+
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html($message));
|
360 |
+
}
|
361 |
+
|
362 |
+
public function success_messageV2($campaign_name, $status) {
|
363 |
+
$active = ($status == true) ? 'active' : 'inactive';
|
364 |
+
$class = 'notice notice-success';
|
365 |
+
//$message = esc_html__($campaign_name . ' Campaign Set as '.$active.'.', 'sample-text-domain');
|
366 |
+
// return '<div class='.$class.'><p>'.$campaign_name.' Campaign Set as '.$active.'</p></div>';
|
367 |
+
$message = $campaign_name . ' set as ' . $active;
|
368 |
+
return $message;
|
369 |
+
}
|
370 |
+
|
371 |
+
public function success_deleteMessage($campaign_name) {
|
372 |
+
//$active = ($status == true) ? 'active' : 'inactive';
|
373 |
+
$class = 'notice notice-success';
|
374 |
+
//$message = esc_html__($campaign_name . ' Campaign Set as '.$active.'.', 'sample-text-domain');
|
375 |
+
// return '<div class='.$class.'><p>'.$campaign_name.' Campaign Set as '.$active.'</p></div>';
|
376 |
+
$message = $campaign_name . ' is deleted successfully';
|
377 |
+
return $message;
|
378 |
+
}
|
379 |
+
}
|
includes/setup/class-tatvic-category-selector-element.php
CHANGED
@@ -28,20 +28,10 @@ if ( ! class_exists( 'Tatvic_Category_Selector_Element' ) ) :
|
|
28 |
|
29 |
$category_row_class = 'mapping' === $mode ? 'tvc-category-mapping-selector' : 'tvc-category-selector';
|
30 |
$mode_column = 'mapping' === $mode ? self::category_mapping_selector( 'catmap', $category->term_id, true, $ee_prod_mapped_cats ) : self::category_description_data_item( $category->term_id );
|
31 |
-
//print_r($ee_prod_mapped_cats);
|
32 |
-
|
33 |
-
// return '<tr id="category-' . $category->term_id . '"><th class="check-column" scope="row" id="shop-category-selector">
|
34 |
-
// <input class="' . $category_row_class . '" data-children="' . $category_children . '" id="feed-selector-' . $category->term_id . '"
|
35 |
-
// type="checkbox" value="' . $category->term_id . '" title="Select ' . $category->name . '">
|
36 |
-
// </th><td id="shop-category" class="col30w">' .
|
37 |
-
// $level_indicator . $category->name .
|
38 |
-
// '</td><td class="field-header col55w"><div id="feed-category-' . $category->term_id . '"></div>' .
|
39 |
-
// $mode_column . '</td>
|
40 |
-
// <td class="category-count col10w">' . $category->category_count . '</td></tr>';
|
41 |
return '<div class="row">
|
42 |
-
<div class="col-6
|
43 |
-
<div class="form-group
|
44 |
-
<label class="form-label-control">'
|
45 |
</div>
|
46 |
</div>
|
47 |
<div class="col-6 align-self-center">
|
28 |
|
29 |
$category_row_class = 'mapping' === $mode ? 'tvc-category-mapping-selector' : 'tvc-category-selector';
|
30 |
$mode_column = 'mapping' === $mode ? self::category_mapping_selector( 'catmap', $category->term_id, true, $ee_prod_mapped_cats ) : self::category_description_data_item( $category->term_id );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
return '<div class="row">
|
32 |
+
<div class="col-6">
|
33 |
+
<div class="form-group shop-category">
|
34 |
+
<label class="form-label-control">' . $category->name . ' '.$level_indicator .'</label>
|
35 |
</div>
|
36 |
</div>
|
37 |
<div class="col-6 align-self-center">
|
includes/setup/google-ads.php
CHANGED
@@ -4,8 +4,10 @@ class GoogleAds {
|
|
4 |
protected $url = "";
|
5 |
protected $subscriptionId = "";
|
6 |
protected $google_detail;
|
|
|
7 |
public function __construct($theURL = '') {
|
8 |
$this->TVC_Admin_Helper = new TVC_Admin_Helper();
|
|
|
9 |
$this->url = $this->TVC_Admin_Helper->get_connect_url();
|
10 |
$this->subscriptionId = $this->TVC_Admin_Helper->get_subscriptionId();
|
11 |
$this->google_detail = $this->TVC_Admin_Helper->get_ee_options_data();
|
@@ -13,7 +15,9 @@ class GoogleAds {
|
|
13 |
}
|
14 |
|
15 |
public function create_form() {
|
|
|
16 |
if (isset($_POST['google-add'])) {
|
|
|
17 |
$googleDetail = $this->google_detail;
|
18 |
$googleDetail_setting = $this->google_detail['setting'];
|
19 |
if(isset($_POST['remarketing_tags'])){
|
@@ -36,10 +40,9 @@ class GoogleAds {
|
|
36 |
$googleDetail_setting->link_google_analytics_with_google_ads = 0;
|
37 |
}
|
38 |
$googleDetail['setting'] =$googleDetail_setting;
|
39 |
-
$this->TVC_Admin_Helper->set_ee_options_data($googleDetail);
|
40 |
-
$class = '
|
41 |
-
$message = esc_html__('
|
42 |
-
printf('<div class="%1$s"><p>%2$s</p></div>', esc_attr($class), esc_html($message));
|
43 |
}
|
44 |
|
45 |
$googleDetail = [];
|
@@ -47,138 +50,130 @@ class GoogleAds {
|
|
47 |
if ($this->google_detail['setting']) {
|
48 |
$googleDetail = $this->google_detail['setting'];
|
49 |
}
|
50 |
-
}
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
</div>
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
<p class="ga-text">
|
90 |
-
<?php echo (isset($googleDetail->property_id) && $googleDetail->property_id != '' ? $googleDetail->property_id : '--');?>
|
91 |
-
</p>
|
92 |
-
</div>
|
93 |
-
<div class="col-6 col-md-3">
|
94 |
-
<?php
|
95 |
-
if (isset($googleDetail->property_id) && $googleDetail->property_id != '') {
|
96 |
-
echo '<p class="ga-text text-right">Click here to <a target="_blank" href="' . $this->url . '" class="text-underline">update</a></p>';
|
97 |
-
} else {
|
98 |
-
echo '<p class="ga-text text-right">Click here to <a href="#" class="text-underline" data-toggle="modal" data-target="#tvc_google_connect">connect</a></p>';
|
99 |
-
} ?>
|
100 |
-
</div>
|
101 |
-
</div>
|
102 |
-
<div class="row mb-3">
|
103 |
-
<div class="col-6 col-md-6">
|
104 |
-
<h2 class="ga-title">Linked Google Merchant Center Account:</h2>
|
105 |
-
</div>
|
106 |
-
<div class="col-6 col-md-3">
|
107 |
-
<p class="ga-text"><?php echo (isset($googleDetail->google_merchant_center_id) && $googleDetail->google_merchant_center_id != '' ? $googleDetail->google_merchant_center_id : '--'); ?>
|
108 |
-
</p>
|
109 |
-
</div>
|
110 |
-
<div class="col-6 col-md-3">
|
111 |
-
<?php
|
112 |
-
if (isset($googleDetail->google_merchant_center_id) && $googleDetail->google_merchant_center_id != '') {
|
113 |
-
echo '<p class="ga-text text-right">Click here to <a target="_blank" href="' . $this->url . '" class="text-underline">update</a></p>';
|
114 |
-
} else {
|
115 |
-
echo '<p class="ga-text text-right">Click here to <a href="#" class="text-underline" data-toggle="modal" data-target="#tvc_google_connect">connect</a></p>';
|
116 |
-
} ?>
|
117 |
-
</div>
|
118 |
-
</div>
|
119 |
-
<?php
|
120 |
-
if (isset($googleDetail->google_ads_id) && $googleDetail->google_ads_id != '') { ?>
|
121 |
-
<div class="row">
|
122 |
-
<div class="col-md-12">
|
123 |
-
<div class="form-group">
|
124 |
-
<div class="tvc-custom-control tvc-custom-checkbox">
|
125 |
-
<input type="checkbox" class="tvc-custom-control-input" id="customCheck1" name="remarketing_tags" value="1" <?php echo ($googleDetail->remarketing_tags == 1) ? 'checked="checked"' : ''; ?> >
|
126 |
-
<label class="tvc-custom-control-input" for="customCheck1">Enable remarketing tags</label>
|
127 |
-
</div>
|
128 |
-
</div>
|
129 |
-
</div>
|
130 |
-
<div class="col-md-12">
|
131 |
-
<div class="form-group">
|
132 |
-
<div class="tvc-custom-control tvc-custom-checkbox">
|
133 |
-
<input type="checkbox" class="tvc-custom-control-input" id="customCheck2" name="dynamic_remarketing_tags" value="1" <?php echo ($googleDetail->dynamic_remarketing_tags == 1) ? 'checked="checked"' : ''; ?>>
|
134 |
-
<label class="tvc-custom-control-input" for="customCheck2">Enable dynamic remarketing tags</label>
|
135 |
-
</div>
|
136 |
-
</div>
|
137 |
-
</div>
|
138 |
-
<div class="col-md-12">
|
139 |
-
<div class="form-group">
|
140 |
-
<div class="tvc-custom-control tvc-custom-checkbox">
|
141 |
-
<input type="checkbox" class="tvc-custom-control-input" id="customCheck3" name="link_google_analytics_with_google_ads" value="1" <?php echo ($googleDetail->link_google_analytics_with_google_ads == 1) ? 'checked="checked"' : ''; ?> >
|
142 |
-
<label class="tvc-custom-control-input" for="customCheck3">Link Google analytics with google ads</label>
|
143 |
-
</div>
|
144 |
-
</div>
|
145 |
-
</div>
|
146 |
-
</div>
|
147 |
-
<?php
|
148 |
-
}else{
|
149 |
-
$icon_img ='<img src="'.ENHANCAD_PLUGIN_URL.'/admin/images/config-success.svg" alt="configuration success" class="config-success">';
|
150 |
-
?>
|
151 |
-
<h2 class="ga-title">Connect Google Ads account to enable below features.</h2>
|
152 |
-
<br>
|
153 |
-
<ul>
|
154 |
-
<li><?php echo $icon_img;?>Enable remarketing tags</li>
|
155 |
-
<li><?php echo $icon_img;?>Enable dynamic remarketing tags</li>
|
156 |
-
<li><?php echo $icon_img;?>Link Google analytics with google ads</li>
|
157 |
-
|
158 |
-
</ul>
|
159 |
<?php
|
|
|
|
|
|
|
|
|
160 |
} ?>
|
161 |
</div>
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
166 |
</div>
|
167 |
-
<?php } ?>
|
168 |
-
</form>
|
169 |
-
</div>
|
170 |
-
<div class="col-md-6 col-lg-4">
|
171 |
-
<div class="right-content">
|
172 |
-
<?php echo get_tvc_google_ads_help_html(); ?>
|
173 |
</div>
|
174 |
</div>
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
180 |
</div>
|
181 |
-
</div>
|
182 |
<?php echo get_connect_google_popup_html();
|
183 |
}
|
184 |
}
|
4 |
protected $url = "";
|
5 |
protected $subscriptionId = "";
|
6 |
protected $google_detail;
|
7 |
+
protected $customApiObj;
|
8 |
public function __construct($theURL = '') {
|
9 |
$this->TVC_Admin_Helper = new TVC_Admin_Helper();
|
10 |
+
$this->customApiObj = new CustomApi();
|
11 |
$this->url = $this->TVC_Admin_Helper->get_connect_url();
|
12 |
$this->subscriptionId = $this->TVC_Admin_Helper->get_subscriptionId();
|
13 |
$this->google_detail = $this->TVC_Admin_Helper->get_ee_options_data();
|
15 |
}
|
16 |
|
17 |
public function create_form() {
|
18 |
+
$message = ""; $class="";
|
19 |
if (isset($_POST['google-add'])) {
|
20 |
+
$response = $this->customApiObj->updateTrackingOption($_POST);
|
21 |
$googleDetail = $this->google_detail;
|
22 |
$googleDetail_setting = $this->google_detail['setting'];
|
23 |
if(isset($_POST['remarketing_tags'])){
|
40 |
$googleDetail_setting->link_google_analytics_with_google_ads = 0;
|
41 |
}
|
42 |
$googleDetail['setting'] =$googleDetail_setting;
|
43 |
+
$this->TVC_Admin_Helper->set_ee_options_data($googleDetail);
|
44 |
+
$class = 'alert-message tvc-alert-success';
|
45 |
+
$message = esc_html__('Your tracking options have been saved.');
|
|
|
46 |
}
|
47 |
|
48 |
$googleDetail = [];
|
50 |
if ($this->google_detail['setting']) {
|
51 |
$googleDetail = $this->google_detail['setting'];
|
52 |
}
|
53 |
+
}
|
54 |
+
?>
|
55 |
+
<div class="tab-content">
|
56 |
+
<?php if($message){
|
57 |
+
printf('<div class="%1$s"><div class="alert">%2$s</div></div>', esc_attr($class), esc_html($message));
|
58 |
+
}?>
|
59 |
+
<div class="tab-pane show active" id="googleAds">
|
60 |
+
<div class="tab-card" >
|
61 |
+
<div class="row">
|
62 |
+
<div class="col-md-6 col-lg-8 border-right">
|
63 |
+
<form method="post" name="google-analytic" class="tvc_ee_plugin_form">
|
64 |
+
<input type="hidden" name="subscription_id" value="<?php echo (($this->subscriptionId)?$this->subscriptionId:"");?>">
|
65 |
+
<div class="google-account-analytics">
|
66 |
+
<div class="row mb-3">
|
67 |
+
<div class="col-6 col-md-6 col-lg-6">
|
68 |
+
<h2 class="ga-title">Connected Google Ads account:</h2>
|
69 |
+
</div>
|
70 |
+
<div class="col-6 col-md-6 col-lg-6 text-right">
|
71 |
+
<div class="acc-num">
|
72 |
+
<p class="ga-text">
|
73 |
+
<?php echo ((isset($googleDetail->google_ads_id) && $googleDetail->google_ads_id != '') ? $googleDetail->google_ads_id : '<span>Get started</span>'); ?>
|
74 |
+
</p>
|
75 |
+
<?php
|
76 |
+
if (isset($googleDetail->google_ads_id) && $googleDetail->google_ads_id != '') {
|
77 |
+
echo '<p class="ga-text text-right"><a target="_blank" href="' . $this->url . '" class="text-underline"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/refresh.svg" alt="refresh"/></a></p>';
|
78 |
+
} else {
|
79 |
+
echo '<p class="ga-text text-right"><a href="#" class="text-underline" data-toggle="modal" data-target="#tvc_google_connect"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/add.svg" alt="connect account"/></a></p>';
|
80 |
+
}?>
|
81 |
+
</div>
|
82 |
+
</div>
|
83 |
+
|
84 |
</div>
|
85 |
+
<div class="row mb-3">
|
86 |
+
<div class="col-6 col-md-6 col-lg-6">
|
87 |
+
<h2 class="ga-title">Linked Google Analytics Account:</h2>
|
88 |
+
</div>
|
89 |
+
<div class="col-6 col-md-6 col-lg-6 text-right">
|
90 |
+
<div class="acc-num">
|
91 |
+
<p class="ga-text">
|
92 |
+
<?php echo (isset($googleDetail->property_id) && $googleDetail->property_id != '' ? $googleDetail->property_id : '<span>Get started</span>');?>
|
93 |
+
</p>
|
94 |
+
<?php
|
95 |
+
if(isset($googleDetail->property_id) && $googleDetail->property_id != ''){
|
96 |
+
echo '<p class="ga-text text-right"><a target="_blank" href="' . $this->url . '" class="text-underline"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/refresh.svg" alt="refresh"/></a></p>';
|
97 |
+
}else{
|
98 |
+
echo '<p class="ga-text text-right"><a href="#" class="text-underline" data-toggle="modal" data-target="#tvc_google_connect"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/add.svg" alt="connect account"/></a></p>';
|
99 |
+
} ?>
|
100 |
+
</div>
|
101 |
+
</div>
|
102 |
+
</div>
|
103 |
+
<div class="row mb-3">
|
104 |
+
<div class="col-6 col-md-6 col-lg-6">
|
105 |
+
<h2 class="ga-title">Linked Google Merchant Center Account:</h2>
|
106 |
+
</div>
|
107 |
+
<div class="col-6 col-md-6 col-lg-6 text-right">
|
108 |
+
<div class="acc-num">
|
109 |
+
<p class="ga-text"><?php echo (isset($googleDetail->google_merchant_center_id) && $googleDetail->google_merchant_center_id != '' ? $googleDetail->google_merchant_center_id : '<span>Get started</span>'); ?>
|
110 |
+
</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
<?php
|
112 |
+
if (isset($googleDetail->google_merchant_center_id) && $googleDetail->google_merchant_center_id != '') {
|
113 |
+
echo '<p class="ga-text text-right"><a target="_blank" href="' . $this->url . '" class="text-underline"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/refresh.svg" alt="refresh"/></a></p>';
|
114 |
+
} else {
|
115 |
+
echo '<p class="ga-text text-right"><a href="#" class="text-underline" data-toggle="modal" data-target="#tvc_google_connect"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/add.svg" alt="connect account"/></a></p>';
|
116 |
} ?>
|
117 |
</div>
|
118 |
+
</div>
|
119 |
+
</div>
|
120 |
+
<?php
|
121 |
+
if (isset($googleDetail->google_ads_id) && $googleDetail->google_ads_id != '') { ?>
|
122 |
+
<div class="row">
|
123 |
+
<div class="col-md-12">
|
124 |
+
<div class="form-group">
|
125 |
+
<div class="tvc-custom-control tvc-custom-checkbox">
|
126 |
+
<input type="checkbox" class="tvc-custom-control-input" id="customCheck1" name="remarketing_tags" value="1" <?php echo ($googleDetail->remarketing_tags == 1) ? 'checked="checked"' : ''; ?> >
|
127 |
+
<label class="custom-control-label" for="customCheck1">Enable remarketing tags</label>
|
128 |
+
</div>
|
129 |
+
</div>
|
130 |
+
</div>
|
131 |
+
<div class="col-md-12">
|
132 |
+
<div class="form-group">
|
133 |
+
<div class="tvc-custom-control tvc-custom-checkbox">
|
134 |
+
<input type="checkbox" class="tvc-custom-control-input" id="customCheck2" name="dynamic_remarketing_tags" value="1" <?php echo ($googleDetail->dynamic_remarketing_tags == 1) ? 'checked="checked"' : ''; ?>>
|
135 |
+
<label class="custom-control-label" for="customCheck2">Enable dynamic remarketing tags</label>
|
136 |
+
</div>
|
137 |
+
</div>
|
138 |
+
</div>
|
139 |
+
<div class="col-md-12">
|
140 |
+
<div class="form-group">
|
141 |
+
<div class="tvc-custom-control tvc-custom-checkbox">
|
142 |
+
<input type="checkbox" class="tvc-custom-control-input" id="customCheck3" name="link_google_analytics_with_google_ads" value="1" <?php echo ($googleDetail->link_google_analytics_with_google_ads == 1) ? 'checked="checked"' : ''; ?> >
|
143 |
+
<label class="custom-control-label" for="customCheck3">Link Google analytics with google ads</label>
|
144 |
+
</div>
|
145 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
146 |
</div>
|
147 |
</div>
|
148 |
+
<?php
|
149 |
+
}else{
|
150 |
+
$icon_img ='<img src="'.ENHANCAD_PLUGIN_URL.'/admin/images/config-success.svg" alt="configuration success" class="config-success">';
|
151 |
+
?>
|
152 |
+
<h2 class="ga-title">Connect Google Ads account to enable below features.</h2>
|
153 |
+
<br>
|
154 |
+
<ul>
|
155 |
+
<li><?php echo $icon_img;?>Enable remarketing tags</li>
|
156 |
+
<li><?php echo $icon_img;?>Enable dynamic remarketing tags</li>
|
157 |
+
<li><?php echo $icon_img;?>Link Google analytics with google ads</li>
|
158 |
+
</ul>
|
159 |
+
<?php
|
160 |
+
} ?>
|
161 |
+
</div>
|
162 |
+
<?php
|
163 |
+
if (isset($googleDetail->google_ads_id) && $googleDetail->google_ads_id != '') { ?>
|
164 |
+
<div class="text-left">
|
165 |
+
<button type="submit" id="google-add" class="btn btn-primary btn-success" name="google-add">Save</button>
|
166 |
+
</div>
|
167 |
+
<?php } ?>
|
168 |
+
</form>
|
169 |
+
</div>
|
170 |
+
<div class="col-md-6 col-lg-4">
|
171 |
+
<?php echo get_tvc_google_ads_help_html(); ?>
|
172 |
+
</div>
|
173 |
+
</div>
|
174 |
+
</div>
|
175 |
</div>
|
176 |
+
</div>
|
177 |
<?php echo get_connect_google_popup_html();
|
178 |
}
|
179 |
}
|
includes/setup/google-shopping-feed-gaa-config.php
CHANGED
@@ -16,7 +16,7 @@ class GAAConfiguration {
|
|
16 |
$this->subscriptionId = $this->TVC_Admin_Helper->get_subscriptionId();
|
17 |
$this->country = $this->TVC_Admin_Helper->get_woo_country();
|
18 |
$this->site_url = "admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=";
|
19 |
-
$this->url = $this->TVC_Admin_Helper->get_connect_url();
|
20 |
$this->html_run();
|
21 |
}
|
22 |
public function includes() {
|
@@ -31,11 +31,10 @@ class GAAConfiguration {
|
|
31 |
}
|
32 |
|
33 |
public function wooCommerceAttributes() {
|
34 |
-
$queries = new TVC_Queries();
|
35 |
global $wpdb;
|
36 |
$tve_table_prefix = $wpdb->prefix;
|
37 |
-
$column1 = json_decode(json_encode($
|
38 |
-
$column2 = json_decode(json_encode($
|
39 |
return array_merge($column1, $column2);
|
40 |
}
|
41 |
|
@@ -62,104 +61,102 @@ class GAAConfiguration {
|
|
62 |
$googleDetail = $google_detail['setting'];
|
63 |
}
|
64 |
}?>
|
65 |
-
<div class="
|
66 |
-
<div class="
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
<div class="col-6 col-md-3">
|
90 |
-
<?php
|
91 |
if(isset($googleDetail->google_merchant_center_id) && $googleDetail->google_merchant_center_id != ''){
|
92 |
-
echo '<p class="ga-text text-right"
|
93 |
}else{
|
94 |
-
echo '<p class="ga-text text-right"
|
95 |
}?>
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
if (isset($googleDetail->google_ads_id) && $googleDetail->google_ads_id != '') {
|
108 |
-
echo '<p class="ga-text text-right">Click here to <a target="_blank" href="' . $this->url . '" class="text-underline">update</a></p>';
|
109 |
-
} else {
|
110 |
-
echo '<p class="ga-text text-right">Click here to <a href="#" data-toggle="modal" data-target="#tvc_google_connect" class="text-underline">connect</a></p>';
|
111 |
-
} ?>
|
112 |
-
</div>
|
113 |
-
</div>
|
114 |
<?php
|
115 |
-
if (isset($googleDetail->
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
<div class="col-6 col-md-6">
|
121 |
-
<button id="tvc_btn_product_sync" type="button" class="btn btn-primary btn-success" data-toggle="modal" data-target="#syncProduct">Sync New Products</button>
|
122 |
-
</div>
|
123 |
-
</div>
|
124 |
-
<div class="row mb-3">
|
125 |
-
<div class="col-6 col-md-6">
|
126 |
-
<h2 class="ga-title">Smart Shopping Campaigns:</h2>
|
127 |
-
</div>
|
128 |
-
<div class="col-6 col-md-6">
|
129 |
-
<a href="admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=add_campaign_page" class="btn btn-primary btn-success">Create Smart Shopping Campaign</a>
|
130 |
-
</div>
|
131 |
-
</div>
|
132 |
-
<?php }else{ ?>
|
133 |
-
<div class="row mb-3">
|
134 |
-
<div class="col-6 col-md-6">
|
135 |
-
<h2 class="ga-title">Sync Products:</h2>
|
136 |
-
</div>
|
137 |
-
<div class="col-6 col-md-6">
|
138 |
-
<button type="button" class="btn btn-primary btn-success" data-toggle="modal" data-target="#tvc_google_connect">Sync New Products</button>
|
139 |
-
</div>
|
140 |
-
</div>
|
141 |
-
<div class="row mb-3">
|
142 |
-
<div class="col-6 col-md-6">
|
143 |
-
<h2 class="ga-title">Smart Shopping Campaigns:</h2>
|
144 |
-
</div>
|
145 |
-
<div class="col-6 col-md-6">
|
146 |
-
<a href="#" class="btn btn-primary btn-success" data-toggle="modal" data-target="#tvc_google_connect">Create Smart Shopping Campaign</a>
|
147 |
-
</div>
|
148 |
-
</div>
|
149 |
-
<?php } ?>
|
150 |
-
</div>
|
151 |
</div>
|
152 |
</div>
|
153 |
-
|
154 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
</div>
|
156 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
157 |
</div>
|
158 |
-
|
159 |
-
|
160 |
-
|
|
|
|
|
|
|
161 |
</div>
|
162 |
</div>
|
|
|
163 |
<div class="modal fade popup-modal create-campa overlay" id="syncProduct" data-backdrop="false">
|
164 |
<div class="modal-dialog modal-dialog-centered">
|
165 |
<div class="modal-content">
|
@@ -205,8 +202,12 @@ class GAAConfiguration {
|
|
205 |
echo '<div class="row">
|
206 |
<div class="col-6 align-self-center">
|
207 |
<div class="form-group">
|
208 |
-
<span class="td-head">' . $attribute["field"] . " " . (isset($attribute["required"]) && $attribute["required"] == 1 ? '<span style="color: red;"> *</span>' : "") . '
|
209 |
-
<
|
|
|
|
|
|
|
|
|
210 |
</div>
|
211 |
</div>
|
212 |
<div class="col-6 align-self-center">
|
@@ -359,7 +360,7 @@ function submitProductSyncUp() {
|
|
359 |
window.location.replace("<?php echo $this->site_url.'sync_product_page'; ?>");
|
360 |
}, 7000);
|
361 |
} else {
|
362 |
-
|
363 |
}
|
364 |
}
|
365 |
);
|
16 |
$this->subscriptionId = $this->TVC_Admin_Helper->get_subscriptionId();
|
17 |
$this->country = $this->TVC_Admin_Helper->get_woo_country();
|
18 |
$this->site_url = "admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=";
|
19 |
+
$this->url = $this->TVC_Admin_Helper->get_connect_url();
|
20 |
$this->html_run();
|
21 |
}
|
22 |
public function includes() {
|
31 |
}
|
32 |
|
33 |
public function wooCommerceAttributes() {
|
|
|
34 |
global $wpdb;
|
35 |
$tve_table_prefix = $wpdb->prefix;
|
36 |
+
$column1 = json_decode(json_encode($this->TVC_Admin_Helper->getTableColumns($tve_table_prefix.'posts')), true);
|
37 |
+
$column2 = json_decode(json_encode($this->TVC_Admin_Helper->getTableData($tve_table_prefix.'postmeta', ['meta_key'])), true);
|
38 |
return array_merge($column1, $column2);
|
39 |
}
|
40 |
|
61 |
$googleDetail = $google_detail['setting'];
|
62 |
}
|
63 |
}?>
|
64 |
+
<div class="tab-content">
|
65 |
+
<div class="tab-pane show active" id="googleShoppingFeed">
|
66 |
+
<div class="tab-card">
|
67 |
+
<div class="row">
|
68 |
+
<div class="col-md-6 col-lg-8 edit-section">
|
69 |
+
<div class="edit-header-section">
|
70 |
+
<script>
|
71 |
+
var back_img = '<img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/left-angle-arrow.svg'; ?>" alt="back"/>';
|
72 |
+
document.write('<a href="' + document.referrer + '" class="back-btn">'+back_img+'<span>Back</span></a>');
|
73 |
+
</script>
|
74 |
+
</div>
|
75 |
+
<div class="configuration-section" id="config-pt1">
|
76 |
+
<?php echo get_google_shopping_tabs_html($this->site_url,(isset($googleDetail->google_merchant_center_id))?$googleDetail->google_merchant_center_id:""); ?>
|
77 |
+
</div>
|
78 |
+
<div class="mt-3" id="config-pt2">
|
79 |
+
<div class="google-account-analytics" id="gaa-config">
|
80 |
+
<div class="row mb-3">
|
81 |
+
<div class="col-6 col-md-6 col-lg-6">
|
82 |
+
<h2 class="ga-title">Connected Google Merchant center account:</h2>
|
83 |
+
</div>
|
84 |
+
<div class="col-6 col-md-6 col-lg-6 text-right">
|
85 |
+
<div class="acc-num">
|
86 |
+
<p class="ga-text"><?php echo ((isset($googleDetail->google_merchant_center_id) && $googleDetail->google_merchant_center_id != '') ? $googleDetail->google_merchant_center_id : '<span>Get started</span>'); ?></p>
|
87 |
+
<?php
|
|
|
|
|
88 |
if(isset($googleDetail->google_merchant_center_id) && $googleDetail->google_merchant_center_id != ''){
|
89 |
+
echo '<p class="ga-text text-right"><a target="_blank" href="' . $this->url . '" class="text-underline"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/refresh.svg" alt="refresh"/></a></p>';
|
90 |
}else{
|
91 |
+
echo '<p class="ga-text text-right"><a href="#" class="text-underline" data-toggle="modal" data-target="#tvc_google_connect"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/add.svg" alt="connect account"/></a></p>';
|
92 |
}?>
|
93 |
+
</div>
|
94 |
+
</div>
|
95 |
+
|
96 |
+
</div>
|
97 |
+
<div class="row mb-3">
|
98 |
+
<div class="col-6 col-md-6 col-lg-6">
|
99 |
+
<h2 class="ga-title">Linked Google Ads Account:</h2>
|
100 |
+
</div>
|
101 |
+
<div class="col-6 col-md-6 col-lg-6 text-right">
|
102 |
+
<div class="acc-num">
|
103 |
+
<p class="ga-text"><?php echo (isset($googleDetail->google_ads_id) && $googleDetail->google_ads_id != '' ? $googleDetail->google_ads_id : '<span>Get started</span>');?></p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
<?php
|
105 |
+
if (isset($googleDetail->google_ads_id) && $googleDetail->google_ads_id != '') {
|
106 |
+
echo '<p class="ga-text text-right"><a target="_blank" href="' . $this->url . '" class="text-underline"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/refresh.svg" alt="refresh"/></a></p>';
|
107 |
+
} else {
|
108 |
+
echo '<p class="ga-text text-right"><a href="#" data-toggle="modal" data-target="#tvc_google_connect" class="text-underline"><img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/add.svg" alt="connect account"/></a></p>';
|
109 |
+
} ?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
110 |
</div>
|
111 |
</div>
|
112 |
+
</div>
|
113 |
+
<?php
|
114 |
+
if (isset($googleDetail->google_merchant_center_id) && $googleDetail->google_merchant_center_id != '') {?>
|
115 |
+
<div class="row mb-3">
|
116 |
+
<div class="col-6 col-md-4">
|
117 |
+
<h2 class="ga-title">Sync Products:</h2>
|
118 |
+
</div>
|
119 |
+
<div class="col-6 col-md-4">
|
120 |
+
<button id="tvc_btn_product_sync" type="button" class="btn btn-primary btn-success" data-toggle="modal" data-target="#syncProduct">Sync New Products</button>
|
121 |
+
</div>
|
122 |
+
</div>
|
123 |
+
<div class="row mb-3">
|
124 |
+
<div class="col-6 col-md-4">
|
125 |
+
<h2 class="ga-title">Smart Shopping Campaigns:</h2>
|
126 |
+
</div>
|
127 |
+
<div class="col-6 col-md-6">
|
128 |
+
<a href="admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=add_campaign_page" class="btn btn-primary btn-success">Create Smart Shopping Campaign</a>
|
129 |
</div>
|
130 |
</div>
|
131 |
+
<?php }else{ ?>
|
132 |
+
<div class="row mb-3">
|
133 |
+
<div class="col-6 col-md-4">
|
134 |
+
<h2 class="ga-title">Sync Products:</h2>
|
135 |
+
</div>
|
136 |
+
<div class="col-6 col-md-4">
|
137 |
+
<button type="button" class="btn btn-primary btn-success" data-toggle="modal" data-target="#tvc_google_connect">Sync New Products</button>
|
138 |
+
</div>
|
139 |
+
</div>
|
140 |
+
<div class="row mb-3">
|
141 |
+
<div class="col-6 col-md-4">
|
142 |
+
<h2 class="ga-title">Smart Shopping Campaigns:</h2>
|
143 |
+
</div>
|
144 |
+
<div class="col-6 col-md-6">
|
145 |
+
<a href="#" class="btn btn-primary btn-success" data-toggle="modal" data-target="#tvc_google_connect">Create Smart Shopping Campaign</a>
|
146 |
+
</div>
|
147 |
+
</div>
|
148 |
+
<?php } ?>
|
149 |
+
</div>
|
150 |
</div>
|
151 |
+
</div>
|
152 |
+
<div class="col-md-6 col-lg-4">
|
153 |
+
<?php echo get_tvc_help_html(); ?>
|
154 |
+
</div>
|
155 |
+
</div>
|
156 |
+
</div>
|
157 |
</div>
|
158 |
</div>
|
159 |
+
|
160 |
<div class="modal fade popup-modal create-campa overlay" id="syncProduct" data-backdrop="false">
|
161 |
<div class="modal-dialog modal-dialog-centered">
|
162 |
<div class="modal-content">
|
202 |
echo '<div class="row">
|
203 |
<div class="col-6 align-self-center">
|
204 |
<div class="form-group">
|
205 |
+
<span class="td-head">' . $attribute["field"] . " " . (isset($attribute["required"]) && $attribute["required"] == 1 ? '<span style="color: red;"> *</span>' : "") . '
|
206 |
+
<div class="tvc-tooltip">
|
207 |
+
<span class="tvc-tooltiptext tvc-tooltip-right">'.(isset($attribute["desc"])? $attribute["desc"]:"") .'</span>
|
208 |
+
<img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/informationI.svg" alt=""/>
|
209 |
+
</div>
|
210 |
+
</span>
|
211 |
</div>
|
212 |
</div>
|
213 |
<div class="col-6 align-self-center">
|
360 |
window.location.replace("<?php echo $this->site_url.'sync_product_page'; ?>");
|
361 |
}, 7000);
|
362 |
} else {
|
363 |
+
tvc_helper.tvc_alert("error","",rsp.message);
|
364 |
}
|
365 |
}
|
366 |
);
|
includes/setup/google-shopping-feed-shopping-campaigns.php
CHANGED
@@ -2,156 +2,141 @@
|
|
2 |
|
3 |
class CampaignsConfiguration
|
4 |
{
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
|
|
|
|
|
|
|
|
32 |
}
|
33 |
-
|
34 |
-
|
35 |
-
{
|
36 |
-
if (!class_exists('CustomApi.php')) {
|
37 |
-
require_once(__DIR__ . '/CustomApi.php');
|
38 |
-
}
|
39 |
-
if (!class_exists('ShoppingApi')) {
|
40 |
-
require_once(__DIR__ . '/ShoppingApi.php');
|
41 |
-
}
|
42 |
-
if (!class_exists('Tatvic_Category_Wrapper')) {
|
43 |
-
require_once(__DIR__ . '/tatvic-category-wrapper.php');
|
44 |
-
}
|
45 |
}
|
46 |
-
|
47 |
-
|
48 |
-
{
|
49 |
-
$this->spinner();
|
50 |
-
$this->create_form();
|
51 |
}
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
}
|
60 |
|
61 |
-
|
62 |
-
{
|
63 |
-
|
64 |
-
$date_range_type = isset($_POST['customRadio']) ? $_POST['customRadio'] : 1;
|
65 |
$days = (isset($_POST['days']) && $_POST['days'] != '') ? $_POST['days'] : 7;
|
66 |
$from_date = (isset($_POST['from_date']) && $_POST['from_date'] != '') ? $_POST['from_date'] : "";
|
67 |
$to_date = (isset($_POST['to_date']) && $_POST['to_date'] != '') ? $_POST['to_date'] : "";
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
$product_partition_performance = [];
|
75 |
$api_old_obj = new ShoppingApi();
|
76 |
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
|
|
92 |
if(count($campaigns_list) > 0) {
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
$campaign_performance_res = $api_old_obj->campaignPerformance($this->date_range_type, $this->days, $this->from_date, $this->to_date);
|
135 |
-
|
136 |
-
if (isset($campaign_performance_res->errors) && !empty($campaign_performance_res->errors)) {
|
137 |
-
|
138 |
-
} else {
|
139 |
-
$campaign_performance_res = $campaign_performance_res->data;
|
140 |
-
if ($campaign_performance_res['status'] == 200) {
|
141 |
-
$campaign_performance = $campaign_performance_res['data'];
|
142 |
-
}
|
143 |
-
}
|
144 |
}else if(isset($_GET['id']) && $_GET['id'] != '') {
|
145 |
//Product Performance
|
146 |
$product_performance_res = $api_old_obj->productPerformance($_GET['id'], $this->date_range_type, $this->days, $this->from_date, $this->to_date);
|
147 |
|
148 |
if (isset($product_performance_res->errors) && !empty($product_performance_res->errors)) {
|
149 |
|
150 |
-
} else {
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
}
|
156 |
|
157 |
//Product Partition Performance
|
@@ -159,578 +144,554 @@ class CampaignsConfiguration
|
|
159 |
|
160 |
if (isset($product_partition_performance_res->errors) && !empty($product_partition_performance_res->errors)) {
|
161 |
|
162 |
-
} else {
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
}
|
168 |
}
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
</div>';
|
394 |
-
}
|
395 |
-
|
396 |
-
echo'<div class="text-left">
|
397 |
-
<a href="admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=add_campaign_page" class="btn btn-primary btn-success">Create Smart Shopping Campaignn</a>
|
398 |
-
</div>
|
399 |
-
</div>
|
400 |
-
</div>
|
401 |
-
|
402 |
-
<div class="col-md-6 col-lg-4">
|
403 |
-
<div class="right-content">
|
404 |
-
'.get_tvc_help_html().'
|
405 |
-
</div>
|
406 |
-
</div>
|
407 |
-
</div>
|
408 |
-
</div>
|
409 |
-
</div>
|
410 |
-
</div>
|
411 |
-
</div>
|
412 |
-
</div>
|
413 |
-
</div>
|
414 |
</div>
|
415 |
<script type="text/javascript">
|
416 |
$(document).ready(function() {
|
417 |
$(".select2").select2();
|
418 |
-
|
419 |
-
|
420 |
-
var ctx = document.getElementById(
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
});
|
468 |
-
|
469 |
-
|
470 |
-
var ctx = document.getElementById(\'dailyCost\').getContext(\'2d\');
|
471 |
-
var dailyCostData = '. (isset($account_performance->dailyCost)?json_encode($account_performance->dailyCost):0) .' ;
|
472 |
-
|
473 |
-
var labels = [];
|
474 |
-
var values = [];
|
475 |
|
|
|
|
|
|
|
|
|
|
|
476 |
dailyCostData.forEach(costData => {
|
477 |
labels.push(costData.date);
|
478 |
values.push(costData.costs);
|
479 |
})
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
}
|
516 |
-
|
517 |
-
|
518 |
-
var ctx = document.getElementById(\'dailyConversions\').getContext(\'2d\');
|
519 |
-
var dailyConversionsData = '. (isset($account_performance->dailyConversions)?json_encode($account_performance->dailyConversions):0) .' ;
|
520 |
|
521 |
-
|
522 |
-
|
523 |
|
|
|
|
|
|
|
524 |
dailyConversionsData.forEach(conversionsData => {
|
525 |
labels.push(conversionsData.date);
|
526 |
values.push(conversionsData.conversions);
|
527 |
})
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
}
|
565 |
-
|
566 |
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
var labels = [];
|
571 |
-
var values = [];
|
572 |
|
|
|
|
|
|
|
573 |
dailySalesData.forEach(salesData => {
|
574 |
-
|
575 |
-
|
576 |
})
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
}
|
|
|
613 |
|
614 |
function validateAll() {
|
615 |
-
|
616 |
if ($("#customRange1").prop("checked")==true) {
|
617 |
jQuery("#date_range_form").submit();
|
618 |
}
|
619 |
|
620 |
if ($("#customRange2").prop("checked")==true) {
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
}
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
|
640 |
function changeStartDate() {
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
}
|
664 |
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
|
669 |
-
|
670 |
var confirm = window.confirm("Are you sure you want to delete campaign?");
|
671 |
var campaign_name = jQuery("#campaign_name_"+currentRow).val();
|
672 |
if(confirm) {
|
673 |
jQuery("#feed-spinner").css("display", "block");
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
}
|
698 |
}
|
699 |
|
700 |
function updateCampaignStatus(merchantId, customerId, campaignId, budget, budgetId, currentRow) {
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
);
|
732 |
}
|
733 |
-
</script>
|
734 |
-
|
|
|
735 |
}
|
736 |
?>
|
2 |
|
3 |
class CampaignsConfiguration
|
4 |
{
|
5 |
+
protected $merchantId;
|
6 |
+
protected $currentCustomerId;
|
7 |
+
protected $subscriptionId;
|
8 |
+
|
9 |
+
protected $customApiObj;
|
10 |
+
protected $currency_symbol;
|
11 |
+
public function __construct(){
|
12 |
+
$this->includes();
|
13 |
+
$this->TVC_Admin_Helper = new TVC_Admin_Helper();
|
14 |
+
$this->returnUrl = $_SERVER['REQUEST_URI'];
|
15 |
+
|
16 |
+
$this->customApiObj = new CustomApi();
|
17 |
+
|
18 |
+
$this->merchantId = $this->TVC_Admin_Helper->get_merchantId();
|
19 |
+
$this->currentCustomerId = $this->TVC_Admin_Helper->get_currentCustomerId();
|
20 |
+
$this->subscriptionId = $this->TVC_Admin_Helper->get_subscriptionId();;
|
21 |
+
$this->new_campaign = true;
|
22 |
+
|
23 |
+
$this->date_range_type = (isset($_POST['customRadio'])) ? $_POST['customRadio'] : 1;
|
24 |
+
$this->days = (isset($_POST['days']) && $_POST['days'] != '') ? $_POST['days'] : 7;
|
25 |
+
$this->from_date = (isset($_POST['from_date']) && $_POST['from_date'] != '') ? $_POST['from_date'] : "";
|
26 |
+
$this->to_date = (isset($_POST['to_date']) && $_POST['to_date'] != '') ? $_POST['to_date'] : "";
|
27 |
+
$this->country = $this->TVC_Admin_Helper->get_woo_country();
|
28 |
+
$this->currency_symbol = $this->TVC_Admin_Helper->get_user_currency_symbol();
|
29 |
+
$this->site_url = "admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=";
|
30 |
+
$this->html_run();
|
31 |
+
}
|
32 |
+
|
33 |
+
public function includes(){
|
34 |
+
if (!class_exists('CustomApi.php')) {
|
35 |
+
require_once(__DIR__ . '/CustomApi.php');
|
36 |
}
|
37 |
+
if (!class_exists('ShoppingApi')) {
|
38 |
+
require_once(__DIR__ . '/ShoppingApi.php');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
}
|
40 |
+
if (!class_exists('Tatvic_Category_Wrapper')) {
|
41 |
+
require_once(__DIR__ . '/tatvic-category-wrapper.php');
|
|
|
|
|
|
|
42 |
}
|
43 |
+
}
|
44 |
+
|
45 |
+
public function html_run(){
|
46 |
+
$this->TVC_Admin_Helper->add_spinner_html();
|
47 |
+
$this->create_form();
|
48 |
+
}
|
49 |
+
|
50 |
+
public function create_form(){
|
51 |
+
$googleDetail = [];
|
52 |
+
$google_detail = $this->TVC_Admin_Helper->get_ee_options_data();
|
53 |
+
if(isset($google_detail['setting'])){
|
54 |
+
if ($google_detail['setting']) {
|
55 |
+
$googleDetail = $google_detail['setting'];
|
56 |
+
}
|
57 |
}
|
58 |
|
59 |
+
$date_range_type = isset($_POST['customRadio']) ? $_POST['customRadio'] : 1;
|
|
|
|
|
|
|
60 |
$days = (isset($_POST['days']) && $_POST['days'] != '') ? $_POST['days'] : 7;
|
61 |
$from_date = (isset($_POST['from_date']) && $_POST['from_date'] != '') ? $_POST['from_date'] : "";
|
62 |
$to_date = (isset($_POST['to_date']) && $_POST['to_date'] != '') ? $_POST['to_date'] : "";
|
63 |
+
$campaigns_list = [];
|
64 |
+
$categories = [];
|
65 |
+
$campaign_performance = [];
|
66 |
+
$account_performance = [];
|
67 |
+
$product_performance = [];
|
68 |
+
$product_partition_performance = [];
|
|
|
69 |
$api_old_obj = new ShoppingApi();
|
70 |
|
71 |
+
$campaigns_list_res = $api_old_obj->getCampaigns();
|
72 |
+
|
73 |
+
if (isset($campaigns_list_res->errors) && !empty($campaigns_list_res->errors)) {
|
74 |
+
$class = 'error';
|
75 |
+
$message = esc_html__('Not any campaigns found.');
|
76 |
+
printf('<div class="alert-message"><div class="%1$s" role="alert"><img src="'. plugins_url('img/missing-warning.svg', __FILE__) . '" alt="" class="mr-2"/>%2$s</div></div>', esc_attr($class), esc_html($message));
|
77 |
+
} else if(isset($campaigns_list_res->data)){
|
78 |
+
$campaigns_list_res = $campaigns_list_res->data;
|
79 |
+
if ($campaigns_list_res['status'] == 200) {
|
80 |
+
$campaigns_list = $campaigns_list_res['data'];
|
81 |
+
}
|
82 |
+
}
|
83 |
+
$totalConversion = 0;
|
84 |
+
$totalSale = 0;
|
85 |
+
$totalCost = 0;
|
86 |
+
$totalClick = 0;
|
87 |
if(count($campaigns_list) > 0) {
|
88 |
+
//Account Performance
|
89 |
+
$account_performance_res = $api_old_obj->accountPerformance($this->date_range_type, $this->days, $this->from_date, $this->to_date);
|
90 |
+
if (isset($account_performance_res->errors) && !empty($account_performance_res->errors)) {
|
91 |
+
} else {
|
92 |
+
$account_performance_res = $account_performance_res->data;
|
93 |
+
if ($account_performance_res['status'] == 200) {
|
94 |
+
$account_performance = $account_performance_res['data'];
|
95 |
+
}
|
96 |
+
}
|
97 |
+
// Count account performance
|
98 |
+
if (!empty($account_performance->dailyConversions)) {
|
99 |
+
foreach($account_performance->dailyConversions as $key => $dailyConversion){
|
100 |
+
$totalConversion = $totalConversion + $dailyConversion->conversions;
|
101 |
+
}
|
102 |
+
}
|
103 |
+
if (!empty($account_performance->dailySales)) {
|
104 |
+
foreach ($account_performance->dailySales as $key => $dailySale) {
|
105 |
+
$totalSale = $totalSale + $dailySale->sales;
|
106 |
+
}
|
107 |
+
}
|
108 |
+
if (!empty($account_performance->dailyCost)) {
|
109 |
+
foreach ($account_performance->dailyCost as $key => $dailyCostData) {
|
110 |
+
$totalCost = $totalCost + $dailyCostData->costs;
|
111 |
+
}
|
112 |
+
}
|
113 |
+
|
114 |
+
if (!empty($account_performance->dailyClicks)) {
|
115 |
+
foreach ($account_performance->dailyClicks as $key => $dailyClick) {
|
116 |
+
$totalClick = $totalClick + $dailyClick->clicks;
|
117 |
+
}
|
118 |
+
}
|
119 |
+
//Campaign Performance
|
120 |
+
$campaign_performance_res = $api_old_obj->campaignPerformance($this->date_range_type, $this->days, $this->from_date, $this->to_date);
|
121 |
+
if (isset($campaign_performance_res->errors) && !empty($campaign_performance_res->errors)) {
|
122 |
+
|
123 |
+
} else if(isset($campaign_performance_res->data)){
|
124 |
+
$campaign_performance_res = $campaign_performance_res->data;
|
125 |
+
if ($campaign_performance_res['status'] == 200) {
|
126 |
+
$campaign_performance = $campaign_performance_res['data'];
|
127 |
+
}
|
128 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
}else if(isset($_GET['id']) && $_GET['id'] != '') {
|
130 |
//Product Performance
|
131 |
$product_performance_res = $api_old_obj->productPerformance($_GET['id'], $this->date_range_type, $this->days, $this->from_date, $this->to_date);
|
132 |
|
133 |
if (isset($product_performance_res->errors) && !empty($product_performance_res->errors)) {
|
134 |
|
135 |
+
} else if(isset($product_performance_res->data)){
|
136 |
+
$product_performance_res = $product_performance_res->data;
|
137 |
+
if ($product_performance_res['status'] == 200) {
|
138 |
+
$product_performance = $product_performance_res['data'];
|
139 |
+
}
|
140 |
}
|
141 |
|
142 |
//Product Partition Performance
|
144 |
|
145 |
if (isset($product_partition_performance_res->errors) && !empty($product_partition_performance_res->errors)) {
|
146 |
|
147 |
+
} else if(isset($product_partition_performance_res->data)){
|
148 |
+
$product_partition_performance_res = $product_partition_performance_res->data;
|
149 |
+
if ($product_partition_performance_res['status'] == 200) {
|
150 |
+
$product_partition_performance = $product_partition_performance_res['data'];
|
151 |
+
}
|
152 |
}
|
153 |
}
|
154 |
+
$plan_id = 1;
|
155 |
+
if(isset($googleDetail->plan_id) && !in_array($googleDetail->plan_id, array("1"))){
|
156 |
+
$plan_id = $googleDetail->plan_id;
|
157 |
+
}
|
158 |
+
?>
|
159 |
+
<div class="tab-content">
|
160 |
+
<div class="tab-pane show active" id="googleShoppingFeed">
|
161 |
+
<div class="tab-card">
|
162 |
+
<div class="row">
|
163 |
+
<div class="col-md-12">
|
164 |
+
<div class="edit-section">
|
165 |
+
<div class="edit-header-section">
|
166 |
+
<script>
|
167 |
+
var back_img = '<img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/left-angle-arrow.svg'; ?>" alt="back"/>';
|
168 |
+
document.write('<a href="' + document.referrer + '" class="back-btn">'+back_img+'<span>Back</span></a>');
|
169 |
+
</script>
|
170 |
+
</div>
|
171 |
+
<div class="row">
|
172 |
+
<div class="configuration-section col-md-6 col-lg-8">
|
173 |
+
<?php echo get_google_shopping_tabs_html($this->site_url, (isset($googleDetail->google_merchant_center_id))?$googleDetail->google_merchant_center_id:""); ?>
|
174 |
+
</div>
|
175 |
+
</div>
|
176 |
+
<div class="tab-content" id="myTabContent">
|
177 |
+
<div class="tab-pane fade show active" id="smartShopping">
|
178 |
+
<div class="smart-shopping-section">
|
179 |
+
<form method="post" id="date_range_form">
|
180 |
+
<input type="hidden" id="customRange2" name="customRadio" value="2" class="custom-control-input" checked="checked">
|
181 |
+
<div class="campaigns">
|
182 |
+
<div class="d-flex justify-content-between align-items-center">
|
183 |
+
<h3 class="title mb-0">Smart Shopping Campaigns</h3>
|
184 |
+
<div class="campaing-date">
|
185 |
+
<div class="input-group input-daterange">
|
186 |
+
<input type="text" class="form-control" id="from_date" name="from_date" value="<?php echo $this->from_date; ?>">
|
187 |
+
<div class="input-group-addon text px-3">to</div>
|
188 |
+
<input type="text" class="form-control" id="to_date" name="to_date" value="<?php echo $this->to_date; ?>">
|
189 |
+
<label class="mt-2 mb-2 error-msg float-left hidden" id="errorMessage">Please select both from and to date</label>
|
190 |
+
</div>
|
191 |
+
</div>
|
192 |
+
<div class="create-campaign-btn">
|
193 |
+
<button type="button" class="btn btn-outline-primary" onclick="validateAll()" id="select_range" name="select_range">Submit</button>
|
194 |
+
<a href="<?php echo $this->site_url.'add_campaign_page';?>" class="btn btn-outline-primary">Create a New Campaign</a>
|
195 |
+
</div>
|
196 |
+
</div>
|
197 |
+
</div>
|
198 |
+
</form>
|
199 |
+
<div class="account-performance">
|
200 |
+
<div class="row">
|
201 |
+
<div class="col-md-12">
|
202 |
+
<h3 class="title">Account Performance</h3>
|
203 |
+
</div>
|
204 |
+
<div class="col-md-6 col-lg-3">
|
205 |
+
<div class="chart">
|
206 |
+
<h4 class="sub-title">Daily Clicks</h4>
|
207 |
+
<canvas id="dailyClick" width="240" height="180"></canvas>
|
208 |
+
</div>
|
209 |
+
</div>
|
210 |
+
<div class="col-md-6 col-lg-3">
|
211 |
+
<div class="chart">
|
212 |
+
<h4 class="sub-title">Daily Cost</h4>
|
213 |
+
<canvas id="dailyCost" width="240" height="180"></canvas>
|
214 |
+
</div>
|
215 |
+
</div>
|
216 |
+
<div class="col-md-6 col-lg-3">
|
217 |
+
<div class="chart">
|
218 |
+
<h4 class="sub-title">Daily Conversions</h4>
|
219 |
+
<canvas id="dailyConversions" width="240" height="180"></canvas>
|
220 |
+
</div>
|
221 |
+
</div>
|
222 |
+
<div class="col-md-6 col-lg-3">
|
223 |
+
<div class="chart">
|
224 |
+
<h4 class="sub-title">Daily Sales</h4>
|
225 |
+
<canvas id="dailySales" width="240" height="180"></canvas>
|
226 |
+
</div>
|
227 |
+
</div>
|
228 |
+
</div>
|
229 |
+
</div>
|
230 |
+
</div>
|
231 |
+
<div class="account-performance">
|
232 |
+
<div class="row">
|
233 |
+
<div class="col-lg-8">
|
234 |
+
<h3 class="title">Compaign Performance</h3>
|
235 |
+
<div class="table-section">
|
236 |
+
<table id="campaingPerformance" class="table dt-responsive nowrap" style="width:100%">
|
237 |
+
<thead>
|
238 |
+
<tr>
|
239 |
+
<th>Campaign</th>
|
240 |
+
<th width="100">Daily Budget</th>
|
241 |
+
<th class="text-center">Active</th>
|
242 |
+
<th class="text-center">Clicks</th>
|
243 |
+
<th class="text-center">Cost</th>
|
244 |
+
<th class="text-center">Conversions</th>
|
245 |
+
<th class="text-center">Sales</th>
|
246 |
+
<th class="text-center">Action</th>
|
247 |
+
</tr>
|
248 |
+
</thead>
|
249 |
+
<tbody>
|
250 |
+
<?php
|
251 |
+
$total_campaigns = count($campaign_performance);
|
252 |
+
for ($i = 0; $i < $total_campaigns; $i++) {
|
253 |
+
$checked = $campaign_performance[$i]->active == 0 ? '' : 'checked';
|
254 |
+
if ($campaign_performance[$i]->active != 2) {?>
|
255 |
+
<tr>
|
256 |
+
<td><a href="<?php echo $this->site_url.'shopping_campaigns_page&id='.$campaign_performance[$i]->compaignId; ?>" class="text-underline"><?php echo $campaign_performance[$i]->compaignName; ?></a></td>
|
257 |
+
<td><?php echo $this->currency_symbol.$campaign_performance[$i]->dailyBudget; ?></td>
|
258 |
+
<td class="text-center">
|
259 |
+
<div class="custom-control custom-switch">
|
260 |
+
<input type="checkbox" class="custom-control-input" id="customSwitch<?php echo $i; ?>" <?php echo $checked; ?> onchange="updateCampaignStatus('<?php echo $this->merchantId; ?>','<?php echo $this->currentCustomerId; ?>','<?php echo $campaign_performance[$i]->compaignId; ?>','<?php echo $campaign_performance[$i]->dailyBudget; ?>','<?php echo $campaign_performance[$i]->budgetId; ?>','<?php echo$i; ?>')">
|
261 |
+
<label class="custom-control-label" for="customSwitch<?php echo $i; ?>"></label>
|
262 |
+
</div>
|
263 |
+
</td>
|
264 |
+
<td class="text-center"><?php echo $campaign_performance[$i]->clicks; ?></td>
|
265 |
+
<td class="text-center"><?php echo $campaign_performance[$i]->cost; ?></td>
|
266 |
+
<td class="text-center"><?php echo $campaign_performance[$i]->conversions; ?></td>
|
267 |
+
<td class="text-center"><?php echo $campaign_performance[$i]->sales; ?></td>
|
268 |
+
<input type="hidden" value="<?php echo $campaign_performance[$i]->compaignName; ?>" id="campaign_name_<?php echo $i; ?>" />
|
269 |
+
<td><a href="<?php echo $this->site_url.'add_campaign_page&edit='.$campaign_performance[$i]->compaignId; ?>">Edit</a> | <a href="#" onclick="deleteCampaign('<?php echo $this->merchantId; ?>','<?php echo $this->currentCustomerId; ?>','<?php echo $campaign_performance[$i]->compaignId; ?>','<?php echo $i; ?>')">Delete</a></td>
|
270 |
+
</tr>
|
271 |
+
<?php
|
272 |
+
}
|
273 |
+
}?>
|
274 |
+
</tbody>
|
275 |
+
</table>
|
276 |
+
</div>
|
277 |
+
</div>
|
278 |
+
<?php if($plan_id == 1){?>
|
279 |
+
<div class="col-lg-4">
|
280 |
+
<div class="pro-account ml-lg-auto">
|
281 |
+
<div class="card">
|
282 |
+
<div class="card-body">
|
283 |
+
<div class="account-img">
|
284 |
+
<img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/undraw_update_uxn2.svg'; ?>" alt=""/>
|
285 |
+
</div>
|
286 |
+
<div class="pro-content">
|
287 |
+
<h3 class="userName">Hello <?php echo get_bloginfo(); ?>!</h3>
|
288 |
+
<p>Explore <a target="_blank" href="<?php echo $this->TVC_Admin_Helper->get_pro_plan_site(); ?>" class="font-weight-bold">Pro account</a> with Premium features.</p>
|
289 |
+
</div>
|
290 |
+
</div>
|
291 |
+
<div class="card-footer">
|
292 |
+
<a target="_blank" href="<?php echo $this->TVC_Admin_Helper->get_pro_plan_site().'pricings'; ?>"><button class="btn btn-primary">Learn more</button></a>
|
293 |
+
</div>
|
294 |
+
</div>
|
295 |
+
</div>
|
296 |
+
</div>
|
297 |
+
<?php } ?>
|
298 |
+
</div>
|
299 |
+
</div><!-- account-performance-->
|
300 |
+
<?php
|
301 |
+
if(isset($_GET['id']) && $_GET['id'] != '') { ?>
|
302 |
+
<div class="account-performance">
|
303 |
+
<div class="row">
|
304 |
+
<div class="col-lg-6">
|
305 |
+
<h3 class="title">Product Performance :</h3>
|
306 |
+
<div class="table-section">
|
307 |
+
<table id="productPerformance" class="table dt-responsive nowrap" style="width:100%">
|
308 |
+
<thead>
|
309 |
+
<tr>
|
310 |
+
<th></th>
|
311 |
+
<th>Product</th>
|
312 |
+
<th class="text-center">Clicks</th>
|
313 |
+
<th class="text-center">Cost</th>
|
314 |
+
<th class="text-center">Conversions</th>
|
315 |
+
<th class="text-center">Sales</th>
|
316 |
+
</tr>
|
317 |
+
</thead>
|
318 |
+
<tbody>
|
319 |
+
<?php for ($i = 0; $i < count($product_performance); $i++) { ?>
|
320 |
+
<tr>
|
321 |
+
<td class="product-image"><img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/sneaker.jpg'; ?>" alt=""/></td>
|
322 |
+
<td><?php echo $product_performance[$i]->product; ?></td>
|
323 |
+
<td class="text-center"><?php echo $product_performance[$i]->clicks; ?></td>
|
324 |
+
<td class="text-center"><?php echo $product_performance[$i]->cost; ?></td>
|
325 |
+
<td class="text-center"><?php echo $product_performance[$i]->conversions; ?></td>
|
326 |
+
<td class="text-center"><?php echo $product_performance[$i]->sales; ?></td>
|
327 |
+
</tr>
|
328 |
+
<?php } ?>
|
329 |
+
</tbody>
|
330 |
+
</table>
|
331 |
+
</div>
|
332 |
+
</div>
|
333 |
+
</div>
|
334 |
+
</div><!-- account-performance-->
|
335 |
+
<div class="account-performance">
|
336 |
+
<div class="row">
|
337 |
+
<div class="col-lg-6">
|
338 |
+
<h3 class="title">Product Partition Performance</h3>
|
339 |
+
<div class="table-section">
|
340 |
+
<table id="productPerformance" class="table dt-responsive nowrap" style="width:100%">
|
341 |
+
<thead>
|
342 |
+
<tr>
|
343 |
+
<th>Campaign</th>
|
344 |
+
<th class="text-center">Product Dimension</th>
|
345 |
+
<th class="text-center">Product Dimension Value</th>
|
346 |
+
<th class="text-center">Clicks</th>
|
347 |
+
<th class="text-center">Cost</th>
|
348 |
+
<th class="text-center">Conversions</th>
|
349 |
+
<th class="text-center">Sales</th>
|
350 |
+
</tr>
|
351 |
+
</thead>
|
352 |
+
<tbody>
|
353 |
+
<?php for ($i = 0; $i < count($product_partition_performance); $i++) { ?>
|
354 |
+
<tr>
|
355 |
+
<td><a href="" class="text-underline"><?php echo $product_partition_performance[$i]->compaignName; ?></a></td>
|
356 |
+
<td class="text-center"><?php echo $product_partition_performance[$i]->productDimention; ?></td>
|
357 |
+
<td class="text-center"><?php echo $product_partition_performance[$i]->productDimentionValue; ?></td>
|
358 |
+
<td class="text-center"><?php echo $product_partition_performance[$i]->clicks; ?></td>
|
359 |
+
<td class="text-center"><?php echo $product_partition_performance[$i]->cost; ?></td>
|
360 |
+
<td class="text-center"><?php echo $product_partition_performance[$i]->conversions; ?></td>
|
361 |
+
<td class="text-center"><?php echo $product_partition_performance[$i]->sales; ?></td>
|
362 |
+
</tr>
|
363 |
+
<?php } ?>
|
364 |
+
</tbody>
|
365 |
+
</table>
|
366 |
+
</div>
|
367 |
+
</div>
|
368 |
+
</div>
|
369 |
+
</div><!-- account-performance -->
|
370 |
+
<?php } ?>
|
371 |
+
</div>
|
372 |
+
</div>
|
373 |
+
</div>
|
374 |
+
</div>
|
375 |
+
</div>
|
376 |
+
</div>
|
377 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
378 |
</div>
|
379 |
<script type="text/javascript">
|
380 |
$(document).ready(function() {
|
381 |
$(".select2").select2();
|
382 |
+
});
|
383 |
+
|
384 |
+
var ctx = document.getElementById('dailyClick').getContext('2d');
|
385 |
+
var dailyClicksData = jQuery.parseJSON('<?php echo (isset($account_performance->dailyClicks)?json_encode($account_performance->dailyClicks):''); ?>');
|
386 |
+
|
387 |
+
var labels = [];
|
388 |
+
var values = [];
|
389 |
+
if(dailyClicksData.length > 0 ){
|
390 |
+
dailyClicksData.forEach(clickData => {
|
391 |
+
labels.push(clickData.date);
|
392 |
+
values.push(clickData.clicks);
|
393 |
+
})
|
394 |
+
}
|
395 |
+
var dailyClick = new Chart(ctx, {
|
396 |
+
type: 'line',
|
397 |
+
data: {
|
398 |
+
labels: labels,
|
399 |
+
datasets: [{
|
400 |
+
label: 'Clicks',
|
401 |
+
data: values,
|
402 |
+
backgroundColor: [
|
403 |
+
'rgba(255, 99, 132, 0.2)',
|
404 |
+
'rgba(54, 162, 235, 0.2)',
|
405 |
+
'rgba(255, 206, 86, 0.2)',
|
406 |
+
'rgba(75, 192, 192, 0.2)',
|
407 |
+
'rgba(153, 102, 255, 0.2)',
|
408 |
+
'rgba(255, 159, 64, 0.2)'
|
409 |
+
],
|
410 |
+
borderColor: [
|
411 |
+
'rgba(255, 99, 132, 1)',
|
412 |
+
'rgba(54, 162, 235, 1)',
|
413 |
+
'rgba(255, 206, 86, 1)',
|
414 |
+
'rgba(75, 192, 192, 1)',
|
415 |
+
'rgba(153, 102, 255, 1)',
|
416 |
+
'rgba(255, 159, 64, 1)'
|
417 |
+
],
|
418 |
+
borderWidth: 1
|
419 |
+
}]
|
420 |
+
},
|
421 |
+
options: {
|
422 |
+
scales: {
|
423 |
+
yAxes: [{
|
424 |
+
ticks: {
|
425 |
+
beginAtZero: true
|
426 |
+
}
|
427 |
+
}]
|
428 |
+
}
|
429 |
+
}
|
430 |
+
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
431 |
|
432 |
+
var ctx = document.getElementById('dailyCost').getContext('2d');
|
433 |
+
var dailyCostData = jQuery.parseJSON('<?php echo (isset($account_performance->dailyCost)?json_encode($account_performance->dailyCost):0); ?>');
|
434 |
+
var labels = [];
|
435 |
+
var values = [];
|
436 |
+
if(dailyClicksData.length > 0 ){
|
437 |
dailyCostData.forEach(costData => {
|
438 |
labels.push(costData.date);
|
439 |
values.push(costData.costs);
|
440 |
})
|
441 |
+
}
|
442 |
+
var dailyClick = new Chart(ctx, {
|
443 |
+
type: 'line',
|
444 |
+
data: {
|
445 |
+
labels: labels,
|
446 |
+
datasets: [{
|
447 |
+
label: 'Cost',
|
448 |
+
data: values,
|
449 |
+
backgroundColor: [
|
450 |
+
'rgba(255, 99, 132, 0.2)',
|
451 |
+
'rgba(54, 162, 235, 0.2)',
|
452 |
+
'rgba(255, 206, 86, 0.2)',
|
453 |
+
'rgba(75, 192, 192, 0.2)',
|
454 |
+
'rgba(153, 102, 255, 0.2)',
|
455 |
+
'rgba(255, 159, 64, 0.2)'
|
456 |
+
],
|
457 |
+
borderColor: [
|
458 |
+
'rgba(255, 99, 132, 0.2)',
|
459 |
+
'rgba(54, 162, 235, 0.2)',
|
460 |
+
'rgba(255, 206, 86, 0.2)',
|
461 |
+
'rgba(75, 192, 192, 0.2)',
|
462 |
+
'rgba(153, 102, 255, 0.2)',
|
463 |
+
'rgba(255, 159, 64, 0.2)'
|
464 |
+
],
|
465 |
+
borderWidth: 1
|
466 |
+
}]
|
467 |
+
},
|
468 |
+
options: {
|
469 |
+
scales: {
|
470 |
+
yAxes: [{
|
471 |
+
ticks: {
|
472 |
+
beginAtZero: true
|
473 |
+
}
|
474 |
+
}]
|
475 |
+
}
|
476 |
+
}
|
477 |
+
});
|
|
|
|
|
|
|
478 |
|
479 |
+
var ctx = document.getElementById('dailyConversions').getContext('2d');
|
480 |
+
var dailyConversionsData = jQuery.parseJSON('<?php echo (isset($account_performance->dailyConversions)?json_encode($account_performance->dailyConversions):0); ?>');
|
481 |
|
482 |
+
var labels = [];
|
483 |
+
var values = [];
|
484 |
+
if(dailyClicksData.length > 0 ){
|
485 |
dailyConversionsData.forEach(conversionsData => {
|
486 |
labels.push(conversionsData.date);
|
487 |
values.push(conversionsData.conversions);
|
488 |
})
|
489 |
+
}
|
490 |
+
|
491 |
+
var dailyClick = new Chart(ctx, {
|
492 |
+
type: 'line',
|
493 |
+
data: {
|
494 |
+
labels: labels,
|
495 |
+
datasets: [{
|
496 |
+
label: 'Conversions',
|
497 |
+
data: values,
|
498 |
+
backgroundColor: [
|
499 |
+
'rgba(255, 99, 132, 0.2)',
|
500 |
+
'rgba(54, 162, 235, 0.2)',
|
501 |
+
'rgba(255, 206, 86, 0.2)',
|
502 |
+
'rgba(75, 192, 192, 0.2)',
|
503 |
+
'rgba(153, 102, 255, 0.2)',
|
504 |
+
'rgba(255, 159, 64, 0.2)'
|
505 |
+
],
|
506 |
+
borderColor: [
|
507 |
+
'rgba(255, 99, 132, 0.2)',
|
508 |
+
'rgba(54, 162, 235, 0.2)',
|
509 |
+
'rgba(255, 206, 86, 0.2)',
|
510 |
+
'rgba(75, 192, 192, 0.2)',
|
511 |
+
'rgba(153, 102, 255, 0.2)',
|
512 |
+
'rgba(255, 159, 64, 0.2)'
|
513 |
+
],
|
514 |
+
borderWidth: 1
|
515 |
+
}]
|
516 |
+
},
|
517 |
+
options: {
|
518 |
+
scales: {
|
519 |
+
yAxes: [{
|
520 |
+
ticks: {
|
521 |
+
beginAtZero: true
|
522 |
+
}
|
523 |
+
}]
|
524 |
+
}
|
525 |
+
}
|
526 |
+
});
|
527 |
|
528 |
+
var ctx = document.getElementById('dailySales').getContext('2d');
|
529 |
+
var dailySalesData = jQuery.parseJSON('<?php echo (isset($account_performance->dailySales)?json_encode($account_performance->dailySales):0); ?>');
|
|
|
|
|
|
|
530 |
|
531 |
+
var labels = [];
|
532 |
+
var values = [];
|
533 |
+
if(dailyClicksData.length > 0 ){
|
534 |
dailySalesData.forEach(salesData => {
|
535 |
+
labels.push(salesData.date);
|
536 |
+
values.push(salesData.sales);
|
537 |
})
|
538 |
+
}
|
539 |
+
var dailyClick = new Chart(ctx, {
|
540 |
+
type: 'line',
|
541 |
+
data: {
|
542 |
+
labels: labels,
|
543 |
+
datasets: [{
|
544 |
+
label: 'Sales',
|
545 |
+
data: values,
|
546 |
+
backgroundColor: [
|
547 |
+
'rgba(255, 99, 132, 0.2)',
|
548 |
+
'rgba(54, 162, 235, 0.2)',
|
549 |
+
'rgba(255, 206, 86, 0.2)',
|
550 |
+
'rgba(75, 192, 192, 0.2)',
|
551 |
+
'rgba(153, 102, 255, 0.2)',
|
552 |
+
'rgba(255, 159, 64, 0.2)'
|
553 |
+
],
|
554 |
+
borderColor: [
|
555 |
+
'rgba(255, 99, 132, 0.2)',
|
556 |
+
'rgba(54, 162, 235, 0.2)',
|
557 |
+
'rgba(255, 206, 86, 0.2)',
|
558 |
+
'rgba(75, 192, 192, 0.2)',
|
559 |
+
'rgba(153, 102, 255, 0.2)',
|
560 |
+
'rgba(255, 159, 64, 0.2)'
|
561 |
+
],
|
562 |
+
borderWidth: 1
|
563 |
+
}]
|
564 |
+
},
|
565 |
+
options: {
|
566 |
+
scales: {
|
567 |
+
yAxes: [{
|
568 |
+
ticks: {
|
569 |
+
beginAtZero: true
|
570 |
+
}
|
571 |
+
}]
|
572 |
+
}
|
573 |
+
}
|
574 |
+
});
|
575 |
|
576 |
function validateAll() {
|
|
|
577 |
if ($("#customRange1").prop("checked")==true) {
|
578 |
jQuery("#date_range_form").submit();
|
579 |
}
|
580 |
|
581 |
if ($("#customRange2").prop("checked")==true) {
|
582 |
+
if(document.getElementById("from_date").value == "" || document.getElementById("to_date").value == "") {
|
583 |
+
document.getElementById("errorMessage").classList.remove("hidden");
|
584 |
+
} else {
|
585 |
+
document.getElementById("errorMessage").classList.add("hidden");
|
586 |
+
jQuery("#date_range_form").submit();
|
587 |
+
}
|
588 |
}
|
589 |
+
}
|
590 |
+
|
591 |
+
jQuery(".input-daterange input").each(function() {
|
592 |
+
jQuery(this).datepicker({
|
593 |
+
todayHighlight: true,
|
594 |
+
autoclose: true,
|
595 |
+
defaultViewDate: new Date(),
|
596 |
+
endDate: new Date(),
|
597 |
+
format: "yyyy-mm-dd"
|
598 |
+
}).on("changeDate", changeStartDate);
|
599 |
+
});
|
600 |
|
601 |
function changeStartDate() {
|
602 |
+
var from_date = "";
|
603 |
+
var to_date = "";
|
604 |
+
|
605 |
+
from_date = jQuery("#from_date").val();
|
606 |
+
to_date = jQuery("#to_date").val();
|
607 |
+
|
608 |
+
jQuery("#from_date").datepicker("destroy").datepicker({
|
609 |
+
todayHighlight: true,
|
610 |
+
autoclose: true,
|
611 |
+
defaultViewDate: new Date(),
|
612 |
+
endDate: to_date == "" ? new Date() : to_date,
|
613 |
+
format: "yyyy-mm-dd"
|
614 |
+
});
|
615 |
+
|
616 |
+
jQuery("#to_date").datepicker("destroy").datepicker({
|
617 |
+
todayHighlight: true,
|
618 |
+
autoclose: true,
|
619 |
+
defaultViewDate: new Date(),
|
620 |
+
endDate: new Date(),
|
621 |
+
startDate: from_date == "" ? "" : from_date,
|
622 |
+
format: "yyyy-mm-dd"
|
623 |
+
});
|
624 |
}
|
625 |
|
626 |
+
function date_range_select() {
|
627 |
+
document.getElementById("customRange1").checked = true;
|
628 |
+
}
|
629 |
|
630 |
+
function deleteCampaign(merchantId, customerId, campaignId, currentRow) {
|
631 |
var confirm = window.confirm("Are you sure you want to delete campaign?");
|
632 |
var campaign_name = jQuery("#campaign_name_"+currentRow).val();
|
633 |
if(confirm) {
|
634 |
jQuery("#feed-spinner").css("display", "block");
|
635 |
+
jQuery.post(
|
636 |
+
myAjaxNonces.ajaxurl,
|
637 |
+
{
|
638 |
+
action: "tvcajax-delete-campaign",
|
639 |
+
merchantId: merchantId,
|
640 |
+
customerId: customerId,
|
641 |
+
campaignId: campaignId,
|
642 |
+
campaignDeleteNonce: myAjaxNonces.campaignDeleteNonce
|
643 |
+
},
|
644 |
+
function( response ) {
|
645 |
+
jQuery("#feed-spinner").css("display", "none");
|
646 |
+
console.log(response);
|
647 |
+
var rsp = JSON.parse(response)
|
648 |
+
if (rsp.status == "success") {
|
649 |
+
var message = campaign_name + " is deleted successfully";
|
650 |
+
alert(message);
|
651 |
+
window.location.href = "<?php echo $this->site_url.'shopping_campaigns_page';?>";
|
652 |
+
} else {
|
653 |
+
var message = rsp.message;
|
654 |
+
alert(message);
|
655 |
+
}
|
656 |
+
}
|
657 |
+
);
|
658 |
}
|
659 |
}
|
660 |
|
661 |
function updateCampaignStatus(merchantId, customerId, campaignId, budget, budgetId, currentRow) {
|
662 |
+
var campaign_status = jQuery("#customSwitch"+currentRow).prop("checked");
|
663 |
+
var campaign_name = jQuery("#campaign_name_"+currentRow).val();
|
664 |
+
jQuery("#feed-spinner").css("display", "block");
|
665 |
+
jQuery.post(
|
666 |
+
myAjaxNonces.ajaxurl,
|
667 |
+
{
|
668 |
+
action: "tvcajax-update-campaign-status",
|
669 |
+
merchantId: merchantId,
|
670 |
+
customerId: customerId,
|
671 |
+
campaignId: campaignId,
|
672 |
+
campaignName: campaign_name,
|
673 |
+
budget: budget,
|
674 |
+
budgetId: budgetId,
|
675 |
+
status: campaign_status == true ? 2 : 3,
|
676 |
+
campaignStatusNonce: myAjaxNonces.campaignStatusNonce
|
677 |
+
},
|
678 |
+
function( response ) {
|
679 |
+
jQuery("#feed-spinner").css("display", "none");
|
680 |
+
console.log(response);
|
681 |
+
var rsp = JSON.parse(response)
|
682 |
+
if(rsp.status == "success"){
|
683 |
+
var message = campaign_name + " status updated successfully";
|
684 |
+
alert(message);
|
685 |
+
window.location.href = "<?php echo $this->site_url.'shopping_campaigns_page'; ?>";
|
686 |
+
}else{
|
687 |
+
var message = rsp.message;
|
688 |
+
alert(message);
|
689 |
+
}
|
690 |
+
}
|
691 |
+
);
|
|
|
692 |
}
|
693 |
+
</script>
|
694 |
+
<?php
|
695 |
+
}
|
696 |
}
|
697 |
?>
|
includes/setup/google-shopping-feed-sync-product.php
CHANGED
@@ -6,15 +6,18 @@ protected $TVC_Admin_Helper;
|
|
6 |
protected $currentCustomerId;
|
7 |
protected $subscriptionId;
|
8 |
protected $country;
|
|
|
9 |
public function __construct(){
|
10 |
$this->includes();
|
11 |
$this->TVC_Admin_Helper = new TVC_Admin_Helper();
|
|
|
12 |
$this->merchantId = $this->TVC_Admin_Helper->get_merchantId();
|
13 |
$this->accountId = $this->TVC_Admin_Helper->get_main_merchantId();
|
14 |
$this->currentCustomerId = $this->TVC_Admin_Helper->get_currentCustomerId();
|
15 |
$this->subscriptionId = $this->TVC_Admin_Helper->get_subscriptionId();
|
16 |
$this->country = $this->TVC_Admin_Helper->get_woo_country();
|
17 |
-
$this->site_url = "admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=";
|
|
|
18 |
$this->html_run();
|
19 |
}
|
20 |
|
@@ -30,12 +33,11 @@ public function html_run(){
|
|
30 |
}
|
31 |
|
32 |
public function wooCommerceAttributes() {
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
return array_merge($column1, $column2);
|
39 |
}
|
40 |
|
41 |
public function create_form(){
|
@@ -64,11 +66,12 @@ public function create_form(){
|
|
64 |
$syncProductStat = $google_detail['prod_sync_status'];
|
65 |
}
|
66 |
}
|
67 |
-
if(isset($google_detail['prod_sync_list'])){
|
68 |
if ($google_detail['prod_sync_list']) {
|
69 |
$syncProductList = $google_detail['prod_sync_list'];
|
70 |
}
|
71 |
-
}
|
|
|
72 |
if(isset($google_detail['setting'])){
|
73 |
if ($google_detail['setting']) {
|
74 |
$googleDetail = $google_detail['setting'];
|
@@ -83,130 +86,146 @@ public function create_form(){
|
|
83 |
$last_api_sync_up = date( $date_formate, $google_detail['sync_time']);
|
84 |
}
|
85 |
$is_need_to_update = $this->TVC_Admin_Helper->is_need_to_update_api_to_db();
|
|
|
|
|
|
|
86 |
?>
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
</div>
|
105 |
-
<?php } ?>
|
106 |
-
<?php echo get_google_shopping_tabs_html($this->site_url,(isset($googleDetail->google_merchant_center_id))?$googleDetail->google_merchant_center_id:""); ?>
|
107 |
</div>
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
|
|
|
|
|
|
|
|
117 |
</div>
|
118 |
-
|
119 |
-
<div class="
|
120 |
-
<div class="
|
121 |
-
<
|
122 |
-
|
123 |
-
|
124 |
-
<p class="pro-count"><?php
|
125 |
-
echo ((!empty($syncProductStat)) ? $syncProductStat->total : "0"); ?></p>
|
126 |
-
</div>
|
127 |
-
</div>
|
128 |
-
<div class="col-sm-6 col-lg-3">
|
129 |
-
<div class="card pending">
|
130 |
-
<h3 class="pro-title">Pending Review</h3>
|
131 |
-
<p class="pro-count">
|
132 |
-
<?php echo (!empty($syncProductStat)) ? $syncProductStat->pending : "0";?></p>
|
133 |
-
</div>
|
134 |
-
</div>
|
135 |
-
<div class="col-sm-6 col-lg-3">
|
136 |
-
<div class="card approved">
|
137 |
-
<h3 class="pro-title">Approved</h3>
|
138 |
-
<p class="pro-count"><?php echo (!empty($syncProductStat)) ? $syncProductStat->approved : "0";?></p>
|
139 |
-
</div>
|
140 |
-
</div>
|
141 |
-
<div class="col-sm-6 col-lg-3">
|
142 |
-
<div class="card disapproved">
|
143 |
-
<h3 class="pro-title">Disapproved</h3>
|
144 |
-
<p class="pro-count"><?php
|
145 |
-
echo (!empty($syncProductStat)) ? $syncProductStat->disapproved : "0"; ?></p>
|
146 |
-
</div>
|
147 |
-
</div>
|
148 |
</div>
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
207 |
</div>
|
208 |
</div>
|
209 |
</div>
|
|
|
210 |
<div class="modal fade popup-modal create-campa overlay" id="syncProduct" data-backdrop="false">
|
211 |
<div class="modal-dialog modal-dialog-centered">
|
212 |
<div class="modal-content">
|
@@ -252,8 +271,12 @@ public function create_form(){
|
|
252 |
echo '<div class="row">
|
253 |
<div class="col-6 align-self-center">
|
254 |
<div class="form-group">
|
255 |
-
<span class="td-head">' . $attribute["field"] . " " . (isset($attribute["required"]) && $attribute["required"] == 1 ? '<span style="color: red;"> *</span>' : "") . '
|
256 |
-
<
|
|
|
|
|
|
|
|
|
257 |
</div>
|
258 |
</div>
|
259 |
<div class="col-6 align-self-center">
|
@@ -272,10 +295,10 @@ public function create_form(){
|
|
272 |
$sel_val = (isset($ee_mapped_attrs[$attribute["field"]]))?$ee_mapped_attrs[$attribute["field"]]:$sel_val_def;
|
273 |
echo $this->TVC_Admin_Helper->tvc_text($attribute["field"], 'number', '', 'Add TAX flat (%)', $sel_val, $require);
|
274 |
}else if($attribute["field"]=='content_language'){
|
275 |
-
echo $this->TVC_Admin_Helper->tvc_language_select($attribute["field"], '', 'Please Select Attribute', 'en',$require);
|
276 |
}else if($attribute["field"]=='target_country'){
|
277 |
//$name, $class_id, bool $require = false
|
278 |
-
echo $this->TVC_Admin_Helper->tvc_countries_select($attribute["field"], '', 'Please Select Attribute', $require);
|
279 |
}else{
|
280 |
if(isset($attribute['fixed_options']) && $attribute['fixed_options'] !=""){
|
281 |
$tvc_select_option_t = explode(",", $attribute['fixed_options']);
|
@@ -284,13 +307,12 @@ public function create_form(){
|
|
284 |
$tvc_select_option[]['field'] = $o_val;
|
285 |
}
|
286 |
$sel_val = $sel_val_def;
|
287 |
-
$this->TVC_Admin_Helper->tvc_select($attribute["field"],'
|
288 |
}else{
|
289 |
$sel_val = (isset($ee_mapped_attrs[$attribute["field"]]))?$ee_mapped_attrs[$attribute["field"]]:$sel_val_def;
|
290 |
//$name, $class_id, $label="Please Select", $sel_val, $require, $option_list
|
291 |
-
$this->TVC_Admin_Helper->tvc_select($attribute["field"],'
|
292 |
-
}
|
293 |
-
|
294 |
}
|
295 |
echo '</div>
|
296 |
</div>
|
@@ -312,12 +334,19 @@ if(isset($googleDetail->google_merchant_center_id) && $googleDetail->google_merc
|
|
312 |
}?>
|
313 |
<script type="text/javascript">
|
314 |
$(document).ready(function() {
|
315 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
316 |
if(is_need_to_update == 1 || is_need_to_update == true){
|
317 |
-
tvc_helper.tvc_alert("error","Attention !","Auto-sync up is in the process do not refresh the page.");
|
318 |
call_tvc_api_sync_up();
|
319 |
}
|
320 |
-
|
321 |
$(document).on("click", "#tvc_btn_product_sync", function(event){
|
322 |
var is_need_to_domain_claim = "<?php echo $is_need_to_domain_claim; ?>";
|
323 |
if(is_need_to_domain_claim == 1 || is_need_to_domain_claim == true){
|
@@ -329,23 +358,27 @@ $(document).ready(function() {
|
|
329 |
|
330 |
});
|
331 |
}
|
332 |
-
});
|
333 |
});
|
|
|
334 |
function call_tvc_api_sync_up(){
|
335 |
var tvs_this = $("#refresh_api");
|
336 |
$("#tvc_msg").remove();
|
337 |
$("#refresh_api").css("visibility","hidden");
|
338 |
$(tvs_this).after('<div class="tvc-nb-spinner" id="tvc-nb-spinner"></div>');
|
|
|
339 |
jQuery.post(myAjaxNonces.ajaxurl,{
|
340 |
action: "tvc_call_api_sync",
|
341 |
apiSyncupNonce: myAjaxNonces.apiSyncupNonce
|
342 |
},function( response ){
|
343 |
var rsp = JSON.parse(response);
|
344 |
-
if(rsp.
|
345 |
$("#tvc-nb-spinner").remove();
|
346 |
-
tvc_helper.tvc_alert("success","",rsp.message,true);
|
347 |
-
|
348 |
-
|
|
|
|
|
349 |
});
|
350 |
}
|
351 |
|
@@ -431,7 +464,7 @@ function submitProductSyncUp() {
|
|
431 |
window.location.replace("<?php echo $this->site_url.'sync_product_page'; ?>");
|
432 |
}, 7000);
|
433 |
} else {
|
434 |
-
|
435 |
}
|
436 |
}
|
437 |
);
|
6 |
protected $currentCustomerId;
|
7 |
protected $subscriptionId;
|
8 |
protected $country;
|
9 |
+
protected $TVC_Admin_DB_Helper;
|
10 |
public function __construct(){
|
11 |
$this->includes();
|
12 |
$this->TVC_Admin_Helper = new TVC_Admin_Helper();
|
13 |
+
$this->TVC_Admin_DB_Helper = new TVC_Admin_DB_Helper();
|
14 |
$this->merchantId = $this->TVC_Admin_Helper->get_merchantId();
|
15 |
$this->accountId = $this->TVC_Admin_Helper->get_main_merchantId();
|
16 |
$this->currentCustomerId = $this->TVC_Admin_Helper->get_currentCustomerId();
|
17 |
$this->subscriptionId = $this->TVC_Admin_Helper->get_subscriptionId();
|
18 |
$this->country = $this->TVC_Admin_Helper->get_woo_country();
|
19 |
+
$this->site_url = "admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=";
|
20 |
+
$this->TVC_Admin_Helper->need_auto_update_db();
|
21 |
$this->html_run();
|
22 |
}
|
23 |
|
33 |
}
|
34 |
|
35 |
public function wooCommerceAttributes() {
|
36 |
+
global $wpdb;
|
37 |
+
$tve_table_prefix = $wpdb->prefix;
|
38 |
+
$column1 = json_decode(json_encode($this->TVC_Admin_Helper->getTableColumns($tve_table_prefix.'posts')), true);
|
39 |
+
$column2 = json_decode(json_encode($this->TVC_Admin_Helper->getTableData($tve_table_prefix.'postmeta', ['meta_key'])), true);
|
40 |
+
return array_merge($column1, $column2);
|
|
|
41 |
}
|
42 |
|
43 |
public function create_form(){
|
66 |
$syncProductStat = $google_detail['prod_sync_status'];
|
67 |
}
|
68 |
}
|
69 |
+
/*if(isset($google_detail['prod_sync_list'])){
|
70 |
if ($google_detail['prod_sync_list']) {
|
71 |
$syncProductList = $google_detail['prod_sync_list'];
|
72 |
}
|
73 |
+
}*/
|
74 |
+
$syncProductList = $this->TVC_Admin_DB_Helper->tvc_get_results("ee_products_sync_list");
|
75 |
if(isset($google_detail['setting'])){
|
76 |
if ($google_detail['setting']) {
|
77 |
$googleDetail = $google_detail['setting'];
|
86 |
$last_api_sync_up = date( $date_formate, $google_detail['sync_time']);
|
87 |
}
|
88 |
$is_need_to_update = $this->TVC_Admin_Helper->is_need_to_update_api_to_db();
|
89 |
+
$args = array('post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => -1);
|
90 |
+
$products = new WP_Query($args);
|
91 |
+
$woo_product = $products->found_posts;
|
92 |
?>
|
93 |
+
|
94 |
+
<div class="tab-content">
|
95 |
+
<div class="tab-pane show active" id="googleShoppingFeed">
|
96 |
+
<div class="tab-card">
|
97 |
+
<div class="row">
|
98 |
+
<div class="col-md-6 col-lg-8 edit-section">
|
99 |
+
<div class="edit-header-section">
|
100 |
+
<script>
|
101 |
+
var back_img = '<img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/left-angle-arrow.svg'; ?>" alt="back"/>';
|
102 |
+
document.write('<a href="' + document.referrer + '" class="back-btn">'+back_img+'<span>Back</span></a>');
|
103 |
+
</script>
|
104 |
+
</div>
|
105 |
+
<div class="configuration-section" id="config-pt1">
|
106 |
+
<?php if($this->subscriptionId != ""){?>
|
107 |
+
<div class="tvc-api-sunc">
|
108 |
+
<span>
|
109 |
+
<?php if($last_api_sync_up){
|
110 |
+
echo "Details last synced at ".$last_api_sync_up;
|
111 |
+
}else{
|
112 |
+
echo "Refresh sync up";
|
113 |
+
}?></span><img id="refresh_api" onclick="call_tvc_api_sync_up();" src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/refresh.png'; ?>">
|
114 |
+
</div>
|
115 |
+
<?php } ?>
|
116 |
+
<?php echo get_google_shopping_tabs_html($this->site_url,(isset($googleDetail->google_merchant_center_id))?$googleDetail->google_merchant_center_id:""); ?>
|
117 |
+
</div>
|
118 |
+
<div class="mt-3" id="config-pt2">
|
119 |
+
<div class="sync-new-product" id="sync-product">
|
120 |
+
<div class="row">
|
121 |
+
<div class="col-12">
|
122 |
+
<div class="d-flex justify-content-between ">
|
123 |
+
<p class="mb-0 align-self-center product-title">Products in your Merchant Center account</p>
|
124 |
+
<button id="tvc_btn_product_sync" class="btn btn-outline-primary align-self-center" data-toggle="modal" data-target="#syncProduct">Sync New Products</button>
|
125 |
</div>
|
|
|
|
|
126 |
</div>
|
127 |
+
</div>
|
128 |
+
<?php
|
129 |
+
$sync_product_total = (property_exists($syncProductStat,"total")) ? $syncProductStat->total : "0";
|
130 |
+
$sync_product_approved = (property_exists($syncProductStat,"approved")) ? $syncProductStat->approved : "0";
|
131 |
+
$sync_product_disapproved = (property_exists($syncProductStat,"disapproved")) ? $syncProductStat->disapproved : "0";
|
132 |
+
$sync_product_pending = (property_exists($syncProductStat,"pending")) ? $syncProductStat->pending : "0"; ?>
|
133 |
+
<div class="product-card">
|
134 |
+
<div class="row row-cols-5">
|
135 |
+
<div class="col">
|
136 |
+
<div class="card">
|
137 |
+
<h3 class="pro-count"><?php
|
138 |
+
echo (($woo_product) ? $woo_product : "0"); ?></h3>
|
139 |
+
<p class="pro-title">Total Products</p>
|
140 |
</div>
|
141 |
+
</div>
|
142 |
+
<div class="col">
|
143 |
+
<div class="card">
|
144 |
+
<h3 class="pro-count"><?php
|
145 |
+
echo $sync_product_total ; ?></h3>
|
146 |
+
<p class="pro-title">Sync Products</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
147 |
</div>
|
148 |
+
</div>
|
149 |
+
<div class="col">
|
150 |
+
<div class="card pending">
|
151 |
+
<h3 class="pro-count">
|
152 |
+
<?php echo $sync_product_pending;?></h3>
|
153 |
+
<p class="pro-title">Pending Review</p>
|
154 |
+
</div>
|
155 |
+
</div>
|
156 |
+
<div class="col">
|
157 |
+
<div class="card approved">
|
158 |
+
<h3 class="pro-count"><?php echo $sync_product_approved;?></h3>
|
159 |
+
<p class="pro-title">Approved</p>
|
160 |
+
</div>
|
161 |
+
</div>
|
162 |
+
<div class="col">
|
163 |
+
<div class="card disapproved">
|
164 |
+
<h3 class="pro-count"><?php
|
165 |
+
echo $sync_product_disapproved; ?></h3>
|
166 |
+
<p class="pro-title">Disapproved</p>
|
167 |
+
</div>
|
168 |
+
</div>
|
169 |
+
</div>
|
170 |
+
</div>
|
171 |
+
<div class="total-products">
|
172 |
+
<div class="account-performance tvc-sync-product-list-wapper">
|
173 |
+
<div class="table-section">
|
174 |
+
<div class="table-responsive">
|
175 |
+
<table id="tvc-sync-product-list" class="table table-striped" style="width:100%">
|
176 |
+
<thead>
|
177 |
+
<tr>
|
178 |
+
<th></th>
|
179 |
+
<th style="vertical-align: top;">Product</th>
|
180 |
+
<th style="vertical-align: top;">Google status</th>
|
181 |
+
<th style="vertical-align: top;">Issues</th>
|
182 |
+
</tr>
|
183 |
+
</thead>
|
184 |
+
<tbody>
|
185 |
+
<?php
|
186 |
+
if (isset($syncProductList) && count($syncProductList) > 0) {
|
187 |
+
foreach ($syncProductList as $skey => $sValue) {
|
188 |
+
echo '<tr><td class="product-image">
|
189 |
+
<img src="'.$sValue->image_link.'" alt=""/></td>
|
190 |
+
<td>'.$sValue->name.'</td>
|
191 |
+
<td>'.$sValue->google_status.'</td>
|
192 |
+
<td>';
|
193 |
+
$p_issues = json_decode($sValue->issues);
|
194 |
+
if (count($p_issues) > 0) {
|
195 |
+
$str = '';
|
196 |
+
foreach ($p_issues as $key => $issue) {
|
197 |
+
if ($key <= 2) {
|
198 |
+
($key <= 1) ? $str .= $issue.", <br>" : "";
|
199 |
+
}
|
200 |
+
($key == 3) ? $str .= "..." : "";
|
201 |
+
}
|
202 |
+
echo $str;
|
203 |
+
} else {
|
204 |
+
echo "---";
|
205 |
+
}
|
206 |
+
echo '</td></tr>';
|
207 |
+
}
|
208 |
+
}else{
|
209 |
+
echo '<tr><td colspan="4">Record not found</td></tr>';
|
210 |
+
} ?>
|
211 |
+
</tbody>
|
212 |
+
</table>
|
213 |
+
</div>
|
214 |
+
</div>
|
215 |
+
</div>
|
216 |
+
|
217 |
+
</div>
|
218 |
+
</div>
|
219 |
+
</div>
|
220 |
+
</div>
|
221 |
+
<div class="col-md-6 col-lg-4">
|
222 |
+
<?php echo get_tvc_help_html(); ?>
|
223 |
+
</div>
|
224 |
+
</div>
|
225 |
</div>
|
226 |
</div>
|
227 |
</div>
|
228 |
+
|
229 |
<div class="modal fade popup-modal create-campa overlay" id="syncProduct" data-backdrop="false">
|
230 |
<div class="modal-dialog modal-dialog-centered">
|
231 |
<div class="modal-content">
|
271 |
echo '<div class="row">
|
272 |
<div class="col-6 align-self-center">
|
273 |
<div class="form-group">
|
274 |
+
<span class="td-head">' . $attribute["field"] . " " . (isset($attribute["required"]) && $attribute["required"] == 1 ? '<span style="color: red;"> *</span>' : "") . '
|
275 |
+
<div class="tvc-tooltip">
|
276 |
+
<span class="tvc-tooltiptext tvc-tooltip-right">'.(isset($attribute["desc"])? $attribute["desc"]:"") .'</span>
|
277 |
+
<img src="'. ENHANCAD_PLUGIN_URL.'/admin/images/icon/informationI.svg" alt=""/>
|
278 |
+
</div>
|
279 |
+
</span>
|
280 |
</div>
|
281 |
</div>
|
282 |
<div class="col-6 align-self-center">
|
295 |
$sel_val = (isset($ee_mapped_attrs[$attribute["field"]]))?$ee_mapped_attrs[$attribute["field"]]:$sel_val_def;
|
296 |
echo $this->TVC_Admin_Helper->tvc_text($attribute["field"], 'number', '', 'Add TAX flat (%)', $sel_val, $require);
|
297 |
}else if($attribute["field"]=='content_language'){
|
298 |
+
echo $this->TVC_Admin_Helper->tvc_language_select($attribute["field"], 'content_language', 'Please Select Attribute', 'en',$require);
|
299 |
}else if($attribute["field"]=='target_country'){
|
300 |
//$name, $class_id, bool $require = false
|
301 |
+
echo $this->TVC_Admin_Helper->tvc_countries_select($attribute["field"], 'target_country', 'Please Select Attribute', $require);
|
302 |
}else{
|
303 |
if(isset($attribute['fixed_options']) && $attribute['fixed_options'] !=""){
|
304 |
$tvc_select_option_t = explode(",", $attribute['fixed_options']);
|
307 |
$tvc_select_option[]['field'] = $o_val;
|
308 |
}
|
309 |
$sel_val = $sel_val_def;
|
310 |
+
$this->TVC_Admin_Helper->tvc_select($attribute["field"],$attribute["field"],'Please Select Attribute', $sel_val, $require, $tvc_select_option);
|
311 |
}else{
|
312 |
$sel_val = (isset($ee_mapped_attrs[$attribute["field"]]))?$ee_mapped_attrs[$attribute["field"]]:$sel_val_def;
|
313 |
//$name, $class_id, $label="Please Select", $sel_val, $require, $option_list
|
314 |
+
$this->TVC_Admin_Helper->tvc_select($attribute["field"],$attribute["field"],'Please Select Attribute', $sel_val, $require, $tvc_select_option);
|
315 |
+
}
|
|
|
316 |
}
|
317 |
echo '</div>
|
318 |
</div>
|
334 |
}?>
|
335 |
<script type="text/javascript">
|
336 |
$(document).ready(function() {
|
337 |
+
//data table js
|
338 |
+
$('#tvc-sync-product-list').DataTable({
|
339 |
+
"ordering": false,
|
340 |
+
"scrollY": "600px",
|
341 |
+
"lengthMenu": [ 10, 20, 50, 100, 200 ]
|
342 |
+
});
|
343 |
+
//auto syncup call
|
344 |
+
var is_need_to_update = "<?php echo $is_need_to_update; ?>";
|
345 |
if(is_need_to_update == 1 || is_need_to_update == true){
|
346 |
+
//tvc_helper.tvc_alert("error","Attention !","Auto-sync up is in the process do not refresh the page.");
|
347 |
call_tvc_api_sync_up();
|
348 |
}
|
349 |
+
//custom call for domain clain while product sync call
|
350 |
$(document).on("click", "#tvc_btn_product_sync", function(event){
|
351 |
var is_need_to_domain_claim = "<?php echo $is_need_to_domain_claim; ?>";
|
352 |
if(is_need_to_domain_claim == 1 || is_need_to_domain_claim == true){
|
358 |
|
359 |
});
|
360 |
}
|
361 |
+
});
|
362 |
});
|
363 |
+
//Update syncup detail by ajax call
|
364 |
function call_tvc_api_sync_up(){
|
365 |
var tvs_this = $("#refresh_api");
|
366 |
$("#tvc_msg").remove();
|
367 |
$("#refresh_api").css("visibility","hidden");
|
368 |
$(tvs_this).after('<div class="tvc-nb-spinner" id="tvc-nb-spinner"></div>');
|
369 |
+
tvc_helper.tvc_alert("error","Attention !","Sync up is in the process do not refresh the page. it may take few minutes, if GMC product sync count is large.");
|
370 |
jQuery.post(myAjaxNonces.ajaxurl,{
|
371 |
action: "tvc_call_api_sync",
|
372 |
apiSyncupNonce: myAjaxNonces.apiSyncupNonce
|
373 |
},function( response ){
|
374 |
var rsp = JSON.parse(response);
|
375 |
+
if(rsp.error == false){
|
376 |
$("#tvc-nb-spinner").remove();
|
377 |
+
tvc_helper.tvc_alert("success","",rsp.message,true,2000);
|
378 |
+
}else{
|
379 |
+
tvc_helper.tvc_alert("error","",rsp.message,true,2000);
|
380 |
+
}
|
381 |
+
setTimeout(function(){ location.reload();}, 2000);
|
382 |
});
|
383 |
}
|
384 |
|
464 |
window.location.replace("<?php echo $this->site_url.'sync_product_page'; ?>");
|
465 |
}, 7000);
|
466 |
} else {
|
467 |
+
tvc_helper.tvc_alert("error","",rsp.message);
|
468 |
}
|
469 |
}
|
470 |
);
|
includes/setup/google-shopping-feed.php
CHANGED
@@ -6,7 +6,8 @@ class GoogleShoppingFeed {
|
|
6 |
public function __construct() {
|
7 |
$this->TVC_Admin_Helper = new TVC_Admin_Helper();
|
8 |
$this->subscriptionId = $this->TVC_Admin_Helper->get_subscriptionId();
|
9 |
-
$this->site_url = "admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=";
|
|
|
10 |
$this->create_form();
|
11 |
}
|
12 |
public function add_list_html($title, $val){
|
@@ -77,11 +78,13 @@ class GoogleShoppingFeed {
|
|
77 |
$syncProductStat = $google_detail['prod_sync_status'];
|
78 |
}
|
79 |
}
|
80 |
-
$sync_product_total =
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
|
|
|
|
85 |
$totalCampaigns = 0;$campaignActive = 0; $campaignClicks = 0;
|
86 |
$campaignCost = 0; $campaignConversions = 0; $campaignSales = 0;
|
87 |
// Get currency
|
@@ -110,149 +113,146 @@ class GoogleShoppingFeed {
|
|
110 |
$campaignSales = (isset($googleDetail->google_ads_id) && $googleDetail->google_ads_id != "" ? $currency . $campaignSales : '0');
|
111 |
}
|
112 |
$last_api_sync_up = "";
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
$last_api_sync_up = date( $date_formate, $google_detail['sync_time']);
|
119 |
}
|
120 |
$is_need_to_update = $this->TVC_Admin_Helper->is_need_to_update_api_to_db();
|
121 |
?>
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
138 |
</div>
|
139 |
-
|
140 |
-
|
141 |
-
$last_auto_sync = $this->TVC_Admin_Helper->get_last_auto_sync_product_info();
|
142 |
-
if(!empty($last_auto_sync)){
|
143 |
-
$status = isset($last_auto_sync['status'])?$last_auto_sync['status']:0;
|
144 |
-
$status_text = array("0"=>"Failed","1"=>"Completed");
|
145 |
-
$create_sync = (isset($last_auto_sync['create_sync']))?$last_auto_sync['create_sync']:"";
|
146 |
-
$create_sync = date($date_formate,strtotime($create_sync));
|
147 |
-
$next_sync = (isset($last_auto_sync['next_sync']))?$last_auto_sync['next_sync']:"";
|
148 |
-
$next_sync = date($date_formate,strtotime($next_sync));
|
149 |
-
?>
|
150 |
-
<div class="product-auto-sync-details">
|
151 |
-
<strong>Last auto product sync details</strong>
|
152 |
-
<table>
|
153 |
-
<tr><th>Last sync</th><th width="10">Sync product</th><th width="10px">Status</th><th>Upcoming sync</th></tr>
|
154 |
-
<tr>
|
155 |
-
<td><?php echo $create_sync;?></td>
|
156 |
-
<td width="10"><?php echo (isset($last_auto_sync['total_sync_product']))?$last_auto_sync['total_sync_product']:"";?></td>
|
157 |
-
<td><?php echo $status_text[$status]; ?></td>
|
158 |
-
<td><?php echo $next_sync;?></td>
|
159 |
-
</tr>
|
160 |
-
</table>
|
161 |
-
</div>
|
162 |
-
<?php
|
163 |
-
}
|
164 |
-
?>
|
165 |
-
<div class="configuration-section" id="config-pt1">
|
166 |
-
<div class="row confg-card gsf-sec">
|
167 |
-
<div class="col-md-12 col-lg-4 mb-3 mb-lg-0">
|
168 |
-
<div class="card configure-card">
|
169 |
-
<div class="card-header">
|
170 |
-
<h4 class="confg-title">Configuration</h4>
|
171 |
-
</div>
|
172 |
-
<div class="card-body">
|
173 |
-
<ul class="list-unstyled"><?php
|
174 |
-
$is_domain_claim = (isset($googleDetail->is_domain_claim))?$googleDetail->is_domain_claim:"";
|
175 |
-
$is_site_verified = (isset($googleDetail->is_site_verified))?$googleDetail->is_site_verified:"";
|
176 |
-
echo $this->configuration_list_html("Google merchant center",(isset($googleDetail->google_merchant_center_id))?$googleDetail->google_merchant_center_id:"");
|
177 |
-
if($is_site_verified ==1){
|
178 |
-
echo $this->configuration_list_html("Site Verified",$is_site_verified);
|
179 |
-
}else{
|
180 |
-
echo $this->configuration_error_list_html("Site Verified",$is_site_verified,"call_site_verified", $googleDetail);
|
181 |
-
}
|
182 |
-
if($is_domain_claim ==1){
|
183 |
-
echo $this->configuration_list_html("Domain claim",$is_domain_claim);
|
184 |
-
}else{
|
185 |
-
echo $this->configuration_error_list_html("Domain claim",$is_domain_claim, 'call_domain_claim', $googleDetail);
|
186 |
-
}
|
187 |
-
echo $this->configuration_list_html("Google Ads linking",((isset($googleDetail->google_ads_id)))?$googleDetail->google_ads_id:"");
|
188 |
-
?>
|
189 |
-
</ul>
|
190 |
-
</div>
|
191 |
-
<div class="card-footer">
|
192 |
-
<a href="<?php echo $this->site_url.'gaa_config_page'; ?>" class="btn btn-primary btn-success w-100" id="configuration">Edit</a>
|
193 |
-
</div>
|
194 |
-
</div>
|
195 |
-
</div>
|
196 |
-
<div class="col-md-12 col-lg-4 mb-3 mb-lg-0">
|
197 |
-
<div class="card">
|
198 |
-
<div class="card-header">
|
199 |
-
<h4 class="confg-title">Product Sync</h4>
|
200 |
-
</div>
|
201 |
-
<div class="card-body">
|
202 |
-
<ul class="list-unstyled">
|
203 |
-
<?php
|
204 |
-
echo $this->add_list_html("Active products in WooCommerce",$totalActiveWooProduct)
|
205 |
-
.$this->add_list_html("Total synced products in Merchant center", $sync_product_total)
|
206 |
-
.$this->add_list_html("Approved", $sync_product_approved)
|
207 |
-
.$this->add_list_html("Disapproved", $sync_product_disapproved)
|
208 |
-
.$this->add_list_html("Pending", $sync_product_pending);
|
209 |
-
?>
|
210 |
-
</ul>
|
211 |
-
</div>
|
212 |
-
<?php
|
213 |
-
if (isset($googleDetail->google_merchant_center_id) && $googleDetail->google_merchant_center_id != "") {?>
|
214 |
-
<div class="card-footer">
|
215 |
-
<a href="<?php echo $this->site_url.'sync_product_page'; ?>" class="btn btn-primary btn-success w-100" id="product-sync">Edit</a>
|
216 |
-
</div>
|
217 |
-
<?php } ?>
|
218 |
-
</div>
|
219 |
-
</div>
|
220 |
-
<div class="col-md-12 col-lg-4 mb-3 mb-lg-0">
|
221 |
-
<div class="card">
|
222 |
-
<div class="card-header">
|
223 |
-
<h4 class="confg-title">Smart Shopping Campaigns</h4>
|
224 |
-
</div>
|
225 |
-
<div class="card-body">
|
226 |
-
<ul class="list-unstyled">
|
227 |
-
<?php
|
228 |
-
echo $this->add_list_html("Total campaign",$totalCampaigns)
|
229 |
-
.$this->add_list_html("Active campaigns",$campaignActive)
|
230 |
-
.$this->add_list_html("Cost",$campaignCost)
|
231 |
-
.$this->add_list_html("Click",$campaignClicks)
|
232 |
-
.$this->add_list_html("Conversion%",$campaignConversions)
|
233 |
-
.$this->add_list_html("Sales",$campaignSales); ?>
|
234 |
-
</ul>
|
235 |
-
</div>
|
236 |
-
<?php if (isset($googleDetail->google_ads_id) && $googleDetail->google_ads_id != "") { ?>
|
237 |
-
<div class="card-footer">
|
238 |
-
<a href="<?php echo $this->site_url.'shopping_campaigns_page'; ?>" id="smart-shopping-campaigns" class="btn btn-primary btn-success w-100">Edit</a>
|
239 |
-
</div>
|
240 |
-
<?php }?>
|
241 |
-
</div>
|
242 |
-
</div>
|
243 |
</div>
|
244 |
</div>
|
245 |
</div>
|
246 |
-
|
247 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
248 |
</div>
|
249 |
</div>
|
250 |
</div>
|
251 |
-
|
252 |
-
|
253 |
-
|
|
|
|
|
|
|
254 |
</div>
|
255 |
</div>
|
|
|
256 |
<script type="text/javascript">
|
257 |
function call_site_verified(){
|
258 |
var tvs_this = event.target;
|
@@ -294,7 +294,6 @@ class GoogleShoppingFeed {
|
|
294 |
$(document).ready(function() {
|
295 |
var is_need_to_update = "<?php echo $is_need_to_update; ?>";
|
296 |
if(is_need_to_update == 1 || is_need_to_update == true){
|
297 |
-
tvc_helper.tvc_alert("error","Attention !","Auto-sync up is in the process do not refresh the page.");
|
298 |
call_tvc_api_sync_up();
|
299 |
}
|
300 |
});
|
@@ -303,16 +302,19 @@ class GoogleShoppingFeed {
|
|
303 |
$("#tvc_msg").remove();
|
304 |
$("#refresh_api").css("visibility","hidden");
|
305 |
$(tvs_this).after('<div class="tvc-nb-spinner" id="tvc-nb-spinner"></div>');
|
|
|
306 |
jQuery.post(myAjaxNonces.ajaxurl,{
|
307 |
action: "tvc_call_api_sync",
|
308 |
apiSyncupNonce: myAjaxNonces.apiSyncupNonce
|
309 |
},function( response ){
|
310 |
var rsp = JSON.parse(response);
|
311 |
-
if(rsp.
|
312 |
$("#tvc-nb-spinner").remove();
|
313 |
-
tvc_helper.tvc_alert("success","",rsp.message,true);
|
314 |
-
|
315 |
-
|
|
|
|
|
316 |
});
|
317 |
}
|
318 |
</script>
|
6 |
public function __construct() {
|
7 |
$this->TVC_Admin_Helper = new TVC_Admin_Helper();
|
8 |
$this->subscriptionId = $this->TVC_Admin_Helper->get_subscriptionId();
|
9 |
+
$this->site_url = "admin.php?page=enhanced-ecommerce-google-analytics-admin-display&tab=";
|
10 |
+
$this->TVC_Admin_Helper->need_auto_update_db();
|
11 |
$this->create_form();
|
12 |
}
|
13 |
public function add_list_html($title, $val){
|
78 |
$syncProductStat = $google_detail['prod_sync_status'];
|
79 |
}
|
80 |
}
|
81 |
+
$sync_product_total = 0; $sync_product_approved = 0; $sync_product_disapproved = 0; $sync_product_pending = 0;
|
82 |
+
if($syncProductStat){
|
83 |
+
$sync_product_total = (property_exists($syncProductStat,"total")) ? $syncProductStat->total : "0";
|
84 |
+
$sync_product_approved = (property_exists($syncProductStat,"approved")) ? $syncProductStat->approved : "0";
|
85 |
+
$sync_product_disapproved = (property_exists($syncProductStat,"disapproved")) ? $syncProductStat->disapproved : "0";
|
86 |
+
$sync_product_pending = (property_exists($syncProductStat,"pending")) ? $syncProductStat->pending : "0";
|
87 |
+
}
|
88 |
$totalCampaigns = 0;$campaignActive = 0; $campaignClicks = 0;
|
89 |
$campaignCost = 0; $campaignConversions = 0; $campaignSales = 0;
|
90 |
// Get currency
|
113 |
$campaignSales = (isset($googleDetail->google_ads_id) && $googleDetail->google_ads_id != "" ? $currency . $campaignSales : '0');
|
114 |
}
|
115 |
$last_api_sync_up = "";
|
116 |
+
$date_formate=get_option('date_format')." ".get_option('time_format');
|
117 |
+
if($date_formate ==""){
|
118 |
+
$date_formate = 'M-d-Y H:i';
|
119 |
+
}
|
120 |
+
if(isset($google_detail['sync_time']) && $google_detail['sync_time']){
|
121 |
$last_api_sync_up = date( $date_formate, $google_detail['sync_time']);
|
122 |
}
|
123 |
$is_need_to_update = $this->TVC_Admin_Helper->is_need_to_update_api_to_db();
|
124 |
?>
|
125 |
+
|
126 |
+
|
127 |
+
<div class="tab-content">
|
128 |
+
<div class="tab-pane show active" id="googleShoppingFeed">
|
129 |
+
<div class="tab-card">
|
130 |
+
<div class="row">
|
131 |
+
<div class="col-md-6 col-lg-8 border-right">
|
132 |
+
<?php if($this->subscriptionId != ""){?>
|
133 |
+
<div class="tvc-api-sunc">
|
134 |
+
<span>
|
135 |
+
<?php if($last_api_sync_up){
|
136 |
+
echo "Details last synced at ".$last_api_sync_up;
|
137 |
+
}else{
|
138 |
+
echo "Refresh sync up";
|
139 |
+
}?></span><img id="refresh_api" onclick="call_tvc_api_sync_up();" src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/refresh.png'; ?>">
|
140 |
+
</div>
|
141 |
+
<?php } ?>
|
142 |
+
<?php
|
143 |
+
$last_auto_sync = $this->TVC_Admin_Helper->get_last_auto_sync_product_info();
|
144 |
+
if(!empty($last_auto_sync) && isset($googleDetail->google_merchant_center_id) && $googleDetail->google_merchant_center_id && $this->subscriptionId != ""){
|
145 |
+
$status = isset($last_auto_sync['status'])?$last_auto_sync['status']:0;
|
146 |
+
$status_text = array("0"=>"Failed","1"=>"Completed");
|
147 |
+
$create_sync = (isset($last_auto_sync['create_sync']))?$last_auto_sync['create_sync']:"";
|
148 |
+
$create_sync = date($date_formate,strtotime($create_sync));
|
149 |
+
$next_sync = (isset($last_auto_sync['next_sync']))?$last_auto_sync['next_sync']:"";
|
150 |
+
$next_sync = date($date_formate,strtotime($next_sync));
|
151 |
+
?>
|
152 |
+
<div class="product-auto-sync-details">
|
153 |
+
<strong>Last auto product sync details</strong>
|
154 |
+
<table>
|
155 |
+
<tr><th>Last sync</th><th>Sync product</th><th>Status</th><th>Upcoming sync</th></tr>
|
156 |
+
<tr>
|
157 |
+
<td><?php echo $create_sync;?></td>
|
158 |
+
<td><?php echo (isset($last_auto_sync['total_sync_product']))?$last_auto_sync['total_sync_product']:"";?></td>
|
159 |
+
<td><?php echo $status_text[$status]; ?></td>
|
160 |
+
<td><?php echo $next_sync;?></td>
|
161 |
+
</tr>
|
162 |
+
</table>
|
163 |
+
</div>
|
164 |
+
<?php
|
165 |
+
}
|
166 |
+
?>
|
167 |
+
<div class="configuration-section" id="config-pt1">
|
168 |
+
<div class="row confg-card gsf-sec">
|
169 |
+
<div class="col-md-12 col-lg-4 mb-3 mb-lg-0">
|
170 |
+
<div class="card configure-card">
|
171 |
+
<div class="card-header">
|
172 |
+
<h4 class="confg-title">Configuration</h4>
|
173 |
+
</div>
|
174 |
+
<div class="card-body">
|
175 |
+
<ul class="list-unstyled"><?php
|
176 |
+
$is_domain_claim = (isset($googleDetail->is_domain_claim))?$googleDetail->is_domain_claim:"";
|
177 |
+
$is_site_verified = (isset($googleDetail->is_site_verified))?$googleDetail->is_site_verified:"";
|
178 |
+
echo $this->configuration_list_html("Google merchant center",(isset($googleDetail->google_merchant_center_id))?$googleDetail->google_merchant_center_id:"");
|
179 |
+
if($is_site_verified ==1){
|
180 |
+
echo $this->configuration_list_html("Site Verified",$is_site_verified);
|
181 |
+
}else{
|
182 |
+
echo $this->configuration_error_list_html("Site Verified",$is_site_verified,"call_site_verified", $googleDetail);
|
183 |
+
}
|
184 |
+
if($is_domain_claim ==1){
|
185 |
+
echo $this->configuration_list_html("Domain claim",$is_domain_claim);
|
186 |
+
}else{
|
187 |
+
echo $this->configuration_error_list_html("Domain claim",$is_domain_claim, 'call_domain_claim', $googleDetail);
|
188 |
+
}
|
189 |
+
echo $this->configuration_list_html("Google Ads linking",((isset($googleDetail->google_ads_id)))?$googleDetail->google_ads_id:"");
|
190 |
+
?>
|
191 |
+
</ul>
|
192 |
</div>
|
193 |
+
<div class="card-footer">
|
194 |
+
<a href="<?php echo $this->site_url.'gaa_config_page'; ?>" class="btn btn-primary" id="configuration">Edit</a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
</div>
|
196 |
</div>
|
197 |
</div>
|
198 |
+
<div class="col-md-12 col-lg-4 mb-3 mb-lg-0">
|
199 |
+
<div class="card">
|
200 |
+
<div class="card-header">
|
201 |
+
<h4 class="confg-title">Product Sync</h4>
|
202 |
+
</div>
|
203 |
+
<div class="card-body">
|
204 |
+
<ul class="list-unstyled">
|
205 |
+
<?php
|
206 |
+
echo $this->add_list_html("Active products in WooCommerce",$totalActiveWooProduct)
|
207 |
+
.$this->add_list_html("Total synced products in Merchant center", $sync_product_total)
|
208 |
+
.$this->add_list_html("Approved", $sync_product_approved)
|
209 |
+
.$this->add_list_html("Disapproved", $sync_product_disapproved)
|
210 |
+
.$this->add_list_html("Pending", $sync_product_pending);
|
211 |
+
?>
|
212 |
+
</ul>
|
213 |
+
</div>
|
214 |
+
<?php
|
215 |
+
if (isset($googleDetail->google_merchant_center_id) && $googleDetail->google_merchant_center_id != "") {?>
|
216 |
+
<div class="card-footer">
|
217 |
+
<a href="<?php echo $this->site_url.'sync_product_page'; ?>" class="btn btn-primary" id="product-sync">Edit</a>
|
218 |
+
</div>
|
219 |
+
<?php } ?>
|
220 |
+
</div>
|
221 |
+
</div>
|
222 |
+
<div class="col-md-12 col-lg-4 mb-3 mb-lg-0">
|
223 |
+
<div class="card">
|
224 |
+
<div class="card-header">
|
225 |
+
<h4 class="confg-title">Smart Shopping Campaigns</h4>
|
226 |
+
</div>
|
227 |
+
<div class="card-body">
|
228 |
+
<ul class="list-unstyled">
|
229 |
+
<?php
|
230 |
+
echo $this->add_list_html("Total campaign",$totalCampaigns)
|
231 |
+
.$this->add_list_html("Active campaigns",$campaignActive)
|
232 |
+
.$this->add_list_html("Cost",$campaignCost)
|
233 |
+
.$this->add_list_html("Click",$campaignClicks)
|
234 |
+
.$this->add_list_html("Conversion%",$campaignConversions)
|
235 |
+
.$this->add_list_html("Sales",$campaignSales); ?>
|
236 |
+
</ul>
|
237 |
+
</div>
|
238 |
+
<?php if (isset($googleDetail->google_ads_id) && $googleDetail->google_ads_id != "") { ?>
|
239 |
+
<div class="card-footer">
|
240 |
+
<a href="<?php echo $this->site_url.'shopping_campaigns_page'; ?>" id="smart-shopping-campaigns" class="btn btn-primary">Edit</a>
|
241 |
+
</div>
|
242 |
+
<?php }?>
|
243 |
+
</div>
|
244 |
</div>
|
245 |
</div>
|
246 |
</div>
|
247 |
+
</div>
|
248 |
+
<div class="col-md-6 col-lg-4">
|
249 |
+
<?php echo get_tvc_help_html(); ?>
|
250 |
+
</div>
|
251 |
+
</div>
|
252 |
+
</div>
|
253 |
</div>
|
254 |
</div>
|
255 |
+
|
256 |
<script type="text/javascript">
|
257 |
function call_site_verified(){
|
258 |
var tvs_this = event.target;
|
294 |
$(document).ready(function() {
|
295 |
var is_need_to_update = "<?php echo $is_need_to_update; ?>";
|
296 |
if(is_need_to_update == 1 || is_need_to_update == true){
|
|
|
297 |
call_tvc_api_sync_up();
|
298 |
}
|
299 |
});
|
302 |
$("#tvc_msg").remove();
|
303 |
$("#refresh_api").css("visibility","hidden");
|
304 |
$(tvs_this).after('<div class="tvc-nb-spinner" id="tvc-nb-spinner"></div>');
|
305 |
+
tvc_helper.tvc_alert("error","Attention !","Sync up is in the process do not refresh the page. it may take few minutes, if GMC product sync count is large.");
|
306 |
jQuery.post(myAjaxNonces.ajaxurl,{
|
307 |
action: "tvc_call_api_sync",
|
308 |
apiSyncupNonce: myAjaxNonces.apiSyncupNonce
|
309 |
},function( response ){
|
310 |
var rsp = JSON.parse(response);
|
311 |
+
if(rsp.error == false){
|
312 |
$("#tvc-nb-spinner").remove();
|
313 |
+
tvc_helper.tvc_alert("success","",rsp.message,true,2000);
|
314 |
+
}else{
|
315 |
+
tvc_helper.tvc_alert("error","",rsp.message,true,2000);
|
316 |
+
}
|
317 |
+
setTimeout(function(){ location.reload();}, 2000);
|
318 |
});
|
319 |
}
|
320 |
</script>
|
includes/setup/help-html.php
CHANGED
@@ -1,39 +1,57 @@
|
|
1 |
<?php
|
2 |
function get_connect_google_popup_html(){
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
</div>
|
29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
}
|
31 |
function info_htnml($validation){
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
}
|
38 |
function get_google_shopping_tabs_html($site_url, $google_merchant_center_id){
|
39 |
$site_url_p = (isset($google_merchant_center_id) && $google_merchant_center_id != '')?$site_url:"javascript:void(0);";
|
@@ -44,7 +62,6 @@ function get_google_shopping_tabs_html($site_url, $google_merchant_center_id){
|
|
44 |
$tab = (isset($_GET['tab']) && $_GET['tab'])?$_GET['tab']:"";
|
45 |
$TVC_Admin_Helper = new TVC_Admin_Helper();
|
46 |
$setting_status = $TVC_Admin_Helper->check_setting_status_sub_tabs();
|
47 |
-
//print_r($setting_status);
|
48 |
$google_shopping_conf_msg ="";
|
49 |
if(isset($setting_status['google_shopping_conf'] ) && $setting_status['google_shopping_conf'] == false && isset($setting_status["google_shopping_conf_msg"]) && $setting_status["google_shopping_conf_msg"]){
|
50 |
$google_shopping_conf_msg = '<span class="tvc-tooltiptext tvc-tooltip-right">'.((isset($setting_status["google_shopping_conf_msg"]))?$setting_status["google_shopping_conf_msg"]:"").'</span>';
|
@@ -59,75 +76,305 @@ function get_google_shopping_tabs_html($site_url, $google_merchant_center_id){
|
|
59 |
$google_shopping_p_campaigns_msg = '<span class="tvc-tooltiptext tvc-tooltip-right">'.((isset($setting_status["google_shopping_p_campaigns_msg"]))?$setting_status["google_shopping_p_campaigns_msg"]:"").'</span>';
|
60 |
}
|
61 |
|
62 |
-
return '<
|
63 |
-
<
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
</
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
<a href="' . $site_url_p . 'shopping_campaigns_page" id="smart-shopping-campaigns">Smart Shopping Campaigns</a>'. $google_shopping_p_campaigns_msg
|
83 |
-
.((isset($setting_status['google_shopping_p_campaigns']) )?info_htnml($setting_status['google_shopping_p_campaigns']):"").'
|
84 |
-
</div>
|
85 |
-
</div>
|
86 |
-
</div>
|
87 |
-
</div>';
|
88 |
}
|
89 |
function get_tvc_google_ads_help_html(){
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
<
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
<ol>
|
106 |
-
<li>With dynamic remarketing tags, you will be able to show ads to your past site visitors with specific product information that is tailored to your customer’s previous site visits.</li>
|
107 |
-
<li>This plugin enables dynamic remarketing tags for crucial eCommerce events like product list views, product detail page views, add to cart and final purchase event.</li>
|
108 |
-
<li>Dynamic remarketing along with the product feeds in your merchant center account will enable you for smart shopping campaigns which is very essential for any eCommerce business globally. <a target="_blank" href="https://support.google.com/google-ads/answer/3124536?hl=en">Learn More</a></li>
|
109 |
-
</ol>
|
110 |
-
';
|
111 |
-
}
|
112 |
-
function get_tvc_help_html(){
|
113 |
-
return '<h5 class="content-heading">Help Center:</h5>
|
114 |
<ol>
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
<li>Follow <a target="_blank" href="https://support.google.com/merchants/answer/6363310?hl=en&ref_topic=3163841">merchant center guidelines for site requirements</a> in order to avoid account suspension issues. </li>
|
119 |
</ol>
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
<
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
}
|
133 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<?php
|
2 |
function get_connect_google_popup_html(){
|
3 |
+
$TVC_Admin_Helper = new TVC_Admin_Helper();
|
4 |
+
return '<div class="modal fade popup-modal overlay" id="tvc_google_connect" data-backdrop="static" data-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
|
5 |
+
<div class="modal-dialog modal-dialog-centered">
|
6 |
+
<div class="modal-content">
|
7 |
+
<div class="modal-body">
|
8 |
+
<h5 class="modal-title" id="staticBackdropLabel">Connect Tatvic with your website</h5>
|
9 |
+
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
10 |
+
<span aria-hidden="true">×</span>
|
11 |
+
</button>
|
12 |
+
<br>
|
13 |
+
<p> By continuing from here, you will be redirected to Tatvic’s website to configure your google analytics, google ads and google merchant center accounts.</p>
|
14 |
+
|
15 |
+
<p>Make sure you sign in with the google account that has all privileges to access google analytics, google ads and google merchant center account.</p>
|
16 |
+
</div>
|
17 |
+
<div class="modal-footer">
|
18 |
+
<a target="_blank" class="ee-oauth-container btn darken-4 white black-text" href="'. $TVC_Admin_Helper->get_connect_url().'" style="text-transform:none; margin: 0 auto;">
|
19 |
+
<p style="font-size: inherit; margin-top:5px;"><img width="20px" style="margin-right:8px" alt="Google sign-in" src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/53/Google_%22G%22_Logo.svg/512px-Google_%22G%22_Logo.svg.png" />Sign In With Google</p>
|
20 |
+
</a>
|
21 |
+
</div>
|
22 |
+
</div>
|
23 |
+
</div>
|
24 |
+
</div>';
|
25 |
+
}
|
26 |
+
function get_connect_google_popup_html_to_active_licence(){
|
27 |
+
$TVC_Admin_Helper = new TVC_Admin_Helper();
|
28 |
+
return '<div class="modal fade popup-modal overlay" id="tvc_google_connect_active_licence">
|
29 |
+
<div class="modal-dialog modal-dialog-centered">
|
30 |
+
<div class="modal-content">
|
31 |
+
<div class="modal-body">
|
32 |
+
<h5 class="modal-title" id="staticBackdropLabel">Connect Tatvic with your website to active licence key</h5>
|
33 |
+
<button type="button" id="tvc_google_connect_active_licence_close" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span>
|
34 |
+
</button>
|
35 |
+
<br>
|
36 |
+
<p> By continuing from here, you will be redirected to Tatvic’s website to configure your google analytics, google ads and google merchant center accounts.</p>
|
37 |
+
|
38 |
+
<p>Make sure you sign in with the google account that has all privileges to access google analytics, google ads and google merchant center account.</p>
|
39 |
</div>
|
40 |
+
<div class="modal-footer">
|
41 |
+
<a target="_blank" class="ee-oauth-container btn darken-4 white black-text" href="'. $TVC_Admin_Helper->get_connect_url().'" style="text-transform:none; margin: 0 auto;">
|
42 |
+
<p style="font-size: inherit; margin-top:5px;"><img width="20px" style="margin-right:8px" alt="Google sign-in" src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/53/Google_%22G%22_Logo.svg/512px-Google_%22G%22_Logo.svg.png" />Sign In With Google</p>
|
43 |
+
</a>
|
44 |
+
</div>
|
45 |
+
</div>
|
46 |
+
</div>
|
47 |
+
</div>';
|
48 |
}
|
49 |
function info_htnml($validation){
|
50 |
+
if($validation == true){
|
51 |
+
return '<img src="'.ENHANCAD_PLUGIN_URL.'/admin/images/config-success.svg" alt="configuration success" class="config-success">';
|
52 |
+
}else{
|
53 |
+
return '<img src="'.ENHANCAD_PLUGIN_URL.'/admin/images/exclaimation.png" alt="configuration success" class="config-fail">';
|
54 |
+
}
|
55 |
}
|
56 |
function get_google_shopping_tabs_html($site_url, $google_merchant_center_id){
|
57 |
$site_url_p = (isset($google_merchant_center_id) && $google_merchant_center_id != '')?$site_url:"javascript:void(0);";
|
62 |
$tab = (isset($_GET['tab']) && $_GET['tab'])?$_GET['tab']:"";
|
63 |
$TVC_Admin_Helper = new TVC_Admin_Helper();
|
64 |
$setting_status = $TVC_Admin_Helper->check_setting_status_sub_tabs();
|
|
|
65 |
$google_shopping_conf_msg ="";
|
66 |
if(isset($setting_status['google_shopping_conf'] ) && $setting_status['google_shopping_conf'] == false && isset($setting_status["google_shopping_conf_msg"]) && $setting_status["google_shopping_conf_msg"]){
|
67 |
$google_shopping_conf_msg = '<span class="tvc-tooltiptext tvc-tooltip-right">'.((isset($setting_status["google_shopping_conf_msg"]))?$setting_status["google_shopping_conf_msg"]:"").'</span>';
|
76 |
$google_shopping_p_campaigns_msg = '<span class="tvc-tooltiptext tvc-tooltip-right">'.((isset($setting_status["google_shopping_p_campaigns_msg"]))?$setting_status["google_shopping_p_campaigns_msg"]:"").'</span>';
|
77 |
}
|
78 |
|
79 |
+
return '<ul class="nav nav-tabs nav-justified edit-tabs" id="myTab" role="tablist">
|
80 |
+
<li class="nav-item" role="presentation">
|
81 |
+
<div class="tvc-tooltip nav-link '.(($tab=="gaa_config_page")?"active":"").'">
|
82 |
+
<a href="' . $site_url . 'gaa_config_page" id="smart-shopping-campaigns">Configuration</a>'.$google_shopping_conf_msg
|
83 |
+
.((isset($setting_status['google_shopping_conf']) )?info_htnml($setting_status['google_shopping_conf']):"").'
|
84 |
+
</div>
|
85 |
+
</li>
|
86 |
+
<li class="nav-item" role="presentation">
|
87 |
+
<div class="tvc-tooltip nav-link '.(($tab=="sync_product_page")?"active":"").'" '.$site_url_p_target.'>
|
88 |
+
<a href="'.$site_url_p.'sync_product_page" id="smart-shopping-campaigns">Product Sync</a>'. $google_shopping_p_sync_msg
|
89 |
+
.((isset($setting_status['google_shopping_p_sync']) )?info_htnml($setting_status['google_shopping_p_sync']):"").'
|
90 |
+
</div>
|
91 |
+
</li>
|
92 |
+
<li class="nav-item" role="presentation">
|
93 |
+
<div class="tvc-tooltip nav-link '.(($tab=="shopping_campaigns_page")?"active":"").'" '.$site_url_p_target.'>
|
94 |
+
<a href="' . $site_url_p . 'shopping_campaigns_page" id="smart-shopping-campaigns">Smart Shopping Campaigns</a>'. $google_shopping_p_campaigns_msg
|
95 |
+
.((isset($setting_status['google_shopping_p_campaigns']) )?info_htnml($setting_status['google_shopping_p_campaigns']):"").'
|
96 |
+
</div>
|
97 |
+
</li>
|
98 |
+
</ul>';
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
}
|
100 |
function get_tvc_google_ads_help_html(){
|
101 |
+
$TVC_Admin_Helper = new TVC_Admin_Helper();
|
102 |
+
ob_start(); ?>
|
103 |
+
<div class="right-content">
|
104 |
+
<div class="content-section">
|
105 |
+
<div class="content-icon">
|
106 |
+
<img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/information.svg'; ?>" alt="information"/>
|
107 |
+
</div>
|
108 |
+
<h4 class="content-heading">Help Center:</h4>
|
109 |
+
<section class="tvc-help-slider">
|
110 |
+
<?php if($TVC_Admin_Helper->is_ga_property() == false){?>
|
111 |
+
<div>
|
112 |
+
In order to configure your Google Ads account, you need to sign in with the associated Google account. Click on "Get started" <img src="<?php echo ENHANCAD_PLUGIN_URL."/admin/images/icon/add.svg"; ?>" alt="connect account"/> icon to set up the plugin.
|
113 |
+
</div>
|
114 |
+
<div>
|
115 |
+
Once you select or create a new google ads account, your account will be enabled for the following:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
116 |
<ol>
|
117 |
+
<li>Remarketing and dynamic remarketing tags for all the major eCommerce events on your website (Optional)</li>
|
118 |
+
<li>Your google ads account will be linked with the previously selected google analytics account (Optional)</li>
|
119 |
+
<li>Your google ads account will be linked with google merchant center account in the next step so that you can start running google shopping campaigns(Optional)</li>
|
|
|
120 |
</ol>
|
121 |
+
</div>
|
122 |
+
<?php }else{ ?>
|
123 |
+
<div>
|
124 |
+
You can update or change the google ads account anytime by clicking on <img src="<?php echo ENHANCAD_PLUGIN_URL."/admin/images/icon/refresh.svg"; ?>" alt="refresh"/> icon.
|
125 |
+
</div>
|
126 |
+
<?php }?>
|
127 |
+
|
128 |
+
</section>
|
129 |
+
</div>
|
130 |
+
<nav>
|
131 |
+
<ul class="pagination justify-content-center">
|
132 |
+
<li class="page-item page-prev h-page-prev">
|
133 |
+
<span class="page-link"><img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/arrow-down-sign-to-navigate.svg'; ?>" alt=""/></span>
|
134 |
+
</li>
|
135 |
+
<li class="page-item"><span class="paging_info" id="paging_info">1</span></li>
|
136 |
+
<li class="page-item page-next h-page-next">
|
137 |
+
<span class="page-link"><img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/arrow-down-sign-to-navigate.svg'; ?>" alt=""/></span>
|
138 |
+
</li>
|
139 |
+
</ul>
|
140 |
+
</nav>
|
141 |
+
</div>
|
142 |
+
<script>
|
143 |
+
let rtl= <?php echo (is_rtl())?"true":"false"; ?>;
|
144 |
+
$(".tvc-help-slider").slick({
|
145 |
+
autoplay: false,
|
146 |
+
dots: false,
|
147 |
+
prevArrow:$('.h-page-prev'),
|
148 |
+
nextArrow:$('.h-page-next'),
|
149 |
+
rtl:rtl
|
150 |
+
});
|
151 |
+
$(".tvc-help-slider").on("beforeChange", function(event, slick, currentSlide, nextSlide){
|
152 |
+
$("#paging_info").html(nextSlide+1);
|
153 |
+
});
|
154 |
+
</script>
|
155 |
+
<div class="right-content">
|
156 |
+
<div class="content-section">
|
157 |
+
<div class="content-icon">
|
158 |
+
<img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/lamp.svg'; ?>" alt="information"/>
|
159 |
+
</div>
|
160 |
+
<h4 class="content-heading">Business Value:</h4>
|
161 |
+
<section class="tvc-b-value-slider">
|
162 |
+
<div>With dynamic remarketing tags, you will be able to show ads to your past site visitors with specific product information that is tailored to your customer’s previous site visits.</div>
|
163 |
+
<div>This plugin enables dynamic remarketing tags for crucial eCommerce events like product list views, product detail page views, add to cart and final purchase event.</div>
|
164 |
+
<div>Dynamic remarketing along with the product feeds in your merchant center account will enable you for smart shopping campaigns which is very essential for any eCommerce business globally. <a target="_blank" href="https://support.google.com/google-ads/answer/3124536?hl=en">Learn More</a>
|
165 |
+
</div>
|
166 |
+
</section>
|
167 |
+
</div>
|
168 |
+
<nav>
|
169 |
+
<ul class="pagination justify-content-center">
|
170 |
+
<li class="page-item page-prev b-page-prev">
|
171 |
+
<span class="page-link"><img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/arrow-down-sign-to-navigate.svg'; ?>" alt=""/></span>
|
172 |
+
</li>
|
173 |
+
<li class="page-item"><span class="paging_info" id="b-paging-info">1</span></li>
|
174 |
+
<li class="page-item page-next b-page-next">
|
175 |
+
<span class="page-link"><img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/arrow-down-sign-to-navigate.svg'; ?>" alt=""/></span>
|
176 |
+
</li>
|
177 |
+
</ul>
|
178 |
+
</nav>
|
179 |
+
</div>
|
180 |
+
<div class="tvc-footer-links">
|
181 |
+
<a target="_blank" href="http://plugins.tatvic.com/help-center/Installation-Manual.pdf" tabindex="0">Installation manual</a> | <a target="_blank" href="http://plugins.tatvic.com/help-center/Google-shopping-Guide.pdf" tabindex="0">Google shopping guide</a> | <a target="_blank" href="https://wordpress.org/plugins/enhanced-e-commerce-for-woocommerce-store/faq/" tabindex="0">FAQ</a>
|
182 |
+
</div>
|
183 |
+
<script>
|
184 |
+
//let rtl= "<?php echo (is_rtl())?"true":"false"; ?>";
|
185 |
+
$(".tvc-b-value-slider").slick({
|
186 |
+
autoplay: false,
|
187 |
+
dots: false,
|
188 |
+
prevArrow:$('.b-page-prev'),
|
189 |
+
nextArrow:$('.b-page-next'),
|
190 |
+
rtl:rtl
|
191 |
+
});
|
192 |
+
$(".tvc-b-value-slider").on("beforeChange", function(event, slick, currentSlide, nextSlide){
|
193 |
+
$("#b-paging-info").html(nextSlide+1);
|
194 |
+
});
|
195 |
+
</script>
|
196 |
+
<?php
|
197 |
+
return ob_get_clean();
|
198 |
}
|
199 |
+
function get_tvc_help_html(){
|
200 |
+
ob_start(); ?>
|
201 |
+
<div class="right-content">
|
202 |
+
<div class="content-section">
|
203 |
+
<div class="content-icon">
|
204 |
+
<img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/information.svg'; ?>" alt="information"/>
|
205 |
+
</div>
|
206 |
+
<h4 class="content-heading">Help Center:</h4>
|
207 |
+
<section class="tvc-help-slider">
|
208 |
+
<div>Set up your Google Merchant Center Account and make your WooCommerce shop and products available to millions of shoppers across Google.</div>
|
209 |
+
<div>Our plugin will help you automate everything you need to make your products available to interested customers across Google.</div>
|
210 |
+
<div>Follow <a target="_blank" href="https://support.google.com/merchants/answer/6363310?hl=en&ref_topic=3163841">merchant center guidelines for site requirements</a> in order to avoid account suspension issues.
|
211 |
+
</div>
|
212 |
+
</section>
|
213 |
+
</div>
|
214 |
+
<nav>
|
215 |
+
<ul class="pagination justify-content-center">
|
216 |
+
<li class="page-item page-prev h-page-prev">
|
217 |
+
<span class="page-link"><img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/arrow-down-sign-to-navigate.svg'; ?>" alt=""/></span>
|
218 |
+
</li>
|
219 |
+
<li class="page-item"><span class="paging_info" id="paging_info">1</span></li>
|
220 |
+
<li class="page-item page-next h-page-next">
|
221 |
+
<span class="page-link"><img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/arrow-down-sign-to-navigate.svg'; ?>" alt=""/></span>
|
222 |
+
</li>
|
223 |
+
</ul>
|
224 |
+
</nav>
|
225 |
+
</div>
|
226 |
+
<script>
|
227 |
+
let rtl= <?php echo (is_rtl())?"true":"false"; ?>;
|
228 |
+
$(".tvc-help-slider").slick({
|
229 |
+
autoplay: false,
|
230 |
+
dots: false,
|
231 |
+
prevArrow:$('.h-page-prev'),
|
232 |
+
nextArrow:$('.h-page-next'),
|
233 |
+
rtl:rtl
|
234 |
+
});
|
235 |
+
$(".tvc-help-slider").on("beforeChange", function(event, slick, currentSlide, nextSlide){
|
236 |
+
$("#paging_info").html(nextSlide+1);
|
237 |
+
});
|
238 |
+
</script>
|
239 |
+
<div class="right-content">
|
240 |
+
<div class="content-section">
|
241 |
+
<div class="content-icon">
|
242 |
+
<img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/lamp.svg'; ?>" alt="information"/>
|
243 |
+
</div>
|
244 |
+
<h4 class="content-heading">Business Value:</h4>
|
245 |
+
<section class="tvc-b-value-slider">
|
246 |
+
<div>Opt your product data into programmes, like surfaces across Google, Shopping ads, local inventory ads and Shopping Actions, to highlight your products to shoppers across Google.</div>
|
247 |
+
<div>Your store’s products will be eligible to get featured under the shopping tab when anyone searches for products that match your store’s product attributes.</div>
|
248 |
+
<div>Reach out to customers leaving your store by running smart shopping campaigns based on their past site behavior. <a target="_blank" href="https://www.google.com/intl/en_in/retail/?fmp=1&utm_id=bkws&mcsubid=in-en-ha-g-mc-bkws">Learn More</a></div>
|
249 |
+
</section>
|
250 |
+
</div>
|
251 |
+
<nav>
|
252 |
+
<ul class="pagination justify-content-center">
|
253 |
+
<li class="page-item page-prev b-page-prev">
|
254 |
+
<span class="page-link"><img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/arrow-down-sign-to-navigate.svg'; ?>" alt=""/></span>
|
255 |
+
</li>
|
256 |
+
<li class="page-item"><span class="paging_info" id="b-paging-info">1</span></li>
|
257 |
+
<li class="page-item page-next b-page-next">
|
258 |
+
<span class="page-link"><img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/arrow-down-sign-to-navigate.svg'; ?>" alt=""/></span>
|
259 |
+
</li>
|
260 |
+
</ul>
|
261 |
+
</nav>
|
262 |
+
</div>
|
263 |
+
<div class="tvc-footer-links">
|
264 |
+
<a target="_blank" href="http://plugins.tatvic.com/help-center/Installation-Manual.pdf" tabindex="0">Installation manual</a> | <a target="_blank" href="http://plugins.tatvic.com/help-center/Google-shopping-Guide.pdf" tabindex="0">Google shopping guide</a> | <a target="_blank" href="https://wordpress.org/plugins/enhanced-e-commerce-for-woocommerce-store/faq/" tabindex="0">FAQ</a>
|
265 |
+
</div>
|
266 |
+
<script>
|
267 |
+
//let rtl= "<?php echo (is_rtl())?"true":"false"; ?>";
|
268 |
+
$(".tvc-b-value-slider").slick({
|
269 |
+
autoplay: false,
|
270 |
+
dots: false,
|
271 |
+
prevArrow:$('.b-page-prev'),
|
272 |
+
nextArrow:$('.b-page-next'),
|
273 |
+
rtl:rtl
|
274 |
+
});
|
275 |
+
$(".tvc-b-value-slider").on("beforeChange", function(event, slick, currentSlide, nextSlide){
|
276 |
+
$("#b-paging-info").html(nextSlide+1);
|
277 |
+
});
|
278 |
+
</script>
|
279 |
+
<?php
|
280 |
+
return ob_get_clean();
|
281 |
+
}
|
282 |
+
function get_tvc_google_ga_sidebar(){
|
283 |
+
$TVC_Admin_Helper = new TVC_Admin_Helper();
|
284 |
+
ob_start(); ?>
|
285 |
+
<div class="right-content">
|
286 |
+
<div class="content-section">
|
287 |
+
<div class="content-icon">
|
288 |
+
<img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/information.svg'; ?>" alt="information"/>
|
289 |
+
</div>
|
290 |
+
<h4 class="content-heading">Help Center:</h4>
|
291 |
+
<section class="tvc-help-slider">
|
292 |
+
<?php if($TVC_Admin_Helper->is_ga_property() == false){?>
|
293 |
+
<div>
|
294 |
+
In order to configure your Google Analytics account, you need to sign in with the associated Google account. Click on "Get started" <img src="<?php echo ENHANCAD_PLUGIN_URL."/admin/images/icon/add.svg"; ?>" alt="connect account"/> icon to set up the plugin.
|
295 |
+
</div>
|
296 |
+
<div>
|
297 |
+
Once you sign in with an associated google account, you will be asked to select a google analytics account from the drop down.
|
298 |
+
</div>
|
299 |
+
<div>
|
300 |
+
If you have already added the gtag.js snippet manually, YOU MUST uncheck the “add gtag.js”.
|
301 |
+
</div>
|
302 |
+
<?php
|
303 |
+
}else{
|
304 |
+
?>
|
305 |
+
<div>
|
306 |
+
You can update or change the google analytics account anytime by clicking on <img src="<?php echo ENHANCAD_PLUGIN_URL."/admin/images/icon/refresh.svg"; ?>" alt="refresh"/> icon.
|
307 |
+
</div>
|
308 |
+
<?php
|
309 |
+
}?>
|
310 |
+
</section>
|
311 |
+
</div>
|
312 |
+
<nav>
|
313 |
+
<ul class="pagination justify-content-center">
|
314 |
+
<li class="page-item page-prev h-page-prev help-ga-prev">
|
315 |
+
<span class="page-link"><img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/arrow-down-sign-to-navigate.svg'; ?>" alt=""/></span>
|
316 |
+
</li>
|
317 |
+
<li class="page-item"><span class="paging_info" id="help_ga_paging_info">1</span></li>
|
318 |
+
<li class="page-item page-next h-page-next help-ga-next">
|
319 |
+
<span class="page-link"><img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/arrow-down-sign-to-navigate.svg'; ?>" alt=""/></span>
|
320 |
+
</li>
|
321 |
+
</ul>
|
322 |
+
</nav>
|
323 |
+
</div>
|
324 |
+
<script>
|
325 |
+
$(".tvc-help-slider").slick({
|
326 |
+
autoplay: false,
|
327 |
+
dots: false,
|
328 |
+
prevArrow:$('.help-ga-prev'),
|
329 |
+
nextArrow:$('.help-ga-next')
|
330 |
+
});
|
331 |
+
$(".tvc-help-slider").on("beforeChange", function(event, slick, currentSlide, nextSlide){
|
332 |
+
$("#help_ga_paging_info").html(nextSlide+1);
|
333 |
+
});
|
334 |
+
</script>
|
335 |
+
<div class="right-content">
|
336 |
+
<div class="content-section">
|
337 |
+
<div class="content-icon">
|
338 |
+
<img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/lamp.svg'; ?>" alt="information"/>
|
339 |
+
</div>
|
340 |
+
<h4 class="content-heading">Business Value:</h4>
|
341 |
+
<section class="tvc-b-value-slider">
|
342 |
+
<div>
|
343 |
+
<p>Once you set up google analytics account, your website will be tagged for all the important eCommerce events in google analytics and you will be able to start taking data driven decisions in order to scale your eCommerce business faster. Some of the important data points are:</p>
|
344 |
+
<ol>
|
345 |
+
<li>What exactly is your site’s conversion rate?</li>
|
346 |
+
<li>What is the exact drop at each stage in your eCommerce funnel? For example, 100 people are coming to your website, how many users are seeing any product detail page, how many are adding products to cart, how many are abandoning cart etc.</li>
|
347 |
+
</ol>
|
348 |
+
</div>
|
349 |
+
<div>What all are your star products and what all are just consuming the space in your website?</div>
|
350 |
+
</section>
|
351 |
+
</div>
|
352 |
+
<nav>
|
353 |
+
<ul class="pagination justify-content-center">
|
354 |
+
<li class="page-item page-prev b-page-prev value-ga-prev">
|
355 |
+
<span class="page-link"><img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/arrow-down-sign-to-navigate.svg'; ?>" alt=""/></span>
|
356 |
+
</li>
|
357 |
+
<li class="page-item"><span class="paging_info" id="value_ga_paging_info">1</span></li>
|
358 |
+
<li class="page-item page-next b-page-next value-ga-next">
|
359 |
+
<span class="page-link"><img src="<?php echo ENHANCAD_PLUGIN_URL.'/admin/images/icon/arrow-down-sign-to-navigate.svg'; ?>" alt=""/></span>
|
360 |
+
</li>
|
361 |
+
</ul>
|
362 |
+
</nav>
|
363 |
+
</div>
|
364 |
+
<div class="tvc-footer-links">
|
365 |
+
<a target="_blank" href="http://plugins.tatvic.com/help-center/Installation-Manual.pdf" tabindex="0">Installation manual</a> | <a target="_blank" href="http://plugins.tatvic.com/help-center/Google-shopping-Guide.pdf" tabindex="0">Google shopping guide</a> | <a target="_blank" href="https://wordpress.org/plugins/enhanced-e-commerce-for-woocommerce-store/faq/" tabindex="0">FAQ</a>
|
366 |
+
</div>
|
367 |
+
<script>
|
368 |
+
$(".tvc-b-value-slider").slick({
|
369 |
+
autoplay: false,
|
370 |
+
dots: false,
|
371 |
+
prevArrow:$('.value-ga-prev'),
|
372 |
+
nextArrow:$('.value-ga-next')
|
373 |
+
});
|
374 |
+
$(".tvc-b-value-slider").on("beforeChange", function(event, slick, currentSlide, nextSlide){
|
375 |
+
$("#value_ga_paging_info").html(nextSlide+1);
|
376 |
+
});
|
377 |
+
</script>
|
378 |
+
<?php
|
379 |
+
return ob_get_clean();
|
380 |
+
}
|
includes/setup/json/client-secrets.json
CHANGED
@@ -1,19 +1,6 @@
|
|
1 |
{
|
2 |
"web": {
|
3 |
"client_id": "854883711805-4bm7ik0lq2jcdvdk0qu8sgtd4jdc1k7o.apps.googleusercontent.com",
|
4 |
-
"
|
5 |
-
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
6 |
-
"token_uri": "https://oauth2.googleapis.com/token",
|
7 |
-
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
8 |
-
"client_secret": "mwgFJ25-FMPEyeNtI-TIMJIZ",
|
9 |
-
"manager_customer_id": "9704619790",
|
10 |
-
"manager_refresh_token": "1//0glkEtsa8PNuwCgYIARAAGBASNwF-L9IrBZQjIINEw2MMO_M_mRdKwoNCBwJtHXtahh5Bj4oQR01ErmhaBB2TqE68rkP8JaELISU",
|
11 |
-
"developer_token": "R0IEth5fQ1Ac59qB2Wf8Aw",
|
12 |
-
"redirect_uris": [
|
13 |
-
"https://preprodestore.tatvic.com/config/ga_rdr_gmc.php"
|
14 |
-
],
|
15 |
-
"javascript_origins": [
|
16 |
-
"https://plugins.tatvic.com"
|
17 |
-
]
|
18 |
}
|
19 |
}
|
1 |
{
|
2 |
"web": {
|
3 |
"client_id": "854883711805-4bm7ik0lq2jcdvdk0qu8sgtd4jdc1k7o.apps.googleusercontent.com",
|
4 |
+
"client_secret": "mwgFJ25-FMPEyeNtI-TIMJIZ"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
}
|
6 |
}
|
includes/setup/tatvic-category-wrapper.php
CHANGED
@@ -15,7 +15,6 @@ if ( ! class_exists( 'Tatvic_Category_Wrapper' ) ) :
|
|
15 |
*/
|
16 |
public function category_table_content( $mode = 'normal' ) {
|
17 |
$shop_categories = TVC_Taxonomies::get_shop_categories_list();
|
18 |
-
|
19 |
return $this->category_rows( $shop_categories, 0, $mode );
|
20 |
}
|
21 |
|
@@ -42,8 +41,8 @@ if ( ! class_exists( 'Tatvic_Category_Wrapper' ) ) :
|
|
42 |
for ( $i = 0; $i < $category_depth_level; $i ++ ) {
|
43 |
$level_indicator .= '— ';
|
44 |
}
|
45 |
-
|
46 |
-
if (
|
47 |
foreach ( $shop_categories as $category ) {
|
48 |
|
49 |
$category_children = $this->get_sub_categories( $category );
|
@@ -57,7 +56,6 @@ if ( ! class_exists( 'Tatvic_Category_Wrapper' ) ) :
|
|
57 |
} else {
|
58 |
$html_code .= esc_html__( 'No shop categories found.', 'tvc-product-feed-manager' );
|
59 |
}
|
60 |
-
|
61 |
return $html_code;
|
62 |
}
|
63 |
|
15 |
*/
|
16 |
public function category_table_content( $mode = 'normal' ) {
|
17 |
$shop_categories = TVC_Taxonomies::get_shop_categories_list();
|
|
|
18 |
return $this->category_rows( $shop_categories, 0, $mode );
|
19 |
}
|
20 |
|
41 |
for ( $i = 0; $i < $category_depth_level; $i ++ ) {
|
42 |
$level_indicator .= '— ';
|
43 |
}
|
44 |
+
|
45 |
+
if (!empty((array)$shop_categories ) ) {
|
46 |
foreach ( $shop_categories as $category ) {
|
47 |
|
48 |
$category_children = $this->get_sub_categories( $category );
|
56 |
} else {
|
57 |
$html_code .= esc_html__( 'No shop categories found.', 'tvc-product-feed-manager' );
|
58 |
}
|
|
|
59 |
return $html_code;
|
60 |
}
|
61 |
|
includes/user-interface/tvc-url-functions.php
DELETED
@@ -1,85 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Checks if the user is on one of the plugin pages or not.
|
5 |
-
* Also returns true when current page can not be defined
|
6 |
-
*
|
7 |
-
* @since 2.3.4
|
8 |
-
*
|
9 |
-
* @param string $url default $_SERVER[ 'REQUEST_URI' ]
|
10 |
-
*
|
11 |
-
* @return boolean
|
12 |
-
*/
|
13 |
-
function tvc_on_any_own_plugin_page( $url = null ) {
|
14 |
-
$ref_url = null === $url ? tvc_get_current_page_url() : $url;
|
15 |
-
|
16 |
-
// return true if the current page url has not been identified
|
17 |
-
if ( empty( $ref_url ) ) {
|
18 |
-
return true;
|
19 |
-
}
|
20 |
-
|
21 |
-
if ( false === stripos( $ref_url, '/wp-admin/admin.php?page=' . ENHANCAD_PLUGIN_NAME ) && false === stripos( $ref_url, '/wp-admin/admin.php?page=tvc-' ) ) {
|
22 |
-
return false;
|
23 |
-
} else {
|
24 |
-
return true;
|
25 |
-
}
|
26 |
-
}
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Checks if the user is on the options page
|
30 |
-
* Also returns true when current page can not be defined
|
31 |
-
*
|
32 |
-
* @since 2.3.4
|
33 |
-
*
|
34 |
-
* @param string $url default $_SERVER[ 'REQUEST_URI' ]
|
35 |
-
*
|
36 |
-
* @return boolean
|
37 |
-
*/
|
38 |
-
function tvc_on_plugins_settings_page( $url = null ) {
|
39 |
-
$ref_url = null === $url ? tvc_get_current_page_url() : $url;
|
40 |
-
// return true if the current page url has not been identified
|
41 |
-
if ( empty( $ref_url ) ) {
|
42 |
-
return true;
|
43 |
-
}
|
44 |
-
if ( true === stripos( $ref_url, '/wp-admin/admin.php?page=tvc-' ) ) {
|
45 |
-
return false;
|
46 |
-
} else {
|
47 |
-
return true;
|
48 |
-
}
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Checks if the user is on one of the plugins pages but not on the options page
|
53 |
-
* Also returns true when current page can not be defined
|
54 |
-
*
|
55 |
-
* @since 2.3.4
|
56 |
-
*
|
57 |
-
* @param string $url default $_SERVER[ 'REQUEST_URI' ]
|
58 |
-
*
|
59 |
-
* @return boolean
|
60 |
-
*/
|
61 |
-
function tvc_on_own_main_plugin_page( $url = null ) {
|
62 |
-
$ref_url = null === $url ? tvc_get_current_page_url() : $url;
|
63 |
-
|
64 |
-
// return true if the current page url has not been identified
|
65 |
-
if ( empty( $ref_url ) ) {
|
66 |
-
return true;
|
67 |
-
}
|
68 |
-
|
69 |
-
// return true if the url contains the plugin name under the page attribute or if it's an ajax call
|
70 |
-
if ( false === stripos( $ref_url, '/wp-admin/admin.php?page=' . ENHANCAD_PLUGIN_NAME ) && false === stripos( $ref_url, '/wp-admin/admin-ajax.php' ) ) {
|
71 |
-
return false;
|
72 |
-
} else {
|
73 |
-
return true;
|
74 |
-
}
|
75 |
-
}
|
76 |
-
|
77 |
-
/**
|
78 |
-
* Get the $_SERVER[ 'REQUEST_URI' ] variable
|
79 |
-
*
|
80 |
-
* @since 2.3.4
|
81 |
-
* @return string $_SERVER[ 'REQUEST_URI' ] or empty
|
82 |
-
*/
|
83 |
-
function tvc_get_current_page_url() {
|
84 |
-
return isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '';
|
85 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public/class-enhanced-ecommerce-google-analytics-public.php
CHANGED
@@ -28,7 +28,7 @@ class Enhanced_Ecommerce_Google_Analytics_Public {
|
|
28 |
* @return void
|
29 |
*/
|
30 |
//set plugin version
|
31 |
-
public $tvc_eeVer =
|
32 |
/**
|
33 |
* @var mixed $tvc_aga
|
34 |
*/
|
@@ -177,7 +177,29 @@ class Enhanced_Ecommerce_Google_Analytics_Public {
|
|
177 |
function tvc_store_meta_data() {
|
178 |
//only on home page
|
179 |
global $woocommerce;
|
180 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
181 |
$tvc_sMetaData = array(
|
182 |
'tvc_wcv' => $woocommerce->version,
|
183 |
'tvc_wpv' => get_bloginfo('version'),
|
@@ -190,8 +212,9 @@ class Enhanced_Ecommerce_Google_Analytics_Public {
|
|
190 |
't_thr' => $this->ga_imTh,
|
191 |
't_IPA' => $this->ga_IPA,
|
192 |
't_OptOut' => $this->ga_OPTOUT,
|
193 |
-
't_PrivacyPolicy' => $this->ga_PrivacyPolicy
|
194 |
-
)
|
|
|
195 |
);
|
196 |
$this->wc_version_compare("tvc_smd=" . json_encode($tvc_sMetaData) . ";");
|
197 |
}
|
28 |
* @return void
|
29 |
*/
|
30 |
//set plugin version
|
31 |
+
public $tvc_eeVer = PLUGIN_TVC_VERSION;
|
32 |
/**
|
33 |
* @var mixed $tvc_aga
|
34 |
*/
|
177 |
function tvc_store_meta_data() {
|
178 |
//only on home page
|
179 |
global $woocommerce;
|
180 |
+
$TVC_Admin_Helper = new TVC_Admin_Helper();
|
181 |
+
$google_detail = $TVC_Admin_Helper->get_ee_options_data();
|
182 |
+
$sub_data = array();
|
183 |
+
if(isset($google_detail['setting'])){
|
184 |
+
$googleDetail = $google_detail['setting'];
|
185 |
+
$sub_data['sub_id'] = $googleDetail->id;
|
186 |
+
$sub_data['cu_id']=$googleDetail->customer_id;
|
187 |
+
$sub_data['pl_id']=$googleDetail->plan_id;
|
188 |
+
$sub_data['ga_tra_option']=$googleDetail->tracking_option;
|
189 |
+
$sub_data['ga_property_id']=$googleDetail->google_ads_id;
|
190 |
+
$sub_data['ga_measurement_id']=$googleDetail->measurement_id;
|
191 |
+
$sub_data['ga_ads_id']=$googleDetail->google_ads_id;
|
192 |
+
$sub_data['ga_gmc_id']=$googleDetail->google_merchant_center_id;
|
193 |
+
$sub_data['op_gtag_js']=$googleDetail->add_gtag_snippet;
|
194 |
+
$sub_data['op_en_e_t']=$googleDetail->enhanced_e_commerce_tracking;
|
195 |
+
$sub_data['op_rm_t_t']=$googleDetail->remarketing_tags;
|
196 |
+
$sub_data['op_dy_rm_t_t']=$googleDetail->dynamic_remarketing_tags;
|
197 |
+
$sub_data['op_li_ga_wi_ads']=$googleDetail->link_google_analytics_with_google_ads;
|
198 |
+
$sub_data['gmc_is_product_sync']=$googleDetail->is_product_sync;
|
199 |
+
$sub_data['gmc_is_site_verified']=$googleDetail->is_site_verified;
|
200 |
+
$sub_data['gmc_is_domain_claim']=$googleDetail->is_domain_claim;
|
201 |
+
$sub_data['gmc_product_count']=$googleDetail->product_count;
|
202 |
+
}
|
203 |
$tvc_sMetaData = array(
|
204 |
'tvc_wcv' => $woocommerce->version,
|
205 |
'tvc_wpv' => get_bloginfo('version'),
|
212 |
't_thr' => $this->ga_imTh,
|
213 |
't_IPA' => $this->ga_IPA,
|
214 |
't_OptOut' => $this->ga_OPTOUT,
|
215 |
+
't_PrivacyPolicy' => $this->ga_PrivacyPolicy
|
216 |
+
),
|
217 |
+
'tvc_sub_data'=> $sub_data
|
218 |
);
|
219 |
$this->wc_version_compare("tvc_smd=" . json_encode($tvc_sMetaData) . ";");
|
220 |
}
|
public/partials/class-enhanced-ecommerce-google-analytics-public-display.php
DELETED
@@ -1,16 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Provide a public-facing view for the plugin
|
5 |
-
*
|
6 |
-
* This file is used to markup the public-facing aspects of the plugin.
|
7 |
-
*
|
8 |
-
* @link tatvic.com
|
9 |
-
* @since 1.0.0
|
10 |
-
*
|
11 |
-
* @package Enhanced_Ecommerce_Google_Analytics
|
12 |
-
* @subpackage Enhanced_Ecommerce_Google_Analytics/public/partials
|
13 |
-
*/
|
14 |
-
?>
|
15 |
-
|
16 |
-
<!-- This file should primarily consist of HTML with a little bit of PHP. -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
readme.txt
CHANGED
@@ -8,8 +8,8 @@ Author: Tatvic
|
|
8 |
Requires at least: 1.4.1
|
9 |
Tested up to: 5.7
|
10 |
Requires PHP: 5.6 or Higher
|
11 |
-
Stable tag: 3.0
|
12 |
-
Version: 3.0
|
13 |
License: GPLv3
|
14 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
15 |
|
@@ -356,6 +356,13 @@ You can resolve the duplication of data by removing the manually implemented GA
|
|
356 |
|
357 |
== Changelog ==
|
358 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
359 |
= 3.0.5 - 12/04/2021 =
|
360 |
* Add auto product sync feature enhancement - In the background, every month runs a process to sync the product, Run only those products who are completed the manual product sync.
|
361 |
|
8 |
Requires at least: 1.4.1
|
9 |
Tested up to: 5.7
|
10 |
Requires PHP: 5.6 or Higher
|
11 |
+
Stable tag: 3.1.0
|
12 |
+
Version: 3.1.0
|
13 |
License: GPLv3
|
14 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
15 |
|
356 |
|
357 |
== Changelog ==
|
358 |
|
359 |
+
= 3.1.0 - 15/06/2021 =
|
360 |
+
* Enhanced user experience with new UI
|
361 |
+
* Earlier some users were able to see 25 products only on product sync dashboard, the issue is fixed now
|
362 |
+
* Added customized notifications to track the activty and functioning of plugin
|
363 |
+
* Added customer support number to quickly reach out to us for any query
|
364 |
+
* API performance enhancements
|
365 |
+
|
366 |
= 3.0.5 - 12/04/2021 =
|
367 |
* Add auto product sync feature enhancement - In the background, every month runs a process to sync the product, Run only those products who are completed the manual product sync.
|
368 |
|