Package platecom :: Package utils :: Package browser :: Module base
[hide private]
[frames] | no frames]

Source Code for Module icsemantic.core.browser.base

  1  """ 
  2  Clases de base para vistas y formularios 
  3   
  4  @author: Juan Pablo Gimenez 
  5  @contact: jpg@rcom.com.ar 
  6  """ 
  7  __author__ = """Juan Pablo Gimenez <jpg@rcom.com.ar>""" 
  8  __docformat__ = 'plaintext' 
  9   
 10  from datetime import datetime 
 11  import zope 
 12  from zope.i18n.interfaces import IUserPreferredLanguages 
 13  from zope.i18n.locales import locales, LoadLocaleError 
 14  from zope.formlib import form 
 15  from zope.formlib.namedtemplate import NamedTemplate, \ 
 16                                         NamedTemplateImplementation 
 17   
 18  from Products.Five.browser.pagetemplatefile import ZopeTwoPageTemplateFile 
 19  from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile 
 20  from zope.app.pagetemplate import ViewPageTemplateFile as ZopeViewPageTemplateFile 
 21  from Products.Five.formlib import formbase 
 22   
 23  from platecom.utils.i18n import _ 
24 25 -class BaseView( object ):
26 """ So this mixin fixes some issues with doing zope3 in zope2 27 for views specifically it puts a debug attribute on the request 28 which some view machinery checks for secondly it lookups the 29 user locale, and attaches it as an attribute on the request where 30 the i10n widget machinery expects to find it. 31 """ 32
33 - def setupEnvironment( self, request ):
34 """ Si request.debug no existe lo definimos como False """ 35 if not hasattr( request, 'debug'): 36 request.debug = False
37
38 - def setupLocale( self, request ):
39 """ Slightly adapted from zope.publisher.http.HTTPRequest.setupLocale 40 Nos aseguramos que exista el request.locale 41 """ 42 if getattr( request, 'locale', None) is not None: 43 return 44 45 envadapter = IUserPreferredLanguages(request, None) 46 if envadapter is None: 47 request.locale = locales.getLocale(None, None, None) 48 return 49 50 langs = envadapter.getPreferredLanguages() 51 for httplang in langs: 52 parts = (httplang.split('-') + [None, None])[:3] 53 try: 54 request.locale = locales.getLocale(*parts) 55 return 56 except LoadLocaleError: 57 # Just try the next combination 58 pass 59 else: 60 # No combination gave us an existing locale, so use the default, 61 # which is guaranteed to exist 62 request.locale = locales.getLocale(None, None, None)
63
64 -class BaseFormView( formbase.EditFormBase, BaseView ):
65 """ Definimos una clase de base para los forms, que tiene 66 una apariencia mas compatible con plone. 67 """ 68 69 template = ViewPageTemplateFile('templates/form.pt') 70 71 action_url = "" # NEEDED 72 hidden_form_vars = None # mapping of hidden variables to pass through on the form 73
74 - def hidden_inputs( self ):
75 if not self.hidden_form_vars: return '' 76 return make_hidden_input( **self.hidden_form_vars )
77 78 hidden_inputs = property( hidden_inputs ) 79
80 - def __init__( self, context, request ):
81 # setup some compatiblity 82 self.context = context 83 self.request = request 84 self.setupLocale( request ) 85 self.setupEnvironment( request ) 86 super( BaseFormView, self).__init__( context, request )
87
88 -class BaseSettingsForm( BaseFormView, BaseView ):
89 """ Definimos una clase de base para los forms de 90 configuracion. 91 """ 92 options = None 93 # template = NamedTemplate("settings.form") 94 template = ViewPageTemplateFile('templates/settings-page.pt') 95 96 @form.action(_("Apply"), condition=form.haveInputWidgets)
97 - def handle_edit_action(self, action, data):
98 if form.applyChanges(self.context, 99 self.form_fields, 100 data, 101 self.adapters): 102 zope.event.notify( 103 zope.lifecycleevent.ObjectModifiedEvent(self.context) 104 ) 105 self.status = _( 106 "Updated on ${date_time}", 107 mapping={'date_time': str(datetime.utcnow())} 108 ) 109 else: 110 self.status = _('No changes')
111 112 settings_form_template = NamedTemplateImplementation( 113 ZopeViewPageTemplateFile('templates/settings-page.pt'), 114 BaseSettingsForm) 115