HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: /var/www/html/video-rental/wp-content/plugins/video-coupon-manager.php
<?php
/**
 * Plugin Name: Video Coupon Manager
 * Description: Manage coupon codes for video purchases.
 */
register_activation_hook(__FILE__, 'vcm_create_coupon_table');
function vcm_create_coupon_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'video_coupons';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
        id INT NOT NULL AUTO_INCREMENT,
        code VARCHAR(100) NOT NULL,
        discount_type ENUM('percentage', 'flat') NOT NULL,
        discount_value FLOAT NOT NULL,
        usage_limit INT NULL,
        user_ids TEXT NULL,
        video_ids TEXT NULL,
        is_active BOOLEAN DEFAULT 1,
        expires_at DATETIME NULL,
        created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
        PRIMARY KEY (id),
        UNIQUE (code)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
add_action('admin_menu', 'add_coupon_menu');
function add_coupon_menu() {
    add_menu_page('Coupons', 'Coupons', 'manage_options', 'custom-coupons', 'render_coupon_page');
}

function render_coupon_page() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'video_coupons';

    // Handle delete
    if (isset($_GET['delete_coupon'])) {
        $wpdb->delete($table_name, ['id' => intval($_GET['delete_coupon'])]);
        echo '<div class="updated"><p>Coupon deleted.</p></div>';
    }

    // Handle insert or update
    if (isset($_POST['save_coupon'])) {
        $data = [
            'code' => sanitize_text_field($_POST['code']),
            'discount_type' => sanitize_text_field($_POST['discount_type']),
            'discount_value' => floatval($_POST['amount']),
            'usage_limit' => sanitize_text_field($_POST['usage_limit']),
            // 'user_ids' => isset($_POST['allowed_users']) ? implode(',', array_map('intval', $_POST['allowed_users'])) : '',
            // 'video_ids' => isset($_POST['allowed_videos']) ? implode(',', array_map('intval', $_POST['allowed_videos'])) : '',
            'user_ids' => isset($_POST['allowed_users']) ? (in_array('all', $_POST['allowed_users']) ? 'all' : implode(',', $_POST['allowed_users'])) : '',
            'video_ids' => isset($_POST['allowed_videos']) ? (in_array('all', $_POST['allowed_videos']) ? 'all' : implode(',', $_POST['allowed_videos'])) : '',

            // 'start_date' => sanitize_text_field($_POST['start_date']),
            // 'end_date' => sanitize_text_field($_POST['end_date']),
            'expires_at' => sanitize_text_field($_POST['expires_at']),
            'is_active' => isset($_POST['status']) ? 1 : 0,
        ];

        if (!empty($_POST['coupon_id'])) {
            $wpdb->update($table_name, $data, ['id' => intval($_POST['coupon_id'])]);
            echo '<div class="updated"><p>Coupon updated.</p></div>';
        } else {
            $wpdb->insert($table_name, $data);
            echo '<div class="updated"><p>Coupon added.</p></div>';
        }
    }

    $edit_coupon = null;
    if (isset($_GET['edit_coupon'])) {
        $edit_coupon = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table_name WHERE id = %d", intval($_GET['edit_coupon'])));
    }

    $users = get_users();
    $videos = get_posts(['post_type' => 'vm_video', 'numberposts' => -1]);

    ?>
    <div class="wrap">
        <h1><?php echo $edit_coupon ? 'Edit Coupon' : 'Add New Coupon'; ?></h1>
        <form method="post">
            <input type="hidden" name="coupon_id" value="<?php echo esc_attr($edit_coupon->id ?? ''); ?>">
            <table class="form-table">
                <tr>
                    <th scope="row">Coupon Code</th>
                    <td><input name="code" type="text" value="<?php echo esc_attr($edit_coupon->code ?? ''); ?>" class="regular-text" required></td>
                </tr>
                <tr>
                    <th scope="row">Discount Type</th>
                    <td>
                        <select name="discount_type">
                            <option value="percentage" <?php selected($edit_coupon->discount_type ?? '', 'percentage'); ?>>Percentage</option>
                            <option value="flat" <?php selected($edit_coupon->discount_type ?? '', 'flat'); ?>>Flat</option>
                        </select>
                    </td>
                </tr>
                <tr>
                    <th scope="row">Discount Amount</th>
                    <td><input name="amount" type="number" step="0.01" value="<?php echo esc_attr($edit_coupon->discount_value ?? ''); ?>" class="small-text" required></td>
                </tr>
                <tr>
                    <th scope="row">Usage Limit</th>
                    <td>
                        <!-- <select name="usage_limit">
                            <option value="0" <?php selected($edit_coupon->usage_limit ?? '', '0'); ?>>Unlimited</option>
                            <option value="1" <?php selected($edit_coupon->usage_limit ?? '', '1'); ?>>One-time</option>
                            <option value="2" <?php selected($edit_coupon->usage_limit ?? '', '2'); ?>>5 Times</option>
                            <option value="3" <?php selected($edit_coupon->usage_limit ?? '', '3'); ?>>10 Times</option>
                        </select> -->
                        <input name="usage_limit" type="number" step="0.01" value="<?php echo esc_attr($edit_coupon->usage_limit ?? ''); ?>" class="small-text" required>
                    </td>
                </tr>
                <tr>
                    <th scope="row">Allowed Users</th>
                    <td>
                        <select name="allowed_users[]" class="select2-users" multiple="multiple" style="width: 100%;">
                            <option value="all" <?php echo isset($edit_coupon->user_ids) && $edit_coupon->user_ids === 'all' ? 'selected' : ''; ?>>All Users</option>
                            <?php foreach ($users as $user): ?>
                                <option value="<?php echo esc_attr($user->ID); ?>" <?php echo isset($edit_coupon->user_ids) && in_array($user->ID, explode(',', $edit_coupon->user_ids)) ? 'selected' : ''; ?>><?php echo esc_html($user->display_name); ?></option>
                            <?php endforeach; ?>
                        </select>
                    </td>
                </tr>

                <tr>
                    <th scope="row">Allowed Videos</th>
                    <td>
                        <select name="allowed_videos[]" class="select2-videos" multiple="multiple" style="width: 100%;">
                            <option value="all" <?php echo isset($edit_coupon->video_ids) && $edit_coupon->video_ids === 'all' ? 'selected' : ''; ?>>All Videos</option>
                            <?php foreach ($videos as $video): ?>
                                <option value="<?php echo esc_attr($video->ID); ?>" <?php echo isset($edit_coupon->video_ids) && in_array($video->ID, explode(',', $edit_coupon->video_ids)) ? 'selected' : ''; ?>><?php echo esc_html($video->post_title); ?></option>
                            <?php endforeach; ?>
                        </select>
                    </td>
                </tr>


                <tr>
                    <th scope="row">Expiry Date</th>
                    <td><input type="datetime-local" name="expires_at" value="<?php echo esc_attr(str_replace(' ', 'T', $edit_coupon->expires_at ?? '')); ?>"></td>
                </tr>
                <!-- <tr>
                    <th scope="row">End Date</th>
                    <td><input type="date" name="end_date" value="<?php echo esc_attr($edit_coupon->end_date ?? ''); ?>"></td>
                </tr> -->
                <tr>
                    <th scope="row">Status</th>
                    <td><input type="checkbox" name="status" value="1" <?php checked($edit_coupon->is_active ?? 0, 1); ?>> Active</td>
                </tr>
            </table>
            <p class="submit">
                <button type="submit" name="save_coupon" class="button button-primary">Save Coupon</button>
            </p>
        </form>

        <h2>Existing Coupons</h2>
        <table class="widefat">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>Code</th>
                    <th>Type</th>
                    <th>Amount</th>
                    <th>Limit</th>
                    <th>Usernames</th>
                    <th>Videos</th>
                    <th>Expiry Date</th>
                    <th>Status</th>
                    <th>Actions</th>
                </tr>
            </thead>
            <tbody>
                <?php
                    $coupons = $wpdb->get_results("SELECT * FROM $table_name");
                    foreach ($coupons as $coupon):
                        // Get usernames
                        $usernames = [];
                        if (!empty($coupon->user_ids)) {
                            $user_ids = explode(',', $coupon->user_ids);
                            foreach ($user_ids as $user_id) {
                                $user = get_userdata(trim($user_id));
                                if ($user) {
                                    $usernames[] = $user->display_name;
                                }
                            }
                        }

                        // Get video titles
                        $video_titles = [];
                        if (!empty($coupon->video_ids)) {
                            $video_ids = explode(',', $coupon->video_ids);
                            foreach ($video_ids as $video_id) {
                                $video = get_post(trim($video_id));
                                if ($video) {
                                    $video_titles[] = $video->post_title;
                                }
                            }
                        }
                    ?>
                        <tr>
                            <td><?php echo $coupon->id; ?></td>
                            <td><?php echo esc_html($coupon->code); ?></td>
                            <td><?php echo esc_html($coupon->discount_type); ?></td>
                            <td><?php echo esc_html($coupon->discount_value); ?></td>
                            <td><?php echo esc_html($coupon->usage_limit); ?></td>
                            <td><?php echo !empty($usernames) ? esc_html(implode(', ', $usernames)) : 'All Users'; ?></td>
                            <td><?php echo !empty($video_titles) ? esc_html(implode(', ', $video_titles)) : 'All Videos'; ?></td>
                            <td><?php echo esc_html($coupon->expires_at); ?></td>
                            <td><?php echo $coupon->is_active ? 'Active' : 'Inactive'; ?></td>
                            <td>
                                <a href="?page=custom-coupons&edit_coupon=<?php echo $coupon->id; ?>">Edit</a> |
                                <a href="?page=custom-coupons&delete_coupon=<?php echo $coupon->id; ?>" onclick="return confirm('Are you sure?');">Delete</a>
                            </td>
                        </tr>
                    <?php endforeach; ?>

            </tbody>
        </table>
    </div>
<?php }