From b0fd98e95349063454d3c77a28983d83ff9a829d Mon Sep 17 00:00:00 2001
From: Apinan Woratrakun
Date: Thu, 14 May 2020 01:49:30 +0700
Subject: [PATCH 1/6] clean code
---
README.md | 13 ++-
admin.php | 229 ++++++++++++++++++++++------------------
assets/pdpa-consent.css | 29 +++--
assets/pdpa-consent.js | 26 ++---
pdpa-consent.php | 162 +++++++++++++++-------------
template/en_US.html | 31 ------
template/th_TH.html | 31 ------
templates/en_US.html | 46 ++++++++
templates/th_TH.html | 46 ++++++++
9 files changed, 351 insertions(+), 262 deletions(-)
delete mode 100644 template/en_US.html
delete mode 100644 template/th_TH.html
create mode 100644 templates/en_US.html
create mode 100644 templates/th_TH.html
diff --git a/README.md b/README.md
index 98e155a..b715296 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,6 @@ You can edit the term page and publish on your website with elegant and powerful
### Features
* Customizable message
* Identity setup
-* User data list
* Popup placement
* Consent page generate
* Custom CSS
@@ -37,4 +36,14 @@ You can edit the term page and publish on your website with elegant and powerful
[GNU 3.0 License](https://opensource.org/licenses/lgpl-3.0.html0)
### Special Thank
-* Thai Programmer Association
\ No newline at end of file
+* Thai Programmer Association
+
+### Changelogs
+
+#### 1.0.2
+* Add dark mode
+* Button color
+* Use page id as privacy page url link
+* List of css class for developer
+* Remove custom css for security reason
+* Fix security and code style
\ No newline at end of file
diff --git a/admin.php b/admin.php
index 75b5302..acd60f2 100644
--- a/admin.php
+++ b/admin.php
@@ -1,14 +1,17 @@
*/
-if ( ! defined( 'ABSPATH' ) ) exit;
+if (! defined('ABSPATH')) {
+ exit;
+}
-Class pdpa_consent_admin_option {
+class pdpa_consent_admin_option
+{
private $plugin_info = array();
private $capability = 'manage_options';
private $options;
@@ -16,18 +19,20 @@
private $page_id;
private $page_name;
- public function __construct() {
- $this->plugin_info = get_plugin_data( PDPA_PATH . 'pdpa-consent.php' );
+ public function __construct()
+ {
+ $this->plugin_info = get_plugin_data(PDPA_PATH . 'pdpa-consent.php');
$this->locale = get_locale();
$this->page_id = get_option('pdpa-consent-page-id') ? get_option('pdpa-consent-page-id') : 0;
$this->page_name = __('pdpa-term', 'pdpa-consent');
- add_action( 'admin_menu', array($this, 'pdpa_admin_menu') );
- add_action( 'admin_init', array($this, 'admin_option_setup') );
- add_action( 'admin_enqueue_scripts', array( $this, 'pdpa_enqueue_color_picker' ) );
+ add_action('admin_menu', array($this, 'pdpa_admin_menu'));
+ add_action('admin_init', array($this, 'admin_option_setup'));
+ add_action('admin_enqueue_scripts', array( $this, 'pdpa_enqueue_color_picker' ));
}
- private function serialize_html($html, $settings = [ 'website_name' => '', 'site_description' => '', 'list_data' => '', 'site_address' => '', 'site_contact' => '', 'site_email' => '' ]) {
- $settings['list_data'] = str_replace("\n", "", esc_html($settings['list_data']) );
+ private function serialize_html($html, $settings = [ 'website_name' => '', 'site_description' => '', 'list_data' => '', 'site_address' => '', 'site_contact' => '', 'site_email' => '' ])
+ {
+ $settings['list_data'] = str_replace("\n", " ", esc_html($settings['list_data']));
$html = str_replace('[service]', esc_html($settings['website_name']), $html);
$html = str_replace('[description]', esc_attr($settings['site_description']), $html);
$html = str_replace('[list_data]', $settings['list_data'], $html);
@@ -37,12 +42,13 @@ private function serialize_html($html, $settings = [ 'website_name' => '', 'site
return $html;
}
- public function generate_post_from_template() {
- $this->options = get_option( '_option_name' );
- if(file_exists(PDPA_PATH . 'template/'.$this->locale.'.html')) {
- $content = $this->serialize_html( file_get_contents( PDPA_PATH . 'template/'.$this->locale.'.html'), $this->options );
+ public function generate_post_from_template()
+ {
+ $this->options = get_option('_option_name');
+ if (file_exists(PDPA_PATH . 'templates/' . $this->locale . '.html')) {
+ $content = $this->serialize_html(file_get_contents(PDPA_PATH . 'templates/'. $this->locale .'.html'), $this->options);
} else {
- $content = $this->serialize_html( file_get_contents( PDPA_PATH . 'template/th_TH.html'), $this->options );
+ $content = $this->serialize_html(file_get_contents(PDPA_PATH . 'templates/th_TH.html'), $this->options);
}
$page_details = array(
@@ -55,47 +61,47 @@ public function generate_post_from_template() {
'post_type' => 'page'
);
- $page_id = wp_insert_post( $page_details );
- add_option( 'pdpa-consent-page-id', $page_id );
+ $page_id = wp_insert_post($page_details);
+ add_option('pdpa-consent-page-id', $page_id);
}
- function pdpa_admin_menu() {
- add_menu_page( $this->plugin_info['Name'], __('PDPA Consent', 'pdpa-consent'), $this->capability, $this->plugin_info['TextDomain'], array($this, 'pdpa_admin_option'), 'dashicons-shield-alt', 81 );
+ public function pdpa_admin_menu()
+ {
+ add_menu_page($this->plugin_info['Name'], __('PDPA Consent', 'pdpa-consent'), $this->capability, $this->plugin_info['TextDomain'], array($this, 'pdpa_admin_option'), 'dashicons-shield-alt', 81);
}
- function pdpa_enqueue_color_picker( $hook_suffix ) {
- wp_enqueue_style( 'wp-color-picker' );
- wp_enqueue_script( 'pdpa-script', plugins_url('assets/pdpa-admin-script.js', __FILE__ ), array( 'wp-color-picker' ), false, true );
+ public function pdpa_enqueue_color_picker($hook_suffix)
+ {
+ wp_enqueue_style('wp-color-picker');
+ wp_enqueue_script('pdpa-script', plugins_url('assets/pdpa-admin-script.js', __FILE__), array( 'wp-color-picker' ), false, true);
}
- function pdpa_admin_option() {
-
- if(isset($_POST)) {
+ public function pdpa_admin_option()
+ {
+ if (isset($_POST)) {
$this->generate_post_from_template();
- }
- ?>
+ } ?>
-
Development by plugin_info['Author'];?>
+
Version: plugin_info['Version'];?>, Development by plugin_info['Author']; ?>
options = get_option( '_option_name' );
+ public function _section_fields()
+ {
+ $this->options = get_option('_option_name');
- if($this->page_id !== 0) {
+ if ($this->page_id !== 0) {
add_settings_field(
'_url_', // id
- __( 'Privacy page','pdpa-consent' ), // title
+ __('Privacy page', 'pdpa-consent'), // title
array( $this, 'url_callback' ), // callback
'settings', // page
'_pdpa_setting_section' // section
@@ -125,7 +131,7 @@ public function _section_fields() {
add_settings_field(
'is_enable', // id
- __( 'Enable consent noti','pdpa-consent' ), // title
+ __('Enable consent noti', 'pdpa-consent'), // title
array( $this, 'is_enable_callback' ), // callback
'settings', // page
'_pdpa_setting_section' // section
@@ -159,203 +165,220 @@ public function _section_fields() {
add_settings_field(
'is_darkmode', // id
- __( 'Use dark theme','pdpa-consent' ), // title
+ __('Use dark theme', 'pdpa-consent'), // title
array( $this, 'is_darkmode_callback' ), // callback
'settings', // page
'_pdpa_setting_section' // section
);
add_settings_field(
'allow_button_color', // id
- __( 'Allow button color','pdpa-consent' ), // title
+ __('Allow button color', 'pdpa-consent'), // title
array( $this, 'allow_button_color_callback' ), // callback
'settings', // page
'_pdpa_setting_section' // section
);
add_settings_field(
'not_allow_button_color', // id
- __( 'Not allow button color','pdpa-consent' ), // title
+ __('Not allow button color', 'pdpa-consent'), // title
array( $this, 'not_allow_button_color_callback' ), // callback
'settings', // page
'_pdpa_setting_section' // section
);
add_settings_field(
'popup_type', // id
- __( 'Notification popup type','pdpa-consent' ), // title
+ __('Notification popup type', 'pdpa-consent'), // title
array( $this, 'popup_type_callback' ), // callback
'settings', // page
'_pdpa_setting_section' // section
);
add_settings_field(
'popup_message', // id
- __( 'Popup message','pdpa-consent' ), // title
+ __('Popup message', 'pdpa-consent'), // title
array( $this, 'popup_message_callback' ), // callback
'settings', // page
'_pdpa_setting_section' // section
);
add_settings_field(
'website_name', // id
- __( 'Website name (*)','pdpa-consent' ), // title
+ __('Website name (*)', 'pdpa-consent'), // title
array( $this, 'website_name_callback' ), // callback
'settings', // page
'_pdpa_setting_section' // section
);
add_settings_field(
'site_description', // id
- __( 'Web description','pdpa-consent' ), // title
+ __('Web description', 'pdpa-consent'), // title
array( $this, 'description_callback' ), // callback
'settings', // page
'_pdpa_setting_section' // section
);
add_settings_field(
'list_data', // id
- __( 'List of user data (*) (one data set per line)','pdpa-consent' ), // title
+ __('List of user data (*) (one data set per line)', 'pdpa-consent'), // title
array( $this, 'list_data_callback' ), // callback
'settings', // page
'_pdpa_setting_section' // section
);
add_settings_field(
'site_address', // id
- __( 'Address (*)','pdpa-consent' ), // title
+ __('Address (*)', 'pdpa-consent'), // title
array( $this, 'address_callback' ), // callback
'settings', // page
'_pdpa_setting_section' // section
);
add_settings_field(
'site_contact', // id
- __( 'Contact','pdpa-consent' ), // title
+ __('Contact', 'pdpa-consent'), // title
array( $this, 'contact_callback' ), // callback
'settings', // page
'_pdpa_setting_section' // section
);
add_settings_field(
'site_email', // id
- __( 'Email (*)','pdpa-consent' ), // title
+ __('Email (*)', 'pdpa-consent'), // title
array( $this, 'email_callback' ), // callback
'settings', // page
'_pdpa_setting_section' // section
);
add_settings_field(
'custom_css', // id
- __( 'CSS Class','pdpa-consent' ), // title
+ __('CSS Class', 'pdpa-consent'), // title
array( $this, 'custom_css_callback' ), // callback
'settings', // page
'_pdpa_setting_section' // section
);
}
- function url_callback() {
+ public function url_callback()
+ {
printf(
- '%s ' ,
+ '%s ',
$this->page_id,
esc_url(get_site_url().'/?p='.$this->page_id),
esc_url(get_admin_url().'post.php?post='.get_option('pdpa-consent-page-id').'&action=edit')
);
}
- function is_enable_callback() {
+ public function is_enable_callback()
+ {
printf(
- ' ' ,
+ ' ',
$this->options['is_enable'] == true ? 'checked' : ''
);
}
- function allow_user_reset_callback() {
+ public function allow_user_reset_callback()
+ {
printf(
- ' ' ,
+ ' ',
$this->options['allow_user_reset'] == true ? 'checked' : ''
);
}
- function allow_user_delete_callback() {
+ public function allow_user_delete_callback()
+ {
printf(
- ' ' ,
+ ' ',
$this->options['allow_user_delete'] == true ? 'checked' : ''
);
}
- function allow_user_download_callback() {
+ public function allow_user_download_callback()
+ {
printf(
- ' ' ,
+ ' ',
$this->options['allow_user_download'] == true ? 'checked' : ''
);
}
- function is_darkmode_callback() {
+ public function is_darkmode_callback()
+ {
printf(
- ' ' ,
+ ' ',
$this->options['is_darkmode'] == true ? 'checked' : ''
);
}
- function allow_button_color_callback() {
+ public function allow_button_color_callback()
+ {
printf(
- ' ' ,
+ ' ',
$this->options['allow_button_color']
);
}
- function not_allow_button_color_callback() {
+ public function not_allow_button_color_callback()
+ {
printf(
- ' ' ,
+ ' ',
$this->options['not_allow_button_color']
);
}
- function popup_type_callback() {
+ public function popup_type_callback()
+ {
?>
- options['popup_type'] == 'top' ? 'selected' : '';?>>
- options['popup_type'] == 'center' ? 'selected' : '';?>>
- options['popup_type'] == 'bottom' ? 'selected' : '';?>>
+ options['popup_type'] == 'top' ? 'selected' : ''; ?>>
+ options['popup_type'] == 'center' ? 'selected' : ''; ?>>
+ options['popup_type'] == 'bottom' ? 'selected' : ''; ?>>
%s' ,
- isset( $this->options['popup_message'] ) ? esc_html( $this->options['popup_message']) : __('Your privacy is important to us. We need your data just for the important process of services. Please allow if you accept the term of privacy comply with PDPA.', 'pdpa-consent')
+ '',
+ isset($this->options['popup_message']) ? esc_html($this->options['popup_message']) : __('Your privacy is important to us. We need your data just for the important process of services. Please allow if you accept the term of privacy comply with PDPA.', 'pdpa-consent')
);
}
- function website_name_callback() {
+ public function website_name_callback()
+ {
printf(
- ' ' ,
- isset( $this->options['website_name'] ) ? esc_html( $this->options['website_name']) : '',
+ ' ',
+ isset($this->options['website_name']) ? esc_html($this->options['website_name']) : '',
__('Your website name or Company name', 'pdpa-consent')
);
}
- function description_callback() {
+ public function description_callback()
+ {
printf(
- ' ' ,
- isset( $this->options['site_description'] ) ? esc_html( $this->options['site_description']) : ''
+ ' ',
+ isset($this->options['site_description']) ? esc_html($this->options['site_description']) : ''
);
}
- function list_data_callback() {
+ public function list_data_callback()
+ {
printf(
- '' ,
+ '',
__("Fullname\nBirthday\nEtc."),
- isset( $this->options['list_data'] ) ? esc_html( $this->options['list_data']) : ''
+ isset($this->options['list_data']) ? esc_html($this->options['list_data']) : ''
);
}
- function address_callback() {
+ public function address_callback()
+ {
printf(
- ' ' ,
- isset( $this->options['site_address'] ) ? esc_html( $this->options['site_address']) : ''
+ ' ',
+ isset($this->options['site_address']) ? esc_html($this->options['site_address']) : ''
);
}
- function contact_callback() {
+ public function contact_callback()
+ {
printf(
- ' ' ,
- isset( $this->options['site_contact'] ) ? esc_html( $this->options['site_contact']) : '',
+ ' ',
+ isset($this->options['site_contact']) ? esc_html($this->options['site_contact']) : '',
__("Such as John Doe (081-111-1111)", 'pdpa-consent')
);
}
- function email_callback() {
+ public function email_callback()
+ {
printf(
- ' ' ,
- isset( $this->options['site_email'] ) ? esc_html( $this->options['site_email']) : ''
+ ' ',
+ isset($this->options['site_email']) ? esc_html($this->options['site_email']) : ''
);
}
- function custom_css_callback() {
+ public function custom_css_callback()
+ {
?>
+
+
-
Version: plugin_info['Version'];?>, Development by plugin_info['Author']; ?>
+
Version: plugin_info['Version']; ?>, Development by plugin_info['Author']; ?>
',
- isset($this->options['site_email']) ? esc_html($this->options['site_email']) : ''
+ isset($this->options['site_email']) ? sanitize_email($this->options['site_email']) : ''
);
}
@@ -384,6 +397,7 @@ public function custom_css_callback()
.pdpa-admin-table {
border: 1px solid #eee;
padding: 0px;
+ background-color: #fff;
}
.pdpa-admin-table tr td:first-child {
color: #a23a08;
diff --git a/includes/user.php b/includes/user.php
new file mode 100644
index 0000000..13c0233
--- /dev/null
+++ b/includes/user.php
@@ -0,0 +1,18 @@
+
+ */
+
+Class pdpa_consent_user {
+ public function __construct() {
+ }
+
+ public function user_page() {
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/includes/user_template.php b/includes/user_template.php
new file mode 100644
index 0000000..f3ee6d6
--- /dev/null
+++ b/includes/user_template.php
@@ -0,0 +1,14 @@
+
\ No newline at end of file
diff --git a/pdpa-consent.php b/pdpa-consent.php
index c1dc6c0..3751393 100644
--- a/pdpa-consent.php
+++ b/pdpa-consent.php
@@ -22,8 +22,10 @@
}
define('PDPA_PATH', plugin_dir_path(__FILE__));
-// Include Admin options
-include_once(PDPA_PATH . 'admin.php');
+// Includes
+include_once(PDPA_PATH . 'includes/admin.php');
+include_once(PDPA_PATH . 'includes/user.php');
+
// Check get_plugin_data exists.
if (!function_exists('get_plugin_data')) {
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
@@ -52,26 +54,61 @@ public function __construct()
$this->initial();
new pdpa_consent_admin_option;
+ // new pdpa_consent_user;
}
public function initial()
{
+ register_activation_hook( __FILE__, array( $this, 'plugin_activate' ));
add_filter('body_class', array( $this, 'change_body_class' ));
add_action('wp_body_open', array($this, 'add_consent'));
add_action('wp_ajax_pdpa_action', array( $this, 'pdpa_action' ));
add_action('wp_enqueue_scripts', array( $this, 'pdpa_enqueue_scripts' ));
add_filter('manage_users_columns', array( $this, 'pdpa_add_user_columns' ));
add_filter('manage_users_custom_column', array( $this, 'pdpa_add_user_column_data' ), 10, 3);
+ add_action('admin_init', array( $this, 'load_plugin' ));
+ }
+
+ public function plugin_activate() {
+ add_option( 'Activated_Plugin', $this->plugin_info['TextDomain'] );
+ }
+
+ public function load_plugin() {
+ if (is_admin() && get_option('Activated_Plugin') == $this->plugin_info['TextDomain']) {
+ $this->generate_pdpa_user_page();
+ if(!get_option('pdpa-consent-page-id')) {
+ add_action('admin_notices', array( $this, 'setup_admin_notice' ));
+ }
+ }
}
public function setup_admin_notice()
{
- global $pagenow;
echo '
'.__('Please setup PDPA Consent setting in plugin page. ', 'pdpa-consent').'
';
}
+ public function generate_pdpa_user_page() {
+ if(!get_option('pdpa-consent-user_privacy-page')) {
+ $page_details = array(
+ 'post_title' => __('User Privacy', 'pdpa-consent'),
+ 'post_name' => 'pdpa-user-privacy',
+ 'post_content' => '[pdpa_user_page]',
+ 'post_status' => 'publish',
+ 'post_author' => 1,
+ 'post_type' => 'page'
+ );
+
+ $page_id = wp_insert_post($page_details);
+ add_option('pdpa-consent-user_privacy-page', $page_id);
+
+ echo '
+
'.__('User privacy page is created View page ', 'pdpa-consent').'
+
';
+ }
+ }
+
public function pdpa_enqueue_scripts()
{
wp_enqueue_style('pdpa-consent', plugins_url('assets/pdpa-consent.min.css', __FILE__), array(), $this->plugin_info['Version']);
@@ -135,12 +172,12 @@ public function pdpa_action()
$pdpa_meta = get_user_meta($current_user, 'pdpa_status', true);
if ($pdpa_meta == '') {
- add_user_meta($current_user, 'pdpa_status', $_POST['set_status']);
+ add_user_meta( $current_user, 'pdpa_status', esc_html( $_POST['set_status'] ));
} else {
- update_user_meta($current_user, 'pdpa_status', $_POST['set_status']);
+ update_user_meta($current_user, 'pdpa_status', esc_html( $_POST['set_status'] ));
}
- switch ($_POST['set_status']) {
+ switch (esc_html( $_POST['set_status'] )) {
case 'pdpa-allow':
if (!$this->pdpa_cookies_accepted()) {
$this->wpsc_set_cookie();
From 81fbebd98a16ed04bfe6e178c3e9b60473360634 Mon Sep 17 00:00:00 2001
From: Apinan Woratrakun
Date: Thu, 14 May 2020 18:14:13 +0700
Subject: [PATCH 3/6] update readme and template
---
README.md | 39 +++++++++++++++++----
assets/pdpa-consent-user.css | 59 ++++++++++++++++++++++++++++++++
assets/pdpa-consent-user.js | 3 ++
assets/pdpa-consent-user.min.css | 1 +
assets/pdpa-consent-user.min.js | 3 ++
includes/user.php | 18 ++++++----
includes/user_template.php | 24 ++++++++-----
pdpa-consent.php | 25 +++++++-------
readme.txt | 34 +++++++++++++++---
templates/en_US.html | 10 ++++++
templates/th_TH.html | 10 ++++++
11 files changed, 189 insertions(+), 37 deletions(-)
create mode 100644 assets/pdpa-consent-user.css
create mode 100644 assets/pdpa-consent-user.js
create mode 100644 assets/pdpa-consent-user.min.css
create mode 100644 assets/pdpa-consent-user.min.js
diff --git a/README.md b/README.md
index b715296..9e49090 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,21 @@
![assets/pdpa-consent-banner.png](assets/pdpa-consent-banner.png)
This WordPress plugin help you to generate Thailand PDPA consent terms page and consent notification popup.
-You can edit the term page and publish on your website with elegant and powerful solution. !!! No jquery need at all.
+You can edit the term page and publish on your website with elegant and powerful solution. !!! No jquery need at all.
+
+### Code of conduct
+
+- ปลั๊กอิน PDPA Consent นี้จัดทำขึ้นเพื่อตอบสนองต่อการปฏิบัติตาม พ.ร.บ.คุ้มครองข้อมูลส่วนบุคคล 2562 (PDPA) ของประเทศไทย
+- ปลั๊กอิน PDPA Consent นี้จัดทำขึ้นเพื่อแจกฟรี
+- ปลั๊กอิน PDPA Consent ไม่มีความประสงค์ที่จะจัดเก็บค่าใช้งานแต่อย่างใด
+- ไม่ได้รับประกันในด้านความปลอดภัย
+- ปลั๊กอิน PDPA Consent ไม่ได้ป้องกันการฟ้องร้องที่อาจเกิดขึ้นโดยคู่กรณีได้
+- ผู้ใช้งานปลั๊กอิน PDPA Consent เป็นผู้รับผิดชอบและตัดสินใจต่อการใช้และรักษาความปลอดภัยของข้อมูล
+- ปลั๊กอิน PDPA Consent ไม่ได้เป็นผู้ประมวลผลข้อมูลหรือใช้ข้อมูลส่วนบุคคล
+- ปลั๊กอิน PDPA Consent ไม่ได้เป็นผู้บล็อคการทำงานส่วนใดของเว็บไซต์
+- ปลั๊กอิน PDPA Consent จะมีการปรับปรุงเงื่อนไข PDPA ให้รัดกุมมากขึ้นเสมอ
+- การบริจาคมิใช่เพื่อเป็นสิ่งแลกเปลี่ยนในการใช้งานปลั๊กอิน PDPA Consent
+
### Download new release
-> [Release page is here.](https://github.com/iamapinan/PDPA-Consent/releases)
@@ -16,18 +30,30 @@ You can edit the term page and publish on your website with elegant and powerful
* Identity setup
* Popup placement
* Consent page generate
-* Custom CSS
+* CSS Class for developer
+* Dark mode
+* Button color config
* Support WP Super Cache (idea from Cookie Notice plugin)
* Save user action to database
* Display user PDPA Status on user list
+* Responsive
* Multi language support (Thai, English) more translate is accept
### Roadmap
-* Allow user to request profile data.
-* Allow user to request to delete account.
-* Allow user to allow consent again.
-* User page.
+* หน้าจัดการข้อมูลของผู้ใช้
+* ผู้ใช้สามารถขอถ่ายโอนข้อมูลได้
+* ผู้ใช้สามารถลบหรือขอให้ลบข้อมูลได้ ขึ้นกับนโยบาย
+* ผู้ใช้สามารถเลือกการยินยอมใหม่ได้
+* ผู้ใช้สามารถแก้ไข/ขอให้แก้ไข ข้อมูลที่ยินยอมได้
+* ผู้ใช้สามารถเลือกประเภทข้อมูลที่ยินยอมและไม่ยินยอมได้
+* แบ่งประเภทข้อมูล พืื้นฐาน, ละเอียดอ่อน, ท้างอ้อม
+* เพิ่มเรื่อง การจัดเก็บข้อมูลแต่ละประเภท
+* เพิ่มเรื่อง การเผยแพร่ข้อมูลผ่าน API หรือไม่
+* เพิ่มเรื่อง การส่งข้อมูลไปต่างประเทศ หรือไม่
+* Wizard การตั้งค่า
+* ให้ผู้ใช้ต้องติ๊กถูกก่อนคลิกยินยอม โดยค่าเริ่มต้นคือไม่ติ๊ก
+* บันทึกประวัติการ ยินยอม/ไม่ยินยอม ย้อนหลัง
### Contributors.
- **Apinan Woratrakun** *as developer* , ,
@@ -37,6 +63,7 @@ You can edit the term page and publish on your website with elegant and powerful
### Special Thank
* Thai Programmer Association
+* WordPress Bangkok friends
### Changelogs
diff --git a/assets/pdpa-consent-user.css b/assets/pdpa-consent-user.css
new file mode 100644
index 0000000..a49df95
--- /dev/null
+++ b/assets/pdpa-consent-user.css
@@ -0,0 +1,59 @@
+/**
+* User privacy page style
+*/
+.pdpa_user_warp {
+ display: flex;
+ flex-direction: column;
+}
+.pdpa_user_warp .user_toolbar {
+ justify-content: center;
+ flex-direction: row;
+ display: flex;
+}
+.pdpa_user_warp button {
+ padding: 10px 25px;
+ border-radius: 30px;
+ font-size: 16px;
+ margin: 3px;
+}
+.pdpa_user_warp .profile-header-top {
+ display: flex;
+ justify-content: flex-start;
+ flex-direction: row;
+ background: rgb(170,34,195);
+ background: linear-gradient(0deg, rgba(170,34,195,1) 0%, rgba(253,45,121,1) 100%);
+ height: 150px;
+ padding: 10px;
+ margin-bottom: 25px;
+ margin-top: 25px;
+ border-radius: 8px;
+}
+
+.pdpa_user_warp .profile-header-top img {
+ border-radius: 50%;
+ width: 96px;
+ height: 96px;
+ margin-top: 20px;
+ margin-left: 20px;
+}
+
+.pdpa_user_warp .profile-header-top .user_title {
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ padding-left: 25px;
+}
+.profile-header-top .user_title h3{
+ margin-bottom: 10px;
+ color: #fff;
+}
+.profile-header-top .user_title p {
+ color: rgb(255, 236, 221);
+ font-size: 0.8em;
+}
+.profile-header-top .user_title span {
+ vertical-align: middle;
+}
+.profile-header-top .user_title .status_bage {
+ color: #fff;
+}
diff --git a/assets/pdpa-consent-user.js b/assets/pdpa-consent-user.js
new file mode 100644
index 0000000..c53e62b
--- /dev/null
+++ b/assets/pdpa-consent-user.js
@@ -0,0 +1,3 @@
+(()=>{
+
+})
\ No newline at end of file
diff --git a/assets/pdpa-consent-user.min.css b/assets/pdpa-consent-user.min.css
new file mode 100644
index 0000000..80a35cb
--- /dev/null
+++ b/assets/pdpa-consent-user.min.css
@@ -0,0 +1 @@
+.pdpa_user_warp{display:flex;flex-direction:column}.pdpa_user_warp button{padding:10px 25px;border-radius:30px;font-size:16px}.pdpa_user_warp .profile-header-top{display:flex;justify-content:flex-start;flex-direction:row;background:#aa22c3;background:linear-gradient(0deg,rgba(170,34,195,1) 0,rgba(253,45,121,1) 100%);height:150px;padding:10px;margin-bottom:25px;margin-top:25px;border-radius:8px}.pdpa_user_warp .profile-header-top img{border-radius:50%;width:96px;height:96px;margin-top:20px;margin-left:20px}.pdpa_user_warp .profile-header-top .user_title{display:flex;flex-direction:column;justify-content:flex-start;padding-left:25px}.pdpa_user_warp .profile-header-top .user_title h3{margin-bottom:10px;color:#fff}.pdpa_user_warp .profile-header-top .user_title p{color:#fff}
\ No newline at end of file
diff --git a/assets/pdpa-consent-user.min.js b/assets/pdpa-consent-user.min.js
new file mode 100644
index 0000000..c53e62b
--- /dev/null
+++ b/assets/pdpa-consent-user.min.js
@@ -0,0 +1,3 @@
+(()=>{
+
+})
\ No newline at end of file
diff --git a/includes/user.php b/includes/user.php
index 13c0233..b0f2585 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -6,13 +6,17 @@
* (c) Apinan Woratrakun
*/
-Class pdpa_consent_user {
- public function __construct() {
- }
+function load_script() {
+ wp_enqueue_style('pdpa-consent-user', plugins_url('pdpa-consent/assets/pdpa-consent-user.css'), array(), date('m', time()));
+ wp_enqueue_script('pdpa-consent-user', plugins_url('pdpa-consent/assets/pdpa-consent-user.js'), array(), date('m', time()));
+}
- public function user_page() {
- }
+function user_page_shortcode( $atts ) {
+ $user_id = get_current_user_id();
+ $user_info = get_userdata($user_id);
-
-}
\ No newline at end of file
+ load_script();
+ require_once('user_template.php');
+}
+add_shortcode( 'pdpa_user_page', 'user_page_shortcode' );
\ No newline at end of file
diff --git a/includes/user_template.php b/includes/user_template.php
index f3ee6d6..7a5f42c 100644
--- a/includes/user_template.php
+++ b/includes/user_template.php
@@ -1,14 +1,22 @@
\ No newline at end of file
diff --git a/pdpa-consent.php b/pdpa-consent.php
index 3751393..57a9fa8 100644
--- a/pdpa-consent.php
+++ b/pdpa-consent.php
@@ -21,16 +21,16 @@
exit;
}
-define('PDPA_PATH', plugin_dir_path(__FILE__));
-// Includes
-include_once(PDPA_PATH . 'includes/admin.php');
-include_once(PDPA_PATH . 'includes/user.php');
-
// Check get_plugin_data exists.
if (!function_exists('get_plugin_data')) {
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
}
+define('PDPA_PATH', plugin_dir_path(__FILE__));
+// Includes
+include_once(PDPA_PATH . 'includes/admin.php');
+include_once(PDPA_PATH . 'includes/user.php');
+
class pdpa_Consent
{
private $ver;
@@ -54,7 +54,6 @@ public function __construct()
$this->initial();
new pdpa_consent_admin_option;
- // new pdpa_consent_user;
}
public function initial()
@@ -76,17 +75,17 @@ public function plugin_activate() {
public function load_plugin() {
if (is_admin() && get_option('Activated_Plugin') == $this->plugin_info['TextDomain']) {
$this->generate_pdpa_user_page();
- if(!get_option('pdpa-consent-page-id')) {
- add_action('admin_notices', array( $this, 'setup_admin_notice' ));
- }
+ add_action('admin_notices', array( $this, 'setup_admin_notice' ));
}
}
public function setup_admin_notice()
{
- echo '
-
'.__('Please setup PDPA Consent setting in plugin page. ', 'pdpa-consent').'
-
';
+ if (!get_option('pdpa-consent-page-id')) {
+ echo '
+
'.__('Please setup PDPA Consent setting in plugin page. ', 'pdpa-consent').'
+
';
+ }
}
public function generate_pdpa_user_page() {
@@ -173,8 +172,10 @@ public function pdpa_action()
if ($pdpa_meta == '') {
add_user_meta( $current_user, 'pdpa_status', esc_html( $_POST['set_status'] ));
+ add_user_meta( $current_user, 'pdpa_status_time', time());
} else {
update_user_meta($current_user, 'pdpa_status', esc_html( $_POST['set_status'] ));
+ update_user_meta( $current_user, 'pdpa_status_time', time());
}
switch (esc_html( $_POST['set_status'] )) {
diff --git a/readme.txt b/readme.txt
index 1db014c..4dbe917 100644
--- a/readme.txt
+++ b/readme.txt
@@ -21,6 +21,18 @@ You can edit the term page and publish on your website with elegant and powerful
Personal Data Protection Act B.E. 2562 (2019) or PDPA is the law to protect user privacy informations of Thailand.
It was adopted into law on May 28, 2019, after being published in the Royal Thai Government
+== Code of conduct ==
+- ปลั๊กอิน PDPA Consent นี้จัดทำขึ้นเพื่อตอบสนองต่อการปฏิบัติตาม พ.ร.บ.คุ้มครองข้อมูลส่วนบุคคล 2562 (PDPA) ของประเทศไทย
+- ปลั๊กอิน PDPA Consent นี้จัดทำขึ้นเพื่อแจกฟรี
+- ปลั๊กอิน PDPA Consent ไม่มีความประสงค์ที่จะจัดเก็บค่าใช้งานแต่อย่างใด
+- ไม่ได้รับประกันในด้านความปลอดภัย
+- ปลั๊กอิน PDPA Consent ไม่ได้ป้องกันการฟ้องร้องที่อาจเกิดขึ้นโดยคู่กรณีได้
+- ผู้ใช้งานปลั๊กอิน PDPA Consent เป็นผู้รับผิดชอบและตัดสินใจต่อการใช้และรักษาความปลอดภัยของข้อมูล
+- ปลั๊กอิน PDPA Consent ไม่ได้เป็นผู้ประมวลผลข้อมูลหรือใช้ข้อมูลส่วนบุคคล
+- ปลั๊กอิน PDPA Consent ไม่ได้เป็นผู้บล็อคการทำงานส่วนใดของเว็บไซต์
+- ปลั๊กอิน PDPA Consent จะมีการปรับปรุงเงื่อนไข PDPA ให้รัดกุมมากขึ้นเสมอ
+- การบริจาคมิใช่เพื่อเป็นสิ่งแลกเปลี่ยนในการใช้งานปลั๊กอิน PDPA Consent
+
= Features include: =
* Customizable message
@@ -38,10 +50,24 @@ It was adopted into law on May 28, 2019, after being published in the Royal Thai
== Roadmap ==
-* Allow user to request profile data.
-* Allow user to request to delete account.
-* Allow user to allow consent again.
-* User page.
+* หน้าจัดการข้อมูลของผู้ใช้
+* ผู้ใช้สามารถขอถ่ายโอนข้อมูลได้
+* ผู้ใช้สามารถลบหรือขอให้ลบข้อมูลได้ ขึ้นกับนโยบาย
+* ผู้ใช้สามารถเลือกการยินยอมใหม่ได้
+* ผู้ใช้สามารถแก้ไข/ขอให้แก้ไข ข้อมูลที่ยินยอมได้
+* ผู้ใช้สามารถเลือกประเภทข้อมูลที่ยินยอมและไม่ยินยอมได้
+* แบ่งประเภทข้อมูล พืื้นฐาน, ละเอียดอ่อน, ท้างอ้อม
+* เพิ่มเรื่อง การจัดเก็บข้อมูลแต่ละประเภท
+* เพิ่มเรื่อง การเผยแพร่ข้อมูลผ่าน API หรือไม่
+* เพิ่มเรื่อง การส่งข้อมูลไปต่างประเทศ หรือไม่
+* Wizard การตั้งค่า
+* ให้ผู้ใช้ต้องติ๊กถูกก่อนคลิกยินยอม โดยค่าเริ่มต้นคือไม่ติ๊ก
+* บันทึกประวัติการ ยินยอม/ไม่ยินยอม ย้อนหลัง
+
+== Special Thank ==
+
+* Thai Programmer Association
+* WordPress Bangkok friends
= Get involved =
diff --git a/templates/en_US.html b/templates/en_US.html
index c851007..e2649d6 100644
--- a/templates/en_US.html
+++ b/templates/en_US.html
@@ -3,6 +3,15 @@ นิยามข้อมูลส่วนบุคคล
ข้อมูลส่วนบุคคลที่เก็บรวบรวม
[service] จะใช้วิธีการที่ชอบด้วยกฏหมายและเป็นธรรมในการเก็บรวบรวมข้อมูลส่วนบุคคลอย่างจำกัดเพียงเท่าที่จำเป็น
ภายใต้วัตถุประสงค์การทำงานของ [service] ที่เป็น [description] โดยจะเก็บรวบรวมข้อมูลส่วนบุคคลของท่าน ดังนี้
+ข้อมูลพื้นฐาน
+
+ข้อมูลทางอ้อม
+
+ข้อมูลละเอียดอ่อน
@@ -34,6 +43,7 @@ สิทธิของเจ้าของข้อมูล
เว้นแต่มีข้อจำกัดสิทธิโดยกฏหมาย
ท่านสามารถติดต่อ [service] เพื่อให้ดำเนินการตามสิทธิข้างต้นได้ โดยไม่มีค่าใช้จ่ายใดๆ และจะแจ้งผลตามคำร้อง ภายใน 30
วัน
+หากพบการรั่วไหมของข้อมูล ทาง [service] จะดำเนินการแจ้งให้ท่านทราบภายใน 72 ชั่วโมง
ช่องทางติดต่อ
ผู้ควบคุมข้อมูลส่วนบุคคล
diff --git a/templates/th_TH.html b/templates/th_TH.html
index c851007..e2649d6 100644
--- a/templates/th_TH.html
+++ b/templates/th_TH.html
@@ -3,6 +3,15 @@ นิยามข้อมูลส่วนบุคคล
ข้อมูลส่วนบุคคลที่เก็บรวบรวม
[service] จะใช้วิธีการที่ชอบด้วยกฏหมายและเป็นธรรมในการเก็บรวบรวมข้อมูลส่วนบุคคลอย่างจำกัดเพียงเท่าที่จำเป็น
ภายใต้วัตถุประสงค์การทำงานของ [service] ที่เป็น [description] โดยจะเก็บรวบรวมข้อมูลส่วนบุคคลของท่าน ดังนี้
+ข้อมูลพื้นฐาน
+
+ข้อมูลทางอ้อม
+
+ข้อมูลละเอียดอ่อน
@@ -34,6 +43,7 @@ สิทธิของเจ้าของข้อมูล
เว้นแต่มีข้อจำกัดสิทธิโดยกฏหมาย
ท่านสามารถติดต่อ [service] เพื่อให้ดำเนินการตามสิทธิข้างต้นได้ โดยไม่มีค่าใช้จ่ายใดๆ และจะแจ้งผลตามคำร้อง ภายใน 30
วัน
+หากพบการรั่วไหมของข้อมูล ทาง [service] จะดำเนินการแจ้งให้ท่านทราบภายใน 72 ชั่วโมง
ช่องทางติดต่อ
ผู้ควบคุมข้อมูลส่วนบุคคล
From ebb3b6f0e2518c1d09a813c783c4609561c80736 Mon Sep 17 00:00:00 2001
From: Apinan Woratrakun
Date: Thu, 14 May 2020 18:19:58 +0700
Subject: [PATCH 4/6] fixed word
---
README.md | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/README.md b/README.md
index 9e49090..2757755 100644
--- a/README.md
+++ b/README.md
@@ -5,15 +5,15 @@ You can edit the term page and publish on your website with elegant and powerful
### Code of conduct
-- ปลั๊กอิน PDPA Consent นี้จัดทำขึ้นเพื่อตอบสนองต่อการปฏิบัติตาม พ.ร.บ.คุ้มครองข้อมูลส่วนบุคคล 2562 (PDPA) ของประเทศไทย
-- ปลั๊กอิน PDPA Consent นี้จัดทำขึ้นเพื่อแจกฟรี
-- ปลั๊กอิน PDPA Consent ไม่มีความประสงค์ที่จะจัดเก็บค่าใช้งานแต่อย่างใด
-- ไม่ได้รับประกันในด้านความปลอดภัย
-- ปลั๊กอิน PDPA Consent ไม่ได้ป้องกันการฟ้องร้องที่อาจเกิดขึ้นโดยคู่กรณีได้
-- ผู้ใช้งานปลั๊กอิน PDPA Consent เป็นผู้รับผิดชอบและตัดสินใจต่อการใช้และรักษาความปลอดภัยของข้อมูล
-- ปลั๊กอิน PDPA Consent ไม่ได้เป็นผู้ประมวลผลข้อมูลหรือใช้ข้อมูลส่วนบุคคล
-- ปลั๊กอิน PDPA Consent ไม่ได้เป็นผู้บล็อคการทำงานส่วนใดของเว็บไซต์
-- ปลั๊กอิน PDPA Consent จะมีการปรับปรุงเงื่อนไข PDPA ให้รัดกุมมากขึ้นเสมอ
+- ปลั๊กอินนี้จัดทำขึ้นเพื่อตอบสนองต่อการปฏิบัติตาม พ.ร.บ.คุ้มครองข้อมูลส่วนบุคคล 2562 (PDPA) ของประเทศไทย
+- ปลั๊กอินนี้จัดทำขึ้นเพื่อแจกฟรี
+- ปลั๊กอินไม่มีความประสงค์ที่จะจัดเก็บค่าใช้งานแต่อย่างใด
+- ปลั๊กอินไม่ได้รับประกันในด้านความปลอดภัยต่อข้อมูล
+- ปลั๊กอินไม่ได้ป้องกันการฟ้องร้องที่อาจเกิดขึ้นโดยคู่กรณีได้
+- ผู้ใช้งานปลั๊กอินเป็นผู้รับผิดชอบและตัดสินใจต่อการใช้และรักษาความปลอดภัยของข้อมูล
+- ปลั๊กอินไม่ได้เป็นผู้ประมวลผลข้อมูลหรือใช้ข้อมูลส่วนบุคคล
+- ปลั๊กอินไม่ได้เป็นผู้บล็อคการทำงานส่วนหนึ่งส่วนใดของเว็บไซต์
+- ปลั๊กอินจะมีการปรับปรุงเงื่อนไข PDPA ให้รัดกุมมากขึ้นเสมอ
- การบริจาคมิใช่เพื่อเป็นสิ่งแลกเปลี่ยนในการใช้งานปลั๊กอิน PDPA Consent
@@ -43,15 +43,15 @@ You can edit the term page and publish on your website with elegant and powerful
* หน้าจัดการข้อมูลของผู้ใช้
* ผู้ใช้สามารถขอถ่ายโอนข้อมูลได้
-* ผู้ใช้สามารถลบหรือขอให้ลบข้อมูลได้ ขึ้นกับนโยบาย
+* ผู้ใช้สามารถ ลบหรือขอให้ลบข้อมูลได้ ขึ้นกับนโยบาย
* ผู้ใช้สามารถเลือกการยินยอมใหม่ได้
-* ผู้ใช้สามารถแก้ไข/ขอให้แก้ไข ข้อมูลที่ยินยอมได้
+* ผู้ใช้สามารถ แก้ไข/ขอให้แก้ไข ข้อมูลที่ยินยอมได้
* ผู้ใช้สามารถเลือกประเภทข้อมูลที่ยินยอมและไม่ยินยอมได้
-* แบ่งประเภทข้อมูล พืื้นฐาน, ละเอียดอ่อน, ท้างอ้อม
+* แบ่งประเภทข้อมูลพื้นฐาน, ข้อมูลละเอียดอ่อน, ข้อมูลทางอ้อม
* เพิ่มเรื่อง การจัดเก็บข้อมูลแต่ละประเภท
* เพิ่มเรื่อง การเผยแพร่ข้อมูลผ่าน API หรือไม่
* เพิ่มเรื่อง การส่งข้อมูลไปต่างประเทศ หรือไม่
-* Wizard การตั้งค่า
+* เพิ่ม Wizard การตั้งค่า
* ให้ผู้ใช้ต้องติ๊กถูกก่อนคลิกยินยอม โดยค่าเริ่มต้นคือไม่ติ๊ก
* บันทึกประวัติการ ยินยอม/ไม่ยินยอม ย้อนหลัง
@@ -73,4 +73,4 @@ You can edit the term page and publish on your website with elegant and powerful
* Use page id as privacy page url link
* List of css class for developer
* Remove custom css for security reason
-* Fix security and code style
\ No newline at end of file
+* Fix security and code style
From 5107abf02c5166fc6f85e6c99ad41e22b0d017b1 Mon Sep 17 00:00:00 2001
From: Apinan Woratrakun
Date: Fri, 15 May 2020 00:54:32 +0700
Subject: [PATCH 5/6] sanitize consent update status from api
---
README.md | 2 ++
pdpa-consent.php | 8 ++++----
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 9e49090..b0c8943 100644
--- a/README.md
+++ b/README.md
@@ -54,6 +54,8 @@ You can edit the term page and publish on your website with elegant and powerful
* Wizard การตั้งค่า
* ให้ผู้ใช้ต้องติ๊กถูกก่อนคลิกยินยอม โดยค่าเริ่มต้นคือไม่ติ๊ก
* บันทึกประวัติการ ยินยอม/ไม่ยินยอม ย้อนหลัง
+* API สำหรับขอความยินยอมเป็นครั้งคราว
+* Server อยู่ในต่างประเทศหรือไม่
### Contributors.
- **Apinan Woratrakun** *as developer* , ,
diff --git a/pdpa-consent.php b/pdpa-consent.php
index 57a9fa8..b48f042 100644
--- a/pdpa-consent.php
+++ b/pdpa-consent.php
@@ -169,16 +169,16 @@ public function pdpa_action()
$response = [];
$current_user = get_current_user_id();
$pdpa_meta = get_user_meta($current_user, 'pdpa_status', true);
-
+ $consent_set = sanitize_text_field( $_POST['set_status'] );
if ($pdpa_meta == '') {
- add_user_meta( $current_user, 'pdpa_status', esc_html( $_POST['set_status'] ));
+ add_user_meta( $current_user, 'pdpa_status', $consent_set );
add_user_meta( $current_user, 'pdpa_status_time', time());
} else {
- update_user_meta($current_user, 'pdpa_status', esc_html( $_POST['set_status'] ));
+ update_user_meta($current_user, 'pdpa_status', $consent_set );
update_user_meta( $current_user, 'pdpa_status_time', time());
}
- switch (esc_html( $_POST['set_status'] )) {
+ switch ( $consent_set ) {
case 'pdpa-allow':
if (!$this->pdpa_cookies_accepted()) {
$this->wpsc_set_cookie();
From 9a20bd4fa49038b10754c663abe74a73330a71b1 Mon Sep 17 00:00:00 2001
From: Apinan Woratrakun
Date: Fri, 15 May 2020 02:50:23 +0700
Subject: [PATCH 6/6] pre release 1.0.3
---
includes/user.php | 2 +-
pdpa-consent.php | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/includes/user.php b/includes/user.php
index b0f2585..f527be3 100644
--- a/includes/user.php
+++ b/includes/user.php
@@ -19,4 +19,4 @@ function user_page_shortcode( $atts ) {
load_script();
require_once('user_template.php');
}
-add_shortcode( 'pdpa_user_page', 'user_page_shortcode' );
\ No newline at end of file
+// add_shortcode( 'pdpa_user_page', 'user_page_shortcode' );
\ No newline at end of file
diff --git a/pdpa-consent.php b/pdpa-consent.php
index b48f042..ebce76c 100644
--- a/pdpa-consent.php
+++ b/pdpa-consent.php
@@ -74,7 +74,7 @@ public function plugin_activate() {
public function load_plugin() {
if (is_admin() && get_option('Activated_Plugin') == $this->plugin_info['TextDomain']) {
- $this->generate_pdpa_user_page();
+ // $this->generate_pdpa_user_page();
add_action('admin_notices', array( $this, 'setup_admin_notice' ));
}
}