First import of experiment short message product. Support a sms tool witch...

First import of experiment short message product. Support a sms tool witch manage gateway. Add implementation of Essendex SMS gateway. Add short message document based on mail message document

git-svn-id: https://svn.erp5.org/repos/experimental@1901 bc57dcba-3610-0410-ab4f-dc20bb96b918
parent d84f46e8
This diff is collapsed.
##############################################################################
#
# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
# Francois-Xavier Algrain <fxalgrain@tiolive.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# 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 the Free Software Foundation; either version 2
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from AccessControl import ClassSecurityInfo
from Products.ERP5Type.Accessor.Constant import PropertyGetter as ConstantGetter
from Products.ERP5Type import Permissions, PropertySheet
from Products.ERP5.Document.Event import Event
class ShortMessageDocument(Event):
"""
Base class for SMS. Sms are a special Event.
They use a SMS gateway to be sended.
"""
meta_type = 'ERP5 Short Message'
portal_type = 'Short Message'
isDelivery = ConstantGetter('isDelivery', value=True)
# Declarative properties
property_sheets = ( PropertySheet.Base
, PropertySheet.XMLObject
, PropertySheet.CategoryCore
, PropertySheet.Document
, PropertySheet.DublinCore
, PropertySheet.Task
, PropertySheet.Url
, PropertySheet.TextDocument
, PropertySheet.Arrow
, PropertySheet.Movement
, PropertySheet.Event
, PropertySheet.Delivery
, PropertySheet.ItemAggregation
)
# Declarative security
security = ClassSecurityInfo()
security.declareObjectProtected(Permissions.AccessContentsInformation)
security.declareProtected(Permissions.AccessContentsInformation,
'getQuantity')
def getQuantity(self):
"""Get quantity of sms sended"""
#XXX-Fx : See with JPS for a new event implementation
#XXX-Fx : DestinationReference property must be replace by a category
return len(self.getDestinationReference().split(','))
security.declareProtected(Permissions.UseMailhostServices,
'isDelivered')
def isDelivered(self):
"""Query if message is devivered or not"""
message_quantity = self.getQuantity()
portal = self.portal_sms
if message_quantity == 0:
return None
#XXX-Fx : See with JPS for a new event implementation
#XXX-Fx : DestinationReference property must be replace by a category
status_list = [portal.getMessagesStatus(message_id) for message_id in self.getDestinationReference().split(',')]
for status in status_list:
if status != 'delivered':
return False
return True
security.declareProtected(Permissions.UseMailhostServices, 'send')
def send(self, from_url=None, to_url=None, reply_url=None, subject=None,
body=None, attachment_format=None, attachment_list=None,
download=False,**kw):
"""
Send the current sms by using a SMS gateway.
Use default mobile phone of source and destination
"""
#Get the portal
portal = self.portal_sms
#Get recipients
if not to_url:
recipient_phone_list = [person.getDefaultMobileTelephoneValue() for person in self.getDestinationValueList()]
if None in recipient_phone_list:
raise ValueError, "All recipients should have a default mobile phone"
to_url = [phone.asURL() for phone in recipient_phone_list]
if None in to_url:
raise ValueError, "All recipients should have a valid default mobile phone number"
#Get sender
if not from_url:
if self.getSourceValue():
sender_phone = self.getSourceValue().getDefaultMobileTelephoneValue()
if not sender_phone:
raise ValueError, "The sender should have a default mobile phone"
#We use the title as sender
if sender_phone.getTitle() and portal.isSendByTitleAllowed():
from_url = sender_phone.getTitle()
else:
from_url = sender_phone.asURL()
if not body:
body = self.getTextContent()
#We get the id of the message to track it
#We only send Text message today
message_id_list = portal.send(text=body, recipient=to_url, sender=from_url,message_type="text", test=download)
#set message id to be able to query the status
#XXX-Fx : See with JPS for a new event implementation
#XXX-Fx : DestinationReference property must be replace by a category
if message_id_list is not None:
self.setDestinationReference(",".join(message_id_list))
return message_id_list
\ No newline at end of file
##############################################################################
#
# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
# Francois-Xavier Algrain <fxalgrain@tiolive.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# 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 the Free Software Foundation; either version 2
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
"""Exception Classes for ERP5Configurator"""
# These classes are placed here so that they can be imported into TTW Python
# scripts. To do so, add the following line to your Py script:
# from Products.ERP5.Errors import DeferredCatalogError
from Products.PythonScripts.Utility import allow_class
from Products.CMFCore.WorkflowCore import WorkflowException
class SMSGatewayError(Exception):pass
allow_class(SMSGatewayError)
##############################################################################
#
# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
# Francois-Xavier Algrain <fxalgrain@tiolive.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# 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 the Free Software Foundation; either version 2
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
\ No newline at end of file
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
# Francois-Xavier Algrain <fxalgrain@tiolive.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# 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 the Free Software Foundation; either version 2
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
class SMSGateway:
"""
Agent properties for Agent objects
"""
_properties = (
{ 'id' : 'gateway_user'
, 'description': 'User name to connect '
, 'type' : 'string'
, 'mode' : 'w'
},
{ 'id' : 'gateway_password'
, 'description': 'Password to connect'
, 'type' : 'string'
, 'mode' : 'w'
},
{ 'id' : 'gateway_account'
, 'description': 'Account to use.'
, 'type' : 'string'
, 'mode' : 'w'
},
{ 'id' : 'gateway_account_id'
, 'description': 'Id of the accound. Can be used for push notification'
, 'type' : 'string'
, 'mode' : 'w'
},
{ 'id' : 'default_sender'
, 'description': 'Default sender when send message.'
, 'type' : 'string'
, 'mode' : 'w'
},
{ 'id' : 'simulation_mode'
, 'description': 'Force the simulation mode.'
, 'type' : 'boolean'
, 'mode' : 'w'
},
{ 'id' : 'title_mode'
, 'description': 'Allow or not to send by title'
, 'type' : 'boolean'
, 'mode' : 'w'
},
)
\ No newline at end of file
ERP5ShortMessage
The ERP5ShortMessage product provides support for sending or receiving SMS from
within the Zope environment.
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
# François-Xavier Algrain <fxalgrain@tiolive.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# 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 the Free Software Foundation; either version 2
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from AccessControl import ClassSecurityInfo
from Products.ERP5Type.Tool.BaseTool import BaseTool
from Products.ERP5Type.Permissions import ManagePortal
from Globals import DTMLFile
from Products.ERP5ShortMessage import _dtmldir
class SMSTool(BaseTool):
"""
This tool manages gadgets.
It is used as a central point to manage gadgets (ERP5 or external ones)...
"""
id = 'portal_sms'
meta_type = 'ERP5 SMS Tool'
portal_type = 'SMS Tool'
# Declarative Security
security = ClassSecurityInfo()
security.declareProtected(ManagePortal, 'manage_overview')
manage_overview = DTMLFile('explainSMSTool', _dtmldir )
security.declareProtected(ManagePortal, 'send')
def send(self, text,recipient, sender=None, message_type="text",
test=False, gateway_reference='default', **kw):
gateway = self.find(gateway_reference)
return gateway.send(text,recipient,sender=None, message_type="text",
test=False, **kw)
security.declareProtected(ManagePortal, 'getMessageStatus')
def getMessageStatus(self,message_id, gateway_reference='default'):
gateway = self.find(gateway_reference)
return gateway.getMessageStatus(message_id)
security.declarePublic('isSendByTitleAllowed')
def isSendByTitleAllowed(self, gateway_reference='default'):
"""Define the support or not to use the title of the telephone instead of
the number when send a message."""
gateway = self.find(gateway_reference)
return gateway.isTitleMode()
security.declarePublic('find')
def find(self,gateway_reference='default'):
"""Search the gateway by his reference"""
result = self.searchFolder(reference=gateway_reference)
if len(result) > 0:
return result[0].getObject()
else:
raise ValueError, "Impossible to find gateway with reference %s" % gateway_reference
##############################################################################
#
# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
# François-Xavier Algrain <fxalgrain@tiolive.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# 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 the Free Software Foundation; either version 2
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
"""
ERP5ShortMessage is a product containing everything needed to implement
Short Message management in ERP5.
"""# Update ERP5 Globals
from Products.ERP5Type.Utils import initializeProduct, updateGlobals
import sys, Permissions
this_module = sys.modules[ __name__ ]
document_classes = updateGlobals(this_module, globals(),
permissions_module=Permissions)
from Tool import SMSTool
# Define object classes and tools
object_classes = ()
portal_tools = (SMSTool.SMSTool,
)
content_classes = ()
content_constructors = ()
# Finish installation
def initialize(context):
import Document
initializeProduct(context, this_module, globals(),
document_module=Document,
document_classes=document_classes,
object_classes=object_classes,
portal_tools=portal_tools,
content_constructors=content_constructors,
content_classes=content_classes)
from AccessControl.SecurityInfo import allow_module
allow_module('Products.ERP5ShortMessage.Errors')
<dtml-var manage_page_header>
<dtml-var manage_tabs>
<h3>Explain SMS Tool</h3>
<p>
SMS Tool provides all to send and receive sms with one or more sms gateway.
</p>
<p>
You need to have a SMS Gateway with reference egal to "default" to send sms.
Other reference can be used for specific send.
</p>
<dtml-var manage_page_footer>
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
# François-Xavier Algrain <fxalgrain@tiolive.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# 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 the Free Software Foundation; either version 2
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from zope.interface import Interface
class ISmsGateway(Interface):
def send(self, text, recipient, sender=None,
message_type="text",test=False, **kw):
"""Send a message."""
def receive(self, REQUEST):
"""Public handler to push notification from the gateway"""
def getAllowedMessageType(self):
"""List of all allowed message type when send a message."""
def getMessageStatus(self, message_id):
"""Retrive the status of a message
Should return x in ['sent', 'delivered', 'queued', 'failed']"""
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment