summaryrefslogtreecommitdiff
path: root/addons/web_editor/controllers
AgeCommit message (Collapse)Author
2021-03-25[FIX] web_editor: prevent mismatch between mimetype and content typeRomain Derie
Since the image util method `image_base64()` is converting BMP images to PNG automatically[1], there would be a mismatch between the attachment content type and the attachment mimetype. - Content type: retrieve with `base64_to_image(data).format` -> return PNG as the image data was converted from BMP to PNG - Mimetype: set on `write()` and `create()` with `_check_contents()` which call `mimetypes.guess_type(file_name)`. BMP image `my_file_image.bmp` would have a mimetype set to BMP The computed field `image_src` would return `False` since the image.mimetype would be BMP, making the dialog picker not showing the image but loading `http://localhost:8069/false` instead. [1] https://github.com/odoo/odoo/blame/097f29d0f6a5b295c81fd074665dbd261eaf12fb/odoo/tools/image.py#L124 task-2345082 Coming from #65828 Closes #68326 X-original-commit: ef5b108b781df73342bb99342a1116fad86d3b58
2021-01-06[FIX] web_editor, *: review `public_render_template`Benoit Socias
*: website, base The normal flow to render a template is now to use `render_public_asset` which bypasses the read access rights if the user matches the groups the view declares. For public users, we still cannot use that as they do not have access to calling model methods at all. The route `public_render_template` is thus still needed, but it should use the `render_public_asset` util. In master, it will only rely on it but as a stable fix, we still need to use the whitelist as we cannot change the related views' group. This commit also adds deprecated comments to the read_template method which has been removed in master. Related to task-2412544 closes odoo/odoo#64137 Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
2020-11-02[FIX] web_editor: fix gap between transformed shape and next sectionSamuel Degueldre
Previously, when flipping some shapes vertically on chrome, and vertically or horizontally on firefox, there was a gap of 1px or less at some screen widths. This is caused by the way these browsers render backgrounds on transformed elements. It seems like firefox will round the size of the element to render the background image on it if the element is transformed, while chrome will always render the background at the correct size (or render it at a larger size and clip it to the correct size after the fact), but will round the coordinates of the symmetry point, causing only the vertical flip to have this issue, and only if the background image would not extend beyond the bounds of the element (on firefox, even shapes that would extend beyond the bounds of the element would showcase a gap, eg origins 1) This commit fixes that by applying the transform to the SVG rather than to the element, by use of the shapes controller. task-2369560 closes odoo/odoo#61114 Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
2020-10-29[FIX] web_editor: fix issues related to loading image infoSamuel Degueldre
In order to allow modifying background images, we need information on the image, this is done by creating a placeholder img and calling the loadImageInfo function on it. However this function did not account for the case where an image had not src attribute, which causes an unnecessary rpc. Other problems could arise from this as an attachment that doesn't have the correct mimetype but has a matching src could be returned, causing its image_src field to be false, which we would then attempt to load as a valid image, causing crashes. This commit fixes that by not trying to load image infos when the src of an image is empty, only looking for attachments of the supported mimetypes, and also checking that we actually did receive an image_src before setting it as the original src of the image, which will prevent accidentally trying to load a falsy src as an actual image. closes odoo/odoo#60953 Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
2020-09-16[IMP] web_editor, *: make media-dialog search odoo media-librarySamuel Degueldre
*: website, web_unsplash, website_blog We have recently created an odoo media library that exposes a public API for searching for open-source media, including dynamic SVGs that can be used with the dynamic background-shape system to create illustrations whose colors can be changed by the user. This commit adds the corresponding client-side functionalty: search for the images in the media-library, creating a corresponding attachment when selected, as well as an option to customize the colors of the dynamic SVGs. In the process, adaptations have been made in the web_unsplash module to avoid duplicating code and to adapt code that was making assumptions that are no longer valid. To make new users more aware of this feature, all default images have been hidden from the media-dialog, so that the user is prompted so search for images. Some tests and tours that were relying on having default images in the media-dialog (eg in website_blog) have been adapted to match. task-2316651 Linked to: odoo/iap-apps#235 closes odoo/odoo#56479 Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
2020-08-13[FIX] web_editor: Multi-company error when adding image to task descriptionNasreddin (bon)
Issue - Select "My Company (Chicago)" as current company - Open "Projects" module - Create a new Task - Edit description, upload a new Image and add it to description. Multi-company error "Write" on project.task . In frontend, can optimize uploaded picture. Causes Wrong "allowed_company_ids" value in context. Solution Remove allowed companies from context to avoid allowed_company_ids which may erroneously restrict based on website. opw-2304511 closes odoo/odoo#55897 X-original-commit: 8f6506a57853040d065569fdd60f9d94be8e26e1 Signed-off-by: Nicolas Lempereur (nle) <nle@odoo.com> Signed-off-by: bon-odoo <nboulif@users.noreply.github.com>
2020-08-07[IMP] web_editor, website: add background shapes snippet optionSamuel Degueldre
This commit adds a new snippet option allowing the user to choose one of a series of SVG shapes as their background, or to be overlaid over the background image of a snippet and to customize the colors of those shapes. Part of https://github.com/odoo/odoo/pull/53017 task-2210790 closes odoo/odoo#53017 Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
2020-06-22[FIX] web_editor: fix traceback when clicking on website logo in editSamuel Degueldre
When clicking on an image in edit mode, the web editor attempts to find an attachment that corresponds to the image's URL. In the case of the website logo, the URL looks like it's referencing an attachment by id or xml-id, but it's actually neither. This cause a variable to never be initialized, which in turns causes a traceback when trying to access it later. This commit fixes that by always initializing attachment to None. closes odoo/odoo#53418 X-original-commit: 790e33de190392b937e21c73905db4d48cfb86aa Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
2020-06-05[IMP] web_editor, *: move image optimization feature to left-panelSamuel Degueldre
*: website, mass_mailing In continuity with the nline crop, in an effort to make the image workflow as seamless as possible in the website editor, the image optimization feature has been moved out of the modal which could be opened through the media-dialog and into the left panel. This commit adds a quality slider and a width selector, as well as a preview of the image's weight to the left panel, and removes the image_optimize dialog. This commit also introduces the possibility to add a color filter on images. Part of https://github.com/odoo/odoo/pull/51517 task-2192755 closes odoo/odoo#51517 Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
2020-06-05[IMP] web_editor, *: change image cropping from modal to inline widgetSamuel Degueldre
*: base Previously, cropping an image was done inside of a modal window, turning it into an inline widget makes the editor feel more integrated and allows you to better see the result of cropping directly in the page, it's also less intrusive to the user's edition workflow. At the same time, the way cropped images are saved was refactored to use the new original_id field on ir_attachment, as the old system was creating problems. Part of https://github.com/odoo/odoo/pull/51517 task-2192755
2020-06-05[REF] web_editor: remove relics of filter featureSamuel Degueldre
Previously, the media-dialog had a "filter" feature, where when changing a background image for example, all backgrounds would show first in the media-dialog. However, because this required to load all public attachments in the database it was causing issues and was removed. The backend code for this feature however was unfortunately forgotten, this commit removes that code. Part of https://github.com/odoo/odoo/pull/51517
2020-05-14[IMP] *: convert to private methodsMartin Trigaux
render, render_template, load, activity_schedule_with_view, get_website_pages should all be private: It should not be possible to render an aribtrary template only with its name or id Still need to render some qweb views from js so the method render_template is kept public. This explains why the website editor still need read access on ir.ui.view as we want to allow any snippet to be rendered.
2020-04-10[FIX] web, web_editor: allow editor instantiation from public userqsm-odoo
If for some reason someone wanted to develop a textarea using the editor which is supposed to work as a public user (like we are trying to do on Odoo.com), it was not possible. The code was "designed" to allow it but there was one problem: the lazy loading of the editor assets required a `render_template` call to the server... which cannot be done from a public user. This commit solves the issues by allowing the lazy loading of assets to use a custom route if required. That route is then used by the editor "root". That route performs the render_template as a superuser provided that the view's xmlid is whitelisted. Note: there was another unauthorized call for public user: the colorpicker. This was solved by disabling the colorpicker template rpc for public user, they will still get the default summernote one. Part of https://github.com/odoo/odoo/pull/48981 closes odoo/odoo#48981 closes odoo/odoo#49398 X-original-commit: e84a0bfdc99c21406861b88c02b11c925d92f927 Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
2020-03-30[IMP] web_editor: improve image optimization workflow in media dialogSamuel Degueldre
Previously, when selecting an image, the user could optimize their images by clicking a little cog icon in the media dialog. They would also be prompted to optimize their images when uploading them. In most cases, it makes a lot more sense to always save the original in the database, and optimize the original whenever it's dropped in the page automatically. A second problem is that when using the optimization feature, optimized images would be displayed along the originals by default, resulting in a lot of duplicates while browsing the media dialog. This commit changes both of these things: - By default, when uploading an image, the original uploaded image is used. The user can still optimize their image manually through the media-dialog by using the cog icon. When choosing an image in the media-dialog, if it's not already an optimized image, an optimized copy is automatically created and used instead. - Optimized images are now hidden by default, in the media dialog, and can be shown by clicking a checkbox at the top of the modal when in debug mode task-2091417 closes odoo/odoo#45174
2019-12-09[REV] web: reverts update to fontawesome 5.11.2Kevin Baptiste
This reverts commit ff1c35513aecef5fbc30f7c2f3834450e719714e. closes odoo/odoo#41480 X-original-commit: 116057b26e71db4692280463669f3e80d813ddcc Related: odoo/enterprise#7110 Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
2019-11-28[IMP] web: update to fontawesome 4.7.0 to 5.11.2Kevin Baptiste
FontAwesome 5 introduced new names for some icons as described on https://fontawesome.com/how-to-use/on-the-web/setup/upgrading-from-version-4#name-changes This commit replaces the old names to the new ones. closes odoo/odoo#35826 Taskid: 2050241 Related: odoo/enterprise#5180 Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
2019-09-18[FIX] tools: use user friendly message in case of errorRomainLibert
closes odoo/odoo#37058 Signed-off-by: Nans Lefebvre (len) <len@odoo.com>
2019-09-19[FIX] web_editor: checkbox without text change can now be checkedGorash
2019-09-19[FIX] web_editor: recursive checkbox checkGorash
In multi-level checkboxes, if there is only one checkbox per level, the expected behavior is that all checkbox will be checked if one of them is checked. This was not the case before this commit.
2019-08-21[REF] web_editor, website: adapt wysiwyg to 12.0 editorGorash
The wysiwyg abstraction layer was introduced in saas-12.2 by commit f2969923. Its goal was to provide an external interface for other modules that wanted to use the editor feature such that the editor core itself could be changed without requiring extensive changes in the other modules. This commit is adapting the wysiwyg interface to instantiate the 12.0 editor below it rather than the saas-12.2 one, thus reverting the "new editor" part of f2969923 itself. Part of PR 35677. Co-authored-by: Nicolas Bayet <nby@odoo.com> Co-authored-by: Antoine Guenet <age@odoo.com> Co-authored-by: Christophe Matthieu <chm@odoo.com> Co-authored-by: David Monjoie <dmo@odoo.com>
2019-06-04[IMP] web, web_editor, *: add media image optimize dialogSébastien Theys
* = website, website_blog The goal is to give the user an opportunity to optimize his images before using them. For this we introduce a preview/configuration dialog after every image upload, where appropriate default values are filled for the quality and resolution, based on where the image is going to be used. Since this is not going to be perfect all the time, we still allow the user to configure them, and we display a preview to ease this process. Indeed it is important for SEO and for usability in general that the images are as light as possible in size. Technically the original image is uploaded and saved first, and then it can be optimized. This way the upload only happens once, and the preview can be computed from the already saved image. task-1930726 PR: #31208
2019-06-04[IMP] web_editor, *: improve media dialog attachment uploadSébastien Theys
* = web_unsplash, website Remove iframe upload and replace it with a proper RPC. The route is now only accepting one file at a time, which makes it easier to maintain, and allows to process the first file as soon as it is ready, instead of having to wait on everything. Also fix a bug where a document could not be uploaded because it would try to parse it as an image. Remove filter after search result from the JS and add the corresponding conditions in the domain to avoid processing and returning unnecessary records. If multiple attachments exist with the same URL, now display them all to avoid confusion. Compute all the necessary values in the python model instead of in the JS. Allow SVG in the widget (the server already accepted them before). Disable multiple image upload when not in multiImages mode. task-1930726 PR: #31208
2019-06-04[IMP] web_editor, *: improve file media widget views & selectionSébastien Theys
* = web_unsplash, website_blog Rename "image" to "attachment" when appropriate in FileWidget Improve image selection / highlight code (now based on attachment id) Improve image grid view: - Remove the row mechanism and replace it by a single loop over the images. - Take advantage of row wrap for a responsive display. - Uniformize the height (prevent tall images from moving down everything). - Load a miniature of the images when possible, remove the loading placeholder. This should significantly reduce the download size when opening the dialog, at the cost of CPU usage on the server. - Split the existing image view into one view for the loop and one view for the image itself. This way in a following commit we can reuse the image view when adding a new one, instead of having to render everything again. task-1930726 PR: #31208
2019-04-29[IMP] tools,base,*: remove intermediary image functionsSébastien Theys
* = hr, im_livechat, mail, payment, purchase, web, web_editor, web_unsplash, website_profile, website_slides Since the merge of all image tools into one function, the intermediary functions are not needed anymore. task-1958000 PR: #31811
2019-04-29[IMP] tools,web_editor,web_unsplash: improve image optimize for webSébastien Theys
This commit introduces the possibility to resize and to select the quality when optimizing an image for web. This will be used by the media dialog in a future commit. The arbitrary resolution limit of 42e6 has been increased to 45e6 to fit some of the biggest images we might get from Unsplash, and this value has been moved into a variable so it can be customized. The mimetype computation has been moved after the image processing because in a next commit the operation could return the image in a different format than what was originally given. Eg. BMP -> PNG, or unsupported format -> JPEG. task-1958000 PR: #31811
2019-02-15[REF] web_editor, website: remove useless codeqsm-odoo
Commit https://github.com/odoo/odoo/commit/29075a8e2c734624cec4f6009185616634f70dea introduced some python methods which became useless with commit https://github.com/odoo/odoo/commit/aef6a5aaed22b250799ce92b5021d240fed9e12e They were not removed with that commit since it was a stable version and because it would have made forward-port difficult because of master tasks. Now that those tasks are merged, this commit removes the useless methods.
2019-02-08[IMP] website, *: optimize scss customizationsqsm-odoo
* web_editor This commit's goal is to optimize the delay to make a scss customization thanks to the website customize dialog. Before this commit, the JS code took advantage of existing web_editor routes but this was far from efficient as this was done: 1) PY: Load all scss files used in the page 2) JS: Find the one we want to customize and adapt the scss content 3) PY: Create the scss customization with the new content (So two RPC (including one very slow) and content building in javascript) After this commit, this is done: 1) PY: Load the scss file being customized, adapt its content according to the new values and save the customization (So the whole logic is in python, requiring only one small RPC) This commit also take the opportunity to review the web_editor ace editor loading code (the logic is shared with website customizations). PR https://github.com/odoo/odoo/pull/29624 task-1904244
2019-02-05[IMP] website, *: improve CSS edition usability + add JS editionAndrea Ulliana
* web_editor Currently, when an user wants to edit the css of its website, he has access to lots of files and, in debug mode, to even more files. While the feature is nice for people who know what they are doing, a lambda person can easily break its website by changing the wrong files. Also, nothing warns the user that the files that are edited will never receive updates anymore (unless if they are reset). The goal is to prevent those behavior while still allowing the add custom css. Another goal is to be able to *add* custom javascript. Custom files created for the user: SCSS: user_custom_rules.scss, user_custom_bootstrap_overridden.scss JS: user_custom_javascript.js See https://github.com/odoo/odoo/pull/29999 task-1919350
2019-02-04[MERGE] forward port branch saas-12.1 up to 4524ad06a8aChristophe Simonis
2019-01-31[MERGE] forward port branch 12.0 up to cb8fefa8999Christophe Simonis
2019-01-29[FIX] web_editor, website: consider COW view when loading viewRomain Derie
Before this commit: 1. If we were editing a template with no xml_id, typically the case when editing a specific view (COW'd), the 'Template ID' label would be left empty as the view does not have an xml_id but only a key. 2. If we were editing a generic view, the template would be COW'd and replaced by the specific one created during the save. After the save, the page would be reload and will try to reopen the edited template (stored in url `res=123`). But as this template would be replaced by the COW'd view, the JS would crash trying to access an inexisting view. The HTML editor would then open in a very thin modal, barely editable. Now: 1. Display the template's key instead of its xml_id. The key is basically a duplicate of the xml_id, mainly used in website. 2. If we are saving a generic view, we search for its newly created specific view to upload the URL hash before reloading. task-1934279 Fix #30447
2019-01-29[MERGE] forward port branch saas-11.3 up to cd5c8a02f95Christophe Simonis
2019-01-29[MERGE] forward port branch 11.0 up to 36d96e01503Christophe Simonis
2019-01-23[MERGE] forward port branch 11.0 up to 984a99611eeChristophe Simonis
2019-01-17[MERGE] forward port branch 11.0 up to 19558129f0eChristophe Simonis
2019-01-25[MERGE] forward port branch saas-11.3 up to 387d5cff90bChristophe Simonis
closes odoo/odoo#30566
2019-01-17[FIX] web_editor: save less fileJulien (juc) Castiaux
Modifying less files and saving them using the web editor can raise and error. The error is due to the way odoo save the modified file. It extends the view containing the URL of the file by filtering views related to the xml bundle id and keeping those that have the said URL in their content. This lookup fails to give just one result in case there are multiple file containing the said URL. This fix change the filter from a bare `if url in view.arch` to a correct xpath lookup. The "/web/static/src/variables.less" less file was one of the problematic files. opw-1889794 closes odoo/odoo#30186
2019-01-21[FIX] web_editor: restore less files editionqsm-odoo
Broken by https://github.com/odoo/odoo/pull/30186 closes odoo/odoo#30403
2019-01-18[MERGE] forward port branch saas-11.3 up to 4aa153e65cfChristophe Simonis
2019-01-18[MERGE] forward port branch 12.0 up to f854e01a983Christophe Simonis
2019-01-28[FIX] web_editor: use default value for html fields of new recordsKishan Gajjar
While creating a new record, the default value of a field used with the 'html_frame' field widget was not used. Discovered with task-1903256 closes odoo/odoo#28838
2018-11-29[REM] pycompat: remove python 2 shims and helpersAdrian Torres
Odoo no longer supports python 2, thus some of these helpers can and have been replaced by python 3 built-ins, therefore there is no need for them to stay defined. The removed helpers are: * izip, imap and ifilter * unichr, text_type * implements_to_string, implements_iterator * string_types, integer_types * to_native The python 2 shims have also been removed, and only the python 3 helpers have been kept, because they can still be usable (i.e. accepting both bytes and str for functions that can only accept one of the two) [REM] pyjsparser: remove PY3 shims They're no longer necessary as Odoo doesn't officially support python 2 anymore. closes odoo/odoo#28519
2018-11-29[REF] *: replace deprecated pycompat helpers for builtinsAdrian Torres
This commit replaces calls to pycompat helpers that were intended for python 2 <-> python 3 interoperability for python 3 builtins, as python 2 is no longer officially supported by Odoo. This includes: * calls to imap/izip/ifilter replaced by map/zip/filter * uses of text_type replaced by str * uses of unichr replaced by chr * calls to implements_to_string, implements_iterator removed * string_types and integer_types replaced by str, int respectively * calls to to_native replaced by calls to to_text This is done in preparation to the removal of these deprecated helpers in the following commit.
2019-01-28[MERGE] forward port branch saas-12.1 up to d3b8422c9c4Christophe Simonis
closes odoo/odoo#30614
2019-01-17[IMP] web_editor,*: Refactoring the wysiwyg editor and 'html' fieldChristophe Matthieu
* Creating a new structure by transforming all the plugins in the library using the odoo inheritance system. Plugins are easier to implement with the AbstractPlugin to add Odoo behaviors. * From now on, the methods of the library (in this case Summernote) can no longer be called by other modules or files. Only the wysiwyg widgets can access it, to simplify the updating process. The wysiwyg object serves as an interface. * Depending on the options the snippets will be loaded or not, the editor will be in an iframe or not... all of this is transparent from the outside. * Regarding iframes, all controllers related to editing have been removed: the new API no longer needs them. This speeds up loading, eases testing and removes complexity for the same features. PUBLIC FEATURES There are several public methods on the Wysiwyg class: * Wysiwyg.prepare (WidgetParent): returns a deferred resolved when the library (xml, lazy, assets...) is loaded. * Wysiwyg.getRange (DOM): returns the range (selection in the dom) * Wysiwyg.setRange (startNode, startOffset, endNode, endOffset): creates a range (selection in the dom) * Wysiwyg.setRangeFromNode (DOM, options) that creates a range from an element (option available to select all, start or end) A jQuery selector was added: :o_editable, which indicates whether the current element is editable. That is, if it is contained in a tag with the attribute 'contentEditable = "true"' or in a tag with the class o_editable. Several methods are also present: * focusIn: makes a focus and places the cursor at the beginning of the element * focusInEnd: makes a focus and places the cursor at the end of the element * selectContent: makes a focus and selects the content HTML FIELD The HTML field can receive different options: * style-inline: {boolean} transforms a class into an inline style when saving and vice versa when reading. * no-attachment: {boolean} prevents the use of attachments (in media dialog) * cssEdit: {xml_id} to use a template containing the css to loaded in an iframe when editing * cssReadonly: {xml_id} to use a template containing the css to load into an iframe when viewing in readonly * snippets: {xml_id} snippets template (can be used with or without cssEdit) * wrapper: {template} qweb static template (containing a tag: id = "wrapper") that will include the content during editing (removed on save) MASS MAILING A widget was created for mass mailing. There are now two fields: body_html and body_arch. body_arch contains the code with the class without conversion into inline style, useful when editing and one with the inline style that is visible in readonly mode and sent by email. Advantage: no spreading errors, able to update css/theme, able to do more changes when converting to inline style so that a maximum of mail clients have an impeccable rendering. Co-authored-by: Antoine Guenet <age@odoo.com>
2018-10-10[FIX] web_editor, *: allow cropping all theme imagesqsm-odoo
* base, website An image URL may be like "/web/image/<xml_id>" where <xml_id> is the xml id of an ir.attachment. In fact, the route does not use the xml_id but the 'key' field, which is normally equal to the xml_id for standard attachment. In the context of themes + multi-website, the value used as an xml_id may refer to a theme.ir.attachment instead of an ir.attachment and this led to a bug as those must not be used the same way. The crop route which gets image information is adapted by this commit to always look for the *current website* *ir.attachment* related to the given xml_id/key. Thanks to @kig-odoo for spotting the issue. Closes https://github.com/odoo/odoo/pull/27588 closes odoo/odoo#27611
2018-09-30[REF] website, *: add automatic context for call_kw rpcqsm-odoo
* web_editor, website_blog, website_crm_partner_assign, website_links, website_livechat, website_mail_channel, website_mass_mailing, website_slides Calling a model's method thanks to an RPC will now always send the web_editor context automatically, making sure the method gets the website_id all the time, removing the need to guess the current website (now the get_current_website method uses the context website_id if any). Note: other routes already have the website_id via request.env.context if they correctly set website=True (this commit also adds website=True for scss files customization routes).
2018-09-27[FIX] website, *: restore color edition in theme dialogqsm-odoo
* base, web_editor Commit https://github.com/odoo/odoo/commit/44d659d0df6b50ae230af39a0d41a46b9549e2ae made the system work with multi-website but fetching the assets content was unfortunately not working in multi-website... Also restore correct search operators.
2018-09-25[FIX] web_editor,website: add hook method in web editor to allow to add the ↵Jeremy Kersten
website_id Before this commit, the view create by editor (to change the scss file in asset for example) was not website specific. Now we override (use the new hook method) to add the website_id.
2018-08-31[FIX] base,website,web_editor: handle key field on ir.ui.view for multi websiteRomain Derie
With multi-websites, we expect qweb views to have a key set as it is the key that is used to find duplicates (two views with same keys are duplicate, the one with a website_id set is more specific than the one without a website_id) Thus, 5ff87e803967 sort on key in order to find the most suitable one. It would crash if a qweb view is created without a key (False) as it can't sort `bool` and `str`. This commit: - Adds a generated key to scss views - Adds an SQL constraint to avoid QWeb views without a `key` - Generates a random key when creating a QWeb view without a `key` - Handle False key in `filter_duplicate()` by extracting views with False key before sorting, and then adding these views to the recordset Note: We also want the key to be editable as it is now an important field with multiwebsite. Thus, we removed the readonly on this field. + fix python tests as we now force key on qweb views with sql constraint + pep8