Added more documentation. Improved CRUD V3 endpoints and better responses.
This commit is contained in:
37
GEMINI.md
37
GEMINI.md
@@ -44,27 +44,28 @@ I am an interactive CLI agent assisting with software engineering tasks for One
|
|||||||
- **Security Hardening:** Implemented a 5-level recursion depth limit and a field allowlist (`searchable_fields`) for the Search API.
|
- **Security Hardening:** Implemented a 5-level recursion depth limit and a field allowlist (`searchable_fields`) for the Search API.
|
||||||
- **Non-blocking Concurrency:** Standardized on `asyncio.sleep()` for delay simulation to prevent Gunicorn worker hangs.
|
- **Non-blocking Concurrency:** Standardized on `asyncio.sleep()` for delay simulation to prevent Gunicorn worker hangs.
|
||||||
|
|
||||||
## Session Learnings & Progress (Jan 2-5, 2026)
|
## Session Learnings & Progress (Jan 2-6, 2026)
|
||||||
|
|
||||||
### V3 CRUD Infrastructure & Security
|
### V3 CRUD Infrastructure & Search
|
||||||
- **Modular Object Definitions**: Successfully refactored the monolithic `ae_obj_types_def.py` into a domain-driven structure under `app/object_definitions/`. This improved maintainability while keeping legacy V2 keys for backward compatibility.
|
- **Modular Object Definitions**: Refactored `ae_obj_types_def.py` into modular domain files in `app/object_definitions/`.
|
||||||
- **Advanced Search (POST)**: Implemented a robust `/search` endpoint supporting recursive AND/OR logic and standardized full-text search via the `q` property.
|
- **Advanced Search Fixes**:
|
||||||
- **Soft Delete Implementation**: Updated `DELETE /v3/crud/{obj}/{id}` and its child equivalent to support a `method` query parameter (`delete`, `hide`, `disable`). This allows for soft deletion by setting `hide=True` or `enable=False`, while preserving the default hard delete behavior.
|
- Resolved account listing and search issues by implementing `get_supported_filters` in `api_crud_v3.py`. This helper automatically adjusts `status_filter` (enabled/hidden) based on model field support (e.g., handles tables missing the `hide` column).
|
||||||
- **Badge Model Updates**: Added `print_count`, `print_first_datetime`, and `print_last_datetime` to `Event_Badge_Basic_Base` to ensure these fields are returned in basic badge queries.
|
- Improved standardized full-text search (`q` parameter) in `sql_search_qry_part` with a dry-run check for the `default_qry_str` column. It now falls back to a `LIKE` search across all searchable fields if the column is missing.
|
||||||
- **Security Hardening**: Enforced a 5-level recursion depth limit and a field allowlist (`searchable_fields`) per object to prevent unauthorized data leaks.
|
- Added support for the `%` wildcard in `q`, allowing it to bypass filtering and return all records.
|
||||||
- **JWT Authentication**: Implemented modern JWT validation for V3, supporting both the `Authorization` header and a `jwt` query parameter (enabling secure, header-free file downloads).
|
- **Data Integrity & Aliasing**: Fixed a critical issue where aliased fields (like `account_id_random`) were returned as `null` by adding `allow_population_by_field_name = True` to Pydantic models (updated `Account_Base`, `Site_Domain_Base`, etc.).
|
||||||
- **Frontend Integration**: Created a dedicated `V3_FRONTEND_API_GUIDE.md` to help the Svelte Gemini agent and developers migrate to the new endpoints.
|
- **Consolidated V3 Router**: Systematically cleaned up `api_crud_v3.py`, removing duplicate endpoint definitions and standardizing logic across all CRUD and Search routes.
|
||||||
|
- **Robust Error Handling**: Updated V3 routers to return 500 status codes on database failures instead of masking errors with empty result sets.
|
||||||
|
|
||||||
### Technical & Environment Stability
|
### Database Schema Insights
|
||||||
- **Robust Logging**: Standardized on module-level loggers and wrapped logging configuration in `try/except` to prevent Docker startup crashes.
|
- Verified schema for core tables (`account`, `event`, `person`, `user`, `data_store`, `site`, `site_domain`).
|
||||||
- **Circular Dependency Resolution**: Identified and resolved a major circular dependency loop between `lib_general_v3`, `response_models`, and `db_sql`.
|
- Noted that `site_domain` lacks a `hide` column, and `hosted_file_link` lacks both `hide` and `enable`.
|
||||||
- **FastAPI Standards**: Fixed `Response` injection and parameter ordering issues that were causing "Worker failed to boot" errors.
|
- Most major tables now have a standardized `hide` column (added to `account` on Jan 6, 2026).
|
||||||
|
|
||||||
## Current To-Do List
|
## Current To-Do List
|
||||||
|
|
||||||
1. **Docker Environment Insight Improvements (Priority: High)**: Implement methods/endpoints to give the agent more insight into the actual Docker runtime environment (environment variables, container status, log accessibility) to better diagnose recurring startup and configuration issues.
|
1. **Docker Environment Insight Improvements (Priority: High)**: Implement methods/endpoints to give the agent more insight into the actual Docker runtime environment.
|
||||||
2. **Security - Field Allowlists (Priority: High)**: Finish populating `searchable_fields` for all remaining object definitions.
|
2. **Security - Field Allowlists (Priority: High)**: Finish populating `searchable_fields` for all remaining object definitions.
|
||||||
3. **Security - Authentication (Priority: High)**: Continue refining and enforcing JWT-based authentication across all V3 endpoints.
|
3. **Refactoring - Modularize `db_sql.py` (Priority: Medium)**: Given the file's size (>2200 lines), plan to split it into functional modules (Search Builder, Core CRUD, Redis Helpers) to improve maintainability and agent reliability.
|
||||||
4. **Specialized Endpoints (Priority: Medium)**: Identify and plan the modernization of custom logic (e.g., importing, websockets) to match V3 patterns.
|
4. **Specialized Endpoints (Priority: Medium)**: Plan modernization of custom logic (importing, websockets) to match V3 patterns.
|
||||||
5. **Directory Cleanup (Priority: Low)**: Long-term plan to archive old projects and standardize directory naming in `OSIT_dev`.
|
5. **Security - Authentication (Priority: High)**: Continue refining and enforcing JWT-based authentication across all V3 endpoints.
|
||||||
6. **Unused Route Cleanup**: Successfully commented out `cont_edu_cert` routers in `main.py`.
|
|
||||||
|
|||||||
@@ -68,6 +68,10 @@ class Core_Std_Obj_Base(BaseModel):
|
|||||||
# return redis_lookup_id_random(record_id_random=id_random, table_name=otype)
|
# return redis_lookup_id_random(record_id_random=id_random, table_name=otype)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
underscore_attrs_are_private = True
|
||||||
|
allow_population_by_field_name = True
|
||||||
|
|
||||||
|
|
||||||
class Core_Object_Base(BaseModel):
|
class Core_Object_Base(BaseModel):
|
||||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||||
@@ -148,6 +152,10 @@ class Core_Object_Base(BaseModel):
|
|||||||
|
|
||||||
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
|
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
underscore_attrs_are_private = True
|
||||||
|
allow_population_by_field_name = True
|
||||||
|
|
||||||
|
|
||||||
class Example_Object_Base(Core_Object_Base): # Based on Core_Object_Base
|
class Example_Object_Base(Core_Object_Base): # Based on Core_Object_Base
|
||||||
title: Optional[str] = None
|
title: Optional[str] = None
|
||||||
|
|||||||
@@ -103,4 +103,5 @@ class Product_Base(BaseModel):
|
|||||||
class Config:
|
class Config:
|
||||||
underscore_attrs_are_private = True
|
underscore_attrs_are_private = True
|
||||||
fields = base_fields
|
fields = base_fields
|
||||||
|
allow_population_by_field_name = True
|
||||||
# ### END ### API Product Models ### Product_Base() ###
|
# ### END ### API Product Models ### Product_Base() ###
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ class Site_Domain_Base(BaseModel):
|
|||||||
class Config:
|
class Config:
|
||||||
underscore_attrs_are_private = True
|
underscore_attrs_are_private = True
|
||||||
fields = base_fields
|
fields = base_fields
|
||||||
|
allow_population_by_field_name = True
|
||||||
# ### END ### API Site Domain Models ### Site_Domain_Base() ###
|
# ### END ### API Site Domain Models ### Site_Domain_Base() ###
|
||||||
|
|
||||||
|
|
||||||
@@ -170,4 +171,5 @@ class Site_Domain_FQDN_ID_Base(BaseModel):
|
|||||||
class Config:
|
class Config:
|
||||||
underscore_attrs_are_private = True
|
underscore_attrs_are_private = True
|
||||||
fields = base_fields
|
fields = base_fields
|
||||||
|
allow_population_by_field_name = True
|
||||||
# ### END ### API Site Domain Models ### Site_Domain_FQDN_ID_Base() ###
|
# ### END ### API Site Domain Models ### Site_Domain_FQDN_ID_Base() ###
|
||||||
|
|||||||
@@ -246,21 +246,12 @@ async def get_obj_li(
|
|||||||
if sql_result is False:
|
if sql_result is False:
|
||||||
return mk_resp(data=False, status_code=500, response=response, status_message="Database error occurred.")
|
return mk_resp(data=False, status_code=500, response=response, status_message="Database error occurred.")
|
||||||
elif sql_result:
|
elif sql_result:
|
||||||
resp_data_li = []
|
resp_data_li = [base_name(**record).dict(
|
||||||
for record in sql_result:
|
by_alias=serialization.by_alias,
|
||||||
obj_inst = base_name(**record)
|
exclude_unset=serialization.exclude_unset,
|
||||||
obj_dict = obj_inst.dict(
|
exclude_defaults=serialization.exclude_defaults,
|
||||||
by_alias=serialization.by_alias,
|
exclude_none=serialization.exclude_none
|
||||||
exclude_unset=serialization.exclude_unset,
|
) for record in sql_result]
|
||||||
exclude_defaults=serialization.exclude_defaults,
|
|
||||||
exclude_none=serialization.exclude_none
|
|
||||||
)
|
|
||||||
# Ensure id_random is present if it exists on the instance
|
|
||||||
id_random_alias = base_name.__fields__['id_random'].alias if 'id_random' in base_name.__fields__ else 'id_random'
|
|
||||||
if id_random_alias not in obj_dict and hasattr(obj_inst, 'id_random'):
|
|
||||||
obj_dict[id_random_alias] = obj_inst.id_random
|
|
||||||
|
|
||||||
resp_data_li.append(obj_dict)
|
|
||||||
return mk_resp(data=resp_data_li, response=response)
|
return mk_resp(data=resp_data_li, response=response)
|
||||||
else:
|
else:
|
||||||
return mk_resp(data=[], status_code=200, response=response)
|
return mk_resp(data=[], status_code=200, response=response)
|
||||||
@@ -345,21 +336,12 @@ async def search_obj_li(
|
|||||||
if sql_result is False:
|
if sql_result is False:
|
||||||
return mk_resp(data=False, status_code=500, response=response, status_message="Database error occurred.")
|
return mk_resp(data=False, status_code=500, response=response, status_message="Database error occurred.")
|
||||||
elif sql_result:
|
elif sql_result:
|
||||||
resp_data_li = []
|
resp_data_li = [base_name(**record).dict(
|
||||||
for record in sql_result:
|
by_alias=serialization.by_alias,
|
||||||
obj_inst = base_name(**record)
|
exclude_unset=serialization.exclude_unset,
|
||||||
obj_dict = obj_inst.dict(
|
exclude_defaults=serialization.exclude_defaults,
|
||||||
by_alias=serialization.by_alias,
|
exclude_none=serialization.exclude_none
|
||||||
exclude_unset=serialization.exclude_unset,
|
) for record in sql_result]
|
||||||
exclude_defaults=serialization.exclude_defaults,
|
|
||||||
exclude_none=serialization.exclude_none
|
|
||||||
)
|
|
||||||
# Ensure id_random is present if it exists on the instance
|
|
||||||
id_random_alias = base_name.__fields__['id_random'].alias if 'id_random' in base_name.__fields__ else 'id_random'
|
|
||||||
if id_random_alias not in obj_dict and hasattr(obj_inst, 'id_random'):
|
|
||||||
obj_dict[id_random_alias] = obj_inst.id_random
|
|
||||||
|
|
||||||
resp_data_li.append(obj_dict)
|
|
||||||
return mk_resp(data=resp_data_li, response=response)
|
return mk_resp(data=resp_data_li, response=response)
|
||||||
else:
|
else:
|
||||||
return mk_resp(data=[], status_code=200, response=response)
|
return mk_resp(data=[], status_code=200, response=response)
|
||||||
@@ -608,21 +590,12 @@ async def get_child_obj_li(
|
|||||||
if sql_result is False:
|
if sql_result is False:
|
||||||
return mk_resp(data=False, status_code=500, response=response, status_message="Database error occurred.")
|
return mk_resp(data=False, status_code=500, response=response, status_message="Database error occurred.")
|
||||||
elif sql_result:
|
elif sql_result:
|
||||||
resp_data_li = []
|
resp_data_li = [base_name(**record).dict(
|
||||||
for record in sql_result:
|
by_alias=serialization.by_alias,
|
||||||
obj_inst = base_name(**record)
|
exclude_unset=serialization.exclude_unset,
|
||||||
obj_dict = obj_inst.dict(
|
exclude_defaults=serialization.exclude_defaults,
|
||||||
by_alias=serialization.by_alias,
|
exclude_none=serialization.exclude_none
|
||||||
exclude_unset=serialization.exclude_unset,
|
) for record in sql_result]
|
||||||
exclude_defaults=serialization.exclude_defaults,
|
|
||||||
exclude_none=serialization.exclude_none
|
|
||||||
)
|
|
||||||
# Ensure id_random is present if it exists on the instance
|
|
||||||
id_random_alias = base_name.__fields__['id_random'].alias if 'id_random' in base_name.__fields__ else 'id_random'
|
|
||||||
if id_random_alias not in obj_dict and hasattr(obj_inst, 'id_random'):
|
|
||||||
obj_dict[id_random_alias] = obj_inst.id_random
|
|
||||||
|
|
||||||
resp_data_li.append(obj_dict)
|
|
||||||
return mk_resp(data=resp_data_li, response=response)
|
return mk_resp(data=resp_data_li, response=response)
|
||||||
else:
|
else:
|
||||||
return mk_resp(data=[], status_code=200, response=response)
|
return mk_resp(data=[], status_code=200, response=response)
|
||||||
@@ -819,4 +792,4 @@ async def delete_child_obj(
|
|||||||
|
|
||||||
if success:
|
if success:
|
||||||
return mk_resp(data=True, response=response, status_message=f"Deleted successfully via {method}.")
|
return mk_resp(data=True, response=response, status_message=f"Deleted successfully via {method}.")
|
||||||
return mk_resp(data=False, status_code=400, response=response, status_message="Deletion failed.")
|
return mk_resp(data=False, status_code=400, response=response, status_message="Deletion failed.")
|
||||||
48
documentation/V3_SCHEMA_DISCOVERY_PLAN.md
Normal file
48
documentation/V3_SCHEMA_DISCOVERY_PLAN.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Aether V3 Schema Discovery Plan
|
||||||
|
|
||||||
|
## Objective
|
||||||
|
Provide an endpoint that returns the structure of an Aether object type, combining database metadata with Pydantic model definitions. This helps the frontend adapt to schema changes and understand field types/aliases without hardcoding.
|
||||||
|
|
||||||
|
## Proposed Endpoint
|
||||||
|
`GET /v3/crud/{obj_type}/schema`
|
||||||
|
|
||||||
|
### Query Parameters
|
||||||
|
- `view`: (Optional) `default`, `enriched`, `detail`. Determines which database table/view and Pydantic model to inspect.
|
||||||
|
- `variant`: (Optional) `in`, `out`, `base`. Selects the specific Pydantic model variant (e.g., `mdl_in` for write operations).
|
||||||
|
|
||||||
|
## Implementation Details
|
||||||
|
|
||||||
|
### 1. Database Metadata
|
||||||
|
- Execute `DESCRIBE {table_name}` or `SHOW COLUMNS FROM {table_name}`.
|
||||||
|
- Extract: `Field`, `Type`, `Null`, `Key`, `Default`, `Extra`.
|
||||||
|
|
||||||
|
### 2. Pydantic Metadata
|
||||||
|
- Inspect the model's `__fields__`.
|
||||||
|
- Map Pydantic field names to database aliases.
|
||||||
|
- Extract: `type`, `required`, `default`, `description` (from Field extra), `validators`.
|
||||||
|
|
||||||
|
### 3. Response Structure
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"object_type": "account",
|
||||||
|
"database": {
|
||||||
|
"table_name": "account",
|
||||||
|
"columns": [...]
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"model_name": "Account_Base",
|
||||||
|
"fields": {
|
||||||
|
"account_id_random": {
|
||||||
|
"alias": "id_random",
|
||||||
|
"type": "string",
|
||||||
|
"required": false
|
||||||
|
},
|
||||||
|
...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Security
|
||||||
|
- Requires standard V3 authentication.
|
||||||
|
- Only returns schema for objects defined in `obj_type_kv_li`.
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
-- https://www.phpmyadmin.net/
|
-- https://www.phpmyadmin.net/
|
||||||
--
|
--
|
||||||
-- Host: localhost
|
-- Host: localhost
|
||||||
-- Generation Time: Jan 02, 2026 at 10:20 PM
|
-- Generation Time: Jan 06, 2026 at 06:25 PM
|
||||||
-- Server version: 12.1.2-MariaDB-log
|
-- Server version: 12.1.2-MariaDB-log
|
||||||
-- PHP Version: 8.4.15
|
-- PHP Version: 8.4.15
|
||||||
|
|
||||||
@@ -34,6 +34,7 @@ CREATE TABLE `account` (
|
|||||||
`name` varchar(200) DEFAULT NULL,
|
`name` varchar(200) DEFAULT NULL,
|
||||||
`short_name` varchar(20) DEFAULT NULL,
|
`short_name` varchar(20) DEFAULT NULL,
|
||||||
`description` text DEFAULT NULL,
|
`description` text DEFAULT NULL,
|
||||||
|
`hide` tinyint(1) DEFAULT 0,
|
||||||
`enable` tinyint(1) NOT NULL DEFAULT 0,
|
`enable` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
`enable_from` datetime DEFAULT NULL,
|
`enable_from` datetime DEFAULT NULL,
|
||||||
`enable_to` datetime DEFAULT NULL,
|
`enable_to` datetime DEFAULT NULL,
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 5.2.3
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: localhost
|
||||||
|
-- Generation Time: Jan 06, 2026 at 06:25 PM
|
||||||
|
-- Server version: 12.1.2-MariaDB-log
|
||||||
|
-- PHP Version: 8.4.15
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Database: `aether_dev`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `data_store`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `data_store` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
|
||||||
|
`account_id` int(11) DEFAULT NULL,
|
||||||
|
`for_type` varchar(50) DEFAULT NULL,
|
||||||
|
`for_id` int(11) DEFAULT NULL,
|
||||||
|
`person_id` int(11) DEFAULT NULL COMMENT 'the creator or owner',
|
||||||
|
`user_id` int(11) DEFAULT NULL COMMENT 'the creator or owner',
|
||||||
|
`code` varchar(75) NOT NULL COMMENT 'adding a record that matches an existing code should always have an account_id',
|
||||||
|
`name` varchar(150) DEFAULT NULL,
|
||||||
|
`description` text DEFAULT NULL,
|
||||||
|
`type` varchar(10) NOT NULL DEFAULT 'html' COMMENT 'html, json, md, text',
|
||||||
|
`json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'case sensitive',
|
||||||
|
`text` longtext DEFAULT NULL COMMENT 'case insensitive',
|
||||||
|
`meta_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`meta_json`)),
|
||||||
|
`meta_text` longtext DEFAULT NULL,
|
||||||
|
`access_read` varchar(20) DEFAULT NULL COMMENT '''super'', ''administrator'', ''trusted'', ''anonymous''',
|
||||||
|
`access_write` varchar(20) DEFAULT NULL COMMENT '''super'', ''administrator'', ''trusted'', ''anonymous''',
|
||||||
|
`access_delete` varchar(20) DEFAULT NULL COMMENT '''super'', ''administrator'', ''trusted'', ''anonymous''',
|
||||||
|
`enable` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`hide` tinyint(1) DEFAULT NULL,
|
||||||
|
`priority` tinyint(1) DEFAULT NULL,
|
||||||
|
`sort` int(11) DEFAULT NULL,
|
||||||
|
`group` varchar(100) DEFAULT NULL,
|
||||||
|
`notes` text DEFAULT NULL,
|
||||||
|
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
|
||||||
|
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Triggers `data_store`
|
||||||
|
--
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_insert_data_store` BEFORE INSERT ON `data_store` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_str(11, 'URL');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_update_data_store` BEFORE UPDATE ON `data_store` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_str(11, 'URL');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for table `data_store`
|
||||||
|
--
|
||||||
|
ALTER TABLE `data_store`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD UNIQUE KEY `id_random` (`id_random`),
|
||||||
|
ADD KEY `created_on` (`created_on`),
|
||||||
|
ADD KEY `updated_on` (`updated_on`),
|
||||||
|
ADD KEY `code` (`code`),
|
||||||
|
ADD KEY `account_id` (`account_id`),
|
||||||
|
ADD KEY `for_type` (`for_type`,`for_id`),
|
||||||
|
ADD KEY `enable` (`enable`),
|
||||||
|
ADD KEY `priority` (`priority`),
|
||||||
|
ADD KEY `sort` (`sort`),
|
||||||
|
ADD KEY `group` (`group`),
|
||||||
|
ADD KEY `hide` (`hide`),
|
||||||
|
ADD KEY `account_id_2` (`account_id`,`for_type`,`for_id`,`code`,`enable`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for table `data_store`
|
||||||
|
--
|
||||||
|
ALTER TABLE `data_store`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
@@ -0,0 +1,259 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 5.2.3
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: localhost
|
||||||
|
-- Generation Time: Jan 06, 2026 at 06:24 PM
|
||||||
|
-- Server version: 12.1.2-MariaDB-log
|
||||||
|
-- PHP Version: 8.4.15
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Database: `aether_dev`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `event`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `event` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
|
||||||
|
`code` varchar(100) DEFAULT NULL,
|
||||||
|
`account_id` int(11) DEFAULT NULL,
|
||||||
|
`poc_event_person_id` int(11) DEFAULT NULL COMMENT 'use this when possible',
|
||||||
|
`poc_person_id` int(11) DEFAULT NULL COMMENT 'use this only if needed',
|
||||||
|
`external_person_id` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'person ID generated by external system',
|
||||||
|
`user_id` int(11) DEFAULT NULL COMMENT 'user that owns the event',
|
||||||
|
`lu_event_type_id` int(11) DEFAULT NULL,
|
||||||
|
`conference` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'yes allows for abstracts, sessions, presentations, presenters, badges, etc',
|
||||||
|
`type` varchar(50) DEFAULT NULL,
|
||||||
|
`name` varchar(200) NOT NULL,
|
||||||
|
`summary` text DEFAULT NULL,
|
||||||
|
`description` text DEFAULT NULL,
|
||||||
|
`format` text DEFAULT NULL COMMENT 'format of the event',
|
||||||
|
`lu_time_zone_id` int(11) DEFAULT NULL,
|
||||||
|
`timezone` varchar(100) DEFAULT NULL,
|
||||||
|
`start_datetime` datetime DEFAULT NULL,
|
||||||
|
`end_datetime` datetime DEFAULT NULL,
|
||||||
|
`recurring` tinyint(1) DEFAULT NULL COMMENT 'recurring event',
|
||||||
|
`recurring_pattern` varchar(50) DEFAULT NULL,
|
||||||
|
`recurring_start_time` time DEFAULT NULL COMMENT 'recurring event start time',
|
||||||
|
`recurring_end_time` time DEFAULT NULL COMMENT 'recurring event end time',
|
||||||
|
`recurring_text` text DEFAULT NULL COMMENT 'text describing how and when the event recurs',
|
||||||
|
`weekday_sunday` tinyint(1) DEFAULT NULL,
|
||||||
|
`weekday_monday` tinyint(1) DEFAULT NULL,
|
||||||
|
`weekday_tuesday` tinyint(1) DEFAULT NULL,
|
||||||
|
`weekday_wednesday` tinyint(1) DEFAULT NULL,
|
||||||
|
`weekday_thursday` tinyint(1) DEFAULT NULL,
|
||||||
|
`weekday_friday` tinyint(1) DEFAULT NULL,
|
||||||
|
`weekday_saturday` tinyint(1) DEFAULT NULL,
|
||||||
|
`address_location_id` int(11) DEFAULT NULL,
|
||||||
|
`location_address_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
|
||||||
|
`location_address_json_ext` longtext GENERATED ALWAYS AS (json_unquote(json_extract(`location_address_json`,'$'))) STORED,
|
||||||
|
`location_text` text DEFAULT NULL COMMENT 'text information about the location',
|
||||||
|
`online_start` datetime DEFAULT NULL,
|
||||||
|
`online_end` datetime DEFAULT NULL,
|
||||||
|
`reg_deadline_1` datetime DEFAULT NULL,
|
||||||
|
`reg_deadline_2` datetime DEFAULT NULL,
|
||||||
|
`reg_deadline_3` datetime DEFAULT NULL,
|
||||||
|
`reg_deadline_4` datetime DEFAULT NULL,
|
||||||
|
`max_registrants` int(11) DEFAULT NULL,
|
||||||
|
`private` tinyint(1) DEFAULT 0 COMMENT 'invite only event',
|
||||||
|
`physical` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'physical in person event',
|
||||||
|
`virtual` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'virtual remote access event',
|
||||||
|
`image_path` varchar(500) DEFAULT NULL,
|
||||||
|
`logo_path` varchar(500) DEFAULT NULL,
|
||||||
|
`logo_bg_color` varchar(25) DEFAULT NULL,
|
||||||
|
`banner_path` varchar(500) DEFAULT NULL,
|
||||||
|
`banner_bg_color` varchar(25) DEFAULT NULL,
|
||||||
|
`logo_filename` varchar(200) DEFAULT NULL,
|
||||||
|
`banner_image_filename` varchar(200) DEFAULT NULL,
|
||||||
|
`banner_html` text DEFAULT NULL,
|
||||||
|
`site_h1` varchar(500) DEFAULT NULL,
|
||||||
|
`site_h2` varchar(500) DEFAULT NULL,
|
||||||
|
`external_url` varchar(500) DEFAULT NULL,
|
||||||
|
`external_url_text` varchar(500) DEFAULT NULL,
|
||||||
|
`attend_url` varchar(500) DEFAULT NULL,
|
||||||
|
`attend_url_text` varchar(500) DEFAULT NULL,
|
||||||
|
`attend_url_code` varchar(50) DEFAULT NULL COMMENT 'id, code, nickname, alias',
|
||||||
|
`attend_url_passcode` varchar(50) DEFAULT NULL,
|
||||||
|
`attend_phone` varchar(50) DEFAULT NULL,
|
||||||
|
`attend_phone_passcode` varchar(50) DEFAULT NULL,
|
||||||
|
`attend_text` text DEFAULT NULL,
|
||||||
|
`attend_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`attend_json`)),
|
||||||
|
`contact_1_id` int(11) DEFAULT NULL,
|
||||||
|
`contact_2_id` int(11) DEFAULT NULL,
|
||||||
|
`contact_3_id` int(11) DEFAULT NULL,
|
||||||
|
`contact_li_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`contact_li_json`)),
|
||||||
|
`contact_li_json_ext` longtext GENERATED ALWAYS AS (json_unquote(json_extract(`contact_li_json`,'$'))) STORED,
|
||||||
|
`contact_name` varchar(200) DEFAULT NULL,
|
||||||
|
`contact_email` varchar(254) DEFAULT NULL,
|
||||||
|
`contact_phone` varchar(50) DEFAULT NULL,
|
||||||
|
`contact_other` text DEFAULT NULL,
|
||||||
|
`contact_text` text DEFAULT NULL,
|
||||||
|
`event_file_upload_information` text DEFAULT NULL,
|
||||||
|
`enable` tinyint(1) NOT NULL DEFAULT 1,
|
||||||
|
`enable_from` datetime DEFAULT NULL,
|
||||||
|
`enable_to` datetime DEFAULT NULL,
|
||||||
|
`enable_for_administrator` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`enable_for_support` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`enable_for_assistant` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`enable_for_trusted` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`enable_for_authenticated` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`enable_for_anonymous` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`enable_comments` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`send_moderator_email` tinyint(1) DEFAULT NULL,
|
||||||
|
`moderator_email` varchar(254) DEFAULT NULL,
|
||||||
|
`disable_navigation` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`enable_event_file_upload_for_event` tinyint(1) DEFAULT NULL,
|
||||||
|
`enable_event_file_upload_for_location` tinyint(1) DEFAULT NULL,
|
||||||
|
`enable_event_file_upload_for_session` tinyint(1) DEFAULT NULL,
|
||||||
|
`enable_event_file_upload_for_presentation` tinyint(1) DEFAULT NULL,
|
||||||
|
`enable_event_file_upload_for_presenter` tinyint(1) DEFAULT NULL,
|
||||||
|
`enable_event_file_upload_review_question` tinyint(1) DEFAULT NULL,
|
||||||
|
`enable_event_file_upload_email_question` tinyint(1) DEFAULT NULL,
|
||||||
|
`enable_event_file_upload_comments_question` tinyint(1) DEFAULT NULL,
|
||||||
|
`enable_event_file_approval_option` tinyint(1) DEFAULT NULL,
|
||||||
|
`enable_event_file_public_use_option` tinyint(1) DEFAULT NULL,
|
||||||
|
`enable_event_file_member_use_option` tinyint(1) DEFAULT NULL,
|
||||||
|
`enable_event_file_attendee_use_option` tinyint(1) DEFAULT NULL,
|
||||||
|
`enable_event_file_publish_option` tinyint(1) DEFAULT NULL,
|
||||||
|
`enable_event_file_purpose_option` tinyint(1) DEFAULT NULL,
|
||||||
|
`enable_event_file_os_selection_option` tinyint(1) DEFAULT NULL COMMENT 'allow selection between macOS and Windows',
|
||||||
|
`enable_event_file_os_change_option` tinyint(1) DEFAULT NULL,
|
||||||
|
`custom_event_file_upload_description` text DEFAULT NULL,
|
||||||
|
`custom_event_file_agreement_1_text` text DEFAULT NULL,
|
||||||
|
`custom_event_file_agreement_1_description` text DEFAULT NULL,
|
||||||
|
`ask_speaker_ready_room` tinyint(1) DEFAULT NULL,
|
||||||
|
`ask_presentation_publish_optout` tinyint(1) DEFAULT NULL,
|
||||||
|
`default_event_file_to_public_use` tinyint(1) DEFAULT NULL,
|
||||||
|
`ask_for_public_version` tinyint(1) DEFAULT NULL,
|
||||||
|
`hide_file_upload_presentation_name` tinyint(1) DEFAULT NULL,
|
||||||
|
`hide_session_codes` tinyint(1) DEFAULT NULL,
|
||||||
|
`custom_agreement_1_text` text DEFAULT NULL,
|
||||||
|
`custom_agreement_1_description` text DEFAULT NULL,
|
||||||
|
`unauthenticated_access` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`unauthenticated_access_public_endpoint` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`mod_abstracts_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`mod_abstracts_json`)),
|
||||||
|
`mod_badges_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'badges config options' CHECK (json_valid(`mod_badges_json`)),
|
||||||
|
`mod_exhibits_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'exhibits config options' CHECK (json_valid(`mod_exhibits_json`)),
|
||||||
|
`mod_meetings_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`mod_meetings_json`)),
|
||||||
|
`mod_pres_mgmt_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`mod_pres_mgmt_json`)),
|
||||||
|
`cfg_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'config in JSON format' CHECK (json_valid(`cfg_json`)),
|
||||||
|
`hide` tinyint(1) DEFAULT NULL,
|
||||||
|
`status` varchar(25) DEFAULT NULL,
|
||||||
|
`review` tinyint(1) DEFAULT NULL,
|
||||||
|
`approve` tinyint(1) DEFAULT NULL,
|
||||||
|
`ready` tinyint(1) DEFAULT NULL,
|
||||||
|
`ready_on` datetime DEFAULT NULL,
|
||||||
|
`archive` tinyint(1) DEFAULT NULL,
|
||||||
|
`archive_on` datetime DEFAULT NULL,
|
||||||
|
`priority` tinyint(1) DEFAULT NULL,
|
||||||
|
`sort` int(11) DEFAULT NULL,
|
||||||
|
`group` varchar(100) DEFAULT NULL,
|
||||||
|
`default_qry_str` text DEFAULT NULL COMMENT 'for FULLTEXT indexed searches',
|
||||||
|
`notes` text DEFAULT NULL,
|
||||||
|
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
|
||||||
|
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Triggers `event`
|
||||||
|
--
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_insert_event` BEFORE INSERT ON `event` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_pattern('3CN-2CN-2CN-2CN');
|
||||||
|
/* SET NEW.id_random = gen_rand_str(11, 'URL'); */
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SET NEW.default_qry_str = event_default_qry_str(NEW.id_random, NEW.type, NEW.name, NEW.description, NEW.timezone, NEW.recurring_pattern, NEW.recurring_text, NEW.location_text, NEW.attend_text, NEW.contact_text);
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_update_event` BEFORE UPDATE ON `event` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
SET NEW.id_random = gen_rand_pattern('3CN-2CN-2CN-2CN');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SET NEW.default_qry_str = event_default_qry_str(NEW.id_random, NEW.type, NEW.name, NEW.description, NEW.timezone, NEW.recurring_pattern, NEW.recurring_text, NEW.location_text, NEW.attend_text, NEW.contact_text);
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `event_after_delete` AFTER DELETE ON `event` FOR EACH ROW BEGIN
|
||||||
|
DELETE FROM event_person WHERE event_person.id = old.poc_event_person_id;
|
||||||
|
DELETE FROM address WHERE address.for_id = old.id AND address.for_type = 'event';
|
||||||
|
DELETE FROM address WHERE address.id = old.address_location_id;
|
||||||
|
DELETE FROM contact WHERE contact.for_id = old.id AND contact.for_type = 'event';
|
||||||
|
DELETE FROM contact WHERE contact.id = old.contact_1_id;
|
||||||
|
DELETE FROM contact WHERE contact.id = old.contact_2_id;
|
||||||
|
DELETE FROM contact WHERE contact.id = old.contact_3_id;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for table `event`
|
||||||
|
--
|
||||||
|
ALTER TABLE `event`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD UNIQUE KEY `id_random` (`id_random`),
|
||||||
|
ADD KEY `account_id` (`account_id`),
|
||||||
|
ADD KEY `created_on` (`created_on`),
|
||||||
|
ADD KEY `updated_on` (`updated_on`),
|
||||||
|
ADD KEY `sort` (`sort`),
|
||||||
|
ADD KEY `conference` (`conference`),
|
||||||
|
ADD KEY `enable` (`enable`),
|
||||||
|
ADD KEY `archive` (`archive`),
|
||||||
|
ADD KEY `address_location_id` (`address_location_id`) USING HASH,
|
||||||
|
ADD KEY `poc_event_person_id` (`poc_event_person_id`) USING HASH,
|
||||||
|
ADD KEY `contact_id_1` (`contact_1_id`) USING HASH,
|
||||||
|
ADD KEY `contact_id_2` (`contact_2_id`) USING HASH,
|
||||||
|
ADD KEY `priority` (`priority`),
|
||||||
|
ADD KEY `hide` (`hide`);
|
||||||
|
ALTER TABLE `event` ADD FULLTEXT KEY `tbl_fulltext_default_qry_str` (`default_qry_str`);
|
||||||
|
ALTER TABLE `event` ADD FULLTEXT KEY `fulltext_location_address_json` (`location_address_json`);
|
||||||
|
ALTER TABLE `event` ADD FULLTEXT KEY `fulltext_contact_li_json` (`contact_li_json`);
|
||||||
|
ALTER TABLE `event` ADD FULLTEXT KEY `fulltext_location_address_json_ext` (`location_address_json_ext`);
|
||||||
|
ALTER TABLE `event` ADD FULLTEXT KEY `fulltext_contact_li_json_ext` (`contact_li_json_ext`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for table `event`
|
||||||
|
--
|
||||||
|
ALTER TABLE `event`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
@@ -0,0 +1,235 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 5.2.3
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: localhost
|
||||||
|
-- Generation Time: Jan 06, 2026 at 06:24 PM
|
||||||
|
-- Server version: 12.1.2-MariaDB-log
|
||||||
|
-- PHP Version: 8.4.15
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Database: `aether_dev`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `event_badge`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `event_badge` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`id_random` varchar(22) NOT NULL,
|
||||||
|
`external_id` varchar(100) DEFAULT NULL,
|
||||||
|
`external_event_id` varchar(75) DEFAULT NULL COMMENT 'externally generated event ID',
|
||||||
|
`external_registration_id` varchar(75) DEFAULT NULL COMMENT 'registration ID generated by external system (was external_reg_id)',
|
||||||
|
`external_person_id` varchar(75) DEFAULT NULL COMMENT 'person ID generated by external system (was external_sys_id)',
|
||||||
|
`event_id_only` int(11) DEFAULT NULL COMMENT 'This should only be used when the event_person record can not be created.',
|
||||||
|
`event_person_id` int(11) DEFAULT NULL,
|
||||||
|
`event_badge_template_id` int(11) DEFAULT NULL COMMENT 'if null then use the "default" template for the event',
|
||||||
|
`pronouns` varchar(50) DEFAULT NULL COMMENT 'preferred pronouns',
|
||||||
|
`pronouns_override` varchar(50) DEFAULT NULL COMMENT 'override for pronouns',
|
||||||
|
`informal_name` varchar(50) DEFAULT NULL COMMENT 'nickname',
|
||||||
|
`title_names` varchar(100) DEFAULT NULL COMMENT 'prefix',
|
||||||
|
`given_name` varchar(50) DEFAULT NULL COMMENT 'first name',
|
||||||
|
`middle_name` varchar(50) DEFAULT NULL,
|
||||||
|
`family_name` varchar(100) DEFAULT NULL COMMENT 'last name',
|
||||||
|
`designations` varchar(100) DEFAULT NULL COMMENT 'designations and suffix',
|
||||||
|
`professional_title` varchar(150) DEFAULT NULL COMMENT 'includes degrees and credentials',
|
||||||
|
`professional_title_override` varchar(200) DEFAULT NULL COMMENT 'override for professional title',
|
||||||
|
`full_name` varchar(200) DEFAULT NULL,
|
||||||
|
`full_name_override` varchar(150) DEFAULT NULL COMMENT 'was display_name',
|
||||||
|
`affiliations` text DEFAULT NULL,
|
||||||
|
`affiliations_override` varchar(200) DEFAULT NULL COMMENT 'override for affiliations',
|
||||||
|
`email` varchar(254) DEFAULT NULL,
|
||||||
|
`email_override` varchar(254) DEFAULT NULL COMMENT 'override for email',
|
||||||
|
`phone` varchar(25) DEFAULT NULL,
|
||||||
|
`phone_override` varchar(25) DEFAULT NULL COMMENT 'override for phone',
|
||||||
|
`address_line_1` varchar(200) DEFAULT NULL,
|
||||||
|
`address_line_2` varchar(200) DEFAULT NULL,
|
||||||
|
`address_line_3` varchar(200) DEFAULT NULL,
|
||||||
|
`city` varchar(100) DEFAULT NULL,
|
||||||
|
`country_subdivision_code` varchar(8) DEFAULT NULL,
|
||||||
|
`state_province` varchar(100) DEFAULT NULL,
|
||||||
|
`state_province_abb` varchar(10) DEFAULT NULL COMMENT 'state/province abbreviation',
|
||||||
|
`postal_code` varchar(25) DEFAULT NULL,
|
||||||
|
`country_alpha_2_code` varchar(2) DEFAULT NULL,
|
||||||
|
`country` varchar(100) DEFAULT NULL,
|
||||||
|
`full_address` varchar(200) DEFAULT NULL,
|
||||||
|
`location` varchar(200) DEFAULT NULL,
|
||||||
|
`location_override` varchar(200) DEFAULT NULL COMMENT 'override for location',
|
||||||
|
`location_short` varchar(100) DEFAULT NULL COMMENT 'auto gen with trigger',
|
||||||
|
`location_long` varchar(200) DEFAULT NULL COMMENT 'auto gen with trigger',
|
||||||
|
`query_str` varchar(150) DEFAULT NULL,
|
||||||
|
`badge_type_code` varchar(50) DEFAULT NULL,
|
||||||
|
`badge_type_code_override` varchar(50) DEFAULT NULL,
|
||||||
|
`badge_type` varchar(100) DEFAULT NULL,
|
||||||
|
`badge_type_override` varchar(100) DEFAULT NULL,
|
||||||
|
`member_type_code` varchar(50) DEFAULT NULL,
|
||||||
|
`member_type` varchar(100) DEFAULT NULL,
|
||||||
|
`member_status` varchar(50) DEFAULT NULL,
|
||||||
|
`registration_type_code` varchar(50) DEFAULT NULL,
|
||||||
|
`registration_type` varchar(100) DEFAULT NULL,
|
||||||
|
`other_1` varchar(100) DEFAULT NULL,
|
||||||
|
`other_2` varchar(100) DEFAULT NULL,
|
||||||
|
`ticket_1_code` varchar(100) DEFAULT NULL,
|
||||||
|
`ticket_2_code` varchar(100) DEFAULT NULL,
|
||||||
|
`ticket_3_code` varchar(100) DEFAULT NULL,
|
||||||
|
`ticket_4_code` varchar(100) DEFAULT NULL,
|
||||||
|
`ticket_5_code` varchar(100) DEFAULT NULL,
|
||||||
|
`ticket_6_code` varchar(100) DEFAULT NULL,
|
||||||
|
`ticket_7_code` varchar(100) DEFAULT NULL,
|
||||||
|
`ticket_8_code` varchar(100) DEFAULT NULL,
|
||||||
|
`allow_tracking` tinyint(1) DEFAULT NULL,
|
||||||
|
`allow_tracking_field_li` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '[''given_name'', ''family_name'', ''email'']' CHECK (json_valid(`allow_tracking_field_li`)),
|
||||||
|
`agree_to_tc` tinyint(1) DEFAULT NULL COMMENT 'agree to terms and conditions',
|
||||||
|
`print_first_datetime` datetime DEFAULT NULL,
|
||||||
|
`print_last_datetime` datetime DEFAULT NULL,
|
||||||
|
`print_count` int(11) DEFAULT NULL,
|
||||||
|
`data_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`data_json`)),
|
||||||
|
`cfg_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`cfg_json`)),
|
||||||
|
`hide` tinyint(1) DEFAULT 0,
|
||||||
|
`priority` tinyint(1) DEFAULT NULL,
|
||||||
|
`sort` int(11) DEFAULT NULL,
|
||||||
|
`group` varchar(100) DEFAULT NULL,
|
||||||
|
`enable` tinyint(1) DEFAULT 1,
|
||||||
|
`default_qry_str` text DEFAULT NULL COMMENT 'for FULLTEXT indexed searches',
|
||||||
|
`notes` text DEFAULT NULL,
|
||||||
|
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
|
||||||
|
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Triggers `event_badge`
|
||||||
|
--
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_insert_event_badge` BEFORE INSERT ON `event_badge` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N');
|
||||||
|
/* SET NEW.id_random = gen_rand_str(11, 'URL'); */
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SET NEW.full_name = name_for_full_name(NEW.informal_name, NEW.title_names, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.designations);
|
||||||
|
|
||||||
|
IF (NEW.location IS NULL OR NEW.location = '')
|
||||||
|
THEN
|
||||||
|
SET NEW.location = make_location_str(NEW.city, NEW.state_province, NEW.country);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF (NEW.full_address IS NULL OR NEW.full_address = '')
|
||||||
|
THEN
|
||||||
|
SET NEW.full_address = make_full_address_str(NEW.address_line_1, NEW.address_line_2, NEW.address_line_3, NEW.city, NEW.state_province, NEW.postal_code, NEW.country);
|
||||||
|
/*SET NEW.notes = CONCAT(COALESCE(`NEW`.`notes`,''), ';;sys::overide empty full_address');*/
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF (NEW.city IS NOT NULL OR NEW.state_province IS NOT NULL OR NEW.country IS NOT NULL)
|
||||||
|
THEN
|
||||||
|
SET NEW.location_long = badge_full_address(NEW.city, NEW.state_province, NEW.country);
|
||||||
|
/*SET NEW.notes = CONCAT(COALESCE(`NEW`.`notes`,''), ';;sys::overide empty location');*/
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF (NEW.city IS NOT NULL OR NEW.state_province_abb IS NOT NULL OR NEW.country_alpha_2_code IS NOT NULL)
|
||||||
|
THEN
|
||||||
|
SET NEW.location_short = badge_location_short(NEW.city, NEW.state_province_abb, NEW.country_alpha_2_code);
|
||||||
|
/*SET NEW.notes = CONCAT(COALESCE(`NEW`.`notes`,''), ';;sys::overide empty location');*/
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SET NEW.default_qry_str = event_badge_default_qry_str(NEW.id_random, NEW.full_name, NEW.full_name_override, NEW.affiliations, NEW.affiliations_override, NEW.email, NEW.email_override, NEW.location, NEW.location_override);
|
||||||
|
SET NEW.query_str = badge_query_str(NEW.id_random, NEW.informal_name, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.email);
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_update_event_badge` BEFORE UPDATE ON `event_badge` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SET NEW.full_name = name_for_full_name(NEW.informal_name, NEW.title_names, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.designations);
|
||||||
|
|
||||||
|
IF (NEW.location IS NULL OR NEW.location = '')
|
||||||
|
THEN
|
||||||
|
SET NEW.location = make_location_str(NEW.city, NEW.state_province, NEW.country);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF (NEW.full_address IS NULL OR NEW.full_address = '')
|
||||||
|
THEN
|
||||||
|
SET NEW.full_address = make_full_address_str(NEW.address_line_1, NEW.address_line_2, NEW.address_line_3, NEW.city, NEW.state_province, NEW.postal_code, NEW.country);
|
||||||
|
/*SET NEW.notes = CONCAT(COALESCE(`NEW`.`notes`,''), ';;sys::overide empty full_address');*/
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF (NEW.city IS NOT NULL OR NEW.state_province IS NOT NULL OR NEW.country IS NOT NULL)
|
||||||
|
THEN
|
||||||
|
SET NEW.location_long = badge_full_address(NEW.city, NEW.state_province, NEW.country);
|
||||||
|
/*SET NEW.notes = CONCAT(COALESCE(`NEW`.`notes`,''), ';;sys::overide empty location');*/
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF (NEW.city IS NOT NULL OR NEW.state_province_abb IS NOT NULL OR NEW.country_alpha_2_code IS NOT NULL)
|
||||||
|
THEN
|
||||||
|
SET NEW.location_short = badge_location_short(NEW.city, NEW.state_province_abb, NEW.country_alpha_2_code);
|
||||||
|
/*SET NEW.notes = CONCAT(COALESCE(`NEW`.`notes`,''), ';;sys::overide empty location');*/
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SET NEW.default_qry_str = event_badge_default_qry_str(NEW.id_random, NEW.full_name, NEW.full_name_override, NEW.affiliations, NEW.affiliations_override, NEW.email, NEW.email_override, NEW.location, NEW.location_override);
|
||||||
|
SET NEW.query_str = badge_query_str(NEW.id_random, NEW.informal_name, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.email);
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for table `event_badge`
|
||||||
|
--
|
||||||
|
ALTER TABLE `event_badge`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD UNIQUE KEY `id_random` (`id_random`),
|
||||||
|
ADD KEY `external_id` (`external_id`),
|
||||||
|
ADD KEY `event_person_id` (`event_person_id`),
|
||||||
|
ADD KEY `given_name` (`given_name`),
|
||||||
|
ADD KEY `family_name` (`family_name`),
|
||||||
|
ADD KEY `display_name` (`full_name_override`),
|
||||||
|
ADD KEY `email` (`email`),
|
||||||
|
ADD KEY `badge_type_code` (`badge_type_code`),
|
||||||
|
ADD KEY `member_type_code` (`member_type_code`),
|
||||||
|
ADD KEY `registration_type_code` (`registration_type_code`),
|
||||||
|
ADD KEY `enable` (`enable`),
|
||||||
|
ADD KEY `created_on` (`created_on`),
|
||||||
|
ADD KEY `updated_on` (`updated_on`),
|
||||||
|
ADD KEY `external_event_id` (`external_event_id`),
|
||||||
|
ADD KEY `event_badge_template_id` (`event_badge_template_id`);
|
||||||
|
ALTER TABLE `event_badge` ADD FULLTEXT KEY `query_str` (`query_str`);
|
||||||
|
ALTER TABLE `event_badge` ADD FULLTEXT KEY `tbl_fulltext_default_qry_str` (`default_qry_str`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for table `event_badge`
|
||||||
|
--
|
||||||
|
ALTER TABLE `event_badge`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
@@ -0,0 +1,242 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 5.2.3
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: localhost
|
||||||
|
-- Generation Time: Jan 06, 2026 at 06:25 PM
|
||||||
|
-- Server version: 12.1.2-MariaDB-log
|
||||||
|
-- PHP Version: 8.4.15
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Database: `aether_dev`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `event_file`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `event_file` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
|
||||||
|
`hosted_file_id` int(11) DEFAULT NULL,
|
||||||
|
`for_type` varchar(50) DEFAULT NULL,
|
||||||
|
`for_id` int(11) DEFAULT NULL,
|
||||||
|
`event_id` int(11) DEFAULT NULL COMMENT 'is this needed?',
|
||||||
|
`event_session_id` int(11) DEFAULT NULL COMMENT 'is this needed?',
|
||||||
|
`event_presentation_id` int(11) DEFAULT NULL COMMENT 'is this needed?',
|
||||||
|
`event_presenter_id` int(11) DEFAULT NULL COMMENT 'is this needed?',
|
||||||
|
`event_location_id` int(11) DEFAULT NULL COMMENT 'is this needed?',
|
||||||
|
`event_track_id` int(11) DEFAULT NULL COMMENT 'is this needed?',
|
||||||
|
`event_exhibit_id` int(11) DEFAULT NULL COMMENT 'is this needed?',
|
||||||
|
`filename` varchar(255) DEFAULT NULL,
|
||||||
|
`extension` varchar(10) DEFAULT NULL,
|
||||||
|
`title` varchar(500) DEFAULT NULL,
|
||||||
|
`description` text DEFAULT NULL,
|
||||||
|
`internal_use` tinyint(1) DEFAULT NULL COMMENT 'hide from non-support people',
|
||||||
|
`internal_start_datetime` datetime DEFAULT NULL,
|
||||||
|
`internal_end_datetime` datetime DEFAULT NULL,
|
||||||
|
`internal_filename` varchar(255) DEFAULT NULL,
|
||||||
|
`internal_extension` varchar(10) DEFAULT NULL,
|
||||||
|
`open_in_os` varchar(50) DEFAULT NULL COMMENT 'change to open_in: [mac,win,local browser/client,remote browser/client,api,websocket,download]',
|
||||||
|
`internal_hide` tinyint(1) DEFAULT NULL,
|
||||||
|
`private_use` tinyint(1) DEFAULT NULL,
|
||||||
|
`private_start_datetime` datetime DEFAULT NULL,
|
||||||
|
`private_end_datetime` datetime DEFAULT NULL,
|
||||||
|
`private_filename` varchar(255) DEFAULT NULL,
|
||||||
|
`private_extension` varchar(10) DEFAULT NULL,
|
||||||
|
`private_hide` tinyint(1) DEFAULT NULL,
|
||||||
|
`public_use` tinyint(1) DEFAULT NULL,
|
||||||
|
`public_start_datetime` datetime DEFAULT NULL,
|
||||||
|
`public_end_datetime` datetime DEFAULT NULL,
|
||||||
|
`public_filename` varchar(255) DEFAULT NULL,
|
||||||
|
`public_extension` varchar(10) DEFAULT NULL,
|
||||||
|
`public_hide` tinyint(1) DEFAULT NULL,
|
||||||
|
`lu_file_purpose_id` int(11) DEFAULT NULL,
|
||||||
|
`file_purpose` varchar(100) DEFAULT NULL,
|
||||||
|
`publish_optout` tinyint(1) DEFAULT NULL,
|
||||||
|
`download_start_datetime` datetime DEFAULT NULL,
|
||||||
|
`download_end_datetime` datetime DEFAULT NULL,
|
||||||
|
`approved` int(11) DEFAULT NULL,
|
||||||
|
`approved_on` timestamp NULL DEFAULT NULL,
|
||||||
|
`public` tinyint(1) DEFAULT NULL,
|
||||||
|
`hide` tinyint(1) DEFAULT NULL,
|
||||||
|
`priority` tinyint(1) DEFAULT NULL,
|
||||||
|
`sort` int(11) DEFAULT NULL,
|
||||||
|
`group` varchar(100) DEFAULT NULL,
|
||||||
|
`enable` tinyint(1) NOT NULL DEFAULT 1,
|
||||||
|
`enable_after_datetime` datetime DEFAULT NULL,
|
||||||
|
`enable_before_datetime` datetime DEFAULT NULL,
|
||||||
|
`enable_for_administrator` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`enable_for_support` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`enable_for_assistant` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`enable_for_trusted` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`enable_for_authenticated` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`status` int(11) DEFAULT NULL,
|
||||||
|
`review` tinyint(1) DEFAULT NULL,
|
||||||
|
`approve` tinyint(1) DEFAULT NULL,
|
||||||
|
`ready` tinyint(1) DEFAULT NULL,
|
||||||
|
`ready_datetime` datetime DEFAULT NULL,
|
||||||
|
`archive` tinyint(1) DEFAULT NULL,
|
||||||
|
`archive_datetime` datetime DEFAULT NULL,
|
||||||
|
`enable_for_anonymous` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
|
||||||
|
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Triggers `event_file`
|
||||||
|
--
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_insert_event_file` BEFORE INSERT ON `event_file` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_str(11, 'URL');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_insert_event_file_fix_ids` BEFORE INSERT ON `event_file` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.for_type = 'event_location' AND NEW.for_id IS NOT NULL)
|
||||||
|
THEN
|
||||||
|
SET NEW.event_location_id = NEW.for_id;
|
||||||
|
SET NEW.event_id = (SELECT event_id FROM event_location WHERE event_location.id = NEW.for_id);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF (NEW.for_type = 'event_presenter' AND NEW.for_id IS NOT NULL)
|
||||||
|
THEN
|
||||||
|
SET NEW.event_presenter_id = NEW.for_id;
|
||||||
|
SET NEW.event_presentation_id = (SELECT event_presentation_id FROM event_presenter WHERE event_presenter.id = NEW.for_id);
|
||||||
|
SET NEW.event_session_id = (SELECT event_session_id FROM event_presentation WHERE event_presentation.id = NEW.event_presentation_id);
|
||||||
|
SET NEW.event_location_id = (SELECT event_location_id FROM event_session WHERE event_session.id = NEW.event_session_id);
|
||||||
|
SET NEW.event_id = (SELECT event_id FROM event_session WHERE event_session.id = NEW.event_session_id);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF (NEW.for_type = 'event_session' AND NEW.for_id IS NOT NULL)
|
||||||
|
THEN
|
||||||
|
SET NEW.event_session_id = NEW.for_id;
|
||||||
|
SET NEW.event_location_id = (SELECT event_location_id FROM event_session WHERE event_session.id = NEW.for_id);
|
||||||
|
SET NEW.event_id = (SELECT event_id FROM event_session WHERE event_session.id = NEW.for_id);
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_update_event_file` BEFORE UPDATE ON `event_file` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_str(11, 'URL');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_update_event_file_fix_ids` BEFORE UPDATE ON `event_file` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.for_type = 'event_location' AND NEW.for_id IS NOT NULL)
|
||||||
|
THEN
|
||||||
|
SET NEW.event_location_id = NEW.for_id;
|
||||||
|
SET NEW.event_id = (SELECT event_id FROM event_location WHERE event_location.id = NEW.for_id);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF (NEW.for_type = 'event_presenter' AND NEW.for_id IS NOT NULL)
|
||||||
|
THEN
|
||||||
|
SET NEW.event_presenter_id = NEW.for_id;
|
||||||
|
SET NEW.event_presentation_id = (SELECT event_presentation_id FROM event_presenter WHERE event_presenter.id = NEW.for_id);
|
||||||
|
SET NEW.event_session_id = (SELECT event_session_id FROM event_presentation WHERE event_presentation.id = NEW.event_presentation_id);
|
||||||
|
SET NEW.event_location_id = (SELECT event_location_id FROM event_session WHERE event_session.id = NEW.event_session_id);
|
||||||
|
SET NEW.event_id = (SELECT event_id FROM event_session WHERE event_session.id = NEW.event_session_id);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF (NEW.for_type = 'event_session' AND NEW.for_id IS NOT NULL)
|
||||||
|
THEN
|
||||||
|
SET NEW.event_session_id = NEW.for_id;
|
||||||
|
SET NEW.event_location_id = (SELECT event_location_id FROM event_session WHERE event_session.id = NEW.for_id);
|
||||||
|
SET NEW.event_id = (SELECT event_id FROM event_session WHERE event_session.id = NEW.for_id);
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `event_file_after_delete` AFTER DELETE ON `event_file` FOR EACH ROW BEGIN
|
||||||
|
DELETE FROM hosted_file_link WHERE hosted_file_link.hosted_file_id = OLD.hosted_file_id AND hosted_file_link.link_to_type = OLD.for_type AND hosted_file_link.link_to_id = OLD.for_id;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `event_file_after_insert` AFTER INSERT ON `event_file` FOR EACH ROW BEGIN
|
||||||
|
INSERT IGNORE INTO hosted_file_link (hosted_file_id, link_to_type, link_to_id) VALUES (NEW.hosted_file_id, NEW.for_type, NEW.for_id);
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `update approved_on` BEFORE UPDATE ON `event_file` FOR EACH ROW IF NEW.approved = 1 THEN SET NEW.approved_on = CURRENT_TIMESTAMP; END IF
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for table `event_file`
|
||||||
|
--
|
||||||
|
ALTER TABLE `event_file`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD UNIQUE KEY `id_random` (`id_random`),
|
||||||
|
ADD UNIQUE KEY `hosted_file_id_for` (`hosted_file_id`,`for_type`,`for_id`),
|
||||||
|
ADD KEY `event_session_id` (`event_session_id`),
|
||||||
|
ADD KEY `event_id` (`event_id`),
|
||||||
|
ADD KEY `hosted_file_id` (`hosted_file_id`),
|
||||||
|
ADD KEY `event_presentation_id` (`event_presentation_id`),
|
||||||
|
ADD KEY `event_presenter_id` (`event_presenter_id`),
|
||||||
|
ADD KEY `event_location_id` (`event_location_id`),
|
||||||
|
ADD KEY `created_on` (`created_on`),
|
||||||
|
ADD KEY `updated_on` (`updated_on`),
|
||||||
|
ADD KEY `event_track_id` (`event_track_id`),
|
||||||
|
ADD KEY `event_exhibit_id` (`event_exhibit_id`),
|
||||||
|
ADD KEY `hide` (`hide`),
|
||||||
|
ADD KEY `enable` (`enable`),
|
||||||
|
ADD KEY `sort` (`sort`),
|
||||||
|
ADD KEY `priority` (`priority`),
|
||||||
|
ADD KEY `for_type` (`for_type`,`for_id`),
|
||||||
|
ADD KEY `filename` (`filename`),
|
||||||
|
ADD KEY `extension` (`extension`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for table `event_file`
|
||||||
|
--
|
||||||
|
ALTER TABLE `event_file`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
@@ -0,0 +1,201 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 5.2.3
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: localhost
|
||||||
|
-- Generation Time: Jan 06, 2026 at 06:26 PM
|
||||||
|
-- Server version: 12.1.2-MariaDB-log
|
||||||
|
-- PHP Version: 8.4.15
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Database: `aether_dev`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `event_session`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `event_session` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
|
||||||
|
`external_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
|
||||||
|
`code` varchar(100) DEFAULT NULL,
|
||||||
|
`number` int(11) DEFAULT NULL,
|
||||||
|
`for_type` varchar(50) DEFAULT NULL COMMENT 'avoid using',
|
||||||
|
`for_id` int(11) DEFAULT NULL COMMENT 'avoid using',
|
||||||
|
`event_id` int(11) DEFAULT NULL,
|
||||||
|
`event_type_id` int(11) DEFAULT NULL,
|
||||||
|
`type_id` int(11) DEFAULT NULL COMMENT 'not used',
|
||||||
|
`type_code` varchar(25) DEFAULT NULL COMMENT 'from client',
|
||||||
|
`event_location_id` int(11) DEFAULT NULL,
|
||||||
|
`event_track_id` int(11) DEFAULT NULL,
|
||||||
|
`poc_event_person_id` int(11) DEFAULT NULL COMMENT 'still needed?',
|
||||||
|
`poc_person_id` int(11) DEFAULT NULL,
|
||||||
|
`poc_agree` tinyint(1) DEFAULT NULL COMMENT 'catchall for agreement or consent',
|
||||||
|
`poc_kv_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'advocate, chair, champion, moderator, organizer',
|
||||||
|
`passcode` varchar(25) DEFAULT NULL COMMENT 'for basic access',
|
||||||
|
`name` varchar(300) DEFAULT NULL,
|
||||||
|
`description` text DEFAULT NULL,
|
||||||
|
`proposal_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'responses to proposal questions in JSON format' CHECK (json_valid(`proposal_json`)),
|
||||||
|
`start_datetime` datetime DEFAULT NULL,
|
||||||
|
`end_datetime` datetime DEFAULT NULL,
|
||||||
|
`attend_url` text DEFAULT NULL,
|
||||||
|
`attend_url_text` text DEFAULT NULL,
|
||||||
|
`attend_url_passcode` varchar(15) DEFAULT NULL,
|
||||||
|
`attend_phone` varchar(15) DEFAULT NULL,
|
||||||
|
`attend_phone_passcode` varchar(15) DEFAULT NULL,
|
||||||
|
`attend_text` text DEFAULT NULL,
|
||||||
|
`rehearsal_start_datetime` datetime DEFAULT NULL,
|
||||||
|
`rehearsal_end_datetime` datetime DEFAULT NULL,
|
||||||
|
`rehearsal_url` text DEFAULT NULL,
|
||||||
|
`rehearsal_url_passcode` varchar(15) DEFAULT NULL COMMENT 'remove field?',
|
||||||
|
`rehearsal_phone` varchar(15) DEFAULT NULL COMMENT 'remove field?',
|
||||||
|
`rehearsal_phone_passcode` varchar(15) DEFAULT NULL COMMENT 'remove field?',
|
||||||
|
`rehearsal_text` text DEFAULT NULL,
|
||||||
|
`image_path` varchar(7) DEFAULT NULL COMMENT 'remove field?',
|
||||||
|
`download_start_datetime` datetime DEFAULT NULL,
|
||||||
|
`download_end_datetime` datetime DEFAULT NULL,
|
||||||
|
`internal_use` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'hide from non-support people',
|
||||||
|
`record_audio` tinyint(1) DEFAULT 0 COMMENT 'record presentations',
|
||||||
|
`record_video` tinyint(1) DEFAULT 0 COMMENT 'record presentations',
|
||||||
|
`internal_notes` text DEFAULT NULL COMMENT 'general notes',
|
||||||
|
`internal_notes_access` text DEFAULT NULL COMMENT 'accessibility and accommodations',
|
||||||
|
`internal_notes_av` text DEFAULT NULL COMMENT 'audio video',
|
||||||
|
`internal_notes_fb` text DEFAULT NULL COMMENT 'food and beverage',
|
||||||
|
`internal_notes_it` text DEFAULT NULL COMMENT 'IT and networking',
|
||||||
|
`internal_notes_staff` text DEFAULT NULL COMMENT 'staffing and labor',
|
||||||
|
`ux_mode` varchar(50) DEFAULT NULL COMMENT 'colloquium, lecture, panel, poster, symposium, workshop; replaces type_code',
|
||||||
|
`enable` tinyint(1) NOT NULL DEFAULT 1,
|
||||||
|
`enable_after_datetime` datetime DEFAULT NULL,
|
||||||
|
`enable_before_datetime` datetime DEFAULT NULL,
|
||||||
|
`enable_event_file_approval_option` tinyint(1) DEFAULT NULL,
|
||||||
|
`hide` tinyint(1) DEFAULT 0,
|
||||||
|
`public` tinyint(1) DEFAULT NULL,
|
||||||
|
`public_hide` tinyint(1) DEFAULT NULL,
|
||||||
|
`hide_event_launcher` tinyint(1) DEFAULT NULL,
|
||||||
|
`status` int(11) DEFAULT NULL,
|
||||||
|
`review` tinyint(1) DEFAULT NULL COMMENT 'ready for or needs review',
|
||||||
|
`approve` tinyint(1) DEFAULT NULL COMMENT 'approved',
|
||||||
|
`ready` tinyint(1) DEFAULT NULL,
|
||||||
|
`ready_on` datetime DEFAULT NULL,
|
||||||
|
`archive` tinyint(1) DEFAULT NULL,
|
||||||
|
`archive_on` datetime DEFAULT NULL,
|
||||||
|
`alert` tinyint(1) DEFAULT NULL,
|
||||||
|
`alert_msg` text DEFAULT NULL COMMENT 'a short message from user',
|
||||||
|
`priority` tinyint(1) DEFAULT 0,
|
||||||
|
`sort` int(11) DEFAULT 0,
|
||||||
|
`group` varchar(100) DEFAULT NULL,
|
||||||
|
`default_qry_str` text DEFAULT NULL COMMENT 'for FULLTEXT indexed searches',
|
||||||
|
`notes` text DEFAULT NULL,
|
||||||
|
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
|
||||||
|
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Triggers `event_session`
|
||||||
|
--
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `after_update_event_session` AFTER UPDATE ON `event_session` FOR EACH ROW BEGIN
|
||||||
|
IF (NEW.event_location_id) THEN
|
||||||
|
UPDATE `event_file`
|
||||||
|
SET `event_file`.event_location_id = NEW.event_location_id
|
||||||
|
WHERE `event_file`.event_session_id = OLD.id OR (`event_file`.for_type = 'event_session' AND `event_file`.for_id = OLD.id);
|
||||||
|
END IF;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_insert_event_session` BEFORE INSERT ON `event_session` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N');
|
||||||
|
/* SET NEW.id_random = gen_rand_str(11, 'URL'); */
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SET NEW.default_qry_str = event_session_default_qry_str(NEW.id_random, NEW.name, NEW.description, NEW.code, NEW.type_code, NEW.start_datetime);
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_update_event_session` BEFORE UPDATE ON `event_session` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N');
|
||||||
|
/* SET NEW.id_random = gen_rand_str(11, 'URL'); */
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SET NEW.default_qry_str = event_session_default_qry_str(NEW.id_random, NEW.name, NEW.description, NEW.code, NEW.type_code, NEW.start_datetime);
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `event_session_after_delete` AFTER DELETE ON `event_session` FOR EACH ROW BEGIN
|
||||||
|
DELETE FROM event_file WHERE event_file.for_type = 'event_session' AND event_file.for_id = OLD.id;
|
||||||
|
|
||||||
|
DELETE FROM event_presentation WHERE event_presentation.event_session_id = OLD.id;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for table `event_session`
|
||||||
|
--
|
||||||
|
ALTER TABLE `event_session`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD UNIQUE KEY `id_random` (`id_random`),
|
||||||
|
ADD KEY `event_id` (`event_id`),
|
||||||
|
ADD KEY `start_datetime` (`start_datetime`),
|
||||||
|
ADD KEY `event_location_id` (`event_location_id`),
|
||||||
|
ADD KEY `poc_event_person_id` (`poc_event_person_id`),
|
||||||
|
ADD KEY `created_on` (`created_on`),
|
||||||
|
ADD KEY `updated_on` (`updated_on`),
|
||||||
|
ADD KEY `sort` (`sort`),
|
||||||
|
ADD KEY `enable` (`enable`),
|
||||||
|
ADD KEY `hide` (`hide`),
|
||||||
|
ADD KEY `priority` (`priority`),
|
||||||
|
ADD KEY `name` (`name`),
|
||||||
|
ADD KEY `external_id` (`external_id`),
|
||||||
|
ADD KEY `code` (`code`),
|
||||||
|
ADD KEY `event_track_id` (`event_track_id`),
|
||||||
|
ADD KEY `hide_event_launcher` (`hide_event_launcher`),
|
||||||
|
ADD KEY `type_code` (`type_code`),
|
||||||
|
ADD KEY `poc_person_id` (`poc_person_id`),
|
||||||
|
ADD KEY `poc_agree` (`poc_agree`);
|
||||||
|
ALTER TABLE `event_session` ADD FULLTEXT KEY `tbl_fulltext_default_qry_str` (`default_qry_str`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for table `event_session`
|
||||||
|
--
|
||||||
|
ALTER TABLE `event_session`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
@@ -0,0 +1,213 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 5.2.3
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: localhost
|
||||||
|
-- Generation Time: Jan 06, 2026 at 06:23 PM
|
||||||
|
-- Server version: 12.1.2-MariaDB-log
|
||||||
|
-- PHP Version: 8.4.15
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Database: `aether_dev`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `person`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `person` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
|
||||||
|
`source_code` varchar(25) DEFAULT NULL,
|
||||||
|
`external_id` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
|
||||||
|
`external_sys_id` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'generated by external system',
|
||||||
|
`account_id` int(11) DEFAULT NULL,
|
||||||
|
`user_id` int(11) DEFAULT NULL,
|
||||||
|
`organization_id` int(11) DEFAULT NULL,
|
||||||
|
`informal_name` varchar(50) DEFAULT NULL COMMENT 'nickname',
|
||||||
|
`title_names` varchar(100) DEFAULT NULL COMMENT 'prefix',
|
||||||
|
`given_name` varchar(50) NOT NULL DEFAULT '' COMMENT 'first name',
|
||||||
|
`middle_name` varchar(50) DEFAULT NULL,
|
||||||
|
`family_name` varchar(50) DEFAULT NULL COMMENT 'last name',
|
||||||
|
`designations` varchar(175) DEFAULT NULL COMMENT 'designations and suffix',
|
||||||
|
`professional_title` varchar(100) DEFAULT NULL COMMENT ' includes degrees and credentials ',
|
||||||
|
`full_name` varchar(150) DEFAULT NULL COMMENT 'set by triggers',
|
||||||
|
`full_name_override` varchar(150) DEFAULT NULL COMMENT 'was display_name',
|
||||||
|
`last_first_name` varchar(50) DEFAULT NULL COMMENT 'set by triggers',
|
||||||
|
`informal_full_name` varchar(150) DEFAULT NULL COMMENT 'set by triggers',
|
||||||
|
`affiliations` varchar(200) DEFAULT NULL,
|
||||||
|
`primary_email` varchar(254) DEFAULT NULL,
|
||||||
|
`tagline` text DEFAULT NULL,
|
||||||
|
`description` text DEFAULT NULL,
|
||||||
|
`biography` text DEFAULT NULL,
|
||||||
|
`birth_date` date DEFAULT NULL,
|
||||||
|
`death_date` date DEFAULT NULL,
|
||||||
|
`lu_gender_id` int(11) DEFAULT NULL,
|
||||||
|
`lu_sexuality_id` int(11) DEFAULT NULL,
|
||||||
|
`lu_race_id` int(11) DEFAULT NULL,
|
||||||
|
`lu_ethnicity_id` int(11) DEFAULT NULL,
|
||||||
|
`language_native` varchar(2) DEFAULT NULL,
|
||||||
|
`language_primary` varchar(2) DEFAULT NULL,
|
||||||
|
`language_secondary` varchar(2) DEFAULT NULL,
|
||||||
|
`lu_education_degree_id` int(11) DEFAULT NULL,
|
||||||
|
`lu_education_level_id` int(11) DEFAULT NULL,
|
||||||
|
`photo_path` varchar(2500) DEFAULT NULL,
|
||||||
|
`photo_bg_color` varchar(25) DEFAULT NULL,
|
||||||
|
`thumbnail_path` varchar(2500) DEFAULT NULL,
|
||||||
|
`thumbnail_bg_color` varchar(25) DEFAULT NULL,
|
||||||
|
`email_allowed` tinyint(1) DEFAULT NULL COMMENT 'global opt in or out for person',
|
||||||
|
`paper_mail_allowed` tinyint(1) DEFAULT NULL COMMENT 'global opt in or out for person',
|
||||||
|
`stripe_customer_id` varchar(50) DEFAULT NULL,
|
||||||
|
`allow_auth_key` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'defaults to true',
|
||||||
|
`auth_key` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
|
||||||
|
`passcode` varchar(25) DEFAULT NULL COMMENT 'for basic access',
|
||||||
|
`status` varchar(25) DEFAULT NULL COMMENT 'pending, hold, approved, rejected, banned, retired, deceased',
|
||||||
|
`status_id` int(11) DEFAULT NULL COMMENT 'not sure if using yet 2022-03-15',
|
||||||
|
`hide` tinyint(1) DEFAULT NULL,
|
||||||
|
`priority` tinyint(1) DEFAULT NULL,
|
||||||
|
`sort` int(11) DEFAULT NULL,
|
||||||
|
`group` varchar(100) DEFAULT NULL,
|
||||||
|
`notes` text DEFAULT NULL,
|
||||||
|
`cfg_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'config options' CHECK (json_valid(`cfg_json`)),
|
||||||
|
`data_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`data_json`)),
|
||||||
|
`other_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
|
||||||
|
`meta_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`meta_json`)),
|
||||||
|
`enable` tinyint(1) DEFAULT 1,
|
||||||
|
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
|
||||||
|
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Information that generally does not change often or ever.';
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Triggers `person`
|
||||||
|
--
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_insert_person` BEFORE INSERT ON `person` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_str(11, 'URL');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_insert_person_names` BEFORE INSERT ON `person` FOR EACH ROW BEGIN
|
||||||
|
SET NEW.full_name = name_for_full_name(NEW.informal_name, NEW.title_names, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.designations);
|
||||||
|
|
||||||
|
SET NEW.last_first_name = name_for_last_first_name(NEW.given_name, NEW.middle_name, NEW.family_name);
|
||||||
|
|
||||||
|
SET NEW.informal_full_name = name_for_informal_full_name(NEW.informal_name, NEW.title_names, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.designations);
|
||||||
|
|
||||||
|
/*
|
||||||
|
IF (NEW.full_name_override IS NULL OR NEW.full_name_override = '')
|
||||||
|
THEN
|
||||||
|
SET NEW.full_name_override = name_for_display_name(NEW.informal_name, NEW.given_name, NEW.middle_name, NEW.family_name);
|
||||||
|
END IF;
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
IF (NEW.informal_full_name_override IS NULL OR NEW.informal_full_name_override = '')
|
||||||
|
THEN
|
||||||
|
SET NEW.informal_full_name_override = name_for_informal_display_name(NEW.informal_name, NEW.given_name, NEW.middle_name, NEW.family_name);
|
||||||
|
END IF;
|
||||||
|
*/
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_update_person` BEFORE UPDATE ON `person` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_str(11, 'URL');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_update_person_names` BEFORE UPDATE ON `person` FOR EACH ROW BEGIN
|
||||||
|
SET NEW.full_name = name_for_full_name(NEW.informal_name, NEW.title_names, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.designations);
|
||||||
|
|
||||||
|
SET NEW.last_first_name = name_for_last_first_name(NEW.given_name, NEW.middle_name, NEW.family_name);
|
||||||
|
|
||||||
|
SET NEW.informal_full_name = name_for_informal_full_name(NEW.informal_name, NEW.title_names, NEW.given_name, NEW.middle_name, NEW.family_name, NEW.designations);
|
||||||
|
|
||||||
|
/*
|
||||||
|
IF (NEW.full_name_override IS NULL OR NEW.full_name_override = '')
|
||||||
|
THEN
|
||||||
|
SET NEW.full_name_override = name_for_display_name(NEW.informal_name, NEW.given_name, NEW.middle_name, NEW.family_name);
|
||||||
|
END IF;
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
IF (NEW.informal_full_name_override IS NULL OR NEW.informal_full_name_override = '')
|
||||||
|
THEN
|
||||||
|
SET NEW.informal_full_name_override = name_for_informal_display_name(NEW.informal_name, NEW.given_name, NEW.middle_name, NEW.family_name);
|
||||||
|
END IF;
|
||||||
|
*/
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `person_after_delete` AFTER DELETE ON `person` FOR EACH ROW BEGIN
|
||||||
|
DELETE FROM user WHERE user.id = old.user_id;
|
||||||
|
DELETE FROM contact WHERE contact.for_id = old.id AND contact.for_type = 'person';
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for table `person`
|
||||||
|
--
|
||||||
|
ALTER TABLE `person`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD UNIQUE KEY `id_random` (`id_random`),
|
||||||
|
ADD KEY `account_id` (`account_id`),
|
||||||
|
ADD KEY `user_id` (`user_id`),
|
||||||
|
ADD KEY `organization_id` (`organization_id`),
|
||||||
|
ADD KEY `created_on` (`created_on`),
|
||||||
|
ADD KEY `updated_on` (`updated_on`),
|
||||||
|
ADD KEY `external_id` (`external_sys_id`),
|
||||||
|
ADD KEY `family_name` (`family_name`),
|
||||||
|
ADD KEY `given_name` (`given_name`),
|
||||||
|
ADD KEY `enable` (`enable`),
|
||||||
|
ADD KEY `priority` (`priority`),
|
||||||
|
ADD KEY `sort` (`sort`),
|
||||||
|
ADD KEY `group` (`group`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for table `person`
|
||||||
|
--
|
||||||
|
ALTER TABLE `person`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 5.2.3
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: localhost
|
||||||
|
-- Generation Time: Jan 06, 2026 at 06:22 PM
|
||||||
|
-- Server version: 12.1.2-MariaDB-log
|
||||||
|
-- PHP Version: 8.4.15
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Database: `aether_dev`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `site`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `site` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
|
||||||
|
`code` varchar(100) DEFAULT NULL,
|
||||||
|
`account_id` int(11) DEFAULT NULL,
|
||||||
|
`name` varchar(200) NOT NULL,
|
||||||
|
`description` text DEFAULT NULL,
|
||||||
|
`restrict_access` tinyint(1) NOT NULL DEFAULT 1,
|
||||||
|
`access_key` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
|
||||||
|
`access_code_kv_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'for super, manager, administrator, trusted, public, authenticated' CHECK (json_valid(`access_code_kv_json`)),
|
||||||
|
`enable` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`enable_from` datetime DEFAULT NULL,
|
||||||
|
`enable_to` datetime DEFAULT NULL,
|
||||||
|
`logo_path` varchar(200) DEFAULT NULL,
|
||||||
|
`logo_bg_color` varchar(25) DEFAULT NULL,
|
||||||
|
`background_image_path` varchar(200) DEFAULT NULL,
|
||||||
|
`background_bg_color` varchar(25) DEFAULT NULL,
|
||||||
|
`site_menu_html_path` varchar(200) DEFAULT NULL COMMENT 'path to html file for site menu',
|
||||||
|
`site_menu` text DEFAULT NULL COMMENT 'not currently used; but want to use',
|
||||||
|
`title` varchar(200) DEFAULT NULL,
|
||||||
|
`header_html` text DEFAULT NULL,
|
||||||
|
`header_css` text DEFAULT NULL,
|
||||||
|
`header_image_path` varchar(200) DEFAULT NULL,
|
||||||
|
`header_image_bg_color` varchar(25) DEFAULT NULL,
|
||||||
|
`body_html` text DEFAULT NULL,
|
||||||
|
`tagline` text DEFAULT NULL COMMENT 'catchphrase or slogan',
|
||||||
|
`site_header_h1` text DEFAULT NULL COMMENT 'field not currently used',
|
||||||
|
`site_header_h2` text DEFAULT NULL COMMENT 'field not currently used',
|
||||||
|
`style_href` varchar(200) DEFAULT NULL,
|
||||||
|
`script_src` varchar(200) DEFAULT NULL,
|
||||||
|
`google_tracking_id` varchar(14) DEFAULT NULL,
|
||||||
|
`cfg_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '{}' COMMENT 'config in JSON format' CHECK (json_valid(`cfg_json`)),
|
||||||
|
`hide` tinyint(1) DEFAULT NULL,
|
||||||
|
`notes` text DEFAULT NULL,
|
||||||
|
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
|
||||||
|
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Triggers `site`
|
||||||
|
--
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_insert_site` BEFORE INSERT ON `site` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_str(11, 'URL');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_update_site` BEFORE UPDATE ON `site` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_str(11, 'URL');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for table `site`
|
||||||
|
--
|
||||||
|
ALTER TABLE `site`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD UNIQUE KEY `id_random` (`id_random`),
|
||||||
|
ADD KEY `account_id` (`account_id`),
|
||||||
|
ADD KEY `enable` (`enable`),
|
||||||
|
ADD KEY `access_key` (`access_key`),
|
||||||
|
ADD KEY `name` (`name`),
|
||||||
|
ADD KEY `created_on` (`created_on`),
|
||||||
|
ADD KEY `updated_on` (`updated_on`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for table `site`
|
||||||
|
--
|
||||||
|
ALTER TABLE `site`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 5.2.3
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: localhost
|
||||||
|
-- Generation Time: Jan 06, 2026 at 06:22 PM
|
||||||
|
-- Server version: 12.1.2-MariaDB-log
|
||||||
|
-- PHP Version: 8.4.15
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Database: `aether_dev`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `site_domain`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `site_domain` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
|
||||||
|
`site_id` int(11) NOT NULL,
|
||||||
|
`fqdn` varchar(200) NOT NULL,
|
||||||
|
`access_key` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
|
||||||
|
`required_referrer` varchar(200) DEFAULT NULL,
|
||||||
|
`valid_for` int(11) DEFAULT NULL COMMENT 'number of hours to allow before checking again',
|
||||||
|
`enable` tinyint(1) DEFAULT 1,
|
||||||
|
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
|
||||||
|
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Triggers `site_domain`
|
||||||
|
--
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_insert_site_domain` BEFORE INSERT ON `site_domain` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_str(11, 'URL');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_update_site_domain` BEFORE UPDATE ON `site_domain` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_str(11, 'URL');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for table `site_domain`
|
||||||
|
--
|
||||||
|
ALTER TABLE `site_domain`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD UNIQUE KEY `id_random` (`id_random`),
|
||||||
|
ADD KEY `fqdn` (`fqdn`),
|
||||||
|
ADD KEY `access_key` (`access_key`),
|
||||||
|
ADD KEY `required_referrer` (`required_referrer`),
|
||||||
|
ADD KEY `site_id` (`site_id`),
|
||||||
|
ADD KEY `enable` (`enable`),
|
||||||
|
ADD KEY `created_on` (`created_on`),
|
||||||
|
ADD KEY `updated_on` (`updated_on`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for table `site_domain`
|
||||||
|
--
|
||||||
|
ALTER TABLE `site_domain`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
@@ -0,0 +1,163 @@
|
|||||||
|
-- phpMyAdmin SQL Dump
|
||||||
|
-- version 5.2.3
|
||||||
|
-- https://www.phpmyadmin.net/
|
||||||
|
--
|
||||||
|
-- Host: localhost
|
||||||
|
-- Generation Time: Jan 06, 2026 at 06:23 PM
|
||||||
|
-- Server version: 12.1.2-MariaDB-log
|
||||||
|
-- PHP Version: 8.4.15
|
||||||
|
|
||||||
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
|
START TRANSACTION;
|
||||||
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Database: `aether_dev`
|
||||||
|
--
|
||||||
|
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `user`
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE `user` (
|
||||||
|
`id` int(11) NOT NULL,
|
||||||
|
`id_random` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT 'NULL',
|
||||||
|
`account_id` int(11) DEFAULT NULL,
|
||||||
|
`contact_id` int(11) DEFAULT NULL COMMENT 'no longer going to be used',
|
||||||
|
`organization_id` int(11) DEFAULT NULL COMMENT 'no longer going to be used',
|
||||||
|
`person_id` int(11) DEFAULT NULL COMMENT 'no longer going to be used',
|
||||||
|
`username` varchar(100) NOT NULL,
|
||||||
|
`name` varchar(100) DEFAULT NULL,
|
||||||
|
`email` varchar(254) NOT NULL,
|
||||||
|
`email_verified` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`password` varchar(100) DEFAULT NULL,
|
||||||
|
`allow_auth_key` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'allow use of auth key to sign in',
|
||||||
|
`auth_key` varchar(22) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT 'auth key for single use log in',
|
||||||
|
`enable` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`enable_from` datetime DEFAULT current_timestamp(),
|
||||||
|
`enable_to` datetime DEFAULT NULL,
|
||||||
|
`super` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Super user for the entire system. Can do everything.',
|
||||||
|
`manager` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Manager for the entire system. Can do almost everything.',
|
||||||
|
`administrator` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Administrator for a client account. Can do almost anything within that account.',
|
||||||
|
`public` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'public or shared account',
|
||||||
|
`verified` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Is this a verified user account?',
|
||||||
|
`level` int(11) DEFAULT NULL COMMENT 'access level (1 to 5)',
|
||||||
|
`status_id` int(11) DEFAULT NULL COMMENT 'offline, away, dnd, online',
|
||||||
|
`password_set_on` timestamp NOT NULL DEFAULT current_timestamp(),
|
||||||
|
`password_reset_token` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
|
||||||
|
`password_reset_expire_on` datetime DEFAULT NULL,
|
||||||
|
`logged_in_on` timestamp NULL DEFAULT NULL,
|
||||||
|
`last_activity_on` timestamp NULL DEFAULT NULL,
|
||||||
|
`hide` tinyint(1) DEFAULT NULL,
|
||||||
|
`priority` tinyint(1) DEFAULT NULL,
|
||||||
|
`sort` int(11) DEFAULT NULL COMMENT 'used as access level',
|
||||||
|
`group` varchar(100) DEFAULT NULL COMMENT 'used as access group',
|
||||||
|
`notes` text DEFAULT NULL,
|
||||||
|
`other_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`other_json`)),
|
||||||
|
`created_on` timestamp NOT NULL DEFAULT current_timestamp(),
|
||||||
|
`updated_on` timestamp NULL DEFAULT NULL ON UPDATE current_timestamp()
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='The user account.';
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Triggers `user`
|
||||||
|
--
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `after_insert_user_person_id` AFTER INSERT ON `user` FOR EACH ROW BEGIN
|
||||||
|
IF (NEW.person_id IS NOT NULL)
|
||||||
|
THEN
|
||||||
|
UPDATE person SET person.user_id = NEW.id WHERE person.id = NEW.person_id AND person.user_id IS NULL;
|
||||||
|
END IF;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `after_update_user_person_id` AFTER UPDATE ON `user` FOR EACH ROW BEGIN
|
||||||
|
IF (NEW.person_id IS NOT NULL AND OLD.person_id IS NULL)
|
||||||
|
THEN
|
||||||
|
UPDATE person SET person.user_id = NEW.id WHERE person.id = NEW.person_id AND person.user_id IS NULL;
|
||||||
|
END IF;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_insert_user` BEFORE INSERT ON `user` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_str(11, 'URL');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_update_user` BEFORE UPDATE ON `user` FOR EACH ROW BEGIN
|
||||||
|
BEGIN
|
||||||
|
IF (NEW.id_random IS NULL OR NEW.id_random = '' OR LENGTH(NEW.id_random) < 6)
|
||||||
|
THEN
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('3C-2N-2N-2N'); */
|
||||||
|
/* SET NEW.id_random = gen_rand_pattern('4C-2N-2N-2N'); */
|
||||||
|
SET NEW.id_random = gen_rand_str(11, 'URL');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `before_update_user_email` BEFORE UPDATE ON `user` FOR EACH ROW BEGIN
|
||||||
|
IF (NEW.username IS NULL OR NEW.username = '')
|
||||||
|
THEN
|
||||||
|
SET NEW.username = NEW.email;
|
||||||
|
SET NEW.notes = CONCAT(COALESCE(`NEW`.`notes`,''), ';;sys::overide empty username');
|
||||||
|
END IF;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `update_password_set_on` BEFORE UPDATE ON `user` FOR EACH ROW IF NEW.password <> OLD.password THEN SET NEW.password_set_on = CURRENT_TIMESTAMP; END IF
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Indexes for table `user`
|
||||||
|
--
|
||||||
|
ALTER TABLE `user`
|
||||||
|
ADD PRIMARY KEY (`id`),
|
||||||
|
ADD UNIQUE KEY `id_random` (`id_random`),
|
||||||
|
ADD KEY `username` (`username`) USING BTREE,
|
||||||
|
ADD KEY `account_id` (`account_id`),
|
||||||
|
ADD KEY `email` (`email`),
|
||||||
|
ADD KEY `email_2` (`email`),
|
||||||
|
ADD KEY `created_on` (`created_on`),
|
||||||
|
ADD KEY `updated_on` (`updated_on`),
|
||||||
|
ADD KEY `enable` (`enable`),
|
||||||
|
ADD KEY `name` (`name`);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for dumped tables
|
||||||
|
--
|
||||||
|
|
||||||
|
--
|
||||||
|
-- AUTO_INCREMENT for table `user`
|
||||||
|
--
|
||||||
|
ALTER TABLE `user`
|
||||||
|
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||||
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
Reference in New Issue
Block a user