-- START: function/random_string.sql -- create random string with length X CREATE FUNCTION random_string(randomLength int) RETURNS text AS $$ SELECT array_to_string( ARRAY( SELECT substring( 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', trunc(random() * 62)::int + 1, 1 ) FROM generate_series(1, randomLength) AS gs(x) ), '' ) $$ LANGUAGE SQL RETURNS NULL ON NULL INPUT VOLATILE; -- LEAKPROOF; -- END: function/random_string.sql -- START: function/set_edit_generic.sql -- adds the created or updated date tags CREATE OR REPLACE FUNCTION set_edit_generic() RETURNS TRIGGER AS $$ DECLARE random_length INT = 12; -- that should be long enough BEGIN IF TG_OP = 'INSERT' THEN NEW.date_created := 'now'; NEW.cuid := random_string(random_length); ELSIF TG_OP = 'UPDATE' THEN NEW.date_updated := 'now'; END IF; RETURN NEW; END; $$ LANGUAGE 'plpgsql'; -- END: function/set_edit_generic.sql -- START: function/edit_access_set_uid.sql -- add uid add for edit_access table CREATE OR REPLACE FUNCTION set_edit_access_uid() RETURNS TRIGGER AS $$ DECLARE myrec RECORD; v_uid VARCHAR; BEGIN -- skip if NEW.name is not set IF NEW.name IS NOT NULL AND NEW.name <> '' THEN -- use NEW.name as base, remove all spaces -- name data is already unique, so we do not need to worry about this here v_uid := REPLACE(NEW.name, ' ', ''); IF TG_OP = 'INSERT' THEN -- always set NEW.uid := v_uid; ELSIF TG_OP = 'UPDATE' THEN -- check if not set, then set SELECT INTO myrec t.* FROM edit_access t WHERE edit_access_id = NEW.edit_access_id; IF FOUND THEN NEW.uid := v_uid; END IF; END IF; END IF; RETURN NEW; END; $$ LANGUAGE 'plpgsql'; -- END: function/edit_access_set_uid.sql -- START: function/edit_group_set_uid.sql -- add uid add for edit_group table CREATE OR REPLACE FUNCTION set_edit_group_uid() RETURNS TRIGGER AS $$ DECLARE myrec RECORD; v_uid VARCHAR; BEGIN -- skip if NEW.name is not set IF NEW.name IS NOT NULL AND NEW.name <> '' THEN -- use NEW.name as base, remove all spaces -- name data is already unique, so we do not need to worry about this here v_uid := REPLACE(NEW.name, ' ', ''); IF TG_OP = 'INSERT' THEN -- always set NEW.uid := v_uid; ELSIF TG_OP = 'UPDATE' THEN -- check if not set, then set SELECT INTO myrec t.* FROM edit_group t WHERE edit_group_id = NEW.edit_group_id; IF FOUND THEN NEW.uid := v_uid; END IF; END IF; END IF; RETURN NEW; END; $$ LANGUAGE 'plpgsql'; -- END: function/edit_group_set_uid.sql -- START: function/edit_log_partition_insert.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2018-07-17 -- DESCRIPTION: -- partition the edit_log table by year -- auto creates table if missing, if failure writes to overflow table -- HISTORY: CREATE OR REPLACE FUNCTION edit_log_insert_trigger () RETURNS TRIGGER AS $$ DECLARE start_date DATE := '2010-01-01'; end_date DATE; timeformat TEXT := 'YYYY'; selector TEXT := 'year'; base_table TEXT := 'edit_log'; _interval INTERVAL := '1 ' || selector; _interval_next INTERVAL := '2 ' || selector; table_name TEXT; -- compare date column compare_date DATE := NEW.event_date; compare_date_name TEXT := 'event_date'; -- the create commands command_create_table TEXT := 'CREATE TABLE IF NOT EXISTS {TABLE_NAME} (CHECK({COMPARE_DATE_NAME} >= {START_DATE} AND {COMPARE_DATE_NAME} < {END_DATE})) INHERITS ({BASE_NAME})'; command_create_primary_key TEXT := 'ALTER TABLE {TABLE_NAME} ADD PRIMARY KEY ({BASE_TABLE}_id)'; command_create_foreign_key_1 TEXT := 'ALTER TABLE {TABLE_NAME} ADD CONSTRAINT {TABLE_NAME}_euid_fkey FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL'; command_create_trigger_1 TEXT = 'CREATE TRIGGER trg_{TABLE_NAME} BEFORE INSERT OR UPDATE ON {TABLE_NAME} FOR EACH ROW EXECUTE PROCEDURE set_edit_generic()'; BEGIN -- we are in valid start time area IF (NEW.event_date >= start_date) THEN -- current table name table_name := base_table || '_' || to_char(NEW.event_date, timeformat); BEGIN EXECUTE 'INSERT INTO ' || quote_ident(table_name) || ' SELECT ($1).*' USING NEW; -- if insert failed because of missing table, create new below EXCEPTION WHEN undefined_table THEN -- another block, so in case the creation fails here too BEGIN -- create new table here + all indexes start_date := date_trunc(selector, NEW.event_date); end_date := date_trunc(selector, NEW.event_date + _interval); -- creat table EXECUTE format(REPLACE( -- end date REPLACE( -- start date REPLACE( -- compare date name REPLACE( -- base name (inherit) REPLACE( -- table name command_create_table, '{TABLE_NAME}', table_name ), '{BASE_NAME}', base_table ), '{COMPARE_DATE_NAME}', compare_date_name ), '{START_DATE}', quote_literal(start_date) ), '{END_DATE}', quote_literal(end_date) )); -- create all indexes and triggers EXECUTE format(REPLACE( REPLACE( command_create_primary_key, '{TABLE_NAME}', table_name ), '{BASE_TABLE}', base_table )); -- FK constraints EXECUTE format(REPLACE(command_create_foreign_key_1, '{TABLE_NAME}', table_name)); -- generic trigger EXECUTE format(REPLACE(command_create_trigger_1, '{TABLE_NAME}', table_name)); -- insert try again EXECUTE 'INSERT INTO ' || quote_ident(table_name) || ' SELECT ($1).*' USING NEW; EXCEPTION WHEN OTHERS THEN -- if this faled, throw it into the overflow table (so we don't loose anything) INSERT INTO edit_log_overflow VALUES (NEW.*); END; -- other errors, insert into overlow WHEN OTHERS THEN -- if this faled, throw it into the overflow table (so we don't loose anything) INSERT INTO edit_log_overflow VALUES (NEW.*); END; -- main insert run done, check if we have to create next months table BEGIN -- check if next month table exists table_name := base_table || '_' || to_char((SELECT NEW.event_date + _interval)::DATE, timeformat); -- RAISE NOTICE 'SEARCH NEXT: %', table_name; IF (SELECT to_regclass(table_name)) IS NULL THEN -- move inner interval same start_date := date_trunc(selector, NEW.event_date + _interval); end_date := date_trunc(selector, NEW.event_date + _interval_next); -- RAISE NOTICE 'CREATE NEXT: %', table_name; -- create table EXECUTE format(REPLACE( -- end date REPLACE( -- start date REPLACE( -- compare date name REPLACE( -- base name (inherit) REPLACE( -- table name command_create_table, '{TABLE_NAME}', table_name ), '{BASE_NAME}', base_table ), '{COMPARE_DATE_NAME}', compare_date_name ), '{START_DATE}', quote_literal(start_date) ), '{END_DATE}', quote_literal(end_date) )); -- create all indexes and triggers EXECUTE format(REPLACE( REPLACE( command_create_primary_key, '{TABLE_NAME}', table_name ), '{BASE_TABLE}', base_table )); -- FK constraints EXECUTE format(REPLACE(command_create_foreign_key_1, '{TABLE_NAME}', table_name)); -- generic trigger EXECUTE format(REPLACE(command_create_trigger_1, '{TABLE_NAME}', table_name)); END IF; EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'Failed to create next table: %', table_name; END; ELSE -- if outside valid date, insert into overflow INSERT INTO edit_log_overflow VALUES (NEW.*); END IF; RETURN NULL; END $$ LANGUAGE 'plpgsql'; -- END: function/edit_log_partition_insert.sql -- START: function/edit_user_set_login_user_id_set_date.sql -- set edit user login_user_id_set_date if login_user_id is set -- NOW() if not empty CREATE OR REPLACE FUNCTION set_login_user_id_set_date() RETURNS TRIGGER AS $$ BEGIN -- if new is not null/empty -- and old one is null or old one different new one -- set NOW() -- if new one is NULL -- set NULL IF NEW.login_user_id IS NOT NULL AND NEW.login_user_id <> '' AND (OLD.login_user_id IS NULL OR NEW.login_user_id <> OLD.login_user_id) THEN NEW.login_user_id_set_date = NOW(); NEW.login_user_id_last_revalidate = NOW(); ELSIF NEW.login_user_id IS NULL OR NEW.login_user_id = '' THEN NEW.login_user_id_set_date = NULL; NEW.login_user_id_last_revalidate = NULL; END IF; RETURN NEW; END; $$ LANGUAGE 'plpgsql'; -- END: function/edit_user_set_login_user_id_set_date.sql -- START: table/edit_temp_files.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/08 -- DESCRIPTION: -- edit interface temporary files, list of all files in edit (admin) directory -- TABLE: temp_files -- HISTORY: -- DROP TABLE temp_files; CREATE TABLE temp_files ( filename VARCHAR, folder VARCHAR ); -- END: table/edit_temp_files.sql -- START: table/edit_generic.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- edit tables, this is the generic table, inheriteded by most edit tables -- TABLE: edit_generic -- HISTORY: -- DROP TABLE edit_generic; CREATE TABLE edit_generic ( cuid VARCHAR, date_created TIMESTAMP WITHOUT TIME ZONE DEFAULT clock_timestamp(), date_updated TIMESTAMP WITHOUT TIME ZONE ); -- END: table/edit_generic.sql -- START: table/edit_visible_group.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- edit tables, postgres SQL statements for the mysql definitions -- TABLE: edit_visible_group -- HISTORY -- DROP TABLE edit_visible_group; CREATE TABLE edit_visible_group ( edit_visible_group_id SERIAL PRIMARY KEY, name VARCHAR, flag VARCHAR ) INHERITS (edit_generic) WITHOUT OIDS; -- END: table/edit_visible_group.sql -- START: table/edit_menu_group.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- edit tables, groupings for menu -- TABLE: edit_menu_group -- HISTORY -- DROP TABLE edit_menu_group; CREATE TABLE edit_menu_group ( edit_menu_group_id SERIAL PRIMARY KEY, name VARCHAR, flag VARCHAR, order_number INT NOT NULL ) INHERITS (edit_generic) WITHOUT OIDS; -- END: table/edit_menu_group.sql -- START: table/edit_page.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- edit tables, this table contains all pages in the edit interface and allocates rights + values to it -- TABLE: edit_page -- HISTORY: -- DROP TABLE edit_page; CREATE TABLE edit_page ( edit_page_id SERIAL PRIMARY KEY, content_alias_edit_page_id INT, -- alias for page content, if the page content is defined on a different page, ege for ajax backend pages FOREIGN KEY (content_alias_edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE, filename VARCHAR, name VARCHAR UNIQUE, order_number INT NOT NULL, online SMALLINT NOT NULL DEFAULT 0, menu SMALLINT NOT NULL DEFAULT 0, popup SMALLINT NOT NULL DEFAULT 0, popup_x SMALLINT, popup_y SMALLINT, hostname VARCHAR ) INHERITS (edit_generic) WITHOUT OIDS; -- END: table/edit_page.sql -- START: table/edit_query_string.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- edit tables -- TABLE: edit_query_string -- HISTORY: -- DROP TABLE edit_query_string; CREATE TABLE edit_query_string ( edit_query_string_id SERIAL PRIMARY KEY, edit_page_id INT NOT NULL, FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, enabled SMALLINT NOT NULL DEFAULT 0, name VARCHAR, value VARCHAR, dynamic SMALLINT NOT NULL DEFAULT 0 ) INHERITS (edit_generic) WITHOUT OIDS; -- END: table/edit_query_string.sql -- START: table/edit_page_visible_group.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- reference table between visible groups and pages -- TABLE: edit_page_visible_group -- HISTORY: -- DROP TABLE edit_page_visible_group; CREATE TABLE edit_page_visible_group ( edit_page_id INT NOT NULL, FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, edit_visible_group_id INT NOT NULL, FOREIGN KEY (edit_visible_group_id) REFERENCES edit_visible_group (edit_visible_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE ); -- END: table/edit_page_visible_group.sql -- START: table/edit_page_menu_group.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- reference table between menu groups and pages -- TABLE: edit_page_menu_group -- HISTORY: -- DROP TABLE edit_page_menu_group; CREATE TABLE edit_page_menu_group ( edit_page_id INT NOT NULL, FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, edit_menu_group_id INT NOT NULL, FOREIGN KEY (edit_menu_group_id) REFERENCES edit_menu_group (edit_menu_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE ); -- END: table/edit_page_menu_group.sql -- START: table/edit_access_right.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- holds all access right levels for the edit interface and other access areas -- this table is fixed, prefilled and not changable -- TABLE: edit_access_right -- HISTORY: -- DROP TABLE edit_access_right; CREATE TABLE edit_access_right ( edit_access_right_id SERIAL PRIMARY KEY, name VARCHAR, level SMALLINT, type VARCHAR, UNIQUE (level,type) ) INHERITS (edit_generic) WITHOUT OIDS; -- END: table/edit_access_right.sql -- START: table/edit_scheme.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- holds backend template schemes -- TABLE: edit_scheme -- HISTORY: -- DROP TABLE edit_scheme; CREATE TABLE edit_scheme ( edit_scheme_id SERIAL PRIMARY KEY, enabled SMALLINT NOT NULL DEFAULT 0, name VARCHAR, header_color VARCHAR, css_file VARCHAR, template VARCHAR ) INHERITS (edit_generic) WITHOUT OIDS; -- END: table/edit_scheme.sql -- START: table/edit_language.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- languages for the backend, this not used for the encoding, but only for having different language strings -- the backend encoding is all UTF-8 (not changeable) -- TABLE: edit_language -- HISTORY: -- DROP TABLE edit_language; CREATE TABLE edit_language ( edit_language_id SERIAL PRIMARY KEY, enabled SMALLINT NOT NULL DEFAULT 0, lang_default SMALLINT NOT NULL DEFAULT 0, long_name VARCHAR, short_name VARCHAR, -- en_US, en or en_US@latin without encoding iso_name VARCHAR, -- should actually be encoding order_number INT ) INHERITS (edit_generic) WITHOUT OIDS; -- END: table/edit_language.sql -- START: table/edit_group.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- list of pages the user can access, with a generic access level, one group per user -- TABLE: edit_group -- HISTORY: -- DROP TABLE edit_group; CREATE TABLE edit_group ( edit_group_id SERIAL PRIMARY KEY, edit_scheme_id INT, FOREIGN KEY (edit_scheme_id) REFERENCES edit_scheme (edit_scheme_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, edit_access_right_id INT NOT NULL, FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, enabled SMALLINT NOT NULL DEFAULT 0, deleted SMALLINT DEFAULT 0, uid VARCHAR, name VARCHAR, additional_acl JSONB ) INHERITS (edit_generic) WITHOUT OIDS; -- END: table/edit_group.sql -- START: table/edit_page_access.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- groups pages together to one page group to which the user is then subscribed -- TABLE: edit_page_access -- HISTORY: -- DROP TABLE edit_page_access; CREATE TABLE edit_page_access ( edit_page_access_id SERIAL PRIMARY KEY, edit_group_id INT NOT NULL, FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, edit_page_id INT NOT NULL, FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, edit_access_right_id INT NOT NULL, FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, enabled SMALLINT NOT NULL DEFAULT 0 ) INHERITS (edit_generic) WITHOUT OIDS; -- END: table/edit_page_access.sql -- START: table/edit_page_content.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2019/9/9 -- DESCRIPTION: -- sub content to one page with additional edit access right set -- can be eg JS content groups on one page -- TABLE: edit_page_content -- HISTORY: -- DROP TABLE edit_page_content; CREATE TABLE edit_page_content ( edit_page_content_id SERIAL PRIMARY KEY, edit_page_id INT NOT NULL, FOREIGN KEY (edit_page_id) REFERENCES edit_page (edit_page_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, edit_access_right_id INT NOT NULL, FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, uid VARCHAR UNIQUE, name VARCHAR, order_number INT NOT NULL, online SMALLINT NOT NULL DEFAULT 0 ) INHERITS (edit_generic) WITHOUT OIDS; -- END: table/edit_page_content.sql -- START: table/edit_user.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/06 -- DESCRIPTION: -- holds the user that can login + group, scheme, lang and a default access right -- TABLE: edit_user -- HISTORY: -- DROP TABLE edit_user; CREATE TABLE edit_user ( edit_user_id SERIAL PRIMARY KEY, connect_edit_user_id INT, -- possible reference to other user FOREIGN KEY (connect_edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, edit_language_id INT NOT NULL, FOREIGN KEY (edit_language_id) REFERENCES edit_language (edit_language_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, edit_group_id INT NOT NULL, FOREIGN KEY (edit_group_id) REFERENCES edit_group (edit_group_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, edit_scheme_id INT, FOREIGN KEY (edit_scheme_id) REFERENCES edit_scheme (edit_scheme_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, edit_access_right_id INT NOT NULL, FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, -- username/password username VARCHAR UNIQUE, password VARCHAR, -- name block first_name VARCHAR, last_name VARCHAR, first_name_furigana VARCHAR, last_name_furigana VARCHAR, -- email email VARCHAR, -- eanbled/deleted flag enabled SMALLINT NOT NULL DEFAULT 0, deleted SMALLINT NOT NULL DEFAULT 0, -- general flags strict SMALLINT DEFAULT 0, locked SMALLINT DEFAULT 0, protected SMALLINT NOT NULL DEFAULT 0, -- legacy, debug flags debug SMALLINT NOT NULL DEFAULT 0, db_debug SMALLINT NOT NULL DEFAULT 0, -- is admin user admin SMALLINT NOT NULL DEFAULT 0, -- last login log last_login TIMESTAMP WITHOUT TIME ZONE, -- login error login_error_count INT DEFAULT 0, login_error_date_last TIMESTAMP WITHOUT TIME ZONE, login_error_date_first TIMESTAMP WITHOUT TIME ZONE, -- time locked lock_until TIMESTAMP WITHOUT TIME ZONE, lock_after TIMESTAMP WITHOUT TIME ZONE, -- password change password_change_date TIMESTAMP WITHOUT TIME ZONE, -- only when password is first set or changed password_change_interval INTERVAL, -- null if no change is needed, or d/m/y time interval password_reset_time TIMESTAMP WITHOUT TIME ZONE, -- when the password reset was requested password_reset_uid VARCHAR, -- the uid to access the password reset page -- _GET login id for direct login login_user_id VARCHAR UNIQUE, -- the loginUserId, at least 32 chars login_user_id_set_date TIMESTAMP WITHOUT TIME ZONE, -- when above uid was set login_user_id_last_revalidate TIMESTAMP WITHOUT TIME ZONE, -- when the last login was done with user name and password login_user_id_valid_from TIMESTAMP WITHOUT TIME ZONE, -- if set, from when the above uid is valid login_user_id_valid_until TIMESTAMP WITHOUT TIME ZONE, -- if set, until when the above uid is valid login_user_id_revalidate_after INTERVAL, -- user must login to revalidated loginUserId after set days, 0 for forever login_user_id_locked SMALLINT DEFAULT 0, -- lock for loginUserId, but still allow normal login -- additional ACL json block additional_acl JSONB -- additional ACL as JSON string (can be set by other pages) ) INHERITS (edit_generic) WITHOUT OIDS; -- create unique index -- CREATE UNIQUE INDEX edit_user_login_user_id_key ON edit_user (login_user_id) WHERE login_user_id IS NOT NULL; COMMENT ON COLUMN edit_user.username IS 'Login username, must set'; COMMENT ON COLUMN edit_user.password IS 'Login password, must set'; COMMENT ON COLUMN edit_user.enabled IS 'Login is enabled (master switch)'; COMMENT ON COLUMN edit_user.deleted IS 'Login is deleted (master switch), overrides all other'; COMMENT ON COLUMN edit_user.strict IS 'If too many failed logins user will be locked, default off'; COMMENT ON COLUMN edit_user.locked IS 'Locked from too many wrong password logins'; COMMENT ON COLUMN edit_user.protected IS 'User can only be chnaged by admin user'; COMMENT ON COLUMN edit_user.debug IS 'Turn debug flag on (legacy)'; COMMENT ON COLUMN edit_user.db_debug IS 'Turn DB debug flag on (legacy)'; COMMENT ON COLUMN edit_user.admin IS 'If set, this user is SUPER admin'; COMMENT ON COLUMN edit_user.last_login IS 'Last succesfull login tiemstamp'; COMMENT ON COLUMN edit_user.login_error_count IS 'Number of failed logins, reset on successful login'; COMMENT ON COLUMN edit_user.login_error_date_last IS 'Last login error date'; COMMENT ON COLUMN edit_user.login_error_date_first IS 'First login error date, reset on successfull login'; COMMENT ON COLUMN edit_user.lock_until IS 'Account is locked until this date, <'; COMMENT ON COLUMN edit_user.lock_after IS 'Account is locked after this date, >'; COMMENT ON COLUMN edit_user.password_change_date IS 'Password was changed on'; COMMENT ON COLUMN edit_user.password_change_interval IS 'After how many days the password has to be changed'; COMMENT ON COLUMN edit_user.password_reset_time IS 'When the password reset was requested. For reset page uid valid check'; COMMENT ON COLUMN edit_user.password_reset_uid IS 'Password reset page uid, one time, invalid after reset successful or time out'; COMMENT ON COLUMN edit_user.login_user_id IS 'Min 32 character UID to be used to login without password. Via GET/POST parameter'; COMMENT ON COLUMN edit_user.login_user_id_set_date IS 'loginUserId was set at what date'; COMMENT ON COLUMN edit_user.login_user_id_last_revalidate IS 'set when username/password login is done and loginUserId is set'; COMMENT ON COLUMN edit_user.login_user_id_valid_from IS 'loginUserId is valid from this date, >='; COMMENT ON COLUMN edit_user.login_user_id_valid_until IS 'loginUserId is valid until this date, <='; COMMENT ON COLUMN edit_user.login_user_id_revalidate_after IS 'If set to a number greater 0 then user must login after given amount of days to revalidate the loginUserId, set to 0 for valid forver'; COMMENT ON COLUMN edit_user.login_user_id_locked IS 'A separte lock flag for loginUserId, user can still login normal'; COMMENT ON COLUMN edit_user.additional_acl IS 'Additional Access Control List stored in JSON format'; -- END: table/edit_user.sql -- START: table/edit_log.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- log data for backend interface, logs all user activities -- TABLE: edit_log -- HISTORY: -- DROP TABLE edit_log; CREATE TABLE edit_log ( edit_log_id SERIAL PRIMARY KEY, euid INT, -- this is a foreign key, but I don't nedd to reference to it FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL, username VARCHAR, password VARCHAR, event_date TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP, ip VARCHAR, error TEXT, event TEXT, data_binary BYTEA, data TEXT, page VARCHAR, action VARCHAR, action_id VARCHAR, action_yes VARCHAR, action_flag VARCHAR, action_menu VARCHAR, action_loaded VARCHAR, action_value VARCHAR, action_type VARCHAR, action_error VARCHAR, user_agent VARCHAR, referer VARCHAR, script_name VARCHAR, query_string VARCHAR, server_name VARCHAR, http_host VARCHAR, http_accept VARCHAR, http_accept_charset VARCHAR, http_accept_encoding VARCHAR, session_id VARCHAR ) INHERITS (edit_generic) WITHOUT OIDS; -- END: table/edit_log.sql -- START: table/edit_log_overflow.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2020/1/28 -- DESCRIPTION: -- edit log overflow table -- this is the overflow table for partition -- TABLE: edit_log_overflow -- HISTORY: -- DROP TABLE edit_log_overflow; CREATE TABLE IF NOT EXISTS edit_log_overflow () INHERITS (edit_log); ALTER TABLE edit_log_overflow ADD PRIMARY KEY (edit_log_id); ALTER TABLE edit_log_overflow ADD CONSTRAINT edit_log_overflow_euid_fkey FOREIGN KEY (euid) REFERENCES edit_user (edit_user_id) MATCH FULL ON UPDATE CASCADE ON DELETE SET NULL; -- END: table/edit_log_overflow.sql -- START: table/edit_access.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- is a "group" for the outside, a user can have serveral groups with different rights so he can access several parts from the outside -- TABLE: edit_access -- HISTORY: -- DROP TABLE edit_access; CREATE TABLE edit_access ( edit_access_id SERIAL PRIMARY KEY, enabled SMALLINT NOT NULL DEFAULT 0, protected SMALLINT DEFAULT 0, deleted SMALLINT DEFAULT 0, uid VARCHAR, name VARCHAR UNIQUE, description VARCHAR, color VARCHAR, additional_acl JSONB ) INHERITS (edit_generic) WITHOUT OIDS; -- END: table/edit_access.sql -- START: table/edit_access_user.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2005/07/05 -- DESCRIPTION: -- groupings which user has rights to which access groups (incl ACL) -- TABLE: edit_access_user -- HISTORY: -- DROP TABLE edit_access_user; CREATE TABLE edit_access_user ( edit_access_user_id SERIAL PRIMARY KEY, edit_access_id INT NOT NULL, FOREIGN KEY (edit_access_id) REFERENCES edit_access (edit_access_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, edit_user_id INT NOT NULL, FOREIGN KEY (edit_user_id) REFERENCES edit_user (edit_user_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, edit_access_right_id INT NOT NULL, FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, edit_default SMALLINT DEFAULT 0, enabled SMALLINT NOT NULL DEFAULT 0 ) INHERITS (edit_generic) WITHOUT OIDS; -- END: table/edit_access_user.sql -- START: table/edit_access_data.sql -- AUTHOR: Clemens Schwaighofer -- DATE: 2016/7/15 -- DESCRIPTION: -- sub table to edit access, holds additional data for access group -- TABLE: edit_access_data -- HISTORY: -- DROP TABLE edit_access_data; CREATE TABLE edit_access_data ( edit_access_data_id SERIAL PRIMARY KEY, edit_access_id INT NOT NULL, FOREIGN KEY (edit_access_id) REFERENCES edit_access (edit_access_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, enabled SMALLINT NOT NULL DEFAULT 0, name VARCHAR, value VARCHAR ) INHERITS (edit_generic) WITHOUT OIDS; -- create a unique index for each attached data block for each edit access can -- only have ONE value; CREATE UNIQUE INDEX edit_access_data_edit_access_id_name_ukey ON edit_access_data (edit_access_id, name); -- END: table/edit_access_data.sql -- START: trigger/trg_edit_access_right.sql -- DROP TRIGGER IF EXISTS trg_edit_access_right ON edit_access_right; CREATE TRIGGER trg_edit_access_right BEFORE INSERT OR UPDATE ON edit_access_right FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- END: trigger/trg_edit_access_right.sql -- START: trigger/trg_edit_access.sql -- DROP TRIGGER IF EXISTS trg_edit_access ON edit_access; CREATE TRIGGER trg_edit_access BEFORE INSERT OR UPDATE ON edit_access FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- DROP TRIGGER IF EXISTS trg_set_edit_access_uid ON edit_access; CREATE TRIGGER trg_set_edit_access_uid BEFORE INSERT OR UPDATE ON edit_access FOR EACH ROW EXECUTE PROCEDURE set_edit_access_uid(); -- END: trigger/trg_edit_access.sql -- START: trigger/trg_edit_access_data.sql -- DROP TRIGGER IF EXISTS trg_edit_access_data ON edit_access_data; CREATE TRIGGER trg_edit_access_data BEFORE INSERT OR UPDATE ON edit_access_data FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- END: trigger/trg_edit_access_data.sql -- START: trigger/trg_edit_access_user.sql -- DROP TRIGGER IF EXISTS trg_edit_access_user ON edit_access_user; CREATE TRIGGER trg_edit_access_user BEFORE INSERT OR UPDATE ON edit_access_user FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- END: trigger/trg_edit_access_user.sql -- START: trigger/trg_edit_group.sql -- DROP TRIGGER IF EXISTS trg_edit_group ON edit_group; CREATE TRIGGER trg_edit_group BEFORE INSERT OR UPDATE ON edit_group FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- DROP TRIGGER IF EXISTS trg_set_edit_group_uid ON edit_group; CREATE TRIGGER trg_set_edit_group_uid BEFORE INSERT OR UPDATE ON edit_group FOR EACH ROW EXECUTE PROCEDURE set_edit_group_uid(); -- END: trigger/trg_edit_group.sql -- START: trigger/trg_edit_language.sql -- DROP TRIGGER IF EXISTS trg_edit_language ON edit_language; CREATE TRIGGER trg_edit_language BEFORE INSERT OR UPDATE ON edit_language FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- END: trigger/trg_edit_language.sql -- START: trigger/trg_edit_log_overflow.sql -- DROP TRIGGER IF EXISTS trg_edit_log_overflow ON edit_log_overflow; CREATE TRIGGER trg_edit_log_overflow BEFORE INSERT OR UPDATE ON edit_log_overflow FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- END: trigger/trg_edit_log_overflow.sql -- START: trigger/trg_edit_log.sql -- DROP TRIGGER IF EXISTS trg_edit_log ON edit_log; CREATE TRIGGER trg_edit_log BEFORE INSERT OR UPDATE ON edit_log FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- DROP TRIGGER IF EXISTS trg_edit_log_insert_partition ON edit_log; CREATE TRIGGER trg_edit_log_insert_partition BEFORE INSERT OR UPDATE ON edit_log FOR EACH ROW EXECUTE PROCEDURE edit_log_insert_trigger(); -- END: trigger/trg_edit_log.sql -- START: trigger/trg_edit_page_access.sql -- DROP TRIGGER IF EXISTS trg_edit_page_access ON edit_page_access; CREATE TRIGGER trg_edit_page_access BEFORE INSERT OR UPDATE ON edit_page_access FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- END: trigger/trg_edit_page_access.sql -- START: trigger/trg_edit_page_content.sql -- DROP TRIGGER IF EXISTS trg_edit_page_content ON edit_page_content; CREATE TRIGGER trg_edit_page_content BEFORE INSERT OR UPDATE ON edit_page_content FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- END: trigger/trg_edit_page_content.sql -- START: trigger/trg_edit_page.sql -- DROP TRIGGER IF EXISTS trg_edit_page ON edit_page; CREATE TRIGGER trg_edit_page BEFORE INSERT OR UPDATE ON edit_page FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- END: trigger/trg_edit_page.sql -- START: trigger/trg_edit_query_string.sql -- DROP TRIGGER IF EXISTS trg_edit_query_string ON edit_query_string; CREATE TRIGGER trg_edit_query_string BEFORE INSERT OR UPDATE ON edit_query_string FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- END: trigger/trg_edit_query_string.sql -- START: trigger/trg_edit_scheme.sql -- DROP TRIGGER IF EXISTS trg_edit_scheme ON edit_scheme; CREATE TRIGGER trg_edit_scheme BEFORE INSERT OR UPDATE ON edit_scheme FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- END: trigger/trg_edit_scheme.sql -- START: trigger/trg_edit_user.sql -- DROP TRIGGER IF EXISTS trg_edit_user ON edit_user; CREATE TRIGGER trg_edit_user BEFORE INSERT OR UPDATE ON edit_user FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- DROP TRIGGER IF EXISTS trg_edit_user_set_login_user_id_set_date ON edit_user; CREATE TRIGGER trg_edit_user_set_login_user_id_set_date BEFORE INSERT OR UPDATE ON edit_user FOR EACH ROW EXECUTE PROCEDURE set_login_user_id_set_date(); -- END: trigger/trg_edit_user.sql -- START: trigger/trg_edit_visible_group.sql -- DROP TRIGGER IF EXISTS trg_edit_visible_group ON edit_visible_group; CREATE TRIGGER trg_edit_visible_group BEFORE INSERT OR UPDATE ON edit_visible_group FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- END: trigger/trg_edit_visible_group.sql -- START: trigger/trg_edit_menu_group.sql -- DROP TRIGGER IF EXISTS trg_edit_menu_group ON edit_menu_group; CREATE TRIGGER trg_edit_menu_group BEFORE INSERT OR UPDATE ON edit_menu_group FOR EACH ROW EXECUTE PROCEDURE set_edit_generic(); -- END: trigger/trg_edit_menu_group.sql -- START: data/edit_tables.sql -- edit tables insert data in order -- edit visible group DELETE FROM edit_visible_group; INSERT INTO edit_visible_group (name, flag) VALUES ('Main Menu', 'main'); INSERT INTO edit_visible_group (name, flag) VALUES ('Data popup Menu', 'datapopup'); -- edit menu group DELETE FROM edit_menu_group; INSERT INTO edit_menu_group (name, flag, order_number) VALUES ('Admin Menu', 'admin', 1); INSERT INTO edit_menu_group (name, flag, order_number) VALUES ('Admin Data Popup Menu', 'AdminDataPopup', 2); -- edit page DELETE FROM edit_page; INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_pages.php', 'Edit Pages', 1, 1, 1); INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_users.php', 'Edit Users', 2, 1, 1); INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_languages.php', 'Edit Languages', 3, 1, 1); INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_schemes.php', 'Edit Schemes', 4, 1, 1); INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_groups.php', 'Edit Groups', 5, 1, 1); INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_visible_group.php', 'Edit Visible Groups', 6, 1, 1); INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_menu_group.php', 'Edit Menu Groups', 7, 1, 1); INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_access.php', 'Edit Access', 8, 1, 1); INSERT INTO edit_page (filename, name, order_number, online, menu) VALUES ('edit_order.php', 'Edit Order', 9, 1, 0); -- edit visible group DELETE FROM edit_page_visible_group; INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Pages'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main')); INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Users'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main')); INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Languages'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main')); INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Schemes'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main')); INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Groups'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main')); INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Visible Groups'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main')); INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Menu Groups'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main')); INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Access'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main')); -- INSERT INTO edit_page_visible_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Order'), (SELECT edit_visible_group_id FROM edit_visible_group WHERE flag = 'main')); -- edit page menu group DELETE FROM edit_page_menu_group; INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Pages'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin')); INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Users'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin')); INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Languages'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin')); INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Schemes'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin')); INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Groups'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin')); INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Visible Groups'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin')); INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Menu Groups'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin')); INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Access'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin')); -- INSERT INTO edit_page_menu_group VALUES ((SELECT edit_page_id FROM edit_page WHERE name = 'Edit Order'), (SELECT edit_menu_group_id FROM edit_menu_group WHERE flag = 'admin')); -- edit access right DELETE FROM edit_access_right; INSERT INTO edit_access_right (name, level, type) VALUES ('Default', -1, 'default'); INSERT INTO edit_access_right (name, level, type) VALUES ('No Access', 0, 'none'); INSERT INTO edit_access_right (name, level, type) VALUES ('List', 10, 'list'); INSERT INTO edit_access_right (name, level, type) VALUES ('Read', 20, 'read'); INSERT INTO edit_access_right (name, level, type) VALUES ('Translator', 30, 'mod_trans'); INSERT INTO edit_access_right (name, level, type) VALUES ('Modify', 40, 'mod'); INSERT INTO edit_access_right (name, level, type) VALUES ('Create/Write', 60, 'write'); INSERT INTO edit_access_right (name, level, type) VALUES ('Delete', 80, 'del'); INSERT INTO edit_access_right (name, level, type) VALUES ('Site Admin', 90, 'siteadmin'); INSERT INTO edit_access_right (name, level, type) VALUES ('Admin', 100, 'admin'); -- edit scheme DELETE FROM edit_scheme; INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Default Scheme', 'E0E2FF', 1); INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Admin', 'CC7E7E', 1); INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('Visitor', 'B0C4B3', 1); INSERT INTO edit_scheme (name, header_color, enabled) VALUES ('User', '1E789E', 1); -- edit language -- short_name = locale without encoding -- iso_name = encoding DELETE FROM edit_language; INSERT INTO edit_language (long_name, short_name, iso_name, order_number, enabled, lang_default) VALUES ('English', 'en_US', 'UTF-8', 1, 1, 1); INSERT INTO edit_language (long_name, short_name, iso_name, order_number, enabled, lang_default) VALUES ('Japanese', 'ja_JP', 'UTF-8', 2, 1, 0); -- edit group DELETE FROM edit_group; INSERT INTO edit_group (name, enabled, edit_scheme_id, edit_access_right_id) VALUES ('Admin', 1, (SELECT edit_scheme_id FROM edit_scheme WHERE name = 'Admin'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin')); INSERT INTO edit_group (name, enabled, edit_scheme_id, edit_access_right_id) VALUES ('User', 1, (SELECT edit_scheme_id FROM edit_scheme WHERE name = 'User'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'write')); -- edit page access DELETE FROM edit_page_access; INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, (SELECT edit_group_id FROM edit_group WHERE name = 'Admin'), (SELECT edit_page_id FROM edit_page WHERE name = 'Edit Pages'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin') ); INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, (SELECT edit_group_id FROM edit_group WHERE name = 'Admin'), (SELECT edit_page_id FROM edit_page WHERE name = 'Edit Users'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin') ); INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, (SELECT edit_group_id FROM edit_group WHERE name = 'Admin'), (SELECT edit_page_id FROM edit_page WHERE name = 'Edit Languages'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin') ); INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, (SELECT edit_group_id FROM edit_group WHERE name = 'Admin'), (SELECT edit_page_id FROM edit_page WHERE name = 'Edit Schemes'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin') ); INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, (SELECT edit_group_id FROM edit_group WHERE name = 'Admin'), (SELECT edit_page_id FROM edit_page WHERE name = 'Edit Groups'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin') ); INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, (SELECT edit_group_id FROM edit_group WHERE name = 'Admin'), (SELECT edit_page_id FROM edit_page WHERE name = 'Edit Visible Groups'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin') ); INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, (SELECT edit_group_id FROM edit_group WHERE name = 'Admin'), (SELECT edit_page_id FROM edit_page WHERE name = 'Edit Menu Groups'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin') ); INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, (SELECT edit_group_id FROM edit_group WHERE name = 'Admin'), (SELECT edit_page_id FROM edit_page WHERE name = 'Edit Access'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin') ); INSERT INTO edit_page_access (enabled, edit_group_id, edit_page_id, edit_access_right_id) VALUES (1, (SELECT edit_group_id FROM edit_group WHERE name = 'Admin'), (SELECT edit_page_id FROM edit_page WHERE name = 'Edit Order'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin') ); -- edit user -- inserts admin user so basic users can be created DELETE FROM edit_user; INSERT INTO edit_user (username, password, enabled, debug, db_debug, email, protected, admin, edit_language_id, edit_group_id, edit_scheme_id, edit_access_right_id) VALUES ('admin', 'admin', 1, 1, 1, '', 1, 1, (SELECT edit_language_id FROM edit_language WHERE short_name = 'en_US'), (SELECT edit_group_id FROM edit_group WHERE name = 'Admin'), (SELECT edit_scheme_id FROM edit_scheme WHERE name = 'Admin'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin') ); -- edit access DELETE FROM edit_access; INSERT INTO edit_access (name, enabled, protected) VALUES ('Admin Access', 1, 1); -- edit access user DELETE FROM edit_access_user; INSERT INTO edit_access_user (edit_default, enabled, edit_access_id, edit_user_id, edit_access_right_id) VALUES (1, 1, (SELECT edit_access_id FROM edit_access WHERE uid = 'AdminAccess'), (SELECT edit_user_id FROM edit_user WHERE username = 'admin'), (SELECT edit_access_right_id FROM edit_access_right WHERE type = 'admin') ); -- END: data/edit_tables.sql