From 5a69b3624c5099fd4f2cfdb410f15f28ae3327d9 Mon Sep 17 00:00:00 2001 From: marco Date: Thu, 23 Mar 2017 12:21:04 +0100 Subject: [PATCH] ginger unlocked --- addon/adsense/ginger.adsense.php | 5 + addon/adsense/index.php | 4 + addon/analytics/ginger.analytics.php | 126 +++ addon/analytics/gingeranalytics.js | 33 + addon/analytics/gingeranalytics.min.js | 1 + addon/analytics/index.php | 3 + addon/exporter/index.php | 67 ++ addon/ginger.addon.utils.php | 28 + addon/jscustom/ginger.jscustom.php | 97 ++ addon/jscustom/index.php | 2 + addon/jscustom/page/ginger-iframe.php | 78 ++ addon/jscustom/page/ginger-jscustom.php | 87 ++ addon/logger/ginger.logger.php | 287 ++++++ addon/logger/index.php | 33 + addon/polylang/ginger.polylang.php | 353 +++++++ addon/polylang/index.php | 3 + addon/wpml/ginger.wpml.php | 339 +++++++ addon/wpml/index.php | 3 + admin/ginger.admin.php | 113 +++ admin/ginger.pointer.php | 84 ++ admin/ginger.utils.php | 104 ++ admin/img/logo-head.png | Bin 0 -> 40887 bytes admin/js/ginger.color.js | 8 + admin/js/ginger.js | 66 ++ admin/js/jquery.repeater-master/.gitignore | 2 + admin/js/jquery.repeater-master/.jshintrc | 15 + .../jquery.repeater-master/jquery.repeater.js | 805 ++++++++++++++++ .../jquery.repeater.min.js | 5 + .../jquery-linedtextarea.css | 68 ++ .../jquery-linedtextarea.js | 126 +++ admin/partial/banner.php | 225 +++++ admin/partial/bar.php | 66 ++ admin/partial/dialog.php | 79 ++ admin/partial/general.php | 326 +++++++ admin/partial/policy.php | 127 +++ front/css/cookies-enabler-dialog.css | 360 +++++++ front/css/cookies-enabler.css | 366 +++++++ front/gingerfront.core.php | 250 +++++ front/gingerfront.utils.php | 219 +++++ front/js/cookies-enabler.min.js | 1 + ginger-eu-cookie-law.php | 28 + img/ginger-color.png | Bin 0 -> 858 bytes img/ginger.png | Bin 0 -> 547 bytes img/ok.png | Bin 0 -> 889 bytes img/xx.png | Bin 0 -> 735 bytes languages/ginger-it_IT.mo | Bin 0 -> 26296 bytes languages/ginger-it_IT.po | 902 ++++++++++++++++++ readme.txt | 214 +++++ uninstall.php | 12 + 49 files changed, 6120 insertions(+) create mode 100755 addon/adsense/ginger.adsense.php create mode 100755 addon/adsense/index.php create mode 100755 addon/analytics/ginger.analytics.php create mode 100755 addon/analytics/gingeranalytics.js create mode 100755 addon/analytics/gingeranalytics.min.js create mode 100755 addon/analytics/index.php create mode 100755 addon/exporter/index.php create mode 100755 addon/ginger.addon.utils.php create mode 100755 addon/jscustom/ginger.jscustom.php create mode 100755 addon/jscustom/index.php create mode 100755 addon/jscustom/page/ginger-iframe.php create mode 100755 addon/jscustom/page/ginger-jscustom.php create mode 100755 addon/logger/ginger.logger.php create mode 100755 addon/logger/index.php create mode 100755 addon/polylang/ginger.polylang.php create mode 100755 addon/polylang/index.php create mode 100755 addon/wpml/ginger.wpml.php create mode 100755 addon/wpml/index.php create mode 100755 admin/ginger.admin.php create mode 100755 admin/ginger.pointer.php create mode 100755 admin/ginger.utils.php create mode 100755 admin/img/logo-head.png create mode 100755 admin/js/ginger.color.js create mode 100755 admin/js/ginger.js create mode 100755 admin/js/jquery.repeater-master/.gitignore create mode 100755 admin/js/jquery.repeater-master/.jshintrc create mode 100755 admin/js/jquery.repeater-master/jquery.repeater.js create mode 100755 admin/js/jquery.repeater-master/jquery.repeater.min.js create mode 100755 admin/js/jquery_lined_textarea/jquery-linedtextarea.css create mode 100755 admin/js/jquery_lined_textarea/jquery-linedtextarea.js create mode 100755 admin/partial/banner.php create mode 100755 admin/partial/bar.php create mode 100755 admin/partial/dialog.php create mode 100755 admin/partial/general.php create mode 100755 admin/partial/policy.php create mode 100755 front/css/cookies-enabler-dialog.css create mode 100755 front/css/cookies-enabler.css create mode 100755 front/gingerfront.core.php create mode 100755 front/gingerfront.utils.php create mode 100755 front/js/cookies-enabler.min.js create mode 100755 ginger-eu-cookie-law.php create mode 100755 img/ginger-color.png create mode 100755 img/ginger.png create mode 100755 img/ok.png create mode 100755 img/xx.png create mode 100755 languages/ginger-it_IT.mo create mode 100755 languages/ginger-it_IT.po create mode 100755 readme.txt create mode 100755 uninstall.php diff --git a/addon/adsense/ginger.adsense.php b/addon/adsense/ginger.adsense.php new file mode 100755 index 0000000..9795699 --- /dev/null +++ b/addon/adsense/ginger.adsense.php @@ -0,0 +1,5 @@ + + $_POST['enable_ginger_analytics'], + 'ginger_analytics_code' => $_POST['ginger_analytics_code'], + 'anonymize_ginger_analytics' => $_POST['anonymize_ginger_analytics'] + ); + update_option('gingeranalytics_option', $args); + endif; + ?> +
+ +

Ginger - Analytics Add On

+ +

+ +
"> + + + + + + + + + + + + + + + +
+

+
+
+ +

+ +

+

+ +

+
+
+
+ +

+ +

+
+
+

">

+
+
+ + + + + $val){ + update_option($key, $val); + } + echo '

'.__( 'All done! Your configuration was saved!', 'ginger' ).'

'; + }else{ + echo '

'.__( 'Error! Copied text is wrong...', 'ginger' ).'

'; + } + } + ?> +
+

Ginger - Import/Export

+

+

+

+ + + + +
+
+

+ +

+
"> + + + +

+ + " class="button" /> +
+
+ Contine l'array con le impostazioni del plugin - gingeranalytics -> Contine le optin con il serial number e l'attivazione; + * + * + */ + +$addons = ginger_include_addons(); + +function ginger_include_addons(){ + // check native gallery types + $addons = array(); + $addondir = plugin_dir_path( __FILE__ ); + + $files = scandir($addondir); + + + foreach($files as $file){ + if(is_dir($addondir.'/'.$file) && $file != "." && $file != ".."){ + if(file_exists($addondir.'/'.$file.'/index.php')){ + require_once($addondir.'/'.$file.'/index.php'); + $addons[]=$file; + } + } + } + + return $addons; +} diff --git a/addon/jscustom/ginger.jscustom.php b/addon/jscustom/ginger.jscustom.php new file mode 100755 index 0000000..504143b --- /dev/null +++ b/addon/jscustom/ginger.jscustom.php @@ -0,0 +1,97 @@ +

'.__( 'Updated!', 'ginger' ).'

'; +} + + $options = get_option($key); + include("page/ginger-jscustom.php"); + +} + + +function ginger_iframe_menu_page(){ + + $key = "ginger_iframecustom_options"; + if(isset($_POST["submit"]) && !wp_verify_nonce($_POST['ginger_options'], 'save_ginger_jscustom')){ + return; + } + + if(isset($_REQUEST["action"]) && $_REQUEST["action"] == "saveurl"){ + $params = $_POST["ginger_urls"]; + update_option($key, $params); + echo '

'.__( 'Updated!', 'ginger' ).'

'; + } + + $options = get_option($key); + + include("page/ginger-iframe.php"); + + +} + + +add_filter("ginger_script_tags", "ginger_jscustom_tags"); +function ginger_jscustom_tags($array){ + $key = "ginger_jscustom_options"; + $options = get_option($key); + if($options == "") return $array; + // cicle over params to get sync + foreach ($options as $option) { + if(isset($option["ginger_url_enable"][0]) && $option["ginger_url_enable"][0]){ + if(!isset($option["ginger_url_async"][0]) || !$option["ginger_url_async"][0]){ + $array[]=$option["ginger_url"]; + } + } + } + return $array; +} + + +add_filter("ginger_script_async_tags", "ginger_jscustom_async_tags"); +function ginger_jscustom_async_tags($array){ + $key = "ginger_jscustom_options"; + $options = get_option($key); + if($options == "") return $array; + // cicle over params to get sync + foreach ($options as $option) { + if(isset($option["ginger_url_enable"][0]) && $option["ginger_url_enable"][0]){ + if(isset($option["ginger_url_async"][0]) && $option["ginger_url_async"][0]){ + $array[]=$option["ginger_url"]; + } + } + } + return $array; +} + +add_filter("ginger_add_iframe", "ginger_iframe_async_tags"); +function ginger_iframe_async_tags($array){ + $key = "ginger_iframecustom_options"; + $options = get_option($key); + if($options == "") return $array; + // cicle over params to get sync + foreach ($options as $option) { + if($option["ginger_url_enable"][0]){ + $array[]=$option["ginger_url"]; + } + } + return $array; +} diff --git a/addon/jscustom/index.php b/addon/jscustom/index.php new file mode 100755 index 0000000..90e293e --- /dev/null +++ b/addon/jscustom/index.php @@ -0,0 +1,2 @@ + +

+ +

+
+ +
" class="repeater" > + + +
+ +
+ + : " size="40"/> + + | : > + | +
+ + +
+ + : + + | : + | +
+ + + +
+

+ +

">

+ + +
+ + + + + + + + diff --git a/addon/jscustom/page/ginger-jscustom.php b/addon/jscustom/page/ginger-jscustom.php new file mode 100755 index 0000000..eaa8958 --- /dev/null +++ b/addon/jscustom/page/ginger-jscustom.php @@ -0,0 +1,87 @@ + + +
+

+ +

Mark asynchronous mode only if standard mode is not working properly!", "ginger"); ?>

+
+ +
" class="repeater" > + + +
+ +
+ + : " size="40"/> + + | : > + | : > + | +
+ + +
+ + : + + | : + | : + | +
+ + + +
+

+ +

">

+ + +
+ + + + + + + +
diff --git a/addon/logger/ginger.logger.php b/addon/logger/ginger.logger.php new file mode 100755 index 0000000..5175e89 --- /dev/null +++ b/addon/logger/ginger.logger.php @@ -0,0 +1,287 @@ +query( "DELETE FROM {$wpdb->prefix}logger_ginger WHERE 1" ); + } + + $option_logger = get_option('gingerlogger'); + ?> +
+

Ginger - Logger Add On

+ get_results( "SELECT * FROM {$wpdb->prefix}logger_ginger WHERE 1 ORDER BY id DESC LIMIT $offset, $limit" ); + + echo '
'; + + ?> + + + + + + + + + + + + + + + + + + + + + + + + + > + + + + + + + + + + + + + + +
TimeIPurlCookie
TimeIPurlCookie
time; ?>ipaddress; ?>url; ?>status; ?>
No Logs yet
+ + get_var( "SELECT COUNT('id') FROM {$wpdb->prefix}logger_ginger" ); + $num_of_pages = ceil( $total / $limit ); + $page_links = paginate_links( array( + 'base' => add_query_arg( 'pagenum', '%#%' ), + 'format' => '', + 'prev_text' => __( '«', 'aag' ), + 'next_text' => __( '»', 'aag' ), + 'total' => $num_of_pages, + 'current' => $pagenum + ) ); + + if ( $page_links ) { + echo '
' . $page_links . '
'; + } + + echo '
'; + ?> +
" > + +

" class="button button-primary delete-cookies">

+ +
+ +
+ + + + prefix . 'logger_ginger'; + $ipuser = ginger_get_ip_address(); + $now = current_time( 'mysql' ); + $wpdb->insert( + $table_name, + array( + 'time' => $now, + 'ipaddress' => $ipuser, + 'url' => $url, + 'status' => $status + ), + array( + '%s', + '%s', + '%s', + '%s' + ) + ); +} + + +function ginger_get_ip_address() { + // check for shared internet/ISP IP + if (!empty($_SERVER['HTTP_CLIENT_IP']) && ginger_validate_ip($_SERVER['HTTP_CLIENT_IP'])) { + return $_SERVER['HTTP_CLIENT_IP']; + } + + // check for IPs passing through proxies + if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { + // check if multiple ips exist in var + if (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') !== false) { + $iplist = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); + foreach ($iplist as $ip) { + if (ginger_validate_ip($ip)) + return $ip; + } + } else { + if (ginger_validate_ip($_SERVER['HTTP_X_FORWARDED_FOR'])) + return $_SERVER['HTTP_X_FORWARDED_FOR']; + } + } + if (!empty($_SERVER['HTTP_X_FORWARDED']) && ginger_validate_ip($_SERVER['HTTP_X_FORWARDED'])) + return $_SERVER['HTTP_X_FORWARDED']; + if (!empty($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']) && ginger_validate_ip($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) + return $_SERVER['HTTP_X_CLUSTER_CLIENT_IP']; + if (!empty($_SERVER['HTTP_FORWARDED_FOR']) && ginger_validate_ip($_SERVER['HTTP_FORWARDED_FOR'])) + return $_SERVER['HTTP_FORWARDED_FOR']; + if (!empty($_SERVER['HTTP_FORWARDED']) && ginger_validate_ip($_SERVER['HTTP_FORWARDED'])) + return $_SERVER['HTTP_FORWARDED']; + + // return unreliable ip since all else failed + return $_SERVER['REMOTE_ADDR']; +} + +/** + * Ensures an ip address is both a valid IP and does not fall within + * a private network range. + */ +function ginger_validate_ip($ip) { + if (strtolower($ip) === 'unknown') + return false; + + // generate ipv4 network address + $ip = ip2long($ip); + + // if the ip is set and not equivalent to 255.255.255.255 + if ($ip !== false && $ip !== -1) { + // make sure to get unsigned long representation of ip + // due to discrepancies between 32 and 64 bit OSes and + // signed numbers (ints default to signed in PHP) + $ip = sprintf('%u', $ip); + // do private network range checking + if ($ip >= 0 && $ip <= 50331647) return false; + if ($ip >= 167772160 && $ip <= 184549375) return false; + if ($ip >= 2130706432 && $ip <= 2147483647) return false; + if ($ip >= 2851995648 && $ip <= 2852061183) return false; + if ($ip >= 2886729728 && $ip <= 2887778303) return false; + if ($ip >= 3221225984 && $ip <= 3221226239) return false; + if ($ip >= 3232235520 && $ip <= 3232301055) return false; + if ($ip >= 4294967040) return false; + } + return true; +} + + +// init to check date and save log +add_action("init", "ginger_activity_log"); +function ginger_activity_log(){ + if(!((isset($_GET["ginger_action"]) && $_GET["ginger_action"] == "time") || (isset($_GET["ginger_action"]) && $_GET["ginger_action"] == "log"))) { + return; + } + if($_GET["ginger_action"] == "time"){ + + header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1. + header("Pragma: no-cache"); // HTTP 1.0. + header("Expires: 0"); // Proxies. + echo time(); + exit; + } + if($_GET["ginger_action"] == "log"){ + if(!isset($_GET["url"]) || $_GET["url"] == "") exit; + if(!isset($_GET["time"]) || $_GET["time"] == "") exit; + if(!isset($_GET["status"]) || $_GET["status"] == "") exit; + + if(($_GET["time"] + 10) < time()) exit; + header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1. + header("Pragma: no-cache"); // HTTP 1.0. + header("Expires: 0"); // Proxies. + // echo time(); + if(function_exists("ginger_do_log")){ + ginger_do_log($_GET["url"], $_GET["status"]); + } + exit; + } + +} \ No newline at end of file diff --git a/addon/logger/index.php b/addon/logger/index.php new file mode 100755 index 0000000..ad7fcd3 --- /dev/null +++ b/addon/logger/index.php @@ -0,0 +1,33 @@ +prefix . 'logger_ginger'; + $charset_collate = $wpdb->get_charset_collate(); + $sql = "CREATE TABLE $table_name ( + id int(10) NOT NULL AUTO_INCREMENT, + time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL, + ipaddress varchar(45), + url text NOT NULL, + status varchar(1) DEFAULT 'Y' NOT NULL, + UNIQUE KEY id (id) + ) $charset_collate;"; + require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); + dbDelta( $sql ); + +} + +require_once('ginger.logger.php'); + diff --git a/addon/polylang/ginger.polylang.php b/addon/polylang/ginger.polylang.php new file mode 100755 index 0000000..303b9e5 --- /dev/null +++ b/addon/polylang/ginger.polylang.php @@ -0,0 +1,353 @@ +

Polylang - Ginger setup


'.__("Polylang not found!", "ginger").'

'; + return false; + } + + // $current_lang = $sitepress->get_current_language(); //save current language + $current_lang = pll_current_language(); + + $key = "ginger_polylang_options"; + if(isset($_POST["submit"]) && !wp_verify_nonce($_POST['ginger_options'], 'save_ginger_polylang_options')){ + return; + } + + if(isset($_POST["submit"])){ + + $params = $_POST; + unset($params["submit"]); + unset($params["ginger_options"]); + unset($params["_wp_http_referer"]); + + + // print_r($params); + update_option($key, $params); + + echo '

'.__( 'Updated!', 'ginger' ).'

'; + } + $options = get_option($key); + + // print_r($options); +?> +
+

polylang - Ginger setup

+
+ + "; + _e("polylang is disabled!", "ginger"); + echo ""; + + _e("Enable here:", "ginger"); + echo " "._("Plugins").""; + }else{ + ?> +
"> + + + + + + + + + + + model->get_languages_list() ; + +//print_r($languages); + $c=0; + foreach ($languages as $language) { + $langcode=$language->slug; + $langval["native_name"] = $language->name; + $langval["slug"] = $language->slug; + +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ +
+

+
- +
+ +

+

+
+
- +
+

+
+
- +
+ +

+
+
- +
+ +

+ +

+ +

+ + + "> +

+ +

+ +

+ +

+ + " > +   + + onclick="en_dis_able_text_banner_button('disable_cookie_button_status_','disable_cookie_button_text_','img_disable_cookie_button_status_');"> + + + " style="max-width: 20px; max-height: 20px; vertical-align: middle"> + + +

+
+
+

">

+
+ + + + +
+ +get_current_language(); //save current language +*/ + + $current_lang = pll_current_language(); + if(trim(strip_tags($options['ginger_Iframe_text'][$current_lang]))): + $ginger_iframe_text = $options['ginger_Iframe_text'][$current_lang]; + $ginger_iframe_text = str_replace('", $ginger_iframe_text ); + return $ginger_iframe_text; + endif; + + return $text; +} + + +add_filter("ginger_text_banner", "ginger_polylang_text_banner"); +function ginger_polylang_text_banner($text) +{ + $key = "ginger_polylang_options"; + $options = get_option($key); + if ($options == "") return $text; + if (!function_exists('icl_get_languages')) return $text; + +// global $sitepress; +// $current_lang = $sitepress->get_current_language(); //save current language + $current_lang = pll_current_language(); + + if (trim(strip_tags($options['ginger_banner_text'][$current_lang])) != ""): + $ginger_text = $options['ginger_banner_text'][$current_lang]; + $ginger_text = str_replace('", $ginger_text); + + //Recupero privacy policy se presente + if (strpos($ginger_text, '{{privacy_page}}') !== false): + $privacy_policy = $options['ginger_privacy_page'][$current_lang]; + if ($privacy_policy) { + + $privacy_policy = get_post($privacy_policy); + $privacy_policy = ' ' . addslashes($privacy_policy->post_title) . '<\/a>'; + $ginger_text = str_replace('{{privacy_page}}', $privacy_policy, $ginger_text); + } + endif; + return $ginger_text; + endif; + + return $text; +} + +add_filter("ginger_label_accept_cookie", "ginger_polylang_label_accept_cookie"); +function ginger_polylang_label_accept_cookie($text){ + $key = "ginger_polylang_options"; + $options = get_option($key); + if($options == "") return $text; + if (!function_exists('icl_get_languages')) return $text; + + // global $sitepress; + // $current_lang = $sitepress->get_current_language(); + $current_lang = pll_current_language(); + + if(trim($options['accept_cookie_button_text'][$current_lang])): + $label_accept_cookie = $options['accept_cookie_button_text'][$current_lang]; + return $label_accept_cookie; + endif; + + return $text; +} + +add_filter("ginger_label_disable_cookie", "ginger_polylang_label_disable_cookie"); +function ginger_polylang_label_disable_cookie($text){ + $key = "ginger_polylang_options"; + $options = get_option($key); + if($options == "") return $text; + if (!function_exists('icl_get_languages')) return $text; + + // global $sitepress; + // $current_lang = $sitepress->get_current_language(); //save current language + $current_lang = pll_current_language(); + + if(isset($options['disable_cookie_button_status'][$current_lang])): + if(trim($options['disable_cookie_button_text'][$current_lang])): + $label_disable_cookie = $options['disable_cookie_button_text'][$current_lang]; + return $label_disable_cookie; + endif; + endif; + + return $text; +} + + diff --git a/addon/polylang/index.php b/addon/polylang/index.php new file mode 100755 index 0000000..8a37e43 --- /dev/null +++ b/addon/polylang/index.php @@ -0,0 +1,3 @@ +get_current_language(); //save current language + }else{ + echo '

WPML - Ginger setup


'.__("WPML not found!", "ginger").'

'; + exit; + } + + $key = "ginger_wpml_options"; + if(isset($_POST["submit"]) && !wp_verify_nonce($_POST['ginger_options'], 'save_ginger_wpml_options')){ + return; + } + + if(isset($_POST["submit"])){ + + $params = $_POST; + unset($params["submit"]); + unset($params["ginger_options"]); + unset($params["_wp_http_referer"]); + + + // print_r($params); + update_option($key, $params); + + echo '

'.__( 'Updated!', 'ginger' ).'

'; + } + $options = get_option($key); + + // print_r($options); +?> +
+

WPML - Ginger setup

+
+ + "; + _e("WPML is disabled!", "ginger"); + echo ""; + + _e("Enable here:", "ginger"); + echo "
"._("Plugins").""; + }else{ + ?> +
"> + + + + + + + + + + + $langval ) { +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ +
+

+
- +
+ +

+

+
+
- +
+

+
+
- +
+ +

+
+
- +
+ +

+ +

+ +

+ + "> +

+ +

+ +

+ +

+ + " > +   + + onclick="en_dis_able_text_banner_button('disable_cookie_button_status_','disable_cookie_button_text_','img_disable_cookie_button_status_');"> + + + " style="max-width: 20px; max-height: 20px; vertical-align: middle"> + + +

+
+
+

">

+
+ + + + +
+ +get_current_language(); //save current language + else + return $text; + + if(trim(strip_tags($options['ginger_Iframe_text'][$current_lang]))): + $ginger_iframe_text = $options['ginger_Iframe_text'][$current_lang]; + $ginger_iframe_text = str_replace('", $ginger_iframe_text ); + return $ginger_iframe_text; + endif; + + return $text; +} + + +add_filter("ginger_text_banner", "ginger_wpml_text_banner"); +function ginger_wpml_text_banner($text) +{ + $key = "ginger_wpml_options"; + $options = get_option($key); + if ($options == "") return $text; + if (!function_exists('icl_get_languages')) return $text; + + global $sitepress; + if($sitepress) + $current_lang = $sitepress->get_current_language(); //save current language + else + return $text; + if (trim(strip_tags($options['ginger_banner_text'][$current_lang])) != ""): + $ginger_text = $options['ginger_banner_text'][$current_lang]; + $ginger_text = str_replace('", $ginger_text); + + //Recupero privacy policy se presente + if (strpos($ginger_text, '{{privacy_page}}') !== false): + $privacy_policy = $options['ginger_privacy_page'][$current_lang]; + if ($privacy_policy) { + + $privacy_policy = get_post($privacy_policy); + $privacy_policy = ' ' . addslashes($privacy_policy->post_title) . '<\/a>'; + $ginger_text = str_replace('{{privacy_page}}', $privacy_policy, $ginger_text); + } + endif; + return $ginger_text; + endif; + + return $text; +} + +add_filter("ginger_label_accept_cookie", "ginger_wpml_label_accept_cookie"); +function ginger_wpml_label_accept_cookie($text){ + $key = "ginger_wpml_options"; + $options = get_option($key); + if($options == "") return $text; + if (!function_exists('icl_get_languages')) return $text; + + global $sitepress; + if($sitepress) + $current_lang = $sitepress->get_current_language(); + else + return $text; + + if(trim($options['accept_cookie_button_text'][$current_lang])): + $label_accept_cookie = $options['accept_cookie_button_text'][$current_lang]; + return $label_accept_cookie; + endif; + + return $text; +} + +add_filter("ginger_label_disable_cookie", "ginger_wpml_label_disable_cookie"); +function ginger_wpml_label_disable_cookie($text){ + $key = "ginger_wpml_options"; + $options = get_option($key); + if($options == "") return $text; + if (!function_exists('icl_get_languages')) return $text; + + global $sitepress; + if($sitepress) + $current_lang = $sitepress->get_current_language(); //save current language + else + return $text; + if($options['disable_cookie_button_status'][$current_lang]): + if(trim($options['disable_cookie_button_text'][$current_lang])): + $label_disable_cookie = $options['disable_cookie_button_text'][$current_lang]; + return $label_disable_cookie; + endif; + endif; + + return $text; +} + + diff --git a/addon/wpml/index.php b/addon/wpml/index.php new file mode 100755 index 0000000..58bdcf0 --- /dev/null +++ b/addon/wpml/index.php @@ -0,0 +1,3 @@ +post_status == 'publish') { + $control_page_id = $control_page->ID; + $privacy_page_id = $control_page_id; + echo '

'.__( 'The page with the specified title already exists and is your current privacy policy page!', 'ginger' ).'

'; + + }else{ + + $id_privacy_new_page = save_privacy_page($title_post, $content_post); + $privacy_page_id = $id_privacy_new_page; + } + + }else{ + $id_privacy_new_page = save_privacy_page($title_post,$content_post); + $privacy_page_id = $id_privacy_new_page; + } + + }else{ + $privacy_page_id = intval($_POST["ginger_privacy_page"]); + } + if(is_int($privacy_page_id)): + update_option($key, $privacy_page_id); + endif; + update_option($key.'_disable_ginger', $_POST["ginger_privacy_click_scroll"]); + +}else{ + update_option($key, $params);} + echo '

'.__( 'Updated!', 'ginger' ).'

'; +} + +$options = get_option($key); +if ($key=='ginger_policy'): + + $options = get_option($key); + // recupero la option per il disable click out e scroll in privacy policy page + $options2 = get_option($key.'_disable_ginger'); + +endif; +?> + +
+

Ginger - EU Cookie Law

+
+
+
" > + + +

">

+
+
+ + + diff --git a/admin/ginger.pointer.php b/admin/ginger.pointer.php new file mode 100755 index 0000000..58707d2 --- /dev/null +++ b/admin/ginger.pointer.php @@ -0,0 +1,84 @@ +' . __("Ginger Cookie Law Settings", "ginger") . ''; // Title should be

for proper formatting. + $pointer_content .= '

' . __("One more step: you need to enable banner in ", "ginger") . 'Ginger Settings

'; + + ?> + + add_help_tab(array( + 'id' => 'ginger_help_tab1', + 'title' => __('Configuration', "ginger"), + 'content' => '

' . __('Cache system: with cache radiobutton enabled html output will be the same for every users, and javascript will be unlocked on document ready. Without cache parsing is disabled for user that have accepted cookies. ', "ginger") . '

' . + '

' . __('Stress mode: show a small banner for users that have not accepted cookies.', "ginger") . '

' + + , + ) + ); + $screen->add_help_tab(array( + 'id' => 'ginger_help_tab2', + 'title' => __('Banner Setup', "ginger"), + 'content' => '

' . __('Banner text: text to show in Ginger banner. {{privacy_page}} shortcode will be replaced with title and link of privacy policy page, defined in Provacy Policy Tab.', "ginger") . '

' . + '

' . __('Iframe text: text to show in substitution of blocked iframe. If you have a Youtube Embed, this will be replaced by this text until Cookie are not accepted by users.', "ginger") . '

' . + '

' . __('Custom CSS: override css rules to customize your banner. As example, to customize font family you can try this: .ginger_banner{font-family: Arial, Verdana;}', "ginger") . '

' + ) + ); + $screen->add_help_tab(array( + 'id' => 'ginger_help_tab3', + 'title' => __('Privacy Policy', "ginger"), + 'content' => '

' . __('Select here your Privacy Policy page to be linked in substitution of {{privacy_page}} shortcode inside text banner.', "ginger") . '

' . + '

' . __('You can create here an empty Privacy Policy Page, but remember to add your text!', "ginger") . '

', + ) + ); + + + // Help sidebars are optional + $screen->set_help_sidebar( + '

' . __('For more information:') . '

' . + '

' . __("visit", "ginger") . ' ' . __('Ginger Website', "ginger") . '

' + ); + } +} + + + +//Salvataggio e creazione pagina cookie policy +function save_privacy_page($title,$content){ + $my_post = array( + 'post_title' => $title, + 'post_content' => $content, + 'post_status' => 'publish', + 'post_author' => '', + 'post_category' => '', + 'post_type' => 'page' + ); + + + $id = wp_insert_post( $my_post ); + return($id); +} + diff --git a/admin/img/logo-head.png b/admin/img/logo-head.png new file mode 100755 index 0000000000000000000000000000000000000000..2b099959143a8179c001a383b7953acc74caf4d5 GIT binary patch literal 40887 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 (http://www.briandetering.net/) +(function ($) { +'use strict'; + +var identity = function (x) { + return x; +}; + +var isArray = function (value) { + return $.isArray(value); +}; + +var isObject = function (value) { + return !isArray(value) && (value instanceof Object); +}; + +var isFunction = function (value) { + return value instanceof Function; +}; + +var indexOf = function (object, value) { + return $.inArray(value, object); +}; + +var inArray = function (array, value) { + return indexOf(array, value) !== -1; +}; + +var foreach = function (collection, callback) { + for(var i in collection) { + if(collection.hasOwnProperty(i)) { + callback(collection[i], i, collection); + } + } +}; + +var last = function (array) { + return array[array.length - 1]; +}; + +var mapToArray = function (collection, callback) { + var mapped = []; + foreach(collection, function (value, key, coll) { + mapped.push(callback(value, key, coll)); + }); + return mapped; +}; + +var mapToObject = function (collection, callback, keyCallback) { + var mapped = {}; + foreach(collection, function (value, key, coll) { + key = keyCallback ? keyCallback(key, value) : key; + mapped[key] = callback(value, key, coll); + }); + return mapped; +}; + +var map = function (collection, callback, keyCallback) { + return isArray(collection) ? + mapToArray(collection, callback) : + mapToObject(collection, callback, keyCallback); +}; + +var filter = function (collection, callback) { + var filtered; + + if(isArray(collection)) { + filtered = []; + foreach(collection, function (val, key, coll) { + if(callback(val, key, coll)) { + filtered.push(val); + } + }); + } + else { + filtered = {}; + foreach(collection, function (val, key, coll) { + if(callback(val, key, coll)) { + filtered[key] = val; + } + }); + } + + return filtered; +}; + +var call = function (collection, functionName, args) { + return map(collection, function (object, name) { + return object[functionName].apply(object, args || []); + }); +}; + +//execute callback immediately and at most one time on the minimumInterval, +//ignore block attempts +var throttle = function (minimumInterval, callback) { + var timeout = null; + return function () { + var that = this, args = arguments; + if(timeout === null) { + timeout = setTimeout(function () { + timeout = null; + }, minimumInterval); + callback.apply(that, args); + } + }; +}; + + +var mixinPubSub = function (object) { + object = object || {}; + var topics = {}; + + object.publish = function (topic, data) { + foreach(topics[topic], function (callback) { + callback(data); + }); + }; + + object.subscribe = function (topic, callback) { + topics[topic] = topics[topic] || []; + topics[topic].push(callback); + }; + + object.unsubscribe = function (callback) { + foreach(topics, function (subscribers) { + var index = indexOf(subscribers, callback); + if(index !== -1) { + subscribers.splice(index, 1); + } + }); + }; + + return object; +}; +// jquery.input version 0.0.0 +// https://github.com/DubFriend/jquery.input +// (MIT) 09-04-2014 +// Brian Detering (http://www.briandetering.net/) +(function ($) { +'use strict'; + +var createBaseInput = function (fig, my) { + var self = mixinPubSub(), + $self = fig.$; + + self.getType = function () { + throw 'implement me (return type. "text", "radio", etc.)'; + }; + + self.$ = function (selector) { + return selector ? $self.find(selector) : $self; + }; + + self.disable = function () { + self.$().prop('disabled', true); + self.publish('isEnabled', false); + }; + + self.enable = function () { + self.$().prop('disabled', false); + self.publish('isEnabled', true); + }; + + my.equalTo = function (a, b) { + return a === b; + }; + + my.publishChange = (function () { + var oldValue; + return function (e, domElement) { + var newValue = self.get(); + if(!my.equalTo(newValue, oldValue)) { + self.publish('change', { e: e, domElement: domElement }); + } + oldValue = newValue; + }; + }()); + + return self; +}; + + +var createInput = function (fig, my) { + var self = createBaseInput(fig, my); + + self.get = function () { + return self.$().val(); + }; + + self.set = function (newValue) { + self.$().val(newValue); + }; + + self.clear = function () { + self.set(''); + }; + + my.buildSetter = function (callback) { + return function (newValue) { + callback.call(self, newValue); + }; + }; + + return self; +}; + +var inputEqualToArray = function (a, b) { + a = isArray(a) ? a : [a]; + b = isArray(b) ? b : [b]; + + var isEqual = true; + if(a.length !== b.length) { + isEqual = false; + } + else { + foreach(a, function (value) { + if(!inArray(b, value)) { + isEqual = false; + } + }); + } + + return isEqual; +}; + +var createInputButton = function (fig) { + var my = {}, + self = createInput(fig, my); + + self.getType = function () { + return 'button'; + }; + + self.$().on('change', function (e) { + my.publishChange(e, this); + }); + + return self; +}; + +var createInputCheckbox = function (fig) { + var my = {}, + self = createInput(fig, my); + + self.getType = function () { + return 'checkbox'; + }; + + self.get = function () { + var values = []; + self.$().filter(':checked').each(function () { + values.push($(this).val()); + }); + return values; + }; + + self.set = function (newValues) { + newValues = isArray(newValues) ? newValues : [newValues]; + + self.$().each(function () { + $(this).prop('checked', false); + }); + + foreach(newValues, function (value) { + self.$().filter('[value="' + value + '"]') + .prop('checked', true); + }); + }; + + my.equalTo = inputEqualToArray; + + self.$().change(function (e) { + my.publishChange(e, this); + }); + + return self; +}; + +var createInputEmail = function (fig) { + var my = {}, + self = createInputText(fig, my); + + self.getType = function () { + return 'email'; + }; + + return self; +}; + +var createInputFile = function (fig) { + var my = {}, + self = createBaseInput(fig, my); + + self.getType = function () { + return 'file'; + }; + + self.get = function () { + return last(self.$().val().split('\\')); + }; + + self.clear = function () { + // http://stackoverflow.com/questions/1043957/clearing-input-type-file-using-jquery + this.$().each(function () { + $(this).wrap('
').closest('form').get(0).reset(); + $(this).unwrap(); + }); + }; + + self.$().change(function (e) { + my.publishChange(e, this); + // self.publish('change', self); + }); + + return self; +}; + +var createInputHidden = function (fig) { + var my = {}, + self = createInput(fig, my); + + self.getType = function () { + return 'hidden'; + }; + + self.$().change(function (e) { + my.publishChange(e, this); + }); + + return self; +}; +var createInputMultipleFile = function (fig) { + var my = {}, + self = createBaseInput(fig, my); + + self.getType = function () { + return 'file[multiple]'; + }; + + self.get = function () { + // http://stackoverflow.com/questions/14035530/how-to-get-value-of-html-5-multiple-file-upload-variable-using-jquery + var fileListObject = self.$().get(0).files || [], + names = [], i; + + for(i = 0; i < (fileListObject.length || 0); i += 1) { + names.push(fileListObject[i].name); + } + + return names; + }; + + self.clear = function () { + // http://stackoverflow.com/questions/1043957/clearing-input-type-file-using-jquery + this.$().each(function () { + $(this).wrap('').closest('form').get(0).reset(); + $(this).unwrap(); + }); + }; + + self.$().change(function (e) { + my.publishChange(e, this); + }); + + return self; +}; + +var createInputMultipleSelect = function (fig) { + var my = {}, + self = createInput(fig, my); + + self.getType = function () { + return 'select[multiple]'; + }; + + self.get = function () { + return self.$().val() || []; + }; + + self.set = function (newValues) { + self.$().val( + newValues === '' ? [] : isArray(newValues) ? newValues : [newValues] + ); + }; + + my.equalTo = inputEqualToArray; + + self.$().change(function (e) { + my.publishChange(e, this); + }); + + return self; +}; + +var createInputPassword = function (fig) { + var my = {}, + self = createInputText(fig, my); + + self.getType = function () { + return 'password'; + }; + + return self; +}; + +var createInputRadio = function (fig) { + var my = {}, + self = createInput(fig, my); + + self.getType = function () { + return 'radio'; + }; + + self.get = function () { + return self.$().filter(':checked').val() || null; + }; + + self.set = function (newValue) { + if(!newValue) { + self.$().each(function () { + $(this).prop('checked', false); + }); + } + else { + self.$().filter('[value="' + newValue + '"]').prop('checked', true); + } + }; + + self.$().change(function (e) { + my.publishChange(e, this); + }); + + return self; +}; + +var createInputRange = function (fig) { + var my = {}, + self = createInput(fig, my); + + self.getType = function () { + return 'range'; + }; + + self.$().change(function (e) { + my.publishChange(e, this); + }); + + return self; +}; + +var createInputSelect = function (fig) { + var my = {}, + self = createInput(fig, my); + + self.getType = function () { + return 'select'; + }; + + self.$().change(function (e) { + my.publishChange(e, this); + }); + + return self; +}; + +var createInputText = function (fig) { + var my = {}, + self = createInput(fig, my); + + self.getType = function () { + return 'text'; + }; + + self.$().on('change keyup keydown', function (e) { + my.publishChange(e, this); + }); + + return self; +}; + +var createInputTextarea = function (fig) { + var my = {}, + self = createInput(fig, my); + + self.getType = function () { + return 'textarea'; + }; + + self.$().on('change keyup keydown', function (e) { + my.publishChange(e, this); + }); + + return self; +}; + +var createInputURL = function (fig) { + var my = {}, + self = createInputText(fig, my); + + self.getType = function () { + return 'url'; + }; + + return self; +}; + +var buildFormInputs = function (fig) { + var inputs = {}, + $self = fig.$; + + var constructor = fig.constructorOverride || { + button: createInputButton, + text: createInputText, + url: createInputURL, + email: createInputEmail, + password: createInputPassword, + range: createInputRange, + textarea: createInputTextarea, + select: createInputSelect, + 'select[multiple]': createInputMultipleSelect, + radio: createInputRadio, + checkbox: createInputCheckbox, + file: createInputFile, + 'file[multiple]': createInputMultipleFile, + hidden: createInputHidden + }; + + var addInputsBasic = function (type, selector) { + var $input = isObject(selector) ? selector : $self.find(selector); + + $input.each(function () { + var name = $(this).attr('name'); + inputs[name] = constructor[type]({ + $: $(this) + }); + }); + }; + + var addInputsGroup = function (type, selector) { + var names = [], + $input = isObject(selector) ? selector : $self.find(selector); + + if(isObject(selector)) { + inputs[$input.attr('name')] = constructor[type]({ + $: $input + }); + } + else { + // group by name attribute + $input.each(function () { + if(indexOf(names, $(this).attr('name')) === -1) { + names.push($(this).attr('name')); + } + }); + + foreach(names, function (name) { + inputs[name] = constructor[type]({ + $: $self.find('input[name="' + name + '"]') + }); + }); + } + }; + + + if($self.is('input, select, textarea')) { + if($self.is('input[type="button"], button, input[type="submit"]')) { + addInputsBasic('button', $self); + } + else if($self.is('textarea')) { + addInputsBasic('textarea', $self); + } + else if( + $self.is('input[type="text"]') || + $self.is('input') && !$self.attr('type') + ) { + addInputsBasic('text', $self); + } + else if($self.is('input[type="password"]')) { + addInputsBasic('password', $self); + } + else if($self.is('input[type="email"]')) { + addInputsBasic('email', $self); + } + else if($self.is('input[type="url"]')) { + addInputsBasic('url', $self); + } + else if($self.is('input[type="range"]')) { + addInputsBasic('range', $self); + } + else if($self.is('select')) { + if($self.is('[multiple]')) { + addInputsBasic('select[multiple]', $self); + } + else { + addInputsBasic('select', $self); + } + } + else if($self.is('input[type="file"]')) { + if($self.is('[multiple]')) { + addInputsBasic('file[multiple]', $self); + } + else { + addInputsBasic('file', $self); + } + } + else if($self.is('input[type="hidden"]')) { + addInputsBasic('hidden', $self); + } + else if($self.is('input[type="radio"]')) { + addInputsGroup('radio', $self); + } + else if($self.is('input[type="checkbox"]')) { + addInputsGroup('checkbox', $self); + } + else { + throw 'invalid input type'; + } + } + else { + addInputsBasic('button', 'input[type="button"], button, input[type="submit"]'); + addInputsBasic('text', 'input[type="text"]'); + addInputsBasic('password', 'input[type="password"]'); + addInputsBasic('email', 'input[type="email"]'); + addInputsBasic('url', 'input[type="url"]'); + addInputsBasic('range', 'input[type="range"]'); + addInputsBasic('textarea', 'textarea'); + addInputsBasic('select', 'select:not([multiple])'); + addInputsBasic('select[multiple]', 'select[multiple]'); + addInputsBasic('file', 'input[type="file"]:not([multiple])'); + addInputsBasic('file[multiple]', 'input[type="file"][multiple]'); + addInputsBasic('hidden', 'input[type="hidden"]'); + addInputsGroup('radio', 'input[type="radio"]'); + addInputsGroup('checkbox', 'input[type="checkbox"]'); + } + + return inputs; +}; + +$.fn.inputVal = function (newValue) { + var $self = $(this); + + var inputs = buildFormInputs({ $: $self }); + + if($self.is('input, textarea, select')) { + if(typeof newValue === 'undefined') { + return inputs[$self.attr('name')].get(); + } + else { + inputs[$self.attr('name')].set(newValue); + return $self; + } + } + else { + if(typeof newValue === 'undefined') { + return call(inputs, 'get'); + } + else { + foreach(newValue, function (value, inputName) { + inputs[inputName].set(value); + }); + return $self; + } + } +}; + +$.fn.inputOnChange = function (callback) { + var $self = $(this); + var inputs = buildFormInputs({ $: $self }); + foreach(inputs, function (input) { + input.subscribe('change', function (data) { + callback.call(data.domElement, data.e); + }); + }); + return $self; +}; + +$.fn.inputDisable = function () { + var $self = $(this); + call(buildFormInputs({ $: $self }), 'disable'); + return $self; +}; + +$.fn.inputEnable = function () { + var $self = $(this); + call(buildFormInputs({ $: $self }), 'enable'); + return $self; +}; + +$.fn.inputClear = function () { + var $self = $(this); + call(buildFormInputs({ $: $self }), 'clear'); + return $self; +}; + +}(jQuery)); + +$.fn.repeater = function(fig) { + + fig = fig || {}; + + $(this).each(function () { + + var $self = $(this); + + var show = fig.show || function () { + $(this).show(); + }; + + var hide = fig.hide || function (removeElement) { + removeElement(); + }; + + var $list = $self.find('[data-repeater-list]'); + + var $itemTemplate = $list.find('[data-repeater-item]') + .first().clone().hide(); + + var $firstDeleteButton = $(this).find('[data-repeater-item]') + .first() + .find('[data-repeater-delete]'); + + if(fig.isFirstItemUndeletable && $firstDeleteButton) { + $firstDeleteButton.remove(); + } + + var groupName = $list.data('repeater-list'); + + var setIndexes = function () { + $list.find('[data-repeater-item]').each(function (index) { + $(this).find('[name]').each(function () { + // match non empty brackets (ex: "[foo]") + var matches = $(this).attr('name').match(/\[[^\]]+\]/g); + + var name = matches ? + // strip "[" and "]" characters + last(matches).replace(/\[|\]/g, '') : + $(this).attr('name'); + + var newName = groupName + '[' + index + '][' + name + ']' + + ($(this).is(':checkbox') ? '[]' : ''); + + $(this).attr('name', newName); + }); + }); + + $list.find('input[name][checked]') + .removeAttr('checked') + .prop('checked', true); + }; + + setIndexes(); + + var setItemsValues = function ($item, values) { + var index; + index = $item.find('[name]').first() + .attr('name').match(/\[([0-9]*)\]/)[1]; + + $item.inputVal(map(values, identity, function (name) { + var nameIfNotCheckbox = groupName + '[' + index + '][' + name + ']'; + return $item.find('[name="' + nameIfNotCheckbox + '"]').length ? + nameIfNotCheckbox : nameIfNotCheckbox + '[]'; + })); + }; + + var appendItem = (function () { + var setupTemplate = function ($item) { + var defaultValues = fig.defaultValues; + + $item.find('[name]').each(function () { + $(this).inputClear(); + }); + + if(defaultValues) { + setItemsValues($item, defaultValues); + } + }; + + return function ($item) { + $list.append($item); + setIndexes(); + setupTemplate($item); + }; + }()); + + $self.find('[data-repeater-create]').click(function () { + var $item = $itemTemplate.clone(); + appendItem($item); + show.call($item.get(0)); + }); + + $list.on('click', '[data-repeater-delete]', function () { + var self = $(this).closest('[data-repeater-item]').get(0); + hide.call(self, function () { + $(self).remove(); + setIndexes(); + }); + }); + + }); + + return this; +}; +}(jQuery)); \ No newline at end of file diff --git a/admin/js/jquery.repeater-master/jquery.repeater.min.js b/admin/js/jquery.repeater-master/jquery.repeater.min.js new file mode 100755 index 0000000..2b1e294 --- /dev/null +++ b/admin/js/jquery.repeater-master/jquery.repeater.min.js @@ -0,0 +1,5 @@ +// jquery.repeater version 1.0.0 +// https://github.com/DubFriend/jquery.repeater +// (MIT) 11-04-2015 +// Brian Detering (http://www.briandetering.net/) +!function(a){"use strict";var b=function(a){return a},c=function(b){return a.isArray(b)},d=function(a){return!c(a)&&a instanceof Object},e=function(b,c){return a.inArray(c,b)},f=function(a,b){return-1!==e(a,b)},g=function(a,b){for(var c in a)a.hasOwnProperty(c)&&b(a[c],c,a)},h=function(a){return a[a.length-1]},i=function(a,b){var c=[];return g(a,function(a,d,e){c.push(b(a,d,e))}),c},j=function(a,b,c){var d={};return g(a,function(a,e,f){e=c?c(e,a):e,d[e]=b(a,e,f)}),d},k=function(a,b,d){return c(a)?i(a,b):j(a,b,d)},l=function(a,b,c){return k(a,function(a){return a[b].apply(a,c||[])})},m=function(a){a=a||{};var b={};return a.publish=function(a,c){g(b[a],function(a){a(c)})},a.subscribe=function(a,c){b[a]=b[a]||[],b[a].push(c)},a.unsubscribe=function(a){g(b,function(b){var c=e(b,a);-1!==c&&b.splice(c,1)})},a};!function(a){var b=function(a,b){var c=m(),d=a.$;return c.getType=function(){throw'implement me (return type. "text", "radio", etc.)'},c.$=function(a){return a?d.find(a):d},c.disable=function(){c.$().prop("disabled",!0),c.publish("isEnabled",!1)},c.enable=function(){c.$().prop("disabled",!1),c.publish("isEnabled",!0)},b.equalTo=function(a,b){return a===b},b.publishChange=function(){var a;return function(d,e){var f=c.get();b.equalTo(f,a)||c.publish("change",{e:d,domElement:e}),a=f}}(),c},i=function(a,c){var d=b(a,c);return d.get=function(){return d.$().val()},d.set=function(a){d.$().val(a)},d.clear=function(){d.set("")},c.buildSetter=function(a){return function(b){a.call(d,b)}},d},j=function(a,b){a=c(a)?a:[a],b=c(b)?b:[b];var d=!0;return a.length!==b.length?d=!1:g(a,function(a){f(b,a)||(d=!1)}),d},k=function(a){var b={},c=i(a,b);return c.getType=function(){return"button"},c.$().on("change",function(a){b.publishChange(a,this)}),c},n=function(b){var d={},e=i(b,d);return e.getType=function(){return"checkbox"},e.get=function(){var b=[];return e.$().filter(":checked").each(function(){b.push(a(this).val())}),b},e.set=function(b){b=c(b)?b:[b],e.$().each(function(){a(this).prop("checked",!1)}),g(b,function(a){e.$().filter('[value="'+a+'"]').prop("checked",!0)})},d.equalTo=j,e.$().change(function(a){d.publishChange(a,this)}),e},o=function(a){var b={},c=x(a,b);return c.getType=function(){return"email"},c},p=function(c){var d={},e=b(c,d);return e.getType=function(){return"file"},e.get=function(){return h(e.$().val().split("\\"))},e.clear=function(){this.$().each(function(){a(this).wrap("").closest("form").get(0).reset(),a(this).unwrap()})},e.$().change(function(a){d.publishChange(a,this)}),e},q=function(a){var b={},c=i(a,b);return c.getType=function(){return"hidden"},c.$().change(function(a){b.publishChange(a,this)}),c},r=function(c){var d={},e=b(c,d);return e.getType=function(){return"file[multiple]"},e.get=function(){var a,b=e.$().get(0).files||[],c=[];for(a=0;a<(b.length||0);a+=1)c.push(b[a].name);return c},e.clear=function(){this.$().each(function(){a(this).wrap("").closest("form").get(0).reset(),a(this).unwrap()})},e.$().change(function(a){d.publishChange(a,this)}),e},s=function(a){var b={},d=i(a,b);return d.getType=function(){return"select[multiple]"},d.get=function(){return d.$().val()||[]},d.set=function(a){d.$().val(""===a?[]:c(a)?a:[a])},b.equalTo=j,d.$().change(function(a){b.publishChange(a,this)}),d},t=function(a){var b={},c=x(a,b);return c.getType=function(){return"password"},c},u=function(b){var c={},d=i(b,c);return d.getType=function(){return"radio"},d.get=function(){return d.$().filter(":checked").val()||null},d.set=function(b){b?d.$().filter('[value="'+b+'"]').prop("checked",!0):d.$().each(function(){a(this).prop("checked",!1)})},d.$().change(function(a){c.publishChange(a,this)}),d},v=function(a){var b={},c=i(a,b);return c.getType=function(){return"range"},c.$().change(function(a){b.publishChange(a,this)}),c},w=function(a){var b={},c=i(a,b);return c.getType=function(){return"select"},c.$().change(function(a){b.publishChange(a,this)}),c},x=function(a){var b={},c=i(a,b);return c.getType=function(){return"text"},c.$().on("change keyup keydown",function(a){b.publishChange(a,this)}),c},y=function(a){var b={},c=i(a,b);return c.getType=function(){return"textarea"},c.$().on("change keyup keydown",function(a){b.publishChange(a,this)}),c},z=function(a){var b={},c=x(a,b);return c.getType=function(){return"url"},c},A=function(b){var c={},f=b.$,h=b.constructorOverride||{button:k,text:x,url:z,email:o,password:t,range:v,textarea:y,select:w,"select[multiple]":s,radio:u,checkbox:n,file:p,"file[multiple]":r,hidden:q},i=function(b,e){var g=d(e)?e:f.find(e);g.each(function(){var d=a(this).attr("name");c[d]=h[b]({$:a(this)})})},j=function(b,i){var j=[],k=d(i)?i:f.find(i);d(i)?c[k.attr("name")]=h[b]({$:k}):(k.each(function(){-1===e(j,a(this).attr("name"))&&j.push(a(this).attr("name"))}),g(j,function(a){c[a]=h[b]({$:f.find('input[name="'+a+'"]')})}))};if(f.is("input, select, textarea"))if(f.is('input[type="button"], button, input[type="submit"]'))i("button",f);else if(f.is("textarea"))i("textarea",f);else if(f.is('input[type="text"]')||f.is("input")&&!f.attr("type"))i("text",f);else if(f.is('input[type="password"]'))i("password",f);else if(f.is('input[type="email"]'))i("email",f);else if(f.is('input[type="url"]'))i("url",f);else if(f.is('input[type="range"]'))i("range",f);else if(f.is("select"))f.is("[multiple]")?i("select[multiple]",f):i("select",f);else if(f.is('input[type="file"]'))f.is("[multiple]")?i("file[multiple]",f):i("file",f);else if(f.is('input[type="hidden"]'))i("hidden",f);else if(f.is('input[type="radio"]'))j("radio",f);else{if(!f.is('input[type="checkbox"]'))throw"invalid input type";j("checkbox",f)}else i("button",'input[type="button"], button, input[type="submit"]'),i("text",'input[type="text"]'),i("password",'input[type="password"]'),i("email",'input[type="email"]'),i("url",'input[type="url"]'),i("range",'input[type="range"]'),i("textarea","textarea"),i("select","select:not([multiple])"),i("select[multiple]","select[multiple]"),i("file",'input[type="file"]:not([multiple])'),i("file[multiple]",'input[type="file"][multiple]'),i("hidden",'input[type="hidden"]'),j("radio",'input[type="radio"]'),j("checkbox",'input[type="checkbox"]');return c};a.fn.inputVal=function(b){var c=a(this),d=A({$:c});return c.is("input, textarea, select")?"undefined"==typeof b?d[c.attr("name")].get():(d[c.attr("name")].set(b),c):"undefined"==typeof b?l(d,"get"):(g(b,function(a,b){d[b].set(a)}),c)},a.fn.inputOnChange=function(b){var c=a(this),d=A({$:c});return g(d,function(a){a.subscribe("change",function(a){b.call(a.domElement,a.e)})}),c},a.fn.inputDisable=function(){var b=a(this);return l(A({$:b}),"disable"),b},a.fn.inputEnable=function(){var b=a(this);return l(A({$:b}),"enable"),b},a.fn.inputClear=function(){var b=a(this);return l(A({$:b}),"clear"),b}}(jQuery),a.fn.repeater=function(c){return c=c||{},a(this).each(function(){var d=a(this),e=c.show||function(){a(this).show()},f=c.hide||function(a){a()},g=d.find("[data-repeater-list]"),i=g.find("[data-repeater-item]").first().clone().hide(),j=a(this).find("[data-repeater-item]").first().find("[data-repeater-delete]");c.isFirstItemUndeletable&&j&&j.remove();var l=g.data("repeater-list"),m=function(){g.find("[data-repeater-item]").each(function(b){a(this).find("[name]").each(function(){var c=a(this).attr("name").match(/\[[^\]]+\]/g),d=c?h(c).replace(/\[|\]/g,""):a(this).attr("name"),e=l+"["+b+"]["+d+"]"+(a(this).is(":checkbox")?"[]":"");a(this).attr("name",e)})}),g.find("input[name][checked]").removeAttr("checked").prop("checked",!0)};m();var n=function(a,c){var d;d=a.find("[name]").first().attr("name").match(/\[([0-9]*)\]/)[1],a.inputVal(k(c,b,function(b){var c=l+"["+d+"]["+b+"]";return a.find('[name="'+c+'"]').length?c:c+"[]"}))},o=function(){var b=function(b){var d=c.defaultValues;b.find("[name]").each(function(){a(this).inputClear()}),d&&n(b,d)};return function(a){g.append(a),m(),b(a)}}();d.find("[data-repeater-create]").click(function(){var a=i.clone();o(a),e.call(a.get(0))}),g.on("click","[data-repeater-delete]",function(){var b=a(this).closest("[data-repeater-item]").get(0);f.call(b,function(){a(b).remove(),m()})})}),this}}(jQuery); \ No newline at end of file diff --git a/admin/js/jquery_lined_textarea/jquery-linedtextarea.css b/admin/js/jquery_lined_textarea/jquery-linedtextarea.css new file mode 100755 index 0000000..9fec32a --- /dev/null +++ b/admin/js/jquery_lined_textarea/jquery-linedtextarea.css @@ -0,0 +1,68 @@ +/** + * jQuery Lined Textarea Plugin + * http://alan.blog-city.com/jquerylinedtextarea.htm + * + * Copyright (c) 2010 Alan Williamson + * + * Released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + * Usage: + * Displays a line number count column to the left of the textarea + * + * Class up your textarea with a given class, or target it directly + * with JQuery Selectors + * + * $(".lined").linedtextarea({ + * selectedLine: 10, + * selectedClass: 'lineselect' + * }); + * + */ + +.linedwrap { + border: 1px solid #c0c0c0; + padding: 3px; +} + +.linedtextarea { + padding: 0px; + margin: 0px; +} + +.linedtextarea textarea, .linedwrap .codelines .lineno { + font-size: 10pt; + font-family: monospace; + line-height: normal !important; +} + +.linedtextarea textarea { + padding-right:0.3em; + padding-top:0.3em; + border: 0; +} + +.linedwrap .lines { + margin-top: 0px; + width: 50px; + float: left; + overflow: hidden; + border-right: 1px solid #c0c0c0; + margin-right: 10px; +} + +.linedwrap .codelines { + padding-top: 5px; +} + +.linedwrap .codelines .lineno { + color:#AAAAAA; + padding-right: 0.5em; + padding-top: 0.0em; + text-align: right; + white-space: nowrap; +} + +.linedwrap .codelines .lineselect { + color: red; +} \ No newline at end of file diff --git a/admin/js/jquery_lined_textarea/jquery-linedtextarea.js b/admin/js/jquery_lined_textarea/jquery-linedtextarea.js new file mode 100755 index 0000000..bd29afe --- /dev/null +++ b/admin/js/jquery_lined_textarea/jquery-linedtextarea.js @@ -0,0 +1,126 @@ +/** + * jQuery Lined Textarea Plugin + * http://alan.blog-city.com/jquerylinedtextarea.htm + * + * Copyright (c) 2010 Alan Williamson + * + * Version: + * $Id: jquery-linedtextarea.js 464 2010-01-08 10:36:33Z alan $ + * + * Released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + * Usage: + * Displays a line number count column to the left of the textarea + * + * Class up your textarea with a given class, or target it directly + * with JQuery Selectors + * + * $(".lined").linedtextarea({ + * selectedLine: 10, + * selectedClass: 'lineselect' + * }); + * + * History: + * - 2010.01.08: Fixed a Google Chrome layout problem + * - 2010.01.07: Refactored code for speed/readability; Fixed horizontal sizing + * - 2010.01.06: Initial Release + * + */ +(function($) { + + $.fn.linedtextarea = function(options) { + + // Get the Options + var opts = $.extend({}, $.fn.linedtextarea.defaults, options); + + + /* + * Helper function to make sure the line numbers are always + * kept up to the current system + */ + var fillOutLines = function(codeLines, h, lineNo){ + while ( (codeLines.height() - h ) <= 0 ){ + if ( lineNo == opts.selectedLine ) + codeLines.append("
" + lineNo + "
"); + else + codeLines.append("
" + lineNo + "
"); + + lineNo++; + } + return lineNo; + }; + + + /* + * Iterate through each of the elements are to be applied to + */ + return this.each(function() { + var lineNo = 1; + var textarea = $(this); + + /* Turn off the wrapping of as we don't want to screw up the line numbers */ + textarea.attr("wrap", "off"); + textarea.css({resize:'none'}); + var originalTextAreaWidth = textarea.outerWidth(); + + /* Wrap the text area in the elements we need */ + textarea.wrap("
"); + var linedTextAreaDiv = textarea.parent().wrap("
"); + var linedWrapDiv = linedTextAreaDiv.parent(); + + linedWrapDiv.prepend("
"); + + var linesDiv = linedWrapDiv.find(".lines"); + linesDiv.height( textarea.height() + 6 ); + + + /* Draw the number bar; filling it out where necessary */ + linesDiv.append( "
" ); + var codeLinesDiv = linesDiv.find(".codelines"); + lineNo = fillOutLines( codeLinesDiv, linesDiv.height(), 1 ); + + /* Move the textarea to the selected line */ + if ( opts.selectedLine != -1 && !isNaN(opts.selectedLine) ){ + var fontSize = parseInt( textarea.height() / (lineNo-2) ); + var position = parseInt( fontSize * opts.selectedLine ) - (textarea.height()/2); + textarea[0].scrollTop = position; + } + + + /* Set the width */ + var sidebarWidth = linesDiv.outerWidth(); + var paddingHorizontal = parseInt( linedWrapDiv.css("border-left-width") ) + parseInt( linedWrapDiv.css("border-right-width") ) + parseInt( linedWrapDiv.css("padding-left") ) + parseInt( linedWrapDiv.css("padding-right") ); + var linedWrapDivNewWidth = originalTextAreaWidth - paddingHorizontal; + var textareaNewWidth = originalTextAreaWidth - sidebarWidth - paddingHorizontal - 20; + + textarea.width( textareaNewWidth ); + linedWrapDiv.width( linedWrapDivNewWidth ); + + + + /* React to the scroll event */ + textarea.scroll( function(tn){ + var domTextArea = $(this)[0]; + var scrollTop = domTextArea.scrollTop; + var clientHeight = domTextArea.clientHeight; + codeLinesDiv.css( {'margin-top': (-1*scrollTop) + "px"} ); + lineNo = fillOutLines( codeLinesDiv, scrollTop + clientHeight, lineNo ); + }); + + + /* Should the textarea get resized outside of our control */ + textarea.resize( function(tn){ + var domTextArea = $(this)[0]; + linesDiv.height( domTextArea.clientHeight + 6 ); + }); + + }); + }; + + // default options + $.fn.linedtextarea.defaults = { + selectedLine: -1, + selectedClass: 'lineselect' + }; +})(jQuery); \ No newline at end of file diff --git a/admin/partial/banner.php b/admin/partial/banner.php new file mode 100755 index 0000000..b2e8763 --- /dev/null +++ b/admin/partial/banner.php @@ -0,0 +1,225 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+
+ +

+ +

+
+
+
+ +

+ +

+
+
+
+ +

+

+
+
+
+ +

+
+
+
+ +

+ +

+ +

+ + "> +

+ +

+ +

+ +

+ + " > +   + + onclick="en_dis_able_text_banner_button('disable_cookie_button_status','disable_cookie_button_text','img_disable_cookie_button_status');"> + + + " style="max-width: 20px; max-height: 20px; vertical-align: middle"> + + +

+
+
+
+ +

+ +

+
+
+

+
+
+ +

+
+
+
+ +

+
+
+
+ +

+
+
+
+ +

+
+
+
+ +

+
+
+

+
+
+ +

+ +

+
+
+ + \ No newline at end of file diff --git a/admin/partial/bar.php b/admin/partial/bar.php new file mode 100755 index 0000000..ee73623 --- /dev/null +++ b/admin/partial/bar.php @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+

+

+
+

+
+

+

+

+

+
diff --git a/admin/partial/dialog.php b/admin/partial/dialog.php new file mode 100755 index 0000000..6ecf4a2 --- /dev/null +++ b/admin/partial/dialog.php @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+
+

+ +

+
+
+

+
+
+

+ +

+
+
+
+

+ +

+
+
+
+ +

+

+
+
+ + diff --git a/admin/partial/general.php b/admin/partial/general.php new file mode 100755 index 0000000..ffb1632 --- /dev/null +++ b/admin/partial/general.php @@ -0,0 +1,326 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

:

+
+
+ +

+ +

+

+ +

+
+
+
+ +

+ +

+

+ +

+

+ + () + +

+
+
+
+ +

+ + + () + +

+

+ + + () + +

+

+ + () + +

+
+ +
+
+ + + +

+ +

+

+ +

+
+
+
+ + + +

+ +

+

+ +

+
+
+
+ + + +

+ +

+

+ +

+
+
+
+ + + +

+ +

+

+ +

+

+ + () + +

+
+
+
+ + + +

+ + +

+ +
+
+
+ + + + +

+

+ +

+

+ +
+
+
+
+ + + + + + 'asc', + 'sort_column' => 'post_title', + 'hierarchical' => 1, + 'exclude' => '', + 'include' => '', + 'meta_key' => '', + 'meta_value' => '', + 'authors' => '', + 'child_of' => 0, + 'parent' => -1, + 'exclude_tree' => '', + 'number' => '', + 'offset' => 0, + 'post_type' => 'page', + 'post_status' => 'publish' + ); + $pages = get_pages($args); + ?> +
+ + +
+ + + + + + + 'asc', + 'sort_column' => 'post_title', + 'hierarchical' => 1, + 'exclude' => '', + 'include' => '', + 'meta_key' => '', + 'meta_value' => '', + 'authors' => '', + 'child_of' => 0, + 'parent' => -1, + 'exclude_tree' => '', + 'number' => '', + 'offset' => 0, + 'post_type' => 'page', + 'post_status' => 'publish' + ); + $pages = get_pages($args); + ?> +
+ + +
+ + + + + +
+ +

+ + () + +

+
+
+ + + + diff --git a/admin/partial/policy.php b/admin/partial/policy.php new file mode 100755 index 0000000..35dea51 --- /dev/null +++ b/admin/partial/policy.php @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+ +
+
+ + + + 'asc', + 'sort_column' => 'post_title', + 'hierarchical' => 1, + 'exclude' => '', + 'include' => '', + 'meta_key' => '', + 'meta_value' => '', + 'authors' => '', + 'child_of' => 0, + 'parent' => -1, + 'exclude_tree' => '', + 'number' => '', + 'offset' => 0, + 'post_type' => 'page', + 'post_status' => 'publish', + 'suppress_filters' => false + ); + $pages = get_pages($args); + + + + + ?> +

+ + +

+
+
+ +
+
+ +
+
+
+

+ +

+

+ +

+
+
+ diff --git a/front/css/cookies-enabler-dialog.css b/front/css/cookies-enabler-dialog.css new file mode 100755 index 0000000..7020224 --- /dev/null +++ b/front/css/cookies-enabler-dialog.css @@ -0,0 +1,360 @@ +.ginger-banner *{ + box-sizing: border-box; + margin: 0; + padding: 0; +} + +.ginger-banner p{ + margin-bottom: 1em; +} + +.ginger-banner{ + position: fixed; + left: 0; + right: 0; + background-color: white; + padding: 1em; + color: #232323; + font-size: 1em; + z-index: 99999998 !important; +} + +.ginger-banner.top{ + top: 0; + border-bottom: 1px solid #000; +} +.ginger-banner.bottom{ + bottom: 0; + border-top: 1px solid #000; +} +.ginger-banner.dialog{ + width: 300px; + border: 1px solid #000; + box-shadow:1px 1px 2px #000; + -moz-box-shadow:1px 1px 2px #000; + -webkit-box-shadow:1px 1px 2px #000; + right: 10px; + left: initial; +} +.ginger-banner.dialog.top{ + top: 10px; +} +.ginger-banner.dialog.bottom{ + bottom: 10px; +} +.ginger-banner div.ginger-button-wrapper{ + width: 100%; + float: left; +} +.ginger-banner .ginger-button-wrapper div.ginger-button{ + margin-left: auto; + margin-right: auto; + width: 40%; +} +.ginger-accept, .ginger-dismiss, .ginger-disable{ + width: 160px; + float: left; + text-align: center; + margin-top: 8px !important; + margin-bottom: 6px !important; + display: block; + padding: 8px 16px !important; + background-color: #f1d600; + color: #111; + margin-right: 12px !important; + text-decoration: none !important; + font-size:12pt !important; + font-weight: 600; + letter-spacing: -0.05em; + transition:background 0.2s ease-in-out 0s, color 0.2s ease-in-out 0s, box-shadow 0.2s ease-in-out 0s; + -moz-transition:background 0.2s ease-in-out 0s, color 0.2s ease-in-out 0s, -moz-box-shadow 0.2s ease-in-out 0s; + -webkit-transition:background 0.2s ease-in-out 0s, color 0.2s ease-in-out 0s, -webkit-box-shadow 0.2s ease-in-out 0s; +} + +.ginger-disable{ + background-color: #aaa; +} + +.ginger-accept:hover, +.ginger-dismiss:hover, +.ginger-disable:hover{ + margin-top: 8px !important; + margin-bottom: 6px !important; + display: block; + padding: 8px 16px !important; + background-color: #f1d600 !important; + color: #111 !important; + margin-right: 12px !important; + text-decoration: none !important; + font-size:12pt !important; + font-weight: 600; + letter-spacing: -0.05em; + + box-shadow:1px 1px 2px #000; + -moz-box-shadow:1px 1px 2px #000; + -webkit-box-shadow:1px 1px 2px #000; + + transition:background 0.2s ease-in-out 0s, color 0.2s ease-in-out 0s, box-shadow 0.2s ease-in-out 0s; + -moz-transition:background 0.2s ease-in-out 0s, color 0.2s ease-in-out 0s, -moz-box-shadow 0.2s ease-in-out 0s; + -webkit-transition:background 0.2s ease-in-out 0s, color 0.2s ease-in-out 0s, -webkit-box-shadow 0.2s ease-in-out 0s; +} + +.ginger-dismiss{ + position: absolute; + font-size: .8em; + right: 1em; + top: 1em; + background-color: #ccc; + color: #333; +} + +.ginger-iframe-placeholder{ + padding: 1em; + background-color: #eee; + margin: 1em 0; + text-align: center; +} +.ginger-iframe-placeholder a.ginger-accept{ + float: none; + margin-left: auto; + margin-right: auto !important; +} + +.ginger-iframe-placeholder p{ + margin: 0; +} + +.ginger-banner iframe{ + width: 100%; +} + +.ginger_banner-wrapper { + z-index: 99999998; + position: relative +} + +.ginger_container .ginger_btn { + cursor: pointer; + text-align: center; + font-size: 0.6em; + transition: font-size 200ms; + line-height: 1em +} + +.ginger_container .ginger_message { + font-size: 0.6em; + transition: font-size 200ms; + margin: 0; + padding: 0; + line-height: 1.5em +} + +.ginger_container .ginger_logo:hover, .ginger_container .ginger_logo:active { + opacity: 1 +} + +@media screen and (min-width: 500px) { + .ginger_container .ginger_btn { + font-size: 0.8em + } + + .ginger_container .ginger_message { + font-size: 0.8em + } +} + +@media screen and (min-width: 768px) { + .ginger_container .ginger_btn { + font-size: 1em + } + + .ginger_container .ginger_message { + font-size: 1em; + line-height: 1em + } +} + +@media screen and (min-width: 992px) { + .ginger_container .ginger_message { + font-size: 1em + } +} + +@media print { + .ginger_banner-wrapper, .ginger_container { + display: none + } +} + +.ginger_container { + position: fixed; + overflow: hidden; + padding: 10px 15px 50px +} + +.ginger_container.bottom { + position: fixed; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; + padding: 10px 15px 50px +} +.ginger_container.top { + position: fixed; + left: 0; + right: 0; + top:0; + overflow: hidden; + padding: 10px 15px 50px +} + +.ginger_container .ginger_btn { + padding: 8px 16px; + background-color: #f1d600; + text-align: center; + float: left; + width: 100%; + margin-top: 10px; +} + +.ginger_container .ginger_btn.ginger-disable{ + +} +@media screen and (min-width: 500px) { + .ginger_container { + width: 300px; + } + .ginger_container.bottom { + left: initial; + right: 20px; + bottom: 20px; + width: 300px; + padding-bottom: 77px + } + .ginger_container.top { + left: initial; + right: 20px; + top: 20px; + width: 300px; + } + + .ginger_container .ginger_logo { + display: block; + position: absolute; + bottom: 8px; + left: calc(50% - 50px) + } +} + +@media screen and (min-width: 768px) { + .ginger_container { + padding-bottom: 87px + } + + .ginger_container .ginger_message { + font-size: 1em + } +} + +.ginger_container { + background: #fff; + color: #999; + font-size: 17px; + box-sizing: border-box; + border: 1px solid #ccc +} + +.ginger_container.dark{ + background: #222; + color: #fff; +} +.ginger_container.light{ + background: white; + color: #000000; +} + +.ginger_container ::-moz-selection { + background: #ff5e99; + color: #fff; + text-shadow: none +} + +.ginger_container .ginger_btn, .ginger_container .ginger_btn:visited { + color: #000; + background-color: #f1d600; + transition: background 200ms ease-in-out, color 200ms ease-in-out, box-shadow 200ms ease-in-out; + -webkit-transition: background 200ms ease-in-out, color 200ms ease-in-out, box-shadow 200ms ease-in-out; + border-radius: 5px; + -webkit-border-radius: 5px +} + +.ginger_container .ginger_btn:hover, .ginger_container .ginger_btn:active { + background-color: #d7bf00; + color: #000 +} + +.ginger_container a, .ginger_container a:visited { + text-decoration: none; + color: #31a8f0; + transition: 200ms color +} + +.ginger_container a:hover, .ginger_container a:active { + color: #555 +} + +@-webkit-keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(20px); + transform: translateX(20px) + } + + 100% { + opacity: 1; + -webkit-transform: translateX(0); + transform: translateX(0) + } +} + +@keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translateX(20px); + -ms-transform: translateX(20px); + transform: translateX(20px) + } + + 100% { + opacity: 1; + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0) + } +} + +.ginger_container { + -webkit-animation-duration: 0.6s; + animation-duration: 0.6s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; + -webkit-animation-duration: 0.8s; + -moz-animation-duration: 0.8s; + -o-animation-duration: 0.8s; + animation-duration: 0.8s; + -webkit-animation-fill-mode: both; + -moz-animation-fill-mode: both; + -o-animation-fill-mode: both; + animation-fill-mode: both; + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight +} + +@media screen and (min-width: 500px) { + .ginger_container { + border-radius: 5px; + box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.2) + } +} + diff --git a/front/css/cookies-enabler.css b/front/css/cookies-enabler.css new file mode 100755 index 0000000..81ce0a7 --- /dev/null +++ b/front/css/cookies-enabler.css @@ -0,0 +1,366 @@ +.ginger-banner *{ + box-sizing: border-box; + margin: 0; + padding: 0; +} + +.ginger-banner p{ + margin-bottom: 1em; +} + +.ginger-banner{ + position: fixed; + left: 0; + right: 0; + background-color: white; + padding: 1em; + color: #232323; + font-size: 1em; + z-index: 99999998 !important; +} + +.ginger-banner.top{ + top: 0; + border-bottom: 1px solid #000; +} + .ginger-banner.bottom{ + bottom: 0; + border-top: 1px solid #000; + } + .ginger-banner.dialog{ + width: 300px; + border: 1px solid #000; + box-shadow:1px 1px 2px #000; + -moz-box-shadow:1px 1px 2px #000; + -webkit-box-shadow:1px 1px 2px #000; + right: 10px; + left: initial; + } + .ginger-banner.dialog.top{ + top: 10px; + } + .ginger-banner.dialog.bottom{ + bottom: 10px; + } + .ginger-banner div.ginger-button-wrapper{ + width: 100%; + float: left; + } + .ginger-banner .ginger-button-wrapper div.ginger-button{ + margin-left: auto; + margin-right: auto; + width: 40%; + } +.ginger-accept, .ginger-dismiss, .ginger-disable{ + width: 160px; + float: left; + text-align: center; + margin-top: 8px !important; + margin-bottom: 6px !important; + display: block; + padding: 8px 16px !important; + background-color: #f1d600; + color: #111; + margin-right: 12px !important; + text-decoration: none !important; + font-size:12pt !important; + font-weight: 600; + letter-spacing: -0.05em; + transition:background 0.2s ease-in-out 0s, color 0.2s ease-in-out 0s, box-shadow 0.2s ease-in-out 0s; + -moz-transition:background 0.2s ease-in-out 0s, color 0.2s ease-in-out 0s, -moz-box-shadow 0.2s ease-in-out 0s; + -webkit-transition:background 0.2s ease-in-out 0s, color 0.2s ease-in-out 0s, -webkit-box-shadow 0.2s ease-in-out 0s; +} + +.ginger-disable{ + background-color: #aaa; +} + +.ginger-accept:hover, +.ginger-dismiss:hover, +.ginger-disable:hover{ + margin-top: 8px !important; + margin-bottom: 6px !important; + display: block; + padding: 8px 16px !important; + background-color: #f1d600 !important; + color: #111 !important; + margin-right: 12px !important; + text-decoration: none !important; + font-size:12pt !important; + font-weight: 600; + letter-spacing: -0.05em; + + box-shadow:1px 1px 2px #000; + -moz-box-shadow:1px 1px 2px #000; + -webkit-box-shadow:1px 1px 2px #000; + + transition:background 0.2s ease-in-out 0s, color 0.2s ease-in-out 0s, box-shadow 0.2s ease-in-out 0s; + -moz-transition:background 0.2s ease-in-out 0s, color 0.2s ease-in-out 0s, -moz-box-shadow 0.2s ease-in-out 0s; + -webkit-transition:background 0.2s ease-in-out 0s, color 0.2s ease-in-out 0s, -webkit-box-shadow 0.2s ease-in-out 0s; +} + +.ginger-dismiss{ + position: absolute; + font-size: .8em; + right: 1em; + top: 1em; + background-color: #ccc; + color: #333; +} + +.ginger-iframe-placeholder{ + padding: 1em; + background-color: #eee; + margin: 1em 0; + text-align: center; +} + .ginger-iframe-placeholder a.ginger-accept{ + float: none; + margin-left: auto; + margin-right: auto !important; + } + +.ginger-iframe-placeholder p{ + margin: 0; +} + +.ginger-banner iframe{ + width: 100%; +} + + + +/* Dark theme */ + +.ginger-banner.dark{ + background: #000000; + color: white; +} + .ginger-banner.dark a{ + color: #d7d7d7; + text-decoration: underline; + } + .ginger-banner.light{ + background: white; + color: black; + } + .ginger-banner.light a{ + color: #999999; + text-decoration: underline; + } + +.ginger-banner.dialog{ + border: 1px solid white; + box-shadow:1px 1px 2px white; + -moz-box-shadow:1px 1px 2px white; + -webkit-box-shadow:1px 1px 2px white; +} + + + + .ginger_banner-wrapper { + z-index: 99999998; + position: relative + } + + .ginger_container .ginger_btn { + cursor: pointer; + text-align: center; + font-size: 0.6em; + transition: font-size 200ms; + line-height: 1em + } + + .ginger_container .ginger_message { + font-size: 0.6em; + transition: font-size 200ms; + margin: 0; + padding: 0; + line-height: 1.5em + } + + .ginger_container .ginger_logo:hover, .ginger_container .ginger_logo:active { + opacity: 1 + } + + @media screen and (min-width: 500px) { + .ginger_container .ginger_btn { + font-size: 0.8em + } + + .ginger_container .ginger_message { + font-size: 0.8em + } + } + + @media screen and (min-width: 768px) { + .ginger_container .ginger_btn { + font-size: 1em + } + + .ginger_container .ginger_message { + font-size: 1em; + line-height: 1em + } + } + + @media screen and (min-width: 992px) { + .ginger_container .ginger_message { + font-size: 1em + } + } + + @media print { + .ginger_banner-wrapper, .ginger_container { + display: none + } + } + + .ginger_container.bottom { + position: fixed; + left: 0; + right: 0; + bottom: 0; + overflow: hidden; + padding: 10px + } + .ginger_container.top { + position: fixed; + left: 0; + right: 0; + top: 0; + overflow: hidden; + padding: 10px + } + + .ginger_container .ginger_btn { + padding: 8px 10px; + background-color: #f1d600; + cursor: pointer; + transition: font-size 200ms; + text-align: center; + font-size: 0.6em; + display: block; + width: 33%; + margin-left: 10px; + float: right; + max-width: 120px + } + + .ginger_container .ginger_message { + transition: font-size 200ms; + font-size: 0.6em; + display: block + } + + @media screen and (min-width: 500px) { + .ginger_container .ginger_btn { + font-size: 0.8em + } + + .ginger_container .ginger_message { + margin-top: 0.5em; + font-size: 0.8em + } + } + + @media screen and (min-width: 768px) { + .ginger_container { + padding: 15px 30px 15px + } + + .ginger_container .ginger_btn { + font-size: 1em; + padding: 8px 15px + } + + .ginger_container .ginger_message { + font-size: 1em + } + } + + @media screen and (min-width: 992px) { + .ginger_container .ginger_message { + font-size: 1em + } + } + + .ginger_container { + background: #222; + color: #fff; + font-size: 17px; + box-sizing: border-box + } + .ginger_container.dark{ + background: #222; + color: #fff; + } + .ginger_container.light{ + background: white; + color: #000000; + } + + .ginger_container ::-moz-selection { + background: #ff5e99; + color: #fff; + text-shadow: none + } + + .ginger_container .ginger_btn, .ginger_container .ginger_btn:visited { + color: #000; + background-color: #f1d600; + transition: background 200ms ease-in-out, color 200ms ease-in-out, box-shadow 200ms ease-in-out; + -webkit-transition: background 200ms ease-in-out, color 200ms ease-in-out, box-shadow 200ms ease-in-out; + border-radius: 5px; + -webkit-border-radius: 5px + } + + .ginger_container .ginger_btn:hover, .ginger_container .ginger_btn:active { + background-color: #fff; + color: #000 + } + + .ginger_container a, .ginger_container a:visited { + text-decoration: none; + color: #31a8f0; + transition: 200ms color + } + + .ginger_container a:hover, .ginger_container a:active { + color: #b2f7ff + } + + @-webkit-keyframes slideUp { + 0% { + -webkit-transform: translateY(66px); + transform: translateY(66px) + } + + 100% { + -webkit-transform: translateY(0); + transform: translateY(0) + } + } + + @keyframes slideUp { + 0% { + -webkit-transform: translateY(66px); + -ms-transform: translateY(66px); + transform: translateY(66px) + } + + 100% { + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0) + } + } + + .ginger_container, .ginger_message, .ginger_btn { + animation-duration: 0.8s; + -webkit-animation-duration: 0.8s; + -moz-animation-duration: 0.8s; + -o-animation-duration: 0.8s; + -webkit-animation-name: slideUp; + animation-name: slideUp + } \ No newline at end of file diff --git a/front/gingerfront.core.php b/front/gingerfront.core.php new file mode 100755 index 0000000..63fe457 --- /dev/null +++ b/front/gingerfront.core.php @@ -0,0 +1,250 @@ +", $ginger_iframe_text ); + else: + $ginger_iframe_text = 'This website uses cookies.'; + endif; + + $ginger_iframe_text = ''.$ginger_iframe_text.''; + $ginger_iframe_text = apply_filters("ginger_text_iframe", $ginger_iframe_text); + return $ginger_iframe_text; +} + +function ginger_get_text_banner($option_ginger_bar){ + if($option_ginger_bar['ginger_banner_text']): + $ginger_text = $option_ginger_bar['ginger_banner_text']; + $ginger_text = str_replace('", $ginger_text ); + //Recupero privacy policy se presente + if(strpos($ginger_text, '{{privacy_page}}') !== false): + $privacy_policy = get_option('ginger_policy', true); + $privacy_policy_page = get_post($privacy_policy); + if($privacy_policy_page){ + $privacy_policy_text = ' ' . addslashes($privacy_policy_page->post_title) . '<\/a>'; + $ginger_text = str_replace('{{privacy_page}}', $privacy_policy_text, $ginger_text); + } + endif; + + else: + $ginger_text = 'This website uses cookies.'; + endif; + + $ginger_text = ''.$ginger_text.''; + $ginger_text = apply_filters("ginger_text_banner", $ginger_text); + return $ginger_text; +} + +function ginger_get_label_accept_cookie($option_ginger_bar){ + + //Recupero Label + if($option_ginger_bar['accept_cookie_button_text']): + $label_accept_cookie = $option_ginger_bar['accept_cookie_button_text']; + else: + $label_accept_cookie = __('Enable Cookies', 'ginger'); + endif; + + $label_accept_cookie = apply_filters("ginger_label_accept_cookie", $label_accept_cookie); + + return $label_accept_cookie; +} + +function ginger_get_label_disable_cookie($option_ginger_bar){ + +//Recupero Label +if(isset($option_ginger_bar['disable_cookie_button_text']) && $option_ginger_bar['disable_cookie_button_text']): + $label_disable_cookie = $option_ginger_bar['disable_cookie_button_text']; +else: + $label_disable_cookie = __('Disable Cookies', 'ginger'); +endif; + + $label_disable_cookie = apply_filters("ginger_label_disable_cookie", $label_disable_cookie); + + return $label_disable_cookie; +} + + +//Ginger Start +function ginger_run(){ + if(is_feed()) return; + $option_ginger_general = get_option('ginger_general'); + if(isset($option_ginger_general['ginger_logged_users']) && $option_ginger_general['ginger_logged_users']=='1' && is_user_logged_in()) return; + if((isset($option_ginger_general['pagine_escluse'])) && (!empty($option_ginger_general['pagine_escluse']))): + + $pagine=array(); + + + + foreach ($option_ginger_general['pagine_escluse'] as $array_pagine): + + + $pagine[] = $array_pagine['select-input']; + // $pagine=array_push($pagine, $array_pagine['select-input']); + endforeach; + $id_current=get_the_id(); + if (in_array($id_current, $pagine)): + return; + endif; + + endif; + + if(!(isset($option_ginger_general['enable_ginger']) && $option_ginger_general['enable_ginger'] == 1)) return; + if(isset($_COOKIE['ginger-cookie']) && $_COOKIE['ginger-cookie'] == 'Y'): + if(isset($option_ginger_general['ginger_cache']) && $option_ginger_general['ginger_cache'] == 'no') return; + endif; + + + if(isset($option_ginger_general['ginger_opt']) && $option_ginger_general['ginger_opt'] == 'in'): + + ob_start(); + add_action('shutdown', '__shutdown', 0); + add_filter('final_output', 'ginger_parse_dom'); + endif; +} +add_action('wp', 'ginger_run'); + + + +function __shutdown(){ + $final = ''; + + // We'll need to get the number of ob levels we're in, so that we can iterate over each, collecting + // that buffer's output into the final output. + $levels = count(ob_get_level()); + + for ($i = 0; $i < $levels; $i++){ + $final .= ob_get_clean(); + } + + // Apply any filters to the final output + echo apply_filters('final_output', $final); +} + + + + +function ginger_parse_dom($output){ + + $ginger_script_tags = array( + 'platform.twitter.com/widgets.js', + 'apis.google.com/js/plusone.js', + 'apis.google.com/js/platform.js', + 'connect.facebook.net', + 'platform.linkedin.com', + 'assets.pinterest.com', + 'www.youtube.com/iframe_api', + 'www.google-analytics.com/analytics.js', + 'google-analytics.com/ga.js', + 'new google.maps.', + '_getTracker', + 'disqus.com', + ); + $ginger_script_tags = apply_filters('ginger_script_tags', $ginger_script_tags); + $ginger_script_async_tags = array( + 'addthis.com', + 'sharethis.com' + ); + $ginger_script_async_tags = apply_filters('ginger_script_async_tags', $ginger_script_async_tags); + $ginger_iframe_tags = array( + 'youtube.com', + 'platform.twitter.com', + 'www.facebook.com/plugins/like.php', + 'www.facebook.com/plugins/likebox.php', + 'apis.google.com', + 'www.google.com/maps/embed/', + 'player.vimeo.com', + 'disqus.com' + ); + $ginger_iframe_tags = apply_filters('ginger_add_iframe', $ginger_iframe_tags); + + + if(strpos($output, ' 200 ): + return $output; + endif; + libxml_use_internal_errors(true); + $doc = new DOMDocument(); + $doc->encoding = 'utf-8'; + $doc->loadHTML(mb_convert_encoding($output, 'HTML-ENTITIES', 'UTF-8')); + // get all the script tags + $script_tags = $doc->getElementsByTagName('script'); + $async_array = array(); + $domElemsToRemove = array(); + foreach($script_tags as $script): + $src_script = $script->getAttribute('src'); + if($src_script): + if(strpos_arr($src_script, $ginger_script_tags) !== false ): + $script->setAttribute("class", "ginger-script"); + $script->setAttribute("type", "text/plain"); + continue; + endif; + if(strpos_arr($src_script, $ginger_script_async_tags) !== false ): + //return print_r($script->nodeValue); + $async_array[] = $src_script; + $domElemsToRemove[] = $script; + continue; + endif; + endif; + if($script->nodeValue): + $key = strpos_arr($script->nodeValue, $ginger_script_tags); + if($key !== false ): + if($ginger_script_tags[$key] == 'www.google-analytics.com/analytics.js' || $ginger_script_tags[$key] == 'google-analytics.com/ga.js') + if(strpos($script->nodeValue, 'anonymizeIp') !== false ): + continue; + endif; + $script->setAttribute("class", "ginger-script"); + $script->setAttribute("type", "text/plain"); + if($ginger_script_tags[$key] == 'disqus.com/embed.js' || $ginger_script_tags[$key] == 'disqus.com'): + $script->setAttribute("class", "ginger-script"); + $script->setAttribute("type", "text/plain"); + endif; + endif; + endif; + endforeach; + foreach( $domElemsToRemove as $domElement ){ + $domElement->parentNode->removeChild($domElement); + } + // get all the iframe tags + $iframe_tags = $doc->getElementsByTagName('iframe'); + foreach($iframe_tags as $iframe): + $src_iframe = $iframe->getAttribute('src'); + if($src_iframe): + if(strpos_arr($src_iframe, $ginger_iframe_tags) !== false ): + $iframe->removeAttribute('src'); + $iframe->setAttribute("data-ce-src", $src_iframe); + if($iframe->hasAttribute('class')): + $addclass = $iframe->getAttribute('class'); + else: + $addclass = ''; + endif; + $iframe->setAttribute("class", "ginger-iframe " . $addclass); + endif; + endif; + endforeach; + if(!empty($async_array)): + $text = json_encode($async_array); + $text = 'var async_ginger_script = ' . $text . ';'; + $head = $doc->getElementsByTagName('head')->item(0); + $element = $doc->createElement('script', $text); + $head->appendChild($element); + endif; + + // get the HTML string back + $output = $doc->saveHTML(); + libxml_use_internal_errors(false); + return $output; +} + +function strpos_arr($haystack, $needle) { + if(!is_array($needle)) $needle = array($needle); + foreach($needle as $key => $what) { + if(($pos = strpos($haystack, $what))!==false) return $key; + } + return false; +} + diff --git a/front/gingerfront.utils.php b/front/gingerfront.utils.php new file mode 100755 index 0000000..2590685 --- /dev/null +++ b/front/gingerfront.utils.php @@ -0,0 +1,219 @@ + + + + + + + + + +-1}var a,i,r,o={scriptClass:"ce-script",iframeClass:"ce-iframe",acceptClass:"ce-accept",disableClass:"ce-disable",dismissClass:"ce-dismiss",bannerClass:"ce-banner",bannerHTML:null!==document.getElementById("ce-banner-html")?document.getElementById("ce-banner-html").innerHTML:'

This website uses cookies. Enable Cookies

',eventScroll:!1,scrollOffset:200,clickOutside:!1,cookieName:"ce-cookie",cookieDuration:"365",forceBannerClass:"ginger-banner bottom dialog dark force",forceEnable:!1,forceEnableText:'',iframesPlaceholder:!0,iframesPlaceholderHTML:null!==document.getElementById("ce-iframePlaceholder-html")?document.getElementById("ce-iframePlaceholder-html").innerHTML:'

To view this content you need toEnable Cookies

',iframesPlaceholderClass:"ce-iframe-placeholder",onEnable:"",onDismiss:"",onDisable:"",forceReload:!1},c=function(){Math.abs(window.pageYOffset-r)>a.scrollOffset&&"N"!=g.get()&&u()},l=function(){i={accept:document.getElementsByClassName(a.acceptClass),disable:document.getElementsByClassName(a.disableClass),banner:document.getElementsByClassName(a.bannerClass),bannerForce:document.getElementsByClassName(a.forceBannerClass),dismiss:document.getElementsByClassName(a.dismissClass)};var e,n=i.accept,s=n.length,o=i.disable,l=o.length,d=i.dismiss,p=d.length;for(a.eventScroll&&window.addEventListener("load",function(){r=window.pageYOffset,window.addEventListener("scroll",c)}),a.clickOutside&&document.addEventListener("click",function(e){var n=e.target;return t(n,a.iframesPlaceholderClass)||t(n,a.disableClass)||t(n,a.bannerClass)||t(n,a.dismissClass)||t(n,a.disableClass)?!1:void("N"!=g.get()&&u())}),e=0;s>e;e++)n[e].addEventListener("click",function(e){e.preventDefault(),u(e)});for(e=0;l>e;e++)o[e].addEventListener("click",function(e){e.preventDefault(),f(e)});for(e=0;p>e;e++)d[e].addEventListener("click",function(e){e.preventDefault(),m.dismiss()})},d=function(n){if(a=e({},o,n),"Y"==g.get())"function"==typeof a.onEnable&&a.onEnable(),y.get_async(),b.get(),p.get();else if("N"==g.get()){var t=document.getElementById("disqus_thread");null!=t&&(t.style.display="none"),0!=a.forceEnable&&m.forceAccept(),"function"==typeof a.onDisable&&a.onDisable(),p.hide(),l()}else{var t=document.getElementById("disqus_thread");null!=t&&(t.style.display="none"),m.create(),p.hide(),l()}},u=n(function(e){if("undefined"!=typeof e&&"click"===e.type&&e.preventDefault(),"Y"!=g.get()){y.get_async(),g.set(),b.get(),p.get(),p.removePlaceholders(),m.dismiss();var n=document.getElementById("disqus_thread");null!=n&&(n.style.display="block"),window.removeEventListener("scroll",c),"function"==typeof a.onEnable&&a.onEnable(),1==a.forceReload&&location.reload()}},250,!1),f=function(e){"undefined"!=typeof e&&"click"===e.type&&e.preventDefault(),"N"!=g.get()&&(g.set("N"),m.dismiss(),window.removeEventListener("scroll",c),"function"==typeof a.onDisable&&a.onDisable())},m=function(){function e(){var e='
'+a.bannerHTML+"
";document.body.insertAdjacentHTML("beforeend",e)}function n(){var e='
'+a.forceEnableText+"
";document.body.insertAdjacentHTML("beforeend",e)}function t(){i.bannerForce[0]&&(i.bannerForce[0].style.display="none"),i.banner[0]&&(i.banner[0].style.display="none"),"function"==typeof a.onDismiss&&a.onDismiss()}return{create:e,dismiss:t,forceAccept:n}}(),g=function(){function e(e){var n,t,s="undefined"!=typeof e?e:"Y";a.cookieDuration?(n=new Date,n.setTime(n.getTime()+24*a.cookieDuration*60*60*1e3),t="; expires="+n.toGMTString()):t="",document.cookie=a.cookieName+"="+s+t+"; path=/";var i="undefined"!=typeof ginger_logger?ginger_logger:"N";"Y"==i&&gingerAjaxLogTime(s)}function n(){var e,n,t,s=document.cookie.split(";"),i=s.length;for(e=0;i>e;e++)if(n=s[e].substr(0,s[e].indexOf("=")),t=s[e].substr(s[e].indexOf("=")+1),n=n.replace(/^\s+|\s+$/g,""),n==a.cookieName)return unescape(t)}return{set:e,get:n}}(),p=function(){function e(e){var n=document.createElement("div");n.className=a.iframesPlaceholderClass,n.innerHTML=a.iframesPlaceholderHTML,e.parentNode.insertBefore(n,e)}function n(){var e,n=document.getElementsByClassName(a.iframesPlaceholderClass),t=n.length;for(e=t-1;e>=0;e--)n[e].remove()}function t(){var n,t,s=document.getElementsByClassName(a.iframeClass),i=s.length;for(t=0;i>t;t++)n=s[t],n.style.display="none",a.iframesPlaceholder&&e(n)}function s(){var e,n,t,s=document.getElementsByClassName(a.iframeClass),i=s.length;for(t=0;i>t;t++)n=s[t],e=n.attributes["data-ce-src"].value,n.src=e,n.style.display="block"}return{hide:t,get:s,removePlaceholders:n}}(),b=function(){function e(){var e,n,t,s,i=document.getElementsByClassName(a.scriptClass),r=i.length,o=document.createDocumentFragment();for(e=0;r>e;e++)if(i[e].hasAttribute("data-ce-src"))"undefined"==typeof postscribe&&postscribe(i[e].parentNode,'');else{for(t=document.createElement("script"),t.type="text/javascript",n=0;ndn{z1-tNTUbYndftBbobUJd{eI8A zS9m~W55+rygTTw6fcyxIMiS{lGmJEAjHhCjh>WA!j|f#lfOD$)Of;Es8sUtlH;KHZ zO8>;oA{QrTaY}bMapoqfJRu@)Hp7|C8mdGA`noL?XfcGR2Ugeh{+B|aAOiCx55uS= z<1Bg=_wer-W>fJVg!cg}yl(JlOR&8#^Y_WGijHesxH5xQ)ppzMejwcSLf7EV&g&;W z+X+~z9E>K@r|T>$`k|=oLLk`Dy=!6mst@?#P^%HGTCJAr7V}5UP&jZ`m9RORif@c0 z)AuZk$Yw=pwN~+P-w%43LH z%QHL-;Cn7kege0cNA4&sMGtev#hfi;&Xy6+2Oxj;Ct89J)f9dYGG9liZ~$Sb_qn|v zIJt=_fO1!W>DXFITRPzR5L2(NrL>_!;x8^Z_NL)4+E(^#SJikVk*;6L(i%_20>Dub z*$U9R;TCqc!`YL)mCIF6iO5TlM0##Hw&80NO=et>Uux2CTwcNX?3yJLGS-N!DPc92 z5miu>)sGa}IGC#~01<|p;u<~7rebRpu7Q}KSRF3yVVB%wxHjSox;~Q3T>Wnf4f7ok zv-(wVdoD=+x>ZwN!HMjDpu+5-xUJ}GU5~#w;``q2!uc_y@`tIFE*+=MUgxhG*mijG z_s@R=`6il3=js%y>JOrPJpI@4H$)6${f_d&7k-!9NQybpvwP=-LBRAtN_*hZ-HQEr_2lEt~Zi?SPKI12c+!?oj|dfvk9 zyRBB|mPj&vI+94A6JdKt-_U_e-@WImE|D%edS8Z>9AmGb^17lWgioT0Otw+*u=ZQ#fl^K(p_yioopNlMdH)>>I>m8R)m+^Wt5 z>;vC`cLBKv&@>HQ*U@zyP16i*?*(~pf$zZn5I7h)ryJl0@X)p`MNv=`1#Q~`Jb3PA zM0X(Il>dj*L{hbG>drYi=lCt?8e{r(RUSu`+yk%ux{tWyb!G{06^YIQ{w(6IfMlKFbtEzYZzAscMME!o57hou l`4W5w1OL@?4e%k>KLR_z_=r=TF3SJ_002ovPDHLkV1kg3=hFZH literal 0 HcmV?d00001 diff --git a/img/ok.png b/img/ok.png new file mode 100755 index 0000000000000000000000000000000000000000..a4a70f83573735453653bd9f6d287065faee1072 GIT binary patch literal 889 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 yP)~tGBz;$w(H-7$=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 1.5.4\n" +"X-Poedit-KeywordsList: _e;__\n" +"X-Poedit-Basepath: .\n" +"X-Poedit-SearchPath-0: /var/www/sitolocale/wp-content/plugins/ginger\n" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:43 +msgid "Add-on" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:176 +msgid "Available Add-on" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:183 +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:188 +msgid "Google Analytics" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:191 +msgid "It's FREE! Active it." +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:193 +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:235 +msgid "Add-on description." +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:197 +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:239 +msgid "Active add-on" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:209 +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:251 +msgid "Deactivate" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:216 +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:258 +msgid "Insert here the add-on activation code." +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:217 +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:259 +#, fuzzy +msgid "Insert here your activation mail." +msgstr "Inserisci qui il CSS personalizzato per il tuo banner" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:220 +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:262 +msgid "Activate" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:229 +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/ginger.addon.utils.php:233 +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:11 +#, fuzzy +msgid "Privacy Policy Manager" +msgstr "Privacy Policy Page" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/analytics/ginger.analytics.php:11 +msgid "Ginger Analytics" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/analytics/ginger.analytics.php:62 +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:65 +msgid "Impostazioni Add on" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/analytics/ginger.analytics.php:91 +msgid "Inserisci qui il tuo traking code" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/analytics/ginger.analytics.php:116 +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:345 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/ginger.admin.php:93 +msgid "Save Changes" +msgstr "Aggiorna" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:70 +#, fuzzy +msgid "PPM crea la tua privacy policy page." +msgstr "oppure crea la tua pagina privacy policy " + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:75 +msgid "Informazioni Generali" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:83 +msgid "Nome Sito" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:93 +msgid "Titolare Sito" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:103 +msgid "Mail Titolare" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:117 +#, fuzzy +msgid "Privacy Policy Default Text" +msgstr "Privacy Policy Page" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:120 +msgid "Default Text Area" +msgstr "" +"

Tipologie di Dati raccolti

Il Titolare non fornisce una lista " +"di tipologie di Dati Personali raccolti.Altri Dati Personali raccolti " +"potrebbero essere indicati in altre sezioni di questa privacy policy o " +"mediante testi informativi visualizzati contestualmente alla raccolta dei " +"Dati stessi.I Dati Personali possono essere inseriti volontariamente " +"dall’Utente, oppure raccolti in modo automatico durante l'uso di questa " +"Applicazione.L’eventuale utilizzo di Cookie - o di altri strumenti di " +"tracciamento - da parte di questa Applicazione o dei titolari dei servizi " +"terzi utilizzati da questa Applicazione, ove non diversamente precisato, ha " +"la finalità di identificare l’Utente e registrare le relative preferenze per " +"finalità strettamente legate all'erogazione del servizio richiesto " +"dall’Utente.Il mancato conferimento da parte dell’Utente di alcuni Dati " +"Personali potrebbe impedire a questa Applicazione di erogare i propri " +"servizi.L'Utente si assume la responsabilità dei Dati Personali di terzi " +"pubblicati o condivisi mediante questa Applicazione e garantisce di avere il " +"diritto di comunicarli o diffonderli, liberando il Titolare da qualsiasi " +"responsabilità verso terzi.

Modalità e luogo del trattamento dei Dati " +"raccolti

Modalità di trattamento

Il Titolare tratta i " +"Dati Personali degli Utenti adottando le opportune misure di sicurezza volte " +"ad impedire l’accesso, la divulgazione, la modifica o la distruzione non " +"autorizzate dei Dati Personali.Il trattamento viene effettuato mediante " +"strumenti informatici e/o telematici, con modalità organizzative e con " +"logiche strettamente correlate alle finalità indicate. Oltre al Titolare, in " +"alcuni casi, potrebbero avere accesso ai Dati categorie di incaricati " +"coinvolti nell’organizzazione del sito (personale amministrativo, " +"commerciale, marketing, legali, amministratori di sistema) ovvero soggetti " +"esterni (come fornitori di servizi tecnici terzi, corrieri postali, hosting " +"provider, società informatiche, agenzie di comunicazione) nominati anche, se " +"necessario, Responsabili del Trattamento da parte del Titolare. L’elenco " +"aggiornato dei Responsabili potrà sempre essere richiesto al Titolare del " +"Trattamento.

Luogo

I Dati sono trattati presso le sedi " +"operative del Titolare ed in ogni altro luogo in cui le parti coinvolte nel " +"trattamento siano localizzate. Per ulteriori informazioni, contatta il " +"Titolare.

Tempi

I Dati sono trattati per il tempo necessario " +"allo svolgimento del servizio richiesto dall’Utente, o richiesto dalle " +"finalità descritte in questo documento, e l’Utente può sempre chiedere " +"l’interruzione del Trattamento o la cancellazione dei Dati.Ulteriori " +"informazioni sul trattamento

Difesa in giudizio

I " +"Dati Personali dell’Utente possono essere utilizzati per la difesa da parte " +"del Titolare in giudizio o nelle fasi propedeutiche alla sua eventuale " +"instaurazione, da abusi nell'utilizzo della stessa o dei servizi connessi da " +"parte dell’Utente.L’Utente dichiara di essere consapevole che il Titolare " +"potrebbe essere richiesto di rivelare i Dati su richiesta delle pubbliche " +"autorità.

Informative specifiche

Su richiesta dell’Utente, in " +"aggiunta alle informazioni contenute in questa privacy policy, questa " +"Applicazione potrebbe fornire all'Utente delle informative aggiuntive e " +"contestuali riguardanti servizi specifici, o la raccolta ed il trattamento " +"di Dati Personali.

Log di sistema e manutenzione

Per necessità " +"legate al funzionamento ed alla manutenzione, questa Applicazione e gli " +"eventuali servizi terzi da essa utilizzati potrebbero raccogliere Log di " +"sistema, ossia file che registrano le interazioni e che possono contenere " +"anche Dati Personali, quali l’indirizzo IP Utente.

Informazioni non " +"contenute in questa policy

Maggiori informazioni in relazione al " +"trattamento dei Dati Personali potranno essere richieste in qualsiasi " +"momento al Titolare del Trattamento utilizzando le informazioni di contatto." +"

Esercizio dei diritti da parte degli Utenti

I soggetti cui si " +"riferiscono i Dati Personali hanno il diritto in qualunque momento di " +"ottenere la conferma dell'esistenza o meno degli stessi presso il Titolare " +"del Trattamento, di conoscerne il contenuto e l'origine, di verificarne " +"l'esattezza o chiederne l’integrazione, la cancellazione, l'aggiornamento, " +"la rettifica, la trasformazione in forma anonima o il blocco dei Dati " +"Personali trattati in violazione di legge, nonché di opporsi in ogni caso, " +"per motivi legittimi, al loro trattamento. Le richieste vanno rivolte al " +"Titolare del Trattamento.Questa Applicazione non supporta le richieste “Do " +"Not Track”. Per conoscere se gli eventuali servizi di terze parti utilizzati " +"le supportano, consulta le loro privacy policy.

Modifiche a questa " +"privacy policy

Il Titolare del Trattamento si riserva il diritto di " +"apportare modifiche alla presente privacy policy in qualunque momento " +"dandone pubblicità agli Utenti su questa pagina. Si prega dunque di " +"consultare spesso questa pagina, prendendo come riferimento la data di " +"ultima modifica indicata in fondo. Nel caso di mancata accettazione delle " +"modifiche apportate alla presente privacy policy, l’Utente è tenuto a " +"cessare l’utilizzo di questa Applicazione e può richiedere al Titolare del " +"Trattamento di rimuovere i propri Dati Personali. Salvo quanto diversamente " +"specificato, la precedente privacy policy continuerà ad applicarsi ai Dati " +"Personali sino a quel momento raccolti.

Informazioni su questa privacy " +"policy

Il Titolare del Trattamento dei Dati è responsabile per " +"questa privacy policy, redatta partendo da moduli predisposti da Iubenda e " +"conservati sui suoi server." + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:126 +msgid "Add your services" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:132 +msgid "Social Login" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:142 +msgid "Login facebook text" +msgstr "" +"

Permessi Facebook richiesti da questa Applicazione

Questa " +"Applicazione può richiedere alcuni permessi Facebook che le consentono di " +"eseguire azioni con l’account Facebook dell’Utente e di raccogliere " +"informazioni, inclusi Dati Personali, da esso.Per maggiorni informazioni sui " +"permessi che seguono, fai riferimento alla documentazione dei permessi Facebook ed alla privacy " +"policy di Facebook.I permessi richiesti sono i seguenti:" +"

Informazioni di base

Le informazioni di base dell’Utente " +"registrato su Facebook che normalmente includono i seguenti Dati: id, nome, " +"immagine, genere e lingua di localizzazione ed, in alcuni casi gli “Amici” " +"di Facebook. Se l'Utente ha reso disponibili pubblicamente Dati ulteriori, " +"gli stessi saranno disponibili.

'Su di me' degli amiciFornisce accesso alla sezione 'Su di me' del profilo degli amici." +"

Accesso ai dati privati

Permette l'accesso ai dati privati " +"dell'utente e degli amici

Accesso alle attività

Fornisce " +"accesso alla lista di attività dell'utente

Accesso alle liste di " +"amici

Fornisce accesso alle liste di amici che l'utente ha " +"creato

Accesso alle richieste

Fornisce accesso di lettura alle " +"richieste di amicizia dell'utente

Accesso allo News FeedFornisce accesso ai post dello News Feed e permette all'applicazione di " +"effettuare ricerche su di esso.

Accesso offline

Permette " +"l'accesso ai dati quanto l'utente non è connesso.

Aderenze politiche e " +"religiose degli amici

Fornisce accesso alle aderenze politiche e " +"religiose degli amici.

Aggiornamento di stato

Aggiorna lo " +"stato dell'utente.

Attività degli amici

Fornisce accesso alla " +"lista delle attività degli amici.

Attività degli amici con App e " +"Giochi

Permette di recuperare le attività degli amici dell'utente " +"con le App e i Giochi.

Attività delle App e dei GiochiPermette all'applicazione di pubblicare recuperare le attività delle App " +"e dei Giochi.

Azione music.listen

Permette all'applicazione di " +"recuperare le azioni pubblicate da tutte le applicazioni che usano l'azione " +"music.

Azioni 'news.reads'

Permette all'applicazione di " +"recuperare le azioni pubblicate da tutte le applicazioni che usano l'azione " +"'news.reads'.

Azioni 'video.watches'

Permette all'applicazione " +"di recuperare le azioni pubblicate da tutte le applicazioni che usano " +"l'azione 'video.watches'.

Azioni 'video.watches' degli amiciPermette all'applicazione di recuperare le azioni pubblicate da tutte le " +"applicazioni che usano l'azione 'video.watches'.

Azioni Fitness

Azioni Libri

Azioni music.listens degli amiciPermette all'applicazione di recuperare le azioni pubblicate da tutte le " +"applicazioni che usano l'azione music.listens.

Azioni news.read degli " +"amici

Permette all'applicazione di recuperare le azioni pubblicate " +"da tutte le applicazioni che usano l'azione news.read.

Azioni " +"personalizzate degli amici dell'utente

Permette all'applicazione di " +"recuperare le azioni pubblicate da un'altra applicazione, secondo quando " +"specificato dall''app namespace'.

Azioni personalizzate dell'utente

Permette all'applicazione di recuperare le azioni pubblicate da " +"un'altra applicazione, secondo quando specificato dall''app namespace'." +"

Carica foto

Aggiungi o modifica foto.

Caricamento di " +"video

Permette all'app di aggiungere o modificare video dell'utente." +"

Chat

Fornisce alle applicazioni che si integrano con la Chat " +"di Facebook la possibilità di effettuare il login dell'utente

Checkin

Fornisce accesso di lettura ai checkin autorizzati dell'utente o a " +"quelli di un amico che l'utente può visualizzare

Checkin degli amici

Fornisce accesso di lettura ai checkin degli amici che l'utente può " +"vedere.

Città

Fornisce accesso alla città indicata nel profilo " +"dell'utente

Città degli amici

Fornisce accesso alle città in " +"cui vivono gli amici.

Città di origine

Fornisce accesso alla " +"città di origine dell'utente.

Città di origine degli amiciFornisce accesso alla città di origine degli amici dell'utente." +"

Condivisione

Condivisione al posto dell'utente." +"

Convinzioni politiche e religiose

Fornisce accesso alle " +"convinzioni politiche e religiose dell'utente.

Crea EventiPermette all'utente di creare e modificare eventi al posto " +"dell'utente

Crea note

Aggiungi o modifica note.

Data di " +"compleanno

Fornisce accesso alla data di compleanno

Date di " +"compleanno degli amici

Fornisce accesso alle date di compleanno " +"degli amici.

Deal

Legge l'attività dei deal

DomandeFornisce accesso alle domande che l'utente ha posto.

Domande degli " +"amici

Fornisce accesso alle domande degli amici.

Educazione

Fornisce accesso alla sezione Educazione nel profilo " +"dell'utente

Educazione degli amici

Fornisce accesso alle " +"informazioni sull'educazione degli amici.

Email

Fornisce " +"accesso all'indirizzo email primario dell'Utente

Email di contatto

Permette di accedere all'indirizzo email di contatto dell'utente." +"

Esportare i post

Esportare i post e renderli pubblici. Tutti " +"i post saranno esportati, compresi i messaggi di stato.

EventiFornisce accesso alla lista di eventi a cui l'utente " +"partecipa

Eventi degli amici

Fornisce accesso alla lista degli " +"eventi a cui gli amici dell'utente partecipano.

Foto

Fornisce " +"accesso alle foto che l'utente ha caricato ed a quelle in cui è stato " +"taggato.

Foto degli amici

Fornisce accesso alle foto che " +"l'utente ha caricato o in cui l'utente è stato taggato.

Gestione degli " +"annunci

Fornisce la possibilità di gestire gli annunci pubblicitari " +"e richiamare la Facebook Ads API al posto dell'utente.

Gestione dei " +"gruppi

Permette all'applicazione di gestire i gruppi dell'utente." +"

Gestione della casella di posta

Permette di leggere ed " +"inviare messaggi dalla casella di posta dell'utente.

Gestione delle " +"notifiche

Permette all'app di leggere le notifiche e di " +"contrassegnarle come lette.

Gestione delle pagine

Permette " +"all'applicazione di recuperare l'access_tokens per le Pagine e le " +"Applicazioni che l'utente amministra.

Gestisci Liste di AmiciPermette all'applicazione di creare, eliminare e modificare le liste di " +"amici dell'utente.

Gruppi

Fornisce accesso alla lista di " +"gruppi di cui l'utente è membro.

Gruppi degli amici

Fornisce " +"accesso alla lista dei gruppi di cui gli amici dell'utente sono membri." +"

Insight

Fornisce accesso ai dati Insight per pagine, " +"applicazioni e domini che l'utente possiede.

InteressiFornisce accesso alla lista di interessi dell'utente.

Interessi " +"degli amici

Fornisce accesso alla lista di interessi degli amici " +"dell'utente.

Invio di notifiche

Permette all'app d'inviare " +"notifiche

Invio SMS

Permette all'app di inviare SMS al numero " +"di telefono dell'utente.

Leggi messaggi della pagina

Lettura della casella di posta

Permette all'applicazione " +"di leggere la casella di posta Facebook dell'utente.

Lista degli " +"Amici

Luoghi taggati

Membri della famiglia e " +"Stato di relazione

Fornisce accesso ai membri della famiglia " +"dell'utente, alle sue relazioni personali ed al suo stato di relazione." +"

Membri della famiglia e Stato di relazione degli amiciFornisce accesso ai membri della famiglia ed allo stato di relazione " +"degli amici dell'utente.

Mi Piace

Fornisce accesso alla lista " +"di tutte le pagine che l'utente ha contrassegnato con il Mi Piace.

Mi " +"Piace degli amici

Fornisce accesso alla lista di pagine su cui gli " +"amici dell'utente hanno fatto Mi Piace.

Note

Fornisce accesso " +"alle note dell'utente.

Note degli amici

Fornisce accesso alle " +"note degli amici.

Presenza online

Permette l'accesso alla " +"presenza online/offline dell'utente.

Presenza online degli amiciFornisce accesso alla presenza online/offline degli amici dell'utente." +"

Pubblica Mi Piace sul Wall

Pubblica sul Wall storie su ciò " +"che l'utente contrassegna con il Mi Piace.

Pubblicazione dei checkin

Permette all'app di effettuare checkin al posto dell'utente." +"

Pubblicazione dell'attività dell'app

Permette all'app di " +"pubblicare sull'Open Graph usando Azioni integrate, Traguardi, Punteggi, " +"Azioni personalizzate. L'applicazione può anche pubblicare altre attività, " +"che sono dettagliate nel documento riguardante i permessi di pubblicazione " +"di Facebook.

Pubblicazione sulla Bacheca

Permette a questa app " +"di pubblicare contenuto, commenti e 'Mi piace' sulla bacheca dell'utente e " +"su quella dei suoi amici.

Relazioni degli amici

Fornisce " +"accesso alle informazioni sulle relazioni degli amici.

Relazioni " +"dell'utente

Fornisce accesso alle informazioni sulle relazioni " +"dell'utente.

RSVP agli eventi

Permette all'applicazione di " +"fare RSVP agli eventi al posto dell'utente.

Siti web degli amiciFornisce accesso agli URL dei siti web degli amici dell'utente." +"

Sito web

Fornisce accesso al sito web dell'utente." +"

Sottoscrizioni degli amici

Sottoscrizioni dell'Utente

Stato degli amici

Fornisce accesso ai messaggi di " +"stato ed ai checkin degli amici.

Stato dell'utente

Fornisce " +"accesso ai messaggi di stato e ai checkin dell'utente.

Storia " +"lavorativa

Fornisce accesso alla storia lavorativa dell'utente." +"

Storia lavorativa degli amici

Fornisce accesso alla storia " +"lavorativa degli amici.

Su di me

Fornisce accesso alla sezione " +"'Su di me' del profilo

Video

Fornisce accesso ai video che " +"l'utente ha caricato ed a quelli in cui è stato taggato.

Video degli " +"amici

Fornisce accesso ai video che gli amici hanno caricato ed in " +"cui sono stati taggati.

Accesso agli account su servizi terziQuesti servizi permettono a questa Applicazione di prelevare Dati dai " +"tuoi account su servizi terzi ed eseguire azioni con essi.Questi servizi non " +"sono attivati automaticamente, ma richiedono l'espressa autorizzazione " +"dell'Utente.

Accesso all'account Facebook (Questa Applicazione)Questo servizio permette a questa Applicazione di connettersi con " +"l'account dell'Utente sul social network Facebook, fornito da Facebook, Inc." +"Permessi richiesti: 'Su di me' degli amici, Accesso ai dati privati, Accesso " +"alle attività, Accesso alle liste di amici, Accesso alle richieste, Accesso " +"allo News Feed, Accesso offline, Aderenze politiche e religiose degli amici, " +"Aggiornamento di stato, Attività degli amici, Attività degli amici con App e " +"Giochi, Attività delle App e dei Giochi, Azione music.listen, Azioni 'news." +"reads', Azioni 'video.watches', Azioni 'video.watches' degli amici, Azioni " +"Fitness, Azioni Libri, Azioni music.listens degli amici, Azioni news.read " +"degli amici, Azioni personalizzate degli amici dell'utente, Azioni " +"personalizzate dell'utente, Carica foto, Caricamento di video, Chat, " +"Checkin, Checkin degli amici, Città, Città degli amici, Città di origine, " +"Città di origine degli amici, Condivisione, Convinzioni politiche e " +"religiose, Crea Eventi, Crea note, Data di compleanno, Date di compleanno " +"degli amici, Deal, Domande, Domande degli amici, Educazione, Educazione " +"degli amici, Email, Email di contatto, Esportare i post, Eventi, Eventi " +"degli amici, Foto, Foto degli amici, Gestione degli annunci, Gestione dei " +"gruppi, Gestione della casella di posta, Gestione delle notifiche, Gestione " +"delle pagine, Gestisci Liste di Amici, Gruppi, Gruppi degli amici, Insight, " +"Interessi, Interessi degli amici, Invio di notifiche, Invio SMS, Leggi " +"messaggi della pagina, Lettura della casella di posta, Lista degli Amici, " +"Luoghi taggati, Membri della famiglia e Stato di relazione, Membri della " +"famiglia e Stato di relazione degli amici, Mi Piace, Mi Piace degli amici, " +"Note, Note degli amici, Presenza online, Presenza online degli amici, " +"Pubblica Mi Piace sul Wall, Pubblicazione dei checkin, Pubblicazione " +"dell'attività dell'app, Pubblicazione sulla Bacheca, Relazioni degli amici, " +"Relazioni dell'utente, RSVP agli eventi, Siti web degli amici, Sito web, " +"Sottoscrizioni degli amici, Sottoscrizioni dell'Utente, Stato degli amici, " +"Stato dell'utente, Storia lavorativa, Storia lavorativa degli amici, Su di " +"me, Video e Video degli amici.Luogo del trattamento : USA – Privacy Policy" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:154 +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:165 +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:175 +msgid "Login Pinterest text" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:161 +msgid "Login Linkedin text" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:185 +msgid "Login Google Plus text" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:193 +msgid "Social Widget" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:203 +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:236 +msgid "Widget Facebook text" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:215 +msgid "Widget Twitter text" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:226 +msgid "Widget Linkedin text" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:246 +msgid "Widget Google Plus text" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:256 +msgid "Widget Disqus text" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:264 +msgid "Statistic Services" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:275 +msgid "Google Analytics text" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:283 +msgid "Piattaforme esterne" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:294 +msgid "Maps text" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:305 +msgid "Youtube text" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:316 +msgid "Vimeo text" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:324 +msgid "Piattaforme esterne e commenti social" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/addon/privacy-policy-manager/ginger.privacy-policy-manager.php:335 +msgid "Share This text" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/front/gingerfront.utils.php:130 +msgid "Enable Cookies" +msgstr "Abilita Cookies" + +#: /var/www/sitolocale/wp-content/plugins/ginger/front/gingerfront.utils.php:136 +msgid "Disable Cookies" +msgstr "Disabilita Cookies" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/ginger.admin.php:43 +msgid "" +"The page with the specified title already exists and is your current privacy " +"policy page!" +msgstr "" +"La pagina con il titolo specificato è già esistente ed impostata come pagina " +"di privacy attuale!" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/ginger.admin.php:64 +msgid "Updated!" +msgstr "Aggiornato!" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/ginger.admin.php:74 +msgid "General Configuration" +msgstr "Configurazione Generale" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/ginger.admin.php:75 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:5 +msgid "Banner Setup" +msgstr "Banner Setup" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/ginger.admin.php:76 +msgid "Privacy Policy" +msgstr "Privacy Policy" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/ginger.utils.php:76 +msgid "" +"This website uses cookies. By continuing to use the site you are agreeing to " +"its use of cookies." +msgstr "" +"Questo sito utilizza cookie. Continuando la navigazione acconsenti " +"all'utilizzo di questi cookie." + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/ginger.utils.php:77 +msgid "This content has been disabled because you have not accepted cookies." +msgstr "" +"Questo contenuto può essere mostrato solo accettando l'utilizzo dei cookies." + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/ginger.pointer.php:39 +msgid "Ginger Cookie Law Settings" +msgstr "Ginger Cookie Law Settings" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/ginger.pointer.php:40 +msgid "One more step: you need to enable banner in " +msgstr "Ancora un passo: devi abilitare il banner in " + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/link.php:8 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/url.php:8 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:219 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:222 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/dialog.php:64 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/dialog.php:67 +msgid "Link" +msgstr "Link" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/url.php:35 +msgid "URL" +msgstr "URL" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/url.php:37 +msgid "Enable" +msgstr "Abilitato" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/url.php:37 +msgid "YES" +msgstr "SI" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/url.php:38 +msgid "NO" +msgstr "NO" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:8 +msgid "Ginger is currently" +msgstr "Ginger è attualmente" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:8 +msgid "enabled" +msgstr "abilitato" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:8 +msgid "disabled" +msgstr "disabilitato" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:14 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:17 +msgid "Enable Ginger" +msgstr "Abilita Ginger" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:20 +msgid "Enabled" +msgstr "Abilitato" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:25 +msgid "Disabled" +msgstr "Disabilitato" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:32 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:35 +msgid "Do you have a cache system?" +msgstr "Hai un sistema di cache" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:38 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:113 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:133 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:153 +msgid "Yes" +msgstr "Si" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:43 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:118 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:138 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:158 +msgid "No" +msgstr "No" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:48 +msgid "" +"If you have a caching system (W3TC, Varnish, WP Super Cash...) choose YES. " +"Ginger will optimize websites performances" +msgstr "" +"Se utilizzi un sistema di caching (W3TC, Varnish, WP Super Cash...) " +"seleziona SI. Ginger ottimizzerà le prestazioni del sito" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:55 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:58 +msgid "Cookie Confirmation Type" +msgstr "Tipo di conferma dei cookie" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:61 +msgid "Opt-In" +msgstr "Opt-In" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:64 +msgid "Cookies are disabled until banner is accepted" +msgstr "I cookie sono disabilitati finchè il banner non è accettato" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:69 +msgid "Opt-Out" +msgstr "Opt-Out" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:72 +msgid "Cookies are disabled only if explicitly requested" +msgstr "I cookie sono disabilitati solo se esplicitamente richiesto" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:77 +msgid "Choose OPT-IN if you're in Italy" +msgstr "Seleziona OPT-IN se ti trovi in Italia" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:85 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:89 +msgid "Let scroll to confirm" +msgstr "Scrolla per confermare" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:93 +msgid "Scroll to accept cookie" +msgstr "Scrolla per accettare i cookie" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:98 +msgid "Keep banner after scroll" +msgstr "Non abilitare i cookie con lo scroll" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:105 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:109 +msgid "Click out of banner to accept cookie" +msgstr "Clicca fuori dal banner per accettare i cookie" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:125 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:129 +msgid "Force reload page" +msgstr "Forza il reload della pagina" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:145 +msgid "Stress Mode" +msgstr "Stress Mode" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:149 +msgid "Keep banner until acceptance" +msgstr "Mantieni il banner fino all'accettazione" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:163 +msgid "" +"If cookies are not accepted the banner will continues to be shown minimized" +msgstr "" +"Se i cookie non vengono accettati il banner continuerà ad essere mostrato " +"minimizzato" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:170 +msgid "Cookies Duration" +msgstr "Durata Cookie" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:174 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:177 +msgid "Select cookies duration" +msgstr "Seleziona la durata dei cookie" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:179 +msgid "Select" +msgstr "Seleziona" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:180 +msgid "1 Day" +msgstr "1 Giorno" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:181 +msgid "1 Month" +msgstr "1 Mese" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:182 +msgid "1 Year" +msgstr "1 Anno" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/general.php:183 +msgid "For ever" +msgstr "Per sempre" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:11 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:14 +msgid "Choose Banner Type" +msgstr "Scegli il tipo di banner" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:16 +msgid "Bar" +msgstr "Barra" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:20 +msgid "Dialog" +msgstr "Dialog" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:26 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:29 +msgid "Banner Position" +msgstr "Posizione Banner" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:31 +msgid "Top" +msgstr "In alto" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:35 +msgid "Bottom" +msgstr "In basso" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:41 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:44 +msgid "Banner Text" +msgstr "Testo Banner" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:52 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/dialog.php:24 +msgid "" +"You can use syntax {{privacy_page}} to link Privacy Police Page " +"defined in Privacy Policy " +"Tab" +msgstr "" +"Puoi usare la sintassi {{privacy_page}} per linkare alla pagina " +"Privacy Policy definita in Privacy Policy Tab" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:59 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:62 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:77 +msgid "Iframe Text" +msgstr "Testo Iframe" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:74 +msgid "Customize your banner buttons" +msgstr "Personalizza i tuoi Banner Buttons" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:79 +msgid "Accept cookie Button" +msgstr "Button Accetta Cookie" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:83 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:97 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:129 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:188 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:191 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/dialog.php:51 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/dialog.php:53 +msgid "Text" +msgstr "Testo" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:88 +msgid "Accept Cookie" +msgstr "Accetta Cookie" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:93 +msgid "Disable cookie Button" +msgstr "Button Disabilita Cookie " + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:102 +msgid "Disable Cookie" +msgstr "Disabilita Cookie" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:106 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:138 +msgid "Enable:" +msgstr "Abilita:" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:125 +msgid "Read More Button" +msgstr "Button Read More " + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:134 +msgid "Read More" +msgstr "Read More" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:158 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:161 +msgid "Choose Ginger Theme" +msgstr "Scegli il tema Ginger" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:163 +msgid "Light Theme" +msgstr "Light Theme" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:167 +msgid "Dark Theme" +msgstr "Dark Theme" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:174 +msgid "Customize your Ginger theme" +msgstr "Personalizza il tuo tema Ginger" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:178 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:181 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/dialog.php:37 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/dialog.php:39 +msgid "Background" +msgstr "Sfondo" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:199 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:202 +msgid "Button" +msgstr "Button" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:209 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:212 +msgid "Button Text Color" +msgstr "" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:230 +msgid "Custom CSS" +msgstr "Custom CSS" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:234 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/banner.php:237 +msgid "Insert here your banner custom CSS" +msgstr "Inserisci qui il CSS personalizzato per il tuo banner" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/dialog.php:8 +msgid "Banner Dialog Setup" +msgstr "Banner Dialog Setup" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/dialog.php:15 +msgid "Dialog Text" +msgstr "Testo Dialog " + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/dialog.php:17 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/policy.php:23 +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/policy.php:98 +msgid "DialogText" +msgstr "Testo Dialog " + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/dialog.php:32 +msgid "Colors" +msgstr "Colori" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/policy.php:8 +msgid "Privacy Policy Setup" +msgstr "Privacy Policy Setup" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/policy.php:16 +msgid "Select your privacy policy page" +msgstr "Seleziona la tua pagina privacy policy" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/policy.php:53 +msgid "Privacy Policy page" +msgstr "Privacy Policy Page" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/policy.php:78 +msgid "or create your privacy policy page" +msgstr "oppure crea la tua pagina privacy policy " + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/policy.php:87 +msgid "Title" +msgstr "Titolo" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/policy.php:91 +msgid "Attention ! There is already a page with this title" +msgstr "Attenzione! C'è già una pagina con questo titolo" + +msgid "Disable Ginger for logged users" +msgstr "Disabilita Ginger per gli utenti loggati" + +msgid "Disable Ginger for those pages" +msgstr "Disabilita Ginger per queste pagine" + +msgid "Select pages in which Ginger is disabled" +msgstr "Seleziona le pagine nelle quali vuoi che Ginger sia disabilitato" + +msgid "Disable Click-out and Scroll to accept cookies in Privacy Policy page" +msgstr "" +"Disabilita Click-out e Scroll per accettare i cookies nella pagina di " +"Privacy Policy" + +#: /var/www/sitolocale/wp-content/plugins/ginger/admin/partial/policy.php:111 +msgid "If you create a new page this will be setted as Privacy Policy Page" +msgstr "" +"Se crei una nuova pagina questa sarà impostata come pagina Privacy Policy" + +#, fuzzy +#~ msgid "Read More Button2" +#~ msgstr "Button Read More " + +#~ msgid "Edit Url" +#~ msgstr "Url Setup" + +#~ msgid "WPML Setup" +#~ msgstr "WPML Setup" + +#~ msgid "About EU Law" +#~ msgstr "About EU Law" + +#~ msgid "Wpml Setup" +#~ msgstr "Wpml Setup" diff --git a/readme.txt b/readme.txt new file mode 100755 index 0000000..33bf6b9 --- /dev/null +++ b/readme.txt @@ -0,0 +1,214 @@ +=== Plugin Name === +Contributors: manafactory, webgrafia, matteobarale +Donate link: http://www.ginger-cookielaw.com/ +Tags: EU Cookie Law, cookie law, block cookie, cookie consent, cookie law, cookie policy, privacy policy, cookie banner, italian cookie law, cookie italia, wpml, polylang +Requires at least: 3.0.1 +Tested up to: 4.7.3 +Stable tag: 3.1.5 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +Ginger allows to show a configurable banner and blocks third party cookies complying with European Cookie Laws. +== Description == + +Ginger is a **complete plug'n play solution** that make your website compliant with EU Cookie law. Configure your banner and block cookies **before** or **after** users' choise. +Now **totally free and all addon unlocked!** + +Help me to keep this plugin mantained: https://github.com/webgrafia/ginger + += Features: = +* really **plug'n play**: simply activate, and enjoy +* complete **banner** configuration: style, position and colors +* **Opt-in** mode enabler: block cookies BEFORE user acceptance (fit for **Italy** regulation) +* Exclude Google Analytics cookie if not **anonymized** +* Compatible with server **caching** + + += Natively Supports: = +* Adsense +* Analytics +* twitter +* facebook +* linkedin +* pinterest +* google + +* google analytics +* google maps +* youtube +* vimeo +* Disqus +* ShareThis +* Custom Javascript url & Custom Iframe url to extend native support +* WPML support +* Polylang support +* Cookie Users' Acceptance Logger + +More information [here: ginger-cookielaw.com](http://www.ginger-cookielaw.com/) + +**Send us [suggestions or bug report](https://wordpress.org/support/plugin/ginger)!** + +== Installation == + +1. Upload ginger to the `/wp-content/plugins/` directory +1. Activate the plugin through the 'Plugins' menu in WordPress +1. Enable, configure settings and banner in Ginger Configuration Page (follow the gingerman) + +== Frequently Asked Questions == + += Do I need to code themes or plugins? = + +Absolutely not. It's really plug'n play + += Does it block cookies before they’re explicitly accepted by user? = + +Sure, you can choose opt-in or opt-out mode to let it work as you wish. + += Does it use jQuery? = + +No, you can be safe from plugins conflict. It's been developed using Cookies Enabler Js Library developed by Nicholas Ruggeri: https://github.com/nicholasruggeri/cookies-enabler + += What about other cookies not supported natively? = + +You can enable **Custom JS & Iframe url** to add any javascript/iframe you need to manage and block. + += Is compatible with multilanguage websites? = + +Yes, actually you we have 2 addons for multilanguages: wpml and polylang. Ask to our support forum for custom requestes + + +== Screenshots == + +1. General Configuration Page: here you can enable banner and choose from opt-in (for Italia as example) or opt-out mode +2. Banner setup: dialog or banner, colors, posizions, etc +3. Privacy Policy Setup Page +4. Front-end example of light banner in footer, with iframe locked before approvation in opt-in mode +5. Available addons/extensions +6. Logger addon example +7. Custom Javascript Configurator Addon +8. Custom Iframe Configurator Addon + + +== Changelog == + + += 4.0 = +* all feature unlocked + += 3.1.5 = +* new option to disable ginger on loggedin +* new option to exclude specific pages +* new option to disable ginger in policy page + += 3.1.4 = +* disabled banner text indicization + += 3.1.3 = +* fixed misspelling and order wp_footer script + += 3.1.2 = +* js & notice fix + += 3.1.1 = +* minor changes + += 3.1 = +* Worpress 4.4 compatibility + += 3.0.4 = +* Added facebook likebox + += 3.0.3 = +* Fixed Yoast Compatibility + += 3.0 = +* Removed policy violation + += 2.3.6 = +* Fixed 3.0 compatibility + += 2.3.5 = +* Added sharethis cookies + += 2.3.4 = +* Fixed bug disable button + += 2.3.3 = +* Import/Export Tool +* notice fix + += 2.3.2 = +* Doubleclick Adsense addon + += 2.3.1 = +* Contextual Help + += 2.3 = +* Logger addon + += 2.2 = +* Polylang support + += 2.1 = +* Custom js/iframe addon +* new addon page layout +* fix bug addon analytics +* minor fixes + += 2.0.2 = +* Fix analytics addon + += 2.0.1 = +* BugFix + += 2.0.0 = +* Adsense Addon +* Google Analytics Addon +* WPML addon + += 1.2.2 = +* Google Maps Fix +* Control json Page + += 1.2.1 = +* Style Bugfix + += 1.2 = +* Add support for disqus and ShareThis +* Bugfix + += 1.1.6 = +* Get original class on iframe +* Bugfix on Css + += 1.1.5 = +* Bugfix + += 1.1.4 = +* Bugfix + += 1.1.3 = +* Bugfix + += 1.1.2 = +* Bugfix + += 1.1.1 = +* fix style banner +* cookie expire time +* css custom +* vimeo support +* minor fix on label and translation + += 1.1 = +* fix encoding +* activation with default options +* added refresh option +* fixed wp 3.0 compatibility +* fix italian translations +* admin pointer + += 1.0.1 = +* Clean uninstall + += 1.0 = +* First stable release diff --git a/uninstall.php b/uninstall.php new file mode 100755 index 0000000..1d2ff26 --- /dev/null +++ b/uninstall.php @@ -0,0 +1,12 @@ +