|
**********************
|
|
Add Fields
|
|
**********************
|
|
|
|
.. contents:: Table of Contents
|
|
|
|
Add Field
|
|
==================
|
|
|
|
Adding New Fields for Datasets
|
|
|
|
This application is designed to be extensible, allowing you to add new metadata fields as needed. Here's how to add new fields to datasets:
|
|
|
|
Step 1: Database Migration
|
|
---------------------------
|
|
|
|
Create a new migration file in the `database/migrations/` directory::
|
|
|
|
-- Example: add_new_field.sql
|
|
-- Add new field to metadata_records table
|
|
ALTER TABLE metadata_records
|
|
ADD COLUMN IF NOT EXISTS new_field_name VARCHAR(255);
|
|
|
|
-- Add comment to explain the column
|
|
COMMENT ON COLUMN metadata_records.new_field_name IS 'Description of what this field contains';
|
|
|
|
|
|
Step 2: Update the Form Template
|
|
---------------------------
|
|
|
|
Add the new field to the form in `templates/form.twig`::
|
|
|
|
|
|
<div class="mb-4">
|
|
<label for="new_field_name" class="block text-sm font-medium text-gray-700 mb-1">New Field Label</label>
|
|
<input type="text" class="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500"
|
|
id="new_field_name" name="new_field_name"
|
|
value="">
|
|
</div>
|
|
|
|
Step 3: Update the Controller
|
|
---------------------------
|
|
|
|
Modify the relevant controller (usually `src/Controllers/GisController.php`) to handle the new field::
|
|
|
|
* Add the field to the data array when creating/updating records
|
|
* Include the field in validation if required
|
|
* Update any display logic to show the new field
|
|
|
|
Step 4: Update Display Templates
|
|
---------------------------
|
|
|
|
Add the new field to display templates like `templates/dataset_detail.twig`::
|
|
|
|
<div class="mb-3">
|
|
<strong>New Field:</strong>
|
|
</div>
|
|
|
|
|
|
Step 5: Update XML Export
|
|
---------------------------
|
|
|
|
If the field should be included in XML exports, update the XML generation logic in the controller.
|
|
|
|
Common Field Types
|
|
|
|
**Text fields:** `VARCHAR(255)` or `TEXT`
|
|
|
|
**Date fields:** `DATE` or `TIMESTAMP`
|
|
|
|
**Numeric fields:** `INTEGER`, `DECIMAL`, or `REAL`
|
|
|
|
**Boolean fields:** `BOOLEAN`
|
|
|
|
**Array fields:** `TEXT[]` for multiple values
|
|
|
|
Best Practices
|
|
---------------------------
|
|
|
|
* Always use `IF NOT EXISTS` in migrations to prevent errors
|
|
* Add meaningful comments to database columns
|
|
* Follow the existing naming conventions (snake\_case for database, camelCase for form fields)
|
|
* Test the new field thoroughly before deploying
|
|
* Consider whether the field should be required or optional
|
|
* Update documentation when adding new fields
|
|
|
|
Example: Adding a "Data Source" Field
|
|
---------------------------
|
|
|
|
Here's a complete example of adding a "Data Source" field:
|
|
|
|
1. 1 **Migration:** Create `add_data_source_field.sql`
|
|
2. 2 **Form:** Add input field to the Identification Info section
|
|
3. 3 **Controller:** Include in create/update methods
|
|
4. 4 **Display:** Show in dataset detail view
|
|
5. 5 **Export:** Include in XML generation
|
|
|
|
|
|
|
|
|
|
|