backport stable branch
authorSylvain Thénault <sylvain.thenault@logilab.fr>
Fri, 09 Oct 2009 16:39:26 +0200
changeset 3629 559cad62c786
parent 3590 1b0dbcf4b214 (current diff)
parent 3628 440931181322 (diff)
child 3630 275feb5370c9
backport stable branch
__init__.py
__pkginfo__.py
cwctl.py
entities/test/unittest_wfobjs.py
entities/wfobjs.py
entity.py
etwist/server.py
hooks/workflow.py
req.py
rset.py
schemas/workflow.py
server/repository.py
web/component.py
web/uicfg.py
web/views/autoform.py
web/views/basecontrollers.py
web/views/editforms.py
web/views/formrenderers.py
web/views/treeview.py
web/views/urlrewrite.py
--- a/.hgtags	Wed Oct 07 12:38:30 2009 +0200
+++ b/.hgtags	Fri Oct 09 16:39:26 2009 +0200
@@ -76,3 +76,7 @@
 f476cecd46904f215bd29249ded8508d8f5634d7 cubicweb-debian-version-3.5.1-1
 1f0aa3cd5af2c92df8f9695773b8e465eb6f1795 cubicweb-version-3.5.2
 75cc4aa76fb12c06d4190956aa050cdf19ba4d8f cubicweb-debian-version-3.5.2-1
+540210e138d323e5224d7b08cbd71f5a23ed630d cubicweb-version-3.5.3
+2e22b975f9c23aebfe3e0a16a798c3fe81fa2a82 cubicweb-debian-version-3.5.3-1
+312349b3712e0a3e32247e03fdc7408e17bd19de cubicweb-version-3.5.4
+37d025b2aa7735dae4a861059014c560b45b19e6 cubicweb-debian-version-3.5.4-1
--- a/__init__.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/__init__.py	Fri Oct 09 16:39:26 2009 +0200
@@ -55,7 +55,7 @@
                "Binary objects must use raw strings, not %s" % data.__class__
         StringIO.write(self, data)
 
-# use this dictionary for renaming of entity types while keeping bw compath
+# use this dictionary for renaming of entity types while keeping bw compat
 ETYPE_NAME_MAP = {# 3.2 migration
                   'ECache': 'CWCache',
                   'EUser': 'CWUser',
--- a/__pkginfo__.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/__pkginfo__.py	Fri Oct 09 16:39:26 2009 +0200
@@ -7,7 +7,7 @@
 distname = "cubicweb"
 modname = "cubicweb"
 
-numversion = (3, 5, 2)
+numversion = (3, 5, 4)
 version = '.'.join(str(num) for num in numversion)
 
 license = 'LGPL v2'
--- a/cwctl.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/cwctl.py	Fri Oct 09 16:39:26 2009 +0200
@@ -71,7 +71,10 @@
     def ordered_instances(self):
         """return instances in the order in which they should be started,
         considering $REGISTRY_DIR/startorder file if it exists (useful when
-        some instances depends on another as external source
+        some instances depends on another as external source).
+
+        Instance used by another one should appears first in the file (one
+        instance per line)
         """
         regdir = cwcfg.registry_dir()
         _allinstances = list_instances(regdir)
--- a/debian/changelog	Wed Oct 07 12:38:30 2009 +0200
+++ b/debian/changelog	Fri Oct 09 16:39:26 2009 +0200
@@ -1,3 +1,15 @@
+cubicweb (3.5.4-1) unstable; urgency=low
+
+  * new upstream release
+
+ -- Sylvain Thénault <sylvain.thenault@logilab.fr>  Wed, 07 Oct 2009 20:58:35 +0200
+
+cubicweb (3.5.3-1) unstable; urgency=low
+
+  * new upstream release
+
+ -- Sylvain Thénault <sylvain.thenault@logilab.fr>  Wed, 07 Oct 2009 15:35:10 +0200
+
 cubicweb (3.5.2-1) unstable; urgency=low
 
   * new upstream release
--- a/entities/test/unittest_wfobjs.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/entities/test/unittest_wfobjs.py	Fri Oct 09 16:39:26 2009 +0200
@@ -158,7 +158,7 @@
                      'WHERE T name "deactivate"')
         self._test_stduser_deactivate()
 
-    def test_subworkflow_base(self):
+    def test_swf_base(self):
         """subworkflow
 
         +-----------+  tr1   +-----------+
@@ -239,7 +239,7 @@
                                ('swfstate3', 'state3', 'swftr1', 'exiting from subworkflow subworkflow'),
                                ])
 
-    def test_subworkflow_exit_consistency(self):
+    def test_swf_exit_consistency(self):
         # sub-workflow
         swf = add_wf(self, 'CWGroup', name='subworkflow')
         swfstate1 = swf.add_state(u'swfstate1', initial=True)
@@ -255,6 +255,68 @@
         ex = self.assertRaises(ValidationError, self.commit)
         self.assertEquals(ex.errors, {'subworkflow_exit': u"can't have multiple exits on the same state"})
 
+    def test_swf_fire_in_a_row(self):
+        # sub-workflow
+        subwf = add_wf(self, 'CWGroup', name='subworkflow')
+        xsigning = subwf.add_state('xsigning', initial=True)
+        xaborted = subwf.add_state('xaborted')
+        xsigned = subwf.add_state('xsigned')
+        xabort = subwf.add_transition('xabort', (xsigning,), xaborted)
+        xsign = subwf.add_transition('xsign', (xsigning,), xsigning)
+        xcomplete = subwf.add_transition('xcomplete', (xsigning,), xsigned,
+                                         type=u'auto')
+        # main workflow
+        twf = add_wf(self, 'CWGroup', name='mainwf', default=True)
+        created    = twf.add_state(_('created'), initial=True)
+        identified = twf.add_state(_('identified'))
+        released   = twf.add_state(_('released'))
+        closed   = twf.add_state(_('closed'))
+        twf.add_wftransition(_('identify'), subwf, (created,),
+                             [(xsigned, identified), (xaborted, created)])
+        twf.add_wftransition(_('release'), subwf, (identified,),
+                             [(xsigned, released), (xaborted, identified)])
+        twf.add_wftransition(_('close'), subwf, (released,),
+                             [(xsigned, closed), (xaborted, released)])
+        self.commit()
+        group = self.add_entity('CWGroup', name=u'grp1')
+        self.commit()
+        for trans in ('identify', 'release', 'close'):
+            group.fire_transition(trans)
+            self.commit()
+
+
+    def test_swf_magic_tr(self):
+        # sub-workflow
+        subwf = add_wf(self, 'CWGroup', name='subworkflow')
+        xsigning = subwf.add_state('xsigning', initial=True)
+        xaborted = subwf.add_state('xaborted')
+        xsigned = subwf.add_state('xsigned')
+        xabort = subwf.add_transition('xabort', (xsigning,), xaborted)
+        xsign = subwf.add_transition('xsign', (xsigning,), xsigned)
+        # main workflow
+        twf = add_wf(self, 'CWGroup', name='mainwf', default=True)
+        created    = twf.add_state(_('created'), initial=True)
+        identified = twf.add_state(_('identified'))
+        released   = twf.add_state(_('released'))
+        twf.add_wftransition(_('identify'), subwf, created,
+                             [(xaborted, None), (xsigned, identified)])
+        twf.add_wftransition(_('release'), subwf, identified,
+                             [(xaborted, None)])
+        self.commit()
+        group = self.add_entity('CWGroup', name=u'grp1')
+        self.commit()
+        for trans, nextstate in (('identify', 'xsigning'),
+                                 ('xabort', 'created'),
+                                 ('identify', 'xsigning'),
+                                 ('xsign', 'identified'),
+                                 ('release', 'xsigning'),
+                                 ('xabort', 'identified')
+                                 ):
+            group.fire_transition(trans)
+            self.commit()
+            group.clear_all_caches()
+            self.assertEquals(group.state, nextstate)
+
 
 class CustomWorkflowTC(CubicWebTC):
 
--- a/entities/wfobjs.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/entities/wfobjs.py	Fri Oct 09 16:39:26 2009 +0200
@@ -124,27 +124,28 @@
         tr.set_transition_permissions(requiredgroups, conditions, reset=False)
         return tr
 
-    def add_transition(self, name, fromstates, tostate,
+    def add_transition(self, name, fromstates, tostate=None,
                        requiredgroups=(), conditions=(), **kwargs):
         """add a transition to this workflow from some state(s) to another"""
         tr = self._add_transition('Transition', name, fromstates,
                                   requiredgroups, conditions, **kwargs)
-        if hasattr(tostate, 'eid'):
-            tostate = tostate.eid
-        self._cw.execute('SET T destination_state S '
-                         'WHERE S eid %(s)s, T eid %(t)s',
-                         {'t': tr.eid, 's': tostate}, ('s', 't'))
+        if tostate is not None:
+            if hasattr(tostate, 'eid'):
+                tostate = tostate.eid
+            self._cw.execute('SET T destination_state S '
+                             'WHERE S eid %(s)s, T eid %(t)s',
+                             {'t': tr.eid, 's': tostate}, ('s', 't'))
         return tr
 
-    def add_wftransition(self, name, subworkflow, fromstates, exitpoints,
+    def add_wftransition(self, name, subworkflow, fromstates, exitpoints=(),
                          requiredgroups=(), conditions=(), **kwargs):
         """add a workflow transition to this workflow"""
         tr = self._add_transition('WorkflowTransition', name, fromstates,
                                   requiredgroups, conditions, **kwargs)
         if hasattr(subworkflow, 'eid'):
             subworkflow = subworkflow.eid
-        self._cw.execute('SET T subworkflow WF WHERE WF eid %(wf)s,T eid %(t)s',
-                         {'t': tr.eid, 'wf': subworkflow}, ('wf', 't'))
+        assert _cw.req.execute('SET T subworkflow WF WHERE WF eid %(wf)s,T eid %(t)s',
+                               {'t': tr.eid, 'wf': subworkflow}, ('wf', 't'))
         for fromstate, tostate in exitpoints:
             tr.add_exit_point(fromstate, tostate)
         return tr
@@ -258,28 +259,37 @@
     def add_exit_point(self, fromstate, tostate):
         if hasattr(fromstate, 'eid'):
             fromstate = fromstate.eid
-        if hasattr(tostate, 'eid'):
-            tostate = tostate.eid
-        self._cw.execute('INSERT SubWorkflowExitPoint X: T subworkflow_exit X, '
-                         'X subworkflow_state FS, X destination_state TS '
-                         'WHERE T eid %(t)s, FS eid %(fs)s, TS eid %(ts)s',
-                         {'t': self.eid, 'fs': fromstate, 'ts': tostate},
-                         ('t', 'fs', 'ts'))
+        if tostate is None:
+            self._cw.execute('INSERT SubWorkflowExitPoint X: T subworkflow_exit X, '
+                             'X subworkflow_state FS WHERE T eid %(t)s, FS eid %(fs)s',
+                             {'t': self.eid, 'fs': fromstate}, ('t', 'fs'))
+        else:
+            if hasattr(tostate, 'eid'):
+                tostate = tostate.eid
+            self._cw.execute('INSERT SubWorkflowExitPoint X: T subworkflow_exit X, '
+                             'X subworkflow_state FS, X destination_state TS '
+                             'WHERE T eid %(t)s, FS eid %(fs)s, TS eid %(ts)s',
+                             {'t': self.eid, 'fs': fromstate, 'ts': tostate},
+                             ('t', 'fs', 'ts'))
 
-    def get_exit_point(self, state):
+    def get_exit_point(self, entity, stateeid):
         """if state is an exit point, return its associated destination state"""
-        if hasattr(state, 'eid'):
-            state = state.eid
-        stateeid = self.exit_points().get(state)
-        if stateeid is not None:
-            return self._cw.entity_from_eid(stateeid)
-        return None
+        if hasattr(stateeid, 'eid'):
+            stateeid = stateeid.eid
+        try:
+            tostateeid = self.exit_points()[stateeid]
+        except KeyError:
+            return None
+        if tostateeid is None:
+            # go back to state from which we've entered the subworkflow
+            return entity.subworkflow_input_trinfo().previous_state
+        return self._cw.entity_from_eid(tostateeid)
 
     @cached
     def exit_points(self):
         result = {}
         for ep in self.subworkflow_exit:
-            result[ep.subwf_state.eid] = ep.destination.eid
+            result[ep.subwf_state.eid] = ep.destination and ep.destination.eid
         return result
 
     def clear_all_caches(self):
@@ -297,7 +307,7 @@
 
     @property
     def destination(self):
-        return self.destination_state[0]
+        return self.destination_state and self.destination_state[0] or None
 
 
 class State(AnyEntity):
@@ -458,11 +468,10 @@
         """
         assert self.current_workflow
         if isinstance(tr, basestring):
-            tr = self.current_workflow.transition_by_name(tr)
-        tr = self.current_workflow.transition_by_name(trname)
-        if tr is None:
-            raise WorkflowException('not a %s transition: %s' % (self.__regid__,
-                                                                 trname))
+            _tr = self.current_workflow.transition_by_name(tr)
+            assert _tr is not None, 'not a %s transition: %s' % (
+                self.__regid__, tr)
+            tr = _tr
         return self._add_trinfo(comment, commentformat, tr.eid)
 
     def change_state(self, statename, comment=None, commentformat=None, tr=None):
@@ -487,18 +496,20 @@
         # XXX try to find matching transition?
         return self._add_trinfo(comment, commentformat, tr and tr.eid, stateeid)
 
-    def subworkflow_input_transition(self):
-        """return the transition which has went through the current sub-workflow
+    def subworkflow_input_trinfo(self):
+        """return the TrInfo which has be recorded when this entity went into
+        the current sub-workflow
         """
         if self.main_workflow.eid == self.current_workflow.eid:
             return # doesn't make sense
         subwfentries = []
-        for trinfo in reversed(self.workflow_history):
+        for trinfo in self.workflow_history:
             if (trinfo.transition and
                 trinfo.previous_state.workflow.eid != trinfo.new_state.workflow.eid):
                 # entering or leaving a subworkflow
                 if (subwfentries and
-                    subwfentries[-1].new_state.workflow.eid == trinfo.previous_state.workflow.eid):
+                    subwfentries[-1].new_state.workflow.eid == trinfo.previous_state.workflow.eid and
+                    subwfentries[-1].previous_state.workflow.eid == trinfo.new_state.workflow.eid):
                     # leave
                     del subwfentries[-1]
                 else:
@@ -506,7 +517,12 @@
                     subwfentries.append(trinfo)
         if not subwfentries:
             return None
-        return subwfentries[-1].transition
+        return subwfentries[-1]
+
+    def subworkflow_input_transition(self):
+        """return the transition which has went through the current sub-workflow
+        """
+        return getattr(self.subworkflow_input_trinfo(), 'transition', None)
 
     def clear_all_caches(self):
         super(WorkflowableMixIn, self).clear_all_caches()
--- a/entity.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/entity.py	Fri Oct 09 16:39:26 2009 +0200
@@ -61,7 +61,7 @@
     :cvar skip_copy_for: a list of relations that should be skipped when copying
                          this kind of entity. Note that some relations such
                          as composite relations or relations that have '?1' as object
-                         cardinality
+                         cardinality are always skipped. 
     """
     __registry__ = 'etypes'
     __select__ = yes()
@@ -373,7 +373,9 @@
     # entity cloning ##########################################################
 
     def copy_relations(self, ceid):
-        """copy relations of the object with the given eid on this object
+        """copy relations of the object with the given eid on this
+        object (this method is called on the newly created copy, and
+        ceid designates the original entity).
 
         By default meta and composite relations are skipped.
         Overrides this if you want another behaviour
--- a/etwist/server.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/etwist/server.py	Fri Oct 09 16:39:26 2009 +0200
@@ -35,10 +35,10 @@
     # (start-repository command)
     # See http://www.erlenstar.demon.co.uk/unix/faq_toc.html#TOC16
     if os.fork():   # launch child and...
-        os._exit(0)
+        return 1
     os.setsid()
-    if os.fork():   # launch child and...
-        os._exit(0) # kill off parent again.
+    if os.fork():   # launch child again.
+        return 1
     # move to the root to avoit mount pb
     os.chdir('/')
     # set paranoid umask
@@ -97,14 +97,17 @@
     addSlash = False
 
     def __init__(self, config, debug=None):
-        self.appli = CubicWebPublisher(config, debug=debug)
         self.debugmode = debug
         self.config = config
         self.base_url = config['base-url'] or config.default_base_url()
-        self.versioned_datadir = 'data%s' % config.instance_md5_version()
         assert self.base_url[-1] == '/'
         self.https_url = config['https-url']
         assert not self.https_url or self.https_url[-1] == '/'
+
+    def init_publisher(self):
+        config = self.config
+        self.appli = CubicWebPublisher(config, debug=self.debugmode)
+        self.versioned_datadir = 'data%s' % config.instance_md5_version()
         # when we have an in-memory repository, clean unused sessions every XX
         # seconds and properly shutdown the server
         if config.repo_method == 'inmemory':
@@ -122,6 +125,9 @@
             self.appli.repo.start_looping_tasks()
         self.set_url_rewriter()
         CW_EVENT_MANAGER.bind('after-registry-reload', self.set_url_rewriter)
+
+    def start_service(self):
+        config = self.config
         interval = min(config['cleanup-session-time'] or 120,
                        config['cleanup-anonymous-session-time'] or 720) / 2.
         start_task(interval, self.appli.session_handler.clean_sessions)
@@ -375,12 +381,12 @@
     # serve it via standard HTTP on port set in the configuration
     port = config['port'] or 8080
     reactor.listenTCP(port, channel.HTTPFactory(website))
-    baseurl = config['base-url'] or config.default_base_url()
     logger = getLogger('cubicweb.twisted')
-    logger.info('instance started on %s', baseurl)
+    logger.info('instance started on %s', root_resource.base_url)
     if not debug:
         print 'instance starting in the background'
-        daemonize()
+        if daemonize():
+            return # child process
         if config['pid-file']:
             # ensure the directory where the pid-file should be set exists (for
             # instance /var/run/cubicweb may be deleted on computer restart) 
@@ -388,6 +394,7 @@
             if not os.path.exists(piddir):
                 os.makedirs(piddir)
             file(config['pid-file'], 'w').write(str(os.getpid()))
+    root_resource.init_publisher() # before changing uid
     if config['uid'] is not None:
         try:
             uid = int(config['uid'])
@@ -395,6 +402,7 @@
             from pwd import getpwnam
             uid = getpwnam(config['uid']).pw_uid
         os.setuid(uid)
+    root_resource.start_service()
     if config['profile']:
         prof = hotshot.Profile(config['profile'])
         prof.runcall(reactor.run)
--- a/hooks/workflow.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/hooks/workflow.py	Fri Oct 09 16:39:26 2009 +0200
@@ -242,7 +242,7 @@
                 # inconsistency detected
                 msg = session._("state doesn't belong to entity's current workflow")
                 raise ValidationError(entity.eid, {'to_state': msg})
-            tostate = wftr.get_exit_point(entity['to_state'])
+            tostate = wftr.get_exit_point(forentity, entity['to_state'])
             if tostate is not None:
                 # reached an exit point
                 msg = session._('exiting from subworkflow %s')
--- a/i18n/en.po	Wed Oct 07 12:38:30 2009 +0200
+++ b/i18n/en.po	Fri Oct 09 16:39:26 2009 +0200
@@ -31,6 +31,14 @@
 msgstr ""
 
 #, python-format
+msgid "%(attr)s set to %(newvalue)s"
+msgstr ""
+
+#, python-format
+msgid "%(attr)s updated from %(oldvalue)s to %(newvalue)s"
+msgstr ""
+
+#, python-format
 msgid "%(cstr)s constraint failed for value %(value)r"
 msgstr ""
 
@@ -118,6 +126,10 @@
 msgid "%s software version of the database"
 msgstr ""
 
+#, python-format
+msgid "%s updated"
+msgstr ""
+
 msgid "(UNEXISTANT EID)"
 msgstr ""
 
@@ -533,13 +545,13 @@
 msgid "This CWConstraintType"
 msgstr "This constraint type"
 
+msgid "This CWEType"
+msgstr "This entity type"
+
 msgctxt "inlined:CWRelation.from_entity.subject"
 msgid "This CWEType"
 msgstr ""
 
-msgid "This CWEType"
-msgstr "This entity type"
-
 msgctxt "inlined:CWRelation.to_entity.subject"
 msgid "This CWEType"
 msgstr ""
@@ -709,6 +721,12 @@
 msgid "actions"
 msgstr ""
 
+msgid "actions_about"
+msgstr ""
+
+msgid "actions_about_description"
+msgstr ""
+
 msgid "actions_addentity"
 msgstr "add an entity of this type"
 
@@ -727,6 +745,12 @@
 msgid "actions_cancel_description"
 msgstr ""
 
+msgid "actions_changelog"
+msgstr ""
+
+msgid "actions_changelog_description"
+msgstr ""
+
 msgid "actions_copy"
 msgstr "copy"
 
@@ -799,6 +823,12 @@
 msgid "actions_myprefs_description"
 msgstr ""
 
+msgid "actions_poweredby"
+msgstr ""
+
+msgid "actions_poweredby_description"
+msgstr ""
+
 msgid "actions_prefs"
 msgstr "preferences"
 
@@ -856,6 +886,9 @@
 msgid "add"
 msgstr ""
 
+msgid "add BaseTransition transition_of Workflow object"
+msgstr ""
+
 msgid "add Bookmark bookmarked_by CWUser object"
 msgstr "bookmark"
 
@@ -934,11 +967,11 @@
 msgid "add WorkflowTransition transition_of Workflow object"
 msgstr "workflow-transition"
 
-msgctxt "inlined:CWRelation.to_entity.subject"
+msgctxt "inlined:CWRelation.from_entity.subject"
 msgid "add a CWEType"
 msgstr "add an entity type"
 
-msgctxt "inlined:CWRelation.from_entity.subject"
+msgctxt "inlined:CWRelation.to_entity.subject"
 msgid "add a CWEType"
 msgstr "add an entity type"
 
@@ -974,6 +1007,10 @@
 msgid "add_permission"
 msgstr "add permission"
 
+msgctxt "CWGroup"
+msgid "add_permission_object"
+msgstr "can add"
+
 msgctxt "RQLExpression"
 msgid "add_permission_object"
 msgstr "used to define add permission on"
@@ -981,10 +1018,6 @@
 msgid "add_permission_object"
 msgstr "has permission to add"
 
-msgctxt "CWGroup"
-msgid "add_permission_object"
-msgstr "can add"
-
 #, python-format
 msgid "added %(etype)s #%(eid)s (%(title)s)"
 msgstr ""
@@ -996,7 +1029,7 @@
 msgstr ""
 
 msgid "addrelated"
-msgstr ""
+msgstr "add"
 
 msgid "address"
 msgstr ""
@@ -1005,13 +1038,13 @@
 msgid "address"
 msgstr "address"
 
+msgid "alias"
+msgstr ""
+
 msgctxt "EmailAddress"
 msgid "alias"
 msgstr "alias"
 
-msgid "alias"
-msgstr ""
-
 msgid "allow to set a specific workflow for an entity"
 msgstr ""
 
@@ -1028,6 +1061,11 @@
 msgid "allowed_transition"
 msgstr "allowed transition"
 
+msgctxt "BaseTransition"
+msgid "allowed_transition_object"
+msgstr "incoming states"
+
+msgctxt "Transition"
 msgid "allowed_transition_object"
 msgstr "incoming states"
 
@@ -1035,11 +1073,6 @@
 msgid "allowed_transition_object"
 msgstr "incoming states"
 
-msgctxt "Transition"
-msgid "allowed_transition_object"
-msgstr "incoming states"
-
-msgctxt "BaseTransition"
 msgid "allowed_transition_object"
 msgstr "incoming states"
 
@@ -1098,6 +1131,9 @@
 msgid "authentication failure"
 msgstr ""
 
+msgid "auto"
+msgstr "automatic"
+
 msgid "automatic"
 msgstr ""
 
@@ -1211,17 +1247,13 @@
 msgid "by relation"
 msgstr ""
 
+msgid "by_transition"
+msgstr "by transition"
+
 msgctxt "TrInfo"
 msgid "by_transition"
 msgstr "by transition"
 
-msgid "by_transition"
-msgstr "by transition"
-
-msgctxt "WorkflowTransition"
-msgid "by_transition_object"
-msgstr "transition information"
-
 msgctxt "BaseTransition"
 msgid "by_transition_object"
 msgstr "transition information"
@@ -1230,6 +1262,10 @@
 msgid "by_transition_object"
 msgstr "transition information"
 
+msgctxt "WorkflowTransition"
+msgid "by_transition_object"
+msgstr "transition information"
+
 msgid "by_transition_object"
 msgstr "transition information"
 
@@ -1278,10 +1314,6 @@
 msgid "cancel this insert"
 msgstr ""
 
-msgctxt "CWRelation"
-msgid "cardinality"
-msgstr "cardinality"
-
 msgid "cardinality"
 msgstr "cardinality"
 
@@ -1289,6 +1321,10 @@
 msgid "cardinality"
 msgstr "cardinality"
 
+msgctxt "CWRelation"
+msgid "cardinality"
+msgstr "cardinality"
+
 msgid "category"
 msgstr ""
 
@@ -1389,7 +1425,10 @@
 msgid "composite"
 msgstr "composite"
 
-msgctxt "WorkflowTransition"
+msgid "condition"
+msgstr "condition"
+
+msgctxt "BaseTransition"
 msgid "condition"
 msgstr "condition"
 
@@ -1397,23 +1436,20 @@
 msgid "condition"
 msgstr "condition"
 
-msgid "condition"
-msgstr "condition"
-
-msgctxt "BaseTransition"
+msgctxt "WorkflowTransition"
 msgid "condition"
 msgstr "condition"
 
 msgid "condition:"
 msgstr "condtion:"
 
+msgctxt "RQLExpression"
+msgid "condition_object"
+msgstr ""
+
 msgid "condition_object"
 msgstr "condition of"
 
-msgctxt "RQLExpression"
-msgid "condition_object"
-msgstr ""
-
 msgid "confirm password"
 msgstr ""
 
@@ -1428,10 +1464,10 @@
 msgid "constrained_by"
 msgstr "constrained by"
 
+msgctxt "CWConstraint"
 msgid "constrained_by_object"
 msgstr "constraints"
 
-msgctxt "CWConstraint"
 msgid "constrained_by_object"
 msgstr "constraints"
 
@@ -1550,6 +1586,10 @@
 msgid "created_by_object"
 msgstr "has created"
 
+msgid ""
+"creating BaseTransition (BaseTransition transition_of Workflow %(linkto)s)"
+msgstr ""
+
 msgid "creating Bookmark (Bookmark bookmarked_by CWUser %(linkto)s)"
 msgstr "creating bookmark for %(linkto)s"
 
@@ -1654,20 +1694,20 @@
 msgid "creation_date"
 msgstr "creation date"
 
+msgid "cstrtype"
+msgstr "constraint's type"
+
 msgctxt "CWConstraint"
 msgid "cstrtype"
 msgstr "constraint type"
 
-msgid "cstrtype"
-msgstr "constraint's type"
-
-msgid "cstrtype_object"
-msgstr "used by"
-
 msgctxt "CWConstraintType"
 msgid "cstrtype_object"
 msgstr "constraint type of"
 
+msgid "cstrtype_object"
+msgstr "used by"
+
 msgid "csv entities export"
 msgstr ""
 
@@ -1726,17 +1766,17 @@
 msgid "default workflow for an entity type"
 msgstr ""
 
+msgid "default_workflow"
+msgstr "default workflow"
+
 msgctxt "CWEType"
 msgid "default_workflow"
 msgstr "default workflow"
 
-msgid "default_workflow"
-msgstr "default workflow"
-
+msgctxt "Workflow"
 msgid "default_workflow_object"
 msgstr "default workflow of"
 
-msgctxt "Workflow"
 msgid "default_workflow_object"
 msgstr "default workflow of"
 
@@ -1804,14 +1844,15 @@
 msgid "delete_permission"
 msgstr "can be deleted by"
 
+msgctxt "CWEType"
+msgid "delete_permission"
+msgstr "delete permission"
+
 msgctxt "CWRType"
 msgid "delete_permission"
 msgstr "delete permission"
 
-msgctxt "CWEType"
-msgid "delete_permission"
-msgstr "delete permission"
-
+msgctxt "CWGroup"
 msgid "delete_permission_object"
 msgstr "has permission to delete"
 
@@ -1819,7 +1860,6 @@
 msgid "delete_permission_object"
 msgstr "has permission to delete"
 
-msgctxt "CWGroup"
 msgid "delete_permission_object"
 msgstr "has permission to delete"
 
@@ -1839,7 +1879,11 @@
 msgid "description"
 msgstr ""
 
-msgctxt "Transition"
+msgctxt "CWEType"
+msgid "description"
+msgstr "description"
+
+msgctxt "CWRelation"
 msgid "description"
 msgstr "description"
 
@@ -1847,7 +1891,11 @@
 msgid "description"
 msgstr "description"
 
-msgctxt "CWRelation"
+msgctxt "CWAttribute"
+msgid "description"
+msgstr "description"
+
+msgctxt "Transition"
 msgid "description"
 msgstr "description"
 
@@ -1859,10 +1907,6 @@
 msgid "description"
 msgstr "description"
 
-msgctxt "CWEType"
-msgid "description"
-msgstr "description"
-
 msgctxt "CWRType"
 msgid "description"
 msgstr "description"
@@ -1871,14 +1915,6 @@
 msgid "description"
 msgstr "description"
 
-msgctxt "CWAttribute"
-msgid "description"
-msgstr "description"
-
-msgctxt "CWRelation"
-msgid "description_format"
-msgstr "format"
-
 msgid "description_format"
 msgstr "format"
 
@@ -1886,6 +1922,10 @@
 msgid "description_format"
 msgstr "format"
 
+msgctxt "CWRelation"
+msgid "description_format"
+msgstr "format"
+
 msgctxt "Workflow"
 msgid "description_format"
 msgstr "format"
@@ -1926,14 +1966,14 @@
 msgid "destination_state"
 msgstr "destination state"
 
+msgctxt "Transition"
+msgid "destination_state"
+msgstr ""
+
 msgctxt "SubWorkflowExitPoint"
 msgid "destination_state"
 msgstr "destination state"
 
-msgctxt "Transition"
-msgid "destination_state"
-msgstr ""
-
 msgctxt "State"
 msgid "destination_state_object"
 msgstr "destination of"
@@ -2091,13 +2131,13 @@
 msgid "expected:"
 msgstr ""
 
+msgid "expression"
+msgstr ""
+
 msgctxt "RQLExpression"
 msgid "expression"
 msgstr ""
 
-msgid "expression"
-msgstr ""
-
 msgid "exprtype"
 msgstr "expression's type"
 
@@ -2153,37 +2193,37 @@
 msgid "file tree view"
 msgstr ""
 
+msgid "final"
+msgstr ""
+
 msgctxt "CWEType"
 msgid "final"
 msgstr ""
 
-msgid "final"
-msgstr ""
-
 msgctxt "CWRType"
 msgid "final"
 msgstr ""
 
+msgid "firstname"
+msgstr ""
+
 msgctxt "CWUser"
 msgid "firstname"
 msgstr ""
 
-msgid "firstname"
-msgstr ""
-
 msgid "foaf"
 msgstr ""
 
 msgid "follow"
 msgstr ""
 
+msgid "for_user"
+msgstr "for user"
+
 msgctxt "CWProperty"
 msgid "for_user"
 msgstr ""
 
-msgid "for_user"
-msgstr "for user"
-
 msgctxt "CWUser"
 msgid "for_user_object"
 msgstr ""
@@ -2239,20 +2279,20 @@
 msgid "full text or RQL query"
 msgstr ""
 
+msgid "fulltext_container"
+msgstr "fulltext container"
+
 msgctxt "CWRType"
 msgid "fulltext_container"
 msgstr "fulltext container"
 
-msgid "fulltext_container"
-msgstr "fulltext container"
+msgid "fulltextindexed"
+msgstr "fulltext indexed"
 
 msgctxt "CWAttribute"
 msgid "fulltextindexed"
 msgstr ""
 
-msgid "fulltextindexed"
-msgstr "fulltext indexed"
-
 msgid "generic plot"
 msgstr ""
 
@@ -2389,10 +2429,10 @@
 msgid "in memory relation schema"
 msgstr ""
 
-msgctxt "CWUser"
 msgid "in_group"
 msgstr "in group"
 
+msgctxt "CWUser"
 msgid "in_group"
 msgstr "in group"
 
@@ -2447,10 +2487,10 @@
 msgid "initial state for this workflow"
 msgstr ""
 
-msgctxt "Workflow"
 msgid "initial_state"
 msgstr "initial state"
 
+msgctxt "Workflow"
 msgid "initial_state"
 msgstr "initial state"
 
@@ -2626,10 +2666,10 @@
 msgid "main informations"
 msgstr ""
 
-msgctxt "RQLExpression"
 msgid "mainvars"
 msgstr "main vars"
 
+msgctxt "RQLExpression"
 msgid "mainvars"
 msgstr "main vars"
 
@@ -2694,38 +2734,6 @@
 msgid "my custom search"
 msgstr ""
 
-msgctxt "CWPermission"
-msgid "name"
-msgstr "name"
-
-msgctxt "State"
-msgid "name"
-msgstr "name"
-
-msgctxt "BaseTransition"
-msgid "name"
-msgstr ""
-
-msgctxt "CWRType"
-msgid "name"
-msgstr ""
-
-msgctxt "CWGroup"
-msgid "name"
-msgstr ""
-
-msgctxt "WorkflowTransition"
-msgid "name"
-msgstr ""
-
-msgctxt "CWCache"
-msgid "name"
-msgstr ""
-
-msgid "name"
-msgstr ""
-
-msgctxt "CWConstraintType"
 msgid "name"
 msgstr ""
 
@@ -2741,6 +2749,38 @@
 msgid "name"
 msgstr ""
 
+msgctxt "CWGroup"
+msgid "name"
+msgstr ""
+
+msgctxt "CWConstraintType"
+msgid "name"
+msgstr ""
+
+msgctxt "WorkflowTransition"
+msgid "name"
+msgstr ""
+
+msgctxt "State"
+msgid "name"
+msgstr "name"
+
+msgctxt "CWPermission"
+msgid "name"
+msgstr "name"
+
+msgctxt "CWRType"
+msgid "name"
+msgstr ""
+
+msgctxt "BaseTransition"
+msgid "name"
+msgstr ""
+
+msgctxt "CWCache"
+msgid "name"
+msgstr ""
+
 msgid "name of the cache"
 msgstr ""
 
@@ -2804,6 +2844,9 @@
 msgid "no version information"
 msgstr ""
 
+msgid "normal"
+msgstr ""
+
 msgid "not authorized"
 msgstr ""
 
@@ -2843,7 +2886,6 @@
 msgid "order"
 msgstr ""
 
-msgctxt "CWRelation"
 msgid "ordernum"
 msgstr "order"
 
@@ -2851,6 +2893,7 @@
 msgid "ordernum"
 msgstr "order"
 
+msgctxt "CWRelation"
 msgid "ordernum"
 msgstr "order"
 
@@ -2910,10 +2953,10 @@
 msgid "pick existing bookmarks"
 msgstr ""
 
-msgctxt "CWProperty"
 msgid "pkey"
 msgstr "key"
 
+msgctxt "CWProperty"
 msgid "pkey"
 msgstr "key"
 
@@ -2959,13 +3002,13 @@
 msgid "primary_email"
 msgstr "primary email"
 
+msgctxt "EmailAddress"
+msgid "primary_email_object"
+msgstr ""
+
 msgid "primary_email_object"
 msgstr "primary email of"
 
-msgctxt "EmailAddress"
-msgid "primary_email_object"
-msgstr ""
-
 msgid "progress"
 msgstr ""
 
@@ -2981,6 +3024,9 @@
 msgid "read_perm"
 msgstr "read perm"
 
+msgid "read_permission"
+msgstr "can be read by"
+
 msgctxt "CWEType"
 msgid "read_permission"
 msgstr "read permission"
@@ -2989,12 +3035,6 @@
 msgid "read_permission"
 msgstr "read permission"
 
-msgid "read_permission"
-msgstr "can be read by"
-
-msgid "read_permission_object"
-msgstr "has permission to delete"
-
 msgctxt "CWGroup"
 msgid "read_permission_object"
 msgstr ""
@@ -3003,6 +3043,9 @@
 msgid "read_permission_object"
 msgstr ""
 
+msgid "read_permission_object"
+msgstr "has permission to delete"
+
 msgid "registry"
 msgstr ""
 
@@ -3027,13 +3070,13 @@
 msgid "relation_type"
 msgstr "relation type"
 
+msgctxt "CWRType"
+msgid "relation_type_object"
+msgstr ""
+
 msgid "relation_type_object"
 msgstr "relation definitions"
 
-msgctxt "CWRType"
-msgid "relation_type_object"
-msgstr ""
-
 msgid "relations"
 msgstr ""
 
@@ -3059,10 +3102,6 @@
 msgid "remove this EmailAddress"
 msgstr ""
 
-msgctxt "WorkflowTransition"
-msgid "require_group"
-msgstr "require group"
-
 msgid "require_group"
 msgstr "require the group"
 
@@ -3078,6 +3117,10 @@
 msgid "require_group"
 msgstr "require group"
 
+msgctxt "WorkflowTransition"
+msgid "require_group"
+msgstr "require group"
+
 msgctxt "CWGroup"
 msgid "require_group_object"
 msgstr ""
@@ -3271,13 +3314,13 @@
 msgid "specializes"
 msgstr ""
 
+msgctxt "CWEType"
+msgid "specializes_object"
+msgstr ""
+
 msgid "specializes_object"
 msgstr "specialized by"
 
-msgctxt "CWEType"
-msgid "specializes_object"
-msgstr ""
-
 msgid "startup views"
 msgstr ""
 
@@ -3295,13 +3338,13 @@
 "workflow for this entity first."
 msgstr ""
 
+msgid "state_of"
+msgstr "state of"
+
 msgctxt "State"
 msgid "state_of"
 msgstr ""
 
-msgid "state_of"
-msgstr "state of"
-
 msgctxt "Workflow"
 msgid "state_of_object"
 msgstr ""
@@ -3359,10 +3402,10 @@
 msgid "subworkflow_object"
 msgstr "subworkflow of"
 
-msgctxt "SubWorkflowExitPoint"
 msgid "subworkflow_state"
 msgstr "subworkflow state"
 
+msgctxt "SubWorkflowExitPoint"
 msgid "subworkflow_state"
 msgstr "subworkflow state"
 
@@ -3472,7 +3515,6 @@
 msgid "to associate with"
 msgstr ""
 
-msgctxt "CWRelation"
 msgid "to_entity"
 msgstr "to entity"
 
@@ -3480,6 +3522,7 @@
 msgid "to_entity"
 msgstr "to entity"
 
+msgctxt "CWRelation"
 msgid "to_entity"
 msgstr "to entity"
 
@@ -3493,20 +3536,20 @@
 msgid "to_interval_end"
 msgstr "to"
 
+msgid "to_state"
+msgstr "to state"
+
 msgctxt "TrInfo"
 msgid "to_state"
 msgstr ""
 
-msgid "to_state"
-msgstr "to state"
+msgctxt "State"
+msgid "to_state_object"
+msgstr ""
 
 msgid "to_state_object"
 msgstr "transitions to this state"
 
-msgctxt "State"
-msgid "to_state_object"
-msgstr ""
-
 msgid "todo_by"
 msgstr "to do by"
 
@@ -3522,6 +3565,9 @@
 msgid "transition may not be fired"
 msgstr ""
 
+msgid "transition_of"
+msgstr "transition of"
+
 msgctxt "BaseTransition"
 msgid "transition_of"
 msgstr "transition of"
@@ -3534,9 +3580,6 @@
 msgid "transition_of"
 msgstr ""
 
-msgid "transition_of"
-msgstr "transition of"
-
 msgctxt "Workflow"
 msgid "transition_of_object"
 msgstr ""
@@ -3553,6 +3596,18 @@
 msgid "type"
 msgstr ""
 
+msgctxt "BaseTransition"
+msgid "type"
+msgstr ""
+
+msgctxt "Transition"
+msgid "type"
+msgstr ""
+
+msgctxt "WorkflowTransition"
+msgid "type"
+msgstr ""
+
 msgid "type here a sparql query"
 msgstr ""
 
@@ -3610,13 +3665,13 @@
 msgid "up"
 msgstr ""
 
+msgid "upassword"
+msgstr "password"
+
 msgctxt "CWUser"
 msgid "upassword"
 msgstr ""
 
-msgid "upassword"
-msgstr "password"
-
 msgid "update"
 msgstr ""
 
@@ -3630,28 +3685,31 @@
 msgid "update_permission"
 msgstr ""
 
+msgctxt "CWGroup"
 msgid "update_permission_object"
-msgstr "has permission to update"
+msgstr ""
 
 msgctxt "RQLExpression"
 msgid "update_permission_object"
 msgstr ""
 
-msgctxt "CWGroup"
 msgid "update_permission_object"
+msgstr "has permission to update"
+
+msgid "updated"
 msgstr ""
 
 #, python-format
 msgid "updated %(etype)s #%(eid)s (%(title)s)"
 msgstr ""
 
+msgid "uri"
+msgstr ""
+
 msgctxt "ExternalUri"
 msgid "uri"
 msgstr ""
 
-msgid "uri"
-msgstr ""
-
 msgid "use template languages"
 msgstr ""
 
@@ -3660,13 +3718,13 @@
 "states in workflow's definitions."
 msgstr ""
 
+msgid "use_email"
+msgstr "use email"
+
 msgctxt "CWUser"
 msgid "use_email"
 msgstr ""
 
-msgid "use_email"
-msgstr "use email"
-
 msgctxt "EmailAddress"
 msgid "use_email_object"
 msgstr ""
@@ -3721,11 +3779,11 @@
 msgid "value"
 msgstr ""
 
-msgctxt "CWProperty"
+msgctxt "CWConstraint"
 msgid "value"
 msgstr ""
 
-msgctxt "CWConstraint"
+msgctxt "CWProperty"
 msgid "value"
 msgstr ""
 
@@ -3803,13 +3861,13 @@
 msgid "workflow to which this transition belongs"
 msgstr ""
 
+msgid "workflow_of"
+msgstr ""
+
 msgctxt "Workflow"
 msgid "workflow_of"
 msgstr ""
 
-msgid "workflow_of"
-msgstr ""
-
 msgctxt "CWEType"
 msgid "workflow_of_object"
 msgstr ""
--- a/i18n/es.po	Wed Oct 07 12:38:30 2009 +0200
+++ b/i18n/es.po	Fri Oct 09 16:39:26 2009 +0200
@@ -36,6 +36,14 @@
 msgstr "  del estado %(fromstate)s hacia el estado %(tostate)s\n"
 
 #, python-format
+msgid "%(attr)s set to %(newvalue)s"
+msgstr ""
+
+#, python-format
+msgid "%(attr)s updated from %(oldvalue)s to %(newvalue)s"
+msgstr ""
+
+#, python-format
 msgid "%(cstr)s constraint failed for value %(value)r"
 msgstr "el valor %(value)r no satisface la condición %(cstr)s"
 
@@ -123,6 +131,10 @@
 msgid "%s software version of the database"
 msgstr "versión sistema de la base para %s"
 
+#, python-format
+msgid "%s updated"
+msgstr ""
+
 msgid "(UNEXISTANT EID)"
 msgstr ""
 
@@ -541,10 +553,6 @@
 msgid "This CWConstraintType"
 msgstr "Este tipo de Restricción"
 
-msgctxt "inlined:CWRelation.to_entity.subject"
-msgid "This CWEType"
-msgstr ""
-
 msgid "This CWEType"
 msgstr "Este tipo de Entidad"
 
@@ -552,6 +560,10 @@
 msgid "This CWEType"
 msgstr ""
 
+msgctxt "inlined:CWRelation.to_entity.subject"
+msgid "This CWEType"
+msgstr ""
+
 msgid "This CWGroup"
 msgstr "Este grupo"
 
@@ -561,26 +573,26 @@
 msgid "This CWProperty"
 msgstr "Esta propiedad"
 
+msgid "This CWRType"
+msgstr "Este tipo de relación"
+
 msgctxt "inlined:CWRelation.relation_type.subject"
 msgid "This CWRType"
 msgstr ""
 
-msgid "This CWRType"
-msgstr "Este tipo de relación"
-
 msgid "This CWRelation"
 msgstr "Esta definición de relación no final"
 
 msgid "This CWUser"
 msgstr "Este usuario"
 
+msgctxt "inlined:CWUser.use_email.subject"
+msgid "This EmailAddress"
+msgstr ""
+
 msgid "This EmailAddress"
 msgstr "Esta dirección electrónica"
 
-msgctxt "inlined:CWUser.use_email.subject"
-msgid "This EmailAddress"
-msgstr ""
-
 msgid "This ExternalUri"
 msgstr ""
 
@@ -732,6 +744,12 @@
 msgid "actions"
 msgstr "acciones"
 
+msgid "actions_about"
+msgstr ""
+
+msgid "actions_about_description"
+msgstr ""
+
 msgid "actions_addentity"
 msgstr "agregar una entidad de este tipo"
 
@@ -750,6 +768,12 @@
 msgid "actions_cancel_description"
 msgstr ""
 
+msgid "actions_changelog"
+msgstr ""
+
+msgid "actions_changelog_description"
+msgstr ""
+
 msgid "actions_copy"
 msgstr "Copiar"
 
@@ -822,6 +846,12 @@
 msgid "actions_myprefs_description"
 msgstr ""
 
+msgid "actions_poweredby"
+msgstr ""
+
+msgid "actions_poweredby_description"
+msgstr ""
+
 msgid "actions_prefs"
 msgstr "Preferencias"
 
@@ -879,6 +909,9 @@
 msgid "add"
 msgstr "Agregar"
 
+msgid "add BaseTransition transition_of Workflow object"
+msgstr ""
+
 msgid "add Bookmark bookmarked_by CWUser object"
 msgstr "Agregar a los favoritos "
 
@@ -957,11 +990,11 @@
 msgid "add WorkflowTransition transition_of Workflow object"
 msgstr ""
 
-msgctxt "inlined:CWRelation.to_entity.subject"
+msgctxt "inlined:CWRelation.from_entity.subject"
 msgid "add a CWEType"
 msgstr ""
 
-msgctxt "inlined:CWRelation.from_entity.subject"
+msgctxt "inlined:CWRelation.to_entity.subject"
 msgid "add a CWEType"
 msgstr ""
 
@@ -984,14 +1017,14 @@
 
 # subject and object forms for each relation type
 # (no object form for final relation types)
-msgctxt "CWEType"
 msgid "add_permission"
-msgstr ""
+msgstr "Autorización para agregar"
 
 # subject and object forms for each relation type
 # (no object form for final relation types)
+msgctxt "CWEType"
 msgid "add_permission"
-msgstr "Autorización para agregar"
+msgstr ""
 
 msgctxt "CWRType"
 msgid "add_permission"
@@ -1001,13 +1034,13 @@
 msgid "add_permission_object"
 msgstr ""
 
+msgctxt "RQLExpression"
+msgid "add_permission_object"
+msgstr ""
+
 msgid "add_permission_object"
 msgstr "tiene la autorización para agregar"
 
-msgctxt "RQLExpression"
-msgid "add_permission_object"
-msgstr ""
-
 #, python-format
 msgid "added %(etype)s #%(eid)s (%(title)s)"
 msgstr "Agregado %(etype)s #%(eid)s (%(title)s)"
@@ -1023,20 +1056,20 @@
 msgid "addrelated"
 msgstr ""
 
-msgctxt "EmailAddress"
-msgid "address"
-msgstr ""
-
 msgid "address"
 msgstr "dirección"
 
 msgctxt "EmailAddress"
-msgid "alias"
+msgid "address"
 msgstr ""
 
 msgid "alias"
 msgstr "alias"
 
+msgctxt "EmailAddress"
+msgid "alias"
+msgstr ""
+
 msgid "allow to set a specific workflow for an entity"
 msgstr ""
 
@@ -1046,13 +1079,13 @@
 msgid "allowed transitions from this state"
 msgstr "transiciones autorizadas desde este estado"
 
+msgid "allowed_transition"
+msgstr "transición autorizada"
+
 msgctxt "State"
 msgid "allowed_transition"
 msgstr ""
 
-msgid "allowed_transition"
-msgstr "transición autorizada"
-
 msgctxt "BaseTransition"
 msgid "allowed_transition_object"
 msgstr ""
@@ -1125,6 +1158,9 @@
 msgid "authentication failure"
 msgstr "Usuario o contraseña incorrecta"
 
+msgid "auto"
+msgstr ""
+
 msgid "automatic"
 msgstr "Automático"
 
@@ -1239,14 +1275,14 @@
 msgid "by relation"
 msgstr "por relación"
 
+msgid "by_transition"
+msgstr ""
+
 msgctxt "TrInfo"
 msgid "by_transition"
 msgstr ""
 
-msgid "by_transition"
-msgstr ""
-
-msgctxt "WorkflowTransition"
+msgctxt "BaseTransition"
 msgid "by_transition_object"
 msgstr ""
 
@@ -1254,10 +1290,10 @@
 msgid "by_transition_object"
 msgstr ""
 
+msgctxt "WorkflowTransition"
 msgid "by_transition_object"
 msgstr ""
 
-msgctxt "BaseTransition"
 msgid "by_transition_object"
 msgstr ""
 
@@ -1308,16 +1344,16 @@
 msgid "cancel this insert"
 msgstr "Cancelar esta inserción"
 
-msgctxt "CWRelation"
 msgid "cardinality"
-msgstr ""
+msgstr "cardinalidad"
 
 msgctxt "CWAttribute"
 msgid "cardinality"
 msgstr ""
 
+msgctxt "CWRelation"
 msgid "cardinality"
-msgstr "cardinalidad"
+msgstr ""
 
 msgid "category"
 msgstr "categoria"
@@ -1345,13 +1381,13 @@
 msgid "comment"
 msgstr ""
 
+msgid "comment_format"
+msgstr "Formato"
+
 msgctxt "TrInfo"
 msgid "comment_format"
 msgstr ""
 
-msgid "comment_format"
-msgstr "Formato"
-
 msgid "components"
 msgstr "Componentes"
 
@@ -1415,13 +1451,13 @@
 msgid "components_rqlinput_description"
 msgstr "La barra de demanda rql, en el encabezado de página"
 
+msgid "composite"
+msgstr "composite"
+
 msgctxt "CWRelation"
 msgid "composite"
 msgstr ""
 
-msgid "composite"
-msgstr "composite"
-
 msgid "condition"
 msgstr "condición"
 
@@ -1450,6 +1486,9 @@
 msgid "confirm password"
 msgstr "Confirmar contraseña"
 
+msgid "constrained_by"
+msgstr "Restricción hecha por"
+
 msgctxt "CWAttribute"
 msgid "constrained_by"
 msgstr ""
@@ -1458,16 +1497,13 @@
 msgid "constrained_by"
 msgstr ""
 
-msgid "constrained_by"
-msgstr "Restricción hecha por"
+msgctxt "CWConstraint"
+msgid "constrained_by_object"
+msgstr ""
 
 msgid "constrained_by_object"
 msgstr "ha restringido"
 
-msgctxt "CWConstraint"
-msgid "constrained_by_object"
-msgstr ""
-
 msgid "constraint factory"
 msgstr "FAbrica de restricciones"
 
@@ -1599,6 +1635,10 @@
 msgid "created_by_object"
 msgstr "ha creado"
 
+msgid ""
+"creating BaseTransition (BaseTransition transition_of Workflow %(linkto)s)"
+msgstr ""
+
 msgid "creating Bookmark (Bookmark bookmarked_by CWUser %(linkto)s)"
 msgstr "Creando Favorito"
 
@@ -1718,13 +1758,13 @@
 msgid "cstrtype"
 msgstr ""
 
+msgctxt "CWConstraintType"
+msgid "cstrtype_object"
+msgstr ""
+
 msgid "cstrtype_object"
 msgstr "utilizado por"
 
-msgctxt "CWConstraintType"
-msgid "cstrtype_object"
-msgstr ""
-
 msgid "csv entities export"
 msgstr "Exportar entidades en csv"
 
@@ -1797,13 +1837,13 @@
 msgid "default_workflow_object"
 msgstr ""
 
+msgid "defaultval"
+msgstr "Valor por defecto"
+
 msgctxt "CWAttribute"
 msgid "defaultval"
 msgstr ""
 
-msgid "defaultval"
-msgstr "Valor por defecto"
-
 msgid "define a CubicWeb user"
 msgstr "Define un usuario CubicWeb"
 
@@ -1871,6 +1911,10 @@
 msgid "delete_permission"
 msgstr ""
 
+msgctxt "CWGroup"
+msgid "delete_permission_object"
+msgstr ""
+
 msgctxt "RQLExpression"
 msgid "delete_permission_object"
 msgstr ""
@@ -1878,10 +1922,6 @@
 msgid "delete_permission_object"
 msgstr "posee la autorización de eliminar"
 
-msgctxt "CWGroup"
-msgid "delete_permission_object"
-msgstr ""
-
 #, python-format
 msgid "deleted %(etype)s #%(eid)s (%(title)s)"
 msgstr "Eliminación de la entidad %(etype)s #%(eid)s (%(title)s)"
@@ -1897,15 +1937,18 @@
 msgid "depends on the constraint type"
 msgstr "Depende del tipo de condición"
 
-msgctxt "State"
+msgid "description"
+msgstr "Descripción"
+
+msgctxt "CWEType"
 msgid "description"
 msgstr ""
 
-msgctxt "WorkflowTransition"
+msgctxt "CWRelation"
 msgid "description"
 msgstr ""
 
-msgctxt "Transition"
+msgctxt "Workflow"
 msgid "description"
 msgstr ""
 
@@ -1913,21 +1956,18 @@
 msgid "description"
 msgstr ""
 
-msgctxt "Workflow"
+msgctxt "Transition"
 msgid "description"
 msgstr ""
 
-msgctxt "CWRelation"
+msgctxt "WorkflowTransition"
 msgid "description"
 msgstr ""
 
-msgctxt "CWEType"
+msgctxt "State"
 msgid "description"
 msgstr ""
 
-msgid "description"
-msgstr "Descripción"
-
 msgctxt "CWRType"
 msgid "description"
 msgstr ""
@@ -1936,19 +1976,22 @@
 msgid "description"
 msgstr ""
 
-msgctxt "BaseTransition"
 msgid "description_format"
-msgstr ""
-
-msgctxt "CWRType"
+msgstr "Formato"
+
+msgctxt "CWEType"
 msgid "description_format"
 msgstr ""
 
-msgctxt "State"
+msgctxt "CWRelation"
 msgid "description_format"
 msgstr ""
 
-msgctxt "WorkflowTransition"
+msgctxt "Workflow"
+msgid "description_format"
+msgstr ""
+
+msgctxt "CWAttribute"
 msgid "description_format"
 msgstr ""
 
@@ -1956,25 +1999,22 @@
 msgid "description_format"
 msgstr ""
 
-msgctxt "CWAttribute"
+msgctxt "WorkflowTransition"
 msgid "description_format"
 msgstr ""
 
-msgctxt "Workflow"
+msgctxt "State"
 msgid "description_format"
 msgstr ""
 
-msgctxt "CWRelation"
+msgctxt "CWRType"
 msgid "description_format"
 msgstr ""
 
-msgctxt "CWEType"
+msgctxt "BaseTransition"
 msgid "description_format"
 msgstr ""
 
-msgid "description_format"
-msgstr "Formato"
-
 msgid "destination state"
 msgstr ""
 
@@ -1984,24 +2024,24 @@
 msgid "destination state of a transition"
 msgstr "Estado destino de una transición"
 
+msgid "destination_state"
+msgstr "Estado destino"
+
 msgctxt "Transition"
 msgid "destination_state"
 msgstr ""
 
-msgid "destination_state"
-msgstr "Estado destino"
-
 msgctxt "SubWorkflowExitPoint"
 msgid "destination_state"
 msgstr ""
 
+msgctxt "State"
+msgid "destination_state_object"
+msgstr ""
+
 msgid "destination_state_object"
 msgstr "Destino de"
 
-msgctxt "State"
-msgid "destination_state_object"
-msgstr ""
-
 msgid "detach attached file"
 msgstr "soltar el archivo existente"
 
@@ -2159,13 +2199,13 @@
 msgid "expected:"
 msgstr "Previsto :"
 
+msgid "expression"
+msgstr "Expresión"
+
 msgctxt "RQLExpression"
 msgid "expression"
 msgstr ""
 
-msgid "expression"
-msgstr "Expresión"
-
 msgid "exprtype"
 msgstr "Tipo de la expresión"
 
@@ -2224,34 +2264,34 @@
 msgid "final"
 msgstr "Final"
 
+msgctxt "CWEType"
+msgid "final"
+msgstr ""
+
 msgctxt "CWRType"
 msgid "final"
 msgstr ""
 
-msgctxt "CWEType"
-msgid "final"
-msgstr ""
-
-msgctxt "CWUser"
-msgid "firstname"
-msgstr ""
-
 msgid "firstname"
 msgstr "Nombre"
 
+msgctxt "CWUser"
+msgid "firstname"
+msgstr ""
+
 msgid "foaf"
 msgstr "Amigo de un Amigo, FOAF"
 
 msgid "follow"
 msgstr "Seguir la liga"
 
+msgid "for_user"
+msgstr "Para el usuario"
+
 msgctxt "CWProperty"
 msgid "for_user"
 msgstr ""
 
-msgid "for_user"
-msgstr "Para el usuario"
-
 msgctxt "CWUser"
 msgid "for_user_object"
 msgstr ""
@@ -2280,23 +2320,23 @@
 msgid "from_entity"
 msgstr ""
 
-msgid "from_entity_object"
-msgstr "Relación sujeto"
-
 msgctxt "CWEType"
 msgid "from_entity_object"
 msgstr ""
 
+msgid "from_entity_object"
+msgstr "Relación sujeto"
+
 msgid "from_interval_start"
 msgstr ""
 
-msgctxt "TrInfo"
-msgid "from_state"
-msgstr ""
-
 msgid "from_state"
 msgstr "De el estado"
 
+msgctxt "TrInfo"
+msgid "from_state"
+msgstr ""
+
 msgctxt "State"
 msgid "from_state_object"
 msgstr ""
@@ -2307,20 +2347,20 @@
 msgid "full text or RQL query"
 msgstr "Texto de búsqueda o demanda RQL"
 
+msgid "fulltext_container"
+msgstr "Contenedor de texto indexado"
+
 msgctxt "CWRType"
 msgid "fulltext_container"
 msgstr ""
 
-msgid "fulltext_container"
-msgstr "Contenedor de texto indexado"
-
-msgctxt "CWAttribute"
-msgid "fulltextindexed"
-msgstr ""
-
 msgid "fulltextindexed"
 msgstr "Indexación de texto"
 
+msgctxt "CWAttribute"
+msgid "fulltextindexed"
+msgstr ""
+
 msgid "generic plot"
 msgstr "Trazado de curbas estándares"
 
@@ -2465,20 +2505,20 @@
 msgid "in memory relation schema"
 msgstr "Esquema de la relación en memoria"
 
+msgid "in_group"
+msgstr "En el grupo"
+
 msgctxt "CWUser"
 msgid "in_group"
 msgstr ""
 
-msgid "in_group"
-msgstr "En el grupo"
+msgctxt "CWGroup"
+msgid "in_group_object"
+msgstr ""
 
 msgid "in_group_object"
 msgstr "Miembros"
 
-msgctxt "CWGroup"
-msgid "in_group_object"
-msgstr ""
-
 msgid "in_state"
 msgstr "estado"
 
@@ -2498,13 +2538,13 @@
 msgid "index this attribute's value in the plain text index"
 msgstr "Indexar el valor de este atributo en el índice de texto simple"
 
+msgid "indexed"
+msgstr "Indexado"
+
 msgctxt "CWAttribute"
 msgid "indexed"
 msgstr ""
 
-msgid "indexed"
-msgstr "Indexado"
-
 msgid "indicate the current state of an entity"
 msgstr "Indica el estado actual de una entidad"
 
@@ -2531,20 +2571,20 @@
 msgid "initial_state"
 msgstr ""
 
+msgctxt "State"
+msgid "initial_state_object"
+msgstr ""
+
 msgid "initial_state_object"
 msgstr "es el estado inicial de"
 
-msgctxt "State"
-msgid "initial_state_object"
-msgstr ""
+msgid "inlined"
+msgstr "Puesto en línea"
 
 msgctxt "CWRType"
 msgid "inlined"
 msgstr ""
 
-msgid "inlined"
-msgstr "Puesto en línea"
-
 msgid "instance schema"
 msgstr ""
 
@@ -2625,13 +2665,13 @@
 msgid "last connection date"
 msgstr "Ultima fecha de conexión"
 
+msgid "last_login_time"
+msgstr "Ultima fecha de conexión"
+
 msgctxt "CWUser"
 msgid "last_login_time"
 msgstr ""
 
-msgid "last_login_time"
-msgstr "Ultima fecha de conexión"
-
 msgid "latest modification time of an entity"
 msgstr "Fecha de la última modificación de una entidad "
 
@@ -2780,7 +2820,26 @@
 msgid "my custom search"
 msgstr "Mi busqueda personalizada"
 
-msgctxt "CWRType"
+msgid "name"
+msgstr "Nombre"
+
+msgctxt "CWEType"
+msgid "name"
+msgstr ""
+
+msgctxt "Transition"
+msgid "name"
+msgstr ""
+
+msgctxt "Workflow"
+msgid "name"
+msgstr ""
+
+msgctxt "CWGroup"
+msgid "name"
+msgstr ""
+
+msgctxt "CWConstraintType"
 msgid "name"
 msgstr ""
 
@@ -2792,10 +2851,11 @@
 msgid "name"
 msgstr ""
 
+msgctxt "CWPermission"
 msgid "name"
-msgstr "Nombre"
-
-msgctxt "CWGroup"
+msgstr ""
+
+msgctxt "CWRType"
 msgid "name"
 msgstr ""
 
@@ -2803,30 +2863,10 @@
 msgid "name"
 msgstr ""
 
-msgctxt "Workflow"
-msgid "name"
-msgstr ""
-
 msgctxt "CWCache"
 msgid "name"
 msgstr ""
 
-msgctxt "CWConstraintType"
-msgid "name"
-msgstr ""
-
-msgctxt "Transition"
-msgid "name"
-msgstr ""
-
-msgctxt "CWEType"
-msgid "name"
-msgstr ""
-
-msgctxt "CWPermission"
-msgid "name"
-msgstr ""
-
 msgid "name of the cache"
 msgstr "Nombre del Cache"
 
@@ -2896,6 +2936,9 @@
 msgid "no version information"
 msgstr "no información de version"
 
+msgid "normal"
+msgstr ""
+
 msgid "not authorized"
 msgstr "no autorizado"
 
@@ -2935,6 +2978,9 @@
 msgid "order"
 msgstr "orden"
 
+msgid "ordernum"
+msgstr "orden"
+
 msgctxt "CWAttribute"
 msgid "ordernum"
 msgstr ""
@@ -2943,9 +2989,6 @@
 msgid "ordernum"
 msgstr ""
 
-msgid "ordernum"
-msgstr "orden"
-
 msgid "owl"
 msgstr "owl"
 
@@ -3001,13 +3044,13 @@
 msgid "pick existing bookmarks"
 msgstr "Seleccione los favoritos existentes"
 
+msgid "pkey"
+msgstr "pkey"
+
 msgctxt "CWProperty"
 msgid "pkey"
 msgstr ""
 
-msgid "pkey"
-msgstr "pkey"
-
 msgid "please correct errors below"
 msgstr "Favor de corregir errores"
 
@@ -3020,13 +3063,13 @@
 msgid "powered by CubicWeb"
 msgstr ""
 
+msgid "prefered_form"
+msgstr ""
+
 msgctxt "EmailAddress"
 msgid "prefered_form"
 msgstr ""
 
-msgid "prefered_form"
-msgstr ""
-
 msgctxt "EmailAddress"
 msgid "prefered_form_object"
 msgstr ""
@@ -3050,13 +3093,13 @@
 msgid "primary_email"
 msgstr ""
 
+msgctxt "EmailAddress"
+msgid "primary_email_object"
+msgstr ""
+
 msgid "primary_email_object"
 msgstr "Dirección de email principal (objeto)"
 
-msgctxt "EmailAddress"
-msgid "primary_email_object"
-msgstr ""
-
 msgid "progress"
 msgstr "Avance"
 
@@ -3083,9 +3126,6 @@
 msgid "read_permission"
 msgstr ""
 
-msgid "read_permission_object"
-msgstr "Objeto_permiso_lectura"
-
 msgctxt "CWGroup"
 msgid "read_permission_object"
 msgstr ""
@@ -3094,6 +3134,9 @@
 msgid "read_permission_object"
 msgstr ""
 
+msgid "read_permission_object"
+msgstr "Objeto_permiso_lectura"
+
 msgid "registry"
 msgstr ""
 
@@ -3110,11 +3153,11 @@
 msgid "relation_type"
 msgstr "tipo de relación"
 
-msgctxt "CWRelation"
+msgctxt "CWAttribute"
 msgid "relation_type"
 msgstr ""
 
-msgctxt "CWAttribute"
+msgctxt "CWRelation"
 msgid "relation_type"
 msgstr ""
 
@@ -3134,11 +3177,11 @@
 msgid "relative url of the bookmarked page"
 msgstr "Url relativa de la pagina"
 
-msgctxt "inlined:CWRelation.to_entity.subject"
+msgctxt "inlined:CWRelation.from_entity.subject"
 msgid "remove this CWEType"
 msgstr ""
 
-msgctxt "inlined:CWRelation.from_entity.subject"
+msgctxt "inlined:CWRelation.to_entity.subject"
 msgid "remove this CWEType"
 msgstr ""
 
@@ -3150,10 +3193,6 @@
 msgid "remove this EmailAddress"
 msgstr ""
 
-msgctxt "WorkflowTransition"
-msgid "require_group"
-msgstr ""
-
 msgid "require_group"
 msgstr "Requiere grupo"
 
@@ -3161,11 +3200,15 @@
 msgid "require_group"
 msgstr ""
 
+msgctxt "Transition"
+msgid "require_group"
+msgstr ""
+
 msgctxt "CWPermission"
 msgid "require_group"
 msgstr ""
 
-msgctxt "Transition"
+msgctxt "WorkflowTransition"
 msgid "require_group"
 msgstr ""
 
@@ -3394,20 +3437,20 @@
 "workflow for this entity first."
 msgstr ""
 
+msgid "state_of"
+msgstr "estado_de"
+
 msgctxt "State"
 msgid "state_of"
 msgstr ""
 
-msgid "state_of"
-msgstr "estado_de"
+msgctxt "Workflow"
+msgid "state_of_object"
+msgstr ""
 
 msgid "state_of_object"
 msgstr "objeto_estado_de"
 
-msgctxt "Workflow"
-msgid "state_of_object"
-msgstr ""
-
 msgid "status change"
 msgstr "cambio de estatus"
 
@@ -3427,41 +3470,41 @@
 msgid "subject_plural:"
 msgstr "sujetos:"
 
+msgid "subworkflow"
+msgstr ""
+
 msgctxt "WorkflowTransition"
 msgid "subworkflow"
 msgstr ""
 
-msgid "subworkflow"
-msgstr ""
-
 msgid "subworkflow state"
 msgstr ""
 
+msgid "subworkflow_exit"
+msgstr ""
+
 msgctxt "WorkflowTransition"
 msgid "subworkflow_exit"
 msgstr ""
 
-msgid "subworkflow_exit"
+msgctxt "SubWorkflowExitPoint"
+msgid "subworkflow_exit_object"
 msgstr ""
 
 msgid "subworkflow_exit_object"
 msgstr ""
 
-msgctxt "SubWorkflowExitPoint"
-msgid "subworkflow_exit_object"
-msgstr ""
-
-msgid "subworkflow_object"
-msgstr ""
-
 msgctxt "Workflow"
 msgid "subworkflow_object"
 msgstr ""
 
-msgctxt "SubWorkflowExitPoint"
+msgid "subworkflow_object"
+msgstr ""
+
 msgid "subworkflow_state"
 msgstr ""
 
+msgctxt "SubWorkflowExitPoint"
 msgid "subworkflow_state"
 msgstr ""
 
@@ -3482,13 +3525,13 @@
 msgid "surname"
 msgstr ""
 
+msgid "symetric"
+msgstr "simetrico"
+
 msgctxt "CWRType"
 msgid "symetric"
 msgstr ""
 
-msgid "symetric"
-msgstr "simetrico"
-
 msgid "system entities"
 msgstr "entidades de sistema"
 
@@ -3554,13 +3597,13 @@
 msgid "timetable"
 msgstr "tabla de tiempos"
 
+msgid "title"
+msgstr "titulo"
+
 msgctxt "Bookmark"
 msgid "title"
 msgstr ""
 
-msgid "title"
-msgstr "titulo"
-
 msgid "to"
 msgstr "a"
 
@@ -3571,34 +3614,34 @@
 msgid "to associate with"
 msgstr "a asociar con"
 
-msgctxt "CWRelation"
 msgid "to_entity"
-msgstr ""
+msgstr "hacia entidad"
 
 msgctxt "CWAttribute"
 msgid "to_entity"
 msgstr ""
 
+msgctxt "CWRelation"
 msgid "to_entity"
-msgstr "hacia entidad"
-
-msgid "to_entity_object"
-msgstr "hacia entidad objeto"
+msgstr ""
 
 msgctxt "CWEType"
 msgid "to_entity_object"
 msgstr ""
 
+msgid "to_entity_object"
+msgstr "hacia entidad objeto"
+
 msgid "to_interval_end"
 msgstr ""
 
-msgctxt "TrInfo"
-msgid "to_state"
-msgstr ""
-
 msgid "to_state"
 msgstr "hacia el estado"
 
+msgctxt "TrInfo"
+msgid "to_state"
+msgstr ""
+
 msgctxt "State"
 msgid "to_state_object"
 msgstr ""
@@ -3621,18 +3664,18 @@
 msgid "transition may not be fired"
 msgstr ""
 
-msgctxt "Transition"
-msgid "transition_of"
-msgstr ""
-
 msgid "transition_of"
 msgstr "transicion de"
 
-msgctxt "WorkflowTransition"
+msgctxt "BaseTransition"
 msgid "transition_of"
 msgstr ""
 
-msgctxt "BaseTransition"
+msgctxt "Transition"
+msgid "transition_of"
+msgstr ""
+
+msgctxt "WorkflowTransition"
 msgid "transition_of"
 msgstr ""
 
@@ -3652,6 +3695,18 @@
 msgid "type"
 msgstr "type"
 
+msgctxt "BaseTransition"
+msgid "type"
+msgstr ""
+
+msgctxt "Transition"
+msgid "type"
+msgstr ""
+
+msgctxt "WorkflowTransition"
+msgid "type"
+msgstr ""
+
 msgid "type here a sparql query"
 msgstr ""
 
@@ -3729,9 +3784,6 @@
 msgid "update_permission"
 msgstr ""
 
-msgid "update_permission_object"
-msgstr "objeto de autorización de modificaciones"
-
 msgctxt "CWGroup"
 msgid "update_permission_object"
 msgstr ""
@@ -3740,17 +3792,23 @@
 msgid "update_permission_object"
 msgstr ""
 
+msgid "update_permission_object"
+msgstr "objeto de autorización de modificaciones"
+
+msgid "updated"
+msgstr ""
+
 #, python-format
 msgid "updated %(etype)s #%(eid)s (%(title)s)"
 msgstr "actualización de la entidad %(etype)s #%(eid)s (%(title)s)"
 
+msgid "uri"
+msgstr ""
+
 msgctxt "ExternalUri"
 msgid "uri"
 msgstr ""
 
-msgid "uri"
-msgstr ""
-
 msgid "use template languages"
 msgstr "utilizar plantillas de lenguaje"
 
@@ -3761,13 +3819,13 @@
 "utilizado para definir una transición desde uno o multiples estados hacia "
 "uno o varios estados destino en las definiciones del workflow"
 
+msgid "use_email"
+msgstr "correo electrónico"
+
 msgctxt "CWUser"
 msgid "use_email"
 msgstr ""
 
-msgid "use_email"
-msgstr "correo electrónico"
-
 msgctxt "EmailAddress"
 msgid "use_email_object"
 msgstr ""
@@ -3827,10 +3885,6 @@
 msgid "validating..."
 msgstr "validando ..."
 
-msgctxt "CWProperty"
-msgid "value"
-msgstr ""
-
 msgid "value"
 msgstr "valor"
 
@@ -3838,6 +3892,10 @@
 msgid "value"
 msgstr ""
 
+msgctxt "CWProperty"
+msgid "value"
+msgstr ""
+
 msgid "value associated to this key is not editable manually"
 msgstr "el valor asociado a este elemento no es editable manualmente"
 
--- a/i18n/fr.po	Wed Oct 07 12:38:30 2009 +0200
+++ b/i18n/fr.po	Fri Oct 09 16:39:26 2009 +0200
@@ -36,6 +36,14 @@
 msgstr "  de l'état %(fromstate)s vers l'état %(tostate)s\n"
 
 #, python-format
+msgid "%(attr)s set to %(newvalue)s"
+msgstr "%(attr)s modifié à %(newvalue)s"
+
+#, python-format
+msgid "%(attr)s updated from %(oldvalue)s to %(newvalue)s"
+msgstr "%(attr)s modifié de %(oldvalue)s à %(newvalue)s"
+
+#, python-format
 msgid "%(cstr)s constraint failed for value %(value)r"
 msgstr "la valeur %(value)r ne satisfait pas la contrainte %(cstr)s"
 
@@ -123,6 +131,10 @@
 msgid "%s software version of the database"
 msgstr "version logicielle de la base pour %s"
 
+#, python-format
+msgid "%s updated"
+msgstr "%s mis à jour"
+
 msgid "(UNEXISTANT EID)"
 msgstr "(EID INTROUVABLE)"
 
@@ -540,13 +552,13 @@
 msgid "This CWConstraintType"
 msgstr "Ce type de contrainte"
 
+msgid "This CWEType"
+msgstr "Ce type d'entité"
+
 msgctxt "inlined:CWRelation.from_entity.subject"
 msgid "This CWEType"
 msgstr "type d'entité sujet"
 
-msgid "This CWEType"
-msgstr "Ce type d'entité"
-
 msgctxt "inlined:CWRelation.to_entity.subject"
 msgid "This CWEType"
 msgstr "type d'entité objet"
@@ -737,6 +749,12 @@
 msgid "actions"
 msgstr "actions"
 
+msgid "actions_about"
+msgstr ""
+
+msgid "actions_about_description"
+msgstr ""
+
 msgid "actions_addentity"
 msgstr "ajouter une entité de ce type"
 
@@ -755,6 +773,12 @@
 msgid "actions_cancel_description"
 msgstr ""
 
+msgid "actions_changelog"
+msgstr ""
+
+msgid "actions_changelog_description"
+msgstr ""
+
 msgid "actions_copy"
 msgstr "copier"
 
@@ -827,6 +851,12 @@
 msgid "actions_myprefs_description"
 msgstr ""
 
+msgid "actions_poweredby"
+msgstr ""
+
+msgid "actions_poweredby_description"
+msgstr ""
+
 msgid "actions_prefs"
 msgstr "préférences"
 
@@ -884,6 +914,9 @@
 msgid "add"
 msgstr "ajouter"
 
+msgid "add BaseTransition transition_of Workflow object"
+msgstr ""
+
 msgid "add Bookmark bookmarked_by CWUser object"
 msgstr "signet"
 
@@ -962,14 +995,14 @@
 msgid "add WorkflowTransition transition_of Workflow object"
 msgstr "transition workflow"
 
+msgctxt "inlined:CWRelation.from_entity.subject"
+msgid "add a CWEType"
+msgstr "ajouter un type d'entité sujet"
+
 msgctxt "inlined:CWRelation.to_entity.subject"
 msgid "add a CWEType"
 msgstr "ajouter un type d'entité objet"
 
-msgctxt "inlined:CWRelation.from_entity.subject"
-msgid "add a CWEType"
-msgstr "ajouter un type d'entité sujet"
-
 msgctxt "inlined:CWRelation.relation_type.subject"
 msgid "add a CWRType"
 msgstr "ajouter un type de relation"
@@ -1002,6 +1035,10 @@
 msgid "add_permission"
 msgstr "permission d'ajout"
 
+msgctxt "CWGroup"
+msgid "add_permission_object"
+msgstr "a la permission d'ajouter"
+
 msgctxt "RQLExpression"
 msgid "add_permission_object"
 msgstr "a la permission d'ajouter"
@@ -1009,10 +1046,6 @@
 msgid "add_permission_object"
 msgstr "a la permission d'ajouter"
 
-msgctxt "CWGroup"
-msgid "add_permission_object"
-msgstr "a la permission d'ajouter"
-
 #, python-format
 msgid "added %(etype)s #%(eid)s (%(title)s)"
 msgstr "ajout de l'entité %(etype)s #%(eid)s (%(title)s)"
@@ -1035,10 +1068,10 @@
 msgid "address"
 msgstr "adresse électronique"
 
-msgctxt "EmailAddress"
 msgid "alias"
 msgstr "alias"
 
+msgctxt "EmailAddress"
 msgid "alias"
 msgstr "alias"
 
@@ -1058,10 +1091,7 @@
 msgid "allowed_transition"
 msgstr "transitions autorisées"
 
-msgid "allowed_transition_object"
-msgstr "états en entrée"
-
-msgctxt "WorkflowTransition"
+msgctxt "BaseTransition"
 msgid "allowed_transition_object"
 msgstr "transition autorisée de"
 
@@ -1069,10 +1099,13 @@
 msgid "allowed_transition_object"
 msgstr "transition autorisée de"
 
-msgctxt "BaseTransition"
+msgctxt "WorkflowTransition"
 msgid "allowed_transition_object"
 msgstr "transition autorisée de"
 
+msgid "allowed_transition_object"
+msgstr "états en entrée"
+
 msgid "am/pm calendar (month)"
 msgstr "calendrier am/pm (mois)"
 
@@ -1130,6 +1163,9 @@
 msgid "authentication failure"
 msgstr "Identifiant ou mot de passe incorrect"
 
+msgid "auto"
+msgstr "automatique"
+
 msgid "automatic"
 msgstr "automatique"
 
@@ -1245,17 +1281,13 @@
 msgid "by relation"
 msgstr "via la relation"
 
+msgid "by_transition"
+msgstr "transition"
+
 msgctxt "TrInfo"
 msgid "by_transition"
 msgstr "transition"
 
-msgid "by_transition"
-msgstr "transition"
-
-msgctxt "WorkflowTransition"
-msgid "by_transition_object"
-msgstr "a pour information"
-
 msgctxt "BaseTransition"
 msgid "by_transition_object"
 msgstr "a pour information"
@@ -1264,6 +1296,10 @@
 msgid "by_transition_object"
 msgstr "a pour information"
 
+msgctxt "WorkflowTransition"
+msgid "by_transition_object"
+msgstr "a pour information"
+
 msgid "by_transition_object"
 msgstr "changement d'états"
 
@@ -1314,10 +1350,6 @@
 msgid "cancel this insert"
 msgstr "annuler cette insertion"
 
-msgctxt "CWRelation"
-msgid "cardinality"
-msgstr "cardinalité"
-
 msgid "cardinality"
 msgstr "cardinalité"
 
@@ -1325,6 +1357,10 @@
 msgid "cardinality"
 msgstr "cardinalité"
 
+msgctxt "CWRelation"
+msgid "cardinality"
+msgstr "cardinalité"
+
 msgid "category"
 msgstr "categorie"
 
@@ -1428,7 +1464,10 @@
 msgid "composite"
 msgstr "composite"
 
-msgctxt "WorkflowTransition"
+msgid "condition"
+msgstr "condition"
+
+msgctxt "BaseTransition"
 msgid "condition"
 msgstr "condition"
 
@@ -1436,20 +1475,17 @@
 msgid "condition"
 msgstr "condition"
 
-msgid "condition"
-msgstr "condition"
-
-msgctxt "BaseTransition"
+msgctxt "WorkflowTransition"
 msgid "condition"
 msgstr "condition"
 
 msgid "condition:"
 msgstr "condition :"
 
+msgctxt "RQLExpression"
 msgid "condition_object"
 msgstr "condition de"
 
-msgctxt "RQLExpression"
 msgid "condition_object"
 msgstr "condition de"
 
@@ -1467,10 +1503,10 @@
 msgid "constrained_by"
 msgstr "contraint par"
 
+msgctxt "CWConstraint"
 msgid "constrained_by_object"
 msgstr "contrainte de"
 
-msgctxt "CWConstraint"
 msgid "constrained_by_object"
 msgstr "contrainte de"
 
@@ -1606,6 +1642,10 @@
 msgid "created_by_object"
 msgstr "a créé"
 
+msgid ""
+"creating BaseTransition (BaseTransition transition_of Workflow %(linkto)s)"
+msgstr ""
+
 msgid "creating Bookmark (Bookmark bookmarked_by CWUser %(linkto)s)"
 msgstr "création d'un signet pour %(linkto)s"
 
@@ -1718,20 +1758,20 @@
 msgid "creation_date"
 msgstr "date de création"
 
+msgid "cstrtype"
+msgstr "type de constrainte"
+
 msgctxt "CWConstraint"
 msgid "cstrtype"
 msgstr "type"
 
-msgid "cstrtype"
-msgstr "type de constrainte"
-
-msgid "cstrtype_object"
-msgstr "utilisé par"
-
 msgctxt "CWConstraintType"
 msgid "cstrtype_object"
 msgstr "type des contraintes"
 
+msgid "cstrtype_object"
+msgstr "utilisé par"
+
 msgid "csv entities export"
 msgstr "export d'entités en CSV"
 
@@ -1790,17 +1830,17 @@
 msgid "default workflow for an entity type"
 msgstr "workflow par défaut pour un type d'entité"
 
+msgid "default_workflow"
+msgstr "workflow par défaut"
+
 msgctxt "CWEType"
 msgid "default_workflow"
 msgstr "workflow par défaut"
 
-msgid "default_workflow"
-msgstr "workflow par défaut"
-
+msgctxt "Workflow"
 msgid "default_workflow_object"
 msgstr "workflow par défaut de"
 
-msgctxt "Workflow"
 msgid "default_workflow_object"
 msgstr "workflow par défaut de"
 
@@ -1875,24 +1915,24 @@
 msgid "delete_permission"
 msgstr "permission de supprimer"
 
+msgctxt "CWEType"
+msgid "delete_permission"
+msgstr "permission de supprimer"
+
 msgctxt "CWRType"
 msgid "delete_permission"
 msgstr "permission de supprimer"
 
-msgctxt "CWEType"
-msgid "delete_permission"
-msgstr "permission de supprimer"
-
+msgctxt "CWGroup"
 msgid "delete_permission_object"
-msgstr "a la permission de supprimer"
+msgstr "peut supprimer"
 
 msgctxt "RQLExpression"
 msgid "delete_permission_object"
 msgstr "peut supprimer"
 
-msgctxt "CWGroup"
 msgid "delete_permission_object"
-msgstr "peut supprimer"
+msgstr "a la permission de supprimer"
 
 #, python-format
 msgid "deleted %(etype)s #%(eid)s (%(title)s)"
@@ -1912,7 +1952,11 @@
 msgid "description"
 msgstr "description"
 
-msgctxt "Transition"
+msgctxt "CWEType"
+msgid "description"
+msgstr "description"
+
+msgctxt "CWRelation"
 msgid "description"
 msgstr "description"
 
@@ -1920,7 +1964,11 @@
 msgid "description"
 msgstr "description"
 
-msgctxt "CWRelation"
+msgctxt "CWAttribute"
+msgid "description"
+msgstr "description"
+
+msgctxt "Transition"
 msgid "description"
 msgstr "description"
 
@@ -1932,10 +1980,6 @@
 msgid "description"
 msgstr "description"
 
-msgctxt "CWEType"
-msgid "description"
-msgstr "description"
-
 msgctxt "CWRType"
 msgid "description"
 msgstr "description"
@@ -1944,14 +1988,6 @@
 msgid "description"
 msgstr "description"
 
-msgctxt "CWAttribute"
-msgid "description"
-msgstr "description"
-
-msgctxt "CWRelation"
-msgid "description_format"
-msgstr "format"
-
 msgid "description_format"
 msgstr "format"
 
@@ -1959,6 +1995,10 @@
 msgid "description_format"
 msgstr "format"
 
+msgctxt "CWRelation"
+msgid "description_format"
+msgstr "format"
+
 msgctxt "Workflow"
 msgid "description_format"
 msgstr "format"
@@ -1999,11 +2039,11 @@
 msgid "destination_state"
 msgstr "état de destination"
 
-msgctxt "SubWorkflowExitPoint"
+msgctxt "Transition"
 msgid "destination_state"
 msgstr "état de destination"
 
-msgctxt "Transition"
+msgctxt "SubWorkflowExitPoint"
 msgid "destination_state"
 msgstr "état de destination"
 
@@ -2170,13 +2210,13 @@
 msgid "expected:"
 msgstr "attendu :"
 
+msgid "expression"
+msgstr "expression"
+
 msgctxt "RQLExpression"
 msgid "expression"
 msgstr "rql de l'expression"
 
-msgid "expression"
-msgstr "expression"
-
 msgid "exprtype"
 msgstr "type de l'expression"
 
@@ -2232,10 +2272,10 @@
 msgid "file tree view"
 msgstr "arborescence (fichiers)"
 
-msgctxt "CWEType"
 msgid "final"
 msgstr "final"
 
+msgctxt "CWEType"
 msgid "final"
 msgstr "final"
 
@@ -2243,10 +2283,10 @@
 msgid "final"
 msgstr "final"
 
-msgctxt "CWUser"
 msgid "firstname"
 msgstr "prénom"
 
+msgctxt "CWUser"
 msgid "firstname"
 msgstr "prénom"
 
@@ -2256,13 +2296,13 @@
 msgid "follow"
 msgstr "suivre le lien"
 
+msgid "for_user"
+msgstr "pour l'utilisateur"
+
 msgctxt "CWProperty"
 msgid "for_user"
 msgstr "propriété de l'utilisateur"
 
-msgid "for_user"
-msgstr "pour l'utilisateur"
-
 msgctxt "CWUser"
 msgid "for_user_object"
 msgstr "a pour préférence"
@@ -2318,20 +2358,20 @@
 msgid "full text or RQL query"
 msgstr "texte à rechercher ou requête RQL"
 
+msgid "fulltext_container"
+msgstr "conteneur du texte indexé"
+
 msgctxt "CWRType"
 msgid "fulltext_container"
 msgstr "objet à indexer"
 
-msgid "fulltext_container"
-msgstr "conteneur du texte indexé"
+msgid "fulltextindexed"
+msgstr "indexation du texte"
 
 msgctxt "CWAttribute"
 msgid "fulltextindexed"
 msgstr "texte indexé"
 
-msgid "fulltextindexed"
-msgstr "indexation du texte"
-
 msgid "generic plot"
 msgstr "tracé de courbes standard"
 
@@ -2477,13 +2517,13 @@
 msgid "in memory relation schema"
 msgstr "schéma de la relation en mémoire"
 
+msgid "in_group"
+msgstr "dans le groupe"
+
 msgctxt "CWUser"
 msgid "in_group"
 msgstr "fait partie du groupe"
 
-msgid "in_group"
-msgstr "dans le groupe"
-
 msgctxt "CWGroup"
 msgid "in_group_object"
 msgstr "contient les utilisateurs"
@@ -2536,10 +2576,10 @@
 msgid "initial state for this workflow"
 msgstr "état initial pour ce workflow"
 
-msgctxt "Workflow"
 msgid "initial_state"
 msgstr "état initial"
 
+msgctxt "Workflow"
 msgid "initial_state"
 msgstr "état initial"
 
@@ -2725,10 +2765,10 @@
 msgid "main informations"
 msgstr "Informations générales"
 
-msgctxt "RQLExpression"
 msgid "mainvars"
 msgstr "variables principales"
 
+msgctxt "RQLExpression"
 msgid "mainvars"
 msgstr "variables principales"
 
@@ -2793,38 +2833,6 @@
 msgid "my custom search"
 msgstr "ma recherche personnalisée"
 
-msgctxt "CWPermission"
-msgid "name"
-msgstr "nom"
-
-msgctxt "State"
-msgid "name"
-msgstr "nom"
-
-msgctxt "BaseTransition"
-msgid "name"
-msgstr "nom"
-
-msgctxt "CWRType"
-msgid "name"
-msgstr "nom"
-
-msgctxt "CWGroup"
-msgid "name"
-msgstr "nom"
-
-msgctxt "WorkflowTransition"
-msgid "name"
-msgstr "nom"
-
-msgctxt "CWCache"
-msgid "name"
-msgstr "nom"
-
-msgid "name"
-msgstr "nom"
-
-msgctxt "CWConstraintType"
 msgid "name"
 msgstr "nom"
 
@@ -2840,6 +2848,38 @@
 msgid "name"
 msgstr "nom"
 
+msgctxt "CWGroup"
+msgid "name"
+msgstr "nom"
+
+msgctxt "CWConstraintType"
+msgid "name"
+msgstr "nom"
+
+msgctxt "WorkflowTransition"
+msgid "name"
+msgstr "nom"
+
+msgctxt "State"
+msgid "name"
+msgstr "nom"
+
+msgctxt "CWPermission"
+msgid "name"
+msgstr "nom"
+
+msgctxt "CWRType"
+msgid "name"
+msgstr "nom"
+
+msgctxt "BaseTransition"
+msgid "name"
+msgstr "nom"
+
+msgctxt "CWCache"
+msgid "name"
+msgstr "nom"
+
 msgid "name of the cache"
 msgstr "nom du cache applicatif"
 
@@ -2905,6 +2945,9 @@
 msgid "no version information"
 msgstr "pas d'information de version"
 
+msgid "normal"
+msgstr "normal"
+
 msgid "not authorized"
 msgstr "non autorisé"
 
@@ -2944,16 +2987,16 @@
 msgid "order"
 msgstr "ordre"
 
-msgctxt "CWRelation"
 msgid "ordernum"
-msgstr "numéro d'ordre"
+msgstr "ordre"
 
 msgctxt "CWAttribute"
 msgid "ordernum"
 msgstr "numéro d'ordre"
 
+msgctxt "CWRelation"
 msgid "ordernum"
-msgstr "ordre"
+msgstr "numéro d'ordre"
 
 msgid "owl"
 msgstr "owl"
@@ -3012,13 +3055,13 @@
 msgid "pick existing bookmarks"
 msgstr "récupérer des signets existants"
 
+msgid "pkey"
+msgstr "clé"
+
 msgctxt "CWProperty"
 msgid "pkey"
 msgstr "code de la propriété"
 
-msgid "pkey"
-msgstr "clé"
-
 msgid "please correct errors below"
 msgstr "veuillez corriger les erreurs ci-dessous"
 
@@ -3061,13 +3104,13 @@
 msgid "primary_email"
 msgstr "email principal"
 
-msgid "primary_email_object"
-msgstr "adresse email principale (object)"
-
 msgctxt "EmailAddress"
 msgid "primary_email_object"
 msgstr "adresse principale de"
 
+msgid "primary_email_object"
+msgstr "adresse email principale (object)"
+
 msgid "progress"
 msgstr "avancement"
 
@@ -3083,6 +3126,9 @@
 msgid "read_perm"
 msgstr "lecture"
 
+msgid "read_permission"
+msgstr "permission de lire"
+
 msgctxt "CWEType"
 msgid "read_permission"
 msgstr "permission d'ajouter"
@@ -3091,12 +3137,6 @@
 msgid "read_permission"
 msgstr "permission d'ajouter"
 
-msgid "read_permission"
-msgstr "permission de lire"
-
-msgid "read_permission_object"
-msgstr "a la permission de lire"
-
 msgctxt "CWGroup"
 msgid "read_permission_object"
 msgstr "peut lire"
@@ -3105,6 +3145,9 @@
 msgid "read_permission_object"
 msgstr "peut lire"
 
+msgid "read_permission_object"
+msgstr "a la permission de lire"
+
 msgid "registry"
 msgstr "registre"
 
@@ -3129,10 +3172,10 @@
 msgid "relation_type"
 msgstr "type de relation"
 
+msgctxt "CWRType"
 msgid "relation_type_object"
 msgstr "définition"
 
-msgctxt "CWRType"
 msgid "relation_type_object"
 msgstr "définition"
 
@@ -3161,10 +3204,6 @@
 msgid "remove this EmailAddress"
 msgstr "supprimer cette adresse électronique"
 
-msgctxt "WorkflowTransition"
-msgid "require_group"
-msgstr "restreinte au groupe"
-
 msgid "require_group"
 msgstr "nécessite le groupe"
 
@@ -3180,6 +3219,10 @@
 msgid "require_group"
 msgstr "restreinte au groupe"
 
+msgctxt "WorkflowTransition"
+msgid "require_group"
+msgstr "restreinte au groupe"
+
 msgctxt "CWGroup"
 msgid "require_group_object"
 msgstr "dé"
@@ -3385,10 +3428,10 @@
 msgid "specializes"
 msgstr "spécialise"
 
+msgctxt "CWEType"
 msgid "specializes_object"
 msgstr "parent de"
 
-msgctxt "CWEType"
 msgid "specializes_object"
 msgstr "parent de"
 
@@ -3411,10 +3454,10 @@
 "l'état n'appartient pas au workflow courant de l'entité. Vous désirez peut-"
 "être spécifier que cette entité doit utiliser ce workflow."
 
-msgctxt "State"
 msgid "state_of"
 msgstr "état de"
 
+msgctxt "State"
 msgid "state_of"
 msgstr "état de"
 
@@ -3475,13 +3518,13 @@
 msgid "subworkflow_object"
 msgstr "utilisé par la transition"
 
+msgid "subworkflow_state"
+msgstr "état du sous-workflow"
+
 msgctxt "SubWorkflowExitPoint"
 msgid "subworkflow_state"
 msgstr "état"
 
-msgid "subworkflow_state"
-msgstr "état du sous-workflow"
-
 msgctxt "State"
 msgid "subworkflow_state_object"
 msgstr "état de sortie de"
@@ -3589,16 +3632,16 @@
 msgid "to associate with"
 msgstr "pour associer à"
 
-msgctxt "CWRelation"
 msgid "to_entity"
-msgstr "pour l'entité"
+msgstr "vers l'entité"
 
 msgctxt "CWAttribute"
 msgid "to_entity"
 msgstr "pour l'entité"
 
+msgctxt "CWRelation"
 msgid "to_entity"
-msgstr "vers l'entité"
+msgstr "pour l'entité"
 
 msgctxt "CWEType"
 msgid "to_entity_object"
@@ -3610,20 +3653,20 @@
 msgid "to_interval_end"
 msgstr "à"
 
+msgid "to_state"
+msgstr "vers l'état"
+
 msgctxt "TrInfo"
 msgid "to_state"
 msgstr "état de destination"
 
-msgid "to_state"
-msgstr "vers l'état"
-
-msgid "to_state_object"
-msgstr "transitions vers cet état"
-
 msgctxt "State"
 msgid "to_state_object"
 msgstr "transition vers cet état"
 
+msgid "to_state_object"
+msgstr "transitions vers cet état"
+
 msgid "todo_by"
 msgstr "à faire par"
 
@@ -3639,6 +3682,9 @@
 msgid "transition may not be fired"
 msgstr "la transition ne peut-être déclenchée"
 
+msgid "transition_of"
+msgstr "transition de"
+
 msgctxt "BaseTransition"
 msgid "transition_of"
 msgstr "transition de"
@@ -3651,9 +3697,6 @@
 msgid "transition_of"
 msgstr "transition de"
 
-msgid "transition_of"
-msgstr "transition de"
-
 msgctxt "Workflow"
 msgid "transition_of_object"
 msgstr "a pour transition"
@@ -3670,6 +3713,18 @@
 msgid "type"
 msgstr "type"
 
+msgctxt "BaseTransition"
+msgid "type"
+msgstr "type"
+
+msgctxt "Transition"
+msgid "type"
+msgstr "type"
+
+msgctxt "WorkflowTransition"
+msgid "type"
+msgstr "type"
+
 msgid "type here a sparql query"
 msgstr "Tapez une requête sparql"
 
@@ -3727,10 +3782,10 @@
 msgid "up"
 msgstr "haut"
 
-msgctxt "CWUser"
 msgid "upassword"
 msgstr "mot de passe"
 
+msgctxt "CWUser"
 msgid "upassword"
 msgstr "mot de passe"
 
@@ -3747,25 +3802,28 @@
 msgid "update_permission"
 msgstr "permission de modifier"
 
+msgctxt "CWGroup"
 msgid "update_permission_object"
-msgstr "à la permission de modifier"
+msgstr "peut modifier"
 
 msgctxt "RQLExpression"
 msgid "update_permission_object"
 msgstr "peut modifier"
 
-msgctxt "CWGroup"
 msgid "update_permission_object"
-msgstr "peut modifier"
+msgstr "à la permission de modifier"
+
+msgid "updated"
+msgstr ""
 
 #, python-format
 msgid "updated %(etype)s #%(eid)s (%(title)s)"
 msgstr "modification de l'entité %(etype)s #%(eid)s (%(title)s)"
 
-msgctxt "ExternalUri"
 msgid "uri"
 msgstr "uri"
 
+msgctxt "ExternalUri"
 msgid "uri"
 msgstr "uri"
 
@@ -3779,13 +3837,13 @@
 "utiliser dans une définition de processus pour ajouter une transition depuis "
 "un ou plusieurs états vers un état de destination."
 
+msgid "use_email"
+msgstr "adresse électronique"
+
 msgctxt "CWUser"
 msgid "use_email"
 msgstr "utilise l'adresse électronique"
 
-msgid "use_email"
-msgstr "adresse électronique"
-
 msgctxt "EmailAddress"
 msgid "use_email_object"
 msgstr "utilisée par"
@@ -3846,14 +3904,14 @@
 msgid "value"
 msgstr "valeur"
 
+msgctxt "CWConstraint"
+msgid "value"
+msgstr "contrainte"
+
 msgctxt "CWProperty"
 msgid "value"
 msgstr "valeur"
 
-msgctxt "CWConstraint"
-msgid "value"
-msgstr "contrainte"
-
 msgid "value associated to this key is not editable manually"
 msgstr "la valeur associée à cette clé n'est pas éditable manuellement"
 
@@ -3909,6 +3967,9 @@
 "and python-projects@lists.logilab.org), set this to indicate which is the "
 "preferred form."
 msgstr ""
+"quand plusieurs addresses sont équivalentes (comme python-projects@logilab."
+"org et python-projects@lists.logilab.org), indique laquelle est la forme "
+"préférentielle."
 
 msgid "workflow"
 msgstr "workflow"
@@ -3929,10 +3990,10 @@
 msgid "workflow to which this transition belongs"
 msgstr "workflow auquel cette transition appartient"
 
-msgctxt "Workflow"
 msgid "workflow_of"
 msgstr "workflow de"
 
+msgctxt "Workflow"
 msgid "workflow_of"
 msgstr "workflow de"
 
--- a/misc/migration/3.5.3_Any.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/misc/migration/3.5.3_Any.py	Fri Oct 09 16:39:26 2009 +0200
@@ -1,4 +1,7 @@
-sync_schema_props_perms('state_of')
-sync_schema_props_perms('transition_of')
-
-add_attribute('BaseTransition', 'type')
+# type attribute might already be there if migrating from
+# version < 3.5 to version >= 3.5.3, BaseTransition being added
+# in bootstrap_migration
+if versions_map['cubicweb'][0] < (3, 5, 0):
+    add_attribute('BaseTransition', 'type')
+    sync_schema_props_perms('state_of')
+    sync_schema_props_perms('transition_of')
--- a/req.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/req.py	Fri Oct 09 16:39:26 2009 +0200
@@ -108,7 +108,13 @@
     # XXX move to CWEntityManager or even better as factory method (unclear
     # where yet...)
     def create_entity(self, etype, *args, **kwargs):
-        """add a new entity of the given type"""
+        """add a new entity of the given type
+
+        Example (in a shell session):
+
+        c = create_entity('Company', name='Logilab')
+        create_entity('Person', ('works_for', 'Y'), Y=c.eid, firstname='John', lastname='Doe')
+        """
         rql = 'INSERT %s X' % etype
         relations = []
         restrictions = []
--- a/rset.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/rset.py	Fri Oct 09 16:39:26 2009 +0200
@@ -451,14 +451,19 @@
             if rqlst.TYPE == 'select':
                 # UNION query, find the subquery from which this entity has been
                 # found
-                rqlst, col = rqlst.locate_subquery(col, etype, self.args)
+                select, col = rqlst.locate_subquery(col, etype, self.args)
+            else:
+                select = rqlst
             # take care, due to outer join support, we may find None
             # values for non final relation
-            for i, attr, x in attr_desc_iterator(rqlst, col):
+            for i, attr, x in attr_desc_iterator(select, col):
+                outerselidx = rqlst.subquery_selection_index(select, i)
+                if outerselidx is None:
+                    continue
                 if x == 'subject':
                     rschema = eschema.subject_relation(attr)
                     if rschema.is_final():
-                        entity[attr] = rowvalues[i]
+                        entity[attr] = rowvalues[outerselidx]
                         continue
                     tetype = rschema.objects(etype)[0]
                     card = rschema.rproperty(etype, tetype, 'cardinality')[0]
@@ -468,7 +473,7 @@
                     card = rschema.rproperty(tetype, etype, 'cardinality')[1]
                 # only keep value if it can't be multivalued
                 if card in '1?':
-                    if rowvalues[i] is None:
+                    if rowvalues[outerselidx] is None:
                         if x == 'subject':
                             rql = 'Any Y WHERE X %s Y, X eid %s'
                         else:
@@ -476,7 +481,7 @@
                         rrset = ResultSet([], rql % (attr, entity.eid))
                         req.decorate_rset(rrset)
                     else:
-                        rrset = self._build_entity(row, i).as_rset()
+                        rrset = self._build_entity(row, outerselidx).as_rset()
                     entity.set_related_cache(attr, x, rrset)
         return entity
 
@@ -602,7 +607,6 @@
             break
         else:
             continue
-        #varname = var.name
         for ref in var.references():
             rel = ref.relation()
             if rel is None or rel.is_types_restriction():
--- a/schemas/workflow.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/schemas/workflow.py	Fri Oct 09 16:39:26 2009 +0200
@@ -92,9 +92,10 @@
     """
     __specializes_schema__ = True
 
-    destination_state = SubjectRelation('State', cardinality='1*',
-                                        constraints=[RQLConstraint('S transition_of WF, O state_of WF')],
-                                        description=_('destination state for this transition'))
+    destination_state = SubjectRelation(
+        'State', cardinality='1*',
+        constraints=[RQLConstraint('S transition_of WF, O state_of WF')],
+        description=_('destination state for this transition'))
 
 
 class WorkflowTransition(BaseTransition):
@@ -103,18 +104,23 @@
 
     subworkflow = SubjectRelation('Workflow', cardinality='1*',
                                   constraints=[RQLConstraint('S transition_of WF, WF workflow_of ET, O workflow_of ET')])
-    subworkflow_exit = SubjectRelation('SubWorkflowExitPoint', cardinality='+1',
+    # XXX use exit_of and inline it
+    subworkflow_exit = SubjectRelation('SubWorkflowExitPoint', cardinality='*1',
                                        composite='subject')
 
 
 class SubWorkflowExitPoint(EntityType):
     """define how we get out from a sub-workflow"""
-    subworkflow_state = SubjectRelation('State', cardinality='1*',
-                                        constraints=[RQLConstraint('T subworkflow_exit S, T subworkflow WF, O state_of WF')],
-                                        description=_('subworkflow state'))
-    destination_state = SubjectRelation('State', cardinality='1*',
-                                        constraints=[RQLConstraint('T subworkflow_exit S, T transition_of WF, O state_of WF')],
-                                        description=_('destination state'))
+    subworkflow_state = SubjectRelation(
+        'State', cardinality='1*',
+        constraints=[RQLConstraint('T subworkflow_exit S, T subworkflow WF, O state_of WF')],
+        description=_('subworkflow state'))
+    destination_state = SubjectRelation(
+        'State', cardinality='?*',
+        constraints=[RQLConstraint('T subworkflow_exit S, T transition_of WF, O state_of WF')],
+        description=_('destination state. No destination state means that transition '
+                      'should go back to the state from which we\'ve entered the '
+                      'subworkflow.'))
 
 
 class TrInfo(EntityType):
--- a/server/msplanner.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/server/msplanner.py	Fri Oct 09 16:39:26 2009 +0200
@@ -636,7 +636,7 @@
                 sourcesterms[source][term].remove(solindex)
             except KeyError:
                 import rql.base as rqlb
-                assert isinstance(term, rqlb.BaseNode), repr(term)
+                assert isinstance(term, (rqlb.BaseNode, Variable)), repr(term)
                 continue # may occur with subquery column alias
             if not sourcesterms[source][term]:
                 del sourcesterms[source][term]
--- a/server/repository.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/server/repository.py	Fri Oct 09 16:39:26 2009 +0200
@@ -1153,7 +1153,9 @@
 
     def pyro_register(self, host=''):
         """register the repository as a pyro object"""
-        from logilab.common.pyro_ext import register_object
+        import tempfile
+        from logilab.common.pyro_ext import register_object, config
+        config.PYRO_STORAGE = tempfile.gettempdir() # XXX until lgc > 0.45.1 is out
         appid = self.config['pyro-instance-id'] or self.config.appid
         daemon = register_object(self, appid, self.config['pyro-ns-group'],
                                  self.config['pyro-host'],
--- a/server/sources/pyrorql.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/server/sources/pyrorql.py	Fri Oct 09 16:39:26 2009 +0200
@@ -219,7 +219,7 @@
         nshost = self.config.get('pyro-ns-host') or self.repo.config['pyro-ns-host']
         nsgroup = self.config.get('pyro-ns-group') or self.repo.config['pyro-ns-group']
         self.info('connecting to instance :%s.%s for user %s',
-                  nsgroup, nshost, self.config['cubicweb-user'])
+                  nsgroup, self.config['pyro-ns-id'], self.config['cubicweb-user'])
         #cnxprops = ConnectionProperties(cnxtype=self.config['cnx-type'])
         return dbapi.connect(database=self.config['pyro-ns-id'],
                              login=self.config['cubicweb-user'],
--- a/server/sqlutils.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/server/sqlutils.py	Fri Oct 09 16:39:26 2009 +0200
@@ -33,7 +33,8 @@
 SQL_PREFIX = 'cw_'
 
 
-def sqlexec(sqlstmts, cursor_or_execute, withpb=True, pbtitle='', delimiter=';'):
+def sqlexec(sqlstmts, cursor_or_execute, withpb=not os.environ.get('APYCOT_ROOT'),
+            pbtitle='', delimiter=';'):
     """execute sql statements ignoring DROP/ CREATE GROUP or USER statements
     error. If a cnx is given, commit at each statement
     """
--- a/web/component.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/web/component.py	Fri Oct 09 16:39:26 2009 +0200
@@ -104,6 +104,8 @@
             start = int(self._cw.form[self.start_param])
         except KeyError:
             start, stop = 0, self.page_size
+        if start >= len(self.rset):
+            start, stop = 0, self.page_size
         self.starting_from = start
         return start, stop
 
--- a/web/uicfg.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/web/uicfg.py	Fri Oct 09 16:39:26 2009 +0200
@@ -284,14 +284,9 @@
             else:
                 card, composed = _card_and_comp(sschema, rschema, oschema, role)
                 if card in '1+':
-                    if not rschema.is_final() and composed:
-                        # XXX why? probably because we want it unlined, though
-                        # this is not the case by default
-                        sectdict['main'] = 'hidden'
-                    else:
-                        sectdict['main'] = 'attributes'
-                        if not 'muledit' in sectdict:
-                            sectdict['muledit'] = 'attributes'
+                    sectdict['main'] = 'attributes'
+                    if not 'muledit' in sectdict:
+                        sectdict['muledit'] = 'attributes'
                 elif rschema.is_final():
                     sectdict['main'] = 'attributes'
                 else:
@@ -402,7 +397,6 @@
                         continue
             yield (rschema, targetschemas, role)
 
-
 autoform_section = AutoformSectionRelationTags('autoform_section')
 
 # relations'field class
--- a/web/views/autoform.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/web/views/autoform.py	Fri Oct 09 16:39:26 2009 +0200
@@ -134,22 +134,12 @@
         #       -> generate the <form> node when the content is rendered
         #          and we know the correct enctype (formrenderer's w attribute
         #          is not a StringIO)
-        for rschema, targettypes, role in self.inlined_relations():
-            # inlined forms don't handle multiple target types
-            if len(targettypes) != 1:
-                continue
-            targettype = targettypes[0]
-            if targettype in _tested:
-                continue
-            _tested.add(targettype)
-            if self.should_inline_relation_form(rschema, targettype, role):
-                entity = self._cw.vreg['etypes'].etype_class(targettype)(self._cw)
-                subform = self._cw.vreg['forms'].select('edition', self._cw,
-                                                        entity=entity)
-                if hasattr(subform, '_subform_needs_multipart'):
-                    needs_multipart = subform._subform_needs_multipart(_tested)
+        for formview in self.inlined_form_views():
+            if formview.form:
+                if hasattr(formview.form, '_subform_needs_multipart'):
+                    needs_multipart = formview.form._subform_needs_multipart(_tested)
                 else:
-                    needs_multipart = subform.form_needs_multipart
+                    needs_multipart = formview.form.form_needs_multipart
                 if needs_multipart:
                     return True
         return False
@@ -269,7 +259,7 @@
     def inlined_form_views(self):
         """compute and return list of inlined form views (hosting the inlined form object)
         """
-        formviews = []
+        allformviews = []
         entity = self.edited_entity
         for rschema, ttypes, role in self.inlined_relations():
             # show inline forms only if there's one possible target type
@@ -281,7 +271,7 @@
                 continue
             ttype = ttypes[0].type
             if self.should_inline_relation_form(rschema, ttype, role):
-                formviews += self.inline_edition_form_view(rschema, ttype, role)
+                formviews = list(self.inline_edition_form_view(rschema, ttype, role))
                 if role == 'subject':
                     card = rschema.rproperty(entity.e_schema, ttype, 'cardinality')[0]
                 else:
@@ -298,7 +288,8 @@
                         etype=ttype, rtype=rschema, role=role,
                         peid=self.edited_entity.eid, pform=self, card=card)
                     formviews.append(addnewlink)
-        return formviews
+                allformviews += formviews
+        return allformviews
 
     def inlined_forms(self):
         for formview in self.inlined_form_views():
--- a/web/views/basecontrollers.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/web/views/basecontrollers.py	Fri Oct 09 16:39:26 2009 +0200
@@ -192,8 +192,6 @@
     except ValidationError, ex:
         return (False, _validation_error(req, ex), ctrl._edited_entity)
     except Redirect, ex:
-        if ctrl._edited_entity:
-            ctrl._edited_entity.complete()
         try:
             req.cnx.commit() # ValidationError may be raise on commit
         except ValidationError, ex:
@@ -203,6 +201,10 @@
             req.exception('unexpected error while validating form')
             return (False, req._(str(ex).decode('utf-8')), ctrl._edited_entity)
         else:
+            # complete entity: it can be used in js callbacks where we might
+            # want every possible information
+            if ctrl._edited_entity:
+                ctrl._edited_entity.complete()
             return (True, ex.location, ctrl._edited_entity)
     except Exception, ex:
         req.cnx.rollback()
@@ -554,7 +556,6 @@
         rql = 'Any X WHERE X eid in (%s)' % (','.join(eids))
         rset = self._cw.execute(rql)
         for entity in rset.entities():
-            entity.complete() # XXX really?
             yield entity
 
     @property
--- a/web/views/editforms.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/web/views/editforms.py	Fri Oct 09 16:39:26 2009 +0200
@@ -371,6 +371,8 @@
     entity
     """
     __regid__ = 'copy'
+
+    title = _('copy')
     warning_message = _('Please note that this is only a shallow copy')
 
     def render_form(self, entity):
--- a/web/views/formrenderers.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/web/views/formrenderers.py	Fri Oct 09 16:39:26 2009 +0200
@@ -352,7 +352,7 @@
 
     _options = FormRenderer._options + ('display_relations_form', 'main_form_title')
     display_relations_form = True
-    main_form_title = _('main information')
+    main_form_title = _('main informations')
 
     def render(self, form, values):
         rendered = super(EntityFormRenderer, self).render(form, values)
--- a/web/views/treeview.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/web/views/treeview.py	Fri Oct 09 16:39:26 2009 +0200
@@ -180,6 +180,7 @@
         # the local node info
         self.wview(vid, self.cw_rset, row=row, col=col, **morekwargs)
         if is_open and not is_leaf: #  => rql is defined
-            self.wview(parentvid, self._cw.execute(rql), treeid=treeid, initial_load=False, **morekwargs)
+            self.wview(parentvid, self._cw.execute(rql), subvid=vid,
+                       treeid=treeid, initial_load=False, **morekwargs)
         w(u'</li>')
 
--- a/web/views/urlrewrite.py	Wed Oct 07 12:38:30 2009 +0200
+++ b/web/views/urlrewrite.py	Fri Oct 09 16:39:26 2009 +0200
@@ -170,7 +170,7 @@
             for key in formgroups:
                 form2[key] = match.group(key)
         if "vtitle" in form2:
-            form2['vtitle'] = req._(form2['vtitle'])
+            form2['vtitle'] = req.__(form2['vtitle'])
         if form2:
             req.form.update(form2)
         return controller, rset