# HG changeset patch # User Sylvain Thénault # Date 1244191254 -7200 # Node ID 0b9b0bdc93f5726f6111e8a8f5f405278fdc2cfe # Parent 296e897ab8e12f9dacd1ea632ff64af882888b42# Parent e4d24e4d74e6b190b04b59e15b675fb1da5ab344 backport changesets which should have been in stable branch. now *stable is 3.3* and *default is 3.4* diff -r 296e897ab8e1 -r 0b9b0bdc93f5 doc/book/en/annexes/rql/language.rst --- a/doc/book/en/annexes/rql/language.rst Thu Jun 04 20:21:40 2009 +0200 +++ b/doc/book/en/annexes/rql/language.rst Fri Jun 05 10:40:54 2009 +0200 @@ -299,7 +299,7 @@ Note: You can not specify several types with * ... where X is FirstType or X is SecondType*. - To specify several types explicitely, you have to do + To specify several types explicitly, you have to do :: diff -r 296e897ab8e1 -r 0b9b0bdc93f5 doc/book/en/development/devcore/vreg.rst --- a/doc/book/en/development/devcore/vreg.rst Thu Jun 04 20:21:40 2009 +0200 +++ b/doc/book/en/development/devcore/vreg.rst Fri Jun 05 10:40:54 2009 +0200 @@ -13,7 +13,10 @@ conditionnellement, - enregistrement explicite en définissant la fonction `registration_callback(vreg)` - appel des méthodes d'enregistrement des objets sur le vreg - +.. note:: + Once the function `registration_callback(vreg)` is implemented, all the objects + need to be explicitly registered as it disables the automatic object registering. + * suppression de l'ancien système quand il ne restera plus de réference au module registerers dans le code des cubes existants. @@ -148,4 +151,4 @@ Debugging ````````` -XXX explain traced_selection context manager \ No newline at end of file +XXX explain traced_selection context manager diff -r 296e897ab8e1 -r 0b9b0bdc93f5 doc/book/en/development/webstdlib/boxes.rst --- a/doc/book/en/development/webstdlib/boxes.rst Thu Jun 04 20:21:40 2009 +0200 +++ b/doc/book/en/development/webstdlib/boxes.rst Fri Jun 05 10:40:54 2009 +0200 @@ -12,7 +12,7 @@ an entity automatically related to the initial entity (context in which the box is displayed). By default, the links generated in this box are computed from the schema properties of the displayed entity, -but it is possible to explicitely specify them thanks to the +but it is possible to explicitly specify them thanks to the `cubicweb.web.uicfg.rmode` *relation tag*: * `link`, indicates that a relation is in general created pointing diff -r 296e897ab8e1 -r 0b9b0bdc93f5 server/schemaserial.py --- a/server/schemaserial.py Thu Jun 04 20:21:40 2009 +0200 +++ b/server/schemaserial.py Fri Jun 05 10:40:54 2009 +0200 @@ -83,6 +83,9 @@ sqlcu.execute(sql) # schema / perms deserialization ############################################## +OLD_SCHEMA_TYPES = frozenset(('EFRDef', 'ENFRDef', 'ERType', 'EEType', + 'EConstraintType', 'EConstraint', 'EGroup', + 'EUser', 'ECache', 'EPermission', 'EProperty')) def deserialize_schema(schema, session): """return a schema according to information stored in an rql database @@ -92,16 +95,15 @@ repo = session.repo sqlcu = session.pool['system'] _3_2_migration = False - tables = set(t.lower() for t in repo.system_source.dbhelper.list_tables(sqlcu)) + dbhelper = repo.system_source.dbhelper + tables = set(t.lower() for t in dbhelper.list_tables(sqlcu)) if 'eetype' in tables: _3_2_migration = True # 3.2 migration _set_sql_prefix('') # first rename entity types whose name changed in 3.2 without adding the # cw_ prefix - for etype in ('EFRDef', 'ENFRDef', 'ERType', 'EEType', - 'EConstraintType', 'EConstraint', 'EGroup', 'EUser', - 'ECache', 'EPermission', 'EProperty'): + for etype in OLD_SCHEMA_TYPES: if etype.lower() in tables: sql = 'ALTER TABLE %s RENAME TO %s' % (etype, ETYPE_NAME_MAP[etype]) @@ -123,18 +125,25 @@ eschema.eid = eid index[eid] = eschema continue - if etype in ETYPE_NAME_MAP: # XXX <2.45 bw compat - print 'fixing etype name from %s to %s' % (etype, ETYPE_NAME_MAP[etype]) + if etype in ETYPE_NAME_MAP: + netype = ETYPE_NAME_MAP[etype] + print 'fixing etype name from %s to %s' % (etype, netype) # can't use write rql queries at this point, use raw sql session.system_sql('UPDATE %(p)sCWEType SET %(p)sname=%%(n)s WHERE %(p)seid=%%(x)s' % {'p': sqlutils.SQL_PREFIX}, - {'x': eid, 'n': ETYPE_NAME_MAP[etype]}) + {'x': eid, 'n': netype}) session.system_sql('UPDATE entities SET type=%(n)s WHERE type=%(x)s', - {'x': etype, 'n': ETYPE_NAME_MAP[etype]}) + {'x': etype, 'n': netype}) + # XXX should be donne as well on sqlite based sources + if not etype in OLD_SCHEMA_TYPES and \ + (getattr(dbhelper, 'case_sensitive', False) + or etype.lower() != netype.lower()): + session.system_sql('ALTER TABLE %s%s RENAME TO %s%s' % ( + sqlutils.SQL_PREFIX, etype, sqlutils.SQL_PREFIX, netype)) session.commit(False) try: session.system_sql('UPDATE deleted_entities SET type=%(n)s WHERE type=%(x)s', - {'x': etype, 'n': ETYPE_NAME_MAP[etype]}) + {'x': etype, 'n': netype}) except: pass tocleanup = [eid] @@ -142,7 +151,7 @@ if etype == eidetype) repo.clear_caches(tocleanup) session.commit(False) - etype = ETYPE_NAME_MAP[etype] + etype = netype etype = ybo.EntityType(name=etype, description=desc, meta=meta, eid=eid) eschema = schema.add_entity_type(etype) index[eid] = eschema diff -r 296e897ab8e1 -r 0b9b0bdc93f5 web/views/basecontrollers.py --- a/web/views/basecontrollers.py Thu Jun 04 20:21:40 2009 +0200 +++ b/web/views/basecontrollers.py Fri Jun 05 10:40:54 2009 +0200 @@ -211,9 +211,11 @@ status, args = (False, '???') self.req.set_content_type('text/html') jsarg = simplejson.dumps( (status, args) ) + domid = self.req.form.get('__domid', 'entityForm').encode( + self.req.encoding) return """""" % simplejson.dumps( (status, args) ) + window.parent.handleFormValidationResponse('%s', null, null, %s); +""" % (domid, simplejson.dumps( (status, args) )) def validation_error(self, err): self.req.cnx.rollback() diff -r 296e897ab8e1 -r 0b9b0bdc93f5 web/views/cwproperties.py --- a/web/views/cwproperties.py Thu Jun 04 20:21:40 2009 +0200 +++ b/web/views/cwproperties.py Fri Jun 05 10:40:54 2009 +0200 @@ -212,7 +212,7 @@ else: label = key subform = self.vreg.select_object('forms', 'base', self.req, entity=entity, - set_error_url=False) + mainform=False) subform.append_field(PropertyValueField(name='value', label=label, eidparam=True)) subform.vreg = self.vreg diff -r 296e897ab8e1 -r 0b9b0bdc93f5 web/views/editforms.py --- a/web/views/editforms.py Thu Jun 04 20:21:40 2009 +0200 +++ b/web/views/editforms.py Fri Jun 05 10:40:54 2009 +0200 @@ -71,7 +71,7 @@ continue done.add(entity.eid) subform = self.vreg.select_object('forms', 'base', req, entity=entity, - set_error_url=False) + mainform=False) form.form_add_subform(subform) # don't use outofcontext view or any other that may contain inline edition form w(u'
  • %s
  • ' % tags.a(entity.view('textoutofcontext'), @@ -119,7 +119,6 @@ else: form = self._build_relation_form(entity, value, rtype, role, row, col, vid, default) - form.form_add_hidden(u'__maineid', entity.eid) renderer = self.vreg.select_object('formrenderers', 'base', self.req, entity=entity, display_label=False, display_help=False, @@ -194,7 +193,7 @@ def init_form(self, form, entity): """customize your form before rendering here""" - form.form_add_hidden(u'__maineid', entity.eid) + pass def form_title(self, entity): """the form view title""" @@ -307,7 +306,7 @@ for row in xrange(len(self.rset)): form = self.vreg.select_object('forms', 'edition', self.req, self.rset, row=row, attrcategories=('primary',), - set_error_url=False) + mainform=False) # XXX rely on the EntityCompositeFormRenderer to put the eid input form.remove_field(form.field_by_name('eid')) self.form_add_subform(form) @@ -356,8 +355,7 @@ """fetch and render the form""" form = self.vreg.select_object('forms', 'edition', self.req, None, entity=entity, form_renderer_id='inline', - set_error_url=False, - copy_nav_params=False) + mainform=False, copy_nav_params=False) self.add_hiddens(form, entity, peid, rtype, role) divid = '%s-%s-%s' % (peid, rtype, entity.eid) title = self.schema.rschema(rtype).display_name(self.req, role) diff -r 296e897ab8e1 -r 0b9b0bdc93f5 web/views/forms.py --- a/web/views/forms.py Thu Jun 04 20:21:40 2009 +0200 +++ b/web/views/forms.py Fri Jun 05 10:40:54 2009 +0200 @@ -36,12 +36,12 @@ cssstyle = None cwtarget = None redirect_path = None - set_error_url = True copy_nav_params = False form_buttons = None # form buttons (button widgets instances) form_renderer_id = 'default' - def __init__(self, req, rset=None, row=None, col=None, submitmsg=None, + def __init__(self, req, rset=None, row=None, col=None, + submitmsg=None, mainform=True, **kwargs): super(FieldsForm, self).__init__(req, rset, row=row, col=col) self.fields = list(self.__class__._fields_) @@ -51,8 +51,9 @@ else: assert hasattr(self.__class__, key) and not key[0] == '_', key setattr(self, key, val) - if self.set_error_url: + if mainform: self.form_add_hidden('__errorurl', self.session_key()) + self.form_add_hidden('__domid', self.domid) if self.copy_nav_params: for param in NAV_FORM_PARAMETERS: if not param in kwargs: @@ -266,13 +267,18 @@ self.edited_entity = self.complete_entity(self.row or 0, self.col or 0) self.form_add_hidden('__type', eidparam=True) self.form_add_hidden('eid') + if kwargs.get('mainform'): + self.form_add_hidden(u'__maineid', self.edited_entity.eid) + # If we need to directly attach the new object to another one + if self.req.list_form_param('__linkto'): + for linkto in self.req.list_form_param('__linkto'): + self.form_add_hidden('__linkto', linkto) + if msg: + msg = '%s %s' % (msg, self.req._('and linked')) + else: + msg = self.req._('entity linked') if msg: - # If we need to directly attach the new object to another one self.form_add_hidden('__message', msg) - if not self.is_subform: - for linkto in self.req.list_form_param('__linkto'): - self.form_add_hidden('__linkto', linkto) - msg = '%s %s' % (msg, self.req._('and linked')) def _field_has_error(self, field): """return true if the field has some error in given validation exception diff -r 296e897ab8e1 -r 0b9b0bdc93f5 web/views/management.py --- a/web/views/management.py Thu Jun 04 20:21:40 2009 +0200 +++ b/web/views/management.py Fri Jun 05 10:40:54 2009 +0200 @@ -40,6 +40,8 @@ groups = [(_(group), group) for group in groups] for trad, group in sorted(groups): if link: + # XXX we should get a group entity and call its absolute_url + # method l.append(u'%s
    ' % ( self.build_url('cwgroup/%s' % group), group, trad)) else: @@ -242,7 +244,8 @@ submiturl = self.config['submit-url'] submitmail = self.config['submit-mail'] if submiturl or submitmail: - form = self.vreg.select_object('forms', 'base', self.req, rset=None, set_error_url=False) + form = self.vreg.select_object('forms', 'base', self.req, rset=None, + mainform=False) binfo = text_error_description(ex, excinfo, req, eversion, cversions) form.form_add_hidden('description', binfo) form.form_add_hidden('__bugreporting', '1')