72 href = rset.get_entity(0, 0).absolute_url(vid='edition') |
72 href = rset.get_entity(0, 0).absolute_url(vid='edition') |
73 label = self.req._('edit the index page') |
73 label = self.req._('edit the index page') |
74 else: |
74 else: |
75 href = req.build_url('view', vid='creation', etype='Card', wikiid='index') |
75 href = req.build_url('view', vid='creation', etype='Card', wikiid='index') |
76 label = self.req._('create an index page') |
76 label = self.req._('create an index page') |
77 self.w(u'<br/><a href="%s">%s</a>\n' % (html_escape(href), label)) |
77 self.w(u'<br/><a href="%s">%s</a>\n' % (xml_escape(href), label)) |
78 |
78 |
79 def folders(self): |
79 def folders(self): |
80 self.w(u'<h4>%s</h4>\n' % self.req._('Browse by category')) |
80 self.w(u'<h4>%s</h4>\n' % self.req._('Browse by category')) |
81 self.vreg.select('views', 'tree', self.req).render(w=self.w) |
81 self.vreg.select('views', 'tree', self.req).render(w=self.w) |
82 |
82 |
87 def startupviews_table(self): |
87 def startupviews_table(self): |
88 for v in self.vreg.possible_views(self.req, None): |
88 for v in self.vreg.possible_views(self.req, None): |
89 if v.category != 'startupview' or v.id in ('index', 'tree', 'manage'): |
89 if v.category != 'startupview' or v.id in ('index', 'tree', 'manage'): |
90 continue |
90 continue |
91 self.w('<p><a href="%s">%s</a></p>' % ( |
91 self.w('<p><a href="%s">%s</a></p>' % ( |
92 html_escape(v.url()), html_escape(self.req._(v.title).capitalize()))) |
92 xml_escape(v.url()), xml_escape(self.req._(v.title).capitalize()))) |
93 |
93 |
94 def entities(self): |
94 def entities(self): |
95 schema = self.schema |
95 schema = self.schema |
96 self.w(u'<h4>%s</h4>\n' % self.req._('The repository holds the following entities')) |
96 self.w(u'<h4>%s</h4>\n' % self.req._('The repository holds the following entities')) |
97 manager = self.req.user.matching_groups('managers') |
97 manager = self.req.user.matching_groups('managers') |
142 rset=req.etype_rset(etype)) |
142 rset=req.etype_rset(etype)) |
143 url = view.url() |
143 url = view.url() |
144 else: |
144 else: |
145 url = self.build_url('view', rql='%s X' % etype) |
145 url = self.build_url('view', rql='%s X' % etype) |
146 etypelink = u' <a href="%s">%s</a> (%d)' % ( |
146 etypelink = u' <a href="%s">%s</a> (%d)' % ( |
147 html_escape(url), label, nb) |
147 xml_escape(url), label, nb) |
148 yield (label, etypelink, self.add_entity_link(eschema, req)) |
148 yield (label, etypelink, self.add_entity_link(eschema, req)) |
149 |
149 |
150 def add_entity_link(self, eschema, req): |
150 def add_entity_link(self, eschema, req): |
151 """creates a [+] link for adding an entity if user has permission to do so""" |
151 """creates a [+] link for adding an entity if user has permission to do so""" |
152 if not eschema.has_perm(req, 'add'): |
152 if not eschema.has_perm(req, 'add'): |
153 return u'' |
153 return u'' |
154 return u'[<a href="%s" title="%s">+</a>]' % ( |
154 return u'[<a href="%s" title="%s">+</a>]' % ( |
155 html_escape(self.create_url(eschema.type)), |
155 xml_escape(self.create_url(eschema.type)), |
156 self.req.__('add a %s' % eschema)) |
156 self.req.__('add a %s' % eschema)) |
157 |
157 |
158 |
158 |
159 class IndexView(ManageView): |
159 class IndexView(ManageView): |
160 id = 'index' |
160 id = 'index' |
161 title = _('index') |
161 title = _('view_index') |
162 |
162 |
163 def display_folders(self): |
163 def display_folders(self): |
164 return 'Folder' in self.schema and self.req.execute('Any COUNT(X) WHERE X is Folder')[0][0] |
164 return 'Folder' in self.schema and self.req.execute('Any COUNT(X) WHERE X is Folder')[0][0] |
165 |
165 |
166 class SchemaView(tabs.TabsMixin, StartupView): |
166 class SchemaView(tabs.TabsMixin, StartupView): |
182 |
182 |
183 def call(self): |
183 def call(self): |
184 self.w(_(u'<div>This schema of the data model <em>excludes</em> the ' |
184 self.w(_(u'<div>This schema of the data model <em>excludes</em> the ' |
185 u'meta-data, but you can also display a <a href="%s">complete ' |
185 u'meta-data, but you can also display a <a href="%s">complete ' |
186 u'schema with meta-data</a>.</div>') |
186 u'schema with meta-data</a>.</div>') |
187 % html_escape(self.build_url('view', vid='schemagraph', skipmeta=0))) |
187 % xml_escape(self.build_url('view', vid='schemagraph', withmeta=1))) |
188 self.w(u'<img src="%s" alt="%s"/>\n' % ( |
188 self.w(u'<img src="%s" alt="%s"/>\n' % ( |
189 html_escape(self.req.build_url('view', vid='schemagraph', skipmeta=1)), |
189 xml_escape(self.req.build_url('view', vid='schemagraph', skipmeta=1)), |
190 self.req._("graphical representation of the application'schema"))) |
190 self.req._("graphical representation of the application'schema"))) |
191 |
191 |
192 |
192 |
193 class SchemaTabTextView(StartupView): |
193 class SchemaTabTextView(StartupView): |
194 id = 'schema-text' |
194 id = 'schema-text' |
226 _ = self.req._ |
226 _ = self.req._ |
227 self.w(u'<div id="schema_security"><a id="index" href="index"/>') |
227 self.w(u'<div id="schema_security"><a id="index" href="index"/>') |
228 self.w(u'<h2 class="schema">%s</h2>' % _('index').capitalize()) |
228 self.w(u'<h2 class="schema">%s</h2>' % _('index').capitalize()) |
229 self.w(u'<h4>%s</h4>' % _('Entities').capitalize()) |
229 self.w(u'<h4>%s</h4>' % _('Entities').capitalize()) |
230 ents = [] |
230 ents = [] |
231 for eschema in entities: |
231 for eschema in sorted(entities): |
232 url = html_escape(self.build_url('schema', **formparams)) |
232 url = xml_escape(self.build_url('schema', **formparams)) |
233 ents.append(u'<a class="grey" href="%s#%s">%s</a> (%s)' % ( |
233 ents.append(u'<a class="grey" href="%s#%s">%s</a> (%s)' % ( |
234 url, eschema.type, eschema.type, _(eschema.type))) |
234 url, eschema.type, eschema.type, _(eschema.type))) |
235 self.w(u', '.join(ents)) |
235 self.w(u', '.join(ents)) |
236 self.w(u'<h4>%s</h4>' % (_('relations').capitalize())) |
236 self.w(u'<h4>%s</h4>' % (_('relations').capitalize())) |
237 rels = [] |
237 rels = [] |
238 for rschema in relations: |
238 for rschema in sorted(relations): |
239 url = html_escape(self.build_url('schema', **formparams)) |
239 url = xml_escape(self.build_url('schema', **formparams)) |
240 rels.append(u'<a class="grey" href="%s#%s">%s</a> (%s), ' % ( |
240 rels.append(u'<a class="grey" href="%s#%s">%s</a> (%s), ' % ( |
241 url , rschema.type, rschema.type, _(rschema.type))) |
241 url , rschema.type, rschema.type, _(rschema.type))) |
242 self.w(u', '.join(ents)) |
242 self.w(u', '.join(ents)) |
243 # entities |
243 # entities |
244 self.display_entities(entities, formparams) |
244 self.display_entities(entities, formparams) |
252 self.w(u'<a id="entities" href="entities"/>') |
252 self.w(u'<a id="entities" href="entities"/>') |
253 self.w(u'<h2 class="schema">%s</h2>' % _('permissions for entities').capitalize()) |
253 self.w(u'<h2 class="schema">%s</h2>' % _('permissions for entities').capitalize()) |
254 for eschema in entities: |
254 for eschema in entities: |
255 self.w(u'<a id="%s" href="%s"/>' % (eschema.type, eschema.type)) |
255 self.w(u'<a id="%s" href="%s"/>' % (eschema.type, eschema.type)) |
256 self.w(u'<h3 class="schema">%s (%s) ' % (eschema.type, _(eschema.type))) |
256 self.w(u'<h3 class="schema">%s (%s) ' % (eschema.type, _(eschema.type))) |
257 url = html_escape(self.build_url('schema', **formparams) + '#index') |
257 url = xml_escape(self.build_url('schema', **formparams) + '#index') |
258 self.w(u'<a href="%s"><img src="%s" alt="%s"/></a>' % ( |
258 self.w(u'<a href="%s"><img src="%s" alt="%s"/></a>' % ( |
259 url, self.req.external_resource('UP_ICON'), _('up'))) |
259 url, self.req.external_resource('UP_ICON'), _('up'))) |
260 self.w(u'</h3>') |
260 self.w(u'</h3>') |
261 self.w(u'<div style="margin: 0px 1.5em">') |
261 self.w(u'<div style="margin: 0px 1.5em">') |
262 self.schema_definition(eschema, link=False) |
262 self.schema_definition(eschema, link=False) |
279 self.w(u'<a id="relations" href="relations"/>') |
279 self.w(u'<a id="relations" href="relations"/>') |
280 self.w(u'<h2 class="schema">%s </h2>' % _('permissions for relations').capitalize()) |
280 self.w(u'<h2 class="schema">%s </h2>' % _('permissions for relations').capitalize()) |
281 for rschema in relations: |
281 for rschema in relations: |
282 self.w(u'<a id="%s" href="%s"/>' % (rschema.type, rschema.type)) |
282 self.w(u'<a id="%s" href="%s"/>' % (rschema.type, rschema.type)) |
283 self.w(u'<h3 class="schema">%s (%s) ' % (rschema.type, _(rschema.type))) |
283 self.w(u'<h3 class="schema">%s (%s) ' % (rschema.type, _(rschema.type))) |
284 url = html_escape(self.build_url('schema', **formparams) + '#index') |
284 url = xml_escape(self.build_url('schema', **formparams) + '#index') |
285 self.w(u'<a href="%s"><img src="%s" alt="%s"/></a>' % ( |
285 self.w(u'<a href="%s"><img src="%s" alt="%s"/></a>' % ( |
286 url, self.req.external_resource('UP_ICON'), _('up'))) |
286 url, self.req.external_resource('UP_ICON'), _('up'))) |
287 self.w(u'</h3>') |
287 self.w(u'</h3>') |
288 self.w(u'<div style="margin: 0px 1.5em">') |
288 self.w(u'<div style="margin: 0px 1.5em">') |
289 subjects = [str(subj) for subj in rschema.subjects()] |
289 subjects = [str(subj) for subj in rschema.subjects()] |