diff options
| author | Numerigraphe - Lionel Sausin <ls@numerigraphe.fr> | 2010-11-12 15:10:41 +0100 |
|---|---|---|
| committer | Numerigraphe - Lionel Sausin <ls@numerigraphe.fr> | 2010-11-12 15:10:41 +0100 |
| commit | 182cf2b196da0d1f55ddfdcff62058b423e1bbc0 (patch) | |
| tree | 779b50e2e54b1624ba669b4a3f56bb6407c08d49 /bin/addons/base/module/wizard | |
| parent | e013734045bbaae906748a8026455bac6786568e (diff) | |
| parent | cc0d270bab0d0b7862430c3e527f7edc02d1d587 (diff) | |
[MERGE] sync with the trunk
bzr revid: ls@numerigraphe.fr-20101112141041-19kpvr7pzxqankqo
Diffstat (limited to 'bin/addons/base/module/wizard')
25 files changed, 1005 insertions, 708 deletions
diff --git a/bin/addons/base/module/wizard/__init__.py b/bin/addons/base/module/wizard/__init__.py index c0af5977b21..a4133a50113 100644 --- a/bin/addons/base/module/wizard/__init__.py +++ b/bin/addons/base/module/wizard/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). # @@ -15,19 +15,18 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +# along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## -import wizard_update_module -import wizard_module_upgrade -import wizard_configuration -import wizard_module_lang_install -import add_new -import wizard_export_lang -import wizard_import_lang -import wizard_module_import -import wizard_update_translations +import base_module_import +import base_module_update +import base_language_install +import base_import_language +import base_module_upgrade +import base_module_configuration +import base_export_language +import base_update_translations # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/bin/addons/base/module/wizard/wizard_export_lang.py b/bin/addons/base/module/wizard/base_export_language.py index b59351be61b..1b43b561ac3 100644 --- a/bin/addons/base/module/wizard/wizard_export_lang.py +++ b/bin/addons/base/module/wizard/base_export_language.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -15,7 +15,7 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +# along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## @@ -27,7 +27,7 @@ from osv import fields,osv from tools.translate import _ from tools.misc import get_iso_codes -class wizard_export_lang(osv.osv_memory): +class base_language_export(osv.osv_memory): def _get_languages(self, cr, uid, context): lang_obj=pooler.get_pool(cr.dbname).get('res.lang') @@ -67,7 +67,8 @@ class wizard_export_lang(osv.osv_memory): buf.close() return self.write(cr, uid, ids, {'state':'get', 'data':out, 'advice':this.advice, 'name':this.name}, context=context) - _name = "wizard.module.lang.export" + _name = "base.language.export" + _inherit = "ir.wizard.screen" _columns = { 'name': fields.char('Filename', 16, readonly=True), 'lang': fields.selection(_get_languages, 'Language', help='To export a new language, do not select a language.'), # not required: unset = new language @@ -78,11 +79,11 @@ class wizard_export_lang(osv.osv_memory): 'state': fields.selection( ( ('choose','choose'), # choose language ('get','get'), # get the file ) ), - } - _defaults = { 'state': lambda *a: 'choose', - 'name': lambda *a: 'lang.tar.gz' - } -wizard_export_lang() - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + } + _defaults = { + 'state': lambda *a: 'choose', + 'name': lambda *a: 'lang.tar.gz' + } +base_language_export() +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file diff --git a/bin/addons/base/module/wizard/base_export_language_view.xml b/bin/addons/base/module/wizard/base_export_language_view.xml new file mode 100644 index 00000000000..c908c5ce03a --- /dev/null +++ b/bin/addons/base/module/wizard/base_export_language_view.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <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"> + <group col="8"> + <group colspan="3"> + <field name="config_logo" widget="image" width="220" height="130" nolabel="1" colspan="1"/> + <newline/> + <label colspan="4" width="220" string="OpenERP translations (core, modules, clients) are managed through Launchpad.net, our open source project management facility. We use their online interface to synchronize all translations efforts."/> + <label colspan="4" width="220" string="To improve or expand the official translations, you should use directly Lauchpad's web interface (Rosetta). If you need to perform mass translation, Launchpad also allows uploading full .po files at once"/> + <label colspan="4" width="220"/> + <label colspan="4" width="220" string="To browse official translations, you can start with these links:"/> + <label colspan="4" width="220" string="https://help.launchpad.net/Translations"/> + <label colspan="4" width="220" string="https://translations.launchpad.net/openobject"/> + </group> + <separator orientation="vertical" rowspan="15"/> + <group colspan="4"> + <group colspan="4" states="choose"> + <separator colspan="4" string="Export Translation"/> + <field name="lang"/> + <field name="format" required="1"/> + <field height="200" name="modules" nolabel="1" colspan="4"/> + <field invisible="1" name="state"/> + </group> + <group colspan="4" states="get"> + <separator string="Export done" colspan="4"/> + <field name="name" invisible="1" colspan="4"/> + <field name="data" nolabel="1" readonly="1" fieldname="name" colspan="4"/> + <field height="80" name="advice" nolabel="1" colspan="4"/> + </group> + </group> + <group colspan="8" col="8" states="choose"> + <separator string="" colspan="8"/> + <label colspan="6" width="220"/> + <button icon="gtk-cancel" name="act_cancel" special="cancel" string="_Close" type="object"/> + <button icon="gtk-ok" name="act_getfile" string="_Export" type="object"/> + </group> + <group colspan="8" col="8" states="get"> + <separator string="" colspan="8"/> + <label colspan="7" width="220"/> + <button icon="gtk-close" name="act_destroy" special="cancel" string="_Close" type="object"/> + </group> + </group> + </form> + </field> + </record> + + <record id="action_wizard_lang_export" model="ir.actions.act_window"> + <field name="name">Export Translation</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">base.language.export</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="target">new</field> + </record> + <menuitem action="action_wizard_lang_export" id="menu_wizard_lang_export" parent="menu_translation_export"/> + </data> +</openerp> diff --git a/bin/addons/base/module/wizard/base_import_language.py b/bin/addons/base/module/wizard/base_import_language.py new file mode 100644 index 00000000000..6608ade03ef --- /dev/null +++ b/bin/addons/base/module/wizard/base_import_language.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import tools +import base64 +from tempfile import TemporaryFile +from osv import osv, fields + +class base_language_import(osv.osv_memory): + """ Language Import """ + + _name = "base.language.import" + _description = "Language Import" + _inherit = "ir.wizard.screen" + + _columns = { + 'name': fields.char('Language Name',size=64 , required=True), + 'code': fields.char('Code (eg:en__US)',size=5 , required=True), + 'data': fields.binary('File', required=True), + } + + def import_lang(self, cr, uid, ids, context): + """ + Import Language + @param cr: the current row, from the database cursor. + @param uid: the current user’s ID for security checks. + @param ids: the ID or list of IDs + @param context: A standard dictionary + """ + + import_data = self.browse(cr, uid, ids)[0] + fileobj = TemporaryFile('w+') + fileobj.write(base64.decodestring(import_data.data)) + + # now we determine the file format + fileobj.seek(0) + first_line = fileobj.readline().strip().replace('"', '').replace(' ', '') + fileformat = first_line.endswith("type,name,res_id,src,value") and 'csv' or 'po' + fileobj.seek(0) + + tools.trans_load_data(cr.dbname, fileobj, fileformat, import_data.code, lang_name=import_data.name) + fileobj.close() + return {} + +base_language_import()
\ No newline at end of file diff --git a/bin/addons/base/module/wizard/base_import_language_view.xml b/bin/addons/base/module/wizard/base_import_language_view.xml new file mode 100644 index 00000000000..d313afc4080 --- /dev/null +++ b/bin/addons/base/module/wizard/base_import_language_view.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <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"> + <group col="8"> + <group colspan="3"> + <field name="config_logo" widget="image" width="220" height="130" nolabel="1" colspan="1"/> + <newline/> + <label colspan="4" width="220" string="Supported file formats: *.csv (Comma-separated values) or *.po (GetText Portable Objects)"/> + <label colspan="4" width="220" string="Please double-check that the file encoding is set to UTF-8 (sometimes called Unicode) when the translator exports it."/> + <label colspan="4" width="220"/> + <label colspan="4" width="220" string="When using CSV format, please also check that the first line of your file is one of the following:"/> + <label colspan="4" width="220" string="- type,name,res_id,src,value"/> + <label colspan="4" width="220" string="- module,type,name,res_id,src,value"/> + </group> + <separator orientation="vertical" rowspan="15"/> + <group colspan="4" col="4"> + <separator string="Import Translation" colspan="4"/> + <label colspan="4" nolabel="1" string="If you need another language than the official ones available, you can import a language pack from here. Other OpenERP languages than the official ones can be found on launchpad."/> + <newline/> + <field name="name" width="200"/> + <field name="code"/> + <field name="data" colspan="4"/> + </group> + <group colspan="8" col="8"> + <separator string="" colspan="8"/> + <label colspan="6" width="220"/> + <button special="cancel" string="_Close" icon="gtk-cancel"/> + <button name="import_lang" string="_Import" type="object" icon="gtk-ok"/> + </group> + </group> + </form> + </field> + </record> + + <record id="action_view_base_import_language" model="ir.actions.act_window"> + <field name="name">Import Translation</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">base.language.import</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="target">new</field> + </record> + + <menuitem + action="action_view_base_import_language" + id="menu_view_base_import_language" + parent="menu_translation_export"/> + + </data> +</openerp> diff --git a/bin/addons/base/module/wizard/base_language_install.py b/bin/addons/base/module/wizard/base_language_install.py new file mode 100644 index 00000000000..9cdae41ad2b --- /dev/null +++ b/bin/addons/base/module/wizard/base_language_install.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import tools +from osv import osv, fields + +class base_language_install(osv.osv_memory): + """ Install Language""" + + _name = "base.language.install" + _inherit = "ir.wizard.screen" + _description = "Install Language" + + _columns = { + 'lang': fields.selection(tools.scan_languages(),'Language', required=True), + 'overwrite': fields.boolean('Overwrite Existing Terms', help="If you check this box, your customized translations will be overwritten and replaced by the official ones."), + 'state':fields.selection([('init','init'),('done','done')], 'state', readonly=True), + } + _defaults = { + 'state': 'init', + 'overwrite': False + } + def lang_install(self, cr, uid, ids, context): + language_obj = self.browse(cr, uid, ids)[0] + lang = language_obj.lang + if lang: + modobj = self.pool.get('ir.module.module') + mids = modobj.search(cr, uid, [('state', '=', 'installed')]) + if language_obj.overwrite: + context = {'overwrite': True} + modobj.update_translations(cr, uid, mids, lang, context or {}) + self.write(cr, uid, ids, {'state': 'done'}, context=context) + return False +base_language_install() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/bin/addons/base/module/wizard/base_language_install_view.xml b/bin/addons/base/module/wizard/base_language_install_view.xml new file mode 100644 index 00000000000..d207ea9ea29 --- /dev/null +++ b/bin/addons/base/module/wizard/base_language_install_view.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <record id="view_base_language_install" model="ir.ui.view"> + <field name="name">Load Official Translation</field> + <field name="model">base.language.install</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form string="Load Official Translation"> + <group col="8"> + <group colspan="3"> + <field name="config_logo" widget="image" width="220" height="130" nolabel="1" colspan="1"/> + <newline/> + <label colspan="4" width="220" string="This wizard helps you add a new language to your OpenERP system. After loading a new language it becomes available as default interface language for users and partners."/> + <label colspan="4" width="220"/> + <label colspan="4" width="220" string="Please be patient, this operation may take a few minutes (depending on the number of modules currently installed)..."/> + <field name="state" invisible="1"/> + </group> + <separator orientation="vertical" rowspan="15"/> + <group colspan="4"> + <separator string="Load an Official Translation" colspan="4"/> + <group states="init" colspan="4"> + <field name="lang" colspan="4"/> + <field name="overwrite" colspan="4" groups="base.group_extended"/> + </group> + <group states="done" colspan="4"> + <label string="The selected language has been successfully installed. +You must change the preferences of the user and open a new menu to view the changes." colspan="4"/> + </group> + </group> + <group colspan="8" col="8" states="init"> + <separator string="" colspan="8"/> + <label colspan="6" width="220"/> + <button special="cancel" string="Cancel" icon="gtk-cancel"/> + <button name="lang_install" string="Load" type="object" icon="gtk-ok"/> + </group> + <group colspan="8" col="8" states="done"> + <separator string="" colspan="8"/> + <label colspan="7" width="220"/> + <button special="cancel" string="Close" icon="gtk-ok"/> + </group> + </group> + </form> + </field> + </record> + + <record id="action_view_base_language_install" model="ir.actions.act_window"> + <field name="name">Load Official Translation</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">base.language.install</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="target">new</field> + </record> + + <menuitem + name="Load an Official Translation" + action="action_view_base_language_install" + id="menu_view_base_language_install" + parent="menu_translation" sequence="2"/> + </data> +</openerp> + diff --git a/bin/addons/base/module/wizard/base_module_configuration.py b/bin/addons/base/module/wizard/base_module_configuration.py new file mode 100644 index 00000000000..866b22905e0 --- /dev/null +++ b/bin/addons/base/module/wizard/base_module_configuration.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +from osv import osv +from tools.translate import _ + +class base_module_configuration(osv.osv_memory): + + _name = "base.module.configuration" + + def start(self, cr, uid, ids, context=None): + todo_ids = self.pool.get('ir.actions.todo').search(cr, uid, ['|', '|', ('restart','=','always'), ('state', '=', 'open'), '&', ('state', '=', 'skip'), ('restart', '=', 'onskip')]) + if not todo_ids: + # When there is no wizard todo it will display message + data_obj = self.pool.get('ir.model.data') + result = data_obj._get_id(cr, uid, 'base', 'view_base_module_configuration_form') + view_id = data_obj.browse(cr, uid, result).res_id + value = { + 'name': _('System Configuration done'), + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'base.module.configuration', + 'view_id': [view_id], + 'type': 'ir.actions.act_window', + 'target': 'new' + } + return value + # Run the config wizards + config_pool = self.pool.get('res.config') + return config_pool.start(cr, uid, ids, context=context) + +base_module_configuration() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/bin/addons/base/module/wizard/base_module_configuration_view.xml b/bin/addons/base/module/wizard/base_module_configuration_view.xml new file mode 100644 index 00000000000..2d0b31b7126 --- /dev/null +++ b/bin/addons/base/module/wizard/base_module_configuration_view.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <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"> + <label align="0.0" string="All pending configuration wizards have been executed. You may restart individual wizards via the list of configuration wizards." colspan="4"/> + <separator string="" colspan="4"/> + <newline/> + <button special="cancel" string="_Ok" icon="gtk-ok"/> + </form> + </field> + </record> + + + <record id="action_start_configurator" model="ir.actions.server"> + <field name="name">Start Configuration</field> + <field name="model_id" ref="model_base_module_configuration"/> + <field name="state">code</field> + <field name="code">action = obj.start([])</field> + </record> + + <menuitem name="Start Configuration" + action="action_start_configurator" + id="menu_view_base_module_configuration" parent="base.menu_config" + type="server" icon="STOCK_EXECUTE" sequence="100" /> + + <record model="ir.values" id="action_todo_config"> + <field name="model_id" ref="model_ir_actions_todo" /> + <field name="object" eval="1" /> + <field name="name">Start Configuration</field> + <field name="key2">client_action_multi</field> + <field name="value" eval="'ir.actions.server,' + str(ref('action_start_configurator'))" /> + <field name="key">action</field> + <field name="model">ir.actions.todo</field> + </record> + <record id="ir_ui_view_sc_configuration" model="ir.ui.view_sc"> + <field name="name">Reconfigure</field> + <field name="resource">ir.ui.menu</field> + <field name="user_id" ref="base.user_root"/> + <field name="res_id" ref="menu_view_base_module_configuration"/> + </record> + + </data> +</openerp> diff --git a/bin/addons/base/module/wizard/base_module_import.py b/bin/addons/base/module/wizard/base_module_import.py new file mode 100644 index 00000000000..05c3b18198d --- /dev/null +++ b/bin/addons/base/module/wizard/base_module_import.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import os +import tools + +import zipfile +from StringIO import StringIO +import base64 +from tools.translate import _ +from osv import osv, fields + +class base_module_import(osv.osv_memory): + """ Import Module """ + + _name = "base.module.import" + _inherit = "ir.wizard.screen" + _description = "Import Module" + + _columns = { + 'module_file': fields.binary('Module .ZIP file', required=True), + 'state':fields.selection([('init','init'),('done','done')], 'state', readonly=True), + 'module_name': fields.char('Module Name', size=128), + } + + _defaults = { + 'state': 'init', + } + + def importzip(self, cr, uid, ids, context): + (data,) = self.browse(cr, uid, ids , context=context) + module_data = data.module_file + + val = base64.decodestring(module_data) + fp = StringIO() + fp.write(val) + fdata = zipfile.ZipFile(fp, 'r') + fname = fdata.namelist()[0] + module_name = os.path.split(fname)[0] + + ad = tools.config['addons_path'].split(",")[-1] + + fname = os.path.join(ad, module_name+'.zip') + try: + fp = file(fname, 'wb') + fp.write(val) + fp.close() + except IOError: + raise osv.except_osv(_('Error !'), _('Can not create the module file: %s !') % (fname,) ) + + self.pool.get('ir.module.module').update_list(cr, uid, {'module_name': module_name,}) + self.write(cr, uid, ids, {'state':'done', 'module_name': module_name}, context) + return False + + def action_module_open(self, cr, uid, ids, context): + (data,) = self.browse(cr, uid, ids , context=context) + return { + 'domain': str([('name', '=', data.module_name)]), + 'name': 'Modules', + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'ir.module.module', + 'type': 'ir.actions.act_window', + } + +base_module_import() + + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file diff --git a/bin/addons/base/module/wizard/base_module_import_view.xml b/bin/addons/base/module/wizard/base_module_import_view.xml new file mode 100644 index 00000000000..8e43789b057 --- /dev/null +++ b/bin/addons/base/module/wizard/base_module_import_view.xml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <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"> + <group col="8"> + <group colspan="3" col="1"> + <field name="config_logo" widget="image" width="220" height="130" nolabel="1" colspan="1"/> + <newline/> + <label width="220" string="This wizard helps you add a new language to you OpenERP system. After loading a new language it becomes available as default interface language for users and partners."/> + <label width="220"/> + <label width="220" string="Please be patient, this operation may take a few minutes (depending on the number of modules currently installed)..."/> + <field name="state" invisible="1"/> + </group> + <separator orientation="vertical" rowspan="5"/> + <group colspan="4"> + <separator string="Module Import" colspan="4"/> + <group states="init" col="4"> + <label string="Select module package to import (.zip file):" colspan="4"/> + <field name="module_file" colspan="4"/> + </group> + <group states="done" col="4"> + <label string="Module file successfully imported!" colspan="4"/> + </group> + </group> + <group colspan="8" col="8" states="init"> + <separator string="" colspan="8"/> + <label colspan="6" width="220"/> + <button special="cancel" string="Cancel" icon="gtk-cancel"/> + <button name="importzip" string="Import module" type="object" icon="gtk-apply"/> + </group> + <group colspan="8" col="8" states="done"> + <separator string="" colspan="8"/> + <label colspan="6" width="220"/> + <button special="cancel" string="Close" icon="gtk-ok"/> + <button name="action_module_open" string="Open Modules" type="object" icon="gtk-go-forward"/> + </group> + </group> + </form> + </field> + </record> + + <record id="action_view_base_module_import" model="ir.actions.act_window"> + <field name="name">Module Import</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">base.module.import</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="target">new</field> + </record> + + <menuitem + name="Import Module" + action="action_view_base_module_import" + id="menu_view_base_module_import" + parent="menu_management" + sequence="1"/> + + </data> +</openerp> + diff --git a/bin/addons/base/module/wizard/add_new.py b/bin/addons/base/module/wizard/base_module_scan.py index c6eddab2adb..d47e091955f 100644 --- a/bin/addons/base/module/wizard/add_new.py +++ b/bin/addons/base/module/wizard/base_module_scan.py @@ -1,9 +1,8 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). -# Copyright (C) 2010 OpenERP s.a. (<http://openerp.com>). +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -16,34 +15,26 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +# along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## - import os -import re import glob -import time import imp import tools -import wizard -import pooler import zipfile +from osv import osv -module_name_re = re.compile('.*addons.(.*?).__terp__.py$') +class base_module_scan(osv.osv_memory): + """ scan module """ -_info_arch = '''<?xml version="1.0"?> -<form string="Scan for new modules"> - <label string="This function will check if you installed new modules in the 'addons' path of your server installation." colspan="4" /> -</form> -''' -_info_fields = {} + _name = "base.module.scan" + _description = "scan module" -class wizard_install_module(wizard.interface): - def watch_dir(self, cr, uid, data, context): - mod_obj = pooler.get_pool(cr.dbname).get('ir.module.module') + def watch_dir(self, cr, uid, ids, context): + mod_obj = self.pool.get('ir.module.module') all_mods = mod_obj.read(cr, uid, mod_obj.search(cr, uid, []), ['name', 'state']) known_modules = [x['name'] for x in all_mods] ls_ad = glob.glob(os.path.join(tools.config['addons_path'], '*', '__terp__.py')) @@ -79,18 +70,4 @@ class wizard_install_module(wizard.interface): mod_obj.write(cr, uid, [mod['id']], {'state': 'uninstalled'}) return {} - states = { - 'init': { - 'actions': [], - 'result': {'type':'form', 'arch': _info_arch, 'fields': _info_fields, 'state':[('end','Cancel','gtk-cancel'),('addmod','Check new modules','gtk-ok')]} - }, - 'addmod': { - 'actions': [watch_dir], - 'result': {'type':'state', 'state':'end'} - }, - } -wizard_install_module('module.module.scan') - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - +base_module_scan()
\ No newline at end of file diff --git a/bin/addons/base/module/wizard/base_module_scan_view.xml b/bin/addons/base/module/wizard/base_module_scan_view.xml new file mode 100644 index 00000000000..a039c3122e1 --- /dev/null +++ b/bin/addons/base/module/wizard/base_module_scan_view.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <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"> + <separator string="" colspan="4"/> + <label string="This function will check if you installed new modules in the 'addons' path of your server installation." colspan="4" /> + <separator string="" colspan="4"/> + <newline/> + <group colspan="4"> + <button special="cancel" string="Close" icon="gtk-cancel"/> + <button name="watch_dir" string="Check new modules" type="object" icon="gtk-ok"/> + </group> + </form> + </field> + </record> + + <record id="action_view_base_module_scan" model="ir.actions.act_window"> + <field name="name">Module Scan</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">base.module.scan</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="target">new</field> + </record> + + </data> +</openerp> + diff --git a/bin/addons/base/module/wizard/base_module_update.py b/bin/addons/base/module/wizard/base_module_update.py new file mode 100644 index 00000000000..a0d21840d90 --- /dev/null +++ b/bin/addons/base/module/wizard/base_module_update.py @@ -0,0 +1,61 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## +from osv import osv, fields + +class base_module_update(osv.osv_memory): + """ Update Module """ + + _name = "base.module.update" + _description = "Update Module" + _inherit = "ir.wizard.screen" + + _columns = { + 'update': fields.integer('Number of modules updated', readonly=True), + 'add': fields.integer('Number of modules added', readonly=True), + 'state':fields.selection([('init','init'),('done','done')], 'state', readonly=True), + } + + _defaults = { + 'state': 'init', + } + + def update_module(self, cr, uid, ids, context=None): + module_obj = self.pool.get('ir.module.module') + update, add = module_obj.update_list(cr, uid,) + self.write(cr, uid, ids, {'update': update, 'add': add, 'state': 'done'}, context=context) + return False + + def action_module_open(self, cr, uid, ids, context): + res = { + 'domain': str([]), + 'name': 'Modules', + 'view_type': 'form', + 'view_mode': 'tree,form', + 'res_model': 'ir.module.module', + 'view_id': False, + 'type': 'ir.actions.act_window', + } + return res + + +base_module_update() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file diff --git a/bin/addons/base/module/wizard/base_module_update_view.xml b/bin/addons/base/module/wizard/base_module_update_view.xml new file mode 100644 index 00000000000..51f0c94f31c --- /dev/null +++ b/bin/addons/base/module/wizard/base_module_update_view.xml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <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"> + <group col="8"> + <group colspan="3"> + <field name="config_logo" widget="image" width="220" height="130" nolabel="1" colspan="1"/> + <newline/> + <label colspan="4" width="220" string="This wizard will scan all module repositories on the server side to detect newly added modules as well as any change to existing modules."/> + <label colspan="4" width="220"/> + <label colspan="4" width="220" string="Please be patient, as this operation may take a few seconds..."/> + <field name="state" invisible="1"/> + </group> + <separator orientation="vertical" rowspan="15"/> + <group colspan="4"> + <separator string="Module update result" colspan="4"/> + <group states="init" colspan="4"> + <label string="Click on Update below to start the process..." colspan="4"/> + </group> + <group states="done" colspan="4"> + <field name="update" colspan="4"/> + <field name="add" colspan="4"/> + </group> + </group> + <group colspan="8" col="8" states="init"> + <separator string="" colspan="8"/> + <label colspan="6" width="220"/> + <button special="cancel" string="Cancel" icon="gtk-cancel"/> + <button name="update_module" string="Update" type="object" icon="gtk-ok"/> + </group> + <group colspan="8" col="8" states="done"> + <separator string="" colspan="8"/> + <label colspan="6" width="220"/> + <button special="cancel" string="Close" icon="gtk-ok"/> + <button name="action_module_open" string="Open Modules" type="object" icon="gtk-go-forward"/> + </group> + </group> + </form> + </field> + </record> + + <record id="action_view_base_module_update" model="ir.actions.act_window"> + <field name="name">Module Update</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">base.module.update</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="target">new</field> + </record> + + <menuitem + name="Update Modules List" + action="action_view_base_module_update" + id="menu_view_base_module_update" + parent="menu_management" + sequence="2" + icon="STOCK_CONVERT"/> + + </data> +</openerp> diff --git a/bin/addons/base/module/wizard/base_module_upgrade.py b/bin/addons/base/module/wizard/base_module_upgrade.py new file mode 100644 index 00000000000..4db4028bdb0 --- /dev/null +++ b/bin/addons/base/module/wizard/base_module_upgrade.py @@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import pooler +from osv import osv, fields + +class base_module_upgrade(osv.osv_memory): + """ Module Upgrade """ + + _name = "base.module.upgrade" + _description = "Module Upgrade" + + _columns = { + 'module_info': fields.text('Modules to update',readonly=True), + } + + def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False): + """ Changes the view dynamically + @param self: The object pointer. + @param cr: A database cursor + @param uid: ID of the user currently logged in + @param context: A standard dictionary + @return: New arch of view. + """ + res = super(base_module_upgrade, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False) + record_id = context and context.get('active_id', False) or False + active_model = context.get('active_model') + if (not record_id) or (not active_model): + return res + + ids = self.get_module_list(cr, uid, context=context) + if not ids: + res['arch'] = '''<form string="Apply Scheduled Upgrades"> + <separator string="System update completed" colspan="4"/> + <label align="0.0" string="The selected modules have been updated / installed !" colspan="4"/> + <label align="0.0" string="We suggest to reload the menu tab to see the new menus (Ctrl+T then Ctrl+R)." colspan="4"/> + <separator string="" colspan="4"/> + <newline/> + <button special="cancel" string="Close" icon="gtk-cancel"/> + <button name="config" string="Start configuration" type="object" icon="gtk-ok"/> + </form>''' + + return res + + def get_module_list(self, cr, uid, context=None): + mod_obj = self.pool.get('ir.module.module') + ids = mod_obj.search(cr, uid, [ + ('state', 'in', ['to upgrade', 'to remove', 'to install'])]) + return ids + + def default_get(self, cr, uid, fields, context=None): + """ + This function checks for precondition before wizard executes + @param self: The object pointer + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param fields: List of fields for default value + @param context: A standard dictionary for contextual values + """ + mod_obj = self.pool.get('ir.module.module') + ids = self.get_module_list(cr, uid, context=context) + res = mod_obj.read(cr, uid, ids, ['name','state'], context) + return {'module_info': '\n'.join(map(lambda x: x['name']+' : '+x['state'], res))} + + def upgrade_module(self, cr, uid, ids, context): + pool = pooler.get_pool(cr.dbname) + mod_obj = self.pool.get('ir.module.module') + data_obj = self.pool.get('ir.model.data') + ids = mod_obj.search(cr, uid, [('state', 'in', ['to upgrade', 'to remove', 'to install'])]) + unmet_packages = [] + mod_dep_obj = pool.get('ir.module.module.dependency') + for mod in mod_obj.browse(cr, uid, ids): + depends_mod_ids = mod_dep_obj.search(cr, uid, [('module_id', '=', mod.id)]) + for dep_mod in mod_dep_obj.browse(cr, uid, depends_mod_ids): + if dep_mod.state in ('unknown','uninstalled'): + unmet_packages.append(dep_mod.name) + if len(unmet_packages): + raise osv.except_osv('Unmet dependency !', 'Following modules are uninstalled or unknown. \n\n'+'\n'.join(unmet_packages)) + mod_obj.download(cr, uid, ids, context=context) + cr.commit() + _, pool = pooler.restart_pool(cr.dbname, update_module=True) + + id2 = data_obj._get_id(cr, uid, 'base', 'view_base_module_upgrade_install') + if id2: + id2 = data_obj.browse(cr, uid, id2, context=context).res_id + + return { + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'base.module.upgrade', + 'views': [(id2, 'form')], + 'view_id': False, + 'type': 'ir.actions.act_window', + 'target': 'new', + } + + def config(self, cr, uid, ids, context=None): + return self.pool.get('res.config').next(cr, uid, [], context=context) + +base_module_upgrade() diff --git a/bin/addons/base/module/wizard/base_module_upgrade_view.xml b/bin/addons/base/module/wizard/base_module_upgrade_view.xml new file mode 100644 index 00000000000..b8bb282d6ed --- /dev/null +++ b/bin/addons/base/module/wizard/base_module_upgrade_view.xml @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <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"> + <group colspan="2" col="4"> + <label align="0.0" string="Your system will be updated." colspan="4"/> + <label align="0.0" string="Note that this operation might take a few minutes." colspan="4"/> + <separator string="Modules to update" colspan="4"/> + <field name="module_info" nolabel="1" colspan="4"/> + <separator string="" colspan="4"/> + <button special="cancel" string="Cancel" icon="gtk-cancel"/> + <button name="upgrade_module" string="Start update" type="object" icon="gtk-ok"/> + </group> + </form> + </field> + </record> + + <record id="action_view_base_module_upgrade" model="ir.actions.act_window"> + <field name="name">Module Upgrade</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">base.module.upgrade</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="target">new</field> + </record> + + <menuitem + name="Apply Scheduled Upgrades" + action="action_view_base_module_upgrade" + id="menu_view_base_module_upgrade" + parent="menu_management" + sequence="3"/> + + <act_window id="action_view_base_module_upgrade_window" + key2="client_action_multi" name="Apply Scheduled Upgrades" + res_model="base.module.upgrade" src_model="ir.module.module" + view_mode="form" target="new" view_type="form" /> + + <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 Scheduled Upgrades"> + <separator string="System update completed" colspan="4"/> + <label align="0.0" string="The selected modules have been updated / installed !" colspan="4"/> + <label align="0.0" string="We suggest to reload the menu tab to see the new menus (Ctrl+T then Ctrl+R)." colspan="4"/> + <separator string="" colspan="4"/> + <newline/> + <button special="cancel" string="Cancel" icon="gtk-cancel"/> + <button name="config" string="Start configuration" type="object" icon="gtk-ok"/> + </form> + </field> + </record> + + <record id="action_view_base_module_upgrade_install" model="ir.actions.act_window"> + <field name="name">Module Upgrade Install</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">base.module.upgrade</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="view_id" ref="view_base_module_upgrade_install"/> + <field name="target">new</field> + </record> + + </data> +</openerp>
\ No newline at end of file diff --git a/bin/addons/base/module/wizard/wizard_update_translations.py b/bin/addons/base/module/wizard/base_update_translations.py index 85914ff0164..b413e9d7093 100644 --- a/bin/addons/base/module/wizard/wizard_update_translations.py +++ b/bin/addons/base/module/wizard/base_update_translations.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). # @@ -15,7 +15,7 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. +# along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## @@ -24,18 +24,18 @@ import tools import pooler import cStringIO -class update_translations(osv.osv_memory): +class base_update_translations(osv.osv_memory): def _get_languages(self, cr, uid, context): lang_obj=pooler.get_pool(cr.dbname).get('res.lang') ids=lang_obj.search(cr, uid, ['&', ('active', '=', True), ('translatable', '=', True),]) langs=lang_obj.browse(cr, uid, ids) return [(lang.code, lang.name) for lang in langs] - + def _get_lang_name(self, cr, uid, lang_code): lang_obj=pooler.get_pool(cr.dbname).get('res.lang') ids=lang_obj.search(cr, uid, [('code', '=', lang_code)]) if not ids: - raise osv.orm_except('Bad lang') + raise osv.except_osv(_('No language with code "%s" exists') % lang_code) lang = lang_obj.browse(cr, uid, ids[0]) return lang.name def act_cancel(self, cr, uid, ids, context=None): @@ -50,9 +50,22 @@ class update_translations(osv.osv_memory): buf.close() return {'type': 'ir.actions.act_window_close'} - _name = 'wizard.module.update_translations' + def default_get(self, cr, uid, fields, context=None): + res = super(base_update_translations, self).default_get(cr, uid, fields, context=context) + + if context.get('active_model') != "res.lang": + return res + + record_id = context and context.get('active_id', False) or False + if record_id: + lang = self.pool.get('res.lang').browse(cr, uid, record_id).code + res.update(lang=lang) + return res + + _name = 'base.update.translations' + _inherit = "ir.wizard.screen" _columns = { 'lang': fields.selection(_get_languages, 'Language', required=True), } -update_translations() +base_update_translations()
\ No newline at end of file diff --git a/bin/addons/base/module/wizard/base_update_translations_view.xml b/bin/addons/base/module/wizard/base_update_translations_view.xml new file mode 100644 index 00000000000..60d30440ca1 --- /dev/null +++ b/bin/addons/base/module/wizard/base_update_translations_view.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + <record id="wizard_update_translations" model="ir.ui.view"> + <field name="name">Synchronize Translations</field> + <field name="model">base.update.translations</field> + <field name="type">form</field> + <field name="arch" type="xml"> + <form string="Synchronize Translations"> + <group col="8"> + <group colspan="3"> + <field name="config_logo" widget="image" width="220" height="130" nolabel="1" colspan="1"/> + <newline/> + <label colspan="4" width="220" string="This wizard will detect new terms to translate in the application, so that you can then add translations manually or perform a complete export (as a template for a new language example)."/> + </group> + <separator orientation="vertical" rowspan="15"/> + <group colspan="4"> + <separator string="Synchronize Translation" colspan="4"/> + <field name="lang" colspan="4"/> + </group> + <group colspan="8" col="8"> + <separator string="" colspan="8"/> + <label colspan="6" width="220"/> + <button icon="gtk-cancel" name="act_cancel" special="cancel" string="Cancel" type="object"/> + <button icon="gtk-ok" name="act_update" string="Update" type="object"/> + </group> + </group> + </form> + </field> + </record> + <record id="action_wizard_update_translations" model="ir.actions.act_window"> + <field name="name">Synchronize Translations</field> + <field name="type">ir.actions.act_window</field> + <field name="res_model">base.update.translations</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="target">new</field> + </record> + <menuitem action="action_wizard_update_translations" id="menu_wizard_update_translations" parent="menu_translation_app"/> + + </data> +</openerp> diff --git a/bin/addons/base/module/wizard/wizard_configuration.py b/bin/addons/base/module/wizard/wizard_configuration.py deleted file mode 100644 index e720ba419b0..00000000000 --- a/bin/addons/base/module/wizard/wizard_configuration.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## - -import wizard -import pooler - -class wizard_configuration(wizard.interface): - - def _config(self, cr, uid, data, context=None): - return pooler.get_pool(cr.dbname).get('res.config')\ - .next(cr, uid, [], context=context) - - states = { - 'init':{ - 'result': { - 'type': 'action', - 'action': _config, - 'state': 'end', - }, - } - } -wizard_configuration('module.configuration') -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/bin/addons/base/module/wizard/wizard_import_lang.py b/bin/addons/base/module/wizard/wizard_import_lang.py deleted file mode 100644 index 70f94a68f98..00000000000 --- a/bin/addons/base/module/wizard/wizard_import_lang.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## - -import wizard -import tools -import base64 -import pooler -from tempfile import TemporaryFile - -view_form="""<?xml version="1.0"?> -<form string="Import language"> - <image name="gtk-dialog-info" colspan="2"/> - <group colspan="2" col="4"> - <separator string="Import New Language" colspan="4"/> - <field name="name" width="200"/> - <field name="code"/> - <field name="data" colspan="4"/> - <label string="You have to import a .CSV file wich is encoded in UTF-8.\n -Please check that the first line of your file is one of the following:" colspan="4" align="0.0"/> - <label string="type,name,res_id,src,value" colspan="4"/> - <label string="module,type,name,res_id,src,value" colspan="4"/> - <label string="You can also import .po files." colspan="4" align="0.0"/> - </group> -</form>""" - -fields_form={ - 'name':{'string':'Language name', 'type':'char', 'size':64, 'required':True}, - 'code':{'string':'Code (eg:en__US)', 'type':'char', 'size':5, 'required':True}, - 'data':{'string':'File', 'type':'binary', 'required':True}, -} - -class wizard_import_lang(wizard.interface): - - def _import_lang(self, cr, uid, data, context): - form=data['form'] - fileobj = TemporaryFile('w+') - fileobj.write( base64.decodestring(form['data']) ) - - # now we determine the file format - fileobj.seek(0) - first_line = fileobj.readline().strip().replace('"', '').replace(' ', '') - fileformat = first_line.endswith("type,name,res_id,src,value") and 'csv' or 'po' - fileobj.seek(0) - - tools.trans_load_data(cr.dbname, fileobj, fileformat, form['code'], lang_name=form['name']) - fileobj.close() - return {} - - states={ - 'init':{ - 'actions': [], - 'result': {'type': 'form', 'arch': view_form, 'fields': fields_form, - 'state':[ - ('end', 'Cancel', 'gtk-cancel'), - ('finish', 'Ok', 'gtk-ok', True) - ] - } - }, - 'finish':{ - 'actions':[], - 'result':{'type':'action', 'action':_import_lang, 'state':'end'} - }, - } -wizard_import_lang('module.lang.import') - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/bin/addons/base/module/wizard/wizard_module_import.py b/bin/addons/base/module/wizard/wizard_module_import.py deleted file mode 100644 index 1350a4ad0ba..00000000000 --- a/bin/addons/base/module/wizard/wizard_module_import.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## - - -import wizard -import osv -import pooler -import os -import tools - -import zipfile -from StringIO import StringIO -import base64 -from tools.translate import _ - -finish_form ='''<?xml version="1.0"?> -<form string="Module import"> - <label string="Module successfully imported !" colspan="4"/> -</form> -''' - -ask_form ='''<?xml version="1.0"?> -<form string="Module import"> - <separator string="Module Import" colspan="4"/> - <label string="Please give your module .ZIP file to import." colspan="4"/> - <field name="module_file"/> -</form> -''' - -ask_fields = { - 'module_file': {'string': 'Module .ZIP file', 'type': 'binary', 'required': True}, -} - -class move_module_wizard(wizard.interface): - def importzip(self, cr, uid, data, context): - module_obj=pooler.get_pool(cr.dbname).get('ir.module.module') - module_data = data['form']['module_file'] - - val =base64.decodestring(module_data) - fp = StringIO() - fp.write(val) - fdata = zipfile.ZipFile(fp, 'r') - fname = fdata.namelist()[0] - module_name = os.path.split(fname)[0] - - ad = tools.config['addons_path'] - - fname = os.path.join(ad,module_name+'.zip') - try: - fp = file(fname, 'wb') - fp.write(val) - fp.close() - except IOError, e: - raise wizard.except_wizard(_('Error !'), _('Can not create the module file: %s !') % (fname,) ) - - pooler.get_pool(cr.dbname).get('ir.module.module').update_list(cr, uid) - return {'module_name': module_name} - - def _action_module_open(self, cr, uid, data, context): - return { - 'domain': str([('name', '=', data['form']['module_name'])]), - 'name': 'Module List', - 'view_type': 'form', - 'view_mode': 'tree,form', - 'res_model': 'ir.module.module', - 'view_id': False, - 'type': 'ir.actions.act_window' - } - - states = { - 'init': { - 'actions': [], - 'result': { - 'type': 'form', - 'arch': ask_form, - 'fields': ask_fields, - 'state': [ - ('end', 'Cancel', 'gtk-cancel'), - ('import', 'Import module', 'gtk-ok', True) - ] - } - }, - 'import': { - 'actions': [importzip], - 'result': { - 'type':'form', - 'arch':finish_form, - 'fields':{}, - 'state':[('open_window','Close')] - } - }, - 'open_window': { - 'actions': [], - 'result': {'type': 'action', 'action': _action_module_open, 'state':'end'} - }, - } -move_module_wizard('base.module.import') - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/bin/addons/base/module/wizard/wizard_module_lang_install.py b/bin/addons/base/module/wizard/wizard_module_lang_install.py deleted file mode 100644 index 7367bdb4baa..00000000000 --- a/bin/addons/base/module/wizard/wizard_module_lang_install.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## - -import wizard -import tools -import pooler - -view_form_end = """<?xml version="1.0"?> -<form string="Language file loaded."> - <image name="gtk-dialog-info" colspan="2"/> - <group colspan="2" col="4"> - <separator string="Installation Done" colspan="4"/> - <label align="0.0" string="The selected language has been successfully installed.\nYou must change the preferences of the user and open a new menu to view changes." colspan="4"/> - </group> -</form>""" - -view_form = """<?xml version="1.0"?> -<form string="System Upgrade"> - <image name="gtk-dialog-info" colspan="2"/> - <group colspan="2" col="4"> - <separator string="System Upgrade" colspan="4"/> - <label align="0.0" string="Choose a language to install:" colspan="4"/> - <field name="lang" colspan="4" required="1"/> - <label align="0.0" string="Note that this operation may take a few minutes." colspan="4"/> - </group> -</form>""" - - -class wizard_lang_install(wizard.interface): - def _lang_install(self, cr, uid, data, context): - lang = data['form']['lang'] - if lang: - modobj = pooler.get_pool(cr.dbname).get('ir.module.module') - mids = modobj.search(cr, uid, [('state', '=', 'installed')]) - modobj.update_translations(cr, uid, mids, lang) - return {} - - fields_form = { - 'lang': {'string':'Language', 'type':'selection', 'selection':tools.scan_languages(), - }, - } - - states = { - 'init': { - 'actions': [], - 'result': {'type': 'form', 'arch': view_form, 'fields': fields_form, - 'state': [ - ('end', 'Cancel', 'gtk-cancel'), - ('start', 'Start installation', 'gtk-ok', True) - ] - } - }, - 'start': { - 'actions': [_lang_install], - 'result': {'type': 'form', 'arch': view_form_end, 'fields': {}, - 'state': [ - ('end', 'Ok', 'gtk-ok', True) - ] - } - }, - } -wizard_lang_install('module.lang.install') - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/bin/addons/base/module/wizard/wizard_module_upgrade.py b/bin/addons/base/module/wizard/wizard_module_upgrade.py deleted file mode 100644 index 04be1c1428d..00000000000 --- a/bin/addons/base/module/wizard/wizard_module_upgrade.py +++ /dev/null @@ -1,219 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## - -import wizard -import pooler -import os -import tools - -view_form_end = """<?xml version="1.0"?> -<form string="System update done"> - <separator string="System update completed"/> - <label align="0.0" string="The selected modules have been updated / installed !" colspan="4"/> - <label align="0.0" string="We suggest to reload the menu tab to see the new menus (Ctrl+T then Ctrl+R)." colspan="4"/> -</form>""" - -view_form = """<?xml version="1.0"?> -<form string="System Update"> - <image name="gtk-dialog-info" colspan="2"/> - <group colspan="2" col="4"> - <label align="0.0" string="Your system will be updated." colspan="4"/> - <label align="0.0" string="Note that this operation might take a few minutes." colspan="4"/> - <separator string="Modules to update"/> - <field name="module_info" nolabel="1" colspan="4"/> - </group> -</form>""" - -view_field = { - "module_info": {'type': 'text', 'string': 'Modules to update', 'readonly': True}, -} - -class wizard_info_get(wizard.interface): - def _get_install(self, cr, uid, data, context): - pool=pooler.get_pool(cr.dbname) - mod_obj = pool.get('ir.module.module') - ids = mod_obj.search(cr, uid, [ - ('state', 'in', ['to upgrade', 'to remove', 'to install'])]) - res = mod_obj.read(cr, uid, ids, ['name','state'], context) - return {'module_info': '\n'.join(map(lambda x: x['name']+' : '+x['state'], res))} - - def _check_upgrade_module(self,cr,uid,data,context): - pool = pooler.get_pool(cr.dbname) - mod_obj = pool.get('ir.module.module') - ids = mod_obj.search(cr, uid, [ - ('state', 'in', ['to upgrade', 'to remove', 'to install'])]) - if ids and len(ids): - return 'next' - else: - return 'end' - - def _upgrade_module(self, cr, uid, data, context): - pool = pooler.get_pool(cr.dbname) - mod_obj = pool.get('ir.module.module') - ids = mod_obj.search(cr, uid, [('state', 'in', ['to upgrade', 'to remove', 'to install'])]) - unmet_packages = [] - mod_dep_obj = pool.get('ir.module.module.dependency') - for mod in mod_obj.browse(cr, uid, ids): - depends_mod_ids = mod_dep_obj.search(cr, uid, [('module_id', '=', mod.id)]) - for dep_mod in mod_dep_obj.browse(cr, uid, depends_mod_ids): - if dep_mod.state in ('unknown','uninstalled'): - unmet_packages.append(dep_mod.name) - if len(unmet_packages): - raise wizard.except_wizard('Unmet dependency !', 'Following modules are uninstalled or unknown. \n\n'+'\n'.join(unmet_packages)) - mod_obj.download(cr, uid, ids, context=context) - cr.commit() - db, pool = pooler.restart_pool(cr.dbname, update_module=True) - return {} - - def _config(self, cr, uid, data, context=None): - return pooler.get_pool(cr.dbname).get('res.config')\ - .next(cr, uid, [], context=context) - - states = { - 'init': { - 'actions': [], - 'result' : {'type': 'choice', 'next_state': _check_upgrade_module } - }, - 'next': { - 'actions': [_get_install], - 'result': {'type':'form', 'arch':view_form, 'fields': view_field, - 'state':[ - ('end', 'Cancel', 'gtk-cancel'), - ('start', 'Start update', 'gtk-ok', True) - ] - } - }, - 'start': { - 'actions': [_upgrade_module], - 'result': {'type':'form', 'arch':view_form_end, 'fields': {}, - 'state':[ - ('end', 'Close', 'gtk-close', True), - ('config', 'Start configuration', 'gtk-ok', True) - ] - } - }, - 'end': { - 'actions': [], - 'result': {'type':'form', 'arch':view_form_end, 'fields': {}, - 'state':[ - ('end', 'Close', 'gtk-close', True), - ('config', 'Start configuration', 'gtk-ok', True) - ] - } - }, - 'config':{ - 'result': { - 'type': 'action', - 'action': _config, - 'state': 'end', - }, - } - } -wizard_info_get('module.upgrade') - - -class wizard_info_get_simple(wizard.interface): - def _get_install(self, cr, uid, data, context): - pool=pooler.get_pool(cr.dbname) - mod_obj = pool.get('ir.module.module') - ids = mod_obj.search(cr, uid, [ - ('state', 'in', ['to upgrade', 'to remove', 'to install'])]) - res = mod_obj.read(cr, uid, ids, ['name','state'], context) - return {'module_info': '\n'.join(map(lambda x: x['name']+' : '+x['state'], res)),} - - def _check_upgrade_module(self,cr,uid,data,context): - pool = pooler.get_pool(cr.dbname) - mod_obj = pool.get('ir.module.module') - ids = mod_obj.search(cr, uid, [ - ('state', 'in', ['to upgrade', 'to remove', 'to install'])]) - if ids and len(ids): - return 'next' - else: - return 'end' - - def _upgrade_module(self, cr, uid, data, context): - pool = pooler.get_pool(cr.dbname) - mod_obj = pool.get('ir.module.module') - ids = mod_obj.search(cr, uid, [('state', 'in', ['to upgrade', 'to remove', 'to install'])]) - unmet_packages = [] - mod_dep_obj = pool.get('ir.module.module.dependency') - for mod in mod_obj.browse(cr, uid, ids): - depends_mod_ids = mod_dep_obj.search(cr, uid, [('module_id', '=', mod.id)]) - for dep_mod in mod_dep_obj.browse(cr, uid, depends_mod_ids): - if dep_mod.state in ('unknown','uninstalled'): - unmet_packages.append(dep_mod.name) - if len(unmet_packages): - raise wizard.except_wizard('Unmet dependencies!', 'The following modules are not installed or unavailable. \n\n'+'\n'.join(unmet_packages)) - mod_obj.download(cr, uid, ids, context=context) - cr.commit() - db, pool = pooler.restart_pool(cr.dbname, update_module=True) - return {} - - def _config(self, cr, uid, data, context=None): - return pooler.get_pool(cr.dbname).get('res.config')\ - .next(cr, uid, [], context=context) - - states = { - 'init': { - 'actions': [], - 'result' : {'type': 'choice', 'next_state': _check_upgrade_module } - }, - 'next': { - 'actions': [_get_install], - 'result': {'type':'form', 'arch':view_form, 'fields': view_field, - 'state':[ - ('end', 'Cancel', 'gtk-cancel'), - ('start', 'Start update', 'gtk-ok', True) - ] - } - }, - 'start': { - 'actions': [_upgrade_module], - 'result': {'type':'form', 'arch':view_form_end, 'fields': {}, - 'state':[ - ('end', 'Close', 'gtk-close', True), - ('config', 'Start configuration', 'gtk-ok', True) - ] - } - }, - 'end': { - 'actions': [], - 'result': {'type':'form', 'arch':view_form_end, 'fields': {}, - 'state':[ - ('end', 'Close', 'gtk-close', True), - ('config', 'Start configuration', 'gtk-ok', True) - ] - } - }, - 'config':{ - 'result': { - 'type': 'action', - 'action': _config, - 'state': 'end', - }, - } - } -wizard_info_get_simple('module.upgrade.simple') - - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/bin/addons/base/module/wizard/wizard_update_module.py b/bin/addons/base/module/wizard/wizard_update_module.py deleted file mode 100644 index 22e52bb6d6d..00000000000 --- a/bin/addons/base/module/wizard/wizard_update_module.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## - -import wizard -import netsvc -import pooler - -class wizard_update_module(wizard.interface): - - arch = '''<?xml version="1.0"?> - <form string="Scan for new modules"> - <label string="This function will check for new modules in the 'addons' path" colspan="4" align="0.0"/> - - </form>''' - fields = { - - } - - arch_module = '''<?xml version="1.0"?> - <form string="New modules"> - <field name="update" colspan="4"/> - <field name="add" colspan="4"/> - </form>''' - - fields_module = { - 'update': {'type': 'integer', 'string': 'Number of modules updated', 'readonly': True}, - 'add': {'type': 'integer', 'string': 'Number of modules added', 'readonly': True}, - } - - def _update_module(self, cr, uid, data, context): - update, add = pooler.get_pool(cr.dbname).get('ir.module.module').update_list(cr, uid) - return {'update': update, 'add': add} - - def _action_module_open(self, cr, uid, data, context): - - res = { - 'domain': str([]), - 'name': 'Module List', - 'view_type': 'form', - 'view_mode': 'tree,form', - 'res_model': 'ir.module.module', - 'view_id': False, - 'type': 'ir.actions.act_window' - } - - search_view_id = pooler.get_pool(cr.dbname).get('ir.ui.view').search(cr, uid, [('name','=','ir.module.module.list.select')], context=context) - if search_view_id: - res.update({'search_view_id' : search_view_id[0]}) - return res - - states = { - 'init': { - 'actions': [], - 'result': {'type': 'form', 'arch': arch, 'fields': fields, - 'state': [ - ('end', 'Cancel', 'gtk-cancel'), - ('update', 'Check new modules', 'gtk-ok', True) - ] - } - }, - 'update': { - 'actions': [_update_module], - 'result': {'type': 'form', 'arch': arch_module, 'fields': fields_module, - 'state': [ - ('open_window', 'Ok', 'gtk-ok', True) - ] - } - }, - 'open_window': { - 'actions': [], - 'result': {'type': 'action', 'action': _action_module_open, 'state':'end'} - } - } -wizard_update_module('module.module.update') - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - |
