GDPR Form Popup CakePHP

User
Create custom GDPR form in popup and save in database cakephp
Assistant
To create a custom GDPR form in a popup and save the data in a database using CakePHP, follow these steps:

### Step 1: Create the Form

1. **Create a Template**: First, create a template for your GDPR form. You can create a new file in your `src/Template` directory. For example, create `gdpr_form.ctp`:

<!-- src/Template/Gdpr/gdpr_form.ctp -->
<div id="gdpr-popup" class="popup">
    <form method="post" action="<?= $this->Url->build(['controller' => 'Gdpr', 'action' => 'save']); ?>">
        <h2>GDPR Consent Form</h2>
        <label>
            <input type="checkbox" name="consent" required>
            I consent to the processing of my personal data.
        </label>
        <br>
        <button type="submit">Submit</button>
    </form>
    <button onclick="closePopup()">Close</button>
</div>

2. **Add CSS for the Popup**: Style the popup to make it appear as a modal. You can add this to your CSS file:

/* In your main CSS file */
.popup {
    display: none; /* Initially hidden */
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background-color: white;
    border: 1px solid #ccc;
    padding: 20px;
    z-index: 1000;
}

.popup.active {
    display: block;
}

3. **JavaScript to Show/Hide the Popup**: Create a simple script to show and hide the popup.

<script>
function openPopup() {
    document.getElementById('gdpr-popup').classList.add('active');
}

function closePopup() {
    document.getElementById('gdpr-popup').classList.remove('active');
}
</script>

### Step 2: Create the Controller and Action

1. **Create a Controller**: If you don't have a `GdprController`, create one in `src/Controller`:

// src/Controller/GdprController.php
namespace AppController;

use AppControllerAppController;

class GdprController extends AppController
{
    public function initialize(): void
    {
        parent::initialize();
        $this->loadModel('GdprConsents'); // Load the model for saving data
    }

    public function save()
    {
        if ($this->request->is('post')) {
            $data = $this->request->getData();

            $gdprConsent = $this->GdprConsents->newEmptyEntity();
            $gdprConsent = $this->GdprConsents->patchEntity($gdprConsent, $data);

            if ($this->GdprConsents->save($gdprConsent)) {
                // Success message or redirect
                $this->Flash->success(__('Consent saved successfully.'));
            } else {
                $this->Flash->error(__('Unable to save consent.'));
            }
        }

        return $this->redirect($this->referer()); // Redirect back to the previous page
    }
}

### Step 3: Create the Model and Database Table

1. **Create a Database Table**: Create a table named `gdpr_consents`. Use the following SQL to create the table:

CREATE TABLE gdpr_consents (
    id INT AUTO_INCREMENT PRIMARY KEY,
    consent TINYINT(1) NOT NULL,
    created DATETIME DEFAULT CURRENT_TIMESTAMP
);

2. **Create a Model**: Create a model for the `gdpr_consents` table in `src/Model/Table/GdprConsentsTable.php`:

// src/Model/Table/GdprConsentsTable.php
namespace AppModelTable;

use CakeORMTable;

class GdprConsentsTable extends Table
{
    public function initialize(array $config): void
    {
        parent::initialize($config);
        $this->setTable('gdpr_consents');
    }
}

### Step 4: Load the Popup on the Page

1. **Include the Form in Your View**: Include the GDPR form in your main view or wherever you want to trigger the popup.

// In your main view file (e.g., src/Template/Layout/default.ctp)
<?= $this->element('Gdpr/gdpr_form'); ?>
<button onclick="openPopup()">Open GDPR Form</button>

### Step 5: Testing

1. **Test the Functionality**: Load your application and test the GDPR form. Ensure that the data is saved in the database when the form is submitted.

### Conclusion

By following these steps, you should be able to create a custom GDPR consent form in a popup using CakePHP and save the data in your database. Make sure to adjust the form and model as needed for your specific requirements.

Leave a Comment

Your email address will not be published. Required fields are marked *