mirror of
https://gitlab.com/davical-project/davical.git
synced 2026-09-23 06:39:18 +00:00
Triggers to handle renaming of collections/entries on user rename.
This commit is contained in:
parent
f9d4266153
commit
bd279e519e
@ -376,30 +376,48 @@ BEGIN
|
|||||||
END;
|
END;
|
||||||
' LANGUAGE 'plpgsql';
|
' LANGUAGE 'plpgsql';
|
||||||
|
|
||||||
|
DROP FUNCTION rename_davical_user( TEXT, TEXT );
|
||||||
CREATE or REPLACE FUNCTION rename_davical_user( TEXT, TEXT ) RETURNS TEXT AS $$
|
DROP TRIGGER usr_modified ON usr CASCADE;
|
||||||
|
CREATE or REPLACE FUNCTION usr_modified() RETURNS TRIGGER AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
oldname ALIAS FOR $1;
|
|
||||||
newname ALIAS FOR $2;
|
|
||||||
oldpath TEXT;
|
oldpath TEXT;
|
||||||
newpath TEXT;
|
newpath TEXT;
|
||||||
BEGIN
|
BEGIN
|
||||||
UPDATE usr SET username = newname WHERE username = oldname;
|
-- in case we trigger on other events in future
|
||||||
oldpath := '/' || oldname || '/';
|
IF TG_OP = 'UPDATE' THEN
|
||||||
newpath := '/' || newname || '/';
|
IF NEW.username != OLD.username THEN
|
||||||
|
oldpath := '/' || OLD.username || '/';
|
||||||
UPDATE collection
|
newpath := '/' || NEW.username || '/';
|
||||||
SET parent_container = replace( parent_container, oldpath, newpath),
|
UPDATE collection
|
||||||
dav_name = replace( dav_name, oldpath, newpath)
|
SET parent_container = replace( parent_container, oldpath, newpath),
|
||||||
WHERE substring(dav_name from 1 for char_length(oldpath)) = oldpath;
|
dav_name = replace( dav_name, oldpath, newpath)
|
||||||
|
WHERE substring(dav_name from 1 for char_length(oldpath)) = oldpath;
|
||||||
UPDATE caldav_data
|
END IF;
|
||||||
SET dav_name = replace( dav_name, oldpath, newpath)
|
END IF;
|
||||||
WHERE substring(dav_name from 1 for char_length(oldpath)) = oldpath;
|
RETURN NEW;
|
||||||
|
|
||||||
RETURN newname;
|
|
||||||
END;
|
END;
|
||||||
$$ LANGUAGE plpgsql;
|
$$ LANGUAGE plpgsql;
|
||||||
|
CREATE TRIGGER usr_modified AFTER UPDATE ON usr
|
||||||
|
FOR EACH ROW EXECUTE PROCEDURE usr_modified();
|
||||||
|
|
||||||
|
|
||||||
|
DROP TRIGGER collection_modified ON collection CASCADE;
|
||||||
|
CREATE or REPLACE FUNCTION collection_modified() RETURNS TRIGGER AS $$
|
||||||
|
DECLARE
|
||||||
|
BEGIN
|
||||||
|
-- in case we trigger on other events in future
|
||||||
|
IF TG_OP = 'UPDATE' THEN
|
||||||
|
IF NEW.dav_name != OLD.dav_name THEN
|
||||||
|
UPDATE caldav_data
|
||||||
|
SET dav_name = replace( dav_name, OLD.dav_name, NEW.dav_name)
|
||||||
|
WHERE substring(dav_name from 1 for char_length(OLD.dav_name)) = OLD.dav_name;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
CREATE TRIGGER collection_modified AFTER UPDATE ON collection
|
||||||
|
FOR EACH ROW EXECUTE PROCEDURE collection_modified();
|
||||||
|
|
||||||
|
|
||||||
DROP TRIGGER caldav_data_modified ON caldav_data CASCADE;
|
DROP TRIGGER caldav_data_modified ON caldav_data CASCADE;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user