~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to userdb/users.sql

Move WorksheetAddView to +new (was +add), and clean it up a bit.

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
    state       VARCHAR NOT NULL CHECK (state in ('no_agreement', 'pending',
9
9
                                              'enabled', 'disabled'))
10
10
                                 DEFAULT 'no_agreement',
11
 
    admin       BOOLEAN NOT NULL DEFAULT false,
 
11
    rolenm      VARCHAR NOT NULL CHECK (rolenm in ('anyone', 'student',
 
12
                                                   'marker', 'tutor',
 
13
                                                   'lecturer', 'admin')),
12
14
    unixid      INT UNIQUE DEFAULT nextval('login_unixid_seq') NOT NULL,
13
15
    nick        VARCHAR NOT NULL,
14
16
    pass_exp    TIMESTAMP,
36
38
    semesterid  SERIAL PRIMARY KEY NOT NULL,
37
39
    year        CHAR(4) NOT NULL,
38
40
    semester    CHAR(1) NOT NULL,
39
 
    state       TEXT NOT NULL CHECK (state IN ('disabled', 'past',
40
 
                                    'current', 'future')) DEFAULT 'current',
 
41
    active      BOOL NOT NULL,
41
42
    UNIQUE (year, semester)
42
43
);
43
44
 
 
45
CREATE OR REPLACE FUNCTION deactivate_semester_enrolments_update()
 
46
RETURNS trigger AS '
 
47
    BEGIN
 
48
        IF OLD.active = true AND NEW.active = false THEN
 
49
            UPDATE enrolment SET active=false WHERE offeringid IN (
 
50
            SELECT offeringid FROM offering WHERE offering.semesterid = NEW.semesterid);
 
51
        END IF;
 
52
        RETURN NULL;
 
53
    END;
 
54
' LANGUAGE 'plpgsql';
 
55
 
 
56
CREATE TRIGGER deactivate_semester_enrolments
 
57
    AFTER UPDATE ON semester
 
58
    FOR EACH ROW EXECUTE PROCEDURE deactivate_semester_enrolments_update();
 
59
 
44
60
CREATE TABLE offering (
45
61
    offeringid  SERIAL PRIMARY KEY NOT NULL,
46
62
    subject     INT4 REFERENCES subject (subjectid) NOT NULL,
113
129
CREATE TABLE enrolment (
114
130
    loginid     INT4 REFERENCES login (loginid),
115
131
    offeringid  INT4 REFERENCES offering (offeringid),
116
 
    role        TEXT NOT NULL CHECK (role IN ('student', 'tutor',
117
 
                                              'lecturer')) DEFAULT 'student',
118
132
    result      INT,
119
133
    special_result VARCHAR,
120
134
    supp_result INT,
124
138
    PRIMARY KEY (loginid,offeringid)
125
139
);
126
140
 
 
141
CREATE OR REPLACE FUNCTION confirm_active_semester_insertupdate()
 
142
RETURNS trigger AS '
 
143
    DECLARE
 
144
        active BOOL;
 
145
    BEGIN
 
146
        SELECT semester.active INTO active FROM offering, semester WHERE offeringid=NEW.offeringid AND semester.semesterid = offering.semesterid;
 
147
        IF NOT active AND NEW.active = true THEN
 
148
            RAISE EXCEPTION ''cannot have active enrolment for % in offering %, as the semester is inactive'', NEW.loginid, NEW.offeringid;
 
149
        END IF;
 
150
        RETURN NEW;
 
151
    END;
 
152
' LANGUAGE 'plpgsql';
 
153
 
 
154
CREATE TRIGGER confirm_active_semester
 
155
    BEFORE INSERT OR UPDATE ON enrolment
 
156
    FOR EACH ROW EXECUTE PROCEDURE confirm_active_semester_insertupdate();
 
157
 
127
158
CREATE TABLE assessed (
128
159
    assessedid  SERIAL PRIMARY KEY NOT NULL,
129
160
    loginid     INT4 REFERENCES login (loginid),