web/views/startup.py
branchstable
changeset 2312 af4d8f75c5db
parent 2265 4c028cb136a4
child 2368 b41aef0e63a7
equal deleted inserted replaced
2311:f178182b1305 2312:af4d8f75c5db
     8 """
     8 """
     9 __docformat__ = "restructuredtext en"
     9 __docformat__ = "restructuredtext en"
    10 _ = unicode
    10 _ = unicode
    11 
    11 
    12 from logilab.common.textutils import unormalize
    12 from logilab.common.textutils import unormalize
    13 from logilab.mtconverter import html_escape
    13 from logilab.mtconverter import xml_escape
    14 
    14 
    15 from cubicweb.view import StartupView
    15 from cubicweb.view import StartupView
    16 from cubicweb.selectors import match_user_groups, implements
    16 from cubicweb.selectors import match_user_groups, implements
    17 from cubicweb.schema import display_name
    17 from cubicweb.schema import display_name
    18 from cubicweb.common.uilib import ureport_as_html
    18 from cubicweb.common.uilib import ureport_as_html
    75                 href = rset.get_entity(0, 0).absolute_url(vid='edition')
    75                 href = rset.get_entity(0, 0).absolute_url(vid='edition')
    76                 label = self.req._('edit the index page')
    76                 label = self.req._('edit the index page')
    77             else:
    77             else:
    78                 href = req.build_url('view', vid='creation', etype='Card', wikiid='index')
    78                 href = req.build_url('view', vid='creation', etype='Card', wikiid='index')
    79                 label = self.req._('create an index page')
    79                 label = self.req._('create an index page')
    80             self.w(u'<br/><a href="%s">%s</a>\n' % (html_escape(href), label))
    80             self.w(u'<br/><a href="%s">%s</a>\n' % (xml_escape(href), label))
    81 
    81 
    82     def folders(self):
    82     def folders(self):
    83         self.w(u'<h4>%s</h4>\n' % self.req._('Browse by category'))
    83         self.w(u'<h4>%s</h4>\n' % self.req._('Browse by category'))
    84         self.vreg.select_view('tree', self.req, None).render(w=self.w)
    84         self.vreg.select_view('tree', self.req, None).render(w=self.w)
    85 
    85 
    90     def startupviews_table(self):
    90     def startupviews_table(self):
    91         for v in self.vreg.possible_views(self.req, None):
    91         for v in self.vreg.possible_views(self.req, None):
    92             if v.category != 'startupview' or v.id in ('index', 'tree', 'manage'):
    92             if v.category != 'startupview' or v.id in ('index', 'tree', 'manage'):
    93                 continue
    93                 continue
    94             self.w('<p><a href="%s">%s</a></p>' % (
    94             self.w('<p><a href="%s">%s</a></p>' % (
    95                 html_escape(v.url()), html_escape(self.req._(v.title).capitalize())))
    95                 xml_escape(v.url()), xml_escape(self.req._(v.title).capitalize())))
    96 
    96 
    97     def entities(self):
    97     def entities(self):
    98         schema = self.schema
    98         schema = self.schema
    99         self.w(u'<h4>%s</h4>\n' % self.req._('The repository holds the following entities'))
    99         self.w(u'<h4>%s</h4>\n' % self.req._('The repository holds the following entities'))
   100         manager = self.req.user.matching_groups('managers')
   100         manager = self.req.user.matching_groups('managers')
   144                 view = self.vreg.select_view('list', req, req.etype_rset(etype))
   144                 view = self.vreg.select_view('list', req, req.etype_rset(etype))
   145                 url = view.url()
   145                 url = view.url()
   146             else:
   146             else:
   147                 url = self.build_url('view', rql='%s X' % etype)
   147                 url = self.build_url('view', rql='%s X' % etype)
   148             etypelink = u'&nbsp;<a href="%s">%s</a> (%d)' % (
   148             etypelink = u'&nbsp;<a href="%s">%s</a> (%d)' % (
   149                 html_escape(url), label, nb)
   149                 xml_escape(url), label, nb)
   150             yield (label, etypelink, self.add_entity_link(eschema, req))
   150             yield (label, etypelink, self.add_entity_link(eschema, req))
   151 
   151 
   152     def add_entity_link(self, eschema, req):
   152     def add_entity_link(self, eschema, req):
   153         """creates a [+] link for adding an entity if user has permission to do so"""
   153         """creates a [+] link for adding an entity if user has permission to do so"""
   154         if not eschema.has_perm(req, 'add'):
   154         if not eschema.has_perm(req, 'add'):
   155             return u''
   155             return u''
   156         return u'[<a href="%s" title="%s">+</a>]' % (
   156         return u'[<a href="%s" title="%s">+</a>]' % (
   157             html_escape(self.create_url(eschema.type)),
   157             xml_escape(self.create_url(eschema.type)),
   158             self.req.__('add a %s' % eschema))
   158             self.req.__('add a %s' % eschema))
   159 
   159 
   160 
   160 
   161 class IndexView(ManageView):
   161 class IndexView(ManageView):
   162     id = 'index'
   162     id = 'index'
   184 
   184 
   185     def call(self):
   185     def call(self):
   186         self.w(_(u'<div>This schema of the data model <em>excludes</em> the '
   186         self.w(_(u'<div>This schema of the data model <em>excludes</em> the '
   187                  u'meta-data, but you can also display a <a href="%s">complete '
   187                  u'meta-data, but you can also display a <a href="%s">complete '
   188                  u'schema with meta-data</a>.</div>')
   188                  u'schema with meta-data</a>.</div>')
   189                % html_escape(self.build_url('view', vid='schemagraph', withmeta=1)))
   189                % xml_escape(self.build_url('view', vid='schemagraph', withmeta=1)))
   190         self.w(u'<img src="%s" alt="%s"/>\n' % (
   190         self.w(u'<img src="%s" alt="%s"/>\n' % (
   191             html_escape(self.req.build_url('view', vid='schemagraph', withmeta=0)),
   191             xml_escape(self.req.build_url('view', vid='schemagraph', withmeta=0)),
   192             self.req._("graphical representation of the application'schema")))
   192             self.req._("graphical representation of the application'schema")))
   193 
   193 
   194 
   194 
   195 class SchemaTabTextView(StartupView):
   195 class SchemaTabTextView(StartupView):
   196     id = 'schema-text'
   196     id = 'schema-text'
   232         self.w(u'<div id="schema_security"><a id="index" href="index"/>')
   232         self.w(u'<div id="schema_security"><a id="index" href="index"/>')
   233         self.w(u'<h2 class="schema">%s</h2>' % _('index').capitalize())
   233         self.w(u'<h2 class="schema">%s</h2>' % _('index').capitalize())
   234         self.w(u'<h4>%s</h4>' %   _('Entities').capitalize())
   234         self.w(u'<h4>%s</h4>' %   _('Entities').capitalize())
   235         ents = []
   235         ents = []
   236         for eschema in sorted(entities):
   236         for eschema in sorted(entities):
   237             url = html_escape(self.build_url('schema', **formparams))
   237             url = xml_escape(self.build_url('schema', **formparams))
   238             ents.append(u'<a class="grey" href="%s#%s">%s</a> (%s)' % (
   238             ents.append(u'<a class="grey" href="%s#%s">%s</a> (%s)' % (
   239                 url,  eschema.type, eschema.type, _(eschema.type)))
   239                 url,  eschema.type, eschema.type, _(eschema.type)))
   240         self.w(u', '.join(ents))
   240         self.w(u', '.join(ents))
   241         self.w(u'<h4>%s</h4>' % (_('relations').capitalize()))
   241         self.w(u'<h4>%s</h4>' % (_('relations').capitalize()))
   242         rels = []
   242         rels = []
   243         for rschema in sorted(relations):
   243         for rschema in sorted(relations):
   244             url = html_escape(self.build_url('schema', **formparams))
   244             url = xml_escape(self.build_url('schema', **formparams))
   245             rels.append(u'<a class="grey" href="%s#%s">%s</a> (%s), ' %  (
   245             rels.append(u'<a class="grey" href="%s#%s">%s</a> (%s), ' %  (
   246                 url , rschema.type, rschema.type, _(rschema.type)))
   246                 url , rschema.type, rschema.type, _(rschema.type)))
   247         self.w(u', '.join(ents))
   247         self.w(u', '.join(ents))
   248         # entities
   248         # entities
   249         self.display_entities(entities, formparams)
   249         self.display_entities(entities, formparams)
   257         self.w(u'<a id="entities" href="entities"/>')
   257         self.w(u'<a id="entities" href="entities"/>')
   258         self.w(u'<h2 class="schema">%s</h2>' % _('permissions for entities').capitalize())
   258         self.w(u'<h2 class="schema">%s</h2>' % _('permissions for entities').capitalize())
   259         for eschema in sorted(entities):
   259         for eschema in sorted(entities):
   260             self.w(u'<a id="%s" href="%s"/>' %  (eschema.type, eschema.type))
   260             self.w(u'<a id="%s" href="%s"/>' %  (eschema.type, eschema.type))
   261             self.w(u'<h3 class="schema">%s (%s) ' % (eschema.type, _(eschema.type)))
   261             self.w(u'<h3 class="schema">%s (%s) ' % (eschema.type, _(eschema.type)))
   262             url = html_escape(self.build_url('schema', **formparams) + '#index')
   262             url = xml_escape(self.build_url('schema', **formparams) + '#index')
   263             self.w(u'<a href="%s"><img src="%s" alt="%s"/></a>' % (url,  self.req.external_resource('UP_ICON'), _('up')))
   263             self.w(u'<a href="%s"><img src="%s" alt="%s"/></a>' % (url,  self.req.external_resource('UP_ICON'), _('up')))
   264             self.w(u'</h3>')
   264             self.w(u'</h3>')
   265             self.w(u'<div style="margin: 0px 1.5em">')
   265             self.w(u'<div style="margin: 0px 1.5em">')
   266             self.schema_definition(eschema, link=False)
   266             self.schema_definition(eschema, link=False)
   267 
   267 
   287         self.w(u'<a id="relations" href="relations"/>')
   287         self.w(u'<a id="relations" href="relations"/>')
   288         self.w(u'<h2 class="schema">%s </h2>' % _('permissions for relations').capitalize())
   288         self.w(u'<h2 class="schema">%s </h2>' % _('permissions for relations').capitalize())
   289         for rschema in sorted(relations):
   289         for rschema in sorted(relations):
   290             self.w(u'<a id="%s" href="%s"/>' %  (rschema.type, rschema.type))
   290             self.w(u'<a id="%s" href="%s"/>' %  (rschema.type, rschema.type))
   291             self.w(u'<h3 class="schema">%s (%s) ' % (rschema.type, _(rschema.type)))
   291             self.w(u'<h3 class="schema">%s (%s) ' % (rschema.type, _(rschema.type)))
   292             url = html_escape(self.build_url('schema', **formparams) + '#index')
   292             url = xml_escape(self.build_url('schema', **formparams) + '#index')
   293             self.w(u'<a href="%s"><img src="%s" alt="%s"/></a>' % (url,  self.req.external_resource('UP_ICON'), _('up')))
   293             self.w(u'<a href="%s"><img src="%s" alt="%s"/></a>' % (url,  self.req.external_resource('UP_ICON'), _('up')))
   294             self.w(u'</h3>')
   294             self.w(u'</h3>')
   295             self.w(u'<div style="margin: 0px 1.5em">')
   295             self.w(u'<div style="margin: 0px 1.5em">')
   296             subjects = [str(subj) for subj in rschema.subjects()]
   296             subjects = [str(subj) for subj in rschema.subjects()]
   297             self.w(u'<div><strong>%s</strong> %s (%s)</div>' % (_('subject_plural:'),
   297             self.w(u'<div><strong>%s</strong> %s (%s)</div>' % (_('subject_plural:'),