[MERGE] Merged with server/trunk.

bzr revid: tde@openerp.com-20120814152128-s1pstrcc38j89p4z
This commit is contained in:
Thibault Delavallée 2012-08-14 17:21:28 +02:00
commit d669073fc3
41 changed files with 374 additions and 185 deletions

View File

@ -4,7 +4,6 @@
<record id="view_menu" model="ir.ui.view">
<field name="name">ir.ui.menu.tree</field>
<field name="model">ir.ui.menu</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Menu" toolbar="1">
<field icon="icon" name="name"/>

View File

@ -6,7 +6,6 @@
<record id="values_view_form_action" model="ir.ui.view">
<field name="name">ir.values.form.action</field>
<field name="model">ir.values</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Action Bindings" version="7.0">
<group>
@ -29,7 +28,6 @@
<record id="values_view_form_defaults" model="ir.ui.view">
<field name="name">ir.values.form.defaults</field>
<field name="model">ir.values</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="User-defined Defaults" version="7.0">
<group>
@ -52,7 +50,6 @@
<record id="values_view_tree_action" model="ir.ui.view">
<field name="name">ir.values.tree.action</field>
<field name="model">ir.values</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Action Bindings/Defaults">
<field name="name"/>
@ -65,7 +62,6 @@
<record id="values_view_search_action" model="ir.ui.view">
<field name="name">ir.values.search.action</field>
<field name="model">ir.values</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Client Actions">
<field name="name"
@ -130,7 +126,6 @@
<record id="sequence_view" model="ir.ui.view">
<field name="name">ir.sequence.form</field>
<field name="model">ir.sequence</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Sequences" version="7.0">
<sheet>
@ -179,7 +174,6 @@
<record id="sequence_view_tree" model="ir.ui.view">
<field name="name">ir.sequence.tree</field>
<field name="model">ir.sequence</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Sequences">
<field name="code"/>
@ -197,7 +191,6 @@
<record id="view_sequence_search" model="ir.ui.view">
<field name="name">ir.sequence.search</field>
<field name="model">ir.sequence</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Sequences">
<field name="name" string="Sequence"/>
@ -223,7 +216,6 @@
<record id="sequence_type_form_view" model="ir.ui.view">
<field name="name">ir.sequence.type.form</field>
<field name="model">ir.sequence.type</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Sequence Type" version="7.0">
<sheet>
@ -239,7 +231,6 @@
<record id="sequence_type_tree_view" model="ir.ui.view">
<field name="name">ir.sequence.type.tree</field>
<field name="model">ir.sequence.type</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Sequence Type">
<field name="name"/>
@ -251,7 +242,6 @@
<record id="view_sequence_type_search" model="ir.ui.view">
<field name="name">ir.sequence.type.search</field>
<field name="model">ir.sequence.type</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Sequences Type">
<field name="name" filter_domain="['|', ('name','ilike',self), ('code','ilike',self)]" string="Sequence Type"/>
@ -276,7 +266,6 @@
<record id="action_view" model="ir.ui.view">
<field name="name">ir.actions.actions</field>
<field name="model">ir.actions.actions</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Action" version="7.0">
<group>
@ -290,7 +279,6 @@
<record id="action_view_tree" model="ir.ui.view">
<field name="name">ir.actions.actions.tree</field>
<field name="model">ir.actions.actions</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Action">
<field name="name"/>
@ -301,7 +289,6 @@
<record id="action_view_search" model="ir.ui.view">
<field name="name">ir.actions.actions.search</field>
<field name="model">ir.actions.actions</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Action">
<field name="name" filter_domain="['|', ('name','ilike',self), ('type','ilike',self)]" string="Action"/>
@ -327,7 +314,6 @@
<record id="act_report_xml_view" model="ir.ui.view">
<field name="name">ir.actions.report.xml</field>
<field name="model">ir.actions.report.xml</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Report" version="7.0">
<group>
@ -372,7 +358,6 @@
<record id="act_report_xml_view_tree" model="ir.ui.view">
<field name="name">ir.actions.report.xml.tree</field>
<field name="model">ir.actions.report.xml</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Report xml">
<field name="name"/>
@ -387,7 +372,6 @@
<record id="act_report_xml_search_view" model="ir.ui.view">
<field name="name">ir.actions.report.xml.search</field>
<field name="model">ir.actions.report.xml</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Report Xml">
<field name="name"
@ -413,7 +397,6 @@
<record id="view_window_action_tree" model="ir.ui.view">
<field name="name">ir.actions.windows.tree</field>
<field name="model">ir.actions.act_window</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Open Window">
<field name="name"/>
@ -428,7 +411,6 @@
<record id="view_window_action_form" model="ir.ui.view">
<field name="name">ir.actions.windows.form</field>
<field name="model">ir.actions.act_window</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Open a Window" version="7.0">
<group>
@ -491,7 +473,6 @@
<record id="view_window_action_search" model="ir.ui.view">
<field name="name">ir.actions.windows.search</field>
<field name="model">ir.actions.act_window</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Open a Window">
<field name="name" filter_domain="['|', ('name','ilike',self), ('res_model','ilike',self)]" string="Action"/>
@ -527,7 +508,6 @@
<record id="act_wizard_view_tree" model="ir.ui.view">
<field name="name">ir.actions.wizard.tree</field>
<field name="model">ir.actions.wizard</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Wizard">
<field name="name"/>
@ -540,7 +520,6 @@
<record id="act_wizard_view" model="ir.ui.view">
<field name="name">ir.actions.wizard</field>
<field name="model">ir.actions.wizard</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Wizards" version="7.0">
<group col="4">
@ -558,7 +537,6 @@
<record id="act_wizard_search_view" model="ir.ui.view">
<field name="name">ir.actions.wizard.search</field>
<field name="model">ir.actions.wizard</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Wizards">
<field name="name"
@ -582,7 +560,6 @@
<record model="ir.ui.view" id="view_ir_needaction_users_rel_tree">
<field name="name">ir.needaction_users_rel.tree</field>
<field name="model">ir.needaction_users_rel</field>
<field name="type">tree</field>
<field name="sequence">10</field>
<field name="arch" type="xml">
<tree string="Subscription">
@ -607,7 +584,6 @@
<record id="view_view_form" model="ir.ui.view">
<field name="name">ir.ui.view</field>
<field name="model">ir.ui.view</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Views" version="7.0">
<sheet>
@ -633,7 +609,6 @@
<record id="view_view_tree" model="ir.ui.view">
<field name="name">ir.ui.view.tree</field>
<field name="model">ir.ui.view</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Views">
<field name="priority" string="Sequence"/>
@ -649,7 +624,6 @@
<record id="view_view_search" model="ir.ui.view">
<field name="name">ir.ui.view.search</field>
<field name="model">ir.ui.view</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Views">
<field name="name" filter_domain="['|', ('name','ilike',self), ('model','ilike',self)]" string="View"/>
@ -686,7 +660,6 @@
<record id="view_view_custom_search" model="ir.ui.view">
<field name="name">ir.ui.view.custom.search</field>
<field name="model">ir.ui.view.custom</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Customized Views">
<field name="user_id"/>
@ -697,7 +670,6 @@
<record id="view_view_custom_form" model="ir.ui.view">
<field name="name">ir.ui.view.custom.form</field>
<field name="model">ir.ui.view.custom</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Customized Views" version="7.0">
<sheet>
@ -713,7 +685,6 @@
<record id="view_view_custom_tree" model="ir.ui.view">
<field name="name">ir.ui.view.custom.tree</field>
<field name="model">ir.ui.view.custom</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Customized Views">
<field name="user_id"/>
@ -734,7 +705,6 @@
<record id="view_attachment_form" model="ir.ui.view">
<field name="name">ir.attachment.view</field>
<field name="model">ir.attachment</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Attachments" version="7.0">
<sheet>
@ -773,7 +743,6 @@
<record id="view_attachment_tree" model="ir.ui.view">
<field name="name">ir.attachment.view.tree</field>
<field name="model">ir.attachment</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Attachments">
<field name="name"/>
@ -788,7 +757,6 @@
<record id="view_attachment_search" model="ir.ui.view">
<field name="name">ir.attachment.search</field>
<field name="model">ir.attachment</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Attachments">
<field name="name" filter_domain="['|', ('name','ilike',self), ('datas_fname','ilike',self)]" string="Attachment"/>
@ -831,7 +799,6 @@
<record id="view_model_form" model="ir.ui.view">
<field name="name">ir.model.form</field>
<field name="model">ir.model</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Model Description" version="7.0">
<sheet>
@ -921,7 +888,6 @@
<record id="view_model_tree" model="ir.ui.view">
<field name="name">ir.model.tree</field>
<field name="model">ir.model</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Model Description">
<field name="model"/>
@ -935,7 +901,6 @@
<record id="view_model_search" model="ir.ui.view">
<field name="name">ir.model.search</field>
<field name="model">ir.model</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Model Description">
<field name="name" filter_domain="['|', ('name','ilike',self), ('model','ilike',self)]" string="Model"/>
@ -957,7 +922,6 @@
<record id="view_model_fields_form" model="ir.ui.view">
<field name="name">ir.model.fields.form</field>
<field name="model">ir.model.fields</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Fields" version="7.0">
<sheet>
@ -1000,7 +964,6 @@
<record id="view_model_fields_tree" model="ir.ui.view">
<field name="name">ir.model.fields.tree</field>
<field name="model">ir.model.fields</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Fields">
<field name="name"/>
@ -1015,7 +978,6 @@
<record id="view_model_fields_search" model="ir.ui.view">
<field name="name">ir.model.fields.search</field>
<field name="model">ir.model.fields</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Fields">
<field name="name" filter_domain="['|', ('name','ilike',self), ('field_description','ilike',self)]" string="Field"/>
@ -1044,7 +1006,6 @@
<record model="ir.ui.view" id="view_model_data_form">
<field name="name">ir.model.data.form</field>
<field name="model">ir.model.data</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="External Identifiers" version="7.0">
<group>
@ -1071,7 +1032,6 @@
<record id="view_model_data_list" model="ir.ui.view">
<field name="name">ir.model.data.list</field>
<field name="model">ir.model.data</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="External Identifiers">
<field name="complete_name"/>
@ -1084,7 +1044,6 @@
<record id="view_model_data_search" model="ir.ui.view">
<field name="name">ir.model.data.search</field>
<field name="model">ir.model.data</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="External Identifiers">
<field name="name"
@ -1106,7 +1065,6 @@
<record model="ir.ui.view" id="view_model_constraint_form">
<field name="name">ir.model.constraint.form</field>
<field name="model">ir.model.constraint</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Model Constraints">
<field name="type"/>
@ -1123,7 +1081,6 @@
<record id="view_model_constraint_list" model="ir.ui.view">
<field name="name">ir.model.constraint.list</field>
<field name="model">ir.model.constraint</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Model Constraints">
<field name="type"/>
@ -1137,7 +1094,6 @@
<record model="ir.ui.view" id="view_model_relation_form">
<field name="name">ir.model.relation.form</field>
<field name="model">ir.model.relation</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="ManyToMany Relations">
<field name="name"/>
@ -1153,7 +1109,6 @@
<record id="view_model_relation_list" model="ir.ui.view">
<field name="name">ir.model.relation.list</field>
<field name="model">ir.model.relation</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="ManyToMany Relations">
<field name="name"/>
@ -1214,7 +1169,6 @@
<record id="view_translation_search" model="ir.ui.view">
<field name="name">Translations</field>
<field name="model">ir.translation</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Translations">
<filter icon="terp-gdu-smart-failing"
@ -1230,7 +1184,6 @@
<record id="view_translation_form" model="ir.ui.view">
<field name="name">Translations</field>
<field name="model">ir.translation</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Translations" version="7.0">
<sheet>
@ -1257,7 +1210,6 @@
<record id="view_translation_tree" model="ir.ui.view">
<field name="name">Translations</field>
<field name="model">ir.translation</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Translations">
<field name="src"/>
@ -1286,7 +1238,6 @@
<record id="shortcut_form" model="ir.ui.view">
<field name="name">ir.ui.view_sc</field>
<field name="model">ir.ui.view_sc</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Shortcut" version="7.0">
<group col="4">
@ -1299,7 +1250,6 @@
<record id="shortcut_tree" model="ir.ui.view">
<field name="name">ir.ui.view_sc</field>
<field name="model">ir.ui.view_sc</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Shortcut">
<field name="name"/>
@ -1311,7 +1261,6 @@
<record id="edit_menu" model="ir.ui.view">
<field name="name">ir.ui.menu.tree</field>
<field name="model">ir.ui.menu</field>
<field name="type">tree</field>
<field eval="8" name="priority"/>
<field name="arch" type="xml">
<tree string="Menu">
@ -1324,7 +1273,6 @@
<record id="edit_menu_access" model="ir.ui.view">
<field name="name">ir.ui.menu.form2</field>
<field name="model">ir.ui.menu</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Menu" version="7.0">
<sheet>
@ -1364,7 +1312,6 @@
<record id="edit_menu_access_search" model="ir.ui.view">
<field name="name">ir.ui.menu.search</field>
<field name="model">ir.ui.menu</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Menu">
<field name="name" string="Menu"/>
@ -1389,7 +1336,6 @@
<record id="ir_cron_view_tree" model="ir.ui.view">
<field name="name">ir.cron.tree</field>
<field name="model">ir.cron</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Scheduled Actions">
<field name="priority" string="Sequence"/>
@ -1406,7 +1352,6 @@
<record id="ir_cron_view" model="ir.ui.view">
<field name="name">ir.cron.form</field>
<field name="model">ir.cron</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Scheduled Actions" version="7.0">
<sheet>
@ -1444,7 +1389,6 @@
<record id="ir_cron_view_search" model="ir.ui.view">
<field name="name">ir.cron.search</field>
<field name="model">ir.cron</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Scheduled Actions">
<field name="name" string="Scheduled Action"/>
@ -1463,7 +1407,6 @@
<record model="ir.ui.view" id="ir_cron_view_calendar">
<field name="name">ir.cron.calendar</field>
<field name="model">ir.cron</field>
<field name="type">calendar</field>
<field name="priority" eval="2"/>
<field name="arch" type="xml">
<calendar string="Scheduled Actions" date_start="nextcall" color="user_id">
@ -1490,7 +1433,6 @@
<record id="ir_access_view_tree" model="ir.ui.view">
<field name="name">ir.model.access.tree</field>
<field name="model">ir.model.access</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Access Controls" editable="bottom">
<field name="name"/>
@ -1506,7 +1448,6 @@
<record id="ir_access_view_form" model="ir.ui.view">
<field name="name">ir.model.access.form</field>
<field name="model">ir.model.access</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Access Controls" version="7.0">
<sheet>
@ -1528,7 +1469,6 @@
<record id="ir_access_view_search" model="ir.ui.view">
<field name="name">ir.model.access.search</field>
<field name="model">ir.model.access</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Access Controls">
<field name="name" string="Access Control"/>
@ -1561,7 +1501,6 @@
<record id="view_rule_form" model="ir.ui.view">
<field name="name">Record rules</field>
<field name="model">ir.rule</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Record rules" version="7.0">
<sheet>
@ -1604,7 +1543,6 @@
<record id="view_rule_tree" model="ir.ui.view">
<field name="name">Record rules</field>
<field name="model">ir.rule</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Record rules">
<field name="model_id"/>
@ -1621,7 +1559,6 @@
<record id="view_rule_search" model="ir.ui.view">
<field name="name">Record rules</field>
<field name="model">ir.rule</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Record Rules">
<field name="name" string="Record Rule"/>
@ -1657,7 +1594,6 @@
<record id="view_server_action_form" model="ir.ui.view">
<field name="name">Server Action</field>
<field name="model">ir.actions.server</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Server Action" version="7.0">
<group>
@ -1747,7 +1683,6 @@
<record id="view_server_action_tree" model="ir.ui.view">
<field name="name">Server Actions</field>
<field name="model">ir.actions.server</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Server Actions">
<field name="name"/>
@ -1761,7 +1696,6 @@
<record id="view_server_action_search" model="ir.ui.view">
<field name="name">ir.actions.server.search</field>
<field name="model">ir.actions.server</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Server Actions">
<field name="name" string="Server Action"/>
@ -1791,7 +1725,6 @@
<record id="ir_actions_todo_tree" model="ir.ui.view">
<field name="model">ir.actions.todo</field>
<field name="name">Config Wizard Steps</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Config Wizard Steps">
<field name="sequence"/>
@ -1809,7 +1742,6 @@
<record id="config_wizard_step_view_form" model="ir.ui.view">
<field name="model">ir.actions.todo</field>
<field name="name">Config Wizard Steps</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Config Wizard Steps" version="7.0">
<header>
@ -1839,7 +1771,6 @@
<record id="config_wizard_step_view_search" model="ir.ui.view">
<field name="model">ir.actions.todo</field>
<field name="name">ir.actions.todo.select</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Actions">
<filter string="To Do" name="todo" icon="terp-camera_test" domain=" [('state','=','open')]" help="Wizards to be Launched"/>
@ -1875,7 +1806,6 @@
<record model="ir.ui.view" id="ir_mail_server_form">
<field name="name">ir.mail.server.form</field>
<field name="model">ir.mail_server</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Outgoing Mail Servers" version="7.0">
<sheet>
@ -1902,7 +1832,6 @@
<record model="ir.ui.view" id="ir_mail_server_list">
<field name="name">ir.mail.server.list</field>
<field name="model">ir.mail_server</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Outgoing Mail Servers">
<field name="sequence"/>
@ -1917,7 +1846,6 @@
<record id="view_ir_mail_server_search" model="ir.ui.view">
<field name="name">ir.mail.server.search</field>
<field name="model">ir.mail_server</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Outgoing Mail Servers">
<field name="name"

View File

@ -5,7 +5,6 @@
<record model="ir.ui.view" id="view_ir_config_search">
<field name="name">ir.config_parameter.search</field>
<field name="model">ir.config_parameter</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="System Properties">
<field name="key" string="Key"/>
@ -16,7 +15,6 @@
<record model="ir.ui.view" id="view_ir_config_list">
<field name="name">ir.config_parameter.list</field>
<field name="model">ir.config_parameter</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="System Parameters">
<field name="key"/>
@ -27,7 +25,6 @@
<record model="ir.ui.view" id="view_ir_config_form">
<field name="name">ir.config_parameter.form</field>
<field name="model">ir.config_parameter</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="System Parameters" version="7.0">
<sheet>

View File

@ -14,7 +14,6 @@
<record id="ir_filters_view_form" model="ir.ui.view">
<field name="name">ir.filters.form</field>
<field name="model">ir.filters</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Filters" version="7.0">
<sheet>
@ -35,7 +34,6 @@
<record id="ir_filters_view_tree" model="ir.ui.view">
<field name="name">ir.filters.tree</field>
<field name="model">ir.filters</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Filters">
<field name="name"/>
@ -50,7 +48,6 @@
<record id="ir_filters_view_search" model="ir.ui.view">
<field name="name">ir.filters.search</field>
<field name="model">ir.filters</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Filters">
<field name="name" string="Filter Name"/>

View File

@ -24,6 +24,7 @@ from lxml import etree
from tools import graph
from tools.safe_eval import safe_eval as eval
import tools
from tools.view_validation import valid_view
import os
import logging
@ -47,11 +48,22 @@ view_custom()
class view(osv.osv):
_name = 'ir.ui.view'
def _type_field(self, cr, uid, ids, name, args, context=None):
result = {}
for record in self.browse(cr, uid, ids, context):
# Get the type from the inherited view if any.
if record.inherit_id:
result[record.id] = record.inherit_id.type
else:
result[record.id] = etree.fromstring(record.arch.encode('utf8')).tag
return result
_columns = {
'name': fields.char('View Name',size=64, required=True),
'model': fields.char('Object', size=64, required=True, select=True),
'priority': fields.integer('Sequence', required=True),
'type': fields.selection((
'type': fields.function(_type_field, type='selection', selection=[
('tree','Tree'),
('form','Form'),
('mdx','mdx'),
@ -60,7 +72,7 @@ class view(osv.osv):
('diagram','Diagram'),
('gantt', 'Gantt'),
('kanban', 'Kanban'),
('search','Search')), 'View Type', required=True, select=True),
('search','Search')], string='View Type', required=True, select=True, store=True),
'arch': fields.text('View Architecture', required=True),
'inherit_id': fields.many2one('ir.ui.view', 'Inherited View', ondelete='cascade', select=True),
'field_parent': fields.char('Child Field',size=64),
@ -76,6 +88,11 @@ class view(osv.osv):
# Holds the RNG schema
_relaxng_validator = None
def create(self, cr, uid, values, context=None):
if 'type' in values:
_logger.warning("Setting the `type` field is deprecated in the `ir.ui.view` model.")
return super(osv.osv, self).create(cr, uid, values, context)
def _relaxng(self):
if not self._relaxng_validator:
frng = tools.file_open(os.path.join('base','rng','view.rng'))
@ -123,6 +140,8 @@ class view(osv.osv):
for error in validator.error_log:
_logger.error(tools.ustr(error))
return False
if not valid_view(view_arch):
return False
return True
_constraints = [
@ -133,7 +152,7 @@ class view(osv.osv):
super(view, self)._auto_init(cr, context)
cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'ir_ui_view_model_type_inherit_id\'')
if not cr.fetchone():
cr.execute('CREATE INDEX ir_ui_view_model_type_inherit_id ON ir_ui_view (model, type, inherit_id)')
cr.execute('CREATE INDEX ir_ui_view_model_type_inherit_id ON ir_ui_view (model, inherit_id)')
def get_inheriting_views_arch(self, cr, uid, view_id, model, context=None):
"""Retrieves the architecture of views that inherit from the given view, from the sets of

View File

@ -4,7 +4,6 @@
<record id="view_model_menu_create" model="ir.ui.view">
<field name="name">Create Menu</field>
<field name="model">wizard.ir.model.menu.create</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Create Menu" version="7.0">
<group>

View File

@ -12,7 +12,6 @@
<record id="view_workflow_form" model="ir.ui.view">
<field name="name">workflow.form</field>
<field name="model">workflow</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Workflow" version="7.0">
<group col="4">
@ -28,7 +27,6 @@
<record id="view_workflow_search" model="ir.ui.view">
<field name="name">workflow.search</field>
<field name="model">workflow</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Workflow">
<field name="name" filter_domain="['|', ('name','ilike',self), ('osv','ilike',self)]" string="Workflow"/>
@ -39,7 +37,6 @@
<record id="view_workflow_diagram" model="ir.ui.view">
<field name="name">workflow.diagram</field>
<field name="model">workflow</field>
<field name="type">diagram</field>
<field name="arch" type="xml">
<diagram string="Workflow Editor">
<node object="workflow.activity" shape="rectangle:subflow_id!=False" bgcolor="gray:flow_start==True;grey:flow_stop==True">
@ -61,7 +58,6 @@
<record id="view_workflow_tree" model="ir.ui.view">
<field name="name">workflow.tree</field>
<field name="model">workflow</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Workflow">
<field name="name"/>
@ -89,7 +85,6 @@
<record id="view_workflow_activity_form" model="ir.ui.view">
<field name="name">workflow.activity.form</field>
<field name="model">workflow.activity</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Activity" version="7.0">
<sheet>
@ -145,7 +140,6 @@
<record id="view_workflow_activity_tree" model="ir.ui.view">
<field name="name">workflow.activity.tree</field>
<field name="model">workflow.activity</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Activity">
<field name="name"/>
@ -160,7 +154,6 @@
<record id="view_workflow_activity_search" model="ir.ui.view">
<field name="name">workflow.activity.search</field>
<field name="model">workflow.activity</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Workflow Activity">
<field name="name" string="Workflow Activity"/>
@ -197,7 +190,6 @@
<record id="view_workflow_transition_form" model="ir.ui.view">
<field name="name">workflow.transition.form</field>
<field name="model">workflow.transition</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Transition" version="7.0">
<sheet>
@ -221,7 +213,6 @@
<record id="view_workflow_transition_tree" model="ir.ui.view">
<field name="name">workflow.transition.tree</field>
<field name="model">workflow.transition</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Transition">
<field name="act_from"/>
@ -235,7 +226,6 @@
<record id="view_workflow_transition_search" model="ir.ui.view">
<field name="name">workflow.transition.search</field>
<field name="model">workflow.transition</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Transition">
<field name="signal" filter_domain="['|', ('signal','ilike',self), ('condition','ilike',self)]" string="Workflow Transition"/>
@ -263,7 +253,6 @@
<record id="view_workflow_instance_form" model="ir.ui.view">
<field name="name">workflow.instance.form</field>
<field name="model">workflow.instance</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Workflow Instances" version="7.0">
<sheet>
@ -280,7 +269,6 @@
<record id="view_workflow_instance_tree" model="ir.ui.view">
<field name="name">workflow.instance.tree</field>
<field name="model">workflow.instance</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Workflow Instances">
<field name="wkf_id"/>
@ -293,7 +281,6 @@
<record id="view_workflow_instance_search" model="ir.ui.view">
<field name="name">workflow.instance.search</field>
<field name="model">workflow.instance</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Workflow Instances">
<field name="res_type" string="Resource Object"/>
@ -324,7 +311,6 @@
<record id="view_workflow_workitem_form" model="ir.ui.view">
<field name="name">workflow.workitem.form</field>
<field name="model">workflow.workitem</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Workflow Workitems" version="7.0">
<sheet>
@ -342,7 +328,6 @@
<record id="view_workflow_workitem_tree" model="ir.ui.view">
<field name="name">workflow.workitem.tree</field>
<field name="model">workflow.workitem</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Workflow Workitems">
<field name="wkf_id"/>
@ -356,7 +341,6 @@
<record id="view_workflow_workitem_search" model="ir.ui.view">
<field name="name">workflow.workitem.search</field>
<field name="model">workflow.workitem</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Workflow Workitems">
<field name="state" string="State"/>

View File

@ -139,14 +139,17 @@ class module(osv.osv):
# We use try except, because views or menus may not exist.
try:
res_mod_dic = res[module_rec.id]
for v in view_obj.browse(cr, uid, imd_models.get('ir.ui.view', []), context=context):
view_ids = imd_models.get('ir.ui.view', [])
for v in view_obj.browse(cr, uid, view_ids, context=context):
aa = v.inherit_id and '* INHERIT ' or ''
res_mod_dic['views_by_module'].append(aa + v.name + '('+v.type+')')
for rx in report_obj.browse(cr, uid, imd_models.get('ir.actions.report.xml', []), context=context):
report_ids = imd_models.get('ir.actions.report.xml', [])
for rx in report_obj.browse(cr, uid, report_ids, context=context):
res_mod_dic['reports_by_module'].append(rx.name)
for um in menu_obj.browse(cr, uid, imd_models.get('ir.ui.menu', []), context=context):
menu_ids = imd_models.get('ir.ui.menu', [])
for um in menu_obj.browse(cr, uid, menu_ids, context=context):
res_mod_dic['menus_by_module'].append(um.complete_name)
except KeyError, e:
_logger.warning(

View File

@ -7,7 +7,6 @@
<record id="view_module_category_form" model="ir.ui.view">
<field name="name">ir.module.category.form</field>
<field name="model">ir.module.category</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Module Category" version="7.0">
<group col="4">
@ -23,7 +22,6 @@
<record id="view_module_category_tree" model="ir.ui.view">
<field name="name">ir.module.category.tree</field>
<field name="model">ir.module.category</field>
<field name="type">tree</field>
<field name="field_parent">child_ids</field>
<field name="arch" type="xml">
<tree string="Module Category">
@ -38,7 +36,6 @@
<record id="view_module_filter" model="ir.ui.view">
<field name="name">ir.module.module.list.select</field>
<field name="model">ir.module.module</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search modules">
<field name="name" filter_domain="['|', '|', '|', ('description', 'ilike', self), ('summary', 'ilike', self), ('shortdesc', 'ilike', self), ('name',
@ -60,7 +57,6 @@
<record model="ir.ui.view" id="module_view_kanban">
<field name="name">Modules Kanban</field>
<field name="model">ir.module.module</field>
<field name="type">kanban</field>
<field name="arch" type="xml">
<kanban create="false">
<field name="icon"/>
@ -108,7 +104,6 @@
<record id="module_form" model="ir.ui.view">
<field name="name">ir.module.module.form</field>
<field name="model">ir.module.module</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Module" version="7.0">
<sheet>
@ -170,7 +165,6 @@
<record id="module_tree" model="ir.ui.view">
<field name="name">ir.module.module.tree</field>
<field name="model">ir.module.module</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree colors="blue:state=='to upgrade' or state=='to install';red:state=='uninstalled';grey:state=='uninstallable';black:state=='installed'" string="Modules">
<field name="shortdesc"/>

View File

@ -5,7 +5,6 @@
<record id="wizard_lang_export" model="ir.ui.view">
<field name="name">Export Translations</field>
<field name="model">base.language.export</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Export Translations" version="7.0">
<group colspan="4" states="choose">

View File

@ -5,7 +5,6 @@
<record id="view_base_import_language" model="ir.ui.view">
<field name="name">Import Translation</field>
<field name="model">base.language.import</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Import Translation" version="7.0">
<group>

View File

@ -5,7 +5,6 @@
<record id="view_base_language_install" model="ir.ui.view">
<field name="name">Load a Translation</field>
<field name="model">base.language.install</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Load a Translation" version="7.0">
<field name="state" invisible="1"/>

View File

@ -5,7 +5,6 @@
<record id="view_base_module_configuration_form" model="ir.ui.view">
<field name="name">Module Configuration</field>
<field name="model">base.module.configuration</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="System Configuration Done" version="7.0">
<label string="All pending configuration wizards have been executed. You may restart individual wizards via the list of configuration wizards."/>

View File

@ -5,7 +5,6 @@
<record id="view_base_module_import" model="ir.ui.view">
<field name="name">Module Import</field>
<field name="model">base.module.import</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Import module" version="7.0">
<field name="state" invisible="1"/>

View File

@ -5,7 +5,6 @@
<record id="view_base_module_scan" model="ir.ui.view">
<field name="name">Module Scan</field>
<field name="model">base.module.scan</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Scan for new modules" version="7.0">
<label string="This function will check if you installed new modules in the 'addons' path of your server installation."/>

View File

@ -5,7 +5,6 @@
<record id="view_base_module_update" model="ir.ui.view">
<field name="name">Module Update</field>
<field name="model">base.module.update</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Update Module List" version="7.0">
<field name="state" invisible="1"/>

View File

@ -5,7 +5,6 @@
<record id="view_base_module_upgrade" model="ir.ui.view">
<field name="name">Module Upgrade</field>
<field name="model">base.module.upgrade</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="System Update" version="7.0">
<div><label string="Your system will be updated."/></div>
@ -41,7 +40,6 @@
<record id="view_base_module_upgrade_install" model="ir.ui.view">
<field name="name">Module Upgrade Install</field>
<field name="model">base.module.upgrade</field>
<field name="type">form</field>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<form string="Apply Schedule Upgrade" version="7.0">

View File

@ -4,7 +4,6 @@
<record id="wizard_update_translations" model="ir.ui.view">
<field name="name">Synchronize Terms</field>
<field name="model">base.update.translations</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Synchronize Terms" version="7.0">
<group string="Synchronize Translation">

View File

@ -7,7 +7,6 @@
<record id="publisher_warranty_contract_tree_view" model="ir.ui.view">
<field name="name">publisher_warranty.contract.tree</field>
<field name="model">publisher_warranty.contract</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Publisher Warranty Contracts">
<field name="name"/>
@ -21,7 +20,6 @@
<record id="publisher_warranty_contract_form_view" model="ir.ui.view">
<field name="name">publisher_warranty.contract.form</field>
<field name="model">publisher_warranty.contract</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Publisher Warranty Contract" version="7.0">
<header>
@ -55,7 +53,6 @@
<record id="publisher_warranty_contract_search_view" model="ir.ui.view">
<field name="name">publisher_warranty.contract.search</field>
<field name="model">publisher_warranty.contract</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Publisher Warranty Contract">
<field name="name" string="Serial Key"/>
@ -68,7 +65,6 @@
<record id="publisher_warranty_contract_view_calendar" model="ir.ui.view">
<field name="name">publisher_warranty.contract.calendar</field>
<field name="model">publisher_warranty.contract</field>
<field name="type">calendar</field>
<field name="arch" type="xml">
<calendar string="Maintenance Contract" date_start="date_start" color="state">
<field name="name"/>
@ -91,7 +87,6 @@
<record id="publisher_warranty_contract_add_wizard" model="ir.ui.view">
<field name="name">publisher_warranty.contract.add.wizard</field>
<field name="model">publisher_warranty.contract.wizard</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Register a Contract" version="7.0">
<field name="state" invisible="1"/>

View File

@ -5,7 +5,6 @@
<record id="ir_property_view_search" model="ir.ui.view">
<field name="name">ir.property.search</field>
<field name="model">ir.property</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Parameters">
<field name="name" string="Name"/>
@ -21,7 +20,6 @@
<record id="ir_property_view" model="ir.ui.view">
<field name="name">ir.property.form</field>
<field name="model">ir.property</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Parameters" version="7.0">
<sheet>
@ -46,7 +44,6 @@
<record id="ir_property_view_tree" model="ir.ui.view">
<field name="name">ir.property.tree</field>
<field name="model">ir.property</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Parameters">
<field name="name"/>

View File

@ -5,7 +5,6 @@
<record id="view_res_bank_form" model="ir.ui.view">
<field name="name">res.bank.form</field>
<field name="model">res.bank</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Bank" version="7.0">
<sheet>
@ -41,7 +40,6 @@
<record id="view_res_bank_tree" model="ir.ui.view">
<field name="name">res.bank.tree</field>
<field name="model">res.bank</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Banks">
<field name="name"/>
@ -63,7 +61,6 @@
<record id="view_partner_bank_type_form" model="ir.ui.view">
<field name="name">res.partner.bank.type.form</field>
<field name="model">res.partner.bank.type</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Bank Account Type" version="7.0">
<group col="4">
@ -78,7 +75,6 @@
<record id="view_partner_bank_type_tree" model="ir.ui.view">
<field name="name">res.partner.bank.type.tree</field>
<field name="model">res.partner.bank.type</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Bank Account Type">
<field name="name"/>
@ -90,7 +86,6 @@
<record id="view_partner_bank_form" model="ir.ui.view">
<field name="name">res.partner.bank.form</field>
<field name="model">res.partner.bank</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Bank account" version="7.0">
<group col="4">
@ -127,7 +122,6 @@
<record id="view_partner_bank_tree" model="ir.ui.view">
<field name="name">res.partner.bank.tree</field>
<field name="model">res.partner.bank</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Bank Accounts">
<field name="sequence" invisible="1"/>
@ -142,7 +136,6 @@
<record id="view_partner_bank_search" model="ir.ui.view">
<field name="name">res.partner.bank.search</field>
<field name="model">res.partner.bank</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Bank Accounts">
<field name="bank_name" filter_domain="['|', ('bank_name','ilike',self), ('acc_number','ilike',self)]" string="Bank Name"/>

View File

@ -17,7 +17,6 @@
<record id="view_company_form" model="ir.ui.view">
<field name="name">res.company.form</field>
<field name="model">res.company</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Company" version="7.0">
<sheet>
@ -102,7 +101,6 @@
<record id="view_company_tree" model="ir.ui.view">
<field name="name">res.company.tree</field>
<field name="model">res.company</field>
<field name="type">tree</field>
<field name="field_parent">child_ids</field>
<field name="arch" type="xml">
<tree string="Companies">
@ -131,7 +129,6 @@
<record id="view_inventory_tree" model="ir.ui.view">
<field name="name">multi_company.default.tree</field>
<field name="model">multi_company.default</field>
<field name="type">tree</field>
<field name="priority" eval="8"/>
<field name="arch" type="xml">
<tree string="Multi Company">
@ -148,7 +145,6 @@
<record id="view_inventory_form" model="ir.ui.view">
<field name="name">multi_company.default.form</field>
<field name="model">multi_company.default</field>
<field name="type">form</field>
<field name="priority" eval="8"/>
<field name="arch" type="xml">
<form string="Multi Company" version="7.0">
@ -173,7 +169,6 @@
<record id="view_inventory_search" model="ir.ui.view">
<field name="name">multi_company.default.search</field>
<field name="model">multi_company.default</field>
<field name="type">search</field>
<field name="priority" eval="8"/>
<field name="arch" type="xml">
<search string="Multi Company">

View File

@ -1,13 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="res_config_view_base" model="ir.ui.view">
<field name="name">res.config.view.base</field>
<field name="model">res.config</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form version="7.0">
<form string="Configuration" version="7.0">
<group string="res_config_contents"/>
<footer>
<button name="action_next" type="object" string="Apply" class="oe_highlight"/>
@ -21,7 +19,6 @@
<record id="view_config_wizard_form" model="ir.ui.view">
<field name="name">Compabitiliby configuration wizard</field>
<field name="model">ir.actions.configuration.wizard</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Next Configuration Step" version="7.0">
<group>
@ -39,9 +36,8 @@
<record id="res_config_installer" model="ir.ui.view">
<field name="name">Inheritable view for installer objects</field>
<field name="model">res.config.installer</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form version="7.0">
<form string="Configuration Installer" version="7.0">
<separator string="title" colspan="4"/>
<footer>
<button name="action_next" type="object" string="Install Modules" class="oe_highlight"/>

View File

@ -9,7 +9,6 @@
<record id="view_country_tree" model="ir.ui.view">
<field name="name">res.country.tree</field>
<field name="model">res.country</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Country">
<field name="name"/>
@ -21,7 +20,6 @@
<record id="view_country_form" model="ir.ui.view">
<field name="name">res.country.form</field>
<field name="model">res.country</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Country" version="7.0">
<group col="4">
@ -52,7 +50,6 @@
<record id="view_country_state_tree" model="ir.ui.view">
<field name="name">res.country.state.tree</field>
<field name="model">res.country.state</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="State">
<field name="name"/>
@ -65,7 +62,6 @@
<record id="view_country_state_form" model="ir.ui.view">
<field name="name">res.country.state.form</field>
<field name="model">res.country.state</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="State" version="7.0">
<group>

View File

@ -5,7 +5,6 @@
<record id="view_currency_search" model="ir.ui.view">
<field name="name">res.currency.search</field>
<field name="model">res.currency</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Currencies">
<field name="name" string="Currency"/>
@ -17,7 +16,6 @@
<record id="view_currency_tree" model="ir.ui.view">
<field name="name">res.currency.tree</field>
<field name="model">res.currency</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Currencies">
<field name="name"/>
@ -35,7 +33,6 @@
<record id="view_currency_form" model="ir.ui.view">
<field name="name">res.currency.form</field>
<field name="model">res.currency</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Currency" version="7.0">
<group col="4">
@ -86,7 +83,6 @@
<record id="view_currency_rate_type_form" model="ir.ui.view">
<field name="name">res.currency.rate.type.form</field>
<field name="model">res.currency.rate.type</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Currency Rate Type" version="7.0">
<group>
@ -106,7 +102,6 @@
<record id="view_currency_rate_type_search" model="ir.ui.view">
<field name="name">res.currency.rate.type.search</field>
<field name="model">res.currency.rate.type</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Currency Rate Type">
<field name="name" string="Name"/>

View File

@ -4,7 +4,6 @@
<record id="res_lang_tree" model="ir.ui.view">
<field name="name">res.lang.tree</field>
<field name="model">res.lang</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Languages">
<field name="name"/>
@ -21,7 +20,6 @@
<record id="res_lang_form" model="ir.ui.view">
<field name="name">res.lang.form</field>
<field name="model">res.lang</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Languages" version="7.0">
<sheet>
@ -105,7 +103,6 @@
<record id="res_lang_search" model="ir.ui.view">
<field name="name">res.lang.search</field>
<field name="model">res.lang</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Languages">
<field name="name"

View File

@ -16,7 +16,6 @@
<record id="view_partner_title_tree" model="ir.ui.view">
<field name="name">res.partner.title.tree</field>
<field name="model">res.partner.title</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Partner Titles">
<field name="name"/>
@ -27,7 +26,6 @@
<record id="view_partner_title_form" model="ir.ui.view">
<field name="name">res.partner.title.form</field>
<field name="model">res.partner.title</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Partner Titles" version="7.0">
<group col="4">
@ -76,7 +74,6 @@
<record id="view_partner_tree" model="ir.ui.view">
<field name="name">res.partner.tree</field>
<field name="model">res.partner</field>
<field name="type">tree</field>
<field eval="8" name="priority"/>
<field name="arch" type="xml">
<tree string="Contacts">
@ -95,7 +92,6 @@
<record id="view_partner_form" model="ir.ui.view">
<field name="name">res.partner.form</field>
<field name="model">res.partner</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Partners" version="7.0">
<sheet>
@ -257,7 +253,6 @@
<record id="view_res_partner_filter" model="ir.ui.view">
<field name="name">res.partner.select</field>
<field name="model">res.partner</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Partner">
<field name="name"
@ -286,7 +281,6 @@
<record model="ir.ui.view" id="res_partner_kanban_view">
<field name="name">res.partner.kanban</field>
<field name="model">res.partner</field>
<field name="type">kanban</field>
<field name="arch" type="xml">
<kanban>
<field name="color"/>
@ -436,7 +430,6 @@
<record id="view_payterm_form" model="ir.ui.view">
<field name="name">res.payterm</field>
<field name="model">res.payterm</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Payment Term" version="7.0">
<group>
@ -457,7 +450,6 @@
<record id="view_partner_category_form" model="ir.ui.view">
<field name="name">Partner Categories</field>
<field name="model">res.partner.category</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Partner Category" version="7.0">
<group col="4">
@ -471,7 +463,6 @@
<record id="view_partner_category_list" model="ir.ui.view">
<field name="name">Partner Categories</field>
<field name="model">res.partner.category</field>
<field name="type">tree</field>
<field eval="6" name="priority"/>
<field name="arch" type="xml">
<tree string="Partner Categories">
@ -482,7 +473,6 @@
<record id="view_partner_category_tree" model="ir.ui.view">
<field name="name">res.partner.category.tree</field>
<field name="model">res.partner.category</field>
<field name="type">tree</field>
<field name="field_parent">child_ids</field>
<field name="arch" type="xml">
<tree toolbar="1" string="Partner Categories">

View File

@ -4,7 +4,6 @@
<record id="res_request_link-view" model="ir.ui.view">
<field name="name">res.request.link.form</field>
<field name="model">res.request.link</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Request Link" version="7.0">
<sheet>
@ -20,7 +19,6 @@
<record id="res_request_link_tree-view" model="ir.ui.view">
<field name="name">res.request.link.form</field>
<field name="model">res.request.link</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Request Link">
<field name="name"/>
@ -31,7 +29,6 @@
<record id="res_request_link_search_view" model="ir.ui.view">
<field name="name">res.request.link.search</field>
<field name="model">res.request.link</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Request Link">
<field name="name" filter_domain="['|', ('name','ilike',self), ('object','ilike',self)]" string="Subject"/>

View File

@ -5,7 +5,6 @@
<record id="view_groups_search" model="ir.ui.view">
<field name="name">res.groups.search</field>
<field name="model">res.groups</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Groups">
<field name="name" filter_domain="['|', ('name','ilike',self), ('category_id','ilike',self)]" string="Group"/>
@ -15,7 +14,6 @@
<record id="view_groups_form" model="ir.ui.view">
<field name="name">res.groups.form</field>
<field name="model">res.groups</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Groups" version="7.0">
<sheet>
@ -86,7 +84,6 @@
<record id="view_users_form" model="ir.ui.view">
<field name="name">res.users.form</field>
<field name="model">res.users</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Users" version="7.0">
<field name="id" invisible="1"/>
@ -142,7 +139,6 @@
<record id="view_users_tree" model="ir.ui.view">
<field name="name">res.users.tree</field>
<field name="model">res.users</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Users">
<field name="name"/>
@ -155,7 +151,6 @@
<record id="view_users_search" model="ir.ui.view">
<field name="name">res.users.search</field>
<field name="model">res.users</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Users">
<field name="name" filter_domain="['|', ('name','ilike',self), ('login','ilike',self)]" string="User"/>
@ -198,7 +193,6 @@
<record id="view_users_form_simple_modif" model="ir.ui.view">
<field name="name">res.users.preferences.form</field>
<field name="model">res.users</field>
<field name="type">form</field>
<field eval="18" name="priority"/>
<field name="arch" type="xml">
<form string="Users" version="7.0">

View File

@ -4,7 +4,6 @@
<record id="view_res_widget_search" model="ir.ui.view">
<field name="name">res.widget.search</field>
<field name="model">res.widget</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Search Widget">
<field name="title" string="Widget"/>
@ -14,7 +13,6 @@
<record id="res_widget_form" model="ir.ui.view">
<field name="name">res.widget.form</field>
<field name="model">res.widget</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Widgets" version="7.0">
<sheet>
@ -29,7 +27,6 @@
<record id="res_widget_tree" model="ir.ui.view">
<field name="name">res.widget.tree</field>
<field name="model">res.widget</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Widgets">
<field name="title"/>
@ -49,7 +46,6 @@
<record id="res_widget_user_tree" model="ir.ui.view">
<field name="name">res.widget.user.tree</field>
<field name="model">res.widget.user</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="User Widgets">
<field name="sequence" invisible="1"/>
@ -61,7 +57,6 @@
<record id="res_widget_user_form" model="ir.ui.view">
<field name="name">res.widget.user.form</field>
<field name="model">res.widget.user</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="User Widgets" version="7.0">
<sheet>
@ -85,7 +80,6 @@
<record id="view_res_widget_wizard" model="ir.ui.view">
<field name="name">Homepage Widgets Management</field>
<field name="model">res.widget.wizard</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Widget Wizard" col="4" version="7.0">
<header>

View File

@ -45,6 +45,7 @@ import openerp.tools as tools
from openerp.tools.translate import _
from openerp.tools import float_round, float_repr
import simplejson
from openerp.tools.html_sanitize import html_sanitize
_logger = logging.getLogger(__name__)
@ -109,6 +110,7 @@ class _column(object):
self.selectable = True
self.group_operator = args.get('group_operator', False)
self.groups = False # CSV list of ext IDs of groups that can access this field
self.deprecated = False # Optional deprecation warning
for a in args:
if args[a]:
setattr(self, a, args[a])
@ -227,6 +229,14 @@ class char(_column):
class text(_column):
_type = 'text'
class html(text):
_type = 'html'
_symbol_c = '%s'
def _symbol_f(x):
return html_sanitize(x)
_symbol_set = (_symbol_c, _symbol_f)
import __builtin__
class float(_column):

View File

@ -545,6 +545,7 @@ FIELDS_TO_PGTYPES = {
fields.boolean: 'bool',
fields.integer: 'int4',
fields.text: 'text',
fields.html: 'text',
fields.date: 'date',
fields.datetime: 'timestamp',
fields.binary: 'bytea',
@ -3596,6 +3597,14 @@ class BaseModel(object):
record[f] = res2[record['id']]
else:
record[f] = []
# Warn about deprecated fields now that fields_pre and fields_post are computed
# Explicitly use list() because we may receive tuples
for f in list(fields_pre) + list(fields_post):
field_column = self._all_columns.get(f) and self._all_columns.get(f).column
if field_column and field_column.deprecated:
_logger.warning('Field %s.%s is deprecated: %s', self._name, f, field_column.deprecated)
readonly = None
for vals in res:
for field in vals.copy():
@ -3973,6 +3982,9 @@ class BaseModel(object):
direct = []
totranslate = context.get('lang', False) and (context['lang'] != 'en_US')
for field in vals:
field_column = self._all_columns.get(field) and self._all_columns.get(field).column
if field_column and field_column.deprecated:
_logger.warning('Field %s.%s is deprecated: %s', self._name, field, field_column.deprecated)
if field in self._columns:
if self._columns[field]._classic_write and not (hasattr(self._columns[field], '_fnct_inv')):
if (not totranslate) or not self._columns[field].translate:

View File

@ -9,7 +9,7 @@ See the :ref:`test-framework` section in the :ref:`features` list.
"""
from . import test_expression, test_ir_sequence, test_orm,\
test_uninstall
test_view_validation, test_uninstall
fast_suite = [
test_ir_sequence,
@ -18,6 +18,7 @@ fast_suite = [
checks = [
test_expression,
test_orm,
test_view_validation,
]
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -5,7 +5,6 @@
<record id="view_test_exceptions_model" model="ir.ui.view">
<field name="name">Test exceptions</field>
<field name="model">test.exceptions.model</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Test exceptions">
<label string="Each button generates a specific exception on the server. The text on the right is the expected representation of the exception when displayed on the client."/>

View File

@ -0,0 +1,37 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest
from openerp.tools.html_sanitize import html_sanitize
test_case = """
<font size="2" style="color: rgb(31, 31, 31); font-family: monospace; font-variant: normal; line-height: normal; ">test1</font>
<div style="color: rgb(31, 31, 31); font-family: monospace; font-variant: normal; line-height: normal; font-size: 12px; font-style: normal; ">
<b>test2</b></div><div style="color: rgb(31, 31, 31); font-family: monospace; font-variant: normal; line-height: normal; font-size: 12px; ">
<i>test3</i></div><div style="color: rgb(31, 31, 31); font-family: monospace; font-variant: normal; line-height: normal; font-size: 12px; ">
<u>test4</u></div><div style="color: rgb(31, 31, 31); font-family: monospace; font-variant: normal; line-height: normal; font-size: 12px; ">
<strike>test5</strike></div><div style="color: rgb(31, 31, 31); font-family: monospace; font-variant: normal; line-height: normal; ">
<font size="5">test6</font></div><div><ul><li><font color="#1f1f1f" face="monospace" size="2">test7</font></li><li>
<font color="#1f1f1f" face="monospace" size="2">test8</font></li></ul><div><ol><li><font color="#1f1f1f" face="monospace" size="2">test9</font>
</li><li><font color="#1f1f1f" face="monospace" size="2">test10</font></li></ol></div></div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><div><font color="#1f1f1f" face="monospace" size="2">
test11</font></div></div></div></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><font color="#1f1f1f" face="monospace" size="2">
test12</font></div><div><font color="#1f1f1f" face="monospace" size="2"><br></font></div></blockquote></blockquote>
<font color="#1f1f1f" face="monospace" size="2"><a href="http://google.com">google</a></font>
<a href="javascript:alert('malicious code')">test link</a>
"""
class TestSanitizer(unittest.TestCase):
def test_simple(self):
x = "yop"
self.assertEqual(x, html_sanitize(x))
def test_test_case(self):
html_sanitize(test_case)
def test_crm(self):
html_sanitize("Merci à l'intérêt pour notre produit.nous vous contacterons bientôt. Merci")
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,131 @@
# This test can be run stand-alone with something like:
# > PYTHONPATH=. python2 openerp/tests/test_view_validation.py
from lxml import etree
from StringIO import StringIO
import unittest2
import openerp
from openerp.tools.view_validation import *
invalid_form = etree.parse(StringIO('''\
<form>
<label></label>
<group>
<div>
<page></page>
<label colspan="True"></label>
<field></field>
</div>
</group>
<notebook>
<page>
<group col="Two">
<div>
<label></label>
<field colspan="Five"> </field>
</div>
</group>
</page>
</notebook>
</form>
''')).getroot()
valid_form = etree.parse(StringIO('''\
<form string="">
<field name=""></field>
<field name=""></field>
<notebook>
<page>
<field name=""></field>
<label string=""></label>
<field name=""></field>
</page>
<page>
<group colspan="5" col="2">
<label for=""></label>
<label string="" colspan="5"></label>
</group>
</page>
</notebook>
</form>
''')).getroot()
invalid_graph = etree.parse(StringIO('''\
<graph>
<label/>
<group>
<div>
<field></field>
<field></field>
</div>
</group>
</graph>
''')).getroot()
valid_graph = etree.parse(StringIO('''\
<graph string="">
<field name=""></field>
<field name=""></field>
</graph>
''')).getroot()
invalid_tree = etree.parse(StringIO('''\
<tree>
<group>
<div>
<field></field>
<field></field>
</div>
</group>
</tree>
''')).getroot()
valid_tree= etree.parse(StringIO('''\
<tree string="">
<field name=""></field>
<field name=""></field>
<button/>
<field name=""></field>
</tree>
''')).getroot()
class test_view_validation(unittest2.TestCase):
""" Test the view validation code (but not the views themselves). """
def test_page_validation(self):
assert not valid_page_in_book(invalid_form)
assert valid_page_in_book(valid_form)
def test_all_field_validation(self):
assert not valid_att_in_field(invalid_form)
assert valid_att_in_field(valid_form)
def test_all_label_validation(self):
assert not valid_att_in_label(invalid_form)
assert valid_att_in_label(valid_form)
def test_form_string_validation(self):
assert not valid_att_in_form(invalid_form)
assert valid_att_in_form(valid_form)
def test_graph_validation(self):
assert not valid_field_in_graph(invalid_graph)
assert valid_field_in_graph(valid_graph)
def test_tree_validation(self):
assert not valid_field_in_tree(invalid_tree)
assert valid_field_in_tree(valid_tree)
def test_colspan_datatype_validation(self):
assert not valid_type_in_colspan(invalid_form)
assert valid_type_in_colspan(valid_form)
def test_col_datatype_validation(self):
assert not valid_type_in_col(invalid_form)
assert valid_type_in_col(valid_form)
if __name__ == '__main__':
unittest2.main()

View File

@ -33,6 +33,7 @@ from pdf_utils import *
from yaml_import import *
from sql import *
from float_utils import *
from html_sanitize import *
#.apidoc title: Tools

View File

@ -607,8 +607,9 @@ form: module.record_id""" % (xml_id,)
"Verify that this is a window action or add a type argument." % (a_action,)
action_type,action_mode,action_name,view_id,target = rrres
if view_id:
cr.execute('SELECT type FROM ir_ui_view WHERE id=%s', (int(view_id),))
action_mode, = cr.fetchone()
cr.execute('SELECT arch FROM ir_ui_view WHERE id=%s', (int(view_id),))
arch, = cr.fetchone()
action_mode = etree.fromstring(arch.encode('utf8')).tag
cr.execute('SELECT view_mode FROM ir_act_window_view WHERE act_window_id=%s ORDER BY sequence LIMIT 1', (int(a_id),))
if cr.rowcount:
action_mode, = cr.fetchone()

View File

@ -0,0 +1,62 @@
from pyquery import PyQuery as pq
import re
def html_sanitize(x):
if not x:
return x
root = pq("<div />")
if type(x) == str:
x = unicode(x, "utf8", "replace")
root.html(x)
result = handle_element(root[0])
new = pq(result)
return new.html()
to_remove = set(["script", "head", "meta", "title", "link", "img"])
to_unwrap = set(["html", "body"])
javascript_regex = re.compile("""^\s*javascript\s*\:.*$""")
def handle_a(el, new):
href = el.get("href", "#")
if javascript_regex.search(href):
href = "#"
new.set("href", href)
special = {
"a": handle_a,
}
def handle_element(el):
if type(el) == str or type(el) == unicode:
return [el]
if el.tag in to_remove:
return []
if el.tag in to_unwrap:
return reduce(lambda x,y: x+y, [handle_element(x) for x in children(el)])
new = pq("<%s />" % el.tag)[0]
for i in children(el):
append_to(handle_element(i), new)
if el.tag in special:
special[el.tag](el, new)
return [new]
def children(el):
res = []
if el.text is not None:
res.append(el.text)
for i in el.getchildren():
res.append(i)
if i.tail is not None:
res.append(i.tail)
return res
def append_to(new_ones, el):
for i in new_ones:
if type(i) == str or type(i) == unicode:
children = el.getchildren()
if len(children) == 0:
el.text = i
else:
children[-1].tail = i
else:
el.append(i)

View File

@ -0,0 +1,85 @@
""" View validation code (using assertions, not the RNG schema). """
import logging
_logger = logging.getLogger(__name__)
def valid_page_in_book(arch):
"""A `page` node must be below a `book` node."""
return not arch.xpath('//page[not(ancestor::notebook)]')
def valid_field_in_graph(arch):
"""A `graph` must have `string` attribute and an immediate node of `graph` view must be `field`."""
if arch.xpath('//graph[not (@string)]'):
return False
for child in arch.xpath('/graph/child::*'):
if child.tag != 'field':
return False
return True
def valid_field_in_tree(arch):
"""A `tree` must have `string` attribute and an immediate node of `tree` view must be `field` or `button`."""
if arch.xpath('//tree[not (@string)]'):
return False
for child in arch.xpath('/tree/child::*'):
if child.tag not in ('field', 'button'):
return False
return True
def valid_att_in_field(arch):
"""A `name` attribute must be in a `field` node."""
return not arch.xpath('//field[not (@name)]')
def valid_att_in_label(arch):
"""A `for` and `string` attribute must be on a `label` node."""
return not arch.xpath('//label[not ((@for) or (@string))]')
def valid_att_in_form(arch):
"""A `string` attribute must be on a `form` node."""
return not arch.xpath('//form[not (@string)]')
def valid_type_in_colspan(arch):
"""A `colspan` attribute must be an `integer` type."""
for attrib in arch.xpath('//*/@colspan'):
try:
int(attrib)
except:
return False
return True
def valid_type_in_col(arch):
"""A `col` attribute must be an `integer` type."""
for attrib in arch.xpath('//*/@col'):
try:
int(attrib)
except:
return False
return True
def valid_view(arch):
if arch.tag == 'form':
for pred in [valid_page_in_book, valid_att_in_form, valid_type_in_colspan,\
valid_type_in_col, valid_att_in_field, valid_att_in_label]:
if not pred(arch):
_logger.error('Invalid XML: %s', pred.__doc__)
return False
elif arch.tag == 'graph':
for pred in [valid_field_in_graph, valid_att_in_field]:
if not pred(arch):
_logger.error('Invalid XML: %s', pred.__doc__)
return False
elif arch.tag == 'tree':
for pred in [valid_field_in_tree, valid_att_in_field]:
if not pred(arch):
_logger.error('Invalid XML: %s', pred.__doc__)
return False
return True

View File

@ -102,6 +102,7 @@ setuptools.setup(
'mako',
'psycopg2',
'pydot',
'pyquery',
'python-dateutil < 2',
'python-ldap',
'python-openid',