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

« back to all changes in this revision

Viewing changes to lib/common/db.py

  • Committer: mattgiuca
  • Date: 2008-07-21 17:38:18 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:926
db: Added get_enrolment and get_groups_by_user methods to retrieve details
    from the DB.
groups app: Added top-level handler which queries the DB for information about
    the current user's subjects and groups and displays some of the HTML
    required on this page.

Show diffs side-by-side

added added

removed removed

Lines of Context:
810
810
            raise
811
811
        return mand_done, mand_total, opt_done, opt_total
812
812
 
 
813
    # ENROLMENT INFORMATION
 
814
 
813
815
    def add_enrolment(self, login, subj_code, semester, year=None, dry=False):
814
816
        """
815
817
        Enrol a student in the given offering of a subject.
842
844
            return False
843
845
        return True
844
846
 
 
847
    def get_enrolment(self, login, dry=False):
 
848
        """
 
849
        Get all subjects (in IVLE) the student is enrolled in.
 
850
        Returns a list of tuples (all elements strings):
 
851
        (offeringid, subj_code, subj_name, subj_short_name, year, semester).
 
852
        """
 
853
        query = """\
 
854
SELECT offering.offeringid, subj_code, subj_name, subj_short_name,
 
855
       year, semester
 
856
FROM login, enrolment, offering, subject
 
857
WHERE enrolment.offeringid=offering.offeringid
 
858
  AND login.loginid=enrolment.loginid
 
859
  AND offering.subject=subject.subjectid
 
860
  AND login=%s;""" % _escape(login)
 
861
        if dry:
 
862
            return query
 
863
        return self.db.query(query).getresult()
 
864
 
 
865
    # PROJECT GROUPS
 
866
 
 
867
    def get_groups_by_user(self, login, offeringid=None, dry=False):
 
868
        """
 
869
        Get all project groups the student is in, corresponding to a
 
870
        particular subject offering (or all offerings, if omitted).
 
871
        Returns a list of tuples:
 
872
        (int groupid, str groupnm, str group_nick, bool is_member).
 
873
        (Note: If is_member is false, it means they have just been invited to
 
874
        this group, not a member).
 
875
        """
 
876
        if offeringid is None:
 
877
            and_offering = ""
 
878
        else:
 
879
            and_offering = "AND project_group.offeringid = %s" % \
 
880
                            _escape(offeringid)
 
881
        # Union both the groups this user is a member of, and the groups this
 
882
        # user is invited to.
 
883
        query = """\
 
884
    SELECT project_group.groupid, groupnm, project_group.nick, True
 
885
    FROM project_group, group_member, login
 
886
    WHERE project_group.groupid = group_member.groupid
 
887
      AND group_member.loginid = login.loginid
 
888
      AND login = %(login)s
 
889
      %(and_offering)s
 
890
UNION
 
891
    SELECT project_group.groupid, groupnm, project_group.nick, False
 
892
    FROM project_group, group_invitation, login
 
893
    WHERE project_group.groupid = group_invitation.groupid
 
894
      AND group_invitation.loginid = login.loginid
 
895
      AND login = %(login)s
 
896
      %(and_offering)s
 
897
;""" % {"login": _escape(login), "and_offering": and_offering}
 
898
        if dry:
 
899
            return query
 
900
        # Convert 't' -> True, 'f' -> False
 
901
        return [(groupid, groupnm, nick, ismember == 't')
 
902
                for groupid, groupnm, nick, ismember
 
903
                in self.db.query(query).getresult()]
 
904
 
845
905
    def close(self):
846
906
        """Close the DB connection. Do not call any other functions after
847
907
        this. (The behaviour of doing so is undefined).