CREATE TABLE site_language (
    id serial PRIMARY KEY,
    site_id int REFERENCES site ON UPDATE CASCADE ON DELETE CASCADE NOT NULL,
    language_id int REFERENCES
    LANGUAGE ON
    UPDATE CASCADE ON DELETE CASCADE NOT NULL,
    UNIQUE (site_id, language_id)
);

CREATE TABLE community_language (
    id serial PRIMARY KEY,
    community_id int REFERENCES community ON UPDATE CASCADE ON DELETE CASCADE NOT NULL,
    language_id int REFERENCES
    LANGUAGE ON
    UPDATE CASCADE ON DELETE CASCADE NOT NULL,
    UNIQUE (community_id, language_id)
);

-- update existing users, sites and communities to have all languages enabled
DO $$
DECLARE
    xid integer;
BEGIN
    FOR xid IN
    SELECT
        id
    FROM
        local_user LOOP
            INSERT INTO local_user_language (local_user_id, language_id) (
                SELECT
                    xid,
                    language.id AS lid
                FROM
                    LANGUAGE);
        END LOOP;
    FOR xid IN
    SELECT
        id
    FROM
        site LOOP
            INSERT INTO site_language (site_id, language_id) (
                SELECT
                    xid,
                    language.id AS lid
                FROM
                    LANGUAGE);
        END LOOP;
    FOR xid IN
    SELECT
        id
    FROM
        community LOOP
            INSERT INTO community_language (community_id, language_id) (
                SELECT
                    xid,
                    language.id AS lid
                FROM
                    LANGUAGE);
        END LOOP;
END;
$$;