--- a/real3d-flipbook-lite/includes/Real3DFlipbook.php
+++ b/real3d-flipbook-lite/includes/Real3DFlipbook.php
@@ -146,8 +146,6 @@
{
global $l10n;
- $capability = get_option('real3dflipbook_capability', 'publish_posts');
-
$arg = $this->products['r3d'];
$flipbook = $arg['key'];
@@ -783,9 +781,6 @@
'dashicons-book'
);
-
-
-
add_submenu_page(
'real3d_flipbook_admin',
esc_html__('Flipbooks', 'real3d-flipbook'),
@@ -833,7 +828,7 @@
'real3d_flipbook_admin',
esc_html__('Settings', 'real3d-flipbook'),
esc_html__('Settings', 'real3d-flipbook'),
- $capability,
+ 'manage_options',
'real3d_flipbook_settings',
array($this, "settings")
);
--- a/real3d-flipbook-lite/includes/plugin-admin.php
+++ b/real3d-flipbook-lite/includes/plugin-admin.php
@@ -1,171 +1,169 @@
-<?php
-if (!defined('ABSPATH')) {
- exit; // Exit if accessed directly
-}
-
-$r3d_globals_settings = get_option("real3dflipbook_global");
-
-if (!$r3d_globals_settings)
- r3dfb_setDefaults();
-
-function r3dfb_setDefaults()
-{
- $defaults = r3dfb_getDefaults();
- delete_option("real3dflipbook_global");
- add_option("real3dflipbook_global", $defaults);
-}
-
-function r3d_sanitize_array($input)
-{
- foreach ($input as $key => $value) {
- if (is_array($value)) {
- $input[$key] = sanitize_my_options($value);
- } else {
- $input[$key] = sanitize_text_field($value);
- $input[$key] = wp_kses_post($value);
- }
- }
- return $input;
-}
-
-add_action('wp_ajax_r3d_save_general', 'r3d_save_general_callback');
-
-function r3d_save_general_callback()
-{
-
- check_ajax_referer('r3d_nonce', 'security');
-
- $capability = get_option('real3dflipbook_capability', 'publish_posts');
-
- if (!current_user_can($capability)) {
- wp_die(__('You do not have permission to perform this action.'), 403);
- }
-
- unset($_POST['security'], $_POST['action']);
-
- $data = $_POST;
-
- if (isset($data['slug']) && (get_option('real3dflipbook_global')['slug'] ?? '') != $data['slug']) {
- update_option('r3d_flush_rewrite_rules', true);
- }
-
- update_option('real3dflipbook_global', $data);
-
-
-
-
- if (isset($data['manageFlipbooks'])) {
-
- $role = sanitize_text_field($data['manageFlipbooks']);
-
- $capability_map = array(
- 'Administrator' => 'activate_plugins',
- 'Editor' => 'publish_pages',
- 'Author' => 'publish_posts',
- );
-
- $capability = $capability_map[$role] ?? 'publish_posts';
-
- update_option('real3dflipbook_capability', $capability);
- }
-
- wp_die();
-}
-
-add_action('wp_ajax_r3d_reset_general', 'r3d_reset_general_callback');
-
-function r3d_reset_general_callback()
-{
-
- check_ajax_referer('r3d_nonce', 'security');
-
- r3dfb_setDefaults();
-
- wp_die();
-}
-
-add_action('wp_ajax_r3d_save_thumbnail', 'r3dfb_save_thumbnail_callback');
-
-function r3dfb_save_thumbnail_callback()
-{
- // Security & permission
- check_ajax_referer('saving-real3d-flipbook', 'security');
- if (!current_user_can('upload_files')) {
- wp_send_json_error(['message' => esc_html__('You do not have permission to upload files.', 'real3d-flipbook')]);
- }
-
- // Flipbook ID check
- $id = isset($_POST['id']) ? absint(sanitize_text_field(wp_unslash($_POST['id']))) : 0;
- if ($id <= 0) {
- wp_send_json_error(['message' => esc_html__('Invalid flipbook ID.', 'real3d-flipbook')]);
- }
-
- $book = get_option('real3dflipbook_' . $id);
- if (!$book) {
- wp_send_json_error(['message' => esc_html__('The specified flipbook does not exist.', 'real3d-flipbook')]);
- }
-
- // Upload paths
- $upload_dir = wp_upload_dir();
- if (!empty($upload_dir['error'])) {
- wp_send_json_error(['message' => esc_html__('Upload directory error: ', 'real3d-flipbook') . esc_html($upload_dir['error'])]);
- }
-
- $book_folder = $upload_dir['basedir'] . "/real3d-flipbook/flipbook_{$id}/";
- $book_url = $upload_dir['baseurl'] . "/real3d-flipbook/flipbook_{$id}/";
-
- if ((!file_exists($book_folder) && !mkdir($book_folder, 0755, true)) || !is_writable($book_folder)) {
- wp_send_json_error(['message' => esc_html(sprintf(__('Cannot write to folder: %s', 'real3d-flipbook'), $book_folder))]);
- }
-
- // Validate upload
- if (empty($_FILES['file']['tmp_name'])) {
- wp_send_json_error(['message' => esc_html__('No file uploaded.', 'real3d-flipbook')]);
- }
-
- // File size (2MB)
- if ($_FILES['file']['size'] > 2 * 1024 * 1024) {
- wp_send_json_error(['message' => esc_html__('File size exceeds the maximum limit.', 'real3d-flipbook')]);
- }
-
- // Extension & image check
- $allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'webp'];
- $filename = sanitize_file_name($_FILES['file']['name']);
- $extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
- if (!in_array($extension, $allowed_extensions)) {
- wp_send_json_error(['message' => esc_html__('Invalid file extension.', 'real3d-flipbook')]);
- }
- if (getimagesize($_FILES['file']['tmp_name']) === false) {
- wp_send_json_error(['message' => esc_html__('File is not a valid image.', 'real3d-flipbook')]);
- }
-
- // Unique filename
- $hashed_filename = 'thumbnail_' . time() . '_' . wp_generate_password(4, false, false) . '.' . $extension;
- $destination = $book_folder . $hashed_filename;
- $counter = 0;
- while (file_exists($destination)) {
- $counter++;
- $hashed_filename = 'thumbnail_' . time() . '_' . wp_generate_password(4, false, false) . "_{$counter}." . $extension;
- $destination = $book_folder . $hashed_filename;
- }
-
- // Move file
- if (!move_uploaded_file($_FILES['file']['tmp_name'], $destination)) {
- wp_send_json_error(['message' => esc_html__('Failed to save the uploaded file.', 'real3d-flipbook')]);
- }
- $thumbnail_url = $book_url . $hashed_filename;
-
- // Remove old thumbnail
- if (!empty($book['lightboxThumbnailUrl'])) {
- $old_file = str_replace($upload_dir['baseurl'], $upload_dir['basedir'], $book['lightboxThumbnailUrl']);
- if (file_exists($old_file)) {
- @unlink($old_file);
- }
- }
-
- // Save option
- $book['lightboxThumbnailUrl'] = esc_url($thumbnail_url);
- update_option('real3dflipbook_' . $id, $book);
-
- wp_send_json_success(['thumbnail_url' => $thumbnail_url]);
+<?php
+if (!defined('ABSPATH')) {
+ exit; // Exit if accessed directly
+}
+
+$r3d_globals_settings = get_option("real3dflipbook_global");
+
+if (!$r3d_globals_settings)
+ r3dfb_setDefaults();
+
+function r3dfb_setDefaults()
+{
+ $defaults = r3dfb_getDefaults();
+ delete_option("real3dflipbook_global");
+ add_option("real3dflipbook_global", $defaults);
+}
+
+function r3d_sanitize_array($input)
+{
+ foreach ($input as $key => $value) {
+ if (is_array($value)) {
+ $input[$key] = sanitize_my_options($value);
+ } else {
+ $input[$key] = sanitize_text_field($value);
+ $input[$key] = wp_kses_post($value);
+ }
+ }
+ return $input;
+}
+
+add_action('wp_ajax_r3d_save_general', 'r3d_save_general_callback');
+
+function r3d_save_general_callback()
+{
+
+ check_ajax_referer('r3d_nonce', 'security');
+
+ if (!current_user_can('manage_options')) {
+ wp_die(__('You do not have permission to perform this action.'), 403);
+ }
+
+ unset($_POST['security'], $_POST['action']);
+
+ $data = $_POST;
+
+ if (isset($data['slug']) && (get_option('real3dflipbook_global')['slug'] ?? '') != $data['slug']) {
+ update_option('r3d_flush_rewrite_rules', true);
+ }
+
+ update_option('real3dflipbook_global', $data);
+
+
+
+
+ if (isset($data['manageFlipbooks'])) {
+
+ $role = sanitize_text_field($data['manageFlipbooks']);
+
+ $capability_map = array(
+ 'Administrator' => 'activate_plugins',
+ 'Editor' => 'publish_pages',
+ 'Author' => 'publish_posts',
+ );
+
+ $capability = $capability_map[$role] ?? 'publish_posts';
+
+ update_option('real3dflipbook_capability', $capability);
+ }
+
+ wp_die();
+}
+
+add_action('wp_ajax_r3d_reset_general', 'r3d_reset_general_callback');
+
+function r3d_reset_general_callback()
+{
+
+ check_ajax_referer('r3d_nonce', 'security');
+
+ r3dfb_setDefaults();
+
+ wp_die();
+}
+
+add_action('wp_ajax_r3d_save_thumbnail', 'r3dfb_save_thumbnail_callback');
+
+function r3dfb_save_thumbnail_callback()
+{
+ // Security & permission
+ check_ajax_referer('saving-real3d-flipbook', 'security');
+ if (!current_user_can('upload_files')) {
+ wp_send_json_error(['message' => esc_html__('You do not have permission to upload files.', 'real3d-flipbook')]);
+ }
+
+ // Flipbook ID check
+ $id = isset($_POST['id']) ? absint(sanitize_text_field(wp_unslash($_POST['id']))) : 0;
+ if ($id <= 0) {
+ wp_send_json_error(['message' => esc_html__('Invalid flipbook ID.', 'real3d-flipbook')]);
+ }
+
+ $book = get_option('real3dflipbook_' . $id);
+ if (!$book) {
+ wp_send_json_error(['message' => esc_html__('The specified flipbook does not exist.', 'real3d-flipbook')]);
+ }
+
+ // Upload paths
+ $upload_dir = wp_upload_dir();
+ if (!empty($upload_dir['error'])) {
+ wp_send_json_error(['message' => esc_html__('Upload directory error: ', 'real3d-flipbook') . esc_html($upload_dir['error'])]);
+ }
+
+ $book_folder = $upload_dir['basedir'] . "/real3d-flipbook/flipbook_{$id}/";
+ $book_url = $upload_dir['baseurl'] . "/real3d-flipbook/flipbook_{$id}/";
+
+ if ((!file_exists($book_folder) && !mkdir($book_folder, 0755, true)) || !is_writable($book_folder)) {
+ wp_send_json_error(['message' => esc_html(sprintf(__('Cannot write to folder: %s', 'real3d-flipbook'), $book_folder))]);
+ }
+
+ // Validate upload
+ if (empty($_FILES['file']['tmp_name'])) {
+ wp_send_json_error(['message' => esc_html__('No file uploaded.', 'real3d-flipbook')]);
+ }
+
+ // File size (2MB)
+ if ($_FILES['file']['size'] > 2 * 1024 * 1024) {
+ wp_send_json_error(['message' => esc_html__('File size exceeds the maximum limit.', 'real3d-flipbook')]);
+ }
+
+ // Extension & image check
+ $allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'webp'];
+ $filename = sanitize_file_name($_FILES['file']['name']);
+ $extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
+ if (!in_array($extension, $allowed_extensions)) {
+ wp_send_json_error(['message' => esc_html__('Invalid file extension.', 'real3d-flipbook')]);
+ }
+ if (getimagesize($_FILES['file']['tmp_name']) === false) {
+ wp_send_json_error(['message' => esc_html__('File is not a valid image.', 'real3d-flipbook')]);
+ }
+
+ // Unique filename
+ $hashed_filename = 'thumbnail_' . time() . '_' . wp_generate_password(4, false, false) . '.' . $extension;
+ $destination = $book_folder . $hashed_filename;
+ $counter = 0;
+ while (file_exists($destination)) {
+ $counter++;
+ $hashed_filename = 'thumbnail_' . time() . '_' . wp_generate_password(4, false, false) . "_{$counter}." . $extension;
+ $destination = $book_folder . $hashed_filename;
+ }
+
+ // Move file
+ if (!move_uploaded_file($_FILES['file']['tmp_name'], $destination)) {
+ wp_send_json_error(['message' => esc_html__('Failed to save the uploaded file.', 'real3d-flipbook')]);
+ }
+ $thumbnail_url = $book_url . $hashed_filename;
+
+ // Remove old thumbnail
+ if (!empty($book['lightboxThumbnailUrl'])) {
+ $old_file = str_replace($upload_dir['baseurl'], $upload_dir['basedir'], $book['lightboxThumbnailUrl']);
+ if (file_exists($old_file)) {
+ @unlink($old_file);
+ }
+ }
+
+ // Save option
+ $book['lightboxThumbnailUrl'] = esc_url($thumbnail_url);
+ update_option('real3dflipbook_' . $id, $book);
+
+ wp_send_json_success(['thumbnail_url' => $thumbnail_url]);
}
No newline at end of file
--- a/real3d-flipbook-lite/real3d-flipbook-lite.php
+++ b/real3d-flipbook-lite/real3d-flipbook-lite.php
@@ -1,54 +1,54 @@
-<?php
-
-/*
- Plugin Name: Real3D Flipbook PDF Viewer
- Plugin URI: https://wordpress.org/plugins/real3d-flipbook-lite/
- Description: Realistic 3D FlipBook, PDF Viewer, PDF Embedder - create realistic 3D flipbook from PDF or images.
- Version: 4.19.1
- Author: creativeinteractivemedia
- Author URI: http://codecanyon.net/user/creativeinteractivemedia
- License: GPLv2 or later
- License URI: https://www.gnu.org/licenses/gpl-2.0.html
- Text Domain: real3d-flipbook
- Domain Path: /languages
- */
-
-if (!function_exists('r3d_fs')) {
- // Create a helper function for easy SDK access.
- function r3d_fs()
- {
- global $r3d_fs;
-
- if (!isset($r3d_fs)) {
- // Include Freemius SDK.
- require_once dirname(__FILE__) . '/freemius/start.php';
-
- $r3d_fs = fs_dynamic_init(array(
- 'id' => '13754',
- 'slug' => 'real3d-flipbook-lite',
- 'type' => 'plugin',
- 'public_key' => 'pk_ac0809f567e096fcd1cce6f0e3af1',
- 'is_premium' => false,
- 'has_addons' => false,
- 'has_paid_plans' => false,
- 'menu' => array(
- 'slug' => 'edit.php?post_type=r3d',
- 'account' => false,
- 'first-path' => 'admin.php?page=real3d_flipbook_help'
- ),
- ));
- }
-
- return $r3d_fs;
- }
-
- // Init Freemius.
- r3d_fs();
- // Signal that SDK was initiated.
- do_action('r3d_fs_loaded');
-}
-
-define('REAL3D_FLIPBOOK_VERSION', '4.19.1');
-define('REAL3D_FLIPBOOK_FILE', __FILE__);
-
+<?php
+
+/*
+ Plugin Name: Real3D Flipbook PDF Viewer
+ Plugin URI: https://wordpress.org/plugins/real3d-flipbook-lite/
+ Description: Realistic 3D FlipBook, PDF Viewer, PDF Embedder - create realistic 3D flipbook from PDF or images.
+ Version: 4.19.2
+ Author: creativeinteractivemedia
+ Author URI: http://codecanyon.net/user/creativeinteractivemedia
+ License: GPLv2 or later
+ License URI: https://www.gnu.org/licenses/gpl-2.0.html
+ Text Domain: real3d-flipbook
+ Domain Path: /languages
+ */
+
+if (!function_exists('r3d_fs')) {
+ // Create a helper function for easy SDK access.
+ function r3d_fs()
+ {
+ global $r3d_fs;
+
+ if (!isset($r3d_fs)) {
+ // Include Freemius SDK.
+ require_once dirname(__FILE__) . '/freemius/start.php';
+
+ $r3d_fs = fs_dynamic_init(array(
+ 'id' => '13754',
+ 'slug' => 'real3d-flipbook-lite',
+ 'type' => 'plugin',
+ 'public_key' => 'pk_ac0809f567e096fcd1cce6f0e3af1',
+ 'is_premium' => false,
+ 'has_addons' => false,
+ 'has_paid_plans' => false,
+ 'menu' => array(
+ 'slug' => 'edit.php?post_type=r3d',
+ 'account' => false,
+ 'first-path' => 'admin.php?page=real3d_flipbook_help'
+ ),
+ ));
+ }
+
+ return $r3d_fs;
+ }
+
+ // Init Freemius.
+ r3d_fs();
+ // Signal that SDK was initiated.
+ do_action('r3d_fs_loaded');
+}
+
+define('REAL3D_FLIPBOOK_VERSION', '4.19.2');
+define('REAL3D_FLIPBOOK_FILE', __FILE__);
+
include_once(plugin_dir_path(__FILE__) . '/includes/Real3DFlipbook.php');
No newline at end of file