Priority settings update procedures
Added stored procedures which can be used to update customisable event priorities: * events.evcp_set() adds or modifies an override, * events.clear() can be used to remove a specific override or all overrides for a given player.
This commit is contained in:
parent
1dd1da5ae3
commit
cf8dee6ec9
1 changed files with 136 additions and 0 deletions
|
@ -864,6 +864,142 @@ GRANT EXECUTE
|
|||
TO :dbuser;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Set an event priority override
|
||||
* ------------------------------
|
||||
*
|
||||
* Adds a new event priority override or modify its value. If the event type
|
||||
* does not exist, does not allow overrides or if the specified priority is
|
||||
* invalid, the error will be ignored silently.
|
||||
*
|
||||
* Parameters:
|
||||
* _empire_id The identifier of the player's empire
|
||||
* _evdef_id The identifier of the event type
|
||||
* _priority The custom priority value
|
||||
*/
|
||||
DROP FUNCTION IF EXISTS events.evcp_set( INT , TEXT , INT );
|
||||
CREATE FUNCTION events.evcp_set(
|
||||
_empire_id INT ,
|
||||
_evdef_id TEXT ,
|
||||
_priority INT )
|
||||
RETURNS VOID
|
||||
LANGUAGE PLPGSQL
|
||||
STRICT VOLATILE SECURITY DEFINER
|
||||
AS $evcp_set$
|
||||
|
||||
DECLARE
|
||||
_user_id INT;
|
||||
|
||||
BEGIN
|
||||
BEGIN
|
||||
INSERT INTO events.custom_priorities(
|
||||
evdef_id , address_id , evcp_priority )
|
||||
SELECT _evdef_id , owner_id , _priority
|
||||
FROM naming.empire_names
|
||||
WHERE id = _empire_id;
|
||||
IF NOT FOUND
|
||||
THEN
|
||||
RAISE EXCEPTION 'missing empire';
|
||||
END IF;
|
||||
EXCEPTION
|
||||
WHEN unique_violation THEN
|
||||
UPDATE events.custom_priorities
|
||||
SET evcp_priority = _priority
|
||||
WHERE evdef_id = _evdef_id
|
||||
AND address_id = (
|
||||
SELECT owner_id
|
||||
FROM naming.empire_names
|
||||
WHERE id = _empire_id );
|
||||
END;
|
||||
|
||||
EXCEPTION
|
||||
WHEN raise_exception THEN
|
||||
PERFORM sys.write_sql_log( 'Events' , 'WARNING'::log_level ,
|
||||
'Call to events.evcp_set() from missing empire #' || _empire_id );
|
||||
|
||||
WHEN foreign_key_violation OR check_violation THEN
|
||||
PERFORM sys.write_sql_log( 'Events' , 'WARNING'::log_level ,
|
||||
'Bad call to events.evcp_set() from empire #' || _empire_id );
|
||||
END;
|
||||
$evcp_set$;
|
||||
|
||||
REVOKE EXECUTE
|
||||
ON FUNCTION events.evcp_set( INT , TEXT , INT )
|
||||
FROM PUBLIC;
|
||||
GRANT EXECUTE
|
||||
ON FUNCTION events.evcp_set( INT , TEXT , INT )
|
||||
TO :dbuser;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Clear an event priority override
|
||||
* --------------------------------
|
||||
*
|
||||
* Remove an event priority override from the custom priorities table. If
|
||||
* there was no override for the specified event type and empire, do nothing.
|
||||
*
|
||||
* Parameters:
|
||||
* _empire_id The identifier of the player's empire
|
||||
* _evdef_id The identifier of the event type
|
||||
*/
|
||||
DROP FUNCTION IF EXISTS events.evcp_clear( INT , TEXT );
|
||||
CREATE FUNCTION events.evcp_clear(
|
||||
_empire_id INT ,
|
||||
_evdef_id TEXT )
|
||||
RETURNS VOID
|
||||
LANGUAGE SQL
|
||||
STRICT VOLATILE SECURITY DEFINER
|
||||
AS $evcp_clear$
|
||||
DELETE FROM events.custom_priorities
|
||||
WHERE evdef_id = $2
|
||||
AND address_id = (
|
||||
SELECT owner_id
|
||||
FROM naming.empire_names
|
||||
WHERE id = $1 )
|
||||
$evcp_clear$;
|
||||
|
||||
REVOKE EXECUTE
|
||||
ON FUNCTION events.evcp_clear( INT , TEXT )
|
||||
FROM PUBLIC;
|
||||
GRANT EXECUTE
|
||||
ON FUNCTION events.evcp_clear( INT , TEXT )
|
||||
TO :dbuser;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Clear all event priority overrides
|
||||
* ----------------------------------
|
||||
*
|
||||
* Remove all event priority overrides set by some player.
|
||||
*
|
||||
* Parameters:
|
||||
* _empire_id The identifier of the player's empire
|
||||
*/
|
||||
DROP FUNCTION IF EXISTS events.evcp_clear( INT );
|
||||
CREATE FUNCTION events.evcp_clear( _empire_id INT )
|
||||
RETURNS VOID
|
||||
LANGUAGE SQL
|
||||
STRICT VOLATILE SECURITY DEFINER
|
||||
AS $evcp_clear$
|
||||
DELETE FROM events.custom_priorities
|
||||
WHERE address_id = (
|
||||
SELECT owner_id
|
||||
FROM naming.empire_names
|
||||
WHERE id = $1 )
|
||||
$evcp_clear$;
|
||||
|
||||
REVOKE EXECUTE
|
||||
ON FUNCTION events.evcp_clear( INT )
|
||||
FROM PUBLIC;
|
||||
GRANT EXECUTE
|
||||
ON FUNCTION events.evcp_clear( INT )
|
||||
TO :dbuser;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* OLD B6M1 CODE BELOW!
|
||||
*/
|
||||
|
|
Reference in a new issue