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;
|
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!
|
* OLD B6M1 CODE BELOW!
|
||||||
*/
|
*/
|
||||||
|
|
Reference in a new issue