2025-03-10 12:26:57 +08:00
< ? php
/**
* Plugin Name : LeLMS Copyright
* Plugin URI : https :// wenpai . org / plugins / lelms - copyright
* Description : Adds watermark with username and prevents unauthorized screenshots
2025-04-11 08:52:58 +08:00
* Version : 1.1 . 8
2025-03-10 12:26:57 +08:00
* Author : LeLMS . com
* Author URI : https :// lelms . com
* License : GPL v2 or later
* License URI : https :// www . gnu . org / licenses / gpl - 2.0 . html
* Requires at least : 5.9
* Requires PHP : 7.4
* Text Domain : lelms - copyright
* Domain Path : / languages
*/
if ( ! defined ( 'ABSPATH' )) {
exit ;
}
2025-04-11 08:52:58 +08:00
define ( 'LELMS_COPYRIGHT_VERSION' , '1.1.8' );
2025-04-06 22:13:55 +08:00
define ( 'LELMS_COPYRIGHT_DIR_URL' , plugin_dir_url ( __FILE__ ));
define ( 'LELMS_COPYRIGHT_DIR_PATH' , plugin_dir_path ( __FILE__ ));
define ( 'LELMS_COPYRIGHT_BASENAME' , plugin_basename ( __FILE__ ));
2025-03-10 12:26:57 +08:00
class LELMS_Copyright {
private $options ;
public function __construct () {
load_plugin_textdomain ( 'lelms-copyright' , false , dirname ( plugin_basename ( __FILE__ )) . '/languages/' );
$defaults = array (
'watermark_opacity' => 0.1 ,
'watermark_size' => 20 ,
'watermark_spacing' => 150 ,
'watermark_color' => '#000000' ,
'watermark_angle' => - 45 ,
'enable_devtools_protection' => 'yes' ,
'enable_print_protection' => 'yes' ,
2025-04-06 22:13:55 +08:00
'enable_copy_protection' => 'yes' ,
'enable_for_guests' => 'no' ,
'enable_guest_protection_only' => 'no' ,
'enable_guest_custom_watermark' => 'no' ,
'enable_custom_watermark' => 'no' ,
'custom_watermark_text' => '' ,
'watermark_type' => 'username' ,
'excluded_post_types' => array (),
'excluded_roles' => array (),
2025-03-10 12:26:57 +08:00
);
2025-04-06 23:13:37 +08:00
$current_options = get_option ( 'lelms_copyright_options' , false );
if ( $current_options === false ) {
update_option ( 'lelms_copyright_options' , $defaults );
$this -> options = $defaults ;
} else {
$this -> options = wp_parse_args ( $current_options , $defaults );
}
2025-03-10 12:26:57 +08:00
add_action ( 'wp_enqueue_scripts' , array ( $this , 'enqueue_scripts' ));
if ( did_action ( 'wp_body_open' )) {
add_action ( 'wp_body_open' , array ( $this , 'add_watermark_container' ));
} else {
add_action ( 'wp_footer' , array ( $this , 'add_watermark_container' ));
}
add_action ( 'admin_menu' , array ( $this , 'add_admin_menu' ));
add_action ( 'admin_init' , array ( $this , 'register_settings' ));
2025-04-06 22:13:55 +08:00
add_action ( 'wp_ajax_lelms_reset_options' , array ( $this , 'reset_options' ));
2025-03-10 12:26:57 +08:00
}
public function add_admin_menu () {
add_options_page (
__ ( 'LeLMS Copyright Settings' , 'lelms-copyright' ),
__ ( 'Copyright' , 'lelms-copyright' ),
'manage_options' ,
'lelms-copyright' ,
array ( $this , 'options_page' )
);
}
public function register_settings () {
2025-04-11 08:52:58 +08:00
register_setting ( 'lelms_copyright' , 'lelms_copyright_options' , array ( $this , 'sanitize_options' ));
2025-04-07 11:51:54 +08:00
2025-04-11 08:52:58 +08:00
if ( ! isset ( $_GET [ 'page' ]) || $_GET [ 'page' ] !== 'lelms-copyright' ) {
return ;
}
2025-03-10 12:26:57 +08:00
add_settings_section (
'lelms_copyright_section' ,
__ ( 'Watermark Settings' , 'lelms-copyright' ),
array ( $this , 'section_description' ),
'lelms-copyright'
);
2025-04-06 22:13:55 +08:00
add_settings_section (
'lelms_copyright_advanced_section' ,
__ ( 'Advanced Settings' , 'lelms-copyright' ),
array ( $this , 'advanced_section_description' ),
'lelms-copyright-advanced'
);
2025-03-10 12:26:57 +08:00
$this -> add_settings_fields ();
}
public function section_description () {
2025-04-06 23:13:37 +08:00
echo '<p>' . esc_html__ ( 'Customize the watermark appearance and protection settings to secure your content.' , 'lelms-copyright' ) . '</p>' ;
2025-03-10 12:26:57 +08:00
}
2025-04-06 22:13:55 +08:00
public function advanced_section_description () {
2025-04-06 23:13:37 +08:00
echo '<p>' . esc_html__ ( 'Configure advanced options to exclude specific post types or user roles from watermark and protection.' , 'lelms-copyright' ) . '</p>' ;
2025-04-06 22:13:55 +08:00
}
2025-03-10 12:26:57 +08:00
public function sanitize_options ( $input ) {
$sanitized = array ();
$defaults = array (
'watermark_opacity' => 0.1 ,
'watermark_size' => 20 ,
'watermark_spacing' => 150 ,
'watermark_color' => '#000000' ,
'watermark_angle' => - 45 ,
'enable_devtools_protection' => 'yes' ,
'enable_print_protection' => 'yes' ,
2025-04-06 22:13:55 +08:00
'enable_copy_protection' => 'yes' ,
'enable_for_guests' => 'no' ,
'enable_guest_protection_only' => 'no' ,
'enable_guest_custom_watermark' => 'no' ,
'enable_custom_watermark' => 'no' ,
'custom_watermark_text' => '' ,
'watermark_type' => 'username' ,
'excluded_post_types' => array (),
'excluded_roles' => array (),
2025-03-10 12:26:57 +08:00
);
$sanitized [ 'watermark_opacity' ] = min ( max ( floatval ( $input [ 'watermark_opacity' ]), 0 ), 1 );
$sanitized [ 'watermark_size' ] = absint ( $input [ 'watermark_size' ]);
$sanitized [ 'watermark_spacing' ] = absint ( $input [ 'watermark_spacing' ]);
$sanitized [ 'watermark_color' ] = sanitize_hex_color ( $input [ 'watermark_color' ]);
$sanitized [ 'watermark_angle' ] = intval ( $input [ 'watermark_angle' ]);
2025-04-11 08:52:58 +08:00
$sanitized [ 'enable_devtools_protection' ] = isset ( $input [ 'enable_devtools_protection' ]) && $input [ 'enable_devtools_protection' ] === 'yes' ? 'yes' : 'no' ;
2025-04-06 23:13:37 +08:00
$sanitized [ 'enable_print_protection' ] = isset ( $input [ 'enable_print_protection' ]) && $input [ 'enable_print_protection' ] === 'yes' ? 'yes' : 'no' ;
$sanitized [ 'enable_copy_protection' ] = isset ( $input [ 'enable_copy_protection' ]) && $input [ 'enable_copy_protection' ] === 'yes' ? 'yes' : 'no' ;
$sanitized [ 'enable_for_guests' ] = isset ( $input [ 'enable_for_guests' ]) && $input [ 'enable_for_guests' ] === 'yes' ? 'yes' : 'no' ;
$sanitized [ 'enable_guest_protection_only' ] = isset ( $input [ 'enable_guest_protection_only' ]) && $input [ 'enable_guest_protection_only' ] === 'yes' ? 'yes' : 'no' ;
$sanitized [ 'enable_guest_custom_watermark' ] = isset ( $input [ 'enable_guest_custom_watermark' ]) && $input [ 'enable_guest_custom_watermark' ] === 'yes' ? 'yes' : 'no' ;
$sanitized [ 'enable_custom_watermark' ] = isset ( $input [ 'enable_custom_watermark' ]) && $input [ 'enable_custom_watermark' ] === 'yes' ? 'yes' : 'no' ;
2025-04-06 22:13:55 +08:00
$sanitized [ 'custom_watermark_text' ] = sanitize_text_field ( $input [ 'custom_watermark_text' ]);
2025-04-11 08:52:58 +08:00
$sanitized [ 'watermark_type' ] = in_array ( $input [ 'watermark_type' ], [ 'none' , 'username' , 'nickname' , 'email' , 'timestamp' ]) ? $input [ 'watermark_type' ] : 'username' ;
2025-04-06 22:13:55 +08:00
$sanitized [ 'excluded_post_types' ] = array_map ( 'sanitize_key' , ( array ) $input [ 'excluded_post_types' ]);
$sanitized [ 'excluded_roles' ] = array_map ( 'sanitize_key' , ( array ) $input [ 'excluded_roles' ]);
2025-03-10 12:26:57 +08:00
return wp_parse_args ( $sanitized , $defaults );
}
2025-04-06 22:13:55 +08:00
public function should_apply_protection () {
$user = wp_get_current_user ();
$user_roles = $user && $user -> roles ? $user -> roles : array ( 'guest' );
if ( array_intersect ( $user_roles , ( array ) $this -> options [ 'excluded_roles' ])) {
return false ;
}
$post_type = get_post_type () ? : 'page' ;
if ( in_array ( $post_type , ( array ) $this -> options [ 'excluded_post_types' ])) {
return false ;
}
2025-04-11 08:52:58 +08:00
if ( ! is_user_logged_in ()) {
return $this -> options [ 'enable_for_guests' ] === 'yes' ;
}
2025-04-06 22:13:55 +08:00
return true ;
}
public function should_apply_watermark () {
if ( ! $this -> should_apply_protection ()) {
return false ;
}
2025-04-11 08:52:58 +08:00
if ( $this -> options [ 'watermark_type' ] === 'none' && $this -> options [ 'enable_custom_watermark' ] !== 'yes' ) {
return false ;
}
2025-04-06 22:13:55 +08:00
$is_guest = ! is_user_logged_in ();
if ( $is_guest ) {
return $this -> options [ 'enable_for_guests' ] === 'yes' && $this -> options [ 'enable_guest_custom_watermark' ] === 'yes' ;
}
2025-04-11 08:52:58 +08:00
return true ;
2025-04-06 22:13:55 +08:00
}
2025-03-10 12:26:57 +08:00
public function add_watermark_container () {
2025-04-06 22:13:55 +08:00
if ( $this -> should_apply_watermark ()) {
2025-03-10 12:26:57 +08:00
echo '<div id="lelms-watermark"></div>' ;
}
}
private function add_settings_fields () {
$fields = array (
'watermark_opacity' => array (
'title' => __ ( 'Watermark Opacity' , 'lelms-copyright' ),
'type' => 'number' ,
'attrs' => 'step="0.1" min="0" max="1"' ,
'description' => __ ( 'Set the transparency of the watermark (0 = fully transparent, 1 = fully opaque).' , 'lelms-copyright' )
),
'watermark_size' => array (
'title' => __ ( 'Watermark Size (px)' , 'lelms-copyright' ),
'type' => 'number' ,
'description' => __ ( 'Define the font size of the watermark text in pixels.' , 'lelms-copyright' )
),
'watermark_spacing' => array (
'title' => __ ( 'Watermark Spacing (px)' , 'lelms-copyright' ),
'type' => 'number' ,
'description' => __ ( 'Set the distance between each watermark in pixels.' , 'lelms-copyright' )
),
'watermark_color' => array (
'title' => __ ( 'Watermark Color' , 'lelms-copyright' ),
'type' => 'color' ,
'description' => __ ( 'Choose the color of the watermark text.' , 'lelms-copyright' )
),
'watermark_angle' => array (
'title' => __ ( 'Watermark Angle' , 'lelms-copyright' ),
'type' => 'number' ,
'description' => __ ( 'Set the rotation angle of the watermark text in degrees (e.g., -45 for diagonal).' , 'lelms-copyright' )
),
2025-04-06 22:13:55 +08:00
'watermark_type' => array (
'title' => __ ( 'Watermark Type' , 'lelms-copyright' ),
'type' => 'select' ,
'description' => __ ( 'Choose the type of watermark to display for logged-in users (overridden by custom watermark if enabled).' , 'lelms-copyright' ),
'options' => array (
2025-04-11 08:52:58 +08:00
'none' => __ ( 'No Watermark' , 'lelms-copyright' ),
2025-04-06 22:13:55 +08:00
'username' => __ ( 'Username' , 'lelms-copyright' ),
'nickname' => __ ( 'Nickname' , 'lelms-copyright' ),
'email' => __ ( 'Email' , 'lelms-copyright' ),
'timestamp' => __ ( 'Timestamp' , 'lelms-copyright' ),
),
),
2025-03-10 12:26:57 +08:00
'enable_devtools_protection' => array (
'title' => __ ( 'Enable DevTools Protection' , 'lelms-copyright' ),
'type' => 'checkbox' ,
'description' => __ ( 'Prevent users from opening browser developer tools (e.g., F12 or Ctrl+Shift+I).' , 'lelms-copyright' )
),
'enable_print_protection' => array (
'title' => __ ( 'Enable Print Protection' , 'lelms-copyright' ),
'type' => 'checkbox' ,
'description' => __ ( 'Block printing of the page to protect your content.' , 'lelms-copyright' )
),
'enable_copy_protection' => array (
'title' => __ ( 'Enable Copy Protection' , 'lelms-copyright' ),
'type' => 'checkbox' ,
'description' => __ ( 'Disable copying of text and right-click menus outside of form fields.' , 'lelms-copyright' )
2025-04-06 22:13:55 +08:00
),
'enable_for_guests' => array (
'title' => __ ( 'Enable Guest Mode' , 'lelms-copyright' ),
'type' => 'checkbox' ,
'description' => __ ( 'Enable protection features for non-logged-in users. Additional options will appear when checked.' , 'lelms-copyright' )
),
'enable_guest_protection_only' => array (
'title' => __ ( 'Enable Protection Only for Guests' , 'lelms-copyright' ),
'type' => 'checkbox' ,
'description' => __ ( 'Apply only protection features (no watermark) to non-logged-in users.' , 'lelms-copyright' )
),
'enable_guest_custom_watermark' => array (
'title' => __ ( 'Show Custom Watermark for Guests' , 'lelms-copyright' ),
'type' => 'checkbox' ,
'description' => __ ( 'Display the custom watermark text (defined below) for non-logged-in users.' , 'lelms-copyright' )
),
'enable_custom_watermark' => array (
'title' => __ ( 'Enable Custom Watermark' , 'lelms-copyright' ),
'type' => 'checkbox' ,
'description' => __ ( 'Use a custom watermark text instead of the selected watermark type.' , 'lelms-copyright' )
),
'custom_watermark_text' => array (
'title' => __ ( 'Custom Watermark Text' , 'lelms-copyright' ),
'type' => 'text' ,
'description' => __ ( 'Enter custom watermark text (applies if "Enable Custom Watermark" or "Show Custom Watermark for Guests" is checked). If empty, "LeLMS Copyright" will be used.' , 'lelms-copyright' )
),
2025-03-10 12:26:57 +08:00
);
foreach ( $fields as $key => $field ) {
add_settings_field (
$key ,
$field [ 'title' ],
array ( $this , 'render_field' ),
'lelms-copyright' ,
'lelms_copyright_section' ,
array (
'key' => $key ,
'type' => $field [ 'type' ],
'attrs' => isset ( $field [ 'attrs' ]) ? $field [ 'attrs' ] : '' ,
2025-04-06 22:13:55 +08:00
'description' => $field [ 'description' ],
'options' => isset ( $field [ 'options' ]) ? $field [ 'options' ] : array (),
)
);
}
$advanced_fields = array (
'excluded_post_types' => array (
'title' => __ ( 'Excluded Post Types' , 'lelms-copyright' ),
'type' => 'checkbox_group' ,
'description' => __ ( 'Select post types where watermark and protection should not apply.' , 'lelms-copyright' ),
'options' => $this -> get_public_post_types (),
),
'excluded_roles' => array (
'title' => __ ( 'Excluded User Roles' , 'lelms-copyright' ),
'type' => 'checkbox_group' ,
'description' => __ ( 'Select user roles exempt from watermark and protection.' , 'lelms-copyright' ),
'options' => $this -> get_user_roles (),
),
);
foreach ( $advanced_fields as $key => $field ) {
add_settings_field (
$key ,
$field [ 'title' ],
array ( $this , 'render_field' ),
'lelms-copyright-advanced' ,
'lelms_copyright_advanced_section' ,
array (
'key' => $key ,
'type' => $field [ 'type' ],
'description' => $field [ 'description' ],
'options' => $field [ 'options' ],
2025-03-10 12:26:57 +08:00
)
);
}
}
2025-04-06 22:13:55 +08:00
private function get_public_post_types () {
$post_types = get_post_types ( array ( 'public' => true ), 'objects' );
$options = array ();
foreach ( $post_types as $post_type ) {
$options [ $post_type -> name ] = $post_type -> label ;
}
return $options ;
}
private function get_user_roles () {
global $wp_roles ;
$roles = $wp_roles -> roles ;
$options = array ();
foreach ( $roles as $role => $details ) {
$options [ $role ] = $details [ 'name' ];
}
$options [ 'guest' ] = __ ( 'Guest (Not Logged In)' , 'lelms-copyright' );
return $options ;
}
2025-03-10 12:26:57 +08:00
public function render_field ( $args ) {
$key = $args [ 'key' ];
$type = $args [ 'type' ];
2025-04-06 22:13:55 +08:00
$value = $this -> options [ $key ];
2025-03-10 12:26:57 +08:00
$attrs = isset ( $args [ 'attrs' ]) ? $args [ 'attrs' ] : '' ;
$description = isset ( $args [ 'description' ]) ? $args [ 'description' ] : '' ;
2025-04-06 22:13:55 +08:00
$options = isset ( $args [ 'options' ]) ? $args [ 'options' ] : array ();
2025-03-10 12:26:57 +08:00
if ( $type === 'checkbox' ) {
printf (
'<input type="checkbox" name="lelms_copyright_options[%s]" %s value="yes" %s>' ,
esc_attr ( $key ),
$attrs ,
checked ( $value , 'yes' , false )
);
2025-04-06 22:13:55 +08:00
} elseif ( $type === 'select' ) {
printf ( '<select name="lelms_copyright_options[%s]" %s>' , esc_attr ( $key ), $attrs );
foreach ( $options as $opt_value => $opt_label ) {
printf ( '<option value="%s" %s>%s</option>' , esc_attr ( $opt_value ), selected ( $value , $opt_value , false ), esc_html ( $opt_label ));
}
echo '</select>' ;
} elseif ( $type === 'checkbox_group' ) {
$value = ( array ) $value ;
foreach ( $options as $opt_value => $opt_label ) {
printf (
'<label><input type="checkbox" name="lelms_copyright_options[%s][]" value="%s" %s> %s</label><br>' ,
esc_attr ( $key ),
esc_attr ( $opt_value ),
checked ( in_array ( $opt_value , $value ), true , false ),
esc_html ( $opt_label )
);
}
2025-03-10 12:26:57 +08:00
} else {
printf (
'<input type="%s" name="lelms_copyright_options[%s]" value="%s" %s>' ,
esc_attr ( $type ),
esc_attr ( $key ),
esc_attr ( $value ),
$attrs
);
}
if ( $description ) {
2025-04-06 23:13:37 +08:00
echo '<p class="description">' . esc_html ( $description ) . '</p>' ;
2025-03-10 12:26:57 +08:00
}
}
public function options_page () {
?>
< div class = " wrap " >
2025-04-06 22:13:55 +08:00
< h1 >< ? php echo esc_html ( get_admin_page_title ()); ?>
< span style = " font-size: 13px; padding-left: 10px; " >< ? php printf ( esc_html__ ( 'Version: %s' , 'lelms-copyright' ), esc_html ( LELMS_COPYRIGHT_VERSION )); ?> </span>
< a href = " https://sharecms.com/document/lelms-copyright " target = " _blank " class = " button button-secondary " style = " margin-left: 10px; " >< ? php esc_html_e ( 'Document' , 'lelms-copyright' ); ?> </a>
< a href = " https://sharecms.com/forums/ " target = " _blank " class = " button button-secondary " >< ? php esc_html_e ( 'Support' , 'lelms-copyright' ); ?> </a>
</ h1 >
< div class = " card " >
< h2 class = " nav-tab-wrapper " >
< a href = " #settings " class = " nav-tab nav-tab-active " >< ? php esc_html_e ( 'Watermark Settings' , 'lelms-copyright' ); ?> </a>
< a href = " #advanced " class = " nav-tab " >< ? php esc_html_e ( 'Advanced Settings' , 'lelms-copyright' ); ?> </a>
< a href = " #about " class = " nav-tab " >< ? php esc_html_e ( 'About' , 'lelms-copyright' ); ?> </a>
</ h2 >
2025-03-10 12:26:57 +08:00
< form method = " post " action = " options.php " >
2025-04-06 22:13:55 +08:00
< ? php settings_fields ( 'lelms_copyright' ); ?>
< div id = " lelms-tabs-content " >
< div id = " settings-tab " class = " lelms-tab-content " >
< ? php do_settings_sections ( 'lelms-copyright' ); ?>
</ div >
< div id = " advanced-tab " class = " lelms-tab-content " style = " display: none; " >
< ? php do_settings_sections ( 'lelms-copyright-advanced' ); ?>
</ div >
< div id = " about-tab " class = " lelms-tab-content " style = " display: none; " >
< h3 >< ? php esc_html_e ( 'How to Use LeLMS Copyright' , 'lelms-copyright' ); ?> </h3>
2025-04-11 08:52:58 +08:00
< p >< ? php esc_html_e ( 'This plugin adds a watermark and protection features to your WordPress site. Here\'s how to configure it:' , 'lelms-copyright' ); ?> </p>
2025-04-06 22:13:55 +08:00
< ul style = " list-style: decimal; padding-left: 2em; " >
< li >< ? php esc_html_e ( 'Watermark Settings: Adjust opacity, size, spacing, color, and angle.' , 'lelms-copyright' ); ?> </li>
< li >< ? php esc_html_e ( 'Protection Features: Enable options to block DevTools, printing, and copying.' , 'lelms-copyright' ); ?> </li>
< li >< ? php esc_html_e ( 'Guest Mode: Enable protection and/or custom watermark for non-logged-in users.' , 'lelms-copyright' ); ?> </li>
< li >< ? php esc_html_e ( 'Custom Watermark: Enable and set a custom text.' , 'lelms-copyright' ); ?> </li>
</ ul >
</ div >
</ div >
< div class = " submit-group " >
< ? php submit_button ( __ ( 'Save Changes' , 'lelms-copyright' ), 'primary' ); ?>
< button type = " button " id = " lelms-reset-defaults " class = " button " >< ? php esc_html_e ( 'Reset to Defaults' , 'lelms-copyright' ); ?> </button>
</ div >
</ form >
< style type = " text/css " >
. nav - tab {
border : 0 px solid #c3c4c7;
background : #ffffff;
}
. nav - tab . nav - tab - active {
border - bottom : 2 px solid #007cba;
font - weight : 600 ;
background : #f0f0f1;
}
. nav - tab : hover : not ( . active ) {
background : #f0f0f1;
border - bottom - color : #dcdcde;
}
. card {
background : #fff;
border : 1 px solid #ccd0d4;
border - radius : 4 px ;
max - width : unset ;
margin - top : 20 px ;
padding : 20 px ;
}
. submit - group {
display : flex ;
gap : 10 px ;
align - items : center ;
margin - top : 20 px ;
}
p . submit {
padding - top : 5 px ;
}
</ style >
< script type = " text/javascript " >
( function ( $ ) {
$ ( document ) . ready ( function () {
$ ( '.nav-tab' ) . on ( 'click' , function ( e ) {
e . preventDefault ();
var target = $ ( this ) . attr ( 'href' ) . substring ( 1 );
$ ( '.nav-tab' ) . removeClass ( 'nav-tab-active' );
$ ( this ) . addClass ( 'nav-tab-active' );
$ ( '.lelms-tab-content' ) . hide ();
$ ( '#' + target + '-tab' ) . show ();
});
var $enableForGuests = $ ( 'input[name="lelms_copyright_options[enable_for_guests]"]' );
var $guestProtectionOnly = $ ( 'input[name="lelms_copyright_options[enable_guest_protection_only]"]' ) . closest ( 'tr' );
var $guestCustomWatermark = $ ( 'input[name="lelms_copyright_options[enable_guest_custom_watermark]"]' ) . closest ( 'tr' );
var $enableCustomWatermark = $ ( 'input[name="lelms_copyright_options[enable_custom_watermark]"]' );
var $customTextField = $ ( 'input[name="lelms_copyright_options[custom_watermark_text]"]' ) . closest ( 'tr' );
function updateGuestFieldsVisibility () {
if ( $enableForGuests . is ( ':checked' )) {
$guestProtectionOnly . show ();
$guestCustomWatermark . show ();
} else {
$guestProtectionOnly . hide ();
$guestCustomWatermark . hide ();
}
}
function updateCustomTextVisibility () {
if ( $enableCustomWatermark . is ( ':checked' ) || ( $enableForGuests . is ( ':checked' ) && $ ( 'input[name="lelms_copyright_options[enable_guest_custom_watermark]"]' ) . is ( ':checked' ))) {
$customTextField . show ();
} else {
$customTextField . hide ();
}
}
$enableForGuests . on ( 'change' , function () {
updateGuestFieldsVisibility ();
updateCustomTextVisibility ();
});
$enableCustomWatermark . on ( 'change' , updateCustomTextVisibility );
$ ( 'input[name="lelms_copyright_options[enable_guest_custom_watermark]"]' ) . on ( 'change' , updateCustomTextVisibility );
updateGuestFieldsVisibility ();
updateCustomTextVisibility ();
$ ( '#lelms-reset-defaults' ) . on ( 'click' , function () {
if ( confirm ( '<?php esc_html_e(' Are you sure you want to reset all settings to defaults ? ', ' lelms - copyright '); ?>' )) {
$ . ajax ({
url : '<?php echo admin_url(' admin - ajax . php '); ?>' ,
type : 'POST' ,
data : {
action : 'lelms_reset_options' ,
nonce : '<?php echo wp_create_nonce(' lelms_reset_nonce '); ?>'
},
success : function ( response ) {
if ( response . success ) {
alert ( '<?php esc_html_e(' Settings have been reset to defaults . Please refresh the page to see the changes . ', ' lelms - copyright '); ?>' );
location . reload ();
} else {
alert ( '<?php esc_html_e(' Failed to reset settings . ', ' lelms - copyright '); ?>' );
}
},
error : function () {
alert ( '<?php esc_html_e(' An error occurred while resetting settings . ', ' lelms - copyright '); ?>' );
}
});
}
});
});
})( jQuery );
</ script >
2025-03-10 12:26:57 +08:00
</ div >
2025-04-06 22:13:55 +08:00
</ div >
2025-03-10 12:26:57 +08:00
< ? php
}
public function enqueue_scripts () {
2025-04-06 22:13:55 +08:00
if ( $this -> should_apply_protection ()) {
$style_url = plugins_url ( 'css/style.css' , __FILE__ );
$script_url = plugins_url ( 'js/watermark.js' , __FILE__ );
if ( ! file_exists ( plugin_dir_path ( __FILE__ ) . 'css/style.css' )) {
error_log ( 'LeLMS Copyright: CSS file not found at ' . plugin_dir_path ( __FILE__ ) . 'css/style.css' );
}
if ( ! file_exists ( plugin_dir_path ( __FILE__ ) . 'js/watermark.js' )) {
error_log ( 'LeLMS Copyright: JS file not found at ' . plugin_dir_path ( __FILE__ ) . 'js/watermark.js' );
}
wp_enqueue_style ( 'lelms-copyright' , $style_url , array (), '1.1.5' );
wp_enqueue_script ( 'lelms-copyright' , $script_url , array ( 'jquery' ), '1.1.5' , true );
$user = is_user_logged_in () ? wp_get_current_user () : null ;
$watermark_text = '' ;
$is_guest = ! is_user_logged_in ();
if ( $this -> should_apply_watermark ()) {
if ( $is_guest ) {
$watermark_text = ! empty ( $this -> options [ 'custom_watermark_text' ]) ? $this -> options [ 'custom_watermark_text' ] : 'LeLMS Copyright' ;
} else {
if ( $this -> options [ 'enable_custom_watermark' ] === 'yes' ) {
$watermark_text = ! empty ( $this -> options [ 'custom_watermark_text' ]) ? $this -> options [ 'custom_watermark_text' ] : 'LeLMS Copyright' ;
} else {
switch ( $this -> options [ 'watermark_type' ]) {
2025-04-11 08:52:58 +08:00
case 'none' :
$watermark_text = '' ;
break ;
2025-04-06 22:13:55 +08:00
case 'username' :
$watermark_text = $user ? '@' . $user -> user_login : '' ;
break ;
case 'nickname' :
$watermark_text = $user ? $user -> display_name : '' ;
break ;
case 'email' :
$watermark_text = $user ? $user -> user_email : '' ;
break ;
case 'timestamp' :
$watermark_text = current_time ( 'Y-m-d H:i:s' );
break ;
}
}
}
}
2025-03-10 12:26:57 +08:00
wp_localize_script ( 'lelms-copyright' , 'lelmsData' , array (
2025-04-06 22:13:55 +08:00
'username' => $watermark_text ,
2025-03-10 12:26:57 +08:00
'options' => $this -> options ,
2025-04-06 22:13:55 +08:00
'warningMessage' => __ ( 'This action is disabled on this site.' , 'lelms-copyright' ),
'isGuest' => $is_guest ,
2025-03-10 12:26:57 +08:00
));
}
}
2025-04-06 22:13:55 +08:00
public function reset_options () {
check_ajax_referer ( 'lelms_reset_nonce' , 'nonce' );
if ( ! current_user_can ( 'manage_options' )) {
wp_send_json_error ( 'Permission denied' );
}
$defaults = array (
'watermark_opacity' => 0.1 ,
'watermark_size' => 20 ,
'watermark_spacing' => 150 ,
'watermark_color' => '#000000' ,
'watermark_angle' => - 45 ,
'enable_devtools_protection' => 'yes' ,
'enable_print_protection' => 'yes' ,
'enable_copy_protection' => 'yes' ,
'enable_for_guests' => 'no' ,
'enable_guest_protection_only' => 'no' ,
'enable_guest_custom_watermark' => 'no' ,
'enable_custom_watermark' => 'no' ,
'custom_watermark_text' => '' ,
'watermark_type' => 'username' ,
'excluded_post_types' => array (),
'excluded_roles' => array (),
);
update_option ( 'lelms_copyright_options' , $defaults );
wp_send_json_success ( 'Settings reset to defaults' );
}
2025-03-10 12:26:57 +08:00
}
new LELMS_Copyright ();
require_once plugin_dir_path ( __FILE__ ) . 'lib/plugin-update-checker/plugin-update-checker.php' ;
use YahnisElsts\PluginUpdateChecker\v5p3\PucFactory ;
$lelmsUpdateChecker = PucFactory :: buildUpdateChecker (
2025-04-06 23:13:37 +08:00
'https://updates.weixiaoduo.com/lelms-copyright.json' ,
2025-03-10 12:26:57 +08:00
__FILE__ ,
'lelms-copyright'
2025-04-11 08:52:58 +08:00
);