diff options
| author | Thibault Francois <tfr@openerp.com> | 2010-11-12 14:44:40 +0100 |
|---|---|---|
| committer | Thibault Francois <tfr@openerp.com> | 2010-11-12 14:44:40 +0100 |
| commit | cd2af4bb80ed730f7e6ec6c6c0c21dcdf39e15f5 (patch) | |
| tree | a05146180ce42b8aff18bd35e4bfc50a360004ea /addons/fetchmail | |
| parent | b82ad6d02201a832152dc3998d75477d579a8d8d (diff) | |
| parent | 8ad87d0d946ecc5fcfc75f665409828921d2299b (diff) | |
[FIX,IMP] addons1 : 16 Bugs fix
Plugin improvement
Demo user has user right
crm leads logs stages changes
bzr revid: tfr@openerp.com-20101112134440-drbjwz4in82irkav
Diffstat (limited to 'addons/fetchmail')
| -rw-r--r-- | addons/fetchmail/__init__.py | 6 | ||||
| -rw-r--r-- | addons/fetchmail/__openerp__.py | 6 | ||||
| -rw-r--r-- | addons/fetchmail/fetchmail.py | 81 | ||||
| -rw-r--r-- | addons/fetchmail/fetchmail_view.xml | 152 |
4 files changed, 132 insertions, 113 deletions
diff --git a/addons/fetchmail/__init__.py b/addons/fetchmail/__init__.py index 0f50df83255..d58bfd1d81b 100644 --- a/addons/fetchmail/__init__.py +++ b/addons/fetchmail/__init__.py @@ -7,16 +7,16 @@ # mga@tinyerp.com # # This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by +# 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 General Public License for more details. +# GNU Affero General Public License for more details. # -# You should have received a copy of the GNU General Public License +# 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/>. # ############################################################################## diff --git a/addons/fetchmail/__openerp__.py b/addons/fetchmail/__openerp__.py index e9050fda075..8fe375997aa 100644 --- a/addons/fetchmail/__openerp__.py +++ b/addons/fetchmail/__openerp__.py @@ -7,16 +7,16 @@ # mga@tinyerp.com # # This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by +# 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 General Public License for more details. +# GNU Affero General Public License for more details. # -# You should have received a copy of the GNU General Public License +# 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/>. # ############################################################################## diff --git a/addons/fetchmail/fetchmail.py b/addons/fetchmail/fetchmail.py index 0f58419d1e1..77748adf017 100644 --- a/addons/fetchmail/fetchmail.py +++ b/addons/fetchmail/fetchmail.py @@ -42,7 +42,7 @@ class email_server(osv.osv): 'active':fields.boolean('Active', required=False), 'state':fields.selection([ ('draft', 'Not Confirmed'), - ('wating', 'Waiting for Verification'), + ('waiting', 'Waiting for Verification'), ('done', 'Confirmed'), ], 'State', select=True, readonly=True), 'server' : fields.char('Server', size=256, required=True, readonly=True, states={'draft':[('readonly', False)]}), @@ -52,15 +52,17 @@ class email_server(osv.osv): ('imap', 'IMAP Server'), ], 'Server Type', select=True, readonly=False), 'is_ssl':fields.boolean('SSL ?', required=False), - 'attach':fields.boolean('Add Attachments ?', required=False), + 'attach':fields.boolean('Add Attachments ?', required=False, help="Fetches mail with attachments if true."), 'date': fields.date('Date', readonly=True, states={'draft':[('readonly', False)]}), 'user' : fields.char('User Name', size=256, required=True, readonly=True, states={'draft':[('readonly', False)]}), 'password' : fields.char('Password', size=1024, invisible=True, required=True, readonly=True, states={'draft':[('readonly', False)]}), 'note': fields.text('Description'), - 'action_id':fields.many2one('ir.actions.server', 'Reply Email', required=False, domain="[('state','=','email')]"), - 'object_id': fields.many2one('ir.model', "Model", required=True), + 'action_id':fields.many2one('ir.actions.server', 'Reply Email', required=False, domain="[('state','=','email')]", + help="An Email Server Action. It will be run whenever an e-mail is fetched from server."), + 'object_id': fields.many2one('ir.model', "Model", required=True, help="OpenObject Model. Generates a record of this model."), 'priority': fields.integer('Server Priority', readonly=True, states={'draft':[('readonly', False)]}, help="Priority between 0 to 10, select define the order of Processing"), 'user_id':fields.many2one('res.users', 'User', required=False), + 'message_ids': fields.one2many('mailgate.message', 'server_id', 'Messages', readonly=True), } _defaults = { 'state': lambda *a: "draft", @@ -96,20 +98,8 @@ class email_server(osv.osv): def set_draft(self, cr, uid, ids, context={}): self.write(cr, uid, ids , {'state':'draft'}) return True - - def button_fetch_mail(self, cr, uid, ids, context={}): - self.fetch_mail(cr, uid, ids) - return True - - def _fetch_mails(self, cr, uid, ids=False, context={}): - if not ids: - ids = self.search(cr, uid, []) - return self.fetch_mail(cr, uid, ids, context) - - def fetch_mail(self, cr, uid, ids, context=None): - if not context: - context = {} - email_tool = self.pool.get('email.server.tools') + + def button_confirm_login(self, cr, uid, ids, context={}): for server in self.browse(cr, uid, ids, context): logger.notifyChannel('imap', netsvc.LOG_INFO, 'fetchmail start checking for new emails on %s' % (server.name)) context.update({'server_id': server.id, 'server_type': server.type}) @@ -123,13 +113,52 @@ class email_server(osv.osv): imap_server = IMAP4(server.server, int(server.port)) imap_server.login(server.user, server.password) + ret_server = imap_server + + elif server.type == 'pop': + pop_server = None + if server.is_ssl: + pop_server = POP3_SSL(server.server, int(server.port)) + else: + pop_server = POP3(server.server, int(server.port)) + + #TODO: use this to remove only unread messages + #pop_server.user("recent:"+server.user) + pop_server.user(server.user) + pop_server.pass_(server.password) + ret_server = pop_server + + self.write(cr, uid, [server.id], {'state':'done'}) + if context.get('get_server',False): + return ret_server + except Exception, e: + logger.notifyChannel(server.type, netsvc.LOG_WARNING, '%s' % (e)) + return True + + def button_fetch_mail(self, cr, uid, ids, context={}): + self.fetch_mail(cr, uid, ids, context=context) + return True + + def _fetch_mails(self, cr, uid, ids=False, context={}): + if not ids: + ids = self.search(cr, uid, []) + return self.fetch_mail(cr, uid, ids, context=context) + + def fetch_mail(self, cr, uid, ids, context={}): + email_tool = self.pool.get('email.server.tools') + action_pool = self.pool.get('ir.actions.server') + context.update({'get_server': True}) + for server in self.browse(cr, uid, ids, context): + count = 0 + try: + if server.type == 'imap': + imap_server = self.button_confirm_login(cr, uid, [server.id], context=context) imap_server.select() result, data = imap_server.search(None, '(UNSEEN)') for num in data[0].split(): result, data = imap_server.fetch(num, '(RFC822)') res_id = email_tool.process_email(cr, uid, server.object_id.model, data[0][1], attach=server.attach, context=context) if res_id and server.action_id: - action_pool = self.pool.get('ir.actions.server') action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id]}) imap_server.store(num, '+FLAGS', '\\Seen') @@ -139,25 +168,14 @@ class email_server(osv.osv): imap_server.close() imap_server.logout() elif server.type == 'pop': - pop_server = None - if server.is_ssl: - pop_server = POP3_SSL(server.server, int(server.port)) - else: - pop_server = POP3(server.server, int(server.port)) - - #TODO: use this to remove only unread messages - #pop_server.user("recent:"+server.user) - pop_server.user(server.user) - pop_server.pass_(server.password) + pop_server = self.button_confirm_login(cr, uid, [server.id], context=context) pop_server.list() - (numMsgs, totalSize) = pop_server.stat() for num in range(1, numMsgs + 1): (header, msges, octets) = pop_server.retr(num) msg = '\n'.join(msges) res_id = email_tool.process_email(cr, uid, server.object_id.model, msg, attach=server.attach, context=context) if res_id and server.action_id: - action_pool = self.pool.get('ir.actions.server') action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids':[res_id]}) pop_server.dele(num) @@ -166,7 +184,6 @@ class email_server(osv.osv): logger.notifyChannel('imap', netsvc.LOG_INFO, 'fetchmail fetch %s email(s) from %s' % (numMsgs, server.name)) - self.write(cr, uid, [server.id], {'state':'done'}) except Exception, e: logger.notifyChannel(server.type, netsvc.LOG_WARNING, '%s' % (e)) diff --git a/addons/fetchmail/fetchmail_view.xml b/addons/fetchmail/fetchmail_view.xml index 7f751f7c5a2..ecdb4acfb3b 100644 --- a/addons/fetchmail/fetchmail_view.xml +++ b/addons/fetchmail/fetchmail_view.xml @@ -8,11 +8,13 @@ <field name="type">tree</field> <field name="arch" type="xml"> <tree colors="blue:state in ('draft');black:state in ('wating');gray:state in('done')" string="POP/IMAP Servers"> - <field name="name" select="1"/> - <field name="type" select="1"/> - <field name="user" select="1"/> - <field name="is_ssl" select="1"/> - <field name="state" select="1"/> + <field name="name"/> + <field name="type"/> + <field name="user"/> + <field name="is_ssl"/> + <field name="object_id"/> + <field name="message_ids" string="# of emails"/> + <field name="state"/> </tree> </field> </record> @@ -58,99 +60,99 @@ </notebook> <group col="6" colspan="4"> <field name="state" select="1"/> - <button string="Fetch Emails" type="object" name="button_fetch_mail"/> + <button string="Confirm" type="object" name="button_confirm_login" states="draft"/> + <button string="Fetch Emails" type="object" name="button_fetch_mail" states="done"/> <button string="Set to Draft" type="object" name="set_draft"/> </group> </form> </field> </record> + <record model="ir.ui.view" id="view_email_server_search"> + <field name="name">email.server.search</field> + <field name="model">email.server</field> + <field name="type">search</field> + <field name="arch" type="xml"> + <search string="Search Email Servers"> + <filter string="IMAP" icon="terp-folder-green" domain="[('type','=','imap')]" help="Server type IMAP."/> + <filter string="POP" icon="terp-folder-orange" domain="[('type','=','pop')]" help="Server type POP."/> + <separator orientation="vertical"/> + <filter string="SSL" icon="terp-camera_test" domain="[('is_ssl','=',True)]" help="If SSL required."/> + <separator orientation="vertical"/> + <field name="name"/> + <field name="object_id"/> + <newline/> + <group expand="0" string="Group By..." groups="base.group_extended"> + <filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type'}"/> + <separator orientation="vertical"/> + <filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/> + </group> + </search> + </field> + </record> + <record model="ir.actions.act_window" id="action_email_server_tree"> - <field name="name">POP Servers</field> + <field name="name">Email Servers</field> <field name="res_model">email.server</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> <field name="view_id" ref="view_email_server_tree"/> - <field name="context">{'type':'pop'}</field> - <field name="domain">[('type','=','pop')]</field> + <field name="search_view_id" ref="view_email_server_search"/> </record> <menuitem - parent="base.menu_config" - id="menu_action_fetchmail_server_tree" - name="Fetchmail Services" - /> - - <menuitem - parent="menu_action_fetchmail_server_tree" - id="menu_action_email_server_tree" - action="action_email_server_tree" + parent="base.menu_mail_gateway" + id="menu_action_fetchmail_server_tree" + action="action_email_server_tree" + name="Email Servers" /> - <record model="ir.actions.act_window" id="action_email_server_tree_imap"> - <field name="name">IMAP Servers</field> - <field name="res_model">email.server</field> + <record model="ir.ui.view" id="mailgate_message_tree_view"> + <field name="name">mailgate.message.tree</field> + <field name="model">mailgate.message</field> + <field name="type">tree</field> + <field name="inherit_id" ref="mail_gateway.view_mailgate_message_tree"/> + <field name="arch" type="xml"> + <field name="user_id" position="after"> + <field name="server_id" select="1"/> + <field name="ref_id"/> + </field> + </field> + </record> + + <record model="ir.ui.view" id="mailgate_message_search_view"> + <field name="name">mailgate.message.inherit.search</field> + <field name="model">mailgate.message</field> + <field name="type">search</field> + <field name="inherit_id" ref="mail_gateway.view_mailgate_message_search"/> + <field name="arch" type="xml"> + <xpath expr="/search/field[@name='name']" position="before"> + <filter string="Emails" name="emails" domain="[('server_id','!=',False)]" icon="terp-mail-message-new"/> + <separator orientation="vertical"/> + </xpath> + <xpath expr="/search/group/filter[@string='Thread']" position="before"> + <filter string="Mail Server" icon="terp-accessories-archiver" domain="[]" context="{'group_by':'server_id'}"/> + </xpath> + </field> + </record> + + <record id="action_view_mail_message_emails" model="ir.actions.act_window"> + <field name="name">Messages</field> + <field name="res_model">mailgate.message</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> - <field name="view_id" ref="view_email_server_tree"/> - <field name="context">{'type':'imap'}</field> - <field name="domain">[('type','=','imap')]</field> - </record> - - <menuitem - parent="menu_action_fetchmail_server_tree" - id="menu_action_email_server_tree_imap" - action="action_email_server_tree_imap" - /> + <field name="context">{'search_default_emails': 1}</field> + <field name="search_view_id" ref="mailgate_message_search_view"/> + </record> - <record model="ir.ui.view" id="mailgate_message_tree_view"> - <field name="name">mailgate.message.tree</field> - <field name="model">mailgate.message</field> - <field name="type">tree</field> - <field name="inherit_id" ref="mail_gateway.view_mailgate_message_tree"/> - <field name="arch" type="xml"> - <field name="user_id" position="after"> - <field name="server_id" select="1"/> - <field name="ref_id"/> - </field> - </field> - </record> + <menuitem id="base.menu_email_gateway_form" + parent="base.menu_mail_gateway" action="action_view_mail_message_emails" /> - <act_window + <act_window context="{'server_id': active_id}" domain="[('server_id', '=', active_id)]" - id="act_server_history" name="Email History" + id="act_server_history" name="Emails" res_model="mailgate.message" src_model="email.server"/> - <record model="ir.actions.act_window" id="action_mailgate_message_tree"> - <field name="name">Received Email History</field> - <field name="res_model">mailgate.message</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form</field> - <field name="view_id" ref="mailgate_message_tree_view"/> - <field name="context">{'server_type':'imap'}</field> - <field name="domain">[('server_type','=','imap')]</field> - </record> - - <menuitem - parent="menu_action_email_server_tree_imap" - id="menu_action_mailgate_message_tree" - action="action_mailgate_message_tree"/> - - <record model="ir.actions.act_window" id="action_mailgate_message_tree_pop"> - <field name="name">Received Email History</field> - <field name="res_model">mailgate.message</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form</field> - <field name="view_id" ref="mailgate_message_tree_view"/> - <field name="context">{'server_type':'pop'}</field> - <field name="domain">[('server_type','=','pop')]</field> - </record> - - <menuitem - parent="menu_action_email_server_tree" - id="menu_action_mailgate_message_tree_pop" - action="action_mailgate_message_tree_pop"/> - </data> </openerp> |
