source: main/waeup.sirp/trunk/src/waeup/sirp/tables.py @ 5005

Last change on this file since 5005 was 5005, checked in by uli, 15 years ago

Fix references to academics stuff interfaces. This is the first step to make academics stuff pluggable.

File size: 5.2 KB
RevLine 
[4431]1"""Datatables and related components used in different contexts.
2"""
3import grok
[5005]4from waeup.sirp.interfaces import IUniversity
5from waeup.sirp.university.interfaces import (
6    IFacultyContainer, IFaculty, IDepartment, ICourseContainer)
[4920]7from waeup.sirp.widgets.interfaces import ITableProvider
8from waeup.sirp.widgets.table import YUITable as Table
9from waeup.sirp.widgets.table import Col
[4494]10from zope.security.management import checkPermission
[4431]11
[4432]12class CodeAndTitleTableProvider(grok.Adapter):
[4434]13    """A table provider for objects that have a code, title and prefix.
14    """
[4432]15    grok.baseclass()
[4431]16    grok.provides(ITableProvider)
17
[4432]18    title = None
[4431]19
[4434]20    def __init__(self, context):
21        self.context = context
22        self.prepare()
23
24    def prepare(self):
25        self.data_source = self.context
26
27    def getItemURL(self, view, value):
28        context_url = ''
29        if not view is None:
30            context_url = view.url(self.data_source) + '/'
31        result = '<a href="%s%s">%s</a>' % (context_url, value, value)
32        return result
33   
[4461]34    def getTables(self, view=None):
[4434]35        data = self.data_source
[4432]36        context_url = ''
37        if view:
38            context_url = view.url(self.context) + '/'
[4431]39        cols = (
40            Col(
41                header='Code', sortable=True,
[4434]42                data = tuple([self.getItemURL(view, data[x].code)
43                              for x in data])),
[4431]44            Col(
45                header='Title', sortable=True,
46                data = tuple([data.getName(x) for x in data])),
47            )
48        self.table = Table(self.title, cols=cols)
[4461]49        return (self.table,)
[4432]50   
51class DepartmentTableProvider(CodeAndTitleTableProvider):
52    grok.context(IFaculty)
53    grok.provides(ITableProvider)
54    title = 'Departments'
55
[4433]56class FacultyTableProvider(CodeAndTitleTableProvider):
57    grok.context(IFacultyContainer)
58    grok.provides(ITableProvider)
59    title = 'Faculties'
[4434]60
61class UniversityTableProvider(CodeAndTitleTableProvider):
62    grok.context(IUniversity)
63    grok.provides(ITableProvider)
64    title = 'Faculties'
65
66    def prepare(self):
67        self.data_source = self.context.faculties
[4442]68
69class CourseTableProvider(CodeAndTitleTableProvider):
70    grok.context(IDepartment)
71    grok.provides(ITableProvider)
72    title = 'Courses'
73
74    def prepare(self):
75        self.data_source = self.context.courses
76       
[4461]77    def getTables(self, view=None):
[4442]78        data = self.data_source
79        context_url = ''
80        if view:
81            context_url = view.url(self.context) + '/'
[4461]82
83        # Create a courses table...
[4442]84        cols = (
85            Col(
86                header='Code', sortable=True,
87                data = tuple([self.getItemURL(view, data[x].code)
88                              for x in data])),
89            Col(
90                header='Title', sortable=True,
91                data = tuple([data[x].title for x in data])),
92            )
[4494]93        delcol = Col(header='', sortable=False,
94                     data = [
95                '<form method="post">'
96                '<input type="submit" name="delcourse" value="Delete" />'
97                '<input type="hidden" name="code" value="%s" />'
98                '</form>' % (data[x].code)
99                for x in data])
100
101        if checkPermission('waeup.manageUniversity', self.context.courses):
102            cols = list(cols)
103            cols.append(delcol)
104            cols = tuple(cols)
[4461]105        self.coursetable = Table('Courses', cols=cols)
[4450]106
[4461]107        # Create a certificates table...
108        self.data_source = self.context.certificates
109        data = self.data_source
110        certcols =(
111            Col(
112                header='Code', sortable=True,
113                data = tuple([self.getItemURL(view, data[x].code)
114                              for x in data])),
115            Col(
116                header='Title', sortable=True,
117                data = tuple([data[x].title for x in data])),
118            )
[4496]119
120        delcol = Col(header='', sortable=False,
121                     data = [
122                '<form method="post">'
123                '<input type="submit" name="delcert" value="Delete" />'
124                '<input type="hidden" name="code" value="%s" />'
125                '</form>' % (data[x].code)
126                for x in data])
127
128        if checkPermission('waeup.manageUniversity', self.context.certificates):
129            certcols = list(certcols)
130            certcols.append(delcol)
131            certcols = tuple(certcols)
132
[4461]133        self.certtable = Table('Certificates', cols=certcols)
134        return (self.coursetable, self.certtable)
135
[4450]136class CourseContainerCourseTableProvider(CodeAndTitleTableProvider):
137    grok.context(ICourseContainer)
138    grok.provides(ITableProvider)
139    title = 'Courses'
140
[4461]141    def getTables(self, view=None):
[4450]142        data = self.data_source
143        context_url = ''
144        if view:
145            context_url = view.url(self.context) + '/'
146        cols = (
147            Col(
148                header='Code', sortable=True,
149                data = tuple([self.getItemURL(view, data[x].code)
150                              for x in data])),
151            Col(
152                header='Title', sortable=True,
153                data = tuple([data[x].title for x in data])),
154            )
155        self.table = Table(self.title, cols=cols)
[4461]156        return (self.table,)
Note: See TracBrowser for help on using the repository browser.