Skip to content
Snippets Groups Projects
  1. Aug 06, 2023
  2. Jul 30, 2023
  3. Jul 23, 2023
  4. Jul 09, 2023
  5. Jul 02, 2023
  6. Jun 18, 2023
  7. Jun 08, 2023
  8. Jun 04, 2023
  9. May 25, 2023
    • Jeremy Kersten's avatar
      [FIX] http_routing, utm, website: set expiration date on some cookies · 058e0abc
      Jeremy Kersten authored
      
      The 'frontend_lang' cookie is used to 'cache' the user's preferred lang.
      We want to make sure that this language preference is preserved for a
      longer period of time than just the life of the browser. This means that
      even if you quit your browser and come back into the year, your
      preferred language will be used, until you choose to remove your cookies.
      
      The 'utm_*' cookies are used to 'track' where you are coming from on the
      instance. The purpose of these cookies is to know the tracking value
      to improve the overall user experience or compute the profitability of
      some campaigns. Now we keep these cookies for 1 month.
      
      closes odoo/odoo#122295
      
      Signed-off-by: default avatarRomain Derie (rde) <rde@odoo.com>
      058e0abc
  10. May 14, 2023
  11. May 07, 2023
  12. Apr 26, 2023
  13. Apr 16, 2023
  14. Apr 09, 2023
  15. Apr 02, 2023
  16. Mar 05, 2023
  17. Feb 15, 2023
  18. Feb 13, 2023
  19. Feb 09, 2023
  20. Feb 05, 2023
  21. Jan 29, 2023
  22. Jan 22, 2023
  23. Jan 15, 2023
  24. Jan 08, 2023
  25. Jan 01, 2023
  26. Dec 25, 2022
  27. Dec 18, 2022
  28. Dec 04, 2022
  29. Nov 27, 2022
  30. Nov 21, 2022
  31. Nov 20, 2022
  32. Nov 14, 2022
    • Julien Castiaux's avatar
      [FIX] http_routing: should redirect only for multilang · be7a0291
      Julien Castiaux authored
      
      Define a route that is website but not multilang, e.g.
      
          @route('/example', website=True, multilang=False)
      
      Login to the frontend, change the website lang to another (non-default)
      lang (e.g. install french, keep english as default lang, log in the
      french website) then access the '/example' controller by typing it
      directly in your address bar.
      
      You are being redirected to '/fr/example', you should not.
      
      This commit restore the behavior pre-httpocalypse, that is the address
      is kept as-is.
      
      Note: in the comment, the 4th and 5th cases were inverted, we use this
      commit as an opportunity to reorder the two.
      
      closes odoo/odoo#104999
      
      X-original-commit: 09dfb1af717cad4281ea0eefbecbe859751ed1bf
      Signed-off-by: default avatarJulien Castiaux <juc@odoo.com>
      be7a0291
  33. Nov 13, 2022
  34. Oct 30, 2022
  35. Oct 23, 2022
  36. Oct 16, 2022
  37. Oct 09, 2022
  38. Oct 02, 2022
  39. Sep 25, 2022
  40. Sep 15, 2022
    • Chong Wang (cwg)'s avatar
      [IMP] core: store translated fields as JSONB columns · ef00294e
      Chong Wang (cwg) authored
      
      Translated fields no longer use the model ir.translation.  Instead they store
      all their values as JSON, and store them into JSONB columns in the model's
      table.  The field's column value is either NULL or a JSON dict mapping language
      codes to text (the field's value in the corresponding language), and must
      contain an entry for key 'en_US' (as it is used as a fallback for all other
      languages).  Empty text is allowed in translation values, but not NULL.
      
      Here are examples for a field with translate=True:
      
          NULL
          {"en_US": "Foo"}
          {"en_US": "Foo", "fr_FR": "Bar", "nl_NL": "Baz"}
          {"en_US": "Foo", "fr_FR": "", "nl_NL": "Baz"}
      
      Like before, writing False to the field makes it NULL, i.e., False in all
      languages.  However, writing "" to the field makes its value empty in the
      current language, but does not discard the values in the other languages.
      
      Here are examples for a field with translate=xml_translate:
      
          NULL
          {"en_US": "<div>Foo<p>Bar</p></div>", "fr_FR": "<div>Fou<p>Barre</p></div>"}
      
      Change for callable(translate) fields: one can now write any value in any
      language on such a field.  The new value will be adapted in all languages, based
      on the mapping of terms between languages in the old values.  Basically the
      structure of the value must remain the same in all languages, like before.
      
      Reading a translated field is now both simpler and faster than the former
      implementation.  We fetch the value of the field in the current language by
      coalescing its value with the 'en_US' value of the field:
      
          SELECT id, COALESCE(name->>'fr_FR', name->>'en_US') AS name ...
      
      The raw cache of the field contains either None or a dict which is conceptually
      a subset of the JSON value in database (except for missing languages).  For the
      sake of simplicity, most cache operations deal with the dict and return the text
      value in the current language.
      
      Trigram indexes have been adapted to the new storing strategy, and should enable
      to search in any language.  Before this change, only the source value of the
      field ('en_US') could be indexed.
      
      Computed stored translated fields are not supported by the framework, because of
      the complexity of the computation itself: the field would need to be computed in
      all active languages.  We chose to not provide any hook to compute a field in
      all languages at once, and the framework always invokes a compute method once to
      recompute it.
      
      Code translations are no longer stored into the database.  They become static,
      and are extracted from the PO files when needed.  The worker simply uses a cache
      with extracted code translations for performance.  This is reasonable, since
      fr_FR code translations for all modules takes around 2MB of memory, and the
      cache can be shared among all registries in the worker.  Changing code
      translations requires to update the corresponding PO file and reloading the
      worker(s).
      
      Performance summary:
       (+) reading 'model' translated fields is faster
       (+) reading 'model_terms' translated fields is much faster (no need to inject
           translations into the source value)
       (+) searching translated fields with operator 'ilike' is much faster when the
           field is indexed with 'trigram'
       (+) updating translated fields requires less ORM flushing
       (-) importing translations from PO files is 2x slower
      
      Some extra fixes:
       - make field 'name' of ir.actions.actions translated; because of the PG
         inheritance, this is necessary to make the column definition consistent in
         all models that inherit from ir.actions.actions.
       - add some backend API for the web/website client for editing translations
       - move methods get_field_string() to model ir.model.fields
       - move _load_module_terms to model ir.module.module
       - adapt tests in test_impex, test_new_api
       - because env.lang is injected into SQL queries, its returned value is
         now guaranteed to correspond to a valid active language or None
       - remove wizard to insert missing translations (no longer makes sense)
      
      task-id: 2081307
      
      Co-authored-by: default avatarFabien Pinckaers <fp@openerp.com>
      Co-authored-by: default avatarRaphael Collet <rco@odoo.com>
      ef00294e
Loading