merge 3.19.10 into 3.20
authorJulien Cristau <julien.cristau@logilab.fr>
Thu, 12 Mar 2015 14:21:36 +0100
changeset 10229 512ba8f37bd4
parent 10219 eacb8ea38bf5 (current diff)
parent 10227 fb138c2b7da3 (diff)
child 10272 3231fd2fa7a5
merge 3.19.10 into 3.20
.hgtags
__pkginfo__.py
cubicweb.spec
debian/changelog
devtools/devctl.py
devtools/test/data/cubes/i18ntestcube/i18n/en.po.ref
i18n/de.po
i18n/en.po
i18n/es.po
i18n/fr.po
server/sources/native.py
web/test/unittest_views_editforms.py
web/views/autoform.py
--- a/.hgtags	Wed Feb 25 17:13:46 2015 +0100
+++ b/.hgtags	Thu Mar 12 14:21:36 2015 +0100
@@ -398,6 +398,9 @@
 b7c373d74754f5ba9344575cb179b47282c413b6 cubicweb-version-3.19.9
 b7c373d74754f5ba9344575cb179b47282c413b6 cubicweb-debian-version-3.19.9-1
 b7c373d74754f5ba9344575cb179b47282c413b6 cubicweb-centos-version-3.19.9-1
+3bab0b9b0ee7355a6fea45c2adca88bffe130e5d cubicweb-version-3.19.10
+3bab0b9b0ee7355a6fea45c2adca88bffe130e5d cubicweb-debian-version-3.19.10-1
+3bab0b9b0ee7355a6fea45c2adca88bffe130e5d cubicweb-centos-version-3.19.10-1
 7e6b7739afe6128589ad51b0318decb767cbae36 cubicweb-version-3.20.0
 7e6b7739afe6128589ad51b0318decb767cbae36 cubicweb-debian-version-3.20.0-1
 7e6b7739afe6128589ad51b0318decb767cbae36 cubicweb-centos-version-3.20.0-1
--- a/debian/changelog	Wed Feb 25 17:13:46 2015 +0100
+++ b/debian/changelog	Thu Mar 12 14:21:36 2015 +0100
@@ -28,6 +28,12 @@
 
  -- Julien Cristau <julien.cristau@logilab.fr>  Tue, 06 Jan 2015 18:11:03 +0100
 
+cubicweb (3.19.10-1) unstable; urgency=low
+
+  * New upstream release.
+
+ -- Rémi Cardona <remi.cardona@logilab.fr>  Thu, 12 Mar 2015 11:52:01 +0100
+
 cubicweb (3.19.9-1) unstable; urgency=low
 
   * new upstream release
--- a/devtools/devctl.py	Wed Feb 25 17:13:46 2015 +0100
+++ b/devtools/devctl.py	Thu Mar 12 14:21:36 2015 +0100
@@ -167,6 +167,7 @@
             if not eschema.final:
                 add_msg(w, 'This %s:' % etype)
                 add_msg(w, 'New %s' % etype)
+                add_msg(w, 'add a %s' % etype) # AddNewAction
                 if libconfig is not None:  # processing a cube
                     # As of 3.20.3 we no longer use it, but keeping this string
                     # allows developers to run i18ncube with new cubicweb and still
--- a/devtools/test/data/cubes/i18ntestcube/i18n/en.po.ref	Wed Feb 25 17:13:46 2015 +0100
+++ b/devtools/test/data/cubes/i18ntestcube/i18n/en.po.ref	Thu Mar 12 14:21:36 2015 +0100
@@ -41,6 +41,12 @@
 msgid "add ForumThread in_forum Forum object"
 msgstr ""
 
+msgid "add a Forum"
+msgstr ""
+
+msgid "add a ForumThread"
+msgstr ""
+
 msgid "creating ForumThread (ForumThread in_forum Forum %(linkto)s)"
 msgstr ""
 
--- a/etwist/twconfig.py	Wed Feb 25 17:13:46 2015 +0100
+++ b/etwist/twconfig.py	Thu Mar 12 14:21:36 2015 +0100
@@ -103,7 +103,7 @@
 
     def default_base_url(self):
         from socket import getfqdn
-        return 'http://%s:%s/' % (self['host'] or getfqdn(), self['port'] or 8080)
+        return 'http://%s:%s/' % (self['host'] or getfqdn().lower(), self['port'] or 8080)
 
 
 try:
--- a/i18n/de.po	Wed Feb 25 17:13:46 2015 +0100
+++ b/i18n/de.po	Thu Mar 12 14:21:36 2015 +0100
@@ -1120,6 +1120,30 @@
 msgid "add WorkflowTransition transition_of Workflow object"
 msgstr "Workflow-Übergang"
 
+msgid "add a BaseTransition"
+msgstr ""
+
+msgid "add a Bookmark"
+msgstr ""
+
+msgid "add a CWAttribute"
+msgstr ""
+
+msgid "add a CWCache"
+msgstr ""
+
+msgid "add a CWConstraint"
+msgstr ""
+
+msgid "add a CWConstraintType"
+msgstr ""
+
+msgid "add a CWDataImport"
+msgstr ""
+
+msgid "add a CWEType"
+msgstr ""
+
 msgctxt "inlined:CWRelation.from_entity.subject"
 msgid "add a CWEType"
 msgstr "einen Entitätstyp hinzufügen"
@@ -1128,14 +1152,68 @@
 msgid "add a CWEType"
 msgstr "einen Entitätstyp hinzufügen"
 
+msgid "add a CWGroup"
+msgstr ""
+
+msgid "add a CWProperty"
+msgstr ""
+
+msgid "add a CWRType"
+msgstr ""
+
 msgctxt "inlined:CWRelation.relation_type.subject"
 msgid "add a CWRType"
 msgstr "einen Relationstyp hinzufügen"
 
+msgid "add a CWRelation"
+msgstr ""
+
+msgid "add a CWSource"
+msgstr ""
+
+msgid "add a CWSourceHostConfig"
+msgstr ""
+
+msgid "add a CWSourceSchemaConfig"
+msgstr ""
+
+msgid "add a CWUniqueTogetherConstraint"
+msgstr ""
+
+msgid "add a CWUser"
+msgstr ""
+
+msgid "add a EmailAddress"
+msgstr ""
+
 msgctxt "inlined:CWUser.use_email.subject"
 msgid "add a EmailAddress"
 msgstr "Email-Adresse hinzufügen"
 
+msgid "add a ExternalUri"
+msgstr ""
+
+msgid "add a RQLExpression"
+msgstr ""
+
+msgid "add a State"
+msgstr ""
+
+msgid "add a SubWorkflowExitPoint"
+msgstr ""
+
+msgid "add a TrInfo"
+msgstr ""
+
+msgid "add a Transition"
+msgstr ""
+
+msgid "add a Workflow"
+msgstr ""
+
+msgid "add a WorkflowTransition"
+msgstr ""
+
 # subject and object forms for each relation type
 # (no object form for final relation types)
 msgid "add_permission"
--- a/i18n/en.po	Wed Feb 25 17:13:46 2015 +0100
+++ b/i18n/en.po	Thu Mar 12 14:21:36 2015 +0100
@@ -1082,6 +1082,30 @@
 msgid "add WorkflowTransition transition_of Workflow object"
 msgstr "workflow-transition"
 
+msgid "add a BaseTransition"
+msgstr ""
+
+msgid "add a Bookmark"
+msgstr ""
+
+msgid "add a CWAttribute"
+msgstr ""
+
+msgid "add a CWCache"
+msgstr ""
+
+msgid "add a CWConstraint"
+msgstr ""
+
+msgid "add a CWConstraintType"
+msgstr ""
+
+msgid "add a CWDataImport"
+msgstr ""
+
+msgid "add a CWEType"
+msgstr ""
+
 msgctxt "inlined:CWRelation.from_entity.subject"
 msgid "add a CWEType"
 msgstr "add an entity type"
@@ -1090,14 +1114,68 @@
 msgid "add a CWEType"
 msgstr "add an entity type"
 
+msgid "add a CWGroup"
+msgstr ""
+
+msgid "add a CWProperty"
+msgstr ""
+
+msgid "add a CWRType"
+msgstr ""
+
 msgctxt "inlined:CWRelation.relation_type.subject"
 msgid "add a CWRType"
 msgstr "add a relation type"
 
+msgid "add a CWRelation"
+msgstr ""
+
+msgid "add a CWSource"
+msgstr ""
+
+msgid "add a CWSourceHostConfig"
+msgstr ""
+
+msgid "add a CWSourceSchemaConfig"
+msgstr ""
+
+msgid "add a CWUniqueTogetherConstraint"
+msgstr ""
+
+msgid "add a CWUser"
+msgstr ""
+
+msgid "add a EmailAddress"
+msgstr ""
+
 msgctxt "inlined:CWUser.use_email.subject"
 msgid "add a EmailAddress"
 msgstr "add an email address"
 
+msgid "add a ExternalUri"
+msgstr ""
+
+msgid "add a RQLExpression"
+msgstr ""
+
+msgid "add a State"
+msgstr ""
+
+msgid "add a SubWorkflowExitPoint"
+msgstr ""
+
+msgid "add a TrInfo"
+msgstr ""
+
+msgid "add a Transition"
+msgstr ""
+
+msgid "add a Workflow"
+msgstr ""
+
+msgid "add a WorkflowTransition"
+msgstr ""
+
 # subject and object forms for each relation type
 # (no object form for final relation types)
 msgid "add_permission"
--- a/i18n/es.po	Wed Feb 25 17:13:46 2015 +0100
+++ b/i18n/es.po	Thu Mar 12 14:21:36 2015 +0100
@@ -1139,6 +1139,30 @@
 msgid "add WorkflowTransition transition_of Workflow object"
 msgstr "Transición Workflow"
 
+msgid "add a BaseTransition"
+msgstr ""
+
+msgid "add a Bookmark"
+msgstr ""
+
+msgid "add a CWAttribute"
+msgstr ""
+
+msgid "add a CWCache"
+msgstr ""
+
+msgid "add a CWConstraint"
+msgstr ""
+
+msgid "add a CWConstraintType"
+msgstr ""
+
+msgid "add a CWDataImport"
+msgstr ""
+
+msgid "add a CWEType"
+msgstr ""
+
 msgctxt "inlined:CWRelation.from_entity.subject"
 msgid "add a CWEType"
 msgstr "Agregar un tipo de entidad"
@@ -1147,14 +1171,68 @@
 msgid "add a CWEType"
 msgstr "Agregar un tipo de entidad"
 
+msgid "add a CWGroup"
+msgstr ""
+
+msgid "add a CWProperty"
+msgstr ""
+
+msgid "add a CWRType"
+msgstr ""
+
 msgctxt "inlined:CWRelation.relation_type.subject"
 msgid "add a CWRType"
 msgstr "Agregar un tipo de relación"
 
+msgid "add a CWRelation"
+msgstr ""
+
+msgid "add a CWSource"
+msgstr ""
+
+msgid "add a CWSourceHostConfig"
+msgstr ""
+
+msgid "add a CWSourceSchemaConfig"
+msgstr ""
+
+msgid "add a CWUniqueTogetherConstraint"
+msgstr ""
+
+msgid "add a CWUser"
+msgstr ""
+
+msgid "add a EmailAddress"
+msgstr ""
+
 msgctxt "inlined:CWUser.use_email.subject"
 msgid "add a EmailAddress"
 msgstr "Agregar correo electrónico"
 
+msgid "add a ExternalUri"
+msgstr ""
+
+msgid "add a RQLExpression"
+msgstr ""
+
+msgid "add a State"
+msgstr ""
+
+msgid "add a SubWorkflowExitPoint"
+msgstr ""
+
+msgid "add a TrInfo"
+msgstr ""
+
+msgid "add a Transition"
+msgstr ""
+
+msgid "add a Workflow"
+msgstr ""
+
+msgid "add a WorkflowTransition"
+msgstr ""
+
 # subject and object forms for each relation type
 # (no object form for final relation types)
 msgid "add_permission"
--- a/i18n/fr.po	Wed Feb 25 17:13:46 2015 +0100
+++ b/i18n/fr.po	Thu Mar 12 14:21:36 2015 +0100
@@ -1135,6 +1135,30 @@
 msgid "add WorkflowTransition transition_of Workflow object"
 msgstr "transition workflow"
 
+msgid "add a BaseTransition"
+msgstr ""
+
+msgid "add a Bookmark"
+msgstr ""
+
+msgid "add a CWAttribute"
+msgstr ""
+
+msgid "add a CWCache"
+msgstr ""
+
+msgid "add a CWConstraint"
+msgstr ""
+
+msgid "add a CWConstraintType"
+msgstr ""
+
+msgid "add a CWDataImport"
+msgstr ""
+
+msgid "add a CWEType"
+msgstr ""
+
 msgctxt "inlined:CWRelation.from_entity.subject"
 msgid "add a CWEType"
 msgstr "ajouter un type d'entité sujet"
@@ -1143,14 +1167,68 @@
 msgid "add a CWEType"
 msgstr "ajouter un type d'entité objet"
 
+msgid "add a CWGroup"
+msgstr ""
+
+msgid "add a CWProperty"
+msgstr ""
+
+msgid "add a CWRType"
+msgstr ""
+
 msgctxt "inlined:CWRelation.relation_type.subject"
 msgid "add a CWRType"
 msgstr "ajouter un type de relation"
 
+msgid "add a CWRelation"
+msgstr ""
+
+msgid "add a CWSource"
+msgstr ""
+
+msgid "add a CWSourceHostConfig"
+msgstr ""
+
+msgid "add a CWSourceSchemaConfig"
+msgstr ""
+
+msgid "add a CWUniqueTogetherConstraint"
+msgstr ""
+
+msgid "add a CWUser"
+msgstr ""
+
+msgid "add a EmailAddress"
+msgstr ""
+
 msgctxt "inlined:CWUser.use_email.subject"
 msgid "add a EmailAddress"
 msgstr "ajouter une adresse électronique"
 
+msgid "add a ExternalUri"
+msgstr ""
+
+msgid "add a RQLExpression"
+msgstr ""
+
+msgid "add a State"
+msgstr ""
+
+msgid "add a SubWorkflowExitPoint"
+msgstr ""
+
+msgid "add a TrInfo"
+msgstr ""
+
+msgid "add a Transition"
+msgstr ""
+
+msgid "add a Workflow"
+msgstr ""
+
+msgid "add a WorkflowTransition"
+msgstr ""
+
 # subject and object forms for each relation type
 # (no object form for final relation types)
 msgid "add_permission"
--- a/server/sources/native.py	Wed Feb 25 17:13:46 2015 +0100
+++ b/server/sources/native.py	Thu Mar 12 14:21:36 2015 +0100
@@ -1553,14 +1553,15 @@
     system database in a database independent format. The file is a
     Zip archive containing the following files:
 
-    * format.txt: the format of the archive. Currently '1.0'
+    * format.txt: the format of the archive. Currently '1.1'
     * tables.txt: list of filenames in the archive tables/ directory
     * sequences.txt: list of filenames in the archive sequences/ directory
+    * numranges.txt: list of filenames in the archive numrange/ directory
     * versions.txt: the list of cube versions from CWProperty
     * tables/<tablename>.<chunkno>: pickled data
     * sequences/<sequencename>: pickled data
 
-    The pickled data format for tables and sequences is a tuple of 3 elements:
+    The pickled data format for tables, numranges and sequences is a tuple of 3 elements:
     * the table name
     * a tuple of column names
     * a list of rows (as tuples with one element per column)
@@ -1598,6 +1599,9 @@
             for seq in self.get_sequences():
                 self.logger.info('processing sequence %s', seq)
                 self.write_sequence(archive, seq)
+            for numrange in self.get_numranges():
+                self.logger.info('processing numrange %s', numrange)
+                self.write_numrange(archive, numrange)
             for table in self.get_tables():
                 self.logger.info('processing table %s', table)
                 self.write_table(archive, table)
@@ -1628,12 +1632,16 @@
         return non_entity_tables + etype_tables + relation_tables
 
     def get_sequences(self):
+        return []
+
+    def get_numranges(self):
         return ['entities_id_seq']
 
     def write_metadata(self, archive):
-        archive.writestr('format.txt', '1.0')
+        archive.writestr('format.txt', '1.1')
         archive.writestr('tables.txt', '\n'.join(self.get_tables()))
         archive.writestr('sequences.txt', '\n'.join(self.get_sequences()))
+        archive.writestr('numranges.txt', '\n'.join(self.get_numranges()))
         versions = self._get_versions()
         versions_str = '\n'.join('%s %s' % (k, v)
                                  for k, v in versions)
@@ -1646,6 +1654,13 @@
         serialized = self._serialize(seq, columns, rows)
         archive.writestr('sequences/%s' % seq, serialized)
 
+    def write_numrange(self, archive, numrange):
+        sql = self.dbhelper.sql_numrange_current_state(numrange)
+        columns, rows_iterator = self._get_cols_and_rows(sql)
+        rows = list(rows_iterator)
+        serialized = self._serialize(numrange, columns, rows)
+        archive.writestr('numrange/%s' % numrange, serialized)
+
     def write_table(self, archive, table):
         nb_lines_sql = 'SELECT COUNT(*) FROM %s' % table
         self.cursor.execute(nb_lines_sql)
@@ -1682,10 +1697,13 @@
         archive = zipfile.ZipFile(backupfile, 'r', allowZip64=True)
         self.cnx = self.get_connection()
         self.cursor = self.cnx.cursor()
-        sequences, tables, table_chunks = self.read_metadata(archive, backupfile)
+        sequences, numranges, tables, table_chunks = self.read_metadata(archive, backupfile)
         for seq in sequences:
             self.logger.info('restoring sequence %s', seq)
             self.read_sequence(archive, seq)
+        for numrange in numranges:
+            self.logger.info('restoring numrange %s', seq)
+            self.read_numrange(archive, numrange)
         for table in tables:
             self.logger.info('restoring table %s', table)
             self.read_table(archive, table, sorted(table_chunks[table]))
@@ -1696,11 +1714,12 @@
     def read_metadata(self, archive, backupfile):
         formatinfo = archive.read('format.txt')
         self.logger.info('checking metadata')
-        if formatinfo.strip() != "1.0":
+        if formatinfo.strip() != "1.1":
             self.logger.critical('Unsupported format in archive: %s', formatinfo)
             raise ValueError('Unknown format in %s: %s' % (backupfile, formatinfo))
         tables = archive.read('tables.txt').splitlines()
         sequences = archive.read('sequences.txt').splitlines()
+        numranges = archive.read('numranges.txt').splitlines()
         file_versions = self._parse_versions(archive.read('versions.txt'))
         versions = set(self._get_versions())
         if file_versions != versions:
@@ -1717,7 +1736,7 @@
             filename = basename(name)
             tablename, _ext = filename.rsplit('.', 1)
             table_chunks.setdefault(tablename, []).append(name)
-        return sequences, tables, table_chunks
+        return sequences, numranges, tables, table_chunks
 
     def read_sequence(self, archive, seq):
         seqname, columns, rows = loads(archive.read('sequences/%s' % seq))
@@ -1729,6 +1748,16 @@
         self.cursor.execute(sql)
         self.cnx.commit()
 
+    def read_numrange(self, archive, numrange):
+        rangename, columns, rows = loads(archive.read('numrange/%s' % numrange))
+        assert rangename == numrange
+        assert len(rows) == 1
+        assert len(rows[0]) == 1
+        value = rows[0][0]
+        sql = self.dbhelper.sql_restart_numrange(numrange, value)
+        self.cursor.execute(sql)
+        self.cnx.commit()
+
     def read_table(self, archive, table, filenames):
         merge_args = self._source.merge_args
         self.cursor.execute('DELETE FROM %s' % table)
--- a/web/test/unittest_views_editforms.py	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/test/unittest_views_editforms.py	Thu Mar 12 14:21:36 2015 +0100
@@ -148,6 +148,13 @@
             self.vreg['forms'].select('edition', req, entity=rset.get_entity(0, 0))
             self.assertFalse(any(f for f in form.fields if f is None))
 
+    def test_edition_form_with_action(self):
+        with self.admin_access.web_request() as req:
+            rset = req.execute('CWUser X LIMIT 1')
+            form = self.vreg['forms'].select('edition', req, rset=rset, row=0,
+                                             col=0, action='my_custom_action')
+            self.assertEqual(form.form_action(), 'my_custom_action')
+
     def test_attribute_add_permissions(self):
         # https://www.cubicweb.org/ticket/4342844
         with self.admin_access.repo_cnx() as cnx:
--- a/web/views/autoform.py	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/views/autoform.py	Thu Mar 12 14:21:36 2015 +0100
@@ -732,10 +732,7 @@
 
     @deprecated('[3.18] use form_action()')
     def get_action(self):
-        try:
-            return self._action
-        except AttributeError:
-            return self._cw.build_url(self._default_form_action_path)
+        return self._action
 
 
     @iclassmethod
--- a/web/wdoc/about_en.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/about_en.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -22,4 +22,4 @@
 .. _dublincore: http://dublincore.org
 
 .. _Logilab: http://www.logilab.fr/
-.. _schema: schema
+.. _schema: ../schema
--- a/web/wdoc/about_fr.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/about_fr.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -25,4 +25,4 @@
 .. _dublincore: http://dublincore.org
 
 .. _Logilab: http://www.logilab.fr/
-.. _schéma: schema
+.. _schéma: ../schema
--- a/web/wdoc/add_content_en.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/add_content_en.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -2,7 +2,7 @@
 -----------------
 As manager, you can access to entity creation forms by using the `site management`_ page.
 
-.. _`site management`: manage
+.. _`site management`: ../manage
 
 As regular user, the index page or the action box may propose some links to create entities according to the context.
 
--- a/web/wdoc/add_content_fr.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/add_content_fr.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -2,7 +2,7 @@
 -------------------
 Pour un administrateur, la création des objets est toujours possible directement dans la `page de gestion de site`_.
 
-.. _`page de gestion de site`: manage
+.. _`page de gestion de site`: ../manage
 
 Pour les utilisateurs, la page principale ou la boîte d'action des entités vous permettra la création de nouveaux contenus.
 L'intérêt de la dernière méthode est de faciliter l'édition de la relation entre les objets.
--- a/web/wdoc/advanced_usage_schema_en.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/advanced_usage_schema_en.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -6,4 +6,4 @@
 site is not a content management system with items placed in folders. It is an
 interface to a database which applies a view to retreived data.
 
-.. _schema: schema
+.. _schema: ../schema
--- a/web/wdoc/advanced_usage_schema_fr.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/advanced_usage_schema_fr.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -5,7 +5,7 @@
 
 Commencez d'abord par jeter un œil au schéma_ de l'application, puis essayez de vous rappeler que vous naviguez dans un ensemble de données en appliquant des vues aux résultats de requête. Ce site n'est pas un système de gestion de contenu avec des objets dans des répertoires. C'est une interface vers une base de données qui vous permet d'appliquer une vue aux données récupérées.
 
-.. _schéma: schema
+.. _schéma: ../schema
 
 
 Relation entre les objets
--- a/web/wdoc/bookmarks_fr.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/bookmarks_fr.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -27,4 +27,4 @@
 ayez le droit de les modifier.
 
 
-.. _`préférences utilisateurs`: myprefs
+.. _`préférences utilisateurs`: ../myprefs
--- a/web/wdoc/custom_view_en.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/custom_view_en.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -6,10 +6,10 @@
 preferences`_). Once you're satified, add a `bookmark`_ if you want to reuse
 this view later.
 
-.. _`RQL tutorial`: doc/tut_rql
-.. _`schema`: schema
-.. _`user preferences`: myprefs
-.. _`bookmark`: doc/bookmarks
+.. _`RQL tutorial`: tut_rql
+.. _`schema`: ../schema
+.. _`user preferences`: ../myprefs
+.. _`bookmark`: bookmarks
 
 
 Below are some example of what can be acheived...
--- a/web/wdoc/custom_view_fr.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/custom_view_fr.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -9,10 +9,10 @@
 utilisateur`_). Une fois que vous êtes satisfait, ajoutez un `signet`_ si vous
 voulez réutiliser votre vue plus tard.
 
-.. _`tutoriel RQL`: doc/tut_rql
-.. _`schéma`: schema
-.. _`préférences utilisateur`: myprefs
-.. _`signet`: doc/bookmarks
+.. _`tutoriel RQL`: tut_rql
+.. _`schéma`: ../schema
+.. _`préférences utilisateur`: ../myprefs
+.. _`signet`: bookmarks
 
 
 Ci-dessous quelques exemples de ce que l'on peut faire...
--- a/web/wdoc/custom_view_last_update_en.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/custom_view_last_update_en.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -5,4 +5,4 @@
 
 Links below is providing useful RQL query example.
 
-.. _all latest changes: view?rql=Any+M%2CX+WHERE+X+modification_date+M+ORDERBY+M+DESC+LIMIT+30
+.. _all latest changes: ../view?rql=Any+M%2CX+WHERE+X+modification_date+M+ORDERBY+M+DESC+LIMIT+30
--- a/web/wdoc/custom_view_last_update_fr.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/custom_view_last_update_fr.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -6,5 +6,5 @@
 * la table des `derniers changements`_ fournit un exemple d'utilisation de RQL
   pour récupérer les derniers changements ayant eu lieu sur ce site.
 
-.. _`derniers changements`: view?rql=Any+M%2CX+WHERE+X+modification_date+M+ORDERBY+M+DESC+LIMIT+30
+.. _`derniers changements`: ../view?rql=Any+M%2CX+WHERE+X+modification_date+M+ORDERBY+M+DESC+LIMIT+30
 
--- a/web/wdoc/custom_view_rss_en.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/custom_view_rss_en.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -10,5 +10,5 @@
 an RSS reader into that and follow the site activity. For example :
 
 :raw-html:`<p><a class="reference"
-href="view?vid=rss&amp;rql=Any+X%2CM+WHERE+X+modification_date+M+ORDERBY+M+DESC+LIMIT+30"><img
-alt="rss" src="data/rss.png"> latest changes</a></p>`
+href="../view?vid=rss&amp;rql=Any+X%2CM+WHERE+X+modification_date+M+ORDERBY+M+DESC+LIMIT+30"><img
+alt="rss" src="../data/rss.png"> latest changes</a></p>`
--- a/web/wdoc/custom_view_rss_fr.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/custom_view_rss_fr.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -13,6 +13,6 @@
 derniers changements sous forme de flux RSS:
 
 :raw-html:`<p><a class="reference"
-href="view?vid=rss&amp;rql=Any+X%2CM+WHERE+X+modification_date+M+ORDERBY+M+DESC+LIMIT+30"><img
-alt="rss" src="data/rss.png"> latest changes</img></a></p>`
+href="../view?vid=rss&amp;rql=Any+X%2CM+WHERE+X+modification_date+M+ORDERBY+M+DESC+LIMIT+30"><img
+alt="rss" src="../data/rss.png"> latest changes</img></a></p>`
 
--- a/web/wdoc/search_en.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/search_en.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -10,4 +10,4 @@
 * `rql` : RQL query
 * `text` : full text search
 
-.. _RQL: doc/tut_rql
+.. _RQL: tut_rql
--- a/web/wdoc/search_fr.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/search_fr.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -11,5 +11,5 @@
 * `rql` : requête RQL
 * `text` : recherche plein texte
 
-.. _RQL: doc/tut_rql
+.. _RQL: tut_rql
 
--- a/web/wdoc/tut_rql_en.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/tut_rql_en.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -20,7 +20,7 @@
 knowledge of the application'schema. You can always view it using the "schema"
 link in user's dropdown menu (on the top-right of the screen) or by clicking here_.
 
-.. _here: schema
+.. _here: ../schema
 
 
 Some bits of theory
--- a/web/wdoc/tut_rql_fr.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/tut_rql_fr.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -24,7 +24,7 @@
 boîte affichée en cliquant sur le lien de l'utilisateur connectée (en haut à droite).
 Vous pouvez également le voir en cliquant ici_.
 
-.. _ici: schema
+.. _ici: ../schema
 
 
 Un peu de théorie
--- a/web/wdoc/userprefs_en.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/userprefs_en.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -7,4 +7,4 @@
 preferences" link in this menu. This will show you a form to configure which
 boxes are displayed, in which order, etc...
 
-.. image:: doc/images/userprefs
+.. image:: images/userprefs
--- a/web/wdoc/userprefs_fr.rst	Wed Feb 25 17:13:46 2015 +0100
+++ b/web/wdoc/userprefs_fr.rst	Thu Mar 12 14:21:36 2015 +0100
@@ -6,7 +6,7 @@
 personnelles (y compris le mot de passe d'accès à l'application).
 
 Chaque utilisateur peut également personaliser l'apparence du site via le lien
-"préférences utilisateur"_. Ce formulaire permet notamment de configurer les
+`préférences utilisateur`_. Ce formulaire permet notamment de configurer les
 boîtes qui seront affichées, leur ordre, etc...
 
 L'administrateur possède quant à lui un menu "configuration du site" qui reprend l'ensemble des préférences utilisateurs mais les applique par défaut au site.
@@ -42,6 +42,6 @@
 
 Il est alors possible d'éditer et de relancer toute requête
 
-.. _"préférences utilisateur: myprefs
-.. _RQL: doc/tut_rql
-.. image:: doc/images/userprefs
+.. _`préférences utilisateur`: ../myprefs
+.. _RQL: tut_rql
+.. image:: images/userprefs