From: <ke...@us...> - 2006-04-05 15:43:59
|
Revision: 2896 Author: kevca Date: 2006-04-05 08:43:47 -0700 (Wed, 05 Apr 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=2896&view=rev Log Message: ----------- Tagging the 2.0.8 release Added Paths: ----------- MailManager/tags/RELENG_2_0_8/ MailManager/tags/RELENG_2_0_8/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_0_8/tests/testSending.py Removed Paths: ------------- MailManager/tags/RELENG_2_0_8/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_0_8/tests/testSending.py Copied: MailManager/tags/RELENG_2_0_8 (from rev 2893, MailManager/branches/RELENG_2_0) Deleted: MailManager/tags/RELENG_2_0_8/Extensions/TicketPluggableBrain.py =================================================================== --- MailManager/branches/RELENG_2_0/Extensions/TicketPluggableBrain.py 2006-04-04 13:17:08 UTC (rev 2893) +++ MailManager/tags/RELENG_2_0_8/Extensions/TicketPluggableBrain.py 2006-04-05 15:43:47 UTC (rev 2896) @@ -1,919 +0,0 @@ -# Zope modules. -from Globals import InitializeClass -from AccessControl import ClassSecurityInfo, getSecurityManager -from DateTime import DateTime -from zExceptions.unauthorized import Unauthorized -from zExceptions import BadRequest - -# Modules from this package -from Products.MailManager.MailMixin import MailMixin - -# 3rd party modules. -try: - from psycopg import Binary -except ImportError: - pass -try: - from stripogram import html2safehtml -except ImportError: - from Products.stripogram import html2safehtml - -from Products.MailManager.support.html2text import html2text - -# Python library modules. -import re -import operator -from email.Utils import formataddr, parseaddr, make_msgid -from smtplib import SMTPRecipientsRefused - -import logging -from Products.MailManager.support.logger import log - -from_escape = re.compile('^>*From ') -sig_remover = re.compile('^-- $.*\Z', re.DOTALL | re.MULTILINE) - -class TicketPluggableBrain(MailMixin): - - security = ClassSecurityInfo() - security.setPermissionDefault('MailManager Manage Tickets', - ['Tickets', 'Customer']) - - security.declareProtected('MailManager Manage Tickets', 'checkAuthorized') - def checkAuthorized(self): - user = getSecurityManager().getUser() - - if not 'Tickets' in user.roles: - username = user.getUserName() - addrs = self.sql.getCustomerAddresses(username=username) - if not self['from_email'] in [x.access_email for x in addrs]: - raise Unauthorized("You are not allowed to view this ticket") - - security.declarePublic('__bobo_traverse__') - def __bobo_traverse__(self, REQUEST=None, name=None): - """ Traversal hook to do namespace mangling for putting http in - from of requests. - - We rename the request for local methods so that we are allowing - mangling - attempting to get addMessageToTicket will return - the method http_addMessageToTicket. This allows us to split - off the interface layer from API calls. - """ - # First of all, try and mangle http_ in front of requests - ret = getattr(self, 'http_%s' % name, None) - if ret: return ret - - # Then try and obtain without mangling - ret = getattr(self, name, None) - if ret: return ret - else: - ret = self[name] - if ret: return ret - return name - - - security.declareProtected('MailManager Manage Tickets', 'index_html') - def index_html(self, REQUEST): - """Provide a view for the simple direct traversal.""" - return self.ticket_index_html(self, REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'findSupporter') - def findSupporter(self, REQUEST, SESSION): - """Find a supporter for this Ticket.""" - SESSION.set('find_supporter', self.id) - return self.ticket_index_html(self, REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'change') - def change(self, REQUEST): - """Return a view allowing the details to be changed.""" - REQUEST.set('details', 'y') - return self.ticket_index_html(self, REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'save') - def save(self, subject='', assigned='', status='', priority=0, - category0=None, category1=None, category2=None, support_of=None, - changed_by='', REQUEST=None, RESPONSE=None): - """Save changes to a ticket. - - Check what has been changed, record changes in history and then make - the changes to the ticket. - """ - if REQUEST is not None: - # Check for errors (if called through the web). - error = None - if status == 'closed' != self.status and not self._okToClose(): - error = 'All supporting tickets must be closed.' - REQUEST.set('flag_supporters', True) - if support_of and support_of != self.support_of: - # Check ticket to be supported exists, is not closed and does - # not already support self. - results = self.ticket(id=support_of) - if not results: - error = 'Ticket %06d does not exist.' % support_of - REQUEST.set('flag_support_of', True) - elif results[0].status == 'closed': - error = 'Ticket %06d is closed.' % support_of - REQUEST.set('flag_support_of', True) - elif results[0].support_of == self.id: - error = ('Ticket %06d itself supports this ticket.' % - support_of) - REQUEST.set('flag_support_of', True) - if error is not None: - REQUEST.set('error', error) - REQUEST.set('details', 'y') - return self.ticket_index_html(self, REQUEST) - changed_by = changed_by or getSecurityManager().getUser().getUserName() - changes = {} - set_date_closed = False - clear_date_closed = False - if status and status != self.status: - if status == 'closed': - # Record the date & time the ticket was closed. - set_date_closed = True - elif self.status == 'closed': - # Clear date_closed when we re-open a ticket. - clear_date_closed = True - changes['status'] = self.status - if subject and subject != self.subject: - changes['subject'] = self.subject - if assigned and assigned != self.assigned: - changes['assigned'] = self.assigned - # If the assigned user was changed by someone other than the new - # user and the 'Notify users of new tickets' flag is set then let - # the new user know they have got a ticket. - if assigned != changed_by: - if self.account(email=self.account_id)[0].notify_user: - self.notifyUser(new_id=assigned) - if status and status != self.status: - changes['status'] = self.status - if priority and priority != self.priority: - changes['priority'] = self.priority - if category0 and category0 != self.category0: - changes['category0'] = self.category0 - if category1 and category1 != self.category1: - changes['category1'] = self.category1 - if category2 and category2 != self.category2: - changes['category2'] = self.category2 - if support_of is not None and support_of != self.support_of: - changes['support_of'] = self.support_of or 0 - if changes: - self.sql.addHistory(ticket_id=self.id, - subject=changes.get('subject', ''), - assigned=changes.get('assigned', ''), - status=changes.get('status', ''), - priority=changes.get('priority'), - category0=changes.get('category0', ''), - category1=changes.get('category1', ''), - category2=changes.get('category2', ''), - support_of=changes.get('support_of', ''), - changed_by=changed_by) - self.sql.editTicket(id=self.id, - subject=subject or self.subject, - assigned=assigned or self.assigned, - status=status or self.status, - priority=priority or self.priority, - category0=category0 or self.category0 or '', - category1=category1 or self.category1 or '', - category2=category2 or self.category2 or '', - set_date_closed=set_date_closed, - clear_date_closed=clear_date_closed) - # Icky, but let's update the support_of separately. - if support_of == 0: - self.sql.editTicket(id = self.id, clear_support_of = True) - elif support_of: - self.sql.editTicket(id = self.id, set_support_of = True, support_of = support_of) - - if RESPONSE is not None: - return RESPONSE.redirect('%s/ticket/%06d' % (self.getBaseURL(), - self.id)) - - security.declareProtected('MailManager Manage Tickets', 'headers') - def headers(self, REQUEST): - """Show or hide the message's raw headers.""" - if REQUEST.SESSION.has_key('show_headers'): - del REQUEST.SESSION['show_headers'] - else: - REQUEST.SESSION.set('show_headers', True) - return self.ticket_index_html(self, REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'showHTML') - def showHTML(self, REQUEST): - """Should html_body be displayed?""" - show_html = REQUEST.SESSION.get('show_html') - if show_html is None: - return 0 - return show_html.get(self.absolute_url(), 0) - - security.declareProtected('MailManager Manage Tickets', 'toggleShowHTML') - def toggleShowHTML(self, REQUEST): - """Change whether html_body is displayed.""" - show_html = REQUEST.SESSION.get('show_html', {}) - if not show_html: - REQUEST.SESSION.set('show_html', show_html) - url = self.absolute_url() - show_html[url] = not show_html.get(url, 0) - return REQUEST.RESPONSE.redirect('%s/ticket/%06d' % (self.getBaseURL(), - self.id)) - - security.declareProtected('MailManager Manage Tickets', 'export') - def export(self, RESPONSE): - """Export all of a ticket's messages in mbox format. TODO: export - the attachments too. This is probably going to involve creating - an email object to let it do the appropriate construction. - """ - RESPONSE.setHeader('content-type', 'text/plain') - RESPONSE.setHeader('Content-Disposition', - 'attachment; filename=mbox.txt') - write = RESPONSE.write # Saves a lookup every time - for msg in self.sql.listMessages(ticket_id = self.id): - date = DateTime(msg.msg_date).rfc822() - from_email = msg.from_email or self.from_email - write("From %s %s\n" % (from_email.encode('utf-8'), date)) - write(msg.raw_headers.encode('utf-8')) - write('\n\n') - for line in msg.body.splitlines(): - if from_escape.match(line): - line = u">" + line - write(line.encode('utf-8')) - write('\n') - write ('\n') - return - - security.declarePrivate('notifyUser') - def notifyUser(self, new_id=None): - """Email the assigned user that the ticket has been created/updated. - - By default notify the user the ticket is presently assigned to, if - new_id is set then notify the new user with that username. - """ - if self.status == 'spam': - return - mail_to = self.sql.listUsers(username=new_id or self.assigned)[0].email - # Guard against agent setting personal address to same as account's. - if mail_to == self.account_id: - return - - # Check to see if server_url and virtual_root are set. If so, use them. - # Otherwise, use getBaseURL(). Note that getBaseURL() may not work - # properly if called when the REQUEST object is not available. - if self.server_url: - if self.server_url.endswith('/'): - url = self.server_url + self.virtual_root - else: - url = self.server_url + '/' + self.virtual_root - else: - url = self.getBaseURL() - - zmsg = self.sql.listMessages(ticket_id=self.id)[-1] - body = """You have a new or updated ticket. - -From: %s -To: %s -Subject: %s -Full details: -%s/ticket/%06d""" % (zmsg.from_email, zmsg.msg_to, zmsg.subject, - url, self.id) - msg = self.createMessage(mail_to=mail_to, - mail_from=self.account_id, - subject='You have a new or updated ticket', - body=body)[0] - self.MailHost._send(self.account_id, mail_to, msg.as_string()) - - security.declarePrivate('notifyGroup') - def notifyGroup(self, group_name): - """Notify members of a group that a new mail has arrived. - - Do not notify the group member to whom the ticket has been assigned as - they will usually have been notified by the notifyUser() method. - """ - if self.status == 'spam': - return - zmsg = self.sql.listMessages(ticket_id=self.id)[-1] - subject = '%s has a new or updated ticket' % self.assigned - body = """%s has a new or updated ticket. - -From: %s -To: %s -Subject: %s -Full details: -%s/ticket/%06d""" % (self.assigned, zmsg.from_email, zmsg.msg_to, zmsg.subject, - self.absolute_url(), self.id) - for member in self.sql.listGroupMembers(group_name=group_name): - if member.username != self.assigned: - mail_to = self.sql.listUsers(username=member.username)[0].email - msg = self.createMessage(mail_to=mail_to, - mail_from=self.account_id, - subject=subject, - body=body)[0] - self.MailHost._send(self.account_id, mail_to, msg.as_string()) - - - ## Sending Methods #################################################### - # - # The following methods all handle sending replies from the user - # interface. - # - # http_sendReply \ - # http_sendAndClose \ sendMethod - addNote - # http_sendAndHold / - # http_addNote / - # - # The http methods are partially there for historical reasons, as these - # are what the ZPTs call. These in turn all call the refactored method - # sendMessage, adding information on what method made the call by - # passing the event and change_status variables. - # - # Replacing the http_ methods with a more generic method may cause - # problems by allowing the end user to manually submit with event or - # change_status variables. Permissions would need to be analysed before - # making this change. - # - - security.declareProtected('MailManager Manage Tickets', 'http_sendReply') - def http_sendReply(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, user_signature=None, next_id=None, - offset=None, last_modified=None, - REQUEST=None, RESPONSE=None): - """ Send a reply to a customer. """ - - return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, - subject=subject, body=body, body_is_html=body_is_html, - user_signature=user_signature, next_id=next_id, - last_modified=last_modified, offset=offset, - change_status=None, - event='SendReply', - REQUEST=REQUEST, RESPONSE=RESPONSE) - - security.declareProtected('MailManager Manage Tickets', 'http_sendAndClose') - def http_sendAndClose(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, user_signature=None, next_id=None, - offset=None, last_modified=None, - REQUEST=None, RESPONSE=None): - """ Send a reply and close the ticket. """ - - return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, - subject=subject, body=body, body_is_html=body_is_html, - user_signature=user_signature, next_id=next_id, - last_modified=last_modified, offset=offset, - change_status='closed', - event='SendAndClose', - REQUEST=REQUEST, RESPONSE=RESPONSE) - - security.declareProtected('MailManager Manage Tickets', 'http_sendAndHold') - def http_sendAndHold(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, user_signature=None, next_id=None, - last_modified=None, offset=None, - REQUEST=None, RESPONSE=None): - """ Send a reply and put the ticket on hold. """ - - return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, - subject=subject, body=body, body_is_html=body_is_html, - user_signature=user_signature, next_id=next_id, - last_modified=last_modified, offset=offset, - change_status = 'hold', - event = 'SendAndHold', - REQUEST=REQUEST, RESPONSE=RESPONSE) - - security.declareProtected('MailManager Manage Tickets', 'http_addNote') - def http_addNote(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=False, user_signature=None, - last_modified=None, REQUEST=None, RESPONSE=None): - """ Add a note to a ticket. No mail is generated """ - - return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, - subject=subject, body=body, body_is_html=body_is_html, - user_signature=user_signature, sendmail=False, - last_modified=last_modified, - change_status = None, - event = 'AddNote', - REQUEST=REQUEST, RESPONSE=RESPONSE) - - def sendMethod(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=False, user_signature=None, next_id=None, - last_modified=None, offset=None, change_status=None, - transition=None, event=None, sendmail=True, - REQUEST=None, RESPONSE=None): - """ Common underlying method for sending replies/adding notes - - This method handles all of the various http_ request method which - handle a user request to send a reply, or add a note to a ticket. - In order to avoid code duplication, this method takes care of - generating error messages, and sanitising user input, before - passing it to the addNote method to act on the request. - - - @param mail_to: The intended recipient - should be blank for notes - @param cc: Carbon Copy recipients - should be blank for notes - @param bcc: Blind Carbon Copy recipients - should be blank for notes - @type mail_to string (utf-8) - @type cc: string (utf-8) - @type bcc: string (utf-8) - @type subject: string (utf-8) - @type body_is_html: boolean - @type body: string (utf-8) - @type user_signature: string (utf-8) - @type next_id: int - @type last_modified: string (ascii, iso date format) - @type offset: int - @type change_status: string (utf-8) - @type transition: string (utf-8) - @type event: string (utf-8) - @type sendmail: boolean - """ - - # Sanitize the string parameters - if mail_to is not None: mail_to = mail_to.decode('utf-8') - if cc is not None: cc = cc.decode('utf-8') - if bcc is not None: bcc = bcc.decode('utf-8') - if subject is not None: subject = subject.decode('utf-8') - if body is not None: body = body.decode('utf-8') - if user_signature is not None: user_signature = user_signature.decode('utf-8') - if change_status is not None: change_status = change_status.decode('utf-8') - if transition is not None: transition = transition.decode('utf-8') - if event is not None: event = event.decode('utf-8') - - # First, check for any modifications to the ticket - if last_modified: - mdate = self.sql.getTicketLastModified( - sqv_ticket_id = self.id)[0].last_modified.strftime('%s') - if not last_modified == mdate: - REQUEST.set('error', 'This ticket has been modified. Please check it, and then retry your request') - return self.ticket_index_html(self, REQUEST) - - if change_status: - if change_status == 'closed' and not self._okToClose(): - if REQUEST is not None: - REQUEST.set('error', 'All supporting tickets must be Closed.') - REQUEST.set('flag_supporters', 1) - return self.ticket_index_html(self, REQUEST) - raise BadRequest, 'All supporting tickes must be Closed.' - - if sendmail: - if not mail_to: - if REQUEST is not None: - REQUEST.set('error', 'The To field may not be empty') - REQUEST.set('flag_mail_to', 1) - return self.ticket_index_html(self, REQUEST) - raise BadRequest, 'The To field may not be empty' - - if not self.validEmail(mail_to): - if REQUEST is not None: - REQUEST.set('error', '%s is not a valid email address.' % mail_to) - REQUEST.set('flag_mail_to', 1) - return self.ticket_index_html(self, REQUEST) - raise BadRequest, 'The To field may not be empty' - - else: - if mail_to or cc or bcc: - if REQUEST is not None: - REQUEST.set('error', - 'Private notes may not be sent to anyone.') - if mail_to: - REQUEST.set('flag_mail_to', True) - # Since the user probably didn't ask for this field to - # be filled in the first place helpfully remove it. - REQUEST.set('mail_to', '') - if cc: - REQUEST.set('flag_cc', True) - if bcc: - REQUEST.set('flag_bcc', True) - return self.ticket_index_html(self, REQUEST) - raise BadRequest, 'Private notes may not be sent to anyone.' - - # from_name will be the username of the logged in user. This will be - # stored in the database but will not be included in the outgoing mail. - from_name = getSecurityManager().getUser().getUserName() - - # Get attachments out of the session - if REQUEST is not None: - attachments = REQUEST.SESSION.get('attachments', {}) - if attachments: - del REQUEST.SESSION['attachments'] - else: - attachments = {} - - if REQUEST is not None: - raw_headers = 'X-IP-Address: %s' % REQUEST.REMOTE_ADDR - remote_addr = REQUEST.REMOTE_ADDR - else: - raw_headers = '' - remote_addr = None - - - - try: - self.addNote(mail_to = mail_to, cc = cc, bcc = bcc, subject = subject, - body = body, body_is_html = body_is_html, - raw_headers = raw_headers, - attachments = attachments, from_name = from_name, - user_signature = user_signature, sendmail=sendmail, - change_status = change_status, remote_addr = remote_addr, - transition = transition, event = event) - except SMTPRecipientsRefused, e: - - get_transaction().abort() - - error_msg = 'The mailserver returned a failure whilst trying to ' - error_msg += 'send this message. Check your mail addresses are correct. ' - error_msg += 'The exact error recieved is %s ' % str(e) - - if REQUEST is not None: - REQUEST.set('error', error_msg) - REQUEST.set('flag_mail_to', True) - REQUEST.set('flag_cc', True) - REQUEST.set('flag_bcc', True) - return self.ticket_index_html(self, REQUEST) - else: - raise BadRequest, error_msg - - # Actions complete, either show the updated ticket, or in the case - # of tickets with modified status, redirect to the next ticket - - if change_status == 'closed' or change_status == 'hold': - # Redirect to the next ticket in the list, or just to the main - # tickets screen if no next ticket exists. - if RESPONSE is not None: - if next_id and offset: - RESPONSE.redirect('%s/ticket/%06d?offset:int=%d' % ( - self.getBaseURL(), next_id, offset)) - else: - RESPONSE.redirect('%s/Tickets' % self.getBaseURL()) - - else: - # Redirect to show the updated ticket - if RESPONSE is not None: - return RESPONSE.redirect('%s/ticket/%06d' % (self.getBaseURL(), - self.id)) - - - - security.declareProtected('MailManager Manage Tickets', 'addNote') - def addNote(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, attachments = {}, from_name = '', - user_signature=None, sendmail=0, raw_headers = '', - change_status = None, last_modified=None, - remote_addr = None, transition=None, event=None): - """ Add a copy of a message to a ticket. - - Also actually send the message to the customer, unless the - message is just a private note. - - Note that the signature is added to the message before it is added - to sql, and that is is not added before being passed to createMessage. - This is because the createMessage method adds on a signature on its - own accord. This should eventually be refactored, so that the message - being saved to the db and the message generated by createMessage are - one and the same. - """ - - log('%sAdding message to ticket' % (self.getLogName()), - logging.DEBUG, 'ticket.addnote') - - if change_status: - # Set the new status. - self.save(status=change_status) - - # The first time we reply check promptness. - if not self.date_responded: - self.sql.setDateResponded(id=self.id) - - # Get the account signature - account = self.sql.listAccounts(email=self.account_id)[0] - if account.signature: - account_signature = (account.signature_text, - account.html_signature) - else: - account_signature = None - - - # Obtain body or html_body with appended signatures - if int(body_is_html): - log('%sSanitising HTML body' % (self.getLogName()), - logging.DEBUG, 'ticket.addnote') - body, html_body = '', body - body_with_sig = body - html_body_with_sig = self._addSignature(html_body, user_signature, - account_signature, html=1) - else: - html_body = '' - body_with_sig = self._addSignature(body, user_signature, account_signature) - html_body_with_sig = '' - - message_id = self.sql.getNextMessageId()[0].id - rfc2822_message_id = make_msgid() - - log('%sStoring message in database' % (self.getLogName()), - logging.DEBUG, 'ticket.addnote') - - self.sql.addMessage(id=message_id, - ticket_id=self.id, - message_id=rfc2822_message_id, - from_name=from_name, - from_email=self.account_id, - subject=subject, - msg_to=mail_to, - cc=cc, - bcc=bcc, - reply_to='', - raw_headers=raw_headers, - body=body_with_sig, - html_body=html_body_with_sig) - - for attach in attachments.values(): - # IE sets the filename to being the full path - title=attach['filename'].split('\\')[-1] - log('%sAdding attachment %s' % (self.getLogName(), title), - logging.DEBUG, 'ticket.addnote') - - if self.dbplatform == 'postgres': - self.sql.addAttachment(message_id=message_id, - title=title, - content_type=attach['content-type'], - is_file=self.sql_truevar, - body=Binary(attach['data']), - dangerous=self.sql_falsevar) - else: - self.sql.addAttachment(message_id=message_id, - title=title, - content_type=attach['content-type'], - is_file=self.sql_truevar, - body=attach['data'], - dangerous=self.sql_falsevar) - - if sendmail: - # A very irritating hack. The ZSQL methods will not accept None as - # a null so we need to use '' in sql.addAttachment. However the - # createMessage has to be able to distinguish between an empty - # body/html_body (body='', html_body='') and the body/html_body not - # present (body=None, html_body=None). This can be removed when the - # following Zope bug is fixed: - # http://www.zope.org/Collectors/Zope/556 - if body_is_html: - body = None - else: - html_body = None - msg, recipients = self.createMessage(mail_to=mail_to, - mail_from=self.account_id, - attach=attachments, - cc=cc, - bcc=bcc, - subject=subject, - body=body, - html_body=html_body, - user_signature=user_signature, - account_signature=account_signature, - message_id=rfc2822_message_id, - remote_addr = remote_addr) - - log('%sSending outgoing message' % (self.getLogName()), - logging.DEBUG, 'ticket.addnote') - - self.MailHost._send(self.account_id, - reduce(operator.add, recipients.values()), - msg.as_string()) - - - - def http_setTemplate(self, REQUEST): - """ Handler for user selecting a new template to use in a message - - This method is called when the end user clicks the arrow button - to the right of the template. This method then replaces the - content of the current message body with the given template, - setting the editor to HTML/plain text as appropriate. If - template_name is None then do nothing. - - Request variables: - - * template_name : the template name we are to replace with - * body_is_html : the format to encode the resulting body in - * body : altered to be the content of the given tempalte - """ - template_name = REQUEST.get('template_name', None).decode('utf-8') - body_is_html = int(REQUEST.get('body_is_html', False)) - body = REQUEST.get('body', None).decode('utf-8') - - if template_name: - - # Obtain the template details, deailing with the cite_last - # method appropriately - if template_name == 'cite_last': - # Find the last actual message - msgs = self.sql.listMessages(sqv_ticket_id=self.id) - # Skip over any notes - for position in range(1,len(msgs)+1): - zmsg = msgs[-position] - if not zmsg.msg_to == '': break - # Remove the signature and split the plain text body per - # line, start with > for quote chars. Note that we don't - # currently quote HTML, but that would be a nice addition - # in the future. - cite = sig_remover.sub('', zmsg.body) - body = ''.join(['> %s' % line for line - in cite.splitlines(1)]) - template_is_html = 0 - else: - template = self._getTemplate(template_name) - body = template['body'] - template_is_html = template['html'] - - # Is this an HTML template? Check the settings flag - if template_is_html: - # Set the body_is_html flag so that the correct editor is - # used for the reply - REQUEST.set('body_is_html', True) - - REQUEST.set('body', body) - - return self.index_html(REQUEST) - - - def http_setHTML(self, REQUEST): - """ Handler for user changing the format of a message body - - This method is called when the end user clicks the arrow button - to the right of the HTML/Plain text option. This method then - replaces the content of the current message body based on - given template, converting to HTML/plain text as appropriate. - - Request variables: - - * new_body_format: the format to encode the resulting body in - * body_is_html : gets set to the format the body is now in - * body : altered so that it is in the correct format - """ - body_is_html = REQUEST.get('body_is_html', False) - new_body_html = REQUEST.get('new_body_html', False) - body = REQUEST.get('body', '').decode('utf-8') - - if body_is_html and not new_body_html: - # Convert from html to text - body = html2text(body) - - if not body_is_html and new_body_html: - # Convert from text to html - body = self._makeHTML(body) - - REQUEST.set('body', body.encode('utf-8')) - REQUEST.set('body_is_html', new_body_html) - return self.index_html(REQUEST) - - - security.declarePrivate('_getTemplate') - def _getTemplate(self, template_name): - templates = self.sql.getTemplate(name = template_name) - if len(templates) > 0: - return templates[0] - else: - return {} - - security.declareProtected('MailManager Manage Tickets', 'HTMLRequired') - def HTMLRequired(self): - """Determine whether the message must be composed in HTML. - - Currently HTML is required when an HTML account signature is - in use. Once HTML user signatures are added they will also - force HTML composition. - """ - account = self.sql.listAccounts(email=self.account_id)[0] - return account.signature and account.html_signature - - security.declareProtected('MailManager Manage Tickets', 'getTo') - def getTo(self): - """Get the email address for the To: line. - - Format the name and email address nicely, eg: - Andrew Veitch <an...@lo...> - """ - return formataddr( (self.from_name, self.from_email) ) - - security.declareProtected('MailManager Manage Tickets', 'getReplyTo') - def getReplyTo(self): - """Get the Reply-To header from the first message in the ticket. - - Used instead of From: as the address to reply to, if present. - """ - zmsg = self.sql.listMessages(ticket_id=self.id)[0] - return zmsg.reply_to or formataddr((self.from_name, self.from_email)) - - security.declareProtected('MailManager Manage Tickets', 'getReplyAll') - def getReplyAll(self): - """Get the address for Reply to All. - - Include addresses in the To field and in the Cc field of the original - mail. Do not return duplicate addresses. Only the actual email portion - of the address should be returned. - """ - zmsg = self.sql.listMessages(ticket_id=self.id)[0] - emails = [parseaddr(addr)[1] - for addr in (self._tokenizer(zmsg.msg_to) + - self._tokenizer(zmsg.cc)) - if addr] - # We only want to copy in extra To addresses so ignore the account id - # and ignore the user's own address in case they copied themselves into - # their original email. - if self.account_id in emails: - emails.remove(self.account_id) - if self.from_email in emails: - emails.remove(self.from_email) - # Make unique - return ', '.join(dict.fromkeys(emails).keys()) - - security.declareProtected('MailManager Manage Tickets', 'addAttachment') - def addAttachment(self, REQUEST, RESPONSE, standard_attach = None, - file_attach=None): - """Add an attachment to a reply. - - The attachment can either be one of the standard attachments or an - uploaded file. Attachments are stored in the SESSION until the message - is sent. - """ - attachments = REQUEST.SESSION.get('attachments', {}) - if standard_attach: - file = self.attachments[standard_attach] - attachments[standard_attach] = {'filename': standard_attach, - 'content-type': file.content_type, - 'data': file.manage_FTPget()} - if file_attach: - file = {'filename': file_attach.filename, - 'content-type': - file_attach.headers.get('content-type', - 'application/octet-stream'), - 'data': file_attach.read()} - attachments[file_attach.filename] = file - REQUEST.SESSION.set('attachments', attachments) - return self.ticket_index_html(self, REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'delAttachment') - def delAttachment(self, REQUEST, RESPONSE, ids=[]): - """Delete an attachment.""" - for id in ids: - del REQUEST.SESSION['attachments'][id] - return self.ticket_index_html(self, REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'getPrevNext') - def getPrevNext(self, request): - """ - Get the previous and next ticket ids. The supplied variable offset - is the current position in the list of tickets. We retreive the - ticket previous to the offset and the one after. Return value is - a tuple containing the previous ticket id, and the next ticket id. - """ - offset = request.get('offset') - if offset is None: - return (None, None) - - if offset == 0: - # If we are at the start of the result set, the previous ticket - # does not exist. Only retreive two tickets. - results = self.listTickets(request, offset=0, limit=2) - if not results: - return (None, None) - - if len(results) == 2: - return (None, results[1].id) - else: - return (None, None) - - else: - # We are in the middle of a result set, so we want to try and - # retrieve three tickets (previous, current, next) - results = self.listTickets(request, offset=max(offset-1, 0), limit=3) - if not results: - return (None, None) - - if len(results) == 3: - return(results[0].id, results[2].id) - elif len(results) > 0: - return(results[0].id, None) - else: - return (None, None) - - security.declarePublic('__bobo_traverse__') - def __bobo_traverse__(self, REQUEST=None, name=None): - """ Traversal hook to do http_ name mangling """ - - # First of all, try and mangle http_ in front of requests - ret = getattr(self, 'http_%s' % name, None) - if ret: return ret - - # Then try and obtain without mangling - ret = getattr(self, name, None) - if ret: return ret - else: - ret = self[name] - if ret: return ret - - return name - - # Utility Functions - - security.declarePrivate('_okToClose') - def _okToClose(self): - """Check if OK to close ticket, ie have all supporters been closed.""" - if self.sql.listSupporters(support_of=self.id, status=['open', 'hold']): - # There are supporting tickets still open or on hold. - return False - # Any supporting tickets have been closed. - return True - -InitializeClass(TicketPluggableBrain) Copied: MailManager/tags/RELENG_2_0_8/Extensions/TicketPluggableBrain.py (from rev 2895, MailManager/branches/RELENG_2_0/Extensions/TicketPluggableBrain.py) =================================================================== --- MailManager/tags/RELENG_2_0_8/Extensions/TicketPluggableBrain.py (rev 0) +++ MailManager/tags/RELENG_2_0_8/Extensions/TicketPluggableBrain.py 2006-04-05 15:43:47 UTC (rev 2896) @@ -0,0 +1,920 @@ +# Zope modules. +from Globals import InitializeClass +from AccessControl import ClassSecurityInfo, getSecurityManager +from DateTime import DateTime +from zExceptions.unauthorized import Unauthorized +from zExceptions import BadRequest + +# Modules from this package +from Products.MailManager.MailMixin import MailMixin + +# 3rd party modules. +try: + from psycopg import Binary +except ImportError: + pass +try: + from stripogram import html2safehtml +except ImportError: + from Products.stripogram import html2safehtml + +from Products.MailManager.support.html2text import html2text + +# Python library modules. +import re +import operator +from email.Utils import formataddr, parseaddr, make_msgid +from smtplib import SMTPRecipientsRefused + +import logging +from Products.MailManager.support.logger import log + +from_escape = re.compile('^>*From ') +sig_remover = re.compile('^-- $.*\Z', re.DOTALL | re.MULTILINE) + +class TicketPluggableBrain(MailMixin): + + security = ClassSecurityInfo() + security.setPermissionDefault('MailManager Manage Tickets', + ['Tickets', 'Customer']) + + security.declareProtected('MailManager Manage Tickets', 'checkAuthorized') + def checkAuthorized(self): + user = getSecurityManager().getUser() + + if not 'Tickets' in user.roles: + username = user.getUserName() + addrs = self.sql.getCustomerAddresses(username=username) + if not self['from_email'] in [x.access_email for x in addrs]: + raise Unauthorized("You are not allowed to view this ticket") + + security.declarePublic('__bobo_traverse__') + def __bobo_traverse__(self, REQUEST=None, name=None): + """ Traversal hook to do namespace mangling for putting http in + from of requests. + + We rename the request for local methods so that we are allowing + mangling - attempting to get addMessageToTicket will return + the method http_addMessageToTicket. This allows us to split + off the interface layer from API calls. + """ + # First of all, try and mangle http_ in front of requests + ret = getattr(self, 'http_%s' % name, None) + if ret: return ret + + # Then try and obtain without mangling + ret = getattr(self, name, None) + if ret: return ret + else: + ret = self[name] + if ret: return ret + return name + + + security.declareProtected('MailManager Manage Tickets', 'index_html') + def index_html(self, REQUEST): + """Provide a view for the simple direct traversal.""" + return self.ticket_index_html(self, REQUEST) + + security.declareProtected('MailManager Manage Tickets', 'findSupporter') + def findSupporter(self, REQUEST, SESSION): + """Find a supporter for this Ticket.""" + SESSION.set('find_supporter', self.id) + return self.ticket_index_html(self, REQUEST) + + security.declareProtected('MailManager Manage Tickets', 'change') + def change(self, REQUEST): + """Return a view allowing the details to be changed.""" + REQUEST.set('details', 'y') + return self.ticket_index_html(self, REQUEST) + + security.declareProtected('MailManager Manage Tickets', 'save') + def save(self, subject='', assigned='', status='', priority=0, + category0=None, category1=None, category2=None, support_of=None, + changed_by='', REQUEST=None, RESPONSE=None): + """Save changes to a ticket. + + Check what has been changed, record changes in history and then make + the changes to the ticket. + """ + if REQUEST is not None: + # Check for errors (if called through the web). + error = None + if status == 'closed' != self.status and not self._okToClose(): + error = 'All supporting tickets must be closed.' + REQUEST.set('flag_supporters', True) + if support_of and support_of != self.support_of: + # Check ticket to be supported exists, is not closed and does + # not already support self. + results = self.ticket(id=support_of) + if not results: + error = 'Ticket %06d does not exist.' % support_of + REQUEST.set('flag_support_of', True) + elif results[0].status == 'closed': + error = 'Ticket %06d is closed.' % support_of + REQUEST.set('flag_support_of', True) + elif results[0].support_of == self.id: + error = ('Ticket %06d itself supports this ticket.' % + support_of) + REQUEST.set('flag_support_of', True) + if error is not None: + REQUEST.set('error', error) + REQUEST.set('details', 'y') + return self.ticket_index_html(self, REQUEST) + changed_by = changed_by or getSecurityManager().getUser().getUserName() + changes = {} + set_date_closed = False + clear_date_closed = False + if status and status != self.status: + if status == 'closed': + # Record the date & time the ticket was closed. + set_date_closed = True + elif self.status == 'closed': + # Clear date_closed when we re-open a ticket. + clear_date_closed = True + changes['status'] = self.status + if subject and subject != self.subject: + changes['subject'] = self.subject + if assigned and assigned != self.assigned: + changes['assigned'] = self.assigned + # If the assigned user was changed by someone other than the new + # user and the 'Notify users of new tickets' flag is set then let + # the new user know they have got a ticket. + if assigned != changed_by: + if self.account(email=self.account_id)[0].notify_user: + self.notifyUser(new_id=assigned) + if status and status != self.status: + changes['status'] = self.status + if priority and priority != self.priority: + changes['priority'] = self.priority + if category0 and category0 != self.category0: + changes['category0'] = self.category0 + if category1 and category1 != self.category1: + changes['category1'] = self.category1 + if category2 and category2 != self.category2: + changes['category2'] = self.category2 + if support_of is not None and support_of != self.support_of: + changes['support_of'] = self.support_of or 0 + if changes: + self.sql.addHistory(ticket_id=self.id, + subject=changes.get('subject', ''), + assigned=changes.get('assigned', ''), + status=changes.get('status', ''), + priority=changes.get('priority'), + category0=changes.get('category0', ''), + category1=changes.get('category1', ''), + category2=changes.get('category2', ''), + support_of=changes.get('support_of', ''), + changed_by=changed_by) + self.sql.editTicket(id=self.id, + subject=subject or self.subject, + assigned=assigned or self.assigned, + status=status or self.status, + priority=priority or self.priority, + category0=category0 or self.category0 or '', + category1=category1 or self.category1 or '', + category2=category2 or self.category2 or '', + set_date_closed=set_date_closed, + clear_date_closed=clear_date_closed) + # Icky, but let's update the support_of separately. + if support_of == 0: + self.sql.editTicket(id = self.id, clear_support_of = True) + elif support_of: + self.sql.editTicket(id = self.id, set_support_of = True, support_of = support_of) + + if RESPONSE is not None: + return RESPONSE.redirect('%s/ticket/%06d' % (self.getBaseURL(), + self.id)) + + security.declareProtected('MailManager Manage Tickets', 'headers') + def headers(self, REQUEST): + """Show or hide the message's raw headers.""" + if REQUEST.SESSION.has_key('show_headers'): + del REQUEST.SESSION['show_headers'] + else: + REQUEST.SESSION.set('show_headers', True) + return self.ticket_index_html(self, REQUEST) + + security.declareProtected('MailManager Manage Tickets', 'showHTML') + def showHTML(self, REQUEST): + """Should html_body be displayed?""" + show_html = REQUEST.SESSION.get('show_html') + if show_html is None: + return 0 + return show_html.get(self.absolute_url(), 0) + + security.declareProtected('MailManager Manage Tickets', 'toggleShowHTML') + def toggleShowHTML(self, REQUEST): + """Change whether html_body is displayed.""" + show_html = REQUEST.SESSION.get('show_html', {}) + if not show_html: + REQUEST.SESSION.set('show_html', show_html) + url = self.absolute_url() + show_html[url] = not show_html.get(url, 0) + return REQUEST.RESPONSE.redirect('%s/ticket/%06d' % (self.getBaseURL(), + self.id)) + + security.declareProtected('MailManager Manage Tickets', 'export') + def export(self, RESPONSE): + """Export all of a ticket's messages in mbox format. TODO: export + the attachments too. This is probably going to involve creating + an email object to let it do the appropriate construction. + """ + RESPONSE.setHeader('content-type', 'text/plain') + RESPONSE.setHeader('Content-Disposition', + 'attachment; filename=mbox.txt') + write = RESPONSE.write # Saves a lookup every time + for msg in self.sql.listMessages(ticket_id = self.id): + date = DateTime(msg.msg_date).rfc822() + from_email = msg.from_email or self.from_email + write("From %s %s\n" % (from_email.encode('utf-8'), date)) + write(msg.raw_headers.encode('utf-8')) + write('\n\n') + for line in msg.body.splitlines(): + if from_escape.match(line): + line = u">" + line + write(line.encode('utf-8')) + write('\n') + write ('\n') + return + + security.declarePrivate('notifyUser') + def notifyUser(self, new_id=None): + """Email the assigned user that the ticket has been created/updated. + + By default notify the user the ticket is presently assigned to, if + new_id is set then notify the new user with that username. + """ + if self.status == 'spam': + return + mail_to = self.sql.listUsers(username=new_id or self.assigned)[0].email + # Guard against agent setting personal address to same as account's. + if mail_to == self.account_id: + return + + # Check to see if server_url and virtual_root are set. If so, use them. + # Otherwise, use getBaseURL(). Note that getBaseURL() may not work + # properly if called when the REQUEST object is not available. + if self.server_url: + if self.server_url.endswith('/'): + url = self.server_url + self.virtual_root + else: + url = self.server_url + '/' + self.virtual_root + else: + url = self.getBaseURL() + + zmsg = self.sql.listMessages(ticket_id=self.id)[-1] + body = """You have a new or updated ticket. + +From: %s +To: %s +Subject: %s +Full details: +%s/ticket/%06d""" % (zmsg.from_email, zmsg.msg_to, zmsg.subject, + url, self.id) + msg = self.createMessage(mail_to=mail_to, + mail_from=self.account_id, + subject='You have a new or updated ticket', + body=body)[0] + self.MailHost._send(self.account_id, mail_to, msg.as_string()) + + security.declarePrivate('notifyGroup') + def notifyGroup(self, group_name): + """Notify members of a group that a new mail has arrived. + + Do not notify the group member to whom the ticket has been assigned as + they will usually have been notified by the notifyUser() method. + """ + if self.status == 'spam': + return + zmsg = self.sql.listMessages(ticket_id=self.id)[-1] + subject = '%s has a new or updated ticket' % self.assigned + body = """%s has a new or updated ticket. + +From: %s +To: %s +Subject: %s +Full details: +%s/ticket/%06d""" % (self.assigned, zmsg.from_email, zmsg.msg_to, zmsg.subject, + self.absolute_url(), self.id) + for member in self.sql.listGroupMembers(group_name=group_name): + if member.username != self.assigned: + mail_to = self.sql.listUsers(username=member.username)[0].email + msg = self.createMessage(mail_to=mail_to, + mail_from=self.account_id, + subject=subject, + body=body)[0] + self.MailHost._send(self.account_id, mail_to, msg.as_string()) + + + ## Sending Methods #################################################### + # + # The following methods all handle sending replies from the user + # interface. + # + # http_sendReply \ + # http_sendAndClose \ sendMethod - addNote + # http_sendAndHold / + # http_addNote / + # + # The http methods are partially there for historical reasons, as these + # are what the ZPTs call. These in turn all call the refactored method + # sendMessage, adding information on what method made the call by + # passing the event and change_status variables. + # + # Replacing the http_ methods with a more generic method may cause + # problems by allowing the end user to manually submit with event or + # change_status variables. Permissions would need to be analysed before + # making this change. + # + + security.declareProtected('MailManager Manage Tickets', 'http_sendReply') + def http_sendReply(self, mail_to, cc='', bcc='', subject='', body='', + body_is_html=0, user_signature=None, next_id=None, + offset=None, last_modified=None, + REQUEST=None, RESPONSE=None): + """ Send a reply to a customer. """ + + return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, + subject=subject, body=body, body_is_html=body_is_html, + user_signature=user_signature, next_id=next_id, + last_modified=last_modified, offset=offset, + change_status=None, + event='SendReply', + REQUEST=REQUEST, RESPONSE=RESPONSE) + + security.declareProtected('MailManager Manage Tickets', 'http_sendAndClose') + def http_sendAndClose(self, mail_to, cc='', bcc='', subject='', body='', + body_is_html=0, user_signature=None, next_id=None, + offset=None, last_modified=None, + REQUEST=None, RESPONSE=None): + """ Send a reply and close the ticket. """ + + return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, + subject=subject, body=body, body_is_html=body_is_html, + user_signature=user_signature, next_id=next_id, + last_modified=last_modified, offset=offset, + change_status='closed', + event='SendAndClose', + REQUEST=REQUEST, RESPONSE=RESPONSE) + + security.declareProtected('MailManager Manage Tickets', 'http_sendAndHold') + def http_sendAndHold(self, mail_to, cc='', bcc='', subject='', body='', + body_is_html=0, user_signature=None, next_id=None, + last_modified=None, offset=None, + REQUEST=None, RESPONSE=None): + """ Send a reply and put the ticket on hold. """ + + return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, + subject=subject, body=body, body_is_html=body_is_html, + user_signature=user_signature, next_id=next_id, + last_modified=last_modified, offset=offset, + change_status = 'hold', + event = 'Send... [truncated message content] |
From: <ke...@us...> - 2006-04-07 13:48:37
|
Revision: 2901 Author: kevca Date: 2006-04-07 06:48:23 -0700 (Fri, 07 Apr 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=2901&view=rev Log Message: ----------- Tagging for release Added Paths: ----------- MailManager/tags/RELENG_2_0_8/ MailManager/tags/RELENG_2_0_8/CHANGES.txt Removed Paths: ------------- MailManager/tags/RELENG_2_0_8/CHANGES.txt Copied: MailManager/tags/RELENG_2_0_8 (from rev 2898, MailManager/branches/RELENG_2_0) Deleted: MailManager/tags/RELENG_2_0_8/CHANGES.txt =================================================================== --- MailManager/branches/RELENG_2_0/CHANGES.txt 2006-04-07 11:50:36 UTC (rev 2898) +++ MailManager/tags/RELENG_2_0_8/CHANGES.txt 2006-04-07 13:48:23 UTC (rev 2901) @@ -1,485 +0,0 @@ -Version 2.0.8(Unreleased) -* BUG FIXES -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.7 -* BUG FIXES -- Fixed the setting of next ticket id for MySQL, no longer silently ignores - the option on mailmanager creation and fixes migration (#1412787) -- Send and Close, Send Reply, Send and Hold and Add Note have all been - considerably refactored. This resolves the problem reported where outbound - messages had been silently discarded (#1415497) -- getMail could potentially drop incoming messages whilst collecting from - POP3 accounts. This has now been corrected, and a test case now exists - which reproduces the existing problem and demonstrates it being fixed. - (#1422985) -- i18n fix - on the ticket modify screen "closed" is no longer displayed as - "open" when languages other than English are used (#1423422) -* IMPROVEMENTS -- Massive improvements to the test suite. - -Version 2.0.6 -* IMPROVEMENTS -- We're now using html2text (included) instead of stripogram for converting - HTML to its plain text equivalent (when sending out HTML mail, we also - include a plain text alternative for those who can't read HTML messages). - This results in far prettier plain text conversion. -* BUG FIXES -- Notify user/group flags can now be set/cleared correctly on account - preferences (#1404595). -- Improved address validation. Well, it's now a bit more lax, but it's - completely conformant to RFCs 2821 and 2822 (#1396051). -- MySQL: Default categories are now set up at installation (#1392386). -- HTML parts of multipart/alternative messages are now encoded as UTF-8 - rather than, bizarrely, being forced into ISO-8859-1 (#1368283). -- Make sure the user is informed about *why* test data cannot be removed - (#1345788). - -Version 2.0.5 -* NEW FEATURES -- Tickets can now be created by sending an email (RFE 859117) -- Italian translation. -* BUG FIXES -- MySQL: Adding a user fixed (#1382479) -- MySQL: Users are now migrated correctly (#1378323) -- MySQL: Attachments can now be of virtually any size (#1378224) -- MySQL: MailManager will now start when psycopg is not present (#1378209) -- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) -- PostgreSQL: Migration works even if response target update fails (#1374603) -- Search now works for users in all timezones (#1375345) -- Reports and delete tickets works in all timezones (#1381828) -- The test data now sets 'routing' on the accounts (#1375764) -- Fixed parsing of mails containing NULL characters (#1370866) -- MMImport.py script now uses new URL (#1378385) -- To: field left empty when sending email (#1377027) -- Create Ticket fails when logged in as customer (#1369356) - -Version 2.0.4 -* BUG FIXES -- Prevent multiple users replying to the same ticket by accident (#1371269) -- Filters got broken in 2.0.3, change reverted (#1372814) -- Attachments now set the Content-Type header correctly on download (#13369349) -- Template names with trailing whitespace now work (#1363768) -- Set sql_charset on the mailmanager object during migration. (#1369347) - -Version 2.0.3 -* BUG FIXES -- Be more careful about adding and removing the test data (#1353112, #1345788). -- Improve the Unicode support with the MySQL back end (#1338614). -- Support of can now be removed with MySQL back end (#1338603). -- Fixes to the response target settings (#1336398, #1337506). -- setSession correctly clears the offset and always redirects to - Tickets (#1350429). -- Offer MySQL back end as a migration option (#1340301). -- Tickets now correctly marked as unread with MySQL back end (#1344827). - -Version 2.0.2 -* BUG FIXES -- Ignore the showHTML information in the session for plain text - emails. Reapplied previous bugfix (#1242337) -- Resetting response target to None now updates database (#1336398) -- Reports for targets fixed (#1337506) -* IMPROVEMENTS -- Now has setupdb script for MySQL users -- Split off setupdb code, now available as separate module -- Added in documentation for MySQL configuration - -Version 2.0.1-release -* BUG FIXES -- Disk usage screen now fixed for empty instances (#1244446) -- Initial Manager use now has correct roles set (#1324878) -- Altering roles now works correctly (#1324876) -- Update of response target now works correctly (#1324935) -- Removing notification flag for users/group now works correctly (#1315000) -- Migration now works correctly for 1.1 instances (#1291113) -- Setting response targets no longer generates an error (#1324884) - -Version 2.0.1-rc2 -* BUG FIXES -- No longer depends on psycopg due to import statements -- Migration fixes for MySQL users -- Fixed some scoping issues causing ZSQL methods to break due to - acquisition. -* IMPROVEMENTS -- SQL Directory no longer uses FileSystemSite.DirectoryView meaning - that the SQL methods can be overridden by 3rd parties. -- Test suite now has added hooks for overloading object types - -Version 2.0.1-rc1 -* BUG FIXES -- Test suite now covers text search cache consistency, cleared issues - with MySQL's mysql_max_allowed_packet variable -- Postgres support now appears stable - -Version 2.0.1-beta1 -* BUG FIXES -- Merged in all of the changes between 2.0r6 and 2.0r7 -- Fixed the index bug which was resulting in duplicate tickets being - displayed on the list page - -Version 2.0.1-alpha1 -* NEW FEATURES -- Adds in initial MySQL support -- SQL methods given addition parameters to deal with new MySQL support -- Vastly improved test suite - regression test suite for the database code. - -Version 2.0r7 -* BUG FIXES -- Subsequent pages for search were not being returned due to misuse of the - SESSION variable. These are now handled correctly (#1276412) -- Categories and templates were moved entirely to SQL. Upgrade needs a - migration to function correctly. (#1276414) -- listTicket method now correctly searches for subjects -- Fixes a Unicode handling error in the MailMixing class, which could - potentially block up incoming mail -* IMPROVEMENTS -- Postgres installation documentation rewritten -- Changes to loading of test datasets -- Test data set improved, now covers more functionality - -Version 2.0r6 -* BUG FIXES -- Fixed the positioning of the order by section of the listTickets query, - fixes broken ordering for search. -- The listCategories SQL method was broken, which was used by the Reports - pages. Reports for categories other than category0 were broken. - -Version 2.0 -* BUG FIXES -- Fix the security declaration of checkPOP3SSL(). - -Version 2.0 RC 3 -* NEW FEATURES -- Introduce some generalisations, ready for MySQL support in 2.0.1 -- Beginnings of epydoc API documentation. -* BUG FIXES -- Update the version number on migration. (#1229769) -- Robustify the autoreply code to deal with fatal errors. (#1240870) -- When a new message comes in with a ticket id in the subject line, - verify that the ticket already exists instead of assuming that it - does. (#1240711) -- Format the email address in the To: field for replies. (#1230837) -- Ignore the showHTML information in the session for plain text - emails. (#1242337) -- Record the logged in user who sent a reply to a ticket. (#1242958) - -Version 2.0 RC 2 -* BUG FIXES -- multipart/alternative mail with both an HTML and a plain text body now - only display one of them at a time (1227265) -- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) -- Migration updates the mm version -- Create ticket works again (1227744) - -Version 2.0 RC 1 -* BUG FIXES -- Stripogram can now be installed as a Python product in site-packages (1226633) -- Reply-To: header is used in favour of From: (1226156) -- Notifiction emails can handle non-ASCII subject lines (1224784) -- URLs are now accurate on notification emails (1224756) -- Character encodings set correctly on all web pages (1224731) -- Send & Close now goes to the next ticket (1224164) -- Improved date parsing (1223755) -- Respond By: now displayed for tickets with a response target (1222528) -- Attachment titles are now decoded correctly (1223974) - -Version 2.0 Beta 2 -* BUG FIXES -- Make the email validation less strict. (1283401) -- Customers can no longer have email addresses which are used - by an account. (1216414) -- Migration: Drop filters which refer to unknown users/groups. (1216361) -- Migration: Be more careful about coercing dates into ISO8601. (1216534) -- Clarified notification email setup. (1217403) -- Fixed Chinese translation. (1215645) -- Store time zone information in the pgsl database. - -Version 2.0 Beta 1 -* NEW FEATURES -- Added a Chinese translation. -- Add some documentation for creating the Postgres database and point to - detailed docs on the Windows installation process. -- Updated the help files to reflect the new version's feature set. -* BUG FIXES -- Make mbox exports have a more meaningful filename. -- Deal with RFC2047-encoded headers correctly. (1212035) -- Make the disk usage a bit more friendly. (1213604) -- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) -- Epoz now has a white background on all browsers. (1208912) - -Version 2.0 alpha 2 -* NEW FEATURES -- Support for retrieving POP3 mail over SSL (RFE 1204236) -- Optionally notify all in a group of new messages (RFE 1208284) -* BUG FIXES -- Help tab no longer visible after logout (1207656) -- Adding a MailManager instance now creates an initial user (1207022) -- Changes to users such as adding a signature no longer clear password (1207017) -- HTML tickets work properly (1205720, 1205717) -- Time to close tickets recorded (1204825) -- Reply to all button improved (1204805) -- Reassignment notification added (1204372) -- Groups redesigned (1204312) -- Adding/removing attachments no longer clears other form fields (1204272) -- Date translations fixed (1204268) -- Templates fixed (1204267) -- Overdue tickets function properly (1203141) -- Performance v. account report fixed (1196685) -- GetMail fixed (1196606) -- Referential integrity broken on mm_message table (1194418) -- Login link on logout page fixed (1204811) -- Signature handling improved (1204877) -- HTML email fixed (1204987) - -Version 2.0 alpha 1 -* NEW FEATURES -- A complete redesign using PostgreSQL as a replacement for the ZODB in order - to improve performance and scalability. -- Can now use SMTP servers that require a login (RFE 939720) - -Version 1.1 -* NEW FEATURES -- Internationalization of the help documentation. -* BUG FIXES -- Make sure that sending mail out is the last thing done, which should reduce - the window where a ConflictError would cause duplicate emails to be sent. -- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other - than a MessageParseError. Otherwise we wind up hard-bouncing (instead of - retrying) on a ConflictError. - -Version 1.1-rc5 -* BUG FIXES -- Comptatible with Zope 2.6/Python 2.1 again - -Version 1.1-rc4 -* BUG FIXES -- Standard attachments fixed (1110435) -- Clear supporter link fixed after i18n problem (1110436) - -Version 1.1-rc3 -* NEW FEATURES -[Unfortunately it was essential to add the following features at - this late stage for commercial reasons.] -- Added archive/restore tickets (RFE 953290) -- Create ticket can now have multiple attachments (RFE 987700) -- Replies can also have multiple attachments (RFE 859141) -- Standard set of attachments can be stored on the system (RFE 985469) -* BUG FIXES -- Edit of mail headers now works properly (RFE 859102) -- Fixed broken migration - -Version 1.1-rc2 -* BUG FIXES -- Now possible to add/edit account without SSL (1090041) -- Spam tickets no longer appear on the 'New' tickets list - -Version 1.1-rc1 -* NEW FEATURES -- Users notified on re-assignment of tickets (RFE 978035) -- Internationalisation (i18n) added ready for translation to other languages. -- Support for SSL connections to remote IMAP server. -- Any mail headers may be used in filters (RFE 859102) -* BUG FIXES -- Report graphs now work for user-defined categories (978404) -- File downloads now work when there is a space in the filename (985150) -- Remove support ticket feature fixed (985677) -- Users no longer notified if spam is received (1059104) -- Spam no longer displayed on default ticket listing views -- Templates with names ending in a space may now be deleted/edited (1003514) - -Version 1.0 -No changes from 1.0-rc2 - -Version 1.0-rc2 -* NEW FEATURES -- Batch classification of tickets. (RFE 859114 and 957719) -* BUG FIXES -- Migration works when filters are of mixed formats. (945956) -- Migration works when groups are of mixed formats. (945959) -- Messages from mailer-daemon with a real name do not cause a loop. (952864) -- Works on Firefox for Mac when reply has no attachment. (963291) -- Report graphs work for more than 200 tickets in a period. (964144) - -Version 1.0-rc1 -* NEW FEATURES -- Choice of date format. (RFE 869827) -- Choice of timezone (currently only on Unix). (RFE 869827) -- Script to import mail from Unix mailboxes. (RFE 903031) -- Shortcut icon. -- Importing of tickets enabled. -* IMPROVEMENTS -- Added global error slot and adjusted settings screens to use it. (873232) -- Message response form fields remembered in request. -- An instance's children may be migrated even when it is not. -* BUG FIXES -- Mail check thread delays till Zope is ready in 2.7 as well. (835642) -- GroupSettings page template works with new-style groups. (887785) -- Problems sending mail caught and reported to the user or logged. (892947) -- Message ID added to outgoing messages. (895039) -- Newlines in the Cc field no longer break the JavaScript. (904033) -- Private notes and replies no longer lose headers in migration. (904076) -- Private notes may no longer have a To field. (912534) -- Ticket ownership transferred when user deleted. (925344) -- Customers are persistent. (930654) -- Sending files with a bad mime type does not cause an exception. (934133) -- HTML templates no longer have extra breaks added. (934235) -- MailManager.getMail() returns an empty string on success. (934902) -- Add customer form checks fields are filled. (938631) -- Fixed links to AccountSettings page. (938678) - -Version 1.0-b4 -* BUG FIX -- Fixed error when a new thread is started and notification is on. - -Version 1.0-b3 -* NEW FEATURES -- Supporter mechanism for associating tickets fully implemented. -- URLs in messages rendered as hyperlinks. -- Filters can assign to groups as well as users. -* IMPROVEMENTS -- Assigned agent mailed at every new message in ticket, customer only - when he starts a new ticket. This reverses the previous behaviour. -- Tickets can be re-opened by arrival of a new message or through - Ticket Details box. -- Migration version distinguished from product version. -- Group now a class; ensures that group members are assigned to evenly. -- By default users only see tickets assigned to them. -- Export (view raw messages) link added to Ticket index page. -* BUG FIXES -- Account signatures are now used. -- HTML setting on auto replies and templates respected. -- Agents can be deleted. -- Several others (see SourceForge bugs 859030 to 873233). - -Version 1.0-b2 -* NEW FEATURES -- Migration -- HTML messages may now be viewed. -- Most recent search results always available. -- Response target added as option in filters and create ticket screen. -* IMPROVEMENTS -- More robust ticket navigation (works with virtual hosting, "prev"/"next" - links always available, "list" goes to batch containing current ticket). -- Improved handling and presentation of attachments. -- Help screens updated (not quite finished). -- Improved interface to reports (still needs work though). -- All character sets displayed correctly (as far as the browser's fonts allow). -- Mail fetching scripts have an option to specify MailManager's URL . -- Search by from name no longer requires exact match. -- Much Python code removed from page templates. -* BUG FIXES -- Overdue ticket view and searches for overdue tickets now work. -- Automatic mail checking continues after product is refreshed. -- Numerous others (see SourceForge bugs 832932 to 858688). - -Version 1.0-b1 -- Dependence on MailHost product removed. -- Message class now wraps Message object from Python email package, - allowing mails to be retreived in their original form. -- Automatic mail fetching introduced. -- Code for creating e-mails through the web brought together in a new - module and handling added for text entered in any character set. -- Each account is now a separate folder, ready for per account - security settings. -- Fetching and handling of incoming mail moved to new Account class. -- Self service interface to allow customers to manage their own tickets. -- Better handling of HTML emails. -- Create ticket now has more sensible defaults. -- Users now deleted properly. -- Calculates an approximation of disk space used. -- Added Property Managers to ease debugging. -- Users with 'Settings' access can no longer view ZMI. -- Numerous bug fixes. - -Version 0.96 -- By default, shows newest tickets first rather than oldest -- The subject of a ticket can now be changed -- If more email is added to a read ticket it goes back to being unread (bold) -- Advises if an attachment is of a dangerous type (for Windows users) -- Attachments now download with original filename & security improved -- Browser bug in IE prevented selection of user on tickets screen (797221) -- Two extra user definable categories added -- Code tidied up & minor bug fixes - -Version 0.95 -- Added a 'Spam' status and amended reports, tickets & filters accordingly -- Can now delete spam tickets without closing them (783289) -- Now handles AppleDouble attachments correctly (787671) -- POP3 mailbox lock removed if there is an error (787677) -- IMAP mailbox lock removed if there is an error -- Mails that can't be processed are now stored raw rather than deleted -- Added 'priority' and 'assigned' to Search screen (785360) -- Basic export of reports to Excel implemented -- Now record and report on times to close as well as times to respond -- Other minor fixes - -Version 0.94 -- Ticket status is displayed correctly in all circumstances -- Adding attachments when creating a ticket thru the web now works as expected. -- Users can be notified of new tickets in all circumstances (783955) -- Allow selection of fields to display on tickets screen (783863) -- Added submenu to the Create ticket screen -- Other minor fixes - -Version 0.93 -- Improved attachment handling and display -- Improved ticket navigation (now back/list/next on ticket view) (780783) -- Fixed a bug in the reporting graphs where the last day in the month could - be missed -- Added an auto refresh option for tickets screen (feature request 781294) -- By default tickets created through the web are assigned to the logged in user, - rather than the first user alphabetically -- Improved outgoing mail -- More advanced standard filter -- Tightened up security -- Help button now context sensitive - -Version 0.92 -- Adding a user with the Reports permission now works as expected (779986) -- Account deletion now works properly (779989) -- Admin password now hidden on the Add MailManager page (779987) - -Thanks to Ronan Amicel for spotting these four bugs. - -- Ticket deletion system improved. -- Supporting tickets system now works better. - -Version 0.91 -- Fixed the Account Help screen. Now displays properly and text is accurate. -- Fixed the 'Change details' section on a ticket screen so the user the ticket - is assigned to is displayed by default. Also ensured user names are displayed - in alphabetical order. -- Categories can now be deleted. Deleted categories will still appear in - Reports, System Settings and on the Search page until every ticket with that - category has been deleted from the system. - -Thanks to Kevin Gill for spotting these bugs. - -Version 0.9 -The first open source release of MailManager. Based on the commercial version -however with some major changes: - -- Uses the Zope Object DB instead of an external relational database. This - changes the performance, it is faster in some areas and slower in others. It - makes the product much easier to install. -- Use of HTML to generate the graphs. Not as attractive as the commercial - version but saves the difficulty of installing extensions which were not - stable on all platforms. -- Improved text editor. Epoz is used to provide rich text editing allowing - easy creation of HTML mail. -- Improved text indexing. Greatly expanded query options. -- Bug fixes. A number of minor bugs were fixed. Copied: MailManager/tags/RELENG_2_0_8/CHANGES.txt (from rev 2899, MailManager/branches/RELENG_2_0/CHANGES.txt) =================================================================== --- MailManager/tags/RELENG_2_0_8/CHANGES.txt (rev 0) +++ MailManager/tags/RELENG_2_0_8/CHANGES.txt 2006-04-07 13:48:23 UTC (rev 2901) @@ -0,0 +1,487 @@ +Version 2.0.8 +* BUG FIXES +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.7 +* BUG FIXES +- Fixed the setting of next ticket id for MySQL, no longer silently ignores + the option on mailmanager creation and fixes migration (#1412787) +- Send and Close, Send Reply, Send and Hold and Add Note have all been + considerably refactored. This resolves the problem reported where outbound + messages had been silently discarded (#1415497) +- getMail could potentially drop incoming messages whilst collecting from + POP3 accounts. This has now been corrected, and a test case now exists + which reproduces the existing problem and demonstrates it being fixed. + (#1422985) +- i18n fix - on the ticket modify screen "closed" is no longer displayed as + "open" when languages other than English are used (#1423422) +* IMPROVEMENTS +- Massive improvements to the test suite. + +Version 2.0.6 +* IMPROVEMENTS +- We're now using html2text (included) instead of stripogram for converting + HTML to its plain text equivalent (when sending out HTML mail, we also + include a plain text alternative for those who can't read HTML messages). + This results in far prettier plain text conversion. +* BUG FIXES +- Notify user/group flags can now be set/cleared correctly on account + preferences (#1404595). +- Improved address validation. Well, it's now a bit more lax, but it's + completely conformant to RFCs 2821 and 2822 (#1396051). +- MySQL: Default categories are now set up at installation (#1392386). +- HTML parts of multipart/alternative messages are now encoded as UTF-8 + rather than, bizarrely, being forced into ISO-8859-1 (#1368283). +- Make sure the user is informed about *why* test data cannot be removed + (#1345788). + +Version 2.0.5 +* NEW FEATURES +- Tickets can now be created by sending an email (RFE 859117) +- Italian translation. +* BUG FIXES +- MySQL: Adding a user fixed (#1382479) +- MySQL: Users are now migrated correctly (#1378323) +- MySQL: Attachments can now be of virtually any size (#1378224) +- MySQL: MailManager will now start when psycopg is not present (#1378209) +- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) +- PostgreSQL: Migration works even if response target update fails (#1374603) +- Search now works for users in all timezones (#1375345) +- Reports and delete tickets works in all timezones (#1381828) +- The test data now sets 'routing' on the accounts (#1375764) +- Fixed parsing of mails containing NULL characters (#1370866) +- MMImport.py script now uses new URL (#1378385) +- To: field left empty when sending email (#1377027) +- Create Ticket fails when logged in as customer (#1369356) + +Version 2.0.4 +* BUG FIXES +- Prevent multiple users replying to the same ticket by accident (#1371269) +- Filters got broken in 2.0.3, change reverted (#1372814) +- Attachments now set the Content-Type header correctly on download (#13369349) +- Template names with trailing whitespace now work (#1363768) +- Set sql_charset on the mailmanager object during migration. (#1369347) + +Version 2.0.3 +* BUG FIXES +- Be more careful about adding and removing the test data (#1353112, #1345788). +- Improve the Unicode support with the MySQL back end (#1338614). +- Support of can now be removed with MySQL back end (#1338603). +- Fixes to the response target settings (#1336398, #1337506). +- setSession correctly clears the offset and always redirects to + Tickets (#1350429). +- Offer MySQL back end as a migration option (#1340301). +- Tickets now correctly marked as unread with MySQL back end (#1344827). + +Version 2.0.2 +* BUG FIXES +- Ignore the showHTML information in the session for plain text + emails. Reapplied previous bugfix (#1242337) +- Resetting response target to None now updates database (#1336398) +- Reports for targets fixed (#1337506) +* IMPROVEMENTS +- Now has setupdb script for MySQL users +- Split off setupdb code, now available as separate module +- Added in documentation for MySQL configuration + +Version 2.0.1-release +* BUG FIXES +- Disk usage screen now fixed for empty instances (#1244446) +- Initial Manager use now has correct roles set (#1324878) +- Altering roles now works correctly (#1324876) +- Update of response target now works correctly (#1324935) +- Removing notification flag for users/group now works correctly (#1315000) +- Migration now works correctly for 1.1 instances (#1291113) +- Setting response targets no longer generates an error (#1324884) + +Version 2.0.1-rc2 +* BUG FIXES +- No longer depends on psycopg due to import statements +- Migration fixes for MySQL users +- Fixed some scoping issues causing ZSQL methods to break due to + acquisition. +* IMPROVEMENTS +- SQL Directory no longer uses FileSystemSite.DirectoryView meaning + that the SQL methods can be overridden by 3rd parties. +- Test suite now has added hooks for overloading object types + +Version 2.0.1-rc1 +* BUG FIXES +- Test suite now covers text search cache consistency, cleared issues + with MySQL's mysql_max_allowed_packet variable +- Postgres support now appears stable + +Version 2.0.1-beta1 +* BUG FIXES +- Merged in all of the changes between 2.0r6 and 2.0r7 +- Fixed the index bug which was resulting in duplicate tickets being + displayed on the list page + +Version 2.0.1-alpha1 +* NEW FEATURES +- Adds in initial MySQL support +- SQL methods given addition parameters to deal with new MySQL support +- Vastly improved test suite - regression test suite for the database code. + +Version 2.0r7 +* BUG FIXES +- Subsequent pages for search were not being returned due to misuse of the + SESSION variable. These are now handled correctly (#1276412) +- Categories and templates were moved entirely to SQL. Upgrade needs a + migration to function correctly. (#1276414) +- listTicket method now correctly searches for subjects +- Fixes a Unicode handling error in the MailMixing class, which could + potentially block up incoming mail +* IMPROVEMENTS +- Postgres installation documentation rewritten +- Changes to loading of test datasets +- Test data set improved, now covers more functionality + +Version 2.0r6 +* BUG FIXES +- Fixed the positioning of the order by section of the listTickets query, + fixes broken ordering for search. +- The listCategories SQL method was broken, which was used by the Reports + pages. Reports for categories other than category0 were broken. + +Version 2.0 +* BUG FIXES +- Fix the security declaration of checkPOP3SSL(). + +Version 2.0 RC 3 +* NEW FEATURES +- Introduce some generalisations, ready for MySQL support in 2.0.1 +- Beginnings of epydoc API documentation. +* BUG FIXES +- Update the version number on migration. (#1229769) +- Robustify the autoreply code to deal with fatal errors. (#1240870) +- When a new message comes in with a ticket id in the subject line, + verify that the ticket already exists instead of assuming that it + does. (#1240711) +- Format the email address in the To: field for replies. (#1230837) +- Ignore the showHTML information in the session for plain text + emails. (#1242337) +- Record the logged in user who sent a reply to a ticket. (#1242958) + +Version 2.0 RC 2 +* BUG FIXES +- multipart/alternative mail with both an HTML and a plain text body now + only display one of them at a time (1227265) +- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) +- Migration updates the mm version +- Create ticket works again (1227744) + +Version 2.0 RC 1 +* BUG FIXES +- Stripogram can now be installed as a Python product in site-packages (1226633) +- Reply-To: header is used in favour of From: (1226156) +- Notifiction emails can handle non-ASCII subject lines (1224784) +- URLs are now accurate on notification emails (1224756) +- Character encodings set correctly on all web pages (1224731) +- Send & Close now goes to the next ticket (1224164) +- Improved date parsing (1223755) +- Respond By: now displayed for tickets with a response target (1222528) +- Attachment titles are now decoded correctly (1223974) + +Version 2.0 Beta 2 +* BUG FIXES +- Make the email validation less strict. (1283401) +- Customers can no longer have email addresses which are used + by an account. (1216414) +- Migration: Drop filters which refer to unknown users/groups. (1216361) +- Migration: Be more careful about coercing dates into ISO8601. (1216534) +- Clarified notification email setup. (1217403) +- Fixed Chinese translation. (1215645) +- Store time zone information in the pgsl database. + +Version 2.0 Beta 1 +* NEW FEATURES +- Added a Chinese translation. +- Add some documentation for creating the Postgres database and point to + detailed docs on the Windows installation process. +- Updated the help files to reflect the new version's feature set. +* BUG FIXES +- Make mbox exports have a more meaningful filename. +- Deal with RFC2047-encoded headers correctly. (1212035) +- Make the disk usage a bit more friendly. (1213604) +- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) +- Epoz now has a white background on all browsers. (1208912) + +Version 2.0 alpha 2 +* NEW FEATURES +- Support for retrieving POP3 mail over SSL (RFE 1204236) +- Optionally notify all in a group of new messages (RFE 1208284) +* BUG FIXES +- Help tab no longer visible after logout (1207656) +- Adding a MailManager instance now creates an initial user (1207022) +- Changes to users such as adding a signature no longer clear password (1207017) +- HTML tickets work properly (1205720, 1205717) +- Time to close tickets recorded (1204825) +- Reply to all button improved (1204805) +- Reassignment notification added (1204372) +- Groups redesigned (1204312) +- Adding/removing attachments no longer clears other form fields (1204272) +- Date translations fixed (1204268) +- Templates fixed (1204267) +- Overdue tickets function properly (1203141) +- Performance v. account report fixed (1196685) +- GetMail fixed (1196606) +- Referential integrity broken on mm_message table (1194418) +- Login link on logout page fixed (1204811) +- Signature handling improved (1204877) +- HTML email fixed (1204987) + +Version 2.0 alpha 1 +* NEW FEATURES +- A complete redesign using PostgreSQL as a replacement for the ZODB in order + to improve performance and scalability. +- Can now use SMTP servers that require a login (RFE 939720) + +Version 1.1 +* NEW FEATURES +- Internationalization of the help documentation. +* BUG FIXES +- Make sure that sending mail out is the last thing done, which should reduce + the window where a ConflictError would cause duplicate emails to be sent. +- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other + than a MessageParseError. Otherwise we wind up hard-bouncing (instead of + retrying) on a ConflictError. + +Version 1.1-rc5 +* BUG FIXES +- Comptatible with Zope 2.6/Python 2.1 again + +Version 1.1-rc4 +* BUG FIXES +- Standard attachments fixed (1110435) +- Clear supporter link fixed after i18n problem (1110436) + +Version 1.1-rc3 +* NEW FEATURES +[Unfortunately it was essential to add the following features at + this late stage for commercial reasons.] +- Added archive/restore tickets (RFE 953290) +- Create ticket can now have multiple attachments (RFE 987700) +- Replies can also have multiple attachments (RFE 859141) +- Standard set of attachments can be stored on the system (RFE 985469) +* BUG FIXES +- Edit of mail headers now works properly (RFE 859102) +- Fixed broken migration + +Version 1.1-rc2 +* BUG FIXES +- Now possible to add/edit account without SSL (1090041) +- Spam tickets no longer appear on the 'New' tickets list + +Version 1.1-rc1 +* NEW FEATURES +- Users notified on re-assignment of tickets (RFE 978035) +- Internationalisation (i18n) added ready for translation to other languages. +- Support for SSL connections to remote IMAP server. +- Any mail headers may be used in filters (RFE 859102) +* BUG FIXES +- Report graphs now work for user-defined categories (978404) +- File downloads now work when there is a space in the filename (985150) +- Remove support ticket feature fixed (985677) +- Users no longer notified if spam is received (1059104) +- Spam no longer displayed on default ticket listing views +- Templates with names ending in a space may now be deleted/edited (1003514) + +Version 1.0 +No changes from 1.0-rc2 + +Version 1.0-rc2 +* NEW FEATURES +- Batch classification of tickets. (RFE 859114 and 957719) +* BUG FIXES +- Migration works when filters are of mixed formats. (945956) +- Migration works when groups are of mixed formats. (945959) +- Messages from mailer-daemon with a real name do not cause a loop. (952864) +- Works on Firefox for Mac when reply has no attachment. (963291) +- Report graphs work for more than 200 tickets in a period. (964144) + +Version 1.0-rc1 +* NEW FEATURES +- Choice of date format. (RFE 869827) +- Choice of timezone (currently only on Unix). (RFE 869827) +- Script to import mail from Unix mailboxes. (RFE 903031) +- Shortcut icon. +- Importing of tickets enabled. +* IMPROVEMENTS +- Added global error slot and adjusted settings screens to use it. (873232) +- Message response form fields remembered in request. +- An instance's children may be migrated even when it is not. +* BUG FIXES +- Mail check thread delays till Zope is ready in 2.7 as well. (835642) +- GroupSettings page template works with new-style groups. (887785) +- Problems sending mail caught and reported to the user or logged. (892947) +- Message ID added to outgoing messages. (895039) +- Newlines in the Cc field no longer break the JavaScript. (904033) +- Private notes and replies no longer lose headers in migration. (904076) +- Private notes may no longer have a To field. (912534) +- Ticket ownership transferred when user deleted. (925344) +- Customers are persistent. (930654) +- Sending files with a bad mime type does not cause an exception. (934133) +- HTML templates no longer have extra breaks added. (934235) +- MailManager.getMail() returns an empty string on success. (934902) +- Add customer form checks fields are filled. (938631) +- Fixed links to AccountSettings page. (938678) + +Version 1.0-b4 +* BUG FIX +- Fixed error when a new thread is started and notification is on. + +Version 1.0-b3 +* NEW FEATURES +- Supporter mechanism for associating tickets fully implemented. +- URLs in messages rendered as hyperlinks. +- Filters can assign to groups as well as users. +* IMPROVEMENTS +- Assigned agent mailed at every new message in ticket, customer only + when he starts a new ticket. This reverses the previous behaviour. +- Tickets can be re-opened by arrival of a new message or through + Ticket Details box. +- Migration version distinguished from product version. +- Group now a class; ensures that group members are assigned to evenly. +- By default users only see tickets assigned to them. +- Export (view raw messages) link added to Ticket index page. +* BUG FIXES +- Account signatures are now used. +- HTML setting on auto replies and templates respected. +- Agents can be deleted. +- Several others (see SourceForge bugs 859030 to 873233). + +Version 1.0-b2 +* NEW FEATURES +- Migration +- HTML messages may now be viewed. +- Most recent search results always available. +- Response target added as option in filters and create ticket screen. +* IMPROVEMENTS +- More robust ticket navigation (works with virtual hosting, "prev"/"next" + links always available, "list" goes to batch containing current ticket). +- Improved handling and presentation of attachments. +- Help screens updated (not quite finished). +- Improved interface to reports (still needs work though). +- All character sets displayed correctly (as far as the browser's fonts allow). +- Mail fetching scripts have an option to specify MailManager's URL . +- Search by from name no longer requires exact match. +- Much Python code removed from page templates. +* BUG FIXES +- Overdue ticket view and searches for overdue tickets now work. +- Automatic mail checking continues after product is refreshed. +- Numerous others (see SourceForge bugs 832932 to 858688). + +Version 1.0-b1 +- Dependence on MailHost product removed. +- Message class now wraps Message object from Python email package, + allowing mails to be retreived in their original form. +- Automatic mail fetching introduced. +- Code for creating e-mails through the web brought together in a new + module and handling added for text entered in any character set. +- Each account is now a separate folder, ready for per account + security settings. +- Fetching and handling of incoming mail moved to new Account class. +- Self service interface to allow customers to manage their own tickets. +- Better handling of HTML emails. +- Create ticket now has more sensible defaults. +- Users now deleted properly. +- Calculates an approximation of disk space used. +- Added Property Managers to ease debugging. +- Users with 'Settings' access can no longer view ZMI. +- Numerous bug fixes. + +Version 0.96 +- By default, shows newest tickets first rather than oldest +- The subject of a ticket can now be changed +- If more email is added to a read ticket it goes back to being unread (bold) +- Advises if an attachment is of a dangerous type (for Windows users) +- Attachments now download with original filename & security improved +- Browser bug in IE prevented selection of user on tickets screen (797221) +- Two extra user definable categories added +- Code tidied up & minor bug fixes + +Version 0.95 +- Added a 'Spam' status and amended reports, tickets & filters accordingly +- Can now delete spam tickets without closing them (783289) +- Now handles AppleDouble attachments correctly (787671) +- POP3 mailbox lock removed if there is an error (787677) +- IMAP mailbox lock removed if there is an error +- Mails that can't be processed are now stored raw rather than deleted +- Added 'priority' and 'assigned' to Search screen (785360) +- Basic export of reports to Excel implemented +- Now record and report on times to close as well as times to respond +- Other minor fixes + +Version 0.94 +- Ticket status is displayed correctly in all circumstances +- Adding attachments when creating a ticket thru the web now works as expected. +- Users can be notified of new tickets in all circumstances (783955) +- Allow selection of fields to display on tickets screen (783863) +- Added submenu to the Create ticket screen +- Other minor fixes + +Version 0.93 +- Improved attachment handling and display +- Improved ticket navigation (now back/list/next on ticket view) (780783) +- Fixed a bug in the reporting graphs where the last day in the month could + be missed +- Added an auto refresh option for tickets screen (feature request 781294) +- By default tickets created through the web are assigned to the logged in user, + rather than the first user alphabetically +- Improved outgoing mail +- More advanced standard filter +- Tightened up security +- Help button now context sensitive + +Version 0.92 +- Adding a user with the Reports permission now works as expected (779986) +- Account deletion now works properly (779989) +- Admin password now hidden on the Add MailManager page (779987) + +Thanks to Ronan Amicel for spotting these four bugs. + +- Ticket deletion system improved. +- Supporting tickets system now works better. + +Version 0.91 +- Fixed the Account Help screen. Now displays properly and text is accurate. +- Fixed the 'Change details' section on a ticket screen so the user the ticket + is assigned to is displayed by default. Also ensured user names are displayed + in alphabetical order. +- Categories can now be deleted. Deleted categories will still appear in + Reports, System Settings and on the Search page until every ticket with that + category has been deleted from the system. + +Thanks to Kevin Gill for spotting these bugs. + +Version 0.9 +The first open source release of MailManager. Based on the commercial version +however with some major changes: + +- Uses the Zope Object DB instead of an external relational database. This + changes the performance, it is faster in some areas and slower in others. It + makes the product much easier to install. +- Use of HTML to generate the graphs. Not as attractive as the commercial + version but saves the difficulty of installing extensions which were not + stable on all platforms. +- Improved text editor. Epoz is used to provide rich text editing allowing + easy creation of HTML mail. +- Improved text indexing. Greatly expanded query options. +- Bug fixes. A number of minor bugs were fixed. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-04-07 15:44:04
|
Revision: 2904 Author: kevca Date: 2006-04-07 08:43:48 -0700 (Fri, 07 Apr 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=2904&view=rev Log Message: ----------- Retagging, bug found in release cycle Added Paths: ----------- MailManager/tags/RELENG_2_0_8/ MailManager/tags/RELENG_2_0_8/CHANGES.txt MailManager/tags/RELENG_2_0_8/MailManager.py Removed Paths: ------------- MailManager/tags/RELENG_2_0_8/CHANGES.txt MailManager/tags/RELENG_2_0_8/MailManager.py Copied: MailManager/tags/RELENG_2_0_8 (from rev 2898, MailManager/branches/RELENG_2_0) Deleted: MailManager/tags/RELENG_2_0_8/CHANGES.txt =================================================================== --- MailManager/branches/RELENG_2_0/CHANGES.txt 2006-04-07 11:50:36 UTC (rev 2898) +++ MailManager/tags/RELENG_2_0_8/CHANGES.txt 2006-04-07 15:43:48 UTC (rev 2904) @@ -1,485 +0,0 @@ -Version 2.0.8(Unreleased) -* BUG FIXES -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.7 -* BUG FIXES -- Fixed the setting of next ticket id for MySQL, no longer silently ignores - the option on mailmanager creation and fixes migration (#1412787) -- Send and Close, Send Reply, Send and Hold and Add Note have all been - considerably refactored. This resolves the problem reported where outbound - messages had been silently discarded (#1415497) -- getMail could potentially drop incoming messages whilst collecting from - POP3 accounts. This has now been corrected, and a test case now exists - which reproduces the existing problem and demonstrates it being fixed. - (#1422985) -- i18n fix - on the ticket modify screen "closed" is no longer displayed as - "open" when languages other than English are used (#1423422) -* IMPROVEMENTS -- Massive improvements to the test suite. - -Version 2.0.6 -* IMPROVEMENTS -- We're now using html2text (included) instead of stripogram for converting - HTML to its plain text equivalent (when sending out HTML mail, we also - include a plain text alternative for those who can't read HTML messages). - This results in far prettier plain text conversion. -* BUG FIXES -- Notify user/group flags can now be set/cleared correctly on account - preferences (#1404595). -- Improved address validation. Well, it's now a bit more lax, but it's - completely conformant to RFCs 2821 and 2822 (#1396051). -- MySQL: Default categories are now set up at installation (#1392386). -- HTML parts of multipart/alternative messages are now encoded as UTF-8 - rather than, bizarrely, being forced into ISO-8859-1 (#1368283). -- Make sure the user is informed about *why* test data cannot be removed - (#1345788). - -Version 2.0.5 -* NEW FEATURES -- Tickets can now be created by sending an email (RFE 859117) -- Italian translation. -* BUG FIXES -- MySQL: Adding a user fixed (#1382479) -- MySQL: Users are now migrated correctly (#1378323) -- MySQL: Attachments can now be of virtually any size (#1378224) -- MySQL: MailManager will now start when psycopg is not present (#1378209) -- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) -- PostgreSQL: Migration works even if response target update fails (#1374603) -- Search now works for users in all timezones (#1375345) -- Reports and delete tickets works in all timezones (#1381828) -- The test data now sets 'routing' on the accounts (#1375764) -- Fixed parsing of mails containing NULL characters (#1370866) -- MMImport.py script now uses new URL (#1378385) -- To: field left empty when sending email (#1377027) -- Create Ticket fails when logged in as customer (#1369356) - -Version 2.0.4 -* BUG FIXES -- Prevent multiple users replying to the same ticket by accident (#1371269) -- Filters got broken in 2.0.3, change reverted (#1372814) -- Attachments now set the Content-Type header correctly on download (#13369349) -- Template names with trailing whitespace now work (#1363768) -- Set sql_charset on the mailmanager object during migration. (#1369347) - -Version 2.0.3 -* BUG FIXES -- Be more careful about adding and removing the test data (#1353112, #1345788). -- Improve the Unicode support with the MySQL back end (#1338614). -- Support of can now be removed with MySQL back end (#1338603). -- Fixes to the response target settings (#1336398, #1337506). -- setSession correctly clears the offset and always redirects to - Tickets (#1350429). -- Offer MySQL back end as a migration option (#1340301). -- Tickets now correctly marked as unread with MySQL back end (#1344827). - -Version 2.0.2 -* BUG FIXES -- Ignore the showHTML information in the session for plain text - emails. Reapplied previous bugfix (#1242337) -- Resetting response target to None now updates database (#1336398) -- Reports for targets fixed (#1337506) -* IMPROVEMENTS -- Now has setupdb script for MySQL users -- Split off setupdb code, now available as separate module -- Added in documentation for MySQL configuration - -Version 2.0.1-release -* BUG FIXES -- Disk usage screen now fixed for empty instances (#1244446) -- Initial Manager use now has correct roles set (#1324878) -- Altering roles now works correctly (#1324876) -- Update of response target now works correctly (#1324935) -- Removing notification flag for users/group now works correctly (#1315000) -- Migration now works correctly for 1.1 instances (#1291113) -- Setting response targets no longer generates an error (#1324884) - -Version 2.0.1-rc2 -* BUG FIXES -- No longer depends on psycopg due to import statements -- Migration fixes for MySQL users -- Fixed some scoping issues causing ZSQL methods to break due to - acquisition. -* IMPROVEMENTS -- SQL Directory no longer uses FileSystemSite.DirectoryView meaning - that the SQL methods can be overridden by 3rd parties. -- Test suite now has added hooks for overloading object types - -Version 2.0.1-rc1 -* BUG FIXES -- Test suite now covers text search cache consistency, cleared issues - with MySQL's mysql_max_allowed_packet variable -- Postgres support now appears stable - -Version 2.0.1-beta1 -* BUG FIXES -- Merged in all of the changes between 2.0r6 and 2.0r7 -- Fixed the index bug which was resulting in duplicate tickets being - displayed on the list page - -Version 2.0.1-alpha1 -* NEW FEATURES -- Adds in initial MySQL support -- SQL methods given addition parameters to deal with new MySQL support -- Vastly improved test suite - regression test suite for the database code. - -Version 2.0r7 -* BUG FIXES -- Subsequent pages for search were not being returned due to misuse of the - SESSION variable. These are now handled correctly (#1276412) -- Categories and templates were moved entirely to SQL. Upgrade needs a - migration to function correctly. (#1276414) -- listTicket method now correctly searches for subjects -- Fixes a Unicode handling error in the MailMixing class, which could - potentially block up incoming mail -* IMPROVEMENTS -- Postgres installation documentation rewritten -- Changes to loading of test datasets -- Test data set improved, now covers more functionality - -Version 2.0r6 -* BUG FIXES -- Fixed the positioning of the order by section of the listTickets query, - fixes broken ordering for search. -- The listCategories SQL method was broken, which was used by the Reports - pages. Reports for categories other than category0 were broken. - -Version 2.0 -* BUG FIXES -- Fix the security declaration of checkPOP3SSL(). - -Version 2.0 RC 3 -* NEW FEATURES -- Introduce some generalisations, ready for MySQL support in 2.0.1 -- Beginnings of epydoc API documentation. -* BUG FIXES -- Update the version number on migration. (#1229769) -- Robustify the autoreply code to deal with fatal errors. (#1240870) -- When a new message comes in with a ticket id in the subject line, - verify that the ticket already exists instead of assuming that it - does. (#1240711) -- Format the email address in the To: field for replies. (#1230837) -- Ignore the showHTML information in the session for plain text - emails. (#1242337) -- Record the logged in user who sent a reply to a ticket. (#1242958) - -Version 2.0 RC 2 -* BUG FIXES -- multipart/alternative mail with both an HTML and a plain text body now - only display one of them at a time (1227265) -- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) -- Migration updates the mm version -- Create ticket works again (1227744) - -Version 2.0 RC 1 -* BUG FIXES -- Stripogram can now be installed as a Python product in site-packages (1226633) -- Reply-To: header is used in favour of From: (1226156) -- Notifiction emails can handle non-ASCII subject lines (1224784) -- URLs are now accurate on notification emails (1224756) -- Character encodings set correctly on all web pages (1224731) -- Send & Close now goes to the next ticket (1224164) -- Improved date parsing (1223755) -- Respond By: now displayed for tickets with a response target (1222528) -- Attachment titles are now decoded correctly (1223974) - -Version 2.0 Beta 2 -* BUG FIXES -- Make the email validation less strict. (1283401) -- Customers can no longer have email addresses which are used - by an account. (1216414) -- Migration: Drop filters which refer to unknown users/groups. (1216361) -- Migration: Be more careful about coercing dates into ISO8601. (1216534) -- Clarified notification email setup. (1217403) -- Fixed Chinese translation. (1215645) -- Store time zone information in the pgsl database. - -Version 2.0 Beta 1 -* NEW FEATURES -- Added a Chinese translation. -- Add some documentation for creating the Postgres database and point to - detailed docs on the Windows installation process. -- Updated the help files to reflect the new version's feature set. -* BUG FIXES -- Make mbox exports have a more meaningful filename. -- Deal with RFC2047-encoded headers correctly. (1212035) -- Make the disk usage a bit more friendly. (1213604) -- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) -- Epoz now has a white background on all browsers. (1208912) - -Version 2.0 alpha 2 -* NEW FEATURES -- Support for retrieving POP3 mail over SSL (RFE 1204236) -- Optionally notify all in a group of new messages (RFE 1208284) -* BUG FIXES -- Help tab no longer visible after logout (1207656) -- Adding a MailManager instance now creates an initial user (1207022) -- Changes to users such as adding a signature no longer clear password (1207017) -- HTML tickets work properly (1205720, 1205717) -- Time to close tickets recorded (1204825) -- Reply to all button improved (1204805) -- Reassignment notification added (1204372) -- Groups redesigned (1204312) -- Adding/removing attachments no longer clears other form fields (1204272) -- Date translations fixed (1204268) -- Templates fixed (1204267) -- Overdue tickets function properly (1203141) -- Performance v. account report fixed (1196685) -- GetMail fixed (1196606) -- Referential integrity broken on mm_message table (1194418) -- Login link on logout page fixed (1204811) -- Signature handling improved (1204877) -- HTML email fixed (1204987) - -Version 2.0 alpha 1 -* NEW FEATURES -- A complete redesign using PostgreSQL as a replacement for the ZODB in order - to improve performance and scalability. -- Can now use SMTP servers that require a login (RFE 939720) - -Version 1.1 -* NEW FEATURES -- Internationalization of the help documentation. -* BUG FIXES -- Make sure that sending mail out is the last thing done, which should reduce - the window where a ConflictError would cause duplicate emails to be sent. -- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other - than a MessageParseError. Otherwise we wind up hard-bouncing (instead of - retrying) on a ConflictError. - -Version 1.1-rc5 -* BUG FIXES -- Comptatible with Zope 2.6/Python 2.1 again - -Version 1.1-rc4 -* BUG FIXES -- Standard attachments fixed (1110435) -- Clear supporter link fixed after i18n problem (1110436) - -Version 1.1-rc3 -* NEW FEATURES -[Unfortunately it was essential to add the following features at - this late stage for commercial reasons.] -- Added archive/restore tickets (RFE 953290) -- Create ticket can now have multiple attachments (RFE 987700) -- Replies can also have multiple attachments (RFE 859141) -- Standard set of attachments can be stored on the system (RFE 985469) -* BUG FIXES -- Edit of mail headers now works properly (RFE 859102) -- Fixed broken migration - -Version 1.1-rc2 -* BUG FIXES -- Now possible to add/edit account without SSL (1090041) -- Spam tickets no longer appear on the 'New' tickets list - -Version 1.1-rc1 -* NEW FEATURES -- Users notified on re-assignment of tickets (RFE 978035) -- Internationalisation (i18n) added ready for translation to other languages. -- Support for SSL connections to remote IMAP server. -- Any mail headers may be used in filters (RFE 859102) -* BUG FIXES -- Report graphs now work for user-defined categories (978404) -- File downloads now work when there is a space in the filename (985150) -- Remove support ticket feature fixed (985677) -- Users no longer notified if spam is received (1059104) -- Spam no longer displayed on default ticket listing views -- Templates with names ending in a space may now be deleted/edited (1003514) - -Version 1.0 -No changes from 1.0-rc2 - -Version 1.0-rc2 -* NEW FEATURES -- Batch classification of tickets. (RFE 859114 and 957719) -* BUG FIXES -- Migration works when filters are of mixed formats. (945956) -- Migration works when groups are of mixed formats. (945959) -- Messages from mailer-daemon with a real name do not cause a loop. (952864) -- Works on Firefox for Mac when reply has no attachment. (963291) -- Report graphs work for more than 200 tickets in a period. (964144) - -Version 1.0-rc1 -* NEW FEATURES -- Choice of date format. (RFE 869827) -- Choice of timezone (currently only on Unix). (RFE 869827) -- Script to import mail from Unix mailboxes. (RFE 903031) -- Shortcut icon. -- Importing of tickets enabled. -* IMPROVEMENTS -- Added global error slot and adjusted settings screens to use it. (873232) -- Message response form fields remembered in request. -- An instance's children may be migrated even when it is not. -* BUG FIXES -- Mail check thread delays till Zope is ready in 2.7 as well. (835642) -- GroupSettings page template works with new-style groups. (887785) -- Problems sending mail caught and reported to the user or logged. (892947) -- Message ID added to outgoing messages. (895039) -- Newlines in the Cc field no longer break the JavaScript. (904033) -- Private notes and replies no longer lose headers in migration. (904076) -- Private notes may no longer have a To field. (912534) -- Ticket ownership transferred when user deleted. (925344) -- Customers are persistent. (930654) -- Sending files with a bad mime type does not cause an exception. (934133) -- HTML templates no longer have extra breaks added. (934235) -- MailManager.getMail() returns an empty string on success. (934902) -- Add customer form checks fields are filled. (938631) -- Fixed links to AccountSettings page. (938678) - -Version 1.0-b4 -* BUG FIX -- Fixed error when a new thread is started and notification is on. - -Version 1.0-b3 -* NEW FEATURES -- Supporter mechanism for associating tickets fully implemented. -- URLs in messages rendered as hyperlinks. -- Filters can assign to groups as well as users. -* IMPROVEMENTS -- Assigned agent mailed at every new message in ticket, customer only - when he starts a new ticket. This reverses the previous behaviour. -- Tickets can be re-opened by arrival of a new message or through - Ticket Details box. -- Migration version distinguished from product version. -- Group now a class; ensures that group members are assigned to evenly. -- By default users only see tickets assigned to them. -- Export (view raw messages) link added to Ticket index page. -* BUG FIXES -- Account signatures are now used. -- HTML setting on auto replies and templates respected. -- Agents can be deleted. -- Several others (see SourceForge bugs 859030 to 873233). - -Version 1.0-b2 -* NEW FEATURES -- Migration -- HTML messages may now be viewed. -- Most recent search results always available. -- Response target added as option in filters and create ticket screen. -* IMPROVEMENTS -- More robust ticket navigation (works with virtual hosting, "prev"/"next" - links always available, "list" goes to batch containing current ticket). -- Improved handling and presentation of attachments. -- Help screens updated (not quite finished). -- Improved interface to reports (still needs work though). -- All character sets displayed correctly (as far as the browser's fonts allow). -- Mail fetching scripts have an option to specify MailManager's URL . -- Search by from name no longer requires exact match. -- Much Python code removed from page templates. -* BUG FIXES -- Overdue ticket view and searches for overdue tickets now work. -- Automatic mail checking continues after product is refreshed. -- Numerous others (see SourceForge bugs 832932 to 858688). - -Version 1.0-b1 -- Dependence on MailHost product removed. -- Message class now wraps Message object from Python email package, - allowing mails to be retreived in their original form. -- Automatic mail fetching introduced. -- Code for creating e-mails through the web brought together in a new - module and handling added for text entered in any character set. -- Each account is now a separate folder, ready for per account - security settings. -- Fetching and handling of incoming mail moved to new Account class. -- Self service interface to allow customers to manage their own tickets. -- Better handling of HTML emails. -- Create ticket now has more sensible defaults. -- Users now deleted properly. -- Calculates an approximation of disk space used. -- Added Property Managers to ease debugging. -- Users with 'Settings' access can no longer view ZMI. -- Numerous bug fixes. - -Version 0.96 -- By default, shows newest tickets first rather than oldest -- The subject of a ticket can now be changed -- If more email is added to a read ticket it goes back to being unread (bold) -- Advises if an attachment is of a dangerous type (for Windows users) -- Attachments now download with original filename & security improved -- Browser bug in IE prevented selection of user on tickets screen (797221) -- Two extra user definable categories added -- Code tidied up & minor bug fixes - -Version 0.95 -- Added a 'Spam' status and amended reports, tickets & filters accordingly -- Can now delete spam tickets without closing them (783289) -- Now handles AppleDouble attachments correctly (787671) -- POP3 mailbox lock removed if there is an error (787677) -- IMAP mailbox lock removed if there is an error -- Mails that can't be processed are now stored raw rather than deleted -- Added 'priority' and 'assigned' to Search screen (785360) -- Basic export of reports to Excel implemented -- Now record and report on times to close as well as times to respond -- Other minor fixes - -Version 0.94 -- Ticket status is displayed correctly in all circumstances -- Adding attachments when creating a ticket thru the web now works as expected. -- Users can be notified of new tickets in all circumstances (783955) -- Allow selection of fields to display on tickets screen (783863) -- Added submenu to the Create ticket screen -- Other minor fixes - -Version 0.93 -- Improved attachment handling and display -- Improved ticket navigation (now back/list/next on ticket view) (780783) -- Fixed a bug in the reporting graphs where the last day in the month could - be missed -- Added an auto refresh option for tickets screen (feature request 781294) -- By default tickets created through the web are assigned to the logged in user, - rather than the first user alphabetically -- Improved outgoing mail -- More advanced standard filter -- Tightened up security -- Help button now context sensitive - -Version 0.92 -- Adding a user with the Reports permission now works as expected (779986) -- Account deletion now works properly (779989) -- Admin password now hidden on the Add MailManager page (779987) - -Thanks to Ronan Amicel for spotting these four bugs. - -- Ticket deletion system improved. -- Supporting tickets system now works better. - -Version 0.91 -- Fixed the Account Help screen. Now displays properly and text is accurate. -- Fixed the 'Change details' section on a ticket screen so the user the ticket - is assigned to is displayed by default. Also ensured user names are displayed - in alphabetical order. -- Categories can now be deleted. Deleted categories will still appear in - Reports, System Settings and on the Search page until every ticket with that - category has been deleted from the system. - -Thanks to Kevin Gill for spotting these bugs. - -Version 0.9 -The first open source release of MailManager. Based on the commercial version -however with some major changes: - -- Uses the Zope Object DB instead of an external relational database. This - changes the performance, it is faster in some areas and slower in others. It - makes the product much easier to install. -- Use of HTML to generate the graphs. Not as attractive as the commercial - version but saves the difficulty of installing extensions which were not - stable on all platforms. -- Improved text editor. Epoz is used to provide rich text editing allowing - easy creation of HTML mail. -- Improved text indexing. Greatly expanded query options. -- Bug fixes. A number of minor bugs were fixed. Copied: MailManager/tags/RELENG_2_0_8/CHANGES.txt (from rev 2899, MailManager/branches/RELENG_2_0/CHANGES.txt) =================================================================== --- MailManager/tags/RELENG_2_0_8/CHANGES.txt (rev 0) +++ MailManager/tags/RELENG_2_0_8/CHANGES.txt 2006-04-07 15:43:48 UTC (rev 2904) @@ -0,0 +1,487 @@ +Version 2.0.8 +* BUG FIXES +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.7 +* BUG FIXES +- Fixed the setting of next ticket id for MySQL, no longer silently ignores + the option on mailmanager creation and fixes migration (#1412787) +- Send and Close, Send Reply, Send and Hold and Add Note have all been + considerably refactored. This resolves the problem reported where outbound + messages had been silently discarded (#1415497) +- getMail could potentially drop incoming messages whilst collecting from + POP3 accounts. This has now been corrected, and a test case now exists + which reproduces the existing problem and demonstrates it being fixed. + (#1422985) +- i18n fix - on the ticket modify screen "closed" is no longer displayed as + "open" when languages other than English are used (#1423422) +* IMPROVEMENTS +- Massive improvements to the test suite. + +Version 2.0.6 +* IMPROVEMENTS +- We're now using html2text (included) instead of stripogram for converting + HTML to its plain text equivalent (when sending out HTML mail, we also + include a plain text alternative for those who can't read HTML messages). + This results in far prettier plain text conversion. +* BUG FIXES +- Notify user/group flags can now be set/cleared correctly on account + preferences (#1404595). +- Improved address validation. Well, it's now a bit more lax, but it's + completely conformant to RFCs 2821 and 2822 (#1396051). +- MySQL: Default categories are now set up at installation (#1392386). +- HTML parts of multipart/alternative messages are now encoded as UTF-8 + rather than, bizarrely, being forced into ISO-8859-1 (#1368283). +- Make sure the user is informed about *why* test data cannot be removed + (#1345788). + +Version 2.0.5 +* NEW FEATURES +- Tickets can now be created by sending an email (RFE 859117) +- Italian translation. +* BUG FIXES +- MySQL: Adding a user fixed (#1382479) +- MySQL: Users are now migrated correctly (#1378323) +- MySQL: Attachments can now be of virtually any size (#1378224) +- MySQL: MailManager will now start when psycopg is not present (#1378209) +- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) +- PostgreSQL: Migration works even if response target update fails (#1374603) +- Search now works for users in all timezones (#1375345) +- Reports and delete tickets works in all timezones (#1381828) +- The test data now sets 'routing' on the accounts (#1375764) +- Fixed parsing of mails containing NULL characters (#1370866) +- MMImport.py script now uses new URL (#1378385) +- To: field left empty when sending email (#1377027) +- Create Ticket fails when logged in as customer (#1369356) + +Version 2.0.4 +* BUG FIXES +- Prevent multiple users replying to the same ticket by accident (#1371269) +- Filters got broken in 2.0.3, change reverted (#1372814) +- Attachments now set the Content-Type header correctly on download (#13369349) +- Template names with trailing whitespace now work (#1363768) +- Set sql_charset on the mailmanager object during migration. (#1369347) + +Version 2.0.3 +* BUG FIXES +- Be more careful about adding and removing the test data (#1353112, #1345788). +- Improve the Unicode support with the MySQL back end (#1338614). +- Support of can now be removed with MySQL back end (#1338603). +- Fixes to the response target settings (#1336398, #1337506). +- setSession correctly clears the offset and always redirects to + Tickets (#1350429). +- Offer MySQL back end as a migration option (#1340301). +- Tickets now correctly marked as unread with MySQL back end (#1344827). + +Version 2.0.2 +* BUG FIXES +- Ignore the showHTML information in the session for plain text + emails. Reapplied previous bugfix (#1242337) +- Resetting response target to None now updates database (#1336398) +- Reports for targets fixed (#1337506) +* IMPROVEMENTS +- Now has setupdb script for MySQL users +- Split off setupdb code, now available as separate module +- Added in documentation for MySQL configuration + +Version 2.0.1-release +* BUG FIXES +- Disk usage screen now fixed for empty instances (#1244446) +- Initial Manager use now has correct roles set (#1324878) +- Altering roles now works correctly (#1324876) +- Update of response target now works correctly (#1324935) +- Removing notification flag for users/group now works correctly (#1315000) +- Migration now works correctly for 1.1 instances (#1291113) +- Setting response targets no longer generates an error (#1324884) + +Version 2.0.1-rc2 +* BUG FIXES +- No longer depends on psycopg due to import statements +- Migration fixes for MySQL users +- Fixed some scoping issues causing ZSQL methods to break due to + acquisition. +* IMPROVEMENTS +- SQL Directory no longer uses FileSystemSite.DirectoryView meaning + that the SQL methods can be overridden by 3rd parties. +- Test suite now has added hooks for overloading object types + +Version 2.0.1-rc1 +* BUG FIXES +- Test suite now covers text search cache consistency, cleared issues + with MySQL's mysql_max_allowed_packet variable +- Postgres support now appears stable + +Version 2.0.1-beta1 +* BUG FIXES +- Merged in all of the changes between 2.0r6 and 2.0r7 +- Fixed the index bug which was resulting in duplicate tickets being + displayed on the list page + +Version 2.0.1-alpha1 +* NEW FEATURES +- Adds in initial MySQL support +- SQL methods given addition parameters to deal with new MySQL support +- Vastly improved test suite - regression test suite for the database code. + +Version 2.0r7 +* BUG FIXES +- Subsequent pages for search were not being returned due to misuse of the + SESSION variable. These are now handled correctly (#1276412) +- Categories and templates were moved entirely to SQL. Upgrade needs a + migration to function correctly. (#1276414) +- listTicket method now correctly searches for subjects +- Fixes a Unicode handling error in the MailMixing class, which could + potentially block up incoming mail +* IMPROVEMENTS +- Postgres installation documentation rewritten +- Changes to loading of test datasets +- Test data set improved, now covers more functionality + +Version 2.0r6 +* BUG FIXES +- Fixed the positioning of the order by section of the listTickets query, + fixes broken ordering for search. +- The listCategories SQL method was broken, which was used by the Reports + pages. Reports for categories other than category0 were broken. + +Version 2.0 +* BUG FIXES +- Fix the security declaration of checkPOP3SSL(). + +Version 2.0 RC 3 +* NEW FEATURES +- Introduce some generalisations, ready for MySQL support in 2.0.1 +- Beginnings of epydoc API documentation. +* BUG FIXES +- Update the version number on migration. (#1229769) +- Robustify the autoreply code to deal with fatal errors. (#1240870) +- When a new message comes in with a ticket id in the subject line, + verify that the ticket already exists instead of assuming that it + does. (#1240711) +- Format the email address in the To: field for replies. (#1230837) +- Ignore the showHTML information in the session for plain text + emails. (#1242337) +- Record the logged in user who sent a reply to a ticket. (#1242958) + +Version 2.0 RC 2 +* BUG FIXES +- multipart/alternative mail with both an HTML and a plain text body now + only display one of them at a time (1227265) +- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) +- Migration updates the mm version +- Create ticket works again (1227744) + +Version 2.0 RC 1 +* BUG FIXES +- Stripogram can now be installed as a Python product in site-packages (1226633) +- Reply-To: header is used in favour of From: (1226156) +- Notifiction emails can handle non-ASCII subject lines (1224784) +- URLs are now accurate on notification emails (1224756) +- Character encodings set correctly on all web pages (1224731) +- Send & Close now goes to the next ticket (1224164) +- Improved date parsing (1223755) +- Respond By: now displayed for tickets with a response target (1222528) +- Attachment titles are now decoded correctly (1223974) + +Version 2.0 Beta 2 +* BUG FIXES +- Make the email validation less strict. (1283401) +- Customers can no longer have email addresses which are used + by an account. (1216414) +- Migration: Drop filters which refer to unknown users/groups. (1216361) +- Migration: Be more careful about coercing dates into ISO8601. (1216534) +- Clarified notification email setup. (1217403) +- Fixed Chinese translation. (1215645) +- Store time zone information in the pgsl database. + +Version 2.0 Beta 1 +* NEW FEATURES +- Added a Chinese translation. +- Add some documentation for creating the Postgres database and point to + detailed docs on the Windows installation process. +- Updated the help files to reflect the new version's feature set. +* BUG FIXES +- Make mbox exports have a more meaningful filename. +- Deal with RFC2047-encoded headers correctly. (1212035) +- Make the disk usage a bit more friendly. (1213604) +- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) +- Epoz now has a white background on all browsers. (1208912) + +Version 2.0 alpha 2 +* NEW FEATURES +- Support for retrieving POP3 mail over SSL (RFE 1204236) +- Optionally notify all in a group of new messages (RFE 1208284) +* BUG FIXES +- Help tab no longer visible after logout (1207656) +- Adding a MailManager instance now creates an initial user (1207022) +- Changes to users such as adding a signature no longer clear password (1207017) +- HTML tickets work properly (1205720, 1205717) +- Time to close tickets recorded (1204825) +- Reply to all button improved (1204805) +- Reassignment notification added (1204372) +- Groups redesigned (1204312) +- Adding/removing attachments no longer clears other form fields (1204272) +- Date translations fixed (1204268) +- Templates fixed (1204267) +- Overdue tickets function properly (1203141) +- Performance v. account report fixed (1196685) +- GetMail fixed (1196606) +- Referential integrity broken on mm_message table (1194418) +- Login link on logout page fixed (1204811) +- Signature handling improved (1204877) +- HTML email fixed (1204987) + +Version 2.0 alpha 1 +* NEW FEATURES +- A complete redesign using PostgreSQL as a replacement for the ZODB in order + to improve performance and scalability. +- Can now use SMTP servers that require a login (RFE 939720) + +Version 1.1 +* NEW FEATURES +- Internationalization of the help documentation. +* BUG FIXES +- Make sure that sending mail out is the last thing done, which should reduce + the window where a ConflictError would cause duplicate emails to be sent. +- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other + than a MessageParseError. Otherwise we wind up hard-bouncing (instead of + retrying) on a ConflictError. + +Version 1.1-rc5 +* BUG FIXES +- Comptatible with Zope 2.6/Python 2.1 again + +Version 1.1-rc4 +* BUG FIXES +- Standard attachments fixed (1110435) +- Clear supporter link fixed after i18n problem (1110436) + +Version 1.1-rc3 +* NEW FEATURES +[Unfortunately it was essential to add the following features at + this late stage for commercial reasons.] +- Added archive/restore tickets (RFE 953290) +- Create ticket can now have multiple attachments (RFE 987700) +- Replies can also have multiple attachments (RFE 859141) +- Standard set of attachments can be stored on the system (RFE 985469) +* BUG FIXES +- Edit of mail headers now works properly (RFE 859102) +- Fixed broken migration + +Version 1.1-rc2 +* BUG FIXES +- Now possible to add/edit account without SSL (1090041) +- Spam tickets no longer appear on the 'New' tickets list + +Version 1.1-rc1 +* NEW FEATURES +- Users notified on re-assignment of tickets (RFE 978035) +- Internationalisation (i18n) added ready for translation to other languages. +- Support for SSL connections to remote IMAP server. +- Any mail headers may be used in filters (RFE 859102) +* BUG FIXES +- Report graphs now work for user-defined categories (978404) +- File downloads now work when there is a space in the filename (985150) +- Remove support ticket feature fixed (985677) +- Users no longer notified if spam is received (1059104) +- Spam no longer displayed on default ticket listing views +- Templates with names ending in a space may now be deleted/edited (1003514) + +Version 1.0 +No changes from 1.0-rc2 + +Version 1.0-rc2 +* NEW FEATURES +- Batch classification of tickets. (RFE 859114 and 957719) +* BUG FIXES +- Migration works when filters are of mixed formats. (945956) +- Migration works when groups are of mixed formats. (945959) +- Messages from mailer-daemon with a real name do not cause a loop. (952864) +- Works on Firefox for Mac when reply has no attachment. (963291) +- Report graphs work for more than 200 tickets in a period. (964144) + +Version 1.0-rc1 +* NEW FEATURES +- Choice of date format. (RFE 869827) +- Choice of timezone (currently only on Unix). (RFE 869827) +- Script to import mail from Unix mailboxes. (RFE 903031) +- Shortcut icon. +- Importing of tickets enabled. +* IMPROVEMENTS +- Added global error slot and adjusted settings screens to use it. (873232) +- Message response form fields remembered in request. +- An instance's children may be migrated even when it is not. +* BUG FIXES +- Mail check thread delays till Zope is ready in 2.7 as well. (835642) +- GroupSettings page template works with new-style groups. (887785) +- Problems sending mail caught and reported to the user or logged. (892947) +- Message ID added to outgoing messages. (895039) +- Newlines in the Cc field no longer break the JavaScript. (904033) +- Private notes and replies no longer lose headers in migration. (904076) +- Private notes may no longer have a To field. (912534) +- Ticket ownership transferred when user deleted. (925344) +- Customers are persistent. (930654) +- Sending files with a bad mime type does not cause an exception. (934133) +- HTML templates no longer have extra breaks added. (934235) +- MailManager.getMail() returns an empty string on success. (934902) +- Add customer form checks fields are filled. (938631) +- Fixed links to AccountSettings page. (938678) + +Version 1.0-b4 +* BUG FIX +- Fixed error when a new thread is started and notification is on. + +Version 1.0-b3 +* NEW FEATURES +- Supporter mechanism for associating tickets fully implemented. +- URLs in messages rendered as hyperlinks. +- Filters can assign to groups as well as users. +* IMPROVEMENTS +- Assigned agent mailed at every new message in ticket, customer only + when he starts a new ticket. This reverses the previous behaviour. +- Tickets can be re-opened by arrival of a new message or through + Ticket Details box. +- Migration version distinguished from product version. +- Group now a class; ensures that group members are assigned to evenly. +- By default users only see tickets assigned to them. +- Export (view raw messages) link added to Ticket index page. +* BUG FIXES +- Account signatures are now used. +- HTML setting on auto replies and templates respected. +- Agents can be deleted. +- Several others (see SourceForge bugs 859030 to 873233). + +Version 1.0-b2 +* NEW FEATURES +- Migration +- HTML messages may now be viewed. +- Most recent search results always available. +- Response target added as option in filters and create ticket screen. +* IMPROVEMENTS +- More robust ticket navigation (works with virtual hosting, "prev"/"next" + links always available, "list" goes to batch containing current ticket). +- Improved handling and presentation of attachments. +- Help screens updated (not quite finished). +- Improved interface to reports (still needs work though). +- All character sets displayed correctly (as far as the browser's fonts allow). +- Mail fetching scripts have an option to specify MailManager's URL . +- Search by from name no longer requires exact match. +- Much Python code removed from page templates. +* BUG FIXES +- Overdue ticket view and searches for overdue tickets now work. +- Automatic mail checking continues after product is refreshed. +- Numerous others (see SourceForge bugs 832932 to 858688). + +Version 1.0-b1 +- Dependence on MailHost product removed. +- Message class now wraps Message object from Python email package, + allowing mails to be retreived in their original form. +- Automatic mail fetching introduced. +- Code for creating e-mails through the web brought together in a new + module and handling added for text entered in any character set. +- Each account is now a separate folder, ready for per account + security settings. +- Fetching and handling of incoming mail moved to new Account class. +- Self service interface to allow customers to manage their own tickets. +- Better handling of HTML emails. +- Create ticket now has more sensible defaults. +- Users now deleted properly. +- Calculates an approximation of disk space used. +- Added Property Managers to ease debugging. +- Users with 'Settings' access can no longer view ZMI. +- Numerous bug fixes. + +Version 0.96 +- By default, shows newest tickets first rather than oldest +- The subject of a ticket can now be changed +- If more email is added to a read ticket it goes back to being unread (bold) +- Advises if an attachment is of a dangerous type (for Windows users) +- Attachments now download with original filename & security improved +- Browser bug in IE prevented selection of user on tickets screen (797221) +- Two extra user definable categories added +- Code tidied up & minor bug fixes + +Version 0.95 +- Added a 'Spam' status and amended reports, tickets & filters accordingly +- Can now delete spam tickets without closing them (783289) +- Now handles AppleDouble attachments correctly (787671) +- POP3 mailbox lock removed if there is an error (787677) +- IMAP mailbox lock removed if there is an error +- Mails that can't be processed are now stored raw rather than deleted +- Added 'priority' and 'assigned' to Search screen (785360) +- Basic export of reports to Excel implemented +- Now record and report on times to close as well as times to respond +- Other minor fixes + +Version 0.94 +- Ticket status is displayed correctly in all circumstances +- Adding attachments when creating a ticket thru the web now works as expected. +- Users can be notified of new tickets in all circumstances (783955) +- Allow selection of fields to display on tickets screen (783863) +- Added submenu to the Create ticket screen +- Other minor fixes + +Version 0.93 +- Improved attachment handling and display +- Improved ticket navigation (now back/list/next on ticket view) (780783) +- Fixed a bug in the reporting graphs where the last day in the month could + be missed +- Added an auto refresh option for tickets screen (feature request 781294) +- By default tickets created through the web are assigned to the logged in user, + rather than the first user alphabetically +- Improved outgoing mail +- More advanced standard filter +- Tightened up security +- Help button now context sensitive + +Version 0.92 +- Adding a user with the Reports permission now works as expected (779986) +- Account deletion now works properly (779989) +- Admin password now hidden on the Add MailManager page (779987) + +Thanks to Ronan Amicel for spotting these four bugs. + +- Ticket deletion system improved. +- Supporting tickets system now works better. + +Version 0.91 +- Fixed the Account Help screen. Now displays properly and text is accurate. +- Fixed the 'Change details' section on a ticket screen so the user the ticket + is assigned to is displayed by default. Also ensured user names are displayed + in alphabetical order. +- Categories can now be deleted. Deleted categories will still appear in + Reports, System Settings and on the Search page until every ticket with that + category has been deleted from the system. + +Thanks to Kevin Gill for spotting these bugs. + +Version 0.9 +The first open source release of MailManager. Based on the commercial version +however with some major changes: + +- Uses the Zope Object DB instead of an external relational database. This + changes the performance, it is faster in some areas and slower in others. It + makes the product much easier to install. +- Use of HTML to generate the graphs. Not as attractive as the commercial + version but saves the difficulty of installing extensions which were not + stable on all platforms. +- Improved text editor. Epoz is used to provide rich text editing allowing + easy creation of HTML mail. +- Improved text indexing. Greatly expanded query options. +- Bug fixes. A number of minor bugs were fixed. Deleted: MailManager/tags/RELENG_2_0_8/MailManager.py =================================================================== --- MailManager/branches/RELENG_2_0/MailManager.py 2006-04-07 11:50:36 UTC (rev 2898) +++ MailManager/tags/RELENG_2_0_8/MailManager.py 2006-04-07 15:43:48 UTC (rev 2904) @@ -1,2900 +0,0 @@ -# (c) Copyright Logicalware Ltd 2002-2005 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ - -__version__ = '$Revision$' - -# Zope modules. -from Globals import InitializeClass, DTMLFile, package_home -from Products.PageTemplates.PageTemplateFile import PageTemplateFile -from AccessControl import ClassSecurityInfo, getSecurityManager -from AccessControl.AuthEncoding import pw_encrypt -from Acquisition import aq_inner -from OFS.Folder import Folder -from DateTime import DateTime -from zExceptions import BadRequest, Unauthorized - -# Modules from this package. -from MailMixin import MailMixin -from MMImportHandler import MMImportHandler - -# Add methods. -from Products.CookieCrumbler.CookieCrumbler import manage_addCC -from Products.FileSystemSite.DirectoryView import manage_addDirectoryView -from Products.MailHost.MailHost import manage_addMailHost -from Products.PageTemplates.ZopePageTemplate import manage_addPageTemplate -from Products.ZSQLMethods.SQL import manage_addZSQLMethod -from Products.MailManager.sql import MailManagerSQL -from MMUserFolder import manage_addMMUserFolder - -# Python library modules. -import base64, cgi, datetime, os, re, stat, time -from calendar import monthrange -from email.Utils import formataddr, parseaddr, mktime_tz, parsedate_tz -from datetime import datetime -try: - from poplib import POP3_SSL - pop3_ssl = True -except ImportError: - pop3_ssl = False - -import poplib -import imaplib - -from tempfile import TemporaryFile -from xml.sax.saxutils import XMLGenerator -from xml.sax import make_parser - -# Database support -try: - import MySQLdb -except ImportError, e: - pass - -try: - import psycopg -except ImportError, e: - pass - -import zLOG - -# ZopeScheduler -try: - from Products.ZopeScheduler.ISchedulingTask import ISchedulingTask - ZOPE_SCHEDULER_PRESENT = True -except ImportError: - ZOPE_SCHEDULER_PRESENT = False - -# mx.DateTime for parsing email dates -import mx.DateTime -import mx.DateTime.ISO -from mx.DateTime.Parser import DateTimeFromString - -# Test data to be used under the ZMI and test suite -from tests.classes.mmtestdata import TestDataMixin - -try: - from stripogram import html2safehtml -except ImportError: - from Products.stripogram import html2safehtml - -from Products.MailManager.support.html2text import html2text - -# Constants. -mversion = 15 -url_pat = re.compile(r'(https?|ftp)://\S*[^,;:.!?)\]\'"\s]') - -__extra_epydoc_fields__ = [ - 'teststatus', - 'requiresrequest', - 'modifies' - ] - -manage_addMailManagerForm = PageTemplateFile('www/manage_addMailManagerForm', - globals()) - -def manage_addMailManager(self, id, title, admin_username=None, admin_email=None, - password=None, confirm_password='', first_tid=1, - create_tables=False, schema='', dbplatform='postgres', - REQUEST=None): - """Adds a MailManager to a folder.""" - # Test for missing mandatory fields. These are fields that should - # have string values but not the empty string that may come from - # the form. first_tid cannot be missed from the form because - # of the int converters in it. - s = 'You must fill in the %s field.' - mandatories = ['id', 'admin_username', 'admin_email', 'password'] - if REQUEST is not None: mandatories.append('confirm_password') - try: - for field in mandatories: - if not locals()[field]: - raise BadRequest, s % field.replace('_', ' ').title() - if REQUEST is not None and confirm_password != password: - raise BadRequest, 'Admin Password and Confirm Admin Password fields must match.' - if schema and dbplatform != 'postgres': - raise BadRequest, 'Schemas are only supported on PostgreSQL.' - except BadRequest, msg: - if REQUEST is not None: - REQUEST.set('manage_tabs_message', msg) - return self.manage_addMailManagerForm(self, REQUEST) - else: - raise BadRequest, msg - - newMailManager = MailManager(id, title, admin_username, admin_email, - password, first_tid, create_tables, schema, dbplatform, - REQUEST) - self._setObject(id, newMailManager) - if REQUEST is not None: - return self.manage_main(self, REQUEST) - - -class MailManager(Folder, MailMixin, TestDataMixin): - """A mail management system. - - @group miscUtils: validEmail*, testMail*, row2xml*, process_task*, - migrate*, getSchemaName, listTimeZones, getBaseURL, getBatchPages*, - getMail*, generateMail*, formatTarget*, formatBody*, export*, - doSearch*, displayTime*, dateFormat*, configureMySQL, configurePostgres, - checkPOP3SSL, addZSQLMethods - @group zmiMethods: manage_* - @group ticketMethods: createTicket*, createMessage*, addMessageToTicket*, - getTicket*, listTickets* - @group attachmentMethods: addAttachment*, delAttachment*, - addStandardAttachment*, delStandardAttachment*, deleteAttachment* - @group webMethods: setSession*, changeSelected*, setReport* - @group userMethods: addMMUser*, editMMUser*, delAgent*, getUserDetails*, - getUserConstraints*, addOrEditCustomer*, delCustomer*, getCustomer* - @group accountMethods: addOrEditAccount*, delAccount*, getAccount* - @group groupMethods: addGroup*, editGroup*, delGroup*, getGroupConstraints*, - addOrEditGroup* - @group filterMethods: addFilter*, getFilterText*, deleteFilter*, - addFilterHeader*, delFilterHeader* - @group templateMethods: addOrEditTemplate*, deleteTemplate* - @group categoryMethods: setCategory*, addChoice*, deleteChoice* - @group archivingMethods: deleteTickets*, restoreTickets*, - setTicketsScreen*, diskUsage* - @group searchMethods: setSort*, quickFind* - @group reportMethods: homePageStats*, getTicketTimes*, getGraphDetails*, - formatInterval*, setReportDate*, getReportDate*, getReportDateSettings*, - fixSubsection* - @group pageTemplates: master*, macros*, index_html*, ticket_index_html*, - Tickets*, Create*, Search*, Reports*, Settings*, UserSettings*, - AccountSettings*, GroupSettings*, FilterSettings*, CustomerSettings*, - OptionSettings*, SystemSettings*, Help*, GenerateMail*, test, LoggedOut*, - Login*, master_style_css*, javascript_js* - - """ - - meta_type = 'MailManager' - - # Security - - __ac_roles__ = ('Tickets', 'Reports', 'Settings', 'Customer') - security = ClassSecurityInfo() - security.setPermissionDefault('View MailManager', - ['Tickets', 'Reports', 'Settings', 'Customer']) - security.setPermissionDefault('MailManager Settings', ['Settings']) - security.setPermissionDefault('MailManager Reports', ['Reports']) - security.setPermissionDefault('MailManager View Tickets', - ['Tickets', 'Customer']) - security.setPermissionDefault('MailManager Create Tickets', - ['Tickets', 'Customer']) - security.setPermissionDefault('MailManager Manage Tickets', - ['Tickets', 'Customer']) - - # SQL Directory overload hook - - sqldirclass = MailManagerSQL - - # Debug hooks - - pop3lib = poplib.POP3 - if pop3_ssl: - pop3lib_ssl = poplib.POP3_SSL - imap4lib = imaplib.IMAP4 - imap4lib_ssl = imaplib.IMAP4_SSL - _v_flowPointEntryCallbacks = [] - _v_flowPointExitCallbacks = [] - - # Management Screens - - manage_options = ( - {'label': 'Contents', 'action': 'manage_main'}, - {'label': 'Security', 'action': 'manage_access'}, - {'label': 'Properties', 'action': 'manage_propertiesForm'}, - # The permissions never let us see this tab! - {'label': 'View', 'action': 'index_html'}, - {'label': 'Migrate', 'action': 'manage_migrateForm'} - ) - - # Properties - - security.declareProtected('MailManager Settings', 'dateFormats') - def dateFormats(self): - """Provides the date formats that can be set through the properties.""" - return ('dd.mm.yy', 'mm.dd.yy', 'dd/mm/yy', 'mm/dd/yy') - - security.declareProtected('MailManager Settings', 'listTimeZones') - try: - from _compat23 import listTimeZones - except SyntaxError: - def listTimeZones(self): - """List all files in system's "zoneinfo" timezone database.""" - return [self.__class__.timezone] - - # Define defaults in the class because they can't yet be set at setup. - date_format = 'dd.mm.yy' - timezone = 'Default' - - # Version number for migration page - latestversion = mversion - - # XXX Define property in class temporarily to avoid need for migration. - virtual_root = '' - - _properties = ({'id': 'title', 'type': 'string', 'mode': 'w'}, - # Read-only: should be set once and for all at init. - {'id': 'schema', 'type': 'string', 'mode': 'w'}, - {'id': 'dbplatform', 'type': 'string', 'mode': 'w'}, - {'id': 'server_url', 'type': 'string', 'mode': 'w'}, - {'id': 'virtual_root', 'type': 'string', 'mode': 'w'}, - {'id': 'date_format', 'type': 'selection', - 'select_variable': 'dateFormats', 'mode': 'w'}, - {'id': 'timezone', 'type': 'selection', - 'select_variable': 'listTimeZones', 'mode': 'w'}, - {'id': 'version', 'type': 'string', 'mode': ''}, - {'id': 'mversion', 'type': 'int', 'mode': 'w'}, - {'id': 'mysql_max_allowed_packet', 'type': 'int', 'mode': 'w'} - ) - - dbplatform = 'postgres' - mysql_max_allowed_packet = 0 - - # Implement the ZopeScheduler interface so that MailManager can be called - # directly by the scheduler without having to use a Python Script - if ZOPE_SCHEDULER_PRESENT: - __implements__ = ISchedulingTask - - # Initialization - - def __init__(self, id, title, admin_username=None, admin_email=None, - admin_password=None, first_tid=1, create_tables=False, - schema='', dbplatform='postgres', REQUEST=None): - - # Constants. - self.mversion = mversion - self.refresh = 0 - self.batch_size = 15 - - # Passed to contructor. - self.id = id - self.title = title - self.admin_username = admin_username - self.admin_password = admin_password - self.admin_email = admin_email - self.first_tid = first_tid - self.create_tables = create_tables - - # The ZSQL methods are vastly simplified by adding a '.' to schema - # Also clean up schemas so they are in lowercase - if schema.endswith('.') or not schema: - self.schema = schema.lower() - else: - self.schema = schema.lower() + '.' - - - self.dbplatform = dbplatform - if dbplatform == 'postgres': - self.configurePostgres() - elif dbplatform == 'mysql': - self.configureMySQL() - elif dbplatform == 'mssql': - self.configureMicrosoftSQLServer() - elif dbplatform == 'oracle': - self.configureOracle() - else: - raise Exception('Unknown database') - - if first_tid > 1 and self.dbplatform != 'postgres': - raise Exception('Sorry, setting the first ticket id is not supported for this database at present') - - - # Capture info for creaing URLs in absence of REQUEST. These - # values will be unhelpful if MailManager is not being added - # using the same hostname as users will access it through, and - # quite empty if MailManager is not being added through the - # web at all. In such cases they must be corrected through - # the properties tab. - if REQUEST is not None: - self.server_url = REQUEST['SERVER_URL'] - virtual_root = REQUEST.other.get('VirtualRootPhysicalPath', ('',)) - self.virtual_root = '/'.join(virtual_root) - else: - self.server_url = '' - self.virtual_root = '' - - # Data structures. - self.filter_headers = ['To', 'From', 'cc', 'Subject', 'X-Priority', - 'X-Spam-Flag'] - self.priorities = ['Junk', 'Low', 'Normal', 'High', 'Critical'] - self.display_column = {'ticket_id': True, 'status': True, - 'assigned': False, 'title': True, - 'from_name': True, 'time': True, 'date': True, - 'priority': True, 'category0': False, - 'category1': False, 'category2': False} - - # Add a MailManager UserFolder to authenticate from the database - manage_addMMUserFolder(self) - - # Create a folder for standard attachments - self.manage_addFolder(id='attachments', title='Standard Attachments') - - # Add the sql methods - print "Adding SQL : %s" % str(self.sqldirclass) - self._setObject('sql', self.sqldirclass('sql')) - - # Add the ZSQL methods - self.addZSQLMethods() - - # Use cookie based authentication. - manage_addCC(self, 'Cookie') - self.Cookie.auto_login_page = 'Login' - self.Cookie.logout_page = 'LoggedOut' - - # Add the images. - manage_addDirectoryView(self, os.path.join('MailManager', - 'www', 'images')) - - # Add the MailHost - manage_addMailHost(self, 'MailHost') - - security.declarePrivate('configurePostgres') - def configurePostgres(self): - self.sql_delimiter = ';' - self.sql_boolean = 'BOOL' - self.sql_binary = 'BYTEA' - self.sql_interval = 'BIGINT' - self.sql_database = 'postgres' - self.sql_deferrable = '' - self.sql_datetimestamp = 'TIMESTAMP' - self.sql_initdefer = '' - self.sql_indexlimit = '' - self.sql_serialpkey = 'SERIAL PRIMARY KEY' - self.sql_tabletype = '' - self.sql_charset = '' - self.sql_true = '\'t\'' - self.sql_false = '\'f\'' - self.sql_varchar = 'VARCHAR' - self.sql_smalltext = 'TEXT' - self.sql_largetext = 'TEXT' - self.sql_integer = 'INT' - self.sql_textsearch = True - self.sql_truevar = 't' - self.sql_falsevar = 'f' - self.suboptimise = True - - security.declarePrivate('configureMySQL') - def configureMySQL(self): - self.sql_delimiter = '\0' - self.sql_boolean = 'BOOL' - self.sql_binary = 'LONGBLOB' - self.sql_interval = 'BIGINT' - self.sql_database = 'mysql' - self.sql_deferrable = '' - self.sql_datetimestamp = 'DATETIME' - self.sql_initdefer = '' - self.sql_indexlimit = '(255)' - self.sql_serialpkey = 'INT PRIMARY KEY AUTO_INCREMENT' - self.sql_tabletype = 'TYPE=InnoDB' - self.sql_charset = 'DEFAULT CHARSET=UTF8' - self.sql_true = 1 - self.sql_false = 0 - self.sql_truevar = 1 - self.sql_falsevar = 0 - self.sql_varchar = 'VARCHAR' - self.sql_smalltext = 'TEXT' - self.sql_largetext = 'TEXT' - self.sql_integer = 'INT' - self.sql_textsearch = True - self.mysql_max_allowed_packet = 32 * 1024 * 1024 - self.suboptimise = False - - security.declarePrivate('configureOracle') - def configureOracle(self): - """ ... [truncated message content] |
From: <ke...@us...> - 2006-05-08 19:34:31
|
Revision: 2985 Author: kevca Date: 2006-05-08 12:34:18 -0700 (Mon, 08 May 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=2985&view=rev Log Message: ----------- Releasing 2.1-rc3 Added Paths: ----------- MailManager/tags/RELENG_2_1_RC3/ MailManager/tags/RELENG_2_1_RC3/support/registry.py Copied: MailManager/tags/RELENG_2_1_RC3 (from rev 2984, MailManager/branches/RELENG_2_1) Added: MailManager/tags/RELENG_2_1_RC3/support/registry.py =================================================================== --- MailManager/tags/RELENG_2_1_RC3/support/registry.py (rev 0) +++ MailManager/tags/RELENG_2_1_RC3/support/registry.py 2006-05-08 19:34:18 UTC (rev 2985) @@ -0,0 +1,81 @@ +#!/usr/bin/python +# +# ConfigRegistry wrapper class for loading in a Configuration file and +# treating it as a dict. Originally written for the Edinburgh University +# Tardis Project by Kevin Campbell <kev at tardis.ed.ac.uk> +# +# Copyright (c) 2004 Kevin Campbell +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + +import ConfigParser + +class ConfigRegistry: + """ + This object represents the configuration of the global system + at any given time. Config parameters can be obtained by reading + this object as a dict. Other methods are possible, such as + rehashing the configuration. + """ + + def __init__(self, filename): + self.loadConfig(filename) + + def __getitem__(self, key): + return self.config[key] + + def __setitem__(self, key, value): + self.config[key] = value + + def __delitem__(self, key, value): + del self.config[key] + + def __iter__(self): + return iter(self.config) + + def __len__(self): + return len(self.config) + + def keys(self): + return self.config.keys() + + def has_key(self, key): + return self.config.has_key(key) + + + def loadConfig(self, configfile): + self.configfile = configfile + + cfgp = ConfigParser.ConfigParser() + cfgf = open(configfile, "rb") + + config = {} + + cfgp.readfp(cfgf) + for section in cfgp.sections(): + config[section]={} + for name in cfgp.options(section): + config[section][name] = cfgp.get(section, name) + + self.config = config + + def rehashConfig(self): + self.loadConfig(self.configfile) + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-05-10 09:19:17
|
Revision: 2994 Author: kevca Date: 2006-05-10 02:19:05 -0700 (Wed, 10 May 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=2994&view=rev Log Message: ----------- Tagging for 2.0.9 release Modified Paths: -------------- MailManager/tags/RELENG_2_0_9/CHANGES.txt MailManager/tags/RELENG_2_0_9/version.txt Added Paths: ----------- MailManager/tags/RELENG_2_0_9/ MailManager/tags/RELENG_2_0_9/support/registry.py Copied: MailManager/tags/RELENG_2_0_9 (from rev 2984, MailManager/branches/RELENG_2_1) Modified: MailManager/tags/RELENG_2_0_9/CHANGES.txt =================================================================== --- MailManager/branches/RELENG_2_1/CHANGES.txt 2006-05-08 18:08:46 UTC (rev 2984) +++ MailManager/tags/RELENG_2_0_9/CHANGES.txt 2006-05-10 09:19:05 UTC (rev 2994) @@ -1,3 +1,10 @@ +Version 2.1-RC4 +* BUG FIXES +- +* BUG FIXES From 2.0.8 to 2.0.9 + + + Version 2.1-RC3 * BUG FIXES - setHTML raises Unicode error (#1477563) Copied: MailManager/tags/RELENG_2_0_9/support/registry.py (from rev 2986, MailManager/branches/RELENG_2_1/support/registry.py) =================================================================== --- MailManager/tags/RELENG_2_0_9/support/registry.py (rev 0) +++ MailManager/tags/RELENG_2_0_9/support/registry.py 2006-05-10 09:19:05 UTC (rev 2994) @@ -0,0 +1,81 @@ +#!/usr/bin/python +# +# ConfigRegistry wrapper class for loading in a Configuration file and +# treating it as a dict. Originally written for the Edinburgh University +# Tardis Project by Kevin Campbell <kev at tardis.ed.ac.uk> +# +# Copyright (c) 2004 Kevin Campbell +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# + +import ConfigParser + +class ConfigRegistry: + """ + This object represents the configuration of the global system + at any given time. Config parameters can be obtained by reading + this object as a dict. Other methods are possible, such as + rehashing the configuration. + """ + + def __init__(self, filename): + self.loadConfig(filename) + + def __getitem__(self, key): + return self.config[key] + + def __setitem__(self, key, value): + self.config[key] = value + + def __delitem__(self, key, value): + del self.config[key] + + def __iter__(self): + return iter(self.config) + + def __len__(self): + return len(self.config) + + def keys(self): + return self.config.keys() + + def has_key(self, key): + return self.config.has_key(key) + + + def loadConfig(self, configfile): + self.configfile = configfile + + cfgp = ConfigParser.ConfigParser() + cfgf = open(configfile, "rb") + + config = {} + + cfgp.readfp(cfgf) + for section in cfgp.sections(): + config[section]={} + for name in cfgp.options(section): + config[section][name] = cfgp.get(section, name) + + self.config = config + + def rehashConfig(self): + self.loadConfig(self.configfile) + Modified: MailManager/tags/RELENG_2_0_9/version.txt =================================================================== --- MailManager/branches/RELENG_2_1/version.txt 2006-05-08 18:08:46 UTC (rev 2984) +++ MailManager/tags/RELENG_2_0_9/version.txt 2006-05-10 09:19:05 UTC (rev 2994) @@ -1 +1 @@ -2.1-rc3 +2.1-rc4 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-05-10 09:23:42
|
Revision: 2996 Author: kevca Date: 2006-05-10 02:23:30 -0700 (Wed, 10 May 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=2996&view=rev Log Message: ----------- Retagging, hopefully the correct branch this time! Added Paths: ----------- MailManager/tags/RELENG_2_0_9/ MailManager/tags/RELENG_2_0_9/CHANGES.txt MailManager/tags/RELENG_2_0_9/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_0_9/MMImportHandler.py Removed Paths: ------------- MailManager/tags/RELENG_2_0_9/CHANGES.txt MailManager/tags/RELENG_2_0_9/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_0_9/MMImportHandler.py Copied: MailManager/tags/RELENG_2_0_9 (from rev 2991, MailManager/branches/RELENG_2_0) Deleted: MailManager/tags/RELENG_2_0_9/CHANGES.txt =================================================================== --- MailManager/branches/RELENG_2_0/CHANGES.txt 2006-05-09 16:10:35 UTC (rev 2991) +++ MailManager/tags/RELENG_2_0_9/CHANGES.txt 2006-05-10 09:23:30 UTC (rev 2996) @@ -1,495 +0,0 @@ -Version 2.0.9 -* BUG FIXES -- Cite last cites the wrong message (#1471644) -- Formatting broken on templates for HTML (#1477664) -- No HTML response for HTML Required (#1472881) -- Selecting No change results in a failure (#1467786) -- Automatic addition of attachments (#1459924) - -Version 2.0.8 -* BUG FIXES -- Non existant refresh value leads to security error (#1466274) -- Cannot create HTML tickets (#1466223) -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.7 -* BUG FIXES -- Fixed the setting of next ticket id for MySQL, no longer silently ignores - the option on mailmanager creation and fixes migration (#1412787) -- Send and Close, Send Reply, Send and Hold and Add Note have all been - considerably refactored. This resolves the problem reported where outbound - messages had been silently discarded (#1415497) -- getMail could potentially drop incoming messages whilst collecting from - POP3 accounts. This has now been corrected, and a test case now exists - which reproduces the existing problem and demonstrates it being fixed. - (#1422985) -- i18n fix - on the ticket modify screen "closed" is no longer displayed as - "open" when languages other than English are used (#1423422) -* IMPROVEMENTS -- Massive improvements to the test suite. - -Version 2.0.6 -* IMPROVEMENTS -- We're now using html2text (included) instead of stripogram for converting - HTML to its plain text equivalent (when sending out HTML mail, we also - include a plain text alternative for those who can't read HTML messages). - This results in far prettier plain text conversion. -* BUG FIXES -- Notify user/group flags can now be set/cleared correctly on account - preferences (#1404595). -- Improved address validation. Well, it's now a bit more lax, but it's - completely conformant to RFCs 2821 and 2822 (#1396051). -- MySQL: Default categories are now set up at installation (#1392386). -- HTML parts of multipart/alternative messages are now encoded as UTF-8 - rather than, bizarrely, being forced into ISO-8859-1 (#1368283). -- Make sure the user is informed about *why* test data cannot be removed - (#1345788). - -Version 2.0.5 -* NEW FEATURES -- Tickets can now be created by sending an email (RFE 859117) -- Italian translation. -* BUG FIXES -- MySQL: Adding a user fixed (#1382479) -- MySQL: Users are now migrated correctly (#1378323) -- MySQL: Attachments can now be of virtually any size (#1378224) -- MySQL: MailManager will now start when psycopg is not present (#1378209) -- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) -- PostgreSQL: Migration works even if response target update fails (#1374603) -- Search now works for users in all timezones (#1375345) -- Reports and delete tickets works in all timezones (#1381828) -- The test data now sets 'routing' on the accounts (#1375764) -- Fixed parsing of mails containing NULL characters (#1370866) -- MMImport.py script now uses new URL (#1378385) -- To: field left empty when sending email (#1377027) -- Create Ticket fails when logged in as customer (#1369356) - -Version 2.0.4 -* BUG FIXES -- Prevent multiple users replying to the same ticket by accident (#1371269) -- Filters got broken in 2.0.3, change reverted (#1372814) -- Attachments now set the Content-Type header correctly on download (#13369349) -- Template names with trailing whitespace now work (#1363768) -- Set sql_charset on the mailmanager object during migration. (#1369347) - -Version 2.0.3 -* BUG FIXES -- Be more careful about adding and removing the test data (#1353112, #1345788). -- Improve the Unicode support with the MySQL back end (#1338614). -- Support of can now be removed with MySQL back end (#1338603). -- Fixes to the response target settings (#1336398, #1337506). -- setSession correctly clears the offset and always redirects to - Tickets (#1350429). -- Offer MySQL back end as a migration option (#1340301). -- Tickets now correctly marked as unread with MySQL back end (#1344827). - -Version 2.0.2 -* BUG FIXES -- Ignore the showHTML information in the session for plain text - emails. Reapplied previous bugfix (#1242337) -- Resetting response target to None now updates database (#1336398) -- Reports for targets fixed (#1337506) -* IMPROVEMENTS -- Now has setupdb script for MySQL users -- Split off setupdb code, now available as separate module -- Added in documentation for MySQL configuration - -Version 2.0.1-release -* BUG FIXES -- Disk usage screen now fixed for empty instances (#1244446) -- Initial Manager use now has correct roles set (#1324878) -- Altering roles now works correctly (#1324876) -- Update of response target now works correctly (#1324935) -- Removing notification flag for users/group now works correctly (#1315000) -- Migration now works correctly for 1.1 instances (#1291113) -- Setting response targets no longer generates an error (#1324884) - -Version 2.0.1-rc2 -* BUG FIXES -- No longer depends on psycopg due to import statements -- Migration fixes for MySQL users -- Fixed some scoping issues causing ZSQL methods to break due to - acquisition. -* IMPROVEMENTS -- SQL Directory no longer uses FileSystemSite.DirectoryView meaning - that the SQL methods can be overridden by 3rd parties. -- Test suite now has added hooks for overloading object types - -Version 2.0.1-rc1 -* BUG FIXES -- Test suite now covers text search cache consistency, cleared issues - with MySQL's mysql_max_allowed_packet variable -- Postgres support now appears stable - -Version 2.0.1-beta1 -* BUG FIXES -- Merged in all of the changes between 2.0r6 and 2.0r7 -- Fixed the index bug which was resulting in duplicate tickets being - displayed on the list page - -Version 2.0.1-alpha1 -* NEW FEATURES -- Adds in initial MySQL support -- SQL methods given addition parameters to deal with new MySQL support -- Vastly improved test suite - regression test suite for the database code. - -Version 2.0r7 -* BUG FIXES -- Subsequent pages for search were not being returned due to misuse of the - SESSION variable. These are now handled correctly (#1276412) -- Categories and templates were moved entirely to SQL. Upgrade needs a - migration to function correctly. (#1276414) -- listTicket method now correctly searches for subjects -- Fixes a Unicode handling error in the MailMixing class, which could - potentially block up incoming mail -* IMPROVEMENTS -- Postgres installation documentation rewritten -- Changes to loading of test datasets -- Test data set improved, now covers more functionality - -Version 2.0r6 -* BUG FIXES -- Fixed the positioning of the order by section of the listTickets query, - fixes broken ordering for search. -- The listCategories SQL method was broken, which was used by the Reports - pages. Reports for categories other than category0 were broken. - -Version 2.0 -* BUG FIXES -- Fix the security declaration of checkPOP3SSL(). - -Version 2.0 RC 3 -* NEW FEATURES -- Introduce some generalisations, ready for MySQL support in 2.0.1 -- Beginnings of epydoc API documentation. -* BUG FIXES -- Update the version number on migration. (#1229769) -- Robustify the autoreply code to deal with fatal errors. (#1240870) -- When a new message comes in with a ticket id in the subject line, - verify that the ticket already exists instead of assuming that it - does. (#1240711) -- Format the email address in the To: field for replies. (#1230837) -- Ignore the showHTML information in the session for plain text - emails. (#1242337) -- Record the logged in user who sent a reply to a ticket. (#1242958) - -Version 2.0 RC 2 -* BUG FIXES -- multipart/alternative mail with both an HTML and a plain text body now - only display one of them at a time (1227265) -- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) -- Migration updates the mm version -- Create ticket works again (1227744) - -Version 2.0 RC 1 -* BUG FIXES -- Stripogram can now be installed as a Python product in site-packages (1226633) -- Reply-To: header is used in favour of From: (1226156) -- Notifiction emails can handle non-ASCII subject lines (1224784) -- URLs are now accurate on notification emails (1224756) -- Character encodings set correctly on all web pages (1224731) -- Send & Close now goes to the next ticket (1224164) -- Improved date parsing (1223755) -- Respond By: now displayed for tickets with a response target (1222528) -- Attachment titles are now decoded correctly (1223974) - -Version 2.0 Beta 2 -* BUG FIXES -- Make the email validation less strict. (1283401) -- Customers can no longer have email addresses which are used - by an account. (1216414) -- Migration: Drop filters which refer to unknown users/groups. (1216361) -- Migration: Be more careful about coercing dates into ISO8601. (1216534) -- Clarified notification email setup. (1217403) -- Fixed Chinese translation. (1215645) -- Store time zone information in the pgsl database. - -Version 2.0 Beta 1 -* NEW FEATURES -- Added a Chinese translation. -- Add some documentation for creating the Postgres database and point to - detailed docs on the Windows installation process. -- Updated the help files to reflect the new version's feature set. -* BUG FIXES -- Make mbox exports have a more meaningful filename. -- Deal with RFC2047-encoded headers correctly. (1212035) -- Make the disk usage a bit more friendly. (1213604) -- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) -- Epoz now has a white background on all browsers. (1208912) - -Version 2.0 alpha 2 -* NEW FEATURES -- Support for retrieving POP3 mail over SSL (RFE 1204236) -- Optionally notify all in a group of new messages (RFE 1208284) -* BUG FIXES -- Help tab no longer visible after logout (1207656) -- Adding a MailManager instance now creates an initial user (1207022) -- Changes to users such as adding a signature no longer clear password (1207017) -- HTML tickets work properly (1205720, 1205717) -- Time to close tickets recorded (1204825) -- Reply to all button improved (1204805) -- Reassignment notification added (1204372) -- Groups redesigned (1204312) -- Adding/removing attachments no longer clears other form fields (1204272) -- Date translations fixed (1204268) -- Templates fixed (1204267) -- Overdue tickets function properly (1203141) -- Performance v. account report fixed (1196685) -- GetMail fixed (1196606) -- Referential integrity broken on mm_message table (1194418) -- Login link on logout page fixed (1204811) -- Signature handling improved (1204877) -- HTML email fixed (1204987) - -Version 2.0 alpha 1 -* NEW FEATURES -- A complete redesign using PostgreSQL as a replacement for the ZODB in order - to improve performance and scalability. -- Can now use SMTP servers that require a login (RFE 939720) - -Version 1.1 -* NEW FEATURES -- Internationalization of the help documentation. -* BUG FIXES -- Make sure that sending mail out is the last thing done, which should reduce - the window where a ConflictError would cause duplicate emails to be sent. -- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other - than a MessageParseError. Otherwise we wind up hard-bouncing (instead of - retrying) on a ConflictError. - -Version 1.1-rc5 -* BUG FIXES -- Comptatible with Zope 2.6/Python 2.1 again - -Version 1.1-rc4 -* BUG FIXES -- Standard attachments fixed (1110435) -- Clear supporter link fixed after i18n problem (1110436) - -Version 1.1-rc3 -* NEW FEATURES -[Unfortunately it was essential to add the following features at - this late stage for commercial reasons.] -- Added archive/restore tickets (RFE 953290) -- Create ticket can now have multiple attachments (RFE 987700) -- Replies can also have multiple attachments (RFE 859141) -- Standard set of attachments can be stored on the system (RFE 985469) -* BUG FIXES -- Edit of mail headers now works properly (RFE 859102) -- Fixed broken migration - -Version 1.1-rc2 -* BUG FIXES -- Now possible to add/edit account without SSL (1090041) -- Spam tickets no longer appear on the 'New' tickets list - -Version 1.1-rc1 -* NEW FEATURES -- Users notified on re-assignment of tickets (RFE 978035) -- Internationalisation (i18n) added ready for translation to other languages. -- Support for SSL connections to remote IMAP server. -- Any mail headers may be used in filters (RFE 859102) -* BUG FIXES -- Report graphs now work for user-defined categories (978404) -- File downloads now work when there is a space in the filename (985150) -- Remove support ticket feature fixed (985677) -- Users no longer notified if spam is received (1059104) -- Spam no longer displayed on default ticket listing views -- Templates with names ending in a space may now be deleted/edited (1003514) - -Version 1.0 -No changes from 1.0-rc2 - -Version 1.0-rc2 -* NEW FEATURES -- Batch classification of tickets. (RFE 859114 and 957719) -* BUG FIXES -- Migration works when filters are of mixed formats. (945956) -- Migration works when groups are of mixed formats. (945959) -- Messages from mailer-daemon with a real name do not cause a loop. (952864) -- Works on Firefox for Mac when reply has no attachment. (963291) -- Report graphs work for more than 200 tickets in a period. (964144) - -Version 1.0-rc1 -* NEW FEATURES -- Choice of date format. (RFE 869827) -- Choice of timezone (currently only on Unix). (RFE 869827) -- Script to import mail from Unix mailboxes. (RFE 903031) -- Shortcut icon. -- Importing of tickets enabled. -* IMPROVEMENTS -- Added global error slot and adjusted settings screens to use it. (873232) -- Message response form fields remembered in request. -- An instance's children may be migrated even when it is not. -* BUG FIXES -- Mail check thread delays till Zope is ready in 2.7 as well. (835642) -- GroupSettings page template works with new-style groups. (887785) -- Problems sending mail caught and reported to the user or logged. (892947) -- Message ID added to outgoing messages. (895039) -- Newlines in the Cc field no longer break the JavaScript. (904033) -- Private notes and replies no longer lose headers in migration. (904076) -- Private notes may no longer have a To field. (912534) -- Ticket ownership transferred when user deleted. (925344) -- Customers are persistent. (930654) -- Sending files with a bad mime type does not cause an exception. (934133) -- HTML templates no longer have extra breaks added. (934235) -- MailManager.getMail() returns an empty string on success. (934902) -- Add customer form checks fields are filled. (938631) -- Fixed links to AccountSettings page. (938678) - -Version 1.0-b4 -* BUG FIX -- Fixed error when a new thread is started and notification is on. - -Version 1.0-b3 -* NEW FEATURES -- Supporter mechanism for associating tickets fully implemented. -- URLs in messages rendered as hyperlinks. -- Filters can assign to groups as well as users. -* IMPROVEMENTS -- Assigned agent mailed at every new message in ticket, customer only - when he starts a new ticket. This reverses the previous behaviour. -- Tickets can be re-opened by arrival of a new message or through - Ticket Details box. -- Migration version distinguished from product version. -- Group now a class; ensures that group members are assigned to evenly. -- By default users only see tickets assigned to them. -- Export (view raw messages) link added to Ticket index page. -* BUG FIXES -- Account signatures are now used. -- HTML setting on auto replies and templates respected. -- Agents can be deleted. -- Several others (see SourceForge bugs 859030 to 873233). - -Version 1.0-b2 -* NEW FEATURES -- Migration -- HTML messages may now be viewed. -- Most recent search results always available. -- Response target added as option in filters and create ticket screen. -* IMPROVEMENTS -- More robust ticket navigation (works with virtual hosting, "prev"/"next" - links always available, "list" goes to batch containing current ticket). -- Improved handling and presentation of attachments. -- Help screens updated (not quite finished). -- Improved interface to reports (still needs work though). -- All character sets displayed correctly (as far as the browser's fonts allow). -- Mail fetching scripts have an option to specify MailManager's URL . -- Search by from name no longer requires exact match. -- Much Python code removed from page templates. -* BUG FIXES -- Overdue ticket view and searches for overdue tickets now work. -- Automatic mail checking continues after product is refreshed. -- Numerous others (see SourceForge bugs 832932 to 858688). - -Version 1.0-b1 -- Dependence on MailHost product removed. -- Message class now wraps Message object from Python email package, - allowing mails to be retreived in their original form. -- Automatic mail fetching introduced. -- Code for creating e-mails through the web brought together in a new - module and handling added for text entered in any character set. -- Each account is now a separate folder, ready for per account - security settings. -- Fetching and handling of incoming mail moved to new Account class. -- Self service interface to allow customers to manage their own tickets. -- Better handling of HTML emails. -- Create ticket now has more sensible defaults. -- Users now deleted properly. -- Calculates an approximation of disk space used. -- Added Property Managers to ease debugging. -- Users with 'Settings' access can no longer view ZMI. -- Numerous bug fixes. - -Version 0.96 -- By default, shows newest tickets first rather than oldest -- The subject of a ticket can now be changed -- If more email is added to a read ticket it goes back to being unread (bold) -- Advises if an attachment is of a dangerous type (for Windows users) -- Attachments now download with original filename & security improved -- Browser bug in IE prevented selection of user on tickets screen (797221) -- Two extra user definable categories added -- Code tidied up & minor bug fixes - -Version 0.95 -- Added a 'Spam' status and amended reports, tickets & filters accordingly -- Can now delete spam tickets without closing them (783289) -- Now handles AppleDouble attachments correctly (787671) -- POP3 mailbox lock removed if there is an error (787677) -- IMAP mailbox lock removed if there is an error -- Mails that can't be processed are now stored raw rather than deleted -- Added 'priority' and 'assigned' to Search screen (785360) -- Basic export of reports to Excel implemented -- Now record and report on times to close as well as times to respond -- Other minor fixes - -Version 0.94 -- Ticket status is displayed correctly in all circumstances -- Adding attachments when creating a ticket thru the web now works as expected. -- Users can be notified of new tickets in all circumstances (783955) -- Allow selection of fields to display on tickets screen (783863) -- Added submenu to the Create ticket screen -- Other minor fixes - -Version 0.93 -- Improved attachment handling and display -- Improved ticket navigation (now back/list/next on ticket view) (780783) -- Fixed a bug in the reporting graphs where the last day in the month could - be missed -- Added an auto refresh option for tickets screen (feature request 781294) -- By default tickets created through the web are assigned to the logged in user, - rather than the first user alphabetically -- Improved outgoing mail -- More advanced standard filter -- Tightened up security -- Help button now context sensitive - -Version 0.92 -- Adding a user with the Reports permission now works as expected (779986) -- Account deletion now works properly (779989) -- Admin password now hidden on the Add MailManager page (779987) - -Thanks to Ronan Amicel for spotting these four bugs. - -- Ticket deletion system improved. -- Supporting tickets system now works better. - -Version 0.91 -- Fixed the Account Help screen. Now displays properly and text is accurate. -- Fixed the 'Change details' section on a ticket screen so the user the ticket - is assigned to is displayed by default. Also ensured user names are displayed - in alphabetical order. -- Categories can now be deleted. Deleted categories will still appear in - Reports, System Settings and on the Search page until every ticket with that - category has been deleted from the system. - -Thanks to Kevin Gill for spotting these bugs. - -Version 0.9 -The first open source release of MailManager. Based on the commercial version -however with some major changes: - -- Uses the Zope Object DB instead of an external relational database. This - changes the performance, it is faster in some areas and slower in others. It - makes the product much easier to install. -- Use of HTML to generate the graphs. Not as attractive as the commercial - version but saves the difficulty of installing extensions which were not - stable on all platforms. -- Improved text editor. Epoz is used to provide rich text editing allowing - easy creation of HTML mail. -- Improved text indexing. Greatly expanded query options. -- Bug fixes. A number of minor bugs were fixed. Copied: MailManager/tags/RELENG_2_0_9/CHANGES.txt (from rev 2992, MailManager/branches/RELENG_2_0/CHANGES.txt) =================================================================== --- MailManager/tags/RELENG_2_0_9/CHANGES.txt (rev 0) +++ MailManager/tags/RELENG_2_0_9/CHANGES.txt 2006-05-10 09:23:30 UTC (rev 2996) @@ -0,0 +1,496 @@ +Version 2.0.9 +* BUG FIXES +- Cite last cites the wrong message (#1471644) +- Formatting broken on templates for HTML (#1477664) +- No HTML response for HTML Required (#1472881) +- Selecting No change results in a failure (#1467786) +- Automatic addition of attachments (#1459924) +- Importing fails with alternative timezone (#1485389) + +Version 2.0.8 +* BUG FIXES +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.7 +* BUG FIXES +- Fixed the setting of next ticket id for MySQL, no longer silently ignores + the option on mailmanager creation and fixes migration (#1412787) +- Send and Close, Send Reply, Send and Hold and Add Note have all been + considerably refactored. This resolves the problem reported where outbound + messages had been silently discarded (#1415497) +- getMail could potentially drop incoming messages whilst collecting from + POP3 accounts. This has now been corrected, and a test case now exists + which reproduces the existing problem and demonstrates it being fixed. + (#1422985) +- i18n fix - on the ticket modify screen "closed" is no longer displayed as + "open" when languages other than English are used (#1423422) +* IMPROVEMENTS +- Massive improvements to the test suite. + +Version 2.0.6 +* IMPROVEMENTS +- We're now using html2text (included) instead of stripogram for converting + HTML to its plain text equivalent (when sending out HTML mail, we also + include a plain text alternative for those who can't read HTML messages). + This results in far prettier plain text conversion. +* BUG FIXES +- Notify user/group flags can now be set/cleared correctly on account + preferences (#1404595). +- Improved address validation. Well, it's now a bit more lax, but it's + completely conformant to RFCs 2821 and 2822 (#1396051). +- MySQL: Default categories are now set up at installation (#1392386). +- HTML parts of multipart/alternative messages are now encoded as UTF-8 + rather than, bizarrely, being forced into ISO-8859-1 (#1368283). +- Make sure the user is informed about *why* test data cannot be removed + (#1345788). + +Version 2.0.5 +* NEW FEATURES +- Tickets can now be created by sending an email (RFE 859117) +- Italian translation. +* BUG FIXES +- MySQL: Adding a user fixed (#1382479) +- MySQL: Users are now migrated correctly (#1378323) +- MySQL: Attachments can now be of virtually any size (#1378224) +- MySQL: MailManager will now start when psycopg is not present (#1378209) +- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) +- PostgreSQL: Migration works even if response target update fails (#1374603) +- Search now works for users in all timezones (#1375345) +- Reports and delete tickets works in all timezones (#1381828) +- The test data now sets 'routing' on the accounts (#1375764) +- Fixed parsing of mails containing NULL characters (#1370866) +- MMImport.py script now uses new URL (#1378385) +- To: field left empty when sending email (#1377027) +- Create Ticket fails when logged in as customer (#1369356) + +Version 2.0.4 +* BUG FIXES +- Prevent multiple users replying to the same ticket by accident (#1371269) +- Filters got broken in 2.0.3, change reverted (#1372814) +- Attachments now set the Content-Type header correctly on download (#13369349) +- Template names with trailing whitespace now work (#1363768) +- Set sql_charset on the mailmanager object during migration. (#1369347) + +Version 2.0.3 +* BUG FIXES +- Be more careful about adding and removing the test data (#1353112, #1345788). +- Improve the Unicode support with the MySQL back end (#1338614). +- Support of can now be removed with MySQL back end (#1338603). +- Fixes to the response target settings (#1336398, #1337506). +- setSession correctly clears the offset and always redirects to + Tickets (#1350429). +- Offer MySQL back end as a migration option (#1340301). +- Tickets now correctly marked as unread with MySQL back end (#1344827). + +Version 2.0.2 +* BUG FIXES +- Ignore the showHTML information in the session for plain text + emails. Reapplied previous bugfix (#1242337) +- Resetting response target to None now updates database (#1336398) +- Reports for targets fixed (#1337506) +* IMPROVEMENTS +- Now has setupdb script for MySQL users +- Split off setupdb code, now available as separate module +- Added in documentation for MySQL configuration + +Version 2.0.1-release +* BUG FIXES +- Disk usage screen now fixed for empty instances (#1244446) +- Initial Manager use now has correct roles set (#1324878) +- Altering roles now works correctly (#1324876) +- Update of response target now works correctly (#1324935) +- Removing notification flag for users/group now works correctly (#1315000) +- Migration now works correctly for 1.1 instances (#1291113) +- Setting response targets no longer generates an error (#1324884) + +Version 2.0.1-rc2 +* BUG FIXES +- No longer depends on psycopg due to import statements +- Migration fixes for MySQL users +- Fixed some scoping issues causing ZSQL methods to break due to + acquisition. +* IMPROVEMENTS +- SQL Directory no longer uses FileSystemSite.DirectoryView meaning + that the SQL methods can be overridden by 3rd parties. +- Test suite now has added hooks for overloading object types + +Version 2.0.1-rc1 +* BUG FIXES +- Test suite now covers text search cache consistency, cleared issues + with MySQL's mysql_max_allowed_packet variable +- Postgres support now appears stable + +Version 2.0.1-beta1 +* BUG FIXES +- Merged in all of the changes between 2.0r6 and 2.0r7 +- Fixed the index bug which was resulting in duplicate tickets being + displayed on the list page + +Version 2.0.1-alpha1 +* NEW FEATURES +- Adds in initial MySQL support +- SQL methods given addition parameters to deal with new MySQL support +- Vastly improved test suite - regression test suite for the database code. + +Version 2.0r7 +* BUG FIXES +- Subsequent pages for search were not being returned due to misuse of the + SESSION variable. These are now handled correctly (#1276412) +- Categories and templates were moved entirely to SQL. Upgrade needs a + migration to function correctly. (#1276414) +- listTicket method now correctly searches for subjects +- Fixes a Unicode handling error in the MailMixing class, which could + potentially block up incoming mail +* IMPROVEMENTS +- Postgres installation documentation rewritten +- Changes to loading of test datasets +- Test data set improved, now covers more functionality + +Version 2.0r6 +* BUG FIXES +- Fixed the positioning of the order by section of the listTickets query, + fixes broken ordering for search. +- The listCategories SQL method was broken, which was used by the Reports + pages. Reports for categories other than category0 were broken. + +Version 2.0 +* BUG FIXES +- Fix the security declaration of checkPOP3SSL(). + +Version 2.0 RC 3 +* NEW FEATURES +- Introduce some generalisations, ready for MySQL support in 2.0.1 +- Beginnings of epydoc API documentation. +* BUG FIXES +- Update the version number on migration. (#1229769) +- Robustify the autoreply code to deal with fatal errors. (#1240870) +- When a new message comes in with a ticket id in the subject line, + verify that the ticket already exists instead of assuming that it + does. (#1240711) +- Format the email address in the To: field for replies. (#1230837) +- Ignore the showHTML information in the session for plain text + emails. (#1242337) +- Record the logged in user who sent a reply to a ticket. (#1242958) + +Version 2.0 RC 2 +* BUG FIXES +- multipart/alternative mail with both an HTML and a plain text body now + only display one of them at a time (1227265) +- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) +- Migration updates the mm version +- Create ticket works again (1227744) + +Version 2.0 RC 1 +* BUG FIXES +- Stripogram can now be installed as a Python product in site-packages (1226633) +- Reply-To: header is used in favour of From: (1226156) +- Notifiction emails can handle non-ASCII subject lines (1224784) +- URLs are now accurate on notification emails (1224756) +- Character encodings set correctly on all web pages (1224731) +- Send & Close now goes to the next ticket (1224164) +- Improved date parsing (1223755) +- Respond By: now displayed for tickets with a response target (1222528) +- Attachment titles are now decoded correctly (1223974) + +Version 2.0 Beta 2 +* BUG FIXES +- Make the email validation less strict. (1283401) +- Customers can no longer have email addresses which are used + by an account. (1216414) +- Migration: Drop filters which refer to unknown users/groups. (1216361) +- Migration: Be more careful about coercing dates into ISO8601. (1216534) +- Clarified notification email setup. (1217403) +- Fixed Chinese translation. (1215645) +- Store time zone information in the pgsl database. + +Version 2.0 Beta 1 +* NEW FEATURES +- Added a Chinese translation. +- Add some documentation for creating the Postgres database and point to + detailed docs on the Windows installation process. +- Updated the help files to reflect the new version's feature set. +* BUG FIXES +- Make mbox exports have a more meaningful filename. +- Deal with RFC2047-encoded headers correctly. (1212035) +- Make the disk usage a bit more friendly. (1213604) +- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) +- Epoz now has a white background on all browsers. (1208912) + +Version 2.0 alpha 2 +* NEW FEATURES +- Support for retrieving POP3 mail over SSL (RFE 1204236) +- Optionally notify all in a group of new messages (RFE 1208284) +* BUG FIXES +- Help tab no longer visible after logout (1207656) +- Adding a MailManager instance now creates an initial user (1207022) +- Changes to users such as adding a signature no longer clear password (1207017) +- HTML tickets work properly (1205720, 1205717) +- Time to close tickets recorded (1204825) +- Reply to all button improved (1204805) +- Reassignment notification added (1204372) +- Groups redesigned (1204312) +- Adding/removing attachments no longer clears other form fields (1204272) +- Date translations fixed (1204268) +- Templates fixed (1204267) +- Overdue tickets function properly (1203141) +- Performance v. account report fixed (1196685) +- GetMail fixed (1196606) +- Referential integrity broken on mm_message table (1194418) +- Login link on logout page fixed (1204811) +- Signature handling improved (1204877) +- HTML email fixed (1204987) + +Version 2.0 alpha 1 +* NEW FEATURES +- A complete redesign using PostgreSQL as a replacement for the ZODB in order + to improve performance and scalability. +- Can now use SMTP servers that require a login (RFE 939720) + +Version 1.1 +* NEW FEATURES +- Internationalization of the help documentation. +* BUG FIXES +- Make sure that sending mail out is the last thing done, which should reduce + the window where a ConflictError would cause duplicate emails to be sent. +- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other + than a MessageParseError. Otherwise we wind up hard-bouncing (instead of + retrying) on a ConflictError. + +Version 1.1-rc5 +* BUG FIXES +- Comptatible with Zope 2.6/Python 2.1 again + +Version 1.1-rc4 +* BUG FIXES +- Standard attachments fixed (1110435) +- Clear supporter link fixed after i18n problem (1110436) + +Version 1.1-rc3 +* NEW FEATURES +[Unfortunately it was essential to add the following features at + this late stage for commercial reasons.] +- Added archive/restore tickets (RFE 953290) +- Create ticket can now have multiple attachments (RFE 987700) +- Replies can also have multiple attachments (RFE 859141) +- Standard set of attachments can be stored on the system (RFE 985469) +* BUG FIXES +- Edit of mail headers now works properly (RFE 859102) +- Fixed broken migration + +Version 1.1-rc2 +* BUG FIXES +- Now possible to add/edit account without SSL (1090041) +- Spam tickets no longer appear on the 'New' tickets list + +Version 1.1-rc1 +* NEW FEATURES +- Users notified on re-assignment of tickets (RFE 978035) +- Internationalisation (i18n) added ready for translation to other languages. +- Support for SSL connections to remote IMAP server. +- Any mail headers may be used in filters (RFE 859102) +* BUG FIXES +- Report graphs now work for user-defined categories (978404) +- File downloads now work when there is a space in the filename (985150) +- Remove support ticket feature fixed (985677) +- Users no longer notified if spam is received (1059104) +- Spam no longer displayed on default ticket listing views +- Templates with names ending in a space may now be deleted/edited (1003514) + +Version 1.0 +No changes from 1.0-rc2 + +Version 1.0-rc2 +* NEW FEATURES +- Batch classification of tickets. (RFE 859114 and 957719) +* BUG FIXES +- Migration works when filters are of mixed formats. (945956) +- Migration works when groups are of mixed formats. (945959) +- Messages from mailer-daemon with a real name do not cause a loop. (952864) +- Works on Firefox for Mac when reply has no attachment. (963291) +- Report graphs work for more than 200 tickets in a period. (964144) + +Version 1.0-rc1 +* NEW FEATURES +- Choice of date format. (RFE 869827) +- Choice of timezone (currently only on Unix). (RFE 869827) +- Script to import mail from Unix mailboxes. (RFE 903031) +- Shortcut icon. +- Importing of tickets enabled. +* IMPROVEMENTS +- Added global error slot and adjusted settings screens to use it. (873232) +- Message response form fields remembered in request. +- An instance's children may be migrated even when it is not. +* BUG FIXES +- Mail check thread delays till Zope is ready in 2.7 as well. (835642) +- GroupSettings page template works with new-style groups. (887785) +- Problems sending mail caught and reported to the user or logged. (892947) +- Message ID added to outgoing messages. (895039) +- Newlines in the Cc field no longer break the JavaScript. (904033) +- Private notes and replies no longer lose headers in migration. (904076) +- Private notes may no longer have a To field. (912534) +- Ticket ownership transferred when user deleted. (925344) +- Customers are persistent. (930654) +- Sending files with a bad mime type does not cause an exception. (934133) +- HTML templates no longer have extra breaks added. (934235) +- MailManager.getMail() returns an empty string on success. (934902) +- Add customer form checks fields are filled. (938631) +- Fixed links to AccountSettings page. (938678) + +Version 1.0-b4 +* BUG FIX +- Fixed error when a new thread is started and notification is on. + +Version 1.0-b3 +* NEW FEATURES +- Supporter mechanism for associating tickets fully implemented. +- URLs in messages rendered as hyperlinks. +- Filters can assign to groups as well as users. +* IMPROVEMENTS +- Assigned agent mailed at every new message in ticket, customer only + when he starts a new ticket. This reverses the previous behaviour. +- Tickets can be re-opened by arrival of a new message or through + Ticket Details box. +- Migration version distinguished from product version. +- Group now a class; ensures that group members are assigned to evenly. +- By default users only see tickets assigned to them. +- Export (view raw messages) link added to Ticket index page. +* BUG FIXES +- Account signatures are now used. +- HTML setting on auto replies and templates respected. +- Agents can be deleted. +- Several others (see SourceForge bugs 859030 to 873233). + +Version 1.0-b2 +* NEW FEATURES +- Migration +- HTML messages may now be viewed. +- Most recent search results always available. +- Response target added as option in filters and create ticket screen. +* IMPROVEMENTS +- More robust ticket navigation (works with virtual hosting, "prev"/"next" + links always available, "list" goes to batch containing current ticket). +- Improved handling and presentation of attachments. +- Help screens updated (not quite finished). +- Improved interface to reports (still needs work though). +- All character sets displayed correctly (as far as the browser's fonts allow). +- Mail fetching scripts have an option to specify MailManager's URL . +- Search by from name no longer requires exact match. +- Much Python code removed from page templates. +* BUG FIXES +- Overdue ticket view and searches for overdue tickets now work. +- Automatic mail checking continues after product is refreshed. +- Numerous others (see SourceForge bugs 832932 to 858688). + +Version 1.0-b1 +- Dependence on MailHost product removed. +- Message class now wraps Message object from Python email package, + allowing mails to be retreived in their original form. +- Automatic mail fetching introduced. +- Code for creating e-mails through the web brought together in a new + module and handling added for text entered in any character set. +- Each account is now a separate folder, ready for per account + security settings. +- Fetching and handling of incoming mail moved to new Account class. +- Self service interface to allow customers to manage their own tickets. +- Better handling of HTML emails. +- Create ticket now has more sensible defaults. +- Users now deleted properly. +- Calculates an approximation of disk space used. +- Added Property Managers to ease debugging. +- Users with 'Settings' access can no longer view ZMI. +- Numerous bug fixes. + +Version 0.96 +- By default, shows newest tickets first rather than oldest +- The subject of a ticket can now be changed +- If more email is added to a read ticket it goes back to being unread (bold) +- Advises if an attachment is of a dangerous type (for Windows users) +- Attachments now download with original filename & security improved +- Browser bug in IE prevented selection of user on tickets screen (797221) +- Two extra user definable categories added +- Code tidied up & minor bug fixes + +Version 0.95 +- Added a 'Spam' status and amended reports, tickets & filters accordingly +- Can now delete spam tickets without closing them (783289) +- Now handles AppleDouble attachments correctly (787671) +- POP3 mailbox lock removed if there is an error (787677) +- IMAP mailbox lock removed if there is an error +- Mails that can't be processed are now stored raw rather than deleted +- Added 'priority' and 'assigned' to Search screen (785360) +- Basic export of reports to Excel implemented +- Now record and report on times to close as well as times to respond +- Other minor fixes + +Version 0.94 +- Ticket status is displayed correctly in all circumstances +- Adding attachments when creating a ticket thru the web now works as expected. +- Users can be notified of new tickets in all circumstances (783955) +- Allow selection of fields to display on tickets screen (783863) +- Added submenu to the Create ticket screen +- Other minor fixes + +Version 0.93 +- Improved attachment handling and display +- Improved ticket navigation (now back/list/next on ticket view) (780783) +- Fixed a bug in the reporting graphs where the last day in the month could + be missed +- Added an auto refresh option for tickets screen (feature request 781294) +- By default tickets created through the web are assigned to the logged in user, + rather than the first user alphabetically +- Improved outgoing mail +- More advanced standard filter +- Tightened up security +- Help button now context sensitive + +Version 0.92 +- Adding a user with the Reports permission now works as expected (779986) +- Account deletion now works properly (779989) +- Admin password now hidden on the Add MailManager page (779987) + +Thanks to Ronan Amicel for spotting these four bugs. + +- Ticket deletion system improved. +- Supporting tickets system now works better. + +Version 0.91 +- Fixed the Account Help screen. Now displays properly and text is accurate. +- Fixed the 'Change details' section on a ticket screen so the user the ticket + is assigned to is displayed by default. Also ensured user names are displayed + in alphabetical order. +- Categories can now be deleted. Deleted categories will still appear in + Reports, System Settings and on the Search page until every ticket with that + category has been deleted from the system. + +Thanks to Kevin Gill for spotting these bugs. + +Version 0.9 +The first open source release of MailManager. Based on the commercial version +however with some major changes: + +- Uses the Zope Object DB instead of an external relational database. This + changes the performance, it is faster in some areas and slower in others. It + makes the product much easier to install. +- Use of HTML to generate the graphs. Not as attractive as the commercial + version but saves the difficulty of installing extensions which were not + stable on all platforms. +- Improved text editor. Epoz is used to provide rich text editing allowing + easy creation of HTML mail. +- Improved text indexing. Greatly expanded query options. +- Bug fixes. A number of minor bugs were fixed. Deleted: MailManager/tags/RELENG_2_0_9/Extensions/TicketPluggableBrain.py =================================================================== --- MailManager/branches/RELENG_2_0/Extensions/TicketPluggableBrain.py 2006-05-09 16:10:35 UTC (rev 2991) +++ MailManager/tags/RELENG_2_0_9/Extensions/TicketPluggableBrain.py 2006-05-10 09:23:30 UTC (rev 2996) @@ -1,928 +0,0 @@ -# Zope modules. -from Globals import InitializeClass -from AccessControl import ClassSecurityInfo, getSecurityManager -from DateTime import DateTime -from zExceptions.unauthorized import Unauthorized -from zExceptions import BadRequest - -# Modules from this package -from Products.MailManager.MailMixin import MailMixin - -# 3rd party modules. -try: - from psycopg import Binary -except ImportError: - pass -try: - from stripogram import html2safehtml -except ImportError: - from Products.stripogram import html2safehtml - -from Products.MailManager.support.html2text import html2text - -# Python library modules. -import re -import operator -from email.Utils import formataddr, parseaddr, make_msgid -from smtplib import SMTPRecipientsRefused - -import logging -from Products.MailManager.support.logger import log - -from_escape = re.compile('^>*From ') -sig_remover = re.compile('^-- $.*\Z', re.DOTALL | re.MULTILINE) - -class TicketPluggableBrain(MailMixin): - - security = ClassSecurityInfo() - security.setPermissionDefault('MailManager Manage Tickets', - ['Tickets', 'Customer']) - - security.declareProtected('MailManager Manage Tickets', 'checkAuthorized') - def checkAuthorized(self): - user = getSecurityManager().getUser() - - if not 'Tickets' in user.roles: - username = user.getUserName() - addrs = self.sql.getCustomerAddresses(username=username) - if not self['from_email'] in [x.access_email for x in addrs]: - raise Unauthorized("You are not allowed to view this ticket") - - security.declarePublic('__bobo_traverse__') - def __bobo_traverse__(self, REQUEST=None, name=None): - """ Traversal hook to do namespace mangling for putting http in - from of requests. - - We rename the request for local methods so that we are allowing - mangling - attempting to get addMessageToTicket will return - the method http_addMessageToTicket. This allows us to split - off the interface layer from API calls. - """ - # First of all, try and mangle http_ in front of requests - ret = getattr(self, 'http_%s' % name, None) - if ret: return ret - - # Then try and obtain without mangling - ret = getattr(self, name, None) - if ret: return ret - else: - ret = self[name] - if ret: return ret - return name - - - security.declareProtected('MailManager Manage Tickets', 'index_html') - def index_html(self, REQUEST): - """Provide a view for the simple direct traversal.""" - return self.ticket_index_html(self, REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'findSupporter') - def findSupporter(self, REQUEST, SESSION): - """Find a supporter for this Ticket.""" - SESSION.set('find_supporter', self.id) - return self.ticket_index_html(self, REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'change') - def change(self, REQUEST): - """Return a view allowing the details to be changed.""" - REQUEST.set('details', 'y') - return self.ticket_index_html(self, REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'save') - def save(self, subject='', assigned='', status='', priority=0, - category0=None, category1=None, category2=None, support_of=None, - changed_by='', REQUEST=None, RESPONSE=None): - """Save changes to a ticket. - - Check what has been changed, record changes in history and then make - the changes to the ticket. - """ - if REQUEST is not None: - # Check for errors (if called through the web). - error = None - if status == 'closed' != self.status and not self._okToClose(): - error = 'All supporting tickets must be closed.' - REQUEST.set('flag_supporters', True) - if support_of and support_of != self.support_of: - # Check ticket to be supported exists, is not closed and does - # not already support self. - results = self.ticket(id=support_of) - if not results: - error = 'Ticket %06d does not exist.' % support_of - REQUEST.set('flag_support_of', True) - elif results[0].status == 'closed': - error = 'Ticket %06d is closed.' % support_of - REQUEST.set('flag_support_of', True) - elif results[0].support_of == self.id: - error = ('Ticket %06d itself supports this ticket.' % - support_of) - REQUEST.set('flag_support_of', True) - if error is not None: - REQUEST.set('error', error) - REQUEST.set('details', 'y') - return self.ticket_index_html(self, REQUEST) - changed_by = changed_by or getSecurityManager().getUser().getUserName() - changes = {} - set_date_closed = False - clear_date_closed = False - if status and status != self.status: - if status == 'closed': - # Record the date & time the ticket was closed. - set_date_closed = True - elif self.status == 'closed': - # Clear date_closed when we re-open a ticket. - clear_date_closed = True - changes['status'] = self.status - if subject and subject != self.subject: - changes['subject'] = self.subject - if assigned and assigned != self.assigned: - changes['assigned'] = self.assigned - # If the assigned user was changed by someone other than the new - # user and the 'Notify users of new tickets' flag is set then let - # the new user know they have got a ticket. - if assigned != changed_by: - if self.account(email=self.account_id)[0].notify_user: - self.notifyUser(new_id=assigned) - if status and status != self.status: - changes['status'] = self.status - if priority and priority != self.priority: - changes['priority'] = self.priority - if category0 and category0 != self.category0: - changes['category0'] = self.category0 - if category1 and category1 != self.category1: - changes['category1'] = self.category1 - if category2 and category2 != self.category2: - changes['category2'] = self.category2 - if support_of is not None and support_of != self.support_of: - changes['support_of'] = self.support_of or 0 - if changes: - self.sql.addHistory(ticket_id=self.id, - subject=changes.get('subject', ''), - assigned=changes.get('assigned', ''), - status=changes.get('status', ''), - priority=changes.get('priority'), - category0=changes.get('category0', ''), - category1=changes.get('category1', ''), - category2=changes.get('category2', ''), - support_of=changes.get('support_of', ''), - changed_by=changed_by) - self.sql.editTicket(id=self.id, - subject=subject or self.subject, - assigned=assigned or self.assigned, - status=status or self.status, - priority=priority or self.priority, - category0=category0 or self.category0 or '', - category1=category1 or self.category1 or '', - category2=category2 or self.category2 or '', - set_date_closed=set_date_closed, - clear_date_closed=clear_date_closed) - # Icky, but let's update the support_of separately. - if support_of == 0: - self.sql.editTicket(id = self.id, clear_support_of = True) - elif support_of: - self.sql.editTicket(id = self.id, set_support_of = True, support_of = support_of) - - if RESPONSE is not None: - return RESPONSE.redirect('%s/ticket/%06d' % (self.getBaseURL(), - self.id)) - - security.declareProtected('MailManager Manage Tickets', 'headers') - def headers(self, REQUEST): - """Show or hide the message's raw headers.""" - if REQUEST.SESSION.has_key('show_headers'): - del REQUEST.SESSION['show_headers'] - else: - REQUEST.SESSION.set('show_headers', True) - return self.ticket_index_html(self, REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'showHTML') - def showHTML(self, REQUEST): - """Should html_body be displayed?""" - show_html = REQUEST.SESSION.get('show_html') - if show_html is None: - return 0 - return show_html.get(self.absolute_url(), 0) - - security.declareProtected('MailManager Manage Tickets', 'toggleShowHTML') - def toggleShowHTML(self, REQUEST): - """Change whether html_body is displayed.""" - show_html = REQUEST.SESSION.get('show_html', {}) - if not show_html: - REQUEST.SESSION.set('show_html', show_html) - url = self.absolute_url() - show_html[url] = not show_html.get(url, 0) - return REQUEST.RESPONSE.redirect('%s/ticket/%06d' % (self.getBaseURL(), - self.id)) - - security.declareProtected('MailManager Manage Tickets', 'export') - def export(self, RESPONSE): - """Export all of a ticket's messages in mbox format. TODO: export - the attachments too. This is probably going to involve creating - an email object to let it do the appropriate construction. - """ - RESPONSE.setHeader('content-type', 'text/plain') - RESPONSE.setHeader('Content-Disposition', - 'attachment; filename=mbox.txt') - write = RESPONSE.write # Saves a lookup every time - for msg in self.sql.listMessages(ticket_id = self.id): - date = DateTime(msg.msg_date).rfc822() - from_email = msg.from_email or self.from_email - write("From %s %s\n" % (from_email.encode('utf-8'), date)) - write(msg.raw_headers.encode('utf-8')) - write('\n\n') - for line in msg.body.splitlines(): - if from_escape.match(line): - line = u">" + line - write(line.encode('utf-8')) - write('\n') - write ('\n') - return - - security.declarePrivate('notifyUser') - def notifyUser(self, new_id=None): - """Email the assigned user that the ticket has been created/updated. - - By default notify the user the ticket is presently assigned to, if - new_id is set then notify the new user with that username. - """ - if self.status == 'spam': - return - mail_to = self.sql.listUsers(username=new_id or self.assigned)[0].email - # Guard against agent setting personal address to same as account's. - if mail_to == self.account_id: - return - - # Check to see if server_url and virtual_root are set. If so, use them. - # Otherwise, use getBaseURL(). Note that getBaseURL() may not work - # properly if called when the REQUEST object is not available. - if self.server_url: - if self.server_url.endswith('/'): - url = self.server_url + self.virtual_root - else: - url = self.server_url + '/' + self.virtual_root - else: - url = self.getBaseURL() - - zmsg = self.sql.listMessages(ticket_id=self.id)[-1] - body = """You have a new or updated ticket. - -From: %s -To: %s -Subject: %s -Full details: -%s/ticket/%06d""" % (zmsg.from_email, zmsg.msg_to, zmsg.subject, - url, self.id) - msg = self.createMessage(mail_to=mail_to, - mail_from=self.account_id, - subject='You have a new or updated ticket', - body=body)[0] - self.MailHost._send(self.account_id, mail_to, msg.as_string()) - - security.declarePrivate('notifyGroup') - def notifyGroup(self, group_name): - """Notify members of a group that a new mail has arrived. - - Do not notify the group member to whom the ticket has been assigned as - they will usually have been notified by the notifyUser() method. - """ - if self.status == 'spam': - return - zmsg = self.sql.listMessages(ticket_id=self.id)[-1] - subject = '%s has a new or updated ticket' % self.assigned - body = """%s has a new or updated ticket. - -From: %s -To: %s -Subject: %s -Full details: -%s/ticket/%06d""" % (self.assigned, zmsg.from_email, zmsg.msg_to, zmsg.subject, - self.absolute_url(), self.id) - for member in self.sql.listGroupMembers(group_name=group_name): - if member.username != self.assigned: - mail_to = self.sql.listUsers(username=member.username)[0].email - msg = self.createMessage(mail_to=mail_to, - mail_from=self.account_id, - subject=subject, - body=body)[0] - self.MailHost._send(self.account_id, mail_to, msg.as_string()) - - - ## Sending Methods #################################################### - # - # The following methods all handle sending replies from the user - # interface. - # - # http_sendReply \ - # http_sendAndClose \ sendMethod - addNote - # http_sendAndHold / - # http_addNote / - # - # The http methods are partially there for historical reasons, as these - # are what the ZPTs call. These in turn all call the refactored method - # sendMessage, adding information on what method made the call by - # passing the event and change_status variables. - # - # Replacing the http_ methods with a more generic method may cause - # problems by allowing the end user to manually submit with event or - # change_status variables. Permissions would need to be analysed before - # making this change. - # - - security.declareProtected('MailManager Manage Tickets', 'http_sendReply') - def http_sendReply(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, user_signature=Non... [truncated message content] |
From: <ke...@us...> - 2006-05-11 13:40:15
|
Revision: 3000 Author: kevca Date: 2006-05-11 06:39:45 -0700 (Thu, 11 May 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3000&view=rev Log Message: ----------- Retagging release Added Paths: ----------- MailManager/tags/RELENG_2_0_9/ MailManager/tags/RELENG_2_0_9/CHANGES.txt MailManager/tags/RELENG_2_0_9/MailManager.py MailManager/tags/RELENG_2_0_9/Makefile Removed Paths: ------------- MailManager/tags/RELENG_2_0_9/CHANGES.txt MailManager/tags/RELENG_2_0_9/MailManager.py MailManager/tags/RELENG_2_0_9/Makefile Copied: MailManager/tags/RELENG_2_0_9 (from rev 2996, MailManager/branches/RELENG_2_0) Deleted: MailManager/tags/RELENG_2_0_9/CHANGES.txt =================================================================== --- MailManager/branches/RELENG_2_0/CHANGES.txt 2006-05-10 09:23:30 UTC (rev 2996) +++ MailManager/tags/RELENG_2_0_9/CHANGES.txt 2006-05-11 13:39:45 UTC (rev 3000) @@ -1,496 +0,0 @@ -Version 2.0.9 -* BUG FIXES -- Cite last cites the wrong message (#1471644) -- Formatting broken on templates for HTML (#1477664) -- No HTML response for HTML Required (#1472881) -- Selecting No change results in a failure (#1467786) -- Automatic addition of attachments (#1459924) -- Importing fails with alternative timezone (#1485389) - -Version 2.0.8 -* BUG FIXES -- Non existant refresh value leads to security error (#1466274) -- Cannot create HTML tickets (#1466223) -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.7 -* BUG FIXES -- Fixed the setting of next ticket id for MySQL, no longer silently ignores - the option on mailmanager creation and fixes migration (#1412787) -- Send and Close, Send Reply, Send and Hold and Add Note have all been - considerably refactored. This resolves the problem reported where outbound - messages had been silently discarded (#1415497) -- getMail could potentially drop incoming messages whilst collecting from - POP3 accounts. This has now been corrected, and a test case now exists - which reproduces the existing problem and demonstrates it being fixed. - (#1422985) -- i18n fix - on the ticket modify screen "closed" is no longer displayed as - "open" when languages other than English are used (#1423422) -* IMPROVEMENTS -- Massive improvements to the test suite. - -Version 2.0.6 -* IMPROVEMENTS -- We're now using html2text (included) instead of stripogram for converting - HTML to its plain text equivalent (when sending out HTML mail, we also - include a plain text alternative for those who can't read HTML messages). - This results in far prettier plain text conversion. -* BUG FIXES -- Notify user/group flags can now be set/cleared correctly on account - preferences (#1404595). -- Improved address validation. Well, it's now a bit more lax, but it's - completely conformant to RFCs 2821 and 2822 (#1396051). -- MySQL: Default categories are now set up at installation (#1392386). -- HTML parts of multipart/alternative messages are now encoded as UTF-8 - rather than, bizarrely, being forced into ISO-8859-1 (#1368283). -- Make sure the user is informed about *why* test data cannot be removed - (#1345788). - -Version 2.0.5 -* NEW FEATURES -- Tickets can now be created by sending an email (RFE 859117) -- Italian translation. -* BUG FIXES -- MySQL: Adding a user fixed (#1382479) -- MySQL: Users are now migrated correctly (#1378323) -- MySQL: Attachments can now be of virtually any size (#1378224) -- MySQL: MailManager will now start when psycopg is not present (#1378209) -- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) -- PostgreSQL: Migration works even if response target update fails (#1374603) -- Search now works for users in all timezones (#1375345) -- Reports and delete tickets works in all timezones (#1381828) -- The test data now sets 'routing' on the accounts (#1375764) -- Fixed parsing of mails containing NULL characters (#1370866) -- MMImport.py script now uses new URL (#1378385) -- To: field left empty when sending email (#1377027) -- Create Ticket fails when logged in as customer (#1369356) - -Version 2.0.4 -* BUG FIXES -- Prevent multiple users replying to the same ticket by accident (#1371269) -- Filters got broken in 2.0.3, change reverted (#1372814) -- Attachments now set the Content-Type header correctly on download (#13369349) -- Template names with trailing whitespace now work (#1363768) -- Set sql_charset on the mailmanager object during migration. (#1369347) - -Version 2.0.3 -* BUG FIXES -- Be more careful about adding and removing the test data (#1353112, #1345788). -- Improve the Unicode support with the MySQL back end (#1338614). -- Support of can now be removed with MySQL back end (#1338603). -- Fixes to the response target settings (#1336398, #1337506). -- setSession correctly clears the offset and always redirects to - Tickets (#1350429). -- Offer MySQL back end as a migration option (#1340301). -- Tickets now correctly marked as unread with MySQL back end (#1344827). - -Version 2.0.2 -* BUG FIXES -- Ignore the showHTML information in the session for plain text - emails. Reapplied previous bugfix (#1242337) -- Resetting response target to None now updates database (#1336398) -- Reports for targets fixed (#1337506) -* IMPROVEMENTS -- Now has setupdb script for MySQL users -- Split off setupdb code, now available as separate module -- Added in documentation for MySQL configuration - -Version 2.0.1-release -* BUG FIXES -- Disk usage screen now fixed for empty instances (#1244446) -- Initial Manager use now has correct roles set (#1324878) -- Altering roles now works correctly (#1324876) -- Update of response target now works correctly (#1324935) -- Removing notification flag for users/group now works correctly (#1315000) -- Migration now works correctly for 1.1 instances (#1291113) -- Setting response targets no longer generates an error (#1324884) - -Version 2.0.1-rc2 -* BUG FIXES -- No longer depends on psycopg due to import statements -- Migration fixes for MySQL users -- Fixed some scoping issues causing ZSQL methods to break due to - acquisition. -* IMPROVEMENTS -- SQL Directory no longer uses FileSystemSite.DirectoryView meaning - that the SQL methods can be overridden by 3rd parties. -- Test suite now has added hooks for overloading object types - -Version 2.0.1-rc1 -* BUG FIXES -- Test suite now covers text search cache consistency, cleared issues - with MySQL's mysql_max_allowed_packet variable -- Postgres support now appears stable - -Version 2.0.1-beta1 -* BUG FIXES -- Merged in all of the changes between 2.0r6 and 2.0r7 -- Fixed the index bug which was resulting in duplicate tickets being - displayed on the list page - -Version 2.0.1-alpha1 -* NEW FEATURES -- Adds in initial MySQL support -- SQL methods given addition parameters to deal with new MySQL support -- Vastly improved test suite - regression test suite for the database code. - -Version 2.0r7 -* BUG FIXES -- Subsequent pages for search were not being returned due to misuse of the - SESSION variable. These are now handled correctly (#1276412) -- Categories and templates were moved entirely to SQL. Upgrade needs a - migration to function correctly. (#1276414) -- listTicket method now correctly searches for subjects -- Fixes a Unicode handling error in the MailMixing class, which could - potentially block up incoming mail -* IMPROVEMENTS -- Postgres installation documentation rewritten -- Changes to loading of test datasets -- Test data set improved, now covers more functionality - -Version 2.0r6 -* BUG FIXES -- Fixed the positioning of the order by section of the listTickets query, - fixes broken ordering for search. -- The listCategories SQL method was broken, which was used by the Reports - pages. Reports for categories other than category0 were broken. - -Version 2.0 -* BUG FIXES -- Fix the security declaration of checkPOP3SSL(). - -Version 2.0 RC 3 -* NEW FEATURES -- Introduce some generalisations, ready for MySQL support in 2.0.1 -- Beginnings of epydoc API documentation. -* BUG FIXES -- Update the version number on migration. (#1229769) -- Robustify the autoreply code to deal with fatal errors. (#1240870) -- When a new message comes in with a ticket id in the subject line, - verify that the ticket already exists instead of assuming that it - does. (#1240711) -- Format the email address in the To: field for replies. (#1230837) -- Ignore the showHTML information in the session for plain text - emails. (#1242337) -- Record the logged in user who sent a reply to a ticket. (#1242958) - -Version 2.0 RC 2 -* BUG FIXES -- multipart/alternative mail with both an HTML and a plain text body now - only display one of them at a time (1227265) -- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) -- Migration updates the mm version -- Create ticket works again (1227744) - -Version 2.0 RC 1 -* BUG FIXES -- Stripogram can now be installed as a Python product in site-packages (1226633) -- Reply-To: header is used in favour of From: (1226156) -- Notifiction emails can handle non-ASCII subject lines (1224784) -- URLs are now accurate on notification emails (1224756) -- Character encodings set correctly on all web pages (1224731) -- Send & Close now goes to the next ticket (1224164) -- Improved date parsing (1223755) -- Respond By: now displayed for tickets with a response target (1222528) -- Attachment titles are now decoded correctly (1223974) - -Version 2.0 Beta 2 -* BUG FIXES -- Make the email validation less strict. (1283401) -- Customers can no longer have email addresses which are used - by an account. (1216414) -- Migration: Drop filters which refer to unknown users/groups. (1216361) -- Migration: Be more careful about coercing dates into ISO8601. (1216534) -- Clarified notification email setup. (1217403) -- Fixed Chinese translation. (1215645) -- Store time zone information in the pgsl database. - -Version 2.0 Beta 1 -* NEW FEATURES -- Added a Chinese translation. -- Add some documentation for creating the Postgres database and point to - detailed docs on the Windows installation process. -- Updated the help files to reflect the new version's feature set. -* BUG FIXES -- Make mbox exports have a more meaningful filename. -- Deal with RFC2047-encoded headers correctly. (1212035) -- Make the disk usage a bit more friendly. (1213604) -- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) -- Epoz now has a white background on all browsers. (1208912) - -Version 2.0 alpha 2 -* NEW FEATURES -- Support for retrieving POP3 mail over SSL (RFE 1204236) -- Optionally notify all in a group of new messages (RFE 1208284) -* BUG FIXES -- Help tab no longer visible after logout (1207656) -- Adding a MailManager instance now creates an initial user (1207022) -- Changes to users such as adding a signature no longer clear password (1207017) -- HTML tickets work properly (1205720, 1205717) -- Time to close tickets recorded (1204825) -- Reply to all button improved (1204805) -- Reassignment notification added (1204372) -- Groups redesigned (1204312) -- Adding/removing attachments no longer clears other form fields (1204272) -- Date translations fixed (1204268) -- Templates fixed (1204267) -- Overdue tickets function properly (1203141) -- Performance v. account report fixed (1196685) -- GetMail fixed (1196606) -- Referential integrity broken on mm_message table (1194418) -- Login link on logout page fixed (1204811) -- Signature handling improved (1204877) -- HTML email fixed (1204987) - -Version 2.0 alpha 1 -* NEW FEATURES -- A complete redesign using PostgreSQL as a replacement for the ZODB in order - to improve performance and scalability. -- Can now use SMTP servers that require a login (RFE 939720) - -Version 1.1 -* NEW FEATURES -- Internationalization of the help documentation. -* BUG FIXES -- Make sure that sending mail out is the last thing done, which should reduce - the window where a ConflictError would cause duplicate emails to be sent. -- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other - than a MessageParseError. Otherwise we wind up hard-bouncing (instead of - retrying) on a ConflictError. - -Version 1.1-rc5 -* BUG FIXES -- Comptatible with Zope 2.6/Python 2.1 again - -Version 1.1-rc4 -* BUG FIXES -- Standard attachments fixed (1110435) -- Clear supporter link fixed after i18n problem (1110436) - -Version 1.1-rc3 -* NEW FEATURES -[Unfortunately it was essential to add the following features at - this late stage for commercial reasons.] -- Added archive/restore tickets (RFE 953290) -- Create ticket can now have multiple attachments (RFE 987700) -- Replies can also have multiple attachments (RFE 859141) -- Standard set of attachments can be stored on the system (RFE 985469) -* BUG FIXES -- Edit of mail headers now works properly (RFE 859102) -- Fixed broken migration - -Version 1.1-rc2 -* BUG FIXES -- Now possible to add/edit account without SSL (1090041) -- Spam tickets no longer appear on the 'New' tickets list - -Version 1.1-rc1 -* NEW FEATURES -- Users notified on re-assignment of tickets (RFE 978035) -- Internationalisation (i18n) added ready for translation to other languages. -- Support for SSL connections to remote IMAP server. -- Any mail headers may be used in filters (RFE 859102) -* BUG FIXES -- Report graphs now work for user-defined categories (978404) -- File downloads now work when there is a space in the filename (985150) -- Remove support ticket feature fixed (985677) -- Users no longer notified if spam is received (1059104) -- Spam no longer displayed on default ticket listing views -- Templates with names ending in a space may now be deleted/edited (1003514) - -Version 1.0 -No changes from 1.0-rc2 - -Version 1.0-rc2 -* NEW FEATURES -- Batch classification of tickets. (RFE 859114 and 957719) -* BUG FIXES -- Migration works when filters are of mixed formats. (945956) -- Migration works when groups are of mixed formats. (945959) -- Messages from mailer-daemon with a real name do not cause a loop. (952864) -- Works on Firefox for Mac when reply has no attachment. (963291) -- Report graphs work for more than 200 tickets in a period. (964144) - -Version 1.0-rc1 -* NEW FEATURES -- Choice of date format. (RFE 869827) -- Choice of timezone (currently only on Unix). (RFE 869827) -- Script to import mail from Unix mailboxes. (RFE 903031) -- Shortcut icon. -- Importing of tickets enabled. -* IMPROVEMENTS -- Added global error slot and adjusted settings screens to use it. (873232) -- Message response form fields remembered in request. -- An instance's children may be migrated even when it is not. -* BUG FIXES -- Mail check thread delays till Zope is ready in 2.7 as well. (835642) -- GroupSettings page template works with new-style groups. (887785) -- Problems sending mail caught and reported to the user or logged. (892947) -- Message ID added to outgoing messages. (895039) -- Newlines in the Cc field no longer break the JavaScript. (904033) -- Private notes and replies no longer lose headers in migration. (904076) -- Private notes may no longer have a To field. (912534) -- Ticket ownership transferred when user deleted. (925344) -- Customers are persistent. (930654) -- Sending files with a bad mime type does not cause an exception. (934133) -- HTML templates no longer have extra breaks added. (934235) -- MailManager.getMail() returns an empty string on success. (934902) -- Add customer form checks fields are filled. (938631) -- Fixed links to AccountSettings page. (938678) - -Version 1.0-b4 -* BUG FIX -- Fixed error when a new thread is started and notification is on. - -Version 1.0-b3 -* NEW FEATURES -- Supporter mechanism for associating tickets fully implemented. -- URLs in messages rendered as hyperlinks. -- Filters can assign to groups as well as users. -* IMPROVEMENTS -- Assigned agent mailed at every new message in ticket, customer only - when he starts a new ticket. This reverses the previous behaviour. -- Tickets can be re-opened by arrival of a new message or through - Ticket Details box. -- Migration version distinguished from product version. -- Group now a class; ensures that group members are assigned to evenly. -- By default users only see tickets assigned to them. -- Export (view raw messages) link added to Ticket index page. -* BUG FIXES -- Account signatures are now used. -- HTML setting on auto replies and templates respected. -- Agents can be deleted. -- Several others (see SourceForge bugs 859030 to 873233). - -Version 1.0-b2 -* NEW FEATURES -- Migration -- HTML messages may now be viewed. -- Most recent search results always available. -- Response target added as option in filters and create ticket screen. -* IMPROVEMENTS -- More robust ticket navigation (works with virtual hosting, "prev"/"next" - links always available, "list" goes to batch containing current ticket). -- Improved handling and presentation of attachments. -- Help screens updated (not quite finished). -- Improved interface to reports (still needs work though). -- All character sets displayed correctly (as far as the browser's fonts allow). -- Mail fetching scripts have an option to specify MailManager's URL . -- Search by from name no longer requires exact match. -- Much Python code removed from page templates. -* BUG FIXES -- Overdue ticket view and searches for overdue tickets now work. -- Automatic mail checking continues after product is refreshed. -- Numerous others (see SourceForge bugs 832932 to 858688). - -Version 1.0-b1 -- Dependence on MailHost product removed. -- Message class now wraps Message object from Python email package, - allowing mails to be retreived in their original form. -- Automatic mail fetching introduced. -- Code for creating e-mails through the web brought together in a new - module and handling added for text entered in any character set. -- Each account is now a separate folder, ready for per account - security settings. -- Fetching and handling of incoming mail moved to new Account class. -- Self service interface to allow customers to manage their own tickets. -- Better handling of HTML emails. -- Create ticket now has more sensible defaults. -- Users now deleted properly. -- Calculates an approximation of disk space used. -- Added Property Managers to ease debugging. -- Users with 'Settings' access can no longer view ZMI. -- Numerous bug fixes. - -Version 0.96 -- By default, shows newest tickets first rather than oldest -- The subject of a ticket can now be changed -- If more email is added to a read ticket it goes back to being unread (bold) -- Advises if an attachment is of a dangerous type (for Windows users) -- Attachments now download with original filename & security improved -- Browser bug in IE prevented selection of user on tickets screen (797221) -- Two extra user definable categories added -- Code tidied up & minor bug fixes - -Version 0.95 -- Added a 'Spam' status and amended reports, tickets & filters accordingly -- Can now delete spam tickets without closing them (783289) -- Now handles AppleDouble attachments correctly (787671) -- POP3 mailbox lock removed if there is an error (787677) -- IMAP mailbox lock removed if there is an error -- Mails that can't be processed are now stored raw rather than deleted -- Added 'priority' and 'assigned' to Search screen (785360) -- Basic export of reports to Excel implemented -- Now record and report on times to close as well as times to respond -- Other minor fixes - -Version 0.94 -- Ticket status is displayed correctly in all circumstances -- Adding attachments when creating a ticket thru the web now works as expected. -- Users can be notified of new tickets in all circumstances (783955) -- Allow selection of fields to display on tickets screen (783863) -- Added submenu to the Create ticket screen -- Other minor fixes - -Version 0.93 -- Improved attachment handling and display -- Improved ticket navigation (now back/list/next on ticket view) (780783) -- Fixed a bug in the reporting graphs where the last day in the month could - be missed -- Added an auto refresh option for tickets screen (feature request 781294) -- By default tickets created through the web are assigned to the logged in user, - rather than the first user alphabetically -- Improved outgoing mail -- More advanced standard filter -- Tightened up security -- Help button now context sensitive - -Version 0.92 -- Adding a user with the Reports permission now works as expected (779986) -- Account deletion now works properly (779989) -- Admin password now hidden on the Add MailManager page (779987) - -Thanks to Ronan Amicel for spotting these four bugs. - -- Ticket deletion system improved. -- Supporting tickets system now works better. - -Version 0.91 -- Fixed the Account Help screen. Now displays properly and text is accurate. -- Fixed the 'Change details' section on a ticket screen so the user the ticket - is assigned to is displayed by default. Also ensured user names are displayed - in alphabetical order. -- Categories can now be deleted. Deleted categories will still appear in - Reports, System Settings and on the Search page until every ticket with that - category has been deleted from the system. - -Thanks to Kevin Gill for spotting these bugs. - -Version 0.9 -The first open source release of MailManager. Based on the commercial version -however with some major changes: - -- Uses the Zope Object DB instead of an external relational database. This - changes the performance, it is faster in some areas and slower in others. It - makes the product much easier to install. -- Use of HTML to generate the graphs. Not as attractive as the commercial - version but saves the difficulty of installing extensions which were not - stable on all platforms. -- Improved text editor. Epoz is used to provide rich text editing allowing - easy creation of HTML mail. -- Improved text indexing. Greatly expanded query options. -- Bug fixes. A number of minor bugs were fixed. Copied: MailManager/tags/RELENG_2_0_9/CHANGES.txt (from rev 2997, MailManager/branches/RELENG_2_0/CHANGES.txt) =================================================================== --- MailManager/tags/RELENG_2_0_9/CHANGES.txt (rev 0) +++ MailManager/tags/RELENG_2_0_9/CHANGES.txt 2006-05-11 13:39:45 UTC (rev 3000) @@ -0,0 +1,497 @@ +Version 2.0.9 +* BUG FIXES +- Cite last cites the wrong message (#1471644) +- Formatting broken on templates for HTML (#1477664) +- No HTML response for HTML Required (#1472881) +- Selecting No change results in a failure (#1467786) +- Automatic addition of attachments (#1459924) +- Importing fails with alternative timezone (#1485389) +- UI Allows creation of empty groups (#1486433) + +Version 2.0.8 +* BUG FIXES +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.7 +* BUG FIXES +- Fixed the setting of next ticket id for MySQL, no longer silently ignores + the option on mailmanager creation and fixes migration (#1412787) +- Send and Close, Send Reply, Send and Hold and Add Note have all been + considerably refactored. This resolves the problem reported where outbound + messages had been silently discarded (#1415497) +- getMail could potentially drop incoming messages whilst collecting from + POP3 accounts. This has now been corrected, and a test case now exists + which reproduces the existing problem and demonstrates it being fixed. + (#1422985) +- i18n fix - on the ticket modify screen "closed" is no longer displayed as + "open" when languages other than English are used (#1423422) +* IMPROVEMENTS +- Massive improvements to the test suite. + +Version 2.0.6 +* IMPROVEMENTS +- We're now using html2text (included) instead of stripogram for converting + HTML to its plain text equivalent (when sending out HTML mail, we also + include a plain text alternative for those who can't read HTML messages). + This results in far prettier plain text conversion. +* BUG FIXES +- Notify user/group flags can now be set/cleared correctly on account + preferences (#1404595). +- Improved address validation. Well, it's now a bit more lax, but it's + completely conformant to RFCs 2821 and 2822 (#1396051). +- MySQL: Default categories are now set up at installation (#1392386). +- HTML parts of multipart/alternative messages are now encoded as UTF-8 + rather than, bizarrely, being forced into ISO-8859-1 (#1368283). +- Make sure the user is informed about *why* test data cannot be removed + (#1345788). + +Version 2.0.5 +* NEW FEATURES +- Tickets can now be created by sending an email (RFE 859117) +- Italian translation. +* BUG FIXES +- MySQL: Adding a user fixed (#1382479) +- MySQL: Users are now migrated correctly (#1378323) +- MySQL: Attachments can now be of virtually any size (#1378224) +- MySQL: MailManager will now start when psycopg is not present (#1378209) +- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) +- PostgreSQL: Migration works even if response target update fails (#1374603) +- Search now works for users in all timezones (#1375345) +- Reports and delete tickets works in all timezones (#1381828) +- The test data now sets 'routing' on the accounts (#1375764) +- Fixed parsing of mails containing NULL characters (#1370866) +- MMImport.py script now uses new URL (#1378385) +- To: field left empty when sending email (#1377027) +- Create Ticket fails when logged in as customer (#1369356) + +Version 2.0.4 +* BUG FIXES +- Prevent multiple users replying to the same ticket by accident (#1371269) +- Filters got broken in 2.0.3, change reverted (#1372814) +- Attachments now set the Content-Type header correctly on download (#13369349) +- Template names with trailing whitespace now work (#1363768) +- Set sql_charset on the mailmanager object during migration. (#1369347) + +Version 2.0.3 +* BUG FIXES +- Be more careful about adding and removing the test data (#1353112, #1345788). +- Improve the Unicode support with the MySQL back end (#1338614). +- Support of can now be removed with MySQL back end (#1338603). +- Fixes to the response target settings (#1336398, #1337506). +- setSession correctly clears the offset and always redirects to + Tickets (#1350429). +- Offer MySQL back end as a migration option (#1340301). +- Tickets now correctly marked as unread with MySQL back end (#1344827). + +Version 2.0.2 +* BUG FIXES +- Ignore the showHTML information in the session for plain text + emails. Reapplied previous bugfix (#1242337) +- Resetting response target to None now updates database (#1336398) +- Reports for targets fixed (#1337506) +* IMPROVEMENTS +- Now has setupdb script for MySQL users +- Split off setupdb code, now available as separate module +- Added in documentation for MySQL configuration + +Version 2.0.1-release +* BUG FIXES +- Disk usage screen now fixed for empty instances (#1244446) +- Initial Manager use now has correct roles set (#1324878) +- Altering roles now works correctly (#1324876) +- Update of response target now works correctly (#1324935) +- Removing notification flag for users/group now works correctly (#1315000) +- Migration now works correctly for 1.1 instances (#1291113) +- Setting response targets no longer generates an error (#1324884) + +Version 2.0.1-rc2 +* BUG FIXES +- No longer depends on psycopg due to import statements +- Migration fixes for MySQL users +- Fixed some scoping issues causing ZSQL methods to break due to + acquisition. +* IMPROVEMENTS +- SQL Directory no longer uses FileSystemSite.DirectoryView meaning + that the SQL methods can be overridden by 3rd parties. +- Test suite now has added hooks for overloading object types + +Version 2.0.1-rc1 +* BUG FIXES +- Test suite now covers text search cache consistency, cleared issues + with MySQL's mysql_max_allowed_packet variable +- Postgres support now appears stable + +Version 2.0.1-beta1 +* BUG FIXES +- Merged in all of the changes between 2.0r6 and 2.0r7 +- Fixed the index bug which was resulting in duplicate tickets being + displayed on the list page + +Version 2.0.1-alpha1 +* NEW FEATURES +- Adds in initial MySQL support +- SQL methods given addition parameters to deal with new MySQL support +- Vastly improved test suite - regression test suite for the database code. + +Version 2.0r7 +* BUG FIXES +- Subsequent pages for search were not being returned due to misuse of the + SESSION variable. These are now handled correctly (#1276412) +- Categories and templates were moved entirely to SQL. Upgrade needs a + migration to function correctly. (#1276414) +- listTicket method now correctly searches for subjects +- Fixes a Unicode handling error in the MailMixing class, which could + potentially block up incoming mail +* IMPROVEMENTS +- Postgres installation documentation rewritten +- Changes to loading of test datasets +- Test data set improved, now covers more functionality + +Version 2.0r6 +* BUG FIXES +- Fixed the positioning of the order by section of the listTickets query, + fixes broken ordering for search. +- The listCategories SQL method was broken, which was used by the Reports + pages. Reports for categories other than category0 were broken. + +Version 2.0 +* BUG FIXES +- Fix the security declaration of checkPOP3SSL(). + +Version 2.0 RC 3 +* NEW FEATURES +- Introduce some generalisations, ready for MySQL support in 2.0.1 +- Beginnings of epydoc API documentation. +* BUG FIXES +- Update the version number on migration. (#1229769) +- Robustify the autoreply code to deal with fatal errors. (#1240870) +- When a new message comes in with a ticket id in the subject line, + verify that the ticket already exists instead of assuming that it + does. (#1240711) +- Format the email address in the To: field for replies. (#1230837) +- Ignore the showHTML information in the session for plain text + emails. (#1242337) +- Record the logged in user who sent a reply to a ticket. (#1242958) + +Version 2.0 RC 2 +* BUG FIXES +- multipart/alternative mail with both an HTML and a plain text body now + only display one of them at a time (1227265) +- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) +- Migration updates the mm version +- Create ticket works again (1227744) + +Version 2.0 RC 1 +* BUG FIXES +- Stripogram can now be installed as a Python product in site-packages (1226633) +- Reply-To: header is used in favour of From: (1226156) +- Notifiction emails can handle non-ASCII subject lines (1224784) +- URLs are now accurate on notification emails (1224756) +- Character encodings set correctly on all web pages (1224731) +- Send & Close now goes to the next ticket (1224164) +- Improved date parsing (1223755) +- Respond By: now displayed for tickets with a response target (1222528) +- Attachment titles are now decoded correctly (1223974) + +Version 2.0 Beta 2 +* BUG FIXES +- Make the email validation less strict. (1283401) +- Customers can no longer have email addresses which are used + by an account. (1216414) +- Migration: Drop filters which refer to unknown users/groups. (1216361) +- Migration: Be more careful about coercing dates into ISO8601. (1216534) +- Clarified notification email setup. (1217403) +- Fixed Chinese translation. (1215645) +- Store time zone information in the pgsl database. + +Version 2.0 Beta 1 +* NEW FEATURES +- Added a Chinese translation. +- Add some documentation for creating the Postgres database and point to + detailed docs on the Windows installation process. +- Updated the help files to reflect the new version's feature set. +* BUG FIXES +- Make mbox exports have a more meaningful filename. +- Deal with RFC2047-encoded headers correctly. (1212035) +- Make the disk usage a bit more friendly. (1213604) +- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) +- Epoz now has a white background on all browsers. (1208912) + +Version 2.0 alpha 2 +* NEW FEATURES +- Support for retrieving POP3 mail over SSL (RFE 1204236) +- Optionally notify all in a group of new messages (RFE 1208284) +* BUG FIXES +- Help tab no longer visible after logout (1207656) +- Adding a MailManager instance now creates an initial user (1207022) +- Changes to users such as adding a signature no longer clear password (1207017) +- HTML tickets work properly (1205720, 1205717) +- Time to close tickets recorded (1204825) +- Reply to all button improved (1204805) +- Reassignment notification added (1204372) +- Groups redesigned (1204312) +- Adding/removing attachments no longer clears other form fields (1204272) +- Date translations fixed (1204268) +- Templates fixed (1204267) +- Overdue tickets function properly (1203141) +- Performance v. account report fixed (1196685) +- GetMail fixed (1196606) +- Referential integrity broken on mm_message table (1194418) +- Login link on logout page fixed (1204811) +- Signature handling improved (1204877) +- HTML email fixed (1204987) + +Version 2.0 alpha 1 +* NEW FEATURES +- A complete redesign using PostgreSQL as a replacement for the ZODB in order + to improve performance and scalability. +- Can now use SMTP servers that require a login (RFE 939720) + +Version 1.1 +* NEW FEATURES +- Internationalization of the help documentation. +* BUG FIXES +- Make sure that sending mail out is the last thing done, which should reduce + the window where a ConflictError would cause duplicate emails to be sent. +- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other + than a MessageParseError. Otherwise we wind up hard-bouncing (instead of + retrying) on a ConflictError. + +Version 1.1-rc5 +* BUG FIXES +- Comptatible with Zope 2.6/Python 2.1 again + +Version 1.1-rc4 +* BUG FIXES +- Standard attachments fixed (1110435) +- Clear supporter link fixed after i18n problem (1110436) + +Version 1.1-rc3 +* NEW FEATURES +[Unfortunately it was essential to add the following features at + this late stage for commercial reasons.] +- Added archive/restore tickets (RFE 953290) +- Create ticket can now have multiple attachments (RFE 987700) +- Replies can also have multiple attachments (RFE 859141) +- Standard set of attachments can be stored on the system (RFE 985469) +* BUG FIXES +- Edit of mail headers now works properly (RFE 859102) +- Fixed broken migration + +Version 1.1-rc2 +* BUG FIXES +- Now possible to add/edit account without SSL (1090041) +- Spam tickets no longer appear on the 'New' tickets list + +Version 1.1-rc1 +* NEW FEATURES +- Users notified on re-assignment of tickets (RFE 978035) +- Internationalisation (i18n) added ready for translation to other languages. +- Support for SSL connections to remote IMAP server. +- Any mail headers may be used in filters (RFE 859102) +* BUG FIXES +- Report graphs now work for user-defined categories (978404) +- File downloads now work when there is a space in the filename (985150) +- Remove support ticket feature fixed (985677) +- Users no longer notified if spam is received (1059104) +- Spam no longer displayed on default ticket listing views +- Templates with names ending in a space may now be deleted/edited (1003514) + +Version 1.0 +No changes from 1.0-rc2 + +Version 1.0-rc2 +* NEW FEATURES +- Batch classification of tickets. (RFE 859114 and 957719) +* BUG FIXES +- Migration works when filters are of mixed formats. (945956) +- Migration works when groups are of mixed formats. (945959) +- Messages from mailer-daemon with a real name do not cause a loop. (952864) +- Works on Firefox for Mac when reply has no attachment. (963291) +- Report graphs work for more than 200 tickets in a period. (964144) + +Version 1.0-rc1 +* NEW FEATURES +- Choice of date format. (RFE 869827) +- Choice of timezone (currently only on Unix). (RFE 869827) +- Script to import mail from Unix mailboxes. (RFE 903031) +- Shortcut icon. +- Importing of tickets enabled. +* IMPROVEMENTS +- Added global error slot and adjusted settings screens to use it. (873232) +- Message response form fields remembered in request. +- An instance's children may be migrated even when it is not. +* BUG FIXES +- Mail check thread delays till Zope is ready in 2.7 as well. (835642) +- GroupSettings page template works with new-style groups. (887785) +- Problems sending mail caught and reported to the user or logged. (892947) +- Message ID added to outgoing messages. (895039) +- Newlines in the Cc field no longer break the JavaScript. (904033) +- Private notes and replies no longer lose headers in migration. (904076) +- Private notes may no longer have a To field. (912534) +- Ticket ownership transferred when user deleted. (925344) +- Customers are persistent. (930654) +- Sending files with a bad mime type does not cause an exception. (934133) +- HTML templates no longer have extra breaks added. (934235) +- MailManager.getMail() returns an empty string on success. (934902) +- Add customer form checks fields are filled. (938631) +- Fixed links to AccountSettings page. (938678) + +Version 1.0-b4 +* BUG FIX +- Fixed error when a new thread is started and notification is on. + +Version 1.0-b3 +* NEW FEATURES +- Supporter mechanism for associating tickets fully implemented. +- URLs in messages rendered as hyperlinks. +- Filters can assign to groups as well as users. +* IMPROVEMENTS +- Assigned agent mailed at every new message in ticket, customer only + when he starts a new ticket. This reverses the previous behaviour. +- Tickets can be re-opened by arrival of a new message or through + Ticket Details box. +- Migration version distinguished from product version. +- Group now a class; ensures that group members are assigned to evenly. +- By default users only see tickets assigned to them. +- Export (view raw messages) link added to Ticket index page. +* BUG FIXES +- Account signatures are now used. +- HTML setting on auto replies and templates respected. +- Agents can be deleted. +- Several others (see SourceForge bugs 859030 to 873233). + +Version 1.0-b2 +* NEW FEATURES +- Migration +- HTML messages may now be viewed. +- Most recent search results always available. +- Response target added as option in filters and create ticket screen. +* IMPROVEMENTS +- More robust ticket navigation (works with virtual hosting, "prev"/"next" + links always available, "list" goes to batch containing current ticket). +- Improved handling and presentation of attachments. +- Help screens updated (not quite finished). +- Improved interface to reports (still needs work though). +- All character sets displayed correctly (as far as the browser's fonts allow). +- Mail fetching scripts have an option to specify MailManager's URL . +- Search by from name no longer requires exact match. +- Much Python code removed from page templates. +* BUG FIXES +- Overdue ticket view and searches for overdue tickets now work. +- Automatic mail checking continues after product is refreshed. +- Numerous others (see SourceForge bugs 832932 to 858688). + +Version 1.0-b1 +- Dependence on MailHost product removed. +- Message class now wraps Message object from Python email package, + allowing mails to be retreived in their original form. +- Automatic mail fetching introduced. +- Code for creating e-mails through the web brought together in a new + module and handling added for text entered in any character set. +- Each account is now a separate folder, ready for per account + security settings. +- Fetching and handling of incoming mail moved to new Account class. +- Self service interface to allow customers to manage their own tickets. +- Better handling of HTML emails. +- Create ticket now has more sensible defaults. +- Users now deleted properly. +- Calculates an approximation of disk space used. +- Added Property Managers to ease debugging. +- Users with 'Settings' access can no longer view ZMI. +- Numerous bug fixes. + +Version 0.96 +- By default, shows newest tickets first rather than oldest +- The subject of a ticket can now be changed +- If more email is added to a read ticket it goes back to being unread (bold) +- Advises if an attachment is of a dangerous type (for Windows users) +- Attachments now download with original filename & security improved +- Browser bug in IE prevented selection of user on tickets screen (797221) +- Two extra user definable categories added +- Code tidied up & minor bug fixes + +Version 0.95 +- Added a 'Spam' status and amended reports, tickets & filters accordingly +- Can now delete spam tickets without closing them (783289) +- Now handles AppleDouble attachments correctly (787671) +- POP3 mailbox lock removed if there is an error (787677) +- IMAP mailbox lock removed if there is an error +- Mails that can't be processed are now stored raw rather than deleted +- Added 'priority' and 'assigned' to Search screen (785360) +- Basic export of reports to Excel implemented +- Now record and report on times to close as well as times to respond +- Other minor fixes + +Version 0.94 +- Ticket status is displayed correctly in all circumstances +- Adding attachments when creating a ticket thru the web now works as expected. +- Users can be notified of new tickets in all circumstances (783955) +- Allow selection of fields to display on tickets screen (783863) +- Added submenu to the Create ticket screen +- Other minor fixes + +Version 0.93 +- Improved attachment handling and display +- Improved ticket navigation (now back/list/next on ticket view) (780783) +- Fixed a bug in the reporting graphs where the last day in the month could + be missed +- Added an auto refresh option for tickets screen (feature request 781294) +- By default tickets created through the web are assigned to the logged in user, + rather than the first user alphabetically +- Improved outgoing mail +- More advanced standard filter +- Tightened up security +- Help button now context sensitive + +Version 0.92 +- Adding a user with the Reports permission now works as expected (779986) +- Account deletion now works properly (779989) +- Admin password now hidden on the Add MailManager page (779987) + +Thanks to Ronan Amicel for spotting these four bugs. + +- Ticket deletion system improved. +- Supporting tickets system now works better. + +Version 0.91 +- Fixed the Account Help screen. Now displays properly and text is accurate. +- Fixed the 'Change details' section on a ticket screen so the user the ticket + is assigned to is displayed by default. Also ensured user names are displayed + in alphabetical order. +- Categories can now be deleted. Deleted categories will still appear in + Reports, System Settings and on the Search page until every ticket with that + category has been deleted from the system. + +Thanks to Kevin Gill for spotting these bugs. + +Version 0.9 +The first open source release of MailManager. Based on the commercial version +however with some major changes: + +- Uses the Zope Object DB instead of an external relational database. This + changes the performance, it is faster in some areas and slower in others. It + makes the product much easier to install. +- Use of HTML to generate the graphs. Not as attractive as the commercial + version but saves the difficulty of installing extensions which were not + stable on all platforms. +- Improved text editor. Epoz is used to provide rich text editing allowing + easy creation of HTML mail. +- Improved text indexing. Greatly expanded query options. +- Bug fixes. A number of minor bugs were fixed. Deleted: MailManager/tags/RELENG_2_0_9/MailManager.py =================================================================== --- MailManager/branches/RELENG_2_0/MailManager.py 2006-05-10 09:23:30 UTC (rev 2996) +++ MailManager/tags/RELENG_2_0_9/MailManager.py 2006-05-11 13:39:45 UTC (rev 3000) @@ -1,2909 +0,0 @@ -# (c) Copyright Logicalware Ltd 2002-2005 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ - -__version__ = '$Revision$' - -# Zope modules. -from Globals import InitializeClass, DTMLFile, package_home -from Products.PageTemplates.PageTemplateFile import PageTemplateFile -from AccessControl import ClassSecurityInfo, getSecurityManager -from AccessControl.AuthEncoding import pw_encrypt -from Acquisition import aq_inner -from OFS.Folder import Folder -from DateTime import DateTime -from zExceptions import BadRequest, Unauthorized - -# Modules from this package. -from MailMixin import MailMixin -from MMImportHandler import MMImportHandler - -# Add methods. -from Products.CookieCrumbler.CookieCrumbler import manage_addCC -from Products.FileSystemSite.DirectoryView import manage_addDirectoryView -from Products.MailHost.MailHost import manage_addMailHost -from Products.PageTemplates.ZopePageTemplate import manage_addPageTemplate -from Products.ZSQLMethods.SQL import manage_addZSQLMethod -from Products.MailManager.sql import MailManagerSQL -from MMUserFolder import manage_addMMUserFolder - -# Python library modules. -import base64, cgi, datetime, os, re, stat, time -from calendar import monthrange -from email.Utils import formataddr, parseaddr, mktime_tz, parsedate_tz -from datetime import datetime -try: - from poplib import POP3_SSL - pop3_ssl = True -except ImportError: - pop3_ssl = False - -import poplib -import imaplib - -from tempfile import TemporaryFile -from xml.sax.saxutils import XMLGenerator -from xml.sax import make_parser - -# Database support -try: - import MySQLdb -except ImportError, e: - pass - -try: - import psycopg -except ImportError, e: - pass - -import zLOG - -# ZopeScheduler -try: - from Products.ZopeScheduler.ISchedulingTask import ISchedulingTask - ZOPE_SCHEDULER_PRESENT = True -except ImportError: - ZOPE_SCHEDULER_PRESENT = False - -# mx.DateTime for parsing email dates -import mx.DateTime -import mx.DateTime.ISO -from mx.DateTime.Parser import DateTimeFromString - -# Test data to be used under the ZMI and test suite -from tests.classes.mmtestdata import TestDataMixin - -try: - from stripogram import html2safehtml -except ImportError: - from Products.stripogram import html2safehtml - -from Products.MailManager.support.html2text import html2text - -# Constants. -mversion = 15 -url_pat = re.compile(r'(https?|ftp)://\S*[^,;:.!?)\]\'"\s]') - -__extra_epydoc_fields__ = [ - 'teststatus', - 'requiresrequest', - 'modifies' - ] - -manage_addMailManagerForm = PageTemplateFile('www/manage_addMailManagerForm', - globals()) - -def manage_addMailManager(self, id, title, admin_username=None, admin_email=None, - password=None, confirm_password='', first_tid=1, - create_tables=False, schema='', dbplatform='postgres', - REQUEST=None): - """Adds a MailManager to a folder.""" - # Test for missing mandatory fields. These are fields that should - # have string values but not the empty string that may come from - # the form. first_tid cannot be missed from the form because - # of the int converters in it. - s = 'You must fill in the %s field.' - mandatories = ['id', 'admin_username', 'admin_email', 'password'] - if REQUEST is not None: mandatories.append('confirm_password') - try: - for field in mandatories: - if not locals()[field]: - raise BadRequest, s % field.replace('_', ' ').title() - if REQUEST is not None and confirm_password != password: - raise BadRequest, 'Admin Password and Confirm Admin Password fields must match.' - if schema and dbplatform != 'postgres': - raise BadRequest, 'Schemas are only supported on PostgreSQL.' - except BadRequest, msg: - if REQUEST is not None: - REQUEST.set('manage_tabs_message', msg) - return self.manage_addMailManagerForm(self, REQUEST) - else: - raise BadRequest, msg - - newMailManager = MailManager(id, title, admin_username, admin_email, - password, first_tid, create_tables, schema, dbplatform, - REQUEST) - self._setObject(id, newMailManager) - if REQUEST is not None: - return self.manage_main(self, REQUEST) - - -class MailManager(Folder, MailMixin, TestDataMixin): - """A mail management system. - - @group miscUtils: validEmail*, testMail*, row2xml*, process_task*, - migrate*, getSchemaName, listTimeZones, getBaseURL, getBatchPages*, - getMail*, generateMail*, formatTarget*, formatBody*, export*, - doSearch*, displayTime*, dateFormat*, configureMySQL, configurePostgres, - checkPOP3SSL, addZSQLMethods - @group zmiMethods: manage_* - @group ticketMethods: createTicket*, createMessage*, addMessageToTicket*, - getTicket*, listTickets* - @group attachmentMethods: addAttachment*, delAttachment*, - addStandardAttachment*, delStandardAttachment*, deleteAttachment* - @group webMethods: setSession*, changeSelected*, setReport* - @group userMethods: addMMUser*, editMMUser*, delAgent*, getUserDetails*, - getUserConstraints*, addOrEditCustomer*, delCustomer*, getCustomer* - @group accountMethods: addOrEditAccount*, delAccount*, getAccount* - @group groupMethods: addGroup*, editGroup*, delGroup*, getGroupConstraints*, - addOrEditGroup* - @group filterMethods: addFilter*, getFilterText*, deleteFilter*, - addFilterHeader*, delFilterHeader* - @group templateMethods: addOrEditTemplate*, deleteTemplate* - @group categoryMethods: setCategory*, addChoice*, deleteChoice* - @group archivingMethods: deleteTickets*, restoreTickets*, - setTicketsScreen*, diskUsage* - @group searchMethods: setSort*, quickFind* - @group reportMethods: homePageStats*, getTicketTimes*, getGraphDetails*, - formatInterval*, setReportDate*, getReportDate*, getReportDateSettings*, - fixSubsection* - @group pageTemplates: master*, macros*, index_html*, ticket_index_html*, - Tickets*, Create*, Search*, Reports*, Settings*, UserSettings*, - AccountSettings*, GroupSettings*, FilterSettings*, CustomerSettings*, - OptionSettings*, SystemSettings*, Help*, GenerateMail*, test, LoggedOut*, - Login*, master_style_css*, javascript_js* - - """ - - meta_type = 'MailManager' - - # Security - - __ac_roles__ = ('Tickets', 'Reports', 'Settings', 'Customer') - security = ClassSecurityInfo() - security.setPermissionDefault('View MailManager', - ['Tickets', 'Reports', 'Settings', 'Customer']) - security.setPermissionDefault('MailManager Settings', ['Settings']) - security.setPermissionDefault('MailManager Reports', ['Reports']) - security.setPermissionDefault('MailManager View Tickets', - ['Tickets', 'Customer']) - security.setPermissionDefault('MailManager Create Tickets', - ['Tickets', 'Customer']) - security.setPermissionDefault('MailManager Manage Tickets', - ['Tickets', 'Customer']) - - # SQL Directory overload hook - - sqldirclass = MailManagerSQL - - # Debug hooks - - pop3lib = poplib.POP3 - if pop3_ssl: - pop3lib_ssl = poplib.POP3_SSL - imap4lib = imaplib.IMAP4 - imap4lib_ssl = imaplib.IMAP4_SSL - _v_flowPointEntryCallbacks = [] - _v_flowPointExitCallbacks = [] - - # Management Screens - - manage_options = ( - {'label': 'Contents', 'action': 'manage_main'}, - {'label': 'Security', 'action': 'manage_access'}, - {'label': 'Properties', 'action': 'manage_propertiesForm'}, - # The permissions never let us see this tab! - {'label': 'View', 'action': 'index_html'}, - {'label': 'Migrate', 'action': 'manage_migrateForm'} - ) - - # Properties - - security.declareProtected('MailManager Settings', 'dateFormats') - def dateFormats(self): - """Provides the date formats that can be set through the properties.""" - return ('dd.mm.yy', 'mm.dd.yy', 'dd/mm/yy', 'mm/dd/yy') - - security.declareProtected('MailManager Settings', 'listTimeZones') - try: - from _compat23 import listTimeZones - except SyntaxError: - def listTimeZones(self): - """List all files in system's "zoneinfo" timezone database.""" - return [self.__class__.timezone] - - # Define defaults in the class because they can't yet be set at setup. - date_format = 'dd.mm.yy' - timezone = 'Default' - - # Version number for migration page - latestversion = mversion - - # XXX Define property in class temporarily to avoid need for migration. - virtual_root = '' - - _properties = ({'id': 'title', 'type': 'string', 'mode': 'w'}, - # Read-only: should be set once and for all at init. - {'id': 'schema', 'type': 'string', 'mode': 'w'}, - {'id': 'dbplatform', 'type': 'string', 'mode': 'w'}, - {'id': 'server_url', 'type': 'string', 'mode': 'w'}, - {'id': 'virtual_root', 'type': 'string', 'mode': 'w'}, - {'id': 'date_format', 'type': 'selection', - 'select_variable': 'dateFormats', 'mode': 'w'}, - {'id': 'timezone', 'type': 'selection', - 'select_variable': 'listTimeZones', 'mode': 'w'}, - {'id': 'version', 'type': 'string', 'mode': ''}, - {'id': 'mversion', 'type': 'int', 'mode': 'w'}, - {'id': 'mysql_max_allowed_packet', 'type': 'int', 'mode': 'w'} - ) - - dbplatform = 'postgres' - mysql_max_allowed_packet = 0 - - # Implement the ZopeScheduler interface so that MailManager can be called - # directly by the scheduler without having to use a Python Script - if ZOPE_SCHEDULER_PRESENT: - __implements__ = ISchedulingTask - - # Initialization - - def __init__(self, id, title, admin_username=None, admin_email=None, - admin_password=None, first_tid=1, create_tables=False, - schema='', dbplatform='postgres', REQUEST=None): - - # Constants. - self.mversion = mversion - self.refresh = 0 - self.batch_size = 15 - - # Passed to contructor. - self.id = id - self.title = title - self.admin_username = admin_username - self.admin_password = admin_password - self.admin_email = admin_email - self.first_tid = first_tid - self.create_tables = create_tables - - # The ZSQL methods are vastly simplified by adding a '.' to schema - # Also clean up schemas so they are in lowercase - if schema.endswith('.') or not schema: - self.schema = schema.lower() - else: - self.schema = schema.lower() + '.' - - - self.dbplatform = dbplatform - if dbplatform == 'postgres': - self.configurePostgres() - elif dbplatform == 'mysql': - self.configureMySQL() - elif dbplatform == 'mssql': - self.configureMicrosoftSQLServer() - elif dbplatform == 'oracle': - self.configureOracle() - else: - raise Exception('Unknown database') - - if first_tid > 1 and self.dbplatform != 'postgres': - raise Exception('Sorry, setting the first ticket id is not supported for this database at present') - - - # Capture info for creaing URLs in absence of REQUEST. These - # values will be unhelpful if MailManager is not being added - # using the same hostname as users will access it through, and - # quite empty if MailManager is not being added through the - # web at all. In such cases they must be corrected through - # the properties tab. - if REQUEST is not None: - self.server_url = REQUEST['SERVER_URL'] - virtual_root = REQUEST.other.get('VirtualRootPhysicalPath', ('',)) - self.virtual_root = '/'.join(virtual_root) - else: - self.server_url = '' - self.virtual_root = '' - - # Data structures. - self.filter_headers = ['To', 'From', 'cc', 'Subject', 'X-Priority', - 'X-Spam-Flag'] - self.priorities = ['Junk', 'Low', 'Normal', 'High', 'Critical'] - self.display_column = {'ticket_id': True, 'status': True, - 'assigned': False, 'title': True, - 'from_name': True, 'time': True, 'date': True, - 'priority': True, 'category0': False, - 'category1': False, 'category2': False} - - # Add a MailManager UserFolder to authenticate from the database - manage_addMMUserFolder(self) - - # Create a folder for standard attachments - self.manage_addFolder(id='attachments', title='Standard Attachments') - - # Add the sql methods - print "Adding SQL : %s" % str(self.sqldirclass) - self._setObject('sql', self.sqldirclass('sql')) - - # Add the ZSQL methods - self.addZSQLMethods() - - # Use cookie based authentication. - manage_addCC(self, 'Cookie') - self.Cookie.auto_login_page = 'Login' - self.Cookie.logout_page = 'LoggedOut' - - # Add the images. - manage_addDirectoryView(self, os.path.join('MailManager', - 'www', 'images')) - - # Add the MailHost - manage_addMailHost(self, 'MailHost') - - security.declarePrivate('configurePostgres') - def configurePostgres(self): - self.sql_delimiter = ';' - self.sql_boolean = 'BOOL' - self.sql_binary = 'BYTEA' - self.sql_interval = 'BIGINT' - self.sql_database = 'postgres' - self.sql_deferrable = '' - self.sql_datetimestamp = 'TIMESTAMP' - self.sql_initdefer = '' - self.sql_indexlimit = '' - self.sql_serialpkey = 'SERIAL PRIMARY KEY' - self.sql_tabletype = '' - self.sql_charset = '' - self.sql_true = '\'t\'' - self.sql_false = '\'f\'' - self.sql_varchar = 'VARCHAR' - self.sql_smalltext = 'TEXT' - self.sql_largetext = 'TEXT' - self.sql_integer = 'INT' - self.sql_textsearch = True - self.sql_truevar = 't' - self.sql_falsevar = 'f' - self.suboptimise = True - - security.declarePrivate('configureMySQL') - def configureMySQL(self): - self.sql_delimiter = '\0' - self.sql_boolean = 'BOOL' - self.sql_b... [truncated message content] |
From: <ke...@us...> - 2006-05-23 14:27:05
|
Revision: 3040 Author: kevca Date: 2006-05-23 07:26:48 -0700 (Tue, 23 May 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3040&view=rev Log Message: ----------- Committing for deployment on hosted platform and another round of testing Added Paths: ----------- MailManager/tags/RELENG_2_1_RC4_PRE2/ MailManager/tags/RELENG_2_1_RC4_PRE2/migrations/v2_1/__init__.py Removed Paths: ------------- MailManager/tags/RELENG_2_1_RC4_PRE2/migrations/v2_1/__init__.py Copied: MailManager/tags/RELENG_2_1_RC4_PRE2 (from rev 3038, MailManager/branches/RELENG_2_1) Deleted: MailManager/tags/RELENG_2_1_RC4_PRE2/migrations/v2_1/__init__.py =================================================================== --- MailManager/branches/RELENG_2_1/migrations/v2_1/__init__.py 2006-05-23 14:18:38 UTC (rev 3038) +++ MailManager/tags/RELENG_2_1_RC4_PRE2/migrations/v2_1/__init__.py 2006-05-23 14:26:48 UTC (rev 3040) @@ -1,275 +0,0 @@ -# (c) Copyright Logicalware Ltd 2002-2006 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ - -__version__ = '$Revision$' - -from tempfile import NamedTemporaryFile -import copy - -import logging -from Products.MailManager.support.logger import log - - -def migrate_v2_1_0_v2_1_1(self, migrationParams): - """ Add on the TID flag for accounts """ - - schema = migrationParams.get('schema', '') - create_tables = migrationParams.get('create_tables', False) - dbplatform = migrationParams.get('dbplatform', 'postgres') - - self.sql.migrateAccountTIDFlag() - - # Update the mversion to show we are complete - self.mversion = 'v2_1_1' - -def migrate_v2_1_1_v2_1_2(self, migrationParams): - """ Move to multiple ruleset descriptions in the database - - The previous release only had a single ruleset, entitled queuesystem. - We now need to move to using multiple rulesets and migrate existing - tickets between rulesets. Normally end users are only going to have - a single ruleset in use, which should be the latest revision of - queuesystem. - - Multiple rulesets in the same system would require some fixes still. - The account table would need a rsname attribute, and the ruleset - engine would need to load the ruleset from a ticket each time. Also, - difficulties arise when dealing with supporters over multiple - rulesets. - """ - - schema = migrationParams.get('schema', '') - create_tables = migrationParams.get('create_tables', False) - dbplatform = migrationParams.get('dbplatform', 'postgres') - - self.sql.migrateRulesetStates() - - # Load in additional ruleset and update engine - self.engine.setup(rsname = 'queuesystem_2_1_1') - - # Convert any tickets - for id in [t.id for t in self.sql.listTickets(sqv_state = 'New')]: - self.sql.editTicket(sqv_id = id, sqv_state = 'Open') - for id in [t.id for t in self.sql.listTickets(sqv_rsname = 'queuesystem')]: - self.sql.editTicket(sqv_id = id, sqv_rsname = 'queuesystem_2_1_1') - - # Update the mversion to show we are complete - self.mversion = 'v2_1_2' - -def migrate_v2_1_2_v2_1_3(self, migrationParams): - """ Add on default templates and close action - - We add on an attribute to an account entitled default_template, which - automatically adds a template on ticket replies. We also update the - ruleset to add on a new Close action. - """ - - schema = migrationParams.get('schema', '') - create_tables = migrationParams.get('create_tables', False) - dbplatform = migrationParams.get('dbplatform', 'postgres') - - self.sql.migrateDefaultTemplate() - - # Load in additional ruleset and update engine - self.engine.setup(rsname = 'queuesystem_2_1_2') - - # All tickets should now be using this ruleset - for id in [t.id for t in self.sql.listTickets(sqv_rsname = 'queuesystem_2_1_1')]: - self.sql.editTicket(sqv_id = id, sqv_rsname = 'queuesystem_2_1_2') - - # Update the mversion to show we are complete - self.mversion = 'v2_1_3' - -def migrate_v2_1_3_v2_1_4(self, migrationParams): - """ Fix missing user abilities for any migrated users - - Late divergence fix for users coming from 2.0, and for users with - early 2.1 datasets. Users migrated from earlier releases, or created - or modified under 2.1 may lack a black ability in some category. This - prevents the SQL operations from working corretly. - - Some tickets migrated from 2.0 also lack rsname in the database. - - Ticket migrated from 2.0 lack the Overdue state, which was previously - calculated in the SQL method. This migration explicitly sets that - state in the database. The API methods are not used as these would - cause actions to be triggered, potentially mailing users. - - This fix should be convergent and is not needed during the previous - migration process. - - Fixes Overdue status is lost on migration (#1493442) - Fixes No Send buttons on Tickets screen (#1493452) - Fixes Incorrect abilities for new accounts (#1492592) - """ - - for user in self.sql.listUsers(): - username = user.username - - # Ensure that an empty ability exists for all categories - for catno in [0,1,2]: - self.sql.deleteUserAbility( - sqv_catno = catno, - sqv_username = username, - sqv_ability = '' - ) - - self.sql.addUserAbility( - sqv_catno = catno, - sqv_username = username, - sqv_ability = '' - ) - - # Convert any tickets to the Overdue state - # Fixes Overdue status is lost on migration (#1493442) - self.sql.migrateSetOverdueState() - - # Set an rsname for any tickets which lack one - # Fixes No Send buttons on Tickets screen (#1493452) - self.sql.migrateAddMissingRsname( - sqv_default_rsname='queuesystem_2_1_2' - ) - - # Update the mversion to show we are complete - self.mversion = 'v2_1_4' - - -def migrate_convert_postgres_unicode(self, migrationParams): - """ Convert postgres database to using unicode """ - - # Update the database object - self.mailmanager_db.encoding = 'UTF-8' - self.mailmanager_db.ustrings = True - - # Find out the location of pg_dump - if sys.platform.startswith("win"): - if not os.path.isfile('C:\Program\ Files/PostgreSQL/8.0/bin/pg_dump.exe'): - raise MigrationError("""Cannot run migration. Your postgres database -needs converted to UTF-8, but the conversion program pg_dump cannot be found -on the system. Please report this error, or ask on the mailmanager-users -mailing list on sourceforge for a solution""") - if not os.path.isfile('C:\Program\ Files/PostgreSQL/8.0/bin/pg_restore.exe'): - raise MigrationError("""Cannot run migration. Your postgres database -needs converted to UTF-8, but the conversion program pg_restore cannot be found -on the system. Please report this error, or ask on the mailmanager-users -mailing list on sourceforge for a solution""") - pg_dump = 'C:\Program\ Files/PostgreSQL/8.0/bin/pg_dump.exe' - pg_restore = 'C:\Program\ Files/PostgreSQL/8.0/bin/pg_restore.exe' - else: - # Attempt to find pg_dump in $PATH - pg_dump = None - for prefix in os.environ['PATH'].split(':'): - if os.path.isfile(os.path.join(prefix, 'pg_dump')): - pg_dump = os.path.join(prefix, 'pg_dump') - continue - if not pg_dump: - raise MigrationError("""Cannot run migration. Your postgres database -needs converted to UTF-8, but the conversion program pg_dump cannot be found -on the system. Please report this error, or ask on the mailmanager-users -mailing list on sourceforge for a solution""") - pg_restore = None - for prefix in os.environ['PATH'].split(':'): - if os.path.isfile(os.path.join(prefix, 'pg_restore')): - pg_restore = os.path.join(prefix, 'pg_restore') - continue - if not pg_restore: - raise MigrationError("""Cannot run migration. Your postgres database -needs converted to UTF-8, but the conversion program pg_restore cannot be found -on the system. Please report this error, or ask on the mailmanager-users -mailing list on sourceforge for a solution""") - - # Convert the mailmanager_db connection string into variables to - # supply to pg_dump and pg_restore. The formation of the connection - # string looks like 'dbname=... user=... password=... host=...' - params = {} - kvassign = self.mailmanager_db.connection_string.strip().split() - for (key,value) in [kv.split('=') for kv in kvassign]: - params[key] = value - - # Create a tempfile, and export the database - tmpfile = NamedTemporaryFile() - tmpfile.flush() - tmpfile.close() - - # Store the connection details into the environment - environ = copy.copy(os.environ()) - if params.has_key('password'): - environ['PGPASSWORD'] = params['password'] - if params.has_key('user'): - environ['PGUSER'] = params['user'] - if params.has_key('host'): - environ['PGHOST'] = params['host'] - - # Dump the data to the tempfile - args = [pg_dump, '-F', 'c'] - if self.schema: - args.extend(['-n', self.schema.replace('.','')]) - args.extend(['-f', tmpfile.name, params['dbname']]) - - res = os.spawnvpe(os.P_WAIT, pg_dump, args, environ) - if not (res == 0): - raise MigrationError('Could not dump database - error code %i' % res) - - # Run the utf-8 conversion for a pg dumpfile - outfile = NamedTemporaryFile() - infile = open(tmpfile.name, 'r') - from Products.MailManager.support.convertdb import convert - convert(infile, outfile) - outfile.flush() - outfile.close() - - # Now drop the database and reload using the converted sql data - self.mailmanager_db.query('DROP SCHEMA %s CASCADE;') - self.mailmanager_db.get_transaction.commit() - - args = [pg_restore, '-d', params['dbname'], outfile.name] - res = os.spawnvpe(os.P_WAIT, pg_restore, args, environ) - if not (res == 0): - raise MigrationError('Could not restore database - error code %i' % res) - - # Update the mversion to show we are complete - self.mversion = migrationParams['target'] - - -migrations = { - 'v2_1_0' : { - 'targetstate' : 'v2_1_1', - 'overview' : 'Add on TID flag to accounts', - 'method' : migrate_v2_1_0_v2_1_1, - }, - 'v2_1_1' : { - 'targetstate' : 'v2_1_2', - 'overview' : 'Move to multiple ruleset descriptions in the database', - 'method' : migrate_v2_1_1_v2_1_2, - }, - 'v2_1_2' : { - 'targetstate' : 'v2_1_3', - 'overview' : 'Add on default template for accounts (#1464963)', - 'method' : migrate_v2_1_2_v2_1_3, - }, - 'v2_1_3' : { - 'targetstate' : 'v2_1_4', - 'overview' : 'Fix for incorrect abilities for new accounts (#1492592)\\n' + \ - 'Adds an rsname for any tickets which lack one - fixes #1493452\\n' + \ - 'Fixes Overdue status is lost on migration (#1493442)', - 'method' : migrate_v2_1_3_v2_1_4, - }, -} - - -# Add on mangling for unicode conversion for postgres users -# Known affected versions are v2_1_0 - v2_1_3 inclusive. Later -# dataset revisions will have been created with the correct -# encoding - -for src_ver in migrations.keys(): - if src_ver in ['v2_1_0', 'v2_1_1', 'v2_1_2', 'v2_1_3']: - migrations['%s_no_u' % src_ver] = { - 'targetstate' : src_ver, - 'overview' : 'Convert database to unicode', - 'method' : migrate_convert_postgres_unicode, - } - Copied: MailManager/tags/RELENG_2_1_RC4_PRE2/migrations/v2_1/__init__.py (from rev 3039, MailManager/branches/RELENG_2_1/migrations/v2_1/__init__.py) =================================================================== --- MailManager/tags/RELENG_2_1_RC4_PRE2/migrations/v2_1/__init__.py (rev 0) +++ MailManager/tags/RELENG_2_1_RC4_PRE2/migrations/v2_1/__init__.py 2006-05-23 14:26:48 UTC (rev 3040) @@ -0,0 +1,275 @@ +# (c) Copyright Logicalware Ltd 2002-2006 +# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details +# including conditions of redistribution are contained in LICENSE.txt +# http://www.logicalware.org/ +# $Id$ + +__version__ = '$Revision$' + +from tempfile import NamedTemporaryFile +import copy + +import logging +from Products.MailManager.support.logger import log + + +def migrate_v2_1_0_v2_1_1(self, migrationParams): + """ Add on the TID flag for accounts """ + + schema = migrationParams.get('schema', '') + create_tables = migrationParams.get('create_tables', False) + dbplatform = migrationParams.get('dbplatform', 'postgres') + + self.sql.migrateAccountTIDFlag() + + # Update the mversion to show we are complete + self.mversion = 'v2_1_1' + +def migrate_v2_1_1_v2_1_2(self, migrationParams): + """ Move to multiple ruleset descriptions in the database + + The previous release only had a single ruleset, entitled queuesystem. + We now need to move to using multiple rulesets and migrate existing + tickets between rulesets. Normally end users are only going to have + a single ruleset in use, which should be the latest revision of + queuesystem. + + Multiple rulesets in the same system would require some fixes still. + The account table would need a rsname attribute, and the ruleset + engine would need to load the ruleset from a ticket each time. Also, + difficulties arise when dealing with supporters over multiple + rulesets. + """ + + schema = migrationParams.get('schema', '') + create_tables = migrationParams.get('create_tables', False) + dbplatform = migrationParams.get('dbplatform', 'postgres') + + self.sql.migrateRulesetStates() + + # Load in additional ruleset and update engine + self.engine.setup(rsname = 'queuesystem_2_1_1') + + # Convert any tickets + for id in [t.id for t in self.sql.listTickets(sqv_state = 'New')]: + self.sql.editTicket(sqv_id = id, sqv_state = 'Open') + for id in [t.id for t in self.sql.listTickets(sqv_rsname = 'queuesystem')]: + self.sql.editTicket(sqv_id = id, sqv_rsname = 'queuesystem_2_1_1') + + # Update the mversion to show we are complete + self.mversion = 'v2_1_2' + +def migrate_v2_1_2_v2_1_3(self, migrationParams): + """ Add on default templates and close action + + We add on an attribute to an account entitled default_template, which + automatically adds a template on ticket replies. We also update the + ruleset to add on a new Close action. + """ + + schema = migrationParams.get('schema', '') + create_tables = migrationParams.get('create_tables', False) + dbplatform = migrationParams.get('dbplatform', 'postgres') + + self.sql.migrateDefaultTemplate() + + # Load in additional ruleset and update engine + self.engine.setup(rsname = 'queuesystem_2_1_2') + + # All tickets should now be using this ruleset + for id in [t.id for t in self.sql.listTickets(sqv_rsname = 'queuesystem_2_1_1')]: + self.sql.editTicket(sqv_id = id, sqv_rsname = 'queuesystem_2_1_2') + + # Update the mversion to show we are complete + self.mversion = 'v2_1_3' + +def migrate_v2_1_3_v2_1_4(self, migrationParams): + """ Fix missing user abilities for any migrated users + + Late divergence fix for users coming from 2.0, and for users with + early 2.1 datasets. Users migrated from earlier releases, or created + or modified under 2.1 may lack a black ability in some category. This + prevents the SQL operations from working corretly. + + Some tickets migrated from 2.0 also lack rsname in the database. + + Ticket migrated from 2.0 lack the Overdue state, which was previously + calculated in the SQL method. This migration explicitly sets that + state in the database. The API methods are not used as these would + cause actions to be triggered, potentially mailing users. + + This fix should be convergent and is not needed during the previous + migration process. + + Fixes Overdue status is lost on migration (#1493442) + Fixes No Send buttons on Tickets screen (#1493452) + Fixes Incorrect abilities for new accounts (#1492592) + """ + + for user in self.sql.listUsers(): + username = user.username + + # Ensure that an empty ability exists for all categories + for catno in [0,1,2]: + self.sql.deleteUserAbility( + sqv_catno = catno, + sqv_username = username, + sqv_ability = '' + ) + + self.sql.addUserAbility( + sqv_catno = catno, + sqv_username = username, + sqv_ability = '' + ) + + # Convert any tickets to the Overdue state + # Fixes Overdue status is lost on migration (#1493442) + self.sql.migrateSetOverdueState() + + # Set an rsname for any tickets which lack one + # Fixes No Send buttons on Tickets screen (#1493452) + self.sql.migrateAddMissingRsname( + sqv_default_rsname='queuesystem_2_1_2' + ) + + # Update the mversion to show we are complete + self.mversion = 'v2_1_4' + + +def migrate_convert_postgres_unicode(self, migrationParams): + """ Convert postgres database to using unicode """ + + # Update the database object + self.mailmanager_db.encoding = 'UTF-8' + self.mailmanager_db.ustrings = True + + # Find out the location of pg_dump + if sys.platform.startswith("win"): + if not os.path.isfile('C:\Program\ Files/PostgreSQL/8.0/bin/pg_dump.exe'): + raise MigrationError("""Cannot run migration. Your postgres database +needs converted to UTF-8, but the conversion program pg_dump cannot be found +on the system. Please report this error, or ask on the mailmanager-users +mailing list on sourceforge for a solution""") + if not os.path.isfile('C:\Program\ Files/PostgreSQL/8.0/bin/pg_restore.exe'): + raise MigrationError("""Cannot run migration. Your postgres database +needs converted to UTF-8, but the conversion program pg_restore cannot be found +on the system. Please report this error, or ask on the mailmanager-users +mailing list on sourceforge for a solution""") + pg_dump = 'C:\Program\ Files/PostgreSQL/8.0/bin/pg_dump.exe' + pg_restore = 'C:\Program\ Files/PostgreSQL/8.0/bin/pg_restore.exe' + else: + # Attempt to find pg_dump in $PATH + pg_dump = None + for prefix in os.environ['PATH'].split(':'): + if os.path.isfile(os.path.join(prefix, 'pg_dump')): + pg_dump = os.path.join(prefix, 'pg_dump') + continue + if not pg_dump: + raise MigrationError("""Cannot run migration. Your postgres database +needs converted to UTF-8, but the conversion program pg_dump cannot be found +on the system. Please report this error, or ask on the mailmanager-users +mailing list on sourceforge for a solution""") + pg_restore = None + for prefix in os.environ['PATH'].split(':'): + if os.path.isfile(os.path.join(prefix, 'pg_restore')): + pg_restore = os.path.join(prefix, 'pg_restore') + continue + if not pg_restore: + raise MigrationError("""Cannot run migration. Your postgres database +needs converted to UTF-8, but the conversion program pg_restore cannot be found +on the system. Please report this error, or ask on the mailmanager-users +mailing list on sourceforge for a solution""") + + # Convert the mailmanager_db connection string into variables to + # supply to pg_dump and pg_restore. The formation of the connection + # string looks like 'dbname=... user=... password=... host=...' + params = {} + kvassign = self.mailmanager_db.connection_string.strip().split() + for (key,value) in [kv.split('=') for kv in kvassign]: + params[key] = value + + # Create a tempfile, and export the database + tmpfile = NamedTemporaryFile() + tmpfile.flush() + tmpfile.close() + + # Store the connection details into the environment + environ = copy.copy(os.environ()) + if params.has_key('password'): + environ['PGPASSWORD'] = params['password'] + if params.has_key('user'): + environ['PGUSER'] = params['user'] + if params.has_key('host'): + environ['PGHOST'] = params['host'] + + # Dump the data to the tempfile + args = [pg_dump, '-F', 'c'] + if self.schema: + args.extend(['-n', self.schema.replace('.','')]) + args.extend(['-f', tmpfile.name, params['dbname']]) + + res = os.spawnvpe(os.P_WAIT, pg_dump, args, environ) + if not (res == 0): + raise MigrationError('Could not dump database - error code %i' % res) + + # Run the utf-8 conversion for a pg dumpfile + outfile = NamedTemporaryFile() + infile = open(tmpfile.name, 'r') + from Products.MailManager.support.convertdb import convert + convert(infile, outfile) + outfile.flush() + outfile.close() + + # Now drop the database and reload using the converted sql data + self.mailmanager_db.query('DROP SCHEMA %s CASCADE;') + self.mailmanager_db.get_transaction.commit() + + args = [pg_restore, '-d', params['dbname'], outfile.name] + res = os.spawnvpe(os.P_WAIT, pg_restore, args, environ) + if not (res == 0): + raise MigrationError('Could not restore database - error code %i' % res) + + # Update the mversion to show we are complete + self.mversion = migrationParams['target'] + + +migrations = { + 'v2_1_0' : { + 'targetstate' : 'v2_1_1', + 'overview' : 'Add on TID flag to accounts', + 'method' : migrate_v2_1_0_v2_1_1, + }, + 'v2_1_1' : { + 'targetstate' : 'v2_1_2', + 'overview' : 'Move to multiple ruleset descriptions in the database', + 'method' : migrate_v2_1_1_v2_1_2, + }, + 'v2_1_2' : { + 'targetstate' : 'v2_1_3', + 'overview' : 'Add on default template for accounts (#1464963)', + 'method' : migrate_v2_1_2_v2_1_3, + }, + 'v2_1_3' : { + 'targetstate' : 'v2_1_4', + 'overview' : 'Fix for incorrect abilities for new accounts (#1492592)\\n' + \ + 'Adds an rsname for any tickets which lack one - fixes #1493452\\n' + \ + 'Fixes Overdue status is lost on migration (#1493442)', + 'method' : migrate_v2_1_3_v2_1_4, + }, +} + + +# Add on mangling for unicode conversion for postgres users +# Known affected versions are v2_1_0 - v2_1_3 inclusive. Later +# dataset revisions will have been created with the correct +# encoding + +for src_ver in migrations.keys(): + if src_ver in ['v2_1_0', 'v2_1_1', 'v2_1_2', 'v2_1_3']: + migrations['%s_no_u' % src_ver] = { + 'targetstate' : src_ver, + 'overview' : 'Convert database to unicode', + 'method' : migrate_convert_postgres_unicode, + } + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-05-26 19:19:16
|
Revision: 3084 Author: kevca Date: 2006-05-26 12:19:05 -0700 (Fri, 26 May 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3084&view=rev Log Message: ----------- Tagging release Added Paths: ----------- MailManager/tags/RELENG_2_1_RC4/ MailManager/tags/RELENG_2_1_RC4/version.txt Removed Paths: ------------- MailManager/tags/RELENG_2_1_RC4/version.txt Copied: MailManager/tags/RELENG_2_1_RC4 (from rev 3082, MailManager/branches/RELENG_2_1) Deleted: MailManager/tags/RELENG_2_1_RC4/version.txt =================================================================== --- MailManager/branches/RELENG_2_1/version.txt 2006-05-26 14:58:31 UTC (rev 3082) +++ MailManager/tags/RELENG_2_1_RC4/version.txt 2006-05-26 19:19:05 UTC (rev 3084) @@ -1 +0,0 @@ -2.1-rc3 Copied: MailManager/tags/RELENG_2_1_RC4/version.txt (from rev 3083, MailManager/branches/RELENG_2_1/version.txt) =================================================================== --- MailManager/tags/RELENG_2_1_RC4/version.txt (rev 0) +++ MailManager/tags/RELENG_2_1_RC4/version.txt 2006-05-26 19:19:05 UTC (rev 3084) @@ -0,0 +1 @@ +2.1-rc4 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-05-27 15:58:13
|
Revision: 3096 Author: kevca Date: 2006-05-27 08:57:45 -0700 (Sat, 27 May 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3096&view=rev Log Message: ----------- Tagging internal release Added Paths: ----------- MailManager/tags/RELENG_2_1_RC5_PRE1/ MailManager/tags/RELENG_2_1_RC5_PRE1/CHANGES.txt MailManager/tags/RELENG_2_1_RC5_PRE1/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_1_RC5_PRE1/MailManager.py MailManager/tags/RELENG_2_1_RC5_PRE1/Makefile MailManager/tags/RELENG_2_1_RC5_PRE1/ruleset/engine.py MailManager/tags/RELENG_2_1_RC5_PRE1/tests/testAPI.py MailManager/tags/RELENG_2_1_RC5_PRE1/tests/testOverdueEvent.py MailManager/tags/RELENG_2_1_RC5_PRE1/tests/testSending.py MailManager/tags/RELENG_2_1_RC5_PRE1/www/AccountSettings.zpt MailManager/tags/RELENG_2_1_RC5_PRE1/www/Create.zpt MailManager/tags/RELENG_2_1_RC5_PRE1/www/ticket_index_html.zpt Removed Paths: ------------- MailManager/tags/RELENG_2_1_RC5_PRE1/CHANGES.txt MailManager/tags/RELENG_2_1_RC5_PRE1/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_1_RC5_PRE1/MailManager.py MailManager/tags/RELENG_2_1_RC5_PRE1/Makefile MailManager/tags/RELENG_2_1_RC5_PRE1/ruleset/engine.py MailManager/tags/RELENG_2_1_RC5_PRE1/tests/testAPI.py MailManager/tags/RELENG_2_1_RC5_PRE1/tests/testSending.py MailManager/tags/RELENG_2_1_RC5_PRE1/www/AccountSettings.zpt MailManager/tags/RELENG_2_1_RC5_PRE1/www/Create.zpt MailManager/tags/RELENG_2_1_RC5_PRE1/www/ticket_index_html.zpt Copied: MailManager/tags/RELENG_2_1_RC5_PRE1 (from rev 3085, MailManager/branches/RELENG_2_1) Deleted: MailManager/tags/RELENG_2_1_RC5_PRE1/CHANGES.txt =================================================================== --- MailManager/branches/RELENG_2_1/CHANGES.txt 2006-05-26 20:45:38 UTC (rev 3085) +++ MailManager/tags/RELENG_2_1_RC5_PRE1/CHANGES.txt 2006-05-27 15:57:45 UTC (rev 3096) @@ -1,677 +0,0 @@ -Version 2.1-RC4 -* BUG FIXES -- create_tables flag not used correctly (#1490966) -- Changing user to all has no effect (#1490876) -- Cannot view dequeued ticket (#1490915) -- Search always fails with invalid query (#1490871) -- Postgres encoding may still be in native charset (#1490182) -- Timestamps are not formatted correctly (#1484503) -- Incorrect abilities for new accounts (#1492592) -- Migration from 2.0 broken (#1492890) -- No highlight on subtab for ticket type (#1490998) -- Replying to tickets from queue omits To field (#1484499) -- Search results raises an error (#1484495) -- Queued events are not being processed (#1493443) -- Creating new ticket leads to an error (#1493482) -- No Send buttons on Tickets screen (#1493452) -- Overdue status is lost on migration (#1493442) -- Spam is not being processed (#1493596) -- Conflicting security declarations for QueueReportingEngine (#1493607) -- Filters breaking getMail with unicode messages (#1493620) -- AutoLogout not working correctly (#1493641) -- Add Note missing from overdue tickets (#1494173) -- Loop detection code prevents mailmanager mailing mailmanager (#1494827) -- Unicode issue in getmail (#1493483) -- Overdue transitions fail on closed tickets (#1493636) -- Notify user fails with unicode subjects (#1495112) -- Filters do not allow setting of state (#1495442) -- Create ticket can no longer generate email (#1495494) -- HTML messages are not displayed correctly (#1494158) -* BUG FIXES From 2.0.8 to 2.0.9 -- Formatting broken on templates for HTML (#1477664) -- No HTML response for HTML Required (#1472881) -- Selecting No change results in a failure (#1467786) -- Automatic addition of attachments (#1459924) -- UI Allows creation of empty groups (#1486433) -- Importing fails with alternative timezone (#1485389) -* BUG FIXES From 2.0.9 to 2.0.10 -* SECURITY -- Added in fix for potential security issue - Postgres encoding security hole (#1494281) - The code should not be vulnerable to this issue, but additional bugs in - the release may expose the vulnerability. Adding in a patch which will - prevent the exploit in all cases. - -Version 2.1-RC3 -* BUG FIXES -- setHTML raises Unicode error (#1477563) -- Queues page list has white on white (#1477727) -- Mass update selection doesn't work (#1478274) -- Selected colour leads to white on white (#1477724) -- Strings in code missing from i18n (#1482434) -- User abilities are not maintained consistently (#1481211) -- tickets list not finding tickets (#1481221) -- Editing a group to add a user fails (#1481095) -- Unicode usernames cannot be selected (#1478348) -- Add or Edit user breaks with unicode input (#1478345) -- HTML attachments aren't obvious (#1477717) -- Paging on Tickets screen broken (#1460936) -- show HTML is broken (#1477709) -- setSort on 'Queues' view returns 'Tickets' (#1477564) -- Queues page does not have status buttons (#1477689) -- AutoLogout not working correctly (#1477081) -- No strptime on windows (#1476818) -- getMail fails with TypeError (#1476878) -- Export to Excel on Reports (#1460909) -- Empty abilities are not being handled correctly (#1475604) -- History Display Issues (#1460955) -- Adding/Deleting Attachments problems (#1460943) -- Support of: text invisible (#1460915) -- Queue button doesn't highlight (#1460913) -- Performance Reports still contain queue masters (#1475530) -- getMail fails with unicode error (#1475487) -- Default template on accounts (#1464963) -- Setting template should return to template (#1464961) -- Close button not listed (#1464954) -- Restrict incoming emails with cc's to other accts to 1 tckt (#1464959) -- Return to Queue does not return to queues list (#1464947) -- Mass ticket updates not implemented (#1464953) -- Adding a customer fails (#1460922) -- Reports page is broken (#1472976) -* BUG FIXES From 2.0.7 to 2.0.8 -- Non existant refresh value leads to security error (#1466274) -- Cannot create HTML tickets (#1466223) -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.1-RC2 -* FEATURES -- Message loops are now caught based on presence of X-MailManager header -- Migration code improved to fit with the design proposed in the development - documentation -- TID in subject lines is now optional, based on database settings - although no UI pages allow this to be configured -* BUG FIXES -- State (or Status) of Ticket not display (#1455795) -- Issues with New state (#1456222) -- Deleting users via the Settings tab fails (#1456837) -- Deleting an Account with tickets fails (#1459386) -- RNG using too much entropy (#1459353) -- Fixed issue with non-ascii filter condition (#1438720) -- Tabs do not display on MySQL (#1451140) -- addUser page breaks on MySQL (#1451131) -- CookieCrumblerDisabled exception with http auth (#1451109) -- Fixed #1455297 login chews up entropy. Sessions are now not created until - user has successfully supplied a correct username and password combination. - In addition, the amount of entropy used per login has been reduced but can - still be considered secure. Tests have also been updated to reflect this. -* BUG FIXES From 2.0.7 to 2.0.8 -- Direct cycles of support_of are not allowed now. (#1353210) -- Cite last includes only replies now (#1369571) - -Version 2.1-RC1 -* BUG FIXES -- Merged in bugfixes from between 2.0.6 and 2.0.8 (Unreleased) inclusive - as denoted later in this file -- Various CSS Fixes to improve IE compatability -- MySQL compatability fixes -* IMPROVEMENTS -- Queueing Mode -- User abilities added to the database, queue allocation takes these into - consideration -- Named rulesets in the SQL database to allow for future use of multiple - rulesets per MailManager installation -- CookieCrumbler replaced with LoginHandler, allows for login sessions stored - in SQL and timing out of user logins. - -Version 2.1-beta1 -* BUG FIXES -- Merged in bugfixes from between 2.0.1-rc1 and 2.0.5 -- Minor UI fixes (#1322897, #1350233). -* IMPROVEMENTS -- Set the HTTP realm for authentication (so that auth data doesn't clash - between multiple MailManager instances and other Zope applications on the - same server) (#1356498). -- Seems to work OK with Zope 2.8.x (tested with 2.8.5) (#1328206), with the - most recent 3rd party package release. -- Works with PostgreSQL 8.1. - -Version 2.1-alpha2 -* NEW FEATURES -- Basic syndication support (both atom and RSS) of the top 20 unread tickets - for a MailManager instance. -* IMPROVEMENTS -- Tabindex is now being set on all form elements. -- There's now a print stylesheet for all MailManager pages which should hide - the non-salient information. -* BUG FIXES -- FilterSettings page now works (#1328226). -- Now set before the stylesheet is referenced which sometimes - caused the stylesheet not to load (#1328221). -- Create ticket page should now work (#1314741). - -Version 2.1-alpha1 -* IMPROVEMENTS -- Entirely reworked user interface, which: - - Looks exactly the same as it used to! - - Is XHTML 1.0 Strict and CSS 2.1 compliant. - - Should conform to at least priority 1 and probably priority 2 of the - WAI guidelines. - - Should be really easy to skin to make it look different. - - Is vastly tidied up -- Gone from over 8,000 lines of page templates to - just under 5,000! -- Initial modularisation of the reporting engine. - -Version 2.0.8 (Unreleased) -* Unfactored from 2.0.8 -- Create ticket method is highly broken - - Cannot create HTML tickets (#1466223) -- Unicode from addresses break incoming mail (#1440861) -- Valid tags are stripped from HTML on sending (#1460262) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -* BUG FIXES -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Archive and Restore functionality broken (#1452514) -- Encoding Error with signatures (#1440862) -- Non existant refresh value leads to security error (#1466274) -- Changing format away from HTML generates a Zope error (#1460216) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.8 -* BUG FIXES -- Non existant refresh value leads to security error (#1466274) -- Cannot create HTML tickets (#1466223) -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.7 -* BUG FIXES -- Fixed the setting of next ticket id for MySQL, no longer silently ignores - the option on mailmanager creation and fixes migration (#1412787) -- Send and Close, Send Reply, Send and Hold and Add Note have all been - considerably refactored. This resolves the problem reported where outbound - messages had been silently discarded (#1415497) -- getMail could potentially drop incoming messages whilst collecting from - POP3 accounts. This has now been corrected, and a test case now exists - which reproduces the existing problem and demonstrates it being fixed. - (#1422985) -- i18n fix - on the ticket modify screen "closed" is no longer displayed as - "open" when languages other than English are used (#1423422) -* IMPROVEMENTS -- Massive improvements to the test suite. - -Version 2.0.6 -* IMPROVEMENTS -- We're now using html2text (included) instead of stripogram for converting - HTML to its plain text equivalent (when sending out HTML mail, we also - include a plain text alternative for those who can't read HTML messages). - This results in far prettier plain text conversion. -* BUG FIXES -- Notify user/group flags can now be set/cleared correctly on account - preferences (#1404595). -- Improved address validation. Well, it's now a bit more lax, but it's - completely conformant to RFCs 2821 and 2822 (#1396051). -- MySQL: Default categories are now set up at installation (#1392386). -- HTML parts of multipart/alternative messages are now encoded as UTF-8 - rather than, bizarrely, being forced into ISO-8859-1 (#1368283). -- Make sure the user is informed about *why* test data cannot be removed - (#1345788). - -Version 2.0.5 -* BUG FIXES -- MySQL: Users are now migrated correctly (#1378323) -- MySQL: Attachments can now be of virtually any size (#1378224) -- MySQL: MailManager will now start when psycopg is not present (#1378209) -- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) -- PostgreSQL: Migration works even if response target update fails (#1374603) -- Search now works for users in all timezones (#1375345) -- The test data now sets 'routing' on the accounts (#1375764) -- MMImport.py script now uses new URL (#1378385) - -Version 2.0.4 -* BUG FIXES -- Prevent multiple users replying to the same ticket by accident (#1371269) -- Filters got broken in 2.0.3, change reverted (#1372814) -- Attachments now set the Content-Type header correctly on download (#13369349) -- Template names with trailing whitespace now work (#1363768) -- Set sql_charset on the mailmanager object during migration. (#1369347) - -Version 2.0.3 -* BUG FIXES -- Be more careful about adding and removing the test data (#1353112, #1345788). -- Improve the Unicode support with the MySQL back end (#1338614). -- Support of can now be removed with MySQL back end (#1338603). -- Fixes to the response target settings (#1336398, #1337506). -- setSession correctly clears the offset and always redirects to - Tickets (#1350429). -- Offer MySQL back end as a migration option (#1340301). -- Tickets now correctly marked as unread with MySQL back end (#1344827). - -Version 2.0.2 -* BUG FIXES -- Ignore the showHTML information in the session for plain text - emails. Reapplied previous bugfix (#1242337) -- Resetting response target to None now updates database (#1336398) -- Reports for targets fixed (#1337506) -* IMPROVEMENTS -- Now has setupdb script for MySQL users -- Split off setupdb code, now available as separate module -- Added in documentation for MySQL configuration - -Version 2.0.1-release -* BUG FIXES -- Disk usage screen now fixed for empty instances (#1244446) -- Initial Manager use now has correct roles set (#1324878) -- Altering roles now works correctly (#1324876) -- Update of response target now works correctly (#1324935) -- Removing notification flag for users/group now works correctly (#1315000) -- Migration now works correctly for 1.1 instances (#1291113) -- Setting response targets no longer generates an error (#1324884) - -Version 2.0.1-rc2 -* BUG FIXES -- No longer depends on psycopg due to import statements -- Migration fixes for MySQL users -- Fixed some scoping issues causing ZSQL methods to break due to - acquisition. -* IMPROVEMENTS -- SQL Directory no longer uses FileSystemSite.DirectoryView meaning - that the SQL methods can be overridden by 3rd parties. -- Test suite now has added hooks for overloading object types - -Version 2.0.1-rc1 -* BUG FIXES -- Test suite now covers text search cache consistency, cleared issues - with MySQL's mysql_max_allowed_packet variable -- Postgres support now appears stable - -Version 2.0.1-beta1 -* BUG FIXES -- Merged in all of the changes between 2.0r6 and 2.0r7 -- Fixed the index bug which was resulting in duplicate tickets being - displayed on the list page - -Version 2.0.1-alpha1 -* NEW FEATURES -- Adds in initial MySQL support -- SQL methods given addition parameters to deal with new MySQL support -- Vastly improved test suite - regression test suite for the database code. - -Version 2.0r7 -* BUG FIXES -- Subsequent pages for search were not being returned due to misuse of the - SESSION variable. These are now handled correctly (#1276412) -- Categories and templates were moved entirely to SQL. Upgrade needs a - migration to function correctly. (#1276414) -- listTickets method now correctly searches for subjects -- Fixes a Unicode handling error in the MailMixing class, which could - potentially block up incoming mail -* IMPROVEMENTS -- Postgres installation documentation rewritten -- Changes to loading of test datasets -- Test data set improved, now covers more functionality - -Version 2.0r6 -* BUG FIXES -- Fixed the positioning of the order by section of the listTickets query, - fixes broken ordering for search. -- The listCategories SQL method was broken, which was used by the Reports - pages. Reports for categories other than category0 were broken. - -Version 2.0 -* BUG FIXES -- Fix the security declaration of checkPOP3SSL(). - -Version 2.0 RC 3 -* NEW FEATURES -- Introduce some generalisations, ready for MySQL support in 2.0.1 -- Beginnings of epydoc API documentation. -* BUG FIXES -- Update the version number on migration. (#1229769) -- Robustify the autoreply code to deal with fatal errors. (#1240870) -- When a new message comes in with a ticket id in the subject line, - verify that the ticket already exists instead of assuming that it - does. (#1240711) -- Format the email address in the To: field for replies. (#1230837) -- Ignore the showHTML information in the session for plain text - emails. (#1242337) -- Record the logged in user who sent a reply to a ticket. (#1242958) - -Version 2.0 RC 2 -* BUG FIXES -- multipart/alternative mail with both an HTML and a plain text body now - only display one of them at a time (1227265) -- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) -- Migration updates the mm version -- Create ticket works again (1227744) - -Version 2.0 RC 1 -* BUG FIXES -- Stripogram can now be installed as a Python product in site-packages (1226633) -- Reply-To: header is used in favour of From: (1226156) -- Notifiction emails can handle non-ASCII subject lines (1224784) -- URLs are now accurate on notification emails (1224756) -- Character encodings set correctly on all web pages (1224731) -- Send & Close now goes to the next ticket (1224164) -- Improved date parsing (1223755) -- Respond By: now displayed for tickets with a response target (1222528) -- Attachment titles are now decoded correctly (1223974) - -Version 2.0 Beta 2 -* BUG FIXES -- Make the email validation less strict. (1283401) -- Customers can no longer have email addresses which are used - by an account. (1216414) -- Migration: Drop filters which refer to unknown users/groups. (1216361) -- Migration: Be more careful about coercing dates into ISO8601. (1216534) -- Clarified notification email setup. (1217403) -- Fixed Chinese translation. (1215645) -- Store time zone information in the pgsl database. - -Version 2.0 Beta 1 -* NEW FEATURES -- Added a Chinese translation. -- Add some documentation for creating the Postgres database and point to - detailed docs on the Windows installation process. -- Updated the help files to reflect the new version's feature set. -* BUG FIXES -- Make mbox exports have a more meaningful filename. -- Deal with RFC2047-encoded headers correctly. (1212035) -- Make the disk usage a bit more friendly. (1213604) -- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) -- Epoz now has a white background on all browsers. (1208912) - -Version 2.0 alpha 2 -* NEW FEATURES -- Support for retrieving POP3 mail over SSL (RFE 1204236) -- Optionally notify all in a group of new messages (RFE 1208284) -* BUG FIXES -- Help tab no longer visible after logout (1207656) -- Adding a MailManager instance now creates an initial user (1207022) -- Changes to users such as adding a signature no longer clear password (1207017) -- HTML tickets work properly (1205720, 1205717) -- Time to close tickets recorded (1204825) -- Reply to all button improved (1204805) -- Reassignment notification added (1204372) -- Groups redesigned (1204312) -- Adding/removing attachments no longer clears other form fields (1204272) -- Date translations fixed (1204268) -- Templates fixed (1204267) -- Overdue tickets function properly (1203141) -- Performance v. account report fixed (1196685) -- GetMail fixed (1196606) -- Referential integrity broken on mm_message table (1194418) -- Login link on logout page fixed (1204811) -- Signature handling improved (1204877) -- HTML email fixed (1204987) - -Version 2.0 alpha 1 -* NEW FEATURES -- A complete redesign using PostgreSQL as a replacement for the ZODB in order - to improve performance and scalability. -- Can now use SMTP servers that require a login (RFE 939720) - -Version 1.1 -* NEW FEATURES -- Internationalization of the help documentation. -* BUG FIXES -- Make sure that sending mail out is the last thing done, which should reduce - the window where a ConflictError would cause duplicate emails to be sent. -- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other - than a MessageParseError. Otherwise we wind up hard-bouncing (instead of - retrying) on a ConflictError. - -Version 1.1-rc5 -* BUG FIXES -- Comptatible with Zope 2.6/Python 2.1 again - -Version 1.1-rc4 -* BUG FIXES -- Standard attachments fixed (1110435) -- Clear supporter link fixed after i18n problem (1110436) - -Version 1.1-rc3 -* NEW FEATURES -[Unfortunately it was essential to add the following features at - this late stage for commercial reasons.] -- Added archive/restore tickets (RFE 953290) -- Create ticket can now have multiple attachments (RFE 987700) -- Replies can also have multiple attachments (RFE 859141) -- Standard set of attachments can be stored on the system (RFE 985469) -* BUG FIXES -- Edit of mail headers now works properly (RFE 859102) -- Fixed broken migration - -Version 1.1-rc2 -* BUG FIXES -- Now possible to add/edit account without SSL (1090041) -- Spam tickets no longer appear on the 'New' tickets list - -Version 1.1-rc1 -* NEW FEATURES -- Users notified on re-assignment of tickets (RFE 978035) -- Internationalisation (i18n) added ready for translation to other languages. -- Support for SSL connections to remote IMAP server. -- Any mail headers may be used in filters (RFE 859102) -* BUG FIXES -- Report graphs now work for user-defined categories (978404) -- File downloads now work when there is a space in the filename (985150) -- Remove support ticket feature fixed (985677) -- Users no longer notified if spam is received (1059104) -- Spam no longer displayed on default ticket listing views -- Templates with names ending in a space may now be deleted/edited (1003514) - -Version 1.0 -No changes from 1.0-rc2 - -Version 1.0-rc2 -* NEW FEATURES -- Batch classification of tickets. (RFE 859114 and 957719) -* BUG FIXES -- Migration works when filters are of mixed formats. (945956) -- Migration works when groups are of mixed formats. (945959) -- Messages from mailer-daemon with a real name do not cause a loop. (952864) -- Works on Firefox for Mac when reply has no attachment. (963291) -- Report graphs work for more than 200 tickets in a period. (964144) - -Version 1.0-rc1 -* NEW FEATURES -- Choice of date format. (RFE 869827) -- Choice of timezone (currently only on Unix). (RFE 869827) -- Script to import mail from Unix mailboxes. (RFE 903031) -- Shortcut icon. -- Importing of tickets enabled. -* IMPROVEMENTS -- Added global error slot and adjusted settings screens to use it. (873232) -- Message response form fields remembered in request. -- An instance's children may be migrated even when it is not. -* BUG FIXES -- Mail check thread delays till Zope is ready in 2.7 as well. (835642) -- GroupSettings page template works with new-style groups. (887785) -- Problems sending mail caught and reported to the user or logged. (892947) -- Message ID added to outgoing messages. (895039) -- Newlines in the Cc field no longer break the JavaScript. (904033) -- Private notes and replies no longer lose headers in migration. (904076) -- Private notes may no longer have a To field. (912534) -- Ticket ownership transferred when user deleted. (925344) -- Customers are persistent. (930654) -- Sending files with a bad mime type does not cause an exception. (934133) -- HTML templates no longer have extra breaks added. (934235) -- MailManager.getMail() returns an empty string on success. (934902) -- Add customer form checks fields are filled. (938631) -- Fixed links to AccountSettings page. (938678) - -Version 1.0-b4 -* BUG FIX -- Fixed error when a new thread is started and notification is on. - -Version 1.0-b3 -* NEW FEATURES -- Supporter mechanism for associating tickets fully implemented. -- URLs in messages rendered as hyperlinks. -- Filters can assign to groups as well as users. -* IMPROVEMENTS -- Assigned agent mailed at every new message in ticket, customer only - when he starts a new ticket. This reverses the previous behaviour. -- Tickets can be re-opened by arrival of a new message or through - Ticket Details box. -- Migration version distinguished from product version. -- Group now a class; ensures that group members are assigned to evenly. -- By default users only see tickets assigned to them. -- Export (view raw messages) link added to Ticket index page. -* BUG FIXES -- Account signatures are now used. -- HTML setting on auto replies and templates respected. -- Agents can be deleted. -- Several others (see SourceForge bugs 859030 to 873233). - -Version 1.0-b2 -* NEW FEATURES -- Migration -- HTML messages may now be viewed. -- Most recent search results always available. -- Response target added as option in filters and create ticket screen. -* IMPROVEMENTS -- More robust ticket navigation (works with virtual hosting, "prev"/"next" - links always available, "list" goes to batch containing current ticket). -- Improved handling and presentation of attachments. -- Help screens updated (not quite finished). -- Improved interface to reports (still needs work though). -- All character sets displayed correctly (as far as the browser's fonts allow). -- Mail fetching scripts have an option to specify MailManager's URL . -- Search by from name no longer requires exact match. -- Much Python code removed from page templates. -* BUG FIXES -- Overdue ticket view and searches for overdue tickets now work. -- Automatic mail checking continues after product is refreshed. -- Numerous others (see SourceForge bugs 832932 to 858688). - -Version 1.0-b1 -- Dependence on MailHost product removed. -- Message class now wraps Message object from Python email package, - allowing mails to be retreived in their original form. -- Automatic mail fetching introduced. -- Code for creating e-mails through the web brought together in a new - module and handling added for text entered in any character set. -- Each account is now a separate folder, ready for per account - security settings. -- Fetching and handling of incoming mail moved to new Account class. -- Self service interface to allow customers to manage their own tickets. -- Better handling of HTML emails. -- Create ticket now has more sensible defaults. -- Users now deleted properly. -- Calculates an approximation of disk space used. -- Added Property Managers to ease debugging. -- Users with 'Settings' access can no longer view ZMI. -- Numerous bug fixes. - -Version 0.96 -- By default, shows newest tickets first rather than oldest -- The subject of a ticket can now be changed -- If more email is added to a read ticket it goes back to being unread (bold) -- Advises if an attachment is of a dangerous type (for Windows users) -- Attachments now download with original filename & security improved -- Browser bug in IE prevented selection of user on tickets screen (797221) -- Two extra user definable categories added -- Code tidied up & minor bug fixes - -Version 0.95 -- Added a 'Spam' status and amended reports, tickets & filters accordingly -- Can now delete spam tickets without closing them (783289) -- Now handles AppleDouble attachments correctly (787671) -- POP3 mailbox lock removed if there is an error (787677) -- IMAP mailbox lock removed if there is an error -- Mails that can't be processed are now stored raw rather than deleted -- Added 'priority' and 'assigned' to Search screen (785360) -- Basic export of reports to Excel implemented -- Now record and report on times to close as well as times to respond -- Other minor fixes - -Version 0.94 -- Ticket status is displayed correctly in all circumstances -- Adding attachments when creating a ticket thru the web now works as expected. -- Users can be notified of new tickets in all circumstances (783955) -- Allow selection of fields to display on tickets screen (783863) -- Added submenu to the Create ticket screen -- Other minor fixes - -Version 0.93 -- Improved attachment handling and display -- Improved ticket navigation (now back/list/next on ticket view) (780783) -- Fixed a bug in the reporting graphs where the last day in the month could - be missed -- Added an auto refresh option for tickets screen (feature request 781294) -- By default tickets created through the web are assigned to the logged in user, - rather than the first user alphabetically -- Improved outgoing mail -- More advanced standard filter -- Tightened up security -- Help button now context sensitive - -Version 0.92 -- Adding a user with the Reports permission now works as expected (779986) -- Account deletion now works properly (779989) -- Admin password now hidden on the Add MailManager page (779987) - -Thanks to Ronan Amicel for spotting these four bugs. - -- Ticket deletion system improved. -- Supporting tickets system now works better. - -Version 0.91 -- Fixed the Account Help screen. Now displays properly and text is accurate. -- Fixed the 'Change details' section on a ticket screen so the user the ticket - is assigned to is displayed by default. Also ensured user names are displayed - in alphabetical order. -- Categories can now be deleted. Deleted categories will still appear in - Reports, System Settings and on the Search page until every ticket with that - category has been deleted from the system. - -Thanks to Kevin Gill for spotting these bugs. - -Version 0.9 -The first open source release of MailManager. Based on the commercial version -however with some major changes: - -- Uses the Zope Object DB instead of an external relational database. This - changes the performance, it is faster in some areas and slower in others. It - makes the product much easier to install. -- Use of HTML to generate the graphs. Not as attractive as the commercial - version but saves the difficulty of installing extensions which were not - stable on all platforms. -- Improved text editor. Epoz is used to provide rich text editing allowing - easy creation of HTML mail. -- Improved text indexing. Greatly expanded query options. -- Bug fixes. A number of minor bugs were fixed. Copied: MailManager/tags/RELENG_2_1_RC5_PRE1/CHANGES.txt (from rev 3095, MailManager/branches/RELENG_2_1/CHANGES.txt) =================================================================== --- MailManager/tags/RELENG_2_1_RC5_PRE1/CHANGES.txt (rev 0) +++ MailManager/tags/RELENG_2_1_RC5_PRE1/CHANGES.txt 2006-05-27 15:57:45 UTC (rev 3096) @@ -0,0 +1,686 @@ +Version 2.1-RC5 +* BUG FIXES +- Create tickets hardcodes Epoz (#1495917) +- Response target defaults to now (#1494223) +- Response targets for accounts are now compulsory (#1494791) +- Blank items in history (#1495097) +- Empty category choice shown on tickets page (#1496041) +- History display garbled for category changes (#1494163) + +Version 2.1-RC4 +* BUG FIXES +- create_tables flag not used correctly (#1490966) +- Changing user to all has no effect (#1490876) +- Cannot view dequeued ticket (#1490915) +- Search always fails with invalid query (#1490871) +- Postgres encoding may still be in native charset (#1490182) +- Timestamps are not formatted correctly (#1484503) +- Incorrect abilities for new accounts (#1492592) +- Migration from 2.0 broken (#1492890) +- No highlight on subtab for ticket type (#1490998) +- Replying to tickets from queue omits To field (#1484499) +- Search results raises an error (#1484495) +- Queued events are not being processed (#1493443) +- Creating new ticket leads to an error (#1493482) +- No Send buttons on Tickets screen (#1493452) +- Overdue status is lost on migration (#1493442) +- Spam is not being processed (#1493596) +- Conflicting security declarations for QueueReportingEngine (#1493607) +- Filters breaking getMail with unicode messages (#1493620) +- AutoLogout not working correctly (#1493641) +- Add Note missing from overdue tickets (#1494173) +- Loop detection code prevents mailmanager mailing mailmanager (#1494827) +- Unicode issue in getmail (#1493483) +- Overdue transitions fail on closed tickets (#1493636) +- Notify user fails with unicode subjects (#1495112) +- Filters do not allow setting of state (#1495442) +- Create ticket can no longer generate email (#1495494) +- HTML messages are not displayed correctly (#1494158) +* BUG FIXES From 2.0.8 to 2.0.9 +- Formatting broken on templates for HTML (#1477664) +- No HTML response for HTML Required (#1472881) +- Selecting No change results in a failure (#1467786) +- Automatic addition of attachments (#1459924) +- UI Allows creation of empty groups (#1486433) +- Importing fails with alternative timezone (#1485389) +* BUG FIXES From 2.0.9 to 2.0.10 +* SECURITY +- Added in fix for potential security issue + Postgres encoding security hole (#1494281) + The code should not be vulnerable to this issue, but additional bugs in + the release may expose the vulnerability. Adding in a patch which will + prevent the exploit in all cases. + +Version 2.1-RC3 +* BUG FIXES +- setHTML raises Unicode error (#1477563) +- Queues page list has white on white (#1477727) +- Mass update selection doesn't work (#1478274) +- Selected colour leads to white on white (#1477724) +- Strings in code missing from i18n (#1482434) +- User abilities are not maintained consistently (#1481211) +- tickets list not finding tickets (#1481221) +- Editing a group to add a user fails (#1481095) +- Unicode usernames cannot be selected (#1478348) +- Add or Edit user breaks with unicode input (#1478345) +- HTML attachments aren't obvious (#1477717) +- Paging on Tickets screen broken (#1460936) +- show HTML is broken (#1477709) +- setSort on 'Queues' view returns 'Tickets' (#1477564) +- Queues page does not have status buttons (#1477689) +- AutoLogout not working correctly (#1477081) +- No strptime on windows (#1476818) +- getMail fails with TypeError (#1476878) +- Export to Excel on Reports (#1460909) +- Empty abilities are not being handled correctly (#1475604) +- History Display Issues (#1460955) +- Adding/Deleting Attachments problems (#1460943) +- Support of: text invisible (#1460915) +- Queue button doesn't highlight (#1460913) +- Performance Reports still contain queue masters (#1475530) +- getMail fails with unicode error (#1475487) +- Default template on accounts (#1464963) +- Setting template should return to template (#1464961) +- Close button not listed (#1464954) +- Restrict incoming emails with cc's to other accts to 1 tckt (#1464959) +- Return to Queue does not return to queues list (#1464947) +- Mass ticket updates not implemented (#1464953) +- Adding a customer fails (#1460922) +- Reports page is broken (#1472976) +* BUG FIXES From 2.0.7 to 2.0.8 +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.1-RC2 +* FEATURES +- Message loops are now caught based on presence of X-MailManager header +- Migration code improved to fit with the design proposed in the development + documentation +- TID in subject lines is now optional, based on database settings + although no UI pages allow this to be configured +* BUG FIXES +- State (or Status) of Ticket not display (#1455795) +- Issues with New state (#1456222) +- Deleting users via the Settings tab fails (#1456837) +- Deleting an Account with tickets fails (#1459386) +- RNG using too much entropy (#1459353) +- Fixed issue with non-ascii filter condition (#1438720) +- Tabs do not display on MySQL (#1451140) +- addUser page breaks on MySQL (#1451131) +- CookieCrumblerDisabled exception with http auth (#1451109) +- Fixed #1455297 login chews up entropy. Sessions are now not created until + user has successfully supplied a correct username and password combination. + In addition, the amount of entropy used per login has been reduced but can + still be considered secure. Tests have also been updated to reflect this. +* BUG FIXES From 2.0.7 to 2.0.8 +- Direct cycles of support_of are not allowed now. (#1353210) +- Cite last includes only replies now (#1369571) + +Version 2.1-RC1 +* BUG FIXES +- Merged in bugfixes from between 2.0.6 and 2.0.8 (Unreleased) inclusive + as denoted later in this file +- Various CSS Fixes to improve IE compatability +- MySQL compatability fixes +* IMPROVEMENTS +- Queueing Mode +- User abilities added to the database, queue allocation takes these into + consideration +- Named rulesets in the SQL database to allow for future use of multiple + rulesets per MailManager installation +- CookieCrumbler replaced with LoginHandler, allows for login sessions stored + in SQL and timing out of user logins. + +Version 2.1-beta1 +* BUG FIXES +- Merged in bugfixes from between 2.0.1-rc1 and 2.0.5 +- Minor UI fixes (#1322897, #1350233). +* IMPROVEMENTS +- Set the HTTP realm for authentication (so that auth data doesn't clash + between multiple MailManager instances and other Zope applications on the + same server) (#1356498). +- Seems to work OK with Zope 2.8.x (tested with 2.8.5) (#1328206), with the + most recent 3rd party package release. +- Works with PostgreSQL 8.1. + +Version 2.1-alpha2 +* NEW FEATURES +- Basic syndication support (both atom and RSS) of the top 20 unread tickets + for a MailManager instance. +* IMPROVEMENTS +- Tabindex is now being set on all form elements. +- There's now a print stylesheet for all MailManager pages which should hide + the non-salient information. +* BUG FIXES +- FilterSettings page now works (#1328226). +- Now set before the stylesheet is referenced which sometimes + caused the stylesheet not to load (#1328221). +- Create ticket page should now work (#1314741). + +Version 2.1-alpha1 +* IMPROVEMENTS +- Entirely reworked user interface, which: + - Looks exactly the same as it used to! + - Is XHTML 1.0 Strict and CSS 2.1 compliant. + - Should conform to at least priority 1 and probably priority 2 of the + WAI guidelines. + - Should be really easy to skin to make it look different. + - Is vastly tidied up -- Gone from over 8,000 lines of page templates to + just under 5,000! +- Initial modularisation of the reporting engine. + +Version 2.0.8 (Unreleased) +* Unfactored from 2.0.8 +- Create ticket method is highly broken + - Cannot create HTML tickets (#1466223) +- Unicode from addresses break incoming mail (#1440861) +- Valid tags are stripped from HTML on sending (#1460262) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +* BUG FIXES +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Archive and Restore functionality broken (#1452514) +- Encoding Error with signatures (#1440862) +- Non existant refresh value leads to security error (#1466274) +- Changing format away from HTML generates a Zope error (#1460216) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.8 +* BUG FIXES +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.7 +* BUG FIXES +- Fixed the setting of next ticket id for MySQL, no longer silently ignores + the option on mailmanager creation and fixes migration (#1412787) +- Send and Close, Send Reply, Send and Hold and Add Note have all been + considerably refactored. This resolves the problem reported where outbound + messages had been silently discarded (#1415497) +- getMail could potentially drop incoming messages whilst collecting from + POP3 accounts. This has now been corrected, and a test case now exists + which reproduces the existing problem and demonstrates it being fixed. + (#1422985) +- i18n fix - on the ticket modify screen "closed" is no longer displayed as + "open" when languages other than English are used (#1423422) +* IMPROVEMENTS +- Massive improvements to the test suite. + +Version 2.0.6 +* IMPROVEMENTS +- We're now using html2text (included) instead of stripogram for converting + HTML to its plain text equivalent (when sending out HTML mail, we also + include a plain text alternative for those who can't read HTML messages). + This results in far prettier plain text conversion. +* BUG FIXES +- Notify user/group flags can now be set/cleared correctly on account + preferences (#1404595). +- Improved address validation. Well, it's now a bit more lax, but it's + completely conformant to RFCs 2821 and 2822 (#1396051). +- MySQL: Default categories are now set up at installation (#1392386). +- HTML parts of multipart/alternative messages are now encoded as UTF-8 + rather than, bizarrely, being forced into ISO-8859-1 (#1368283). +- Make sure the user is informed about *why* test data cannot be removed + (#1345788). + +Version 2.0.5 +* BUG FIXES +- MySQL: Users are now migrated correctly (#1378323) +- MySQL: Attachments can now be of virtually any size (#1378224) +- MySQL: MailManager will now start when psycopg is not present (#1378209) +- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) +- PostgreSQL: Migration works even if response target update fails (#1374603) +- Search now works for users in all timezones (#1375345) +- The test data now sets 'routing' on the accounts (#1375764) +- MMImport.py script now uses new URL (#1378385) + +Version 2.0.4 +* BUG FIXES +- Prevent multiple users replying to the same ticket by accident (#1371269) +- Filters got broken in 2.0.3, change reverted (#1372814) +- Attachments now set the Content-Type header correctly on download (#13369349) +- Template names with trailing whitespace now work (#1363768) +- Set sql_charset on the mailmanager object during migration. (#1369347) + +Version 2.0.3 +* BUG FIXES +- Be more careful about adding and removing the test data (#1353112, #1345788). +- Improve the Unicode support with the MySQL back end (#1338614). +- Support of can now be removed with MySQL back end (#1338603). +- Fixes to the response target settings (#1336398, #1337506). +- setSession correctly clears the offset and always redirects to + Tickets (#1350429). +- Offer MySQL back end as a migration option (#1340301). +- Tickets now correctly marked as unread with MySQL back end (#1344827). + +Version 2.0.2 +* BUG FIXES +- Ignore the showHTML information in the session for plain text + emails. Reapplied previous bugfix (#1242337) +- Resetting response target to None now updates database (#1336398) +- Reports for targets fixed (#1337506) +* IMPROVEMENTS +- Now has setupdb script for MySQL users +- Split off setupdb code, now available as separate module +- Added in documentation for MySQL configuration + +Version 2.0.1-release +* BUG FIXES +- Disk usage screen now fixed for empty instances (#1244446) +- Initial Manager use now has correct roles set (#1324878) +- Altering roles now works correctly (#1324876) +- Update of response target now works correctly (#1324935) +- Removing notification flag for users/group now works correctly (#1315000) +- Migration now works correctly for 1.1 instances (#1291113) +- Setting response targets no longer generates an error (#1324884) + +Version 2.0.1-rc2 +* BUG FIXES +- No longer depends on psycopg due to import statements +- Migration fixes for MySQL users +- Fixed some scoping issues causing ZSQL methods to break due to + acquisition. +* IMPROVEMENTS +- SQL Directory no longer uses FileSystemSite.DirectoryView meaning + that the SQL methods can be overridden by 3rd parties. +- Test suite now has added hooks for overloading object types + +Version 2.0.1-rc1 +* BUG FIXES +- Test suite now covers text search cache consistency, cleared issues + with MySQL's mysql_max_allowed_packet variable +- Postgres support now appears stable + +Version 2.0.1-beta1 +* BUG FIXES +- Merged in all of the changes between 2.0r6 and 2.0r7 +- Fixed the index bug which was resulting in duplicate tickets being + displayed on the list page + +Version 2.0.1-alpha1 +* NEW FEATURES +- Adds in initial MySQL support +- SQL methods given addition parameters to deal with new MySQL support +- Vastly improved test suite - regression test suite for the database code. + +Version 2.0r7 +* BUG FIXES +- Subsequent pages for search were not being returned due to misuse of the + SESSION variable. These are now handled correctly (#1276412) +- Categories and templates were moved entirely to SQL. Upgrade needs a + migration to function correctly. (#1276414) +- listTickets method now correctly searches for subjects +- Fixes a Unicode handling error in the MailMixing class, which could + potentially block up incoming mail +* IMPROVEMENTS +- Postgres installation documentation rewritten +- Changes to loading of test datasets +- Test data set improved, now covers more functionality + +Version 2.0r6 +* BUG FIXES +- Fixed the positioning of the order by section of the listTickets query, + fixes broken ordering for search. +- The listCategories SQL method was broken, which was used by the Reports + pages. Reports for categories other than category0 were broken. + +Version 2.0 +* BUG FIXES +- Fix the security declaration of checkPOP3SSL(). + +Version 2.0 RC 3 +* NEW FEATURES +- Introduce some generalisations, ready for MySQL support in 2.0.1 +- Beginnings of epydoc API documentation. +* BUG FIXES +- Update the version number on migration. (#1229769) +- Robustify the autoreply code to deal with fatal errors. (#1240870) +- When a new message comes in with a ticket id in the subject line, + verify that the ticket already exists instead of assuming that it + does. (#1240711) +- Format the email address in the To: field for replies. (#1230837) +- Ignore the showHTML information in the session for plain text + emails. (#1242337) +- Record the logged in user who sent a reply to a ticket. (#1242958) + +Version 2.0 RC 2 +* BUG FIXES +- multipart/alternative mail with both an HTML and a plain text body now + only display one of them at a time (1227265) +- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) +- Migration updates the mm version +- Create ticket works again (1227744) + +Version 2.0 RC 1 +* BUG FIXES +- Stripogram can now be installed as a Python product in site-packages (1226633) +- Reply-To: header is used in favour of From: (1226156) +- Notifiction emails can handle non-ASCII subject lines (1224784) +- URLs are now accurate on notification emails (1224756) +- Character encodings set correctly on all web pages (1224731) +- Send & Close now goes to the next ticket (1224164) +- Improved date parsing (1223755) +- Respond By: now displayed for tickets with a response target (1222528) +- Attachment titles are now decoded correctly (1223974) + +Version 2.0 Beta 2 +* BUG FIXES +- Make the email validation less strict. (1283401) +- Customers can no longer have email addresses which are used + by an account. (1216414) +- Migration: Drop filters which refer to unknown users/groups. (1216361) +- Migration: Be more careful about coercing dates into ISO8601. (1216534) +- Clarified notification email setup. (1217403) +- Fixed Chinese translation. (1215645) +- Store time zone information in the pgsl database. + +Version 2.0 Beta 1 +* NEW FEATURES +- Added a Chinese translation. +- Add some documentation for creating the Postgres database and point to + detailed docs on the Windows installation process. +- Updated the help files to reflect the new version's feature set. +* BUG FIXES +- Make mbox exports have a more meaningful filename. +- Deal with RFC2047-encoded headers correctly. (1212035) +- Make the disk usage a bit more friendly. (1213604) +- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) +- Epoz now has a white background on all browsers. (1208912) + +Version 2.0 alpha 2 +* NEW FEATURES +- Support for retrieving POP3 mail over SSL (RFE 1204236) +- Optionally notify all in a group of new messages (RFE 1208284) +* BUG FIXES +- Help tab no longer visible after logout (1207656) +- Adding a MailManager instance now creates an initial user (1207022) +- Changes to users such as adding a signature no longer clear password (1207017) +- HTML tickets work properly (1205720, 1205717) +- Time to close tickets recorded (1204825) +- Reply to all button improved (1204805) +- Reassignment notification added (1204372) +- Groups redesigned (1204312) +- Adding/removing attachments no longer clears other form fields (1204272) +- Date translations fixed (1204268) +- Templates fixed (1204267) +- Overdue tickets function properly (1203141) +- Performance v. account report fixed (1196685) +- GetMail fixed (1196606) +- Referential integrity broken on mm_message table (1194418) +- Login link on logout page fixed (1204811) +- Signature handling improved (1204877) +- HTML email fixed (1204987) + +Version 2.0 alpha 1 +* NEW FEATURES +- A complete redesign using PostgreSQL as a replacement for the ZODB in order + to improve performance and scalability. +- Can now use SMTP servers that require a login (RFE 939720) + +Version 1.1 +* NEW FEATURES +- Internationalization of the help documentation. +* BUG FIXES +- Make sure that sending mail out is the last thing done, which should reduce + the window where a ConflictError would cause duplicate emails to be sent. +- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other + than a MessageParseError. Otherwise we wind up hard-bouncing (instead of + retrying) on a ConflictError. + +Version 1.1-rc5 +* BUG FIXES +- Comptatible with Zope 2.6/Python 2.1 again + +Version 1.1-rc4 +* BUG FIXES +- Standard attachments fixed (1110435) +- Clear supporter link fixed after i18n problem (1110436) + +Version 1.1-rc3 +* NEW FEATURES +[Unfortunately it was essential to add the following features at + this late stage for commercial reasons.] +- Added archive/restore tickets (RFE 953290) +- Create ticket can now have multiple attachments (RFE 987700) +- Replies can also have multiple attachments (RFE 859141) +- Standard set of attachments can be stored on the system (RFE 985469) +* BUG FIXES +- Edit of mail headers now works properly (RFE 859102) +- Fixed broken migration + +Version 1.1-rc2 +* BUG FIXES +- Now possible to add/edit account without SSL (1090041) +- Spam tickets no longer appear on the 'New' tickets list + +Version 1.1-rc1 +* NEW FEATURES +- Users notified on re-assignment of tickets (RFE 978035) +- Internationalisation (i18n) added ready for translation to other languages. +- Support for SSL connections to remote IMAP server. +- Any mail headers may be used in filters (RFE 859102) +* BUG FIXES +- Report graphs now work for user-defined categories (978404) +- File downloads now work when there is a space in the filename (985150) +- Remove support ticket feature fixed (985677) +- Users no longer notified if spam is received (1059104) +- Spam no longer displayed on default ticket listing views +- Templates with names ending in a space may now be deleted/edited (1003514) + +Version 1.0 +No changes from 1.0-rc2 + +Version 1.0-rc2 +* NEW FEATURES +- Batch classification of tickets. (RFE 859114 and 957719) +* BUG FIXES +- Migration works when filters are of mixed formats. (945956) +- Migration works when groups are of mixed formats. (945959) +- Messages from mailer-daemon with a real name do not cause a loop. (952864) +- Works on Firefox for Mac when reply has no attachment. (963291) +- Report graphs work for more than 200 tickets in a period. (964144) + +Version 1.0-rc1 +* NEW FEATURES +- Choice of date format. (RFE 869827) +- Choice of timezone (currently only on Unix). (RFE 869827) +- Script to import mail from Unix mailboxes. (RFE 903031) +- Shortcut icon. +- Importing of tickets enabled. +* IMPROVEMENTS +- Added global error slot and adjusted settings screens to use it. (873232) +- Message response form fields remembered in request. +- An instance's children may be migrated even when it is not. +* BUG FIXES +- Mail check thread delays till Zope is ready in 2.7 as well. (835642) +- GroupSettings page template works with new-style groups. (887785) +- Problems sending mail caught and reported to the user or logged. (892947) +- Message ID added to outgoing messages. (895039) +- Newlines in the Cc field no longer break the JavaScript. (904033) +- Private notes and replies no longer lose headers in migration. (904076) +- Private notes may no longer have a To field. (912534) +- Ticket ownership transferred when user deleted. (925344) +- Customers are persistent. (930654) +- Sending files with a bad mime type does not cause an exception. (934133) +- HTML templates no longer have extra breaks added. (934235) +- MailManager.getMail() returns an empty string on success. (934902) +- Add customer form checks fields are filled. (938631) +- Fixed links to AccountSettings page. (938678) + +Version 1.0-b4 +* BUG FIX +- Fixed error when a new thread is started and notification is on. + +Version 1.0-b3 +* NEW FEATURES +- Supporter mechanism for associating tickets fully implemented. +- URLs in messages rendered as hyperlinks. +- Filters can assign to groups as well as users. +* IMPROVEMENTS +- Assigned agent mailed at every new message in ticket, customer only + when he starts a new ticket. This reverses the previous behaviour. +- Tickets can be re-opened by arrival of a new message or through + Ticket Details box. +- Migration version distinguished from product version. +- Group now a class; ensures that group members are assigned to evenly. +- By default users only see tickets assigned to them. +- Export (view raw messages) link added to Ticket index page. +* BUG FIXES +- Account signatures are now used. +- HTML setting on auto replies and templates respected. +- Agents can be deleted. +- Several others (see SourceForge bugs 859030 to 873233). + +Version 1.0-b2 +* NEW FEATURES +- Migration +- HTML messages may now be viewed. +- Most recent search results always available. +- Response target added as option in filters and create ticket screen. +* IMPROVEMENTS +- More robust ticket navigation (works with virtual hosting, "prev"/"next" + links always available, "list" goes to batch containing current ticket). +- Improved handling and presentation of attachments. +- Help screens updated (not quite finished). +- Improved interface to reports (still needs work though). +- All character sets displayed correctly (as far as the browser's fonts allow). +- Mail fetching scripts have an option to specify MailManager's URL . +- Search by from name no longer requires exact match. +- Much Python code removed from page templates. +* BUG FIXES +- Overdue ticket view and searches for overdue tickets now work. +- Automatic mail checking continues after product is refreshed. +- Numerous others (see SourceForge bugs 832932 to 858688). + +Version 1.0-b1 +- Dependence on MailHost product removed. +- Message class now wraps Message object from Python email package, + allowing mails to be retreived in their original form. +- Automatic mail fetching introduced. +- Code for creating e-mails through the web brought together in a new + module and handling added for text entered in any character set. +- Each account is now a separate folder, ready for per account + security settings. +- Fetching and handling of incoming mail moved to new Account class. +- Self service interface to allow customers to manage their own tickets. +- Better handling of HTML emails. +- Create ticket now has more sensible defaults. +- Users now deleted properly. +- Calculates an approximation of disk space used. +- Added Property Managers to ease debugging. +- Users with 'Settings' access can no longer view ZMI. +- Numerous bug fixes. + +Version 0.96 +- By default, shows newest tickets first rather than oldest +- The subject of a ticket can now be changed +- If more email is added to a read ticket it goes back to being unread (bold) +- Advises if an attachment is of a dangerous type (for Windows users) +- Attachments now download with original filename & security improved +- Browser bug in IE prevented selection of user on tickets screen (797221) +- Two extra user definable categories added +- Code tidied up & minor bug fixes + +Version 0.95 +- Added a 'Spam' status and amended reports, tickets & filters accordingly +- Can now delete spam tickets without closing them... [truncated message content] |
From: <ke...@us...> - 2006-05-28 16:15:08
|
Revision: 3100 Author: kevca Date: 2006-05-28 09:14:29 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3100&view=rev Log Message: ----------- Tagging for internal testing Added Paths: ----------- MailManager/tags/RELENG_2_1_RC5_PRE2/ MailManager/tags/RELENG_2_1_RC5_PRE2/CHANGES.txt MailManager/tags/RELENG_2_1_RC5_PRE2/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_1_RC5_PRE2/MailManager.py MailManager/tags/RELENG_2_1_RC5_PRE2/Makefile MailManager/tags/RELENG_2_1_RC5_PRE2/ruleset/engine.py MailManager/tags/RELENG_2_1_RC5_PRE2/tests/testAPI.py MailManager/tags/RELENG_2_1_RC5_PRE2/tests/testOverdueEvent.py MailManager/tags/RELENG_2_1_RC5_PRE2/tests/testSending.py MailManager/tags/RELENG_2_1_RC5_PRE2/www/AccountSettings.zpt MailManager/tags/RELENG_2_1_RC5_PRE2/www/Create.zpt MailManager/tags/RELENG_2_1_RC5_PRE2/www/ticket_index_html.zpt Removed Paths: ------------- MailManager/tags/RELENG_2_1_RC5_PRE2/CHANGES.txt MailManager/tags/RELENG_2_1_RC5_PRE2/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_1_RC5_PRE2/MailManager.py MailManager/tags/RELENG_2_1_RC5_PRE2/Makefile MailManager/tags/RELENG_2_1_RC5_PRE2/ruleset/engine.py MailManager/tags/RELENG_2_1_RC5_PRE2/tests/testAPI.py MailManager/tags/RELENG_2_1_RC5_PRE2/tests/testSending.py MailManager/tags/RELENG_2_1_RC5_PRE2/www/AccountSettings.zpt MailManager/tags/RELENG_2_1_RC5_PRE2/www/Create.zpt MailManager/tags/RELENG_2_1_RC5_PRE2/www/ticket_index_html.zpt Copied: MailManager/tags/RELENG_2_1_RC5_PRE2 (from rev 3085, MailManager/branches/RELENG_2_1) Deleted: MailManager/tags/RELENG_2_1_RC5_PRE2/CHANGES.txt =================================================================== --- MailManager/branches/RELENG_2_1/CHANGES.txt 2006-05-26 20:45:38 UTC (rev 3085) +++ MailManager/tags/RELENG_2_1_RC5_PRE2/CHANGES.txt 2006-05-28 16:14:29 UTC (rev 3100) @@ -1,677 +0,0 @@ -Version 2.1-RC4 -* BUG FIXES -- create_tables flag not used correctly (#1490966) -- Changing user to all has no effect (#1490876) -- Cannot view dequeued ticket (#1490915) -- Search always fails with invalid query (#1490871) -- Postgres encoding may still be in native charset (#1490182) -- Timestamps are not formatted correctly (#1484503) -- Incorrect abilities for new accounts (#1492592) -- Migration from 2.0 broken (#1492890) -- No highlight on subtab for ticket type (#1490998) -- Replying to tickets from queue omits To field (#1484499) -- Search results raises an error (#1484495) -- Queued events are not being processed (#1493443) -- Creating new ticket leads to an error (#1493482) -- No Send buttons on Tickets screen (#1493452) -- Overdue status is lost on migration (#1493442) -- Spam is not being processed (#1493596) -- Conflicting security declarations for QueueReportingEngine (#1493607) -- Filters breaking getMail with unicode messages (#1493620) -- AutoLogout not working correctly (#1493641) -- Add Note missing from overdue tickets (#1494173) -- Loop detection code prevents mailmanager mailing mailmanager (#1494827) -- Unicode issue in getmail (#1493483) -- Overdue transitions fail on closed tickets (#1493636) -- Notify user fails with unicode subjects (#1495112) -- Filters do not allow setting of state (#1495442) -- Create ticket can no longer generate email (#1495494) -- HTML messages are not displayed correctly (#1494158) -* BUG FIXES From 2.0.8 to 2.0.9 -- Formatting broken on templates for HTML (#1477664) -- No HTML response for HTML Required (#1472881) -- Selecting No change results in a failure (#1467786) -- Automatic addition of attachments (#1459924) -- UI Allows creation of empty groups (#1486433) -- Importing fails with alternative timezone (#1485389) -* BUG FIXES From 2.0.9 to 2.0.10 -* SECURITY -- Added in fix for potential security issue - Postgres encoding security hole (#1494281) - The code should not be vulnerable to this issue, but additional bugs in - the release may expose the vulnerability. Adding in a patch which will - prevent the exploit in all cases. - -Version 2.1-RC3 -* BUG FIXES -- setHTML raises Unicode error (#1477563) -- Queues page list has white on white (#1477727) -- Mass update selection doesn't work (#1478274) -- Selected colour leads to white on white (#1477724) -- Strings in code missing from i18n (#1482434) -- User abilities are not maintained consistently (#1481211) -- tickets list not finding tickets (#1481221) -- Editing a group to add a user fails (#1481095) -- Unicode usernames cannot be selected (#1478348) -- Add or Edit user breaks with unicode input (#1478345) -- HTML attachments aren't obvious (#1477717) -- Paging on Tickets screen broken (#1460936) -- show HTML is broken (#1477709) -- setSort on 'Queues' view returns 'Tickets' (#1477564) -- Queues page does not have status buttons (#1477689) -- AutoLogout not working correctly (#1477081) -- No strptime on windows (#1476818) -- getMail fails with TypeError (#1476878) -- Export to Excel on Reports (#1460909) -- Empty abilities are not being handled correctly (#1475604) -- History Display Issues (#1460955) -- Adding/Deleting Attachments problems (#1460943) -- Support of: text invisible (#1460915) -- Queue button doesn't highlight (#1460913) -- Performance Reports still contain queue masters (#1475530) -- getMail fails with unicode error (#1475487) -- Default template on accounts (#1464963) -- Setting template should return to template (#1464961) -- Close button not listed (#1464954) -- Restrict incoming emails with cc's to other accts to 1 tckt (#1464959) -- Return to Queue does not return to queues list (#1464947) -- Mass ticket updates not implemented (#1464953) -- Adding a customer fails (#1460922) -- Reports page is broken (#1472976) -* BUG FIXES From 2.0.7 to 2.0.8 -- Non existant refresh value leads to security error (#1466274) -- Cannot create HTML tickets (#1466223) -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.1-RC2 -* FEATURES -- Message loops are now caught based on presence of X-MailManager header -- Migration code improved to fit with the design proposed in the development - documentation -- TID in subject lines is now optional, based on database settings - although no UI pages allow this to be configured -* BUG FIXES -- State (or Status) of Ticket not display (#1455795) -- Issues with New state (#1456222) -- Deleting users via the Settings tab fails (#1456837) -- Deleting an Account with tickets fails (#1459386) -- RNG using too much entropy (#1459353) -- Fixed issue with non-ascii filter condition (#1438720) -- Tabs do not display on MySQL (#1451140) -- addUser page breaks on MySQL (#1451131) -- CookieCrumblerDisabled exception with http auth (#1451109) -- Fixed #1455297 login chews up entropy. Sessions are now not created until - user has successfully supplied a correct username and password combination. - In addition, the amount of entropy used per login has been reduced but can - still be considered secure. Tests have also been updated to reflect this. -* BUG FIXES From 2.0.7 to 2.0.8 -- Direct cycles of support_of are not allowed now. (#1353210) -- Cite last includes only replies now (#1369571) - -Version 2.1-RC1 -* BUG FIXES -- Merged in bugfixes from between 2.0.6 and 2.0.8 (Unreleased) inclusive - as denoted later in this file -- Various CSS Fixes to improve IE compatability -- MySQL compatability fixes -* IMPROVEMENTS -- Queueing Mode -- User abilities added to the database, queue allocation takes these into - consideration -- Named rulesets in the SQL database to allow for future use of multiple - rulesets per MailManager installation -- CookieCrumbler replaced with LoginHandler, allows for login sessions stored - in SQL and timing out of user logins. - -Version 2.1-beta1 -* BUG FIXES -- Merged in bugfixes from between 2.0.1-rc1 and 2.0.5 -- Minor UI fixes (#1322897, #1350233). -* IMPROVEMENTS -- Set the HTTP realm for authentication (so that auth data doesn't clash - between multiple MailManager instances and other Zope applications on the - same server) (#1356498). -- Seems to work OK with Zope 2.8.x (tested with 2.8.5) (#1328206), with the - most recent 3rd party package release. -- Works with PostgreSQL 8.1. - -Version 2.1-alpha2 -* NEW FEATURES -- Basic syndication support (both atom and RSS) of the top 20 unread tickets - for a MailManager instance. -* IMPROVEMENTS -- Tabindex is now being set on all form elements. -- There's now a print stylesheet for all MailManager pages which should hide - the non-salient information. -* BUG FIXES -- FilterSettings page now works (#1328226). -- Now set before the stylesheet is referenced which sometimes - caused the stylesheet not to load (#1328221). -- Create ticket page should now work (#1314741). - -Version 2.1-alpha1 -* IMPROVEMENTS -- Entirely reworked user interface, which: - - Looks exactly the same as it used to! - - Is XHTML 1.0 Strict and CSS 2.1 compliant. - - Should conform to at least priority 1 and probably priority 2 of the - WAI guidelines. - - Should be really easy to skin to make it look different. - - Is vastly tidied up -- Gone from over 8,000 lines of page templates to - just under 5,000! -- Initial modularisation of the reporting engine. - -Version 2.0.8 (Unreleased) -* Unfactored from 2.0.8 -- Create ticket method is highly broken - - Cannot create HTML tickets (#1466223) -- Unicode from addresses break incoming mail (#1440861) -- Valid tags are stripped from HTML on sending (#1460262) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -* BUG FIXES -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Archive and Restore functionality broken (#1452514) -- Encoding Error with signatures (#1440862) -- Non existant refresh value leads to security error (#1466274) -- Changing format away from HTML generates a Zope error (#1460216) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.8 -* BUG FIXES -- Non existant refresh value leads to security error (#1466274) -- Cannot create HTML tickets (#1466223) -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.7 -* BUG FIXES -- Fixed the setting of next ticket id for MySQL, no longer silently ignores - the option on mailmanager creation and fixes migration (#1412787) -- Send and Close, Send Reply, Send and Hold and Add Note have all been - considerably refactored. This resolves the problem reported where outbound - messages had been silently discarded (#1415497) -- getMail could potentially drop incoming messages whilst collecting from - POP3 accounts. This has now been corrected, and a test case now exists - which reproduces the existing problem and demonstrates it being fixed. - (#1422985) -- i18n fix - on the ticket modify screen "closed" is no longer displayed as - "open" when languages other than English are used (#1423422) -* IMPROVEMENTS -- Massive improvements to the test suite. - -Version 2.0.6 -* IMPROVEMENTS -- We're now using html2text (included) instead of stripogram for converting - HTML to its plain text equivalent (when sending out HTML mail, we also - include a plain text alternative for those who can't read HTML messages). - This results in far prettier plain text conversion. -* BUG FIXES -- Notify user/group flags can now be set/cleared correctly on account - preferences (#1404595). -- Improved address validation. Well, it's now a bit more lax, but it's - completely conformant to RFCs 2821 and 2822 (#1396051). -- MySQL: Default categories are now set up at installation (#1392386). -- HTML parts of multipart/alternative messages are now encoded as UTF-8 - rather than, bizarrely, being forced into ISO-8859-1 (#1368283). -- Make sure the user is informed about *why* test data cannot be removed - (#1345788). - -Version 2.0.5 -* BUG FIXES -- MySQL: Users are now migrated correctly (#1378323) -- MySQL: Attachments can now be of virtually any size (#1378224) -- MySQL: MailManager will now start when psycopg is not present (#1378209) -- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) -- PostgreSQL: Migration works even if response target update fails (#1374603) -- Search now works for users in all timezones (#1375345) -- The test data now sets 'routing' on the accounts (#1375764) -- MMImport.py script now uses new URL (#1378385) - -Version 2.0.4 -* BUG FIXES -- Prevent multiple users replying to the same ticket by accident (#1371269) -- Filters got broken in 2.0.3, change reverted (#1372814) -- Attachments now set the Content-Type header correctly on download (#13369349) -- Template names with trailing whitespace now work (#1363768) -- Set sql_charset on the mailmanager object during migration. (#1369347) - -Version 2.0.3 -* BUG FIXES -- Be more careful about adding and removing the test data (#1353112, #1345788). -- Improve the Unicode support with the MySQL back end (#1338614). -- Support of can now be removed with MySQL back end (#1338603). -- Fixes to the response target settings (#1336398, #1337506). -- setSession correctly clears the offset and always redirects to - Tickets (#1350429). -- Offer MySQL back end as a migration option (#1340301). -- Tickets now correctly marked as unread with MySQL back end (#1344827). - -Version 2.0.2 -* BUG FIXES -- Ignore the showHTML information in the session for plain text - emails. Reapplied previous bugfix (#1242337) -- Resetting response target to None now updates database (#1336398) -- Reports for targets fixed (#1337506) -* IMPROVEMENTS -- Now has setupdb script for MySQL users -- Split off setupdb code, now available as separate module -- Added in documentation for MySQL configuration - -Version 2.0.1-release -* BUG FIXES -- Disk usage screen now fixed for empty instances (#1244446) -- Initial Manager use now has correct roles set (#1324878) -- Altering roles now works correctly (#1324876) -- Update of response target now works correctly (#1324935) -- Removing notification flag for users/group now works correctly (#1315000) -- Migration now works correctly for 1.1 instances (#1291113) -- Setting response targets no longer generates an error (#1324884) - -Version 2.0.1-rc2 -* BUG FIXES -- No longer depends on psycopg due to import statements -- Migration fixes for MySQL users -- Fixed some scoping issues causing ZSQL methods to break due to - acquisition. -* IMPROVEMENTS -- SQL Directory no longer uses FileSystemSite.DirectoryView meaning - that the SQL methods can be overridden by 3rd parties. -- Test suite now has added hooks for overloading object types - -Version 2.0.1-rc1 -* BUG FIXES -- Test suite now covers text search cache consistency, cleared issues - with MySQL's mysql_max_allowed_packet variable -- Postgres support now appears stable - -Version 2.0.1-beta1 -* BUG FIXES -- Merged in all of the changes between 2.0r6 and 2.0r7 -- Fixed the index bug which was resulting in duplicate tickets being - displayed on the list page - -Version 2.0.1-alpha1 -* NEW FEATURES -- Adds in initial MySQL support -- SQL methods given addition parameters to deal with new MySQL support -- Vastly improved test suite - regression test suite for the database code. - -Version 2.0r7 -* BUG FIXES -- Subsequent pages for search were not being returned due to misuse of the - SESSION variable. These are now handled correctly (#1276412) -- Categories and templates were moved entirely to SQL. Upgrade needs a - migration to function correctly. (#1276414) -- listTickets method now correctly searches for subjects -- Fixes a Unicode handling error in the MailMixing class, which could - potentially block up incoming mail -* IMPROVEMENTS -- Postgres installation documentation rewritten -- Changes to loading of test datasets -- Test data set improved, now covers more functionality - -Version 2.0r6 -* BUG FIXES -- Fixed the positioning of the order by section of the listTickets query, - fixes broken ordering for search. -- The listCategories SQL method was broken, which was used by the Reports - pages. Reports for categories other than category0 were broken. - -Version 2.0 -* BUG FIXES -- Fix the security declaration of checkPOP3SSL(). - -Version 2.0 RC 3 -* NEW FEATURES -- Introduce some generalisations, ready for MySQL support in 2.0.1 -- Beginnings of epydoc API documentation. -* BUG FIXES -- Update the version number on migration. (#1229769) -- Robustify the autoreply code to deal with fatal errors. (#1240870) -- When a new message comes in with a ticket id in the subject line, - verify that the ticket already exists instead of assuming that it - does. (#1240711) -- Format the email address in the To: field for replies. (#1230837) -- Ignore the showHTML information in the session for plain text - emails. (#1242337) -- Record the logged in user who sent a reply to a ticket. (#1242958) - -Version 2.0 RC 2 -* BUG FIXES -- multipart/alternative mail with both an HTML and a plain text body now - only display one of them at a time (1227265) -- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) -- Migration updates the mm version -- Create ticket works again (1227744) - -Version 2.0 RC 1 -* BUG FIXES -- Stripogram can now be installed as a Python product in site-packages (1226633) -- Reply-To: header is used in favour of From: (1226156) -- Notifiction emails can handle non-ASCII subject lines (1224784) -- URLs are now accurate on notification emails (1224756) -- Character encodings set correctly on all web pages (1224731) -- Send & Close now goes to the next ticket (1224164) -- Improved date parsing (1223755) -- Respond By: now displayed for tickets with a response target (1222528) -- Attachment titles are now decoded correctly (1223974) - -Version 2.0 Beta 2 -* BUG FIXES -- Make the email validation less strict. (1283401) -- Customers can no longer have email addresses which are used - by an account. (1216414) -- Migration: Drop filters which refer to unknown users/groups. (1216361) -- Migration: Be more careful about coercing dates into ISO8601. (1216534) -- Clarified notification email setup. (1217403) -- Fixed Chinese translation. (1215645) -- Store time zone information in the pgsl database. - -Version 2.0 Beta 1 -* NEW FEATURES -- Added a Chinese translation. -- Add some documentation for creating the Postgres database and point to - detailed docs on the Windows installation process. -- Updated the help files to reflect the new version's feature set. -* BUG FIXES -- Make mbox exports have a more meaningful filename. -- Deal with RFC2047-encoded headers correctly. (1212035) -- Make the disk usage a bit more friendly. (1213604) -- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) -- Epoz now has a white background on all browsers. (1208912) - -Version 2.0 alpha 2 -* NEW FEATURES -- Support for retrieving POP3 mail over SSL (RFE 1204236) -- Optionally notify all in a group of new messages (RFE 1208284) -* BUG FIXES -- Help tab no longer visible after logout (1207656) -- Adding a MailManager instance now creates an initial user (1207022) -- Changes to users such as adding a signature no longer clear password (1207017) -- HTML tickets work properly (1205720, 1205717) -- Time to close tickets recorded (1204825) -- Reply to all button improved (1204805) -- Reassignment notification added (1204372) -- Groups redesigned (1204312) -- Adding/removing attachments no longer clears other form fields (1204272) -- Date translations fixed (1204268) -- Templates fixed (1204267) -- Overdue tickets function properly (1203141) -- Performance v. account report fixed (1196685) -- GetMail fixed (1196606) -- Referential integrity broken on mm_message table (1194418) -- Login link on logout page fixed (1204811) -- Signature handling improved (1204877) -- HTML email fixed (1204987) - -Version 2.0 alpha 1 -* NEW FEATURES -- A complete redesign using PostgreSQL as a replacement for the ZODB in order - to improve performance and scalability. -- Can now use SMTP servers that require a login (RFE 939720) - -Version 1.1 -* NEW FEATURES -- Internationalization of the help documentation. -* BUG FIXES -- Make sure that sending mail out is the last thing done, which should reduce - the window where a ConflictError would cause duplicate emails to be sent. -- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other - than a MessageParseError. Otherwise we wind up hard-bouncing (instead of - retrying) on a ConflictError. - -Version 1.1-rc5 -* BUG FIXES -- Comptatible with Zope 2.6/Python 2.1 again - -Version 1.1-rc4 -* BUG FIXES -- Standard attachments fixed (1110435) -- Clear supporter link fixed after i18n problem (1110436) - -Version 1.1-rc3 -* NEW FEATURES -[Unfortunately it was essential to add the following features at - this late stage for commercial reasons.] -- Added archive/restore tickets (RFE 953290) -- Create ticket can now have multiple attachments (RFE 987700) -- Replies can also have multiple attachments (RFE 859141) -- Standard set of attachments can be stored on the system (RFE 985469) -* BUG FIXES -- Edit of mail headers now works properly (RFE 859102) -- Fixed broken migration - -Version 1.1-rc2 -* BUG FIXES -- Now possible to add/edit account without SSL (1090041) -- Spam tickets no longer appear on the 'New' tickets list - -Version 1.1-rc1 -* NEW FEATURES -- Users notified on re-assignment of tickets (RFE 978035) -- Internationalisation (i18n) added ready for translation to other languages. -- Support for SSL connections to remote IMAP server. -- Any mail headers may be used in filters (RFE 859102) -* BUG FIXES -- Report graphs now work for user-defined categories (978404) -- File downloads now work when there is a space in the filename (985150) -- Remove support ticket feature fixed (985677) -- Users no longer notified if spam is received (1059104) -- Spam no longer displayed on default ticket listing views -- Templates with names ending in a space may now be deleted/edited (1003514) - -Version 1.0 -No changes from 1.0-rc2 - -Version 1.0-rc2 -* NEW FEATURES -- Batch classification of tickets. (RFE 859114 and 957719) -* BUG FIXES -- Migration works when filters are of mixed formats. (945956) -- Migration works when groups are of mixed formats. (945959) -- Messages from mailer-daemon with a real name do not cause a loop. (952864) -- Works on Firefox for Mac when reply has no attachment. (963291) -- Report graphs work for more than 200 tickets in a period. (964144) - -Version 1.0-rc1 -* NEW FEATURES -- Choice of date format. (RFE 869827) -- Choice of timezone (currently only on Unix). (RFE 869827) -- Script to import mail from Unix mailboxes. (RFE 903031) -- Shortcut icon. -- Importing of tickets enabled. -* IMPROVEMENTS -- Added global error slot and adjusted settings screens to use it. (873232) -- Message response form fields remembered in request. -- An instance's children may be migrated even when it is not. -* BUG FIXES -- Mail check thread delays till Zope is ready in 2.7 as well. (835642) -- GroupSettings page template works with new-style groups. (887785) -- Problems sending mail caught and reported to the user or logged. (892947) -- Message ID added to outgoing messages. (895039) -- Newlines in the Cc field no longer break the JavaScript. (904033) -- Private notes and replies no longer lose headers in migration. (904076) -- Private notes may no longer have a To field. (912534) -- Ticket ownership transferred when user deleted. (925344) -- Customers are persistent. (930654) -- Sending files with a bad mime type does not cause an exception. (934133) -- HTML templates no longer have extra breaks added. (934235) -- MailManager.getMail() returns an empty string on success. (934902) -- Add customer form checks fields are filled. (938631) -- Fixed links to AccountSettings page. (938678) - -Version 1.0-b4 -* BUG FIX -- Fixed error when a new thread is started and notification is on. - -Version 1.0-b3 -* NEW FEATURES -- Supporter mechanism for associating tickets fully implemented. -- URLs in messages rendered as hyperlinks. -- Filters can assign to groups as well as users. -* IMPROVEMENTS -- Assigned agent mailed at every new message in ticket, customer only - when he starts a new ticket. This reverses the previous behaviour. -- Tickets can be re-opened by arrival of a new message or through - Ticket Details box. -- Migration version distinguished from product version. -- Group now a class; ensures that group members are assigned to evenly. -- By default users only see tickets assigned to them. -- Export (view raw messages) link added to Ticket index page. -* BUG FIXES -- Account signatures are now used. -- HTML setting on auto replies and templates respected. -- Agents can be deleted. -- Several others (see SourceForge bugs 859030 to 873233). - -Version 1.0-b2 -* NEW FEATURES -- Migration -- HTML messages may now be viewed. -- Most recent search results always available. -- Response target added as option in filters and create ticket screen. -* IMPROVEMENTS -- More robust ticket navigation (works with virtual hosting, "prev"/"next" - links always available, "list" goes to batch containing current ticket). -- Improved handling and presentation of attachments. -- Help screens updated (not quite finished). -- Improved interface to reports (still needs work though). -- All character sets displayed correctly (as far as the browser's fonts allow). -- Mail fetching scripts have an option to specify MailManager's URL . -- Search by from name no longer requires exact match. -- Much Python code removed from page templates. -* BUG FIXES -- Overdue ticket view and searches for overdue tickets now work. -- Automatic mail checking continues after product is refreshed. -- Numerous others (see SourceForge bugs 832932 to 858688). - -Version 1.0-b1 -- Dependence on MailHost product removed. -- Message class now wraps Message object from Python email package, - allowing mails to be retreived in their original form. -- Automatic mail fetching introduced. -- Code for creating e-mails through the web brought together in a new - module and handling added for text entered in any character set. -- Each account is now a separate folder, ready for per account - security settings. -- Fetching and handling of incoming mail moved to new Account class. -- Self service interface to allow customers to manage their own tickets. -- Better handling of HTML emails. -- Create ticket now has more sensible defaults. -- Users now deleted properly. -- Calculates an approximation of disk space used. -- Added Property Managers to ease debugging. -- Users with 'Settings' access can no longer view ZMI. -- Numerous bug fixes. - -Version 0.96 -- By default, shows newest tickets first rather than oldest -- The subject of a ticket can now be changed -- If more email is added to a read ticket it goes back to being unread (bold) -- Advises if an attachment is of a dangerous type (for Windows users) -- Attachments now download with original filename & security improved -- Browser bug in IE prevented selection of user on tickets screen (797221) -- Two extra user definable categories added -- Code tidied up & minor bug fixes - -Version 0.95 -- Added a 'Spam' status and amended reports, tickets & filters accordingly -- Can now delete spam tickets without closing them (783289) -- Now handles AppleDouble attachments correctly (787671) -- POP3 mailbox lock removed if there is an error (787677) -- IMAP mailbox lock removed if there is an error -- Mails that can't be processed are now stored raw rather than deleted -- Added 'priority' and 'assigned' to Search screen (785360) -- Basic export of reports to Excel implemented -- Now record and report on times to close as well as times to respond -- Other minor fixes - -Version 0.94 -- Ticket status is displayed correctly in all circumstances -- Adding attachments when creating a ticket thru the web now works as expected. -- Users can be notified of new tickets in all circumstances (783955) -- Allow selection of fields to display on tickets screen (783863) -- Added submenu to the Create ticket screen -- Other minor fixes - -Version 0.93 -- Improved attachment handling and display -- Improved ticket navigation (now back/list/next on ticket view) (780783) -- Fixed a bug in the reporting graphs where the last day in the month could - be missed -- Added an auto refresh option for tickets screen (feature request 781294) -- By default tickets created through the web are assigned to the logged in user, - rather than the first user alphabetically -- Improved outgoing mail -- More advanced standard filter -- Tightened up security -- Help button now context sensitive - -Version 0.92 -- Adding a user with the Reports permission now works as expected (779986) -- Account deletion now works properly (779989) -- Admin password now hidden on the Add MailManager page (779987) - -Thanks to Ronan Amicel for spotting these four bugs. - -- Ticket deletion system improved. -- Supporting tickets system now works better. - -Version 0.91 -- Fixed the Account Help screen. Now displays properly and text is accurate. -- Fixed the 'Change details' section on a ticket screen so the user the ticket - is assigned to is displayed by default. Also ensured user names are displayed - in alphabetical order. -- Categories can now be deleted. Deleted categories will still appear in - Reports, System Settings and on the Search page until every ticket with that - category has been deleted from the system. - -Thanks to Kevin Gill for spotting these bugs. - -Version 0.9 -The first open source release of MailManager. Based on the commercial version -however with some major changes: - -- Uses the Zope Object DB instead of an external relational database. This - changes the performance, it is faster in some areas and slower in others. It - makes the product much easier to install. -- Use of HTML to generate the graphs. Not as attractive as the commercial - version but saves the difficulty of installing extensions which were not - stable on all platforms. -- Improved text editor. Epoz is used to provide rich text editing allowing - easy creation of HTML mail. -- Improved text indexing. Greatly expanded query options. -- Bug fixes. A number of minor bugs were fixed. Copied: MailManager/tags/RELENG_2_1_RC5_PRE2/CHANGES.txt (from rev 3095, MailManager/branches/RELENG_2_1/CHANGES.txt) =================================================================== --- MailManager/tags/RELENG_2_1_RC5_PRE2/CHANGES.txt (rev 0) +++ MailManager/tags/RELENG_2_1_RC5_PRE2/CHANGES.txt 2006-05-28 16:14:29 UTC (rev 3100) @@ -0,0 +1,686 @@ +Version 2.1-RC5 +* BUG FIXES +- Create tickets hardcodes Epoz (#1495917) +- Response target defaults to now (#1494223) +- Response targets for accounts are now compulsory (#1494791) +- Blank items in history (#1495097) +- Empty category choice shown on tickets page (#1496041) +- History display garbled for category changes (#1494163) + +Version 2.1-RC4 +* BUG FIXES +- create_tables flag not used correctly (#1490966) +- Changing user to all has no effect (#1490876) +- Cannot view dequeued ticket (#1490915) +- Search always fails with invalid query (#1490871) +- Postgres encoding may still be in native charset (#1490182) +- Timestamps are not formatted correctly (#1484503) +- Incorrect abilities for new accounts (#1492592) +- Migration from 2.0 broken (#1492890) +- No highlight on subtab for ticket type (#1490998) +- Replying to tickets from queue omits To field (#1484499) +- Search results raises an error (#1484495) +- Queued events are not being processed (#1493443) +- Creating new ticket leads to an error (#1493482) +- No Send buttons on Tickets screen (#1493452) +- Overdue status is lost on migration (#1493442) +- Spam is not being processed (#1493596) +- Conflicting security declarations for QueueReportingEngine (#1493607) +- Filters breaking getMail with unicode messages (#1493620) +- AutoLogout not working correctly (#1493641) +- Add Note missing from overdue tickets (#1494173) +- Loop detection code prevents mailmanager mailing mailmanager (#1494827) +- Unicode issue in getmail (#1493483) +- Overdue transitions fail on closed tickets (#1493636) +- Notify user fails with unicode subjects (#1495112) +- Filters do not allow setting of state (#1495442) +- Create ticket can no longer generate email (#1495494) +- HTML messages are not displayed correctly (#1494158) +* BUG FIXES From 2.0.8 to 2.0.9 +- Formatting broken on templates for HTML (#1477664) +- No HTML response for HTML Required (#1472881) +- Selecting No change results in a failure (#1467786) +- Automatic addition of attachments (#1459924) +- UI Allows creation of empty groups (#1486433) +- Importing fails with alternative timezone (#1485389) +* BUG FIXES From 2.0.9 to 2.0.10 +* SECURITY +- Added in fix for potential security issue + Postgres encoding security hole (#1494281) + The code should not be vulnerable to this issue, but additional bugs in + the release may expose the vulnerability. Adding in a patch which will + prevent the exploit in all cases. + +Version 2.1-RC3 +* BUG FIXES +- setHTML raises Unicode error (#1477563) +- Queues page list has white on white (#1477727) +- Mass update selection doesn't work (#1478274) +- Selected colour leads to white on white (#1477724) +- Strings in code missing from i18n (#1482434) +- User abilities are not maintained consistently (#1481211) +- tickets list not finding tickets (#1481221) +- Editing a group to add a user fails (#1481095) +- Unicode usernames cannot be selected (#1478348) +- Add or Edit user breaks with unicode input (#1478345) +- HTML attachments aren't obvious (#1477717) +- Paging on Tickets screen broken (#1460936) +- show HTML is broken (#1477709) +- setSort on 'Queues' view returns 'Tickets' (#1477564) +- Queues page does not have status buttons (#1477689) +- AutoLogout not working correctly (#1477081) +- No strptime on windows (#1476818) +- getMail fails with TypeError (#1476878) +- Export to Excel on Reports (#1460909) +- Empty abilities are not being handled correctly (#1475604) +- History Display Issues (#1460955) +- Adding/Deleting Attachments problems (#1460943) +- Support of: text invisible (#1460915) +- Queue button doesn't highlight (#1460913) +- Performance Reports still contain queue masters (#1475530) +- getMail fails with unicode error (#1475487) +- Default template on accounts (#1464963) +- Setting template should return to template (#1464961) +- Close button not listed (#1464954) +- Restrict incoming emails with cc's to other accts to 1 tckt (#1464959) +- Return to Queue does not return to queues list (#1464947) +- Mass ticket updates not implemented (#1464953) +- Adding a customer fails (#1460922) +- Reports page is broken (#1472976) +* BUG FIXES From 2.0.7 to 2.0.8 +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.1-RC2 +* FEATURES +- Message loops are now caught based on presence of X-MailManager header +- Migration code improved to fit with the design proposed in the development + documentation +- TID in subject lines is now optional, based on database settings + although no UI pages allow this to be configured +* BUG FIXES +- State (or Status) of Ticket not display (#1455795) +- Issues with New state (#1456222) +- Deleting users via the Settings tab fails (#1456837) +- Deleting an Account with tickets fails (#1459386) +- RNG using too much entropy (#1459353) +- Fixed issue with non-ascii filter condition (#1438720) +- Tabs do not display on MySQL (#1451140) +- addUser page breaks on MySQL (#1451131) +- CookieCrumblerDisabled exception with http auth (#1451109) +- Fixed #1455297 login chews up entropy. Sessions are now not created until + user has successfully supplied a correct username and password combination. + In addition, the amount of entropy used per login has been reduced but can + still be considered secure. Tests have also been updated to reflect this. +* BUG FIXES From 2.0.7 to 2.0.8 +- Direct cycles of support_of are not allowed now. (#1353210) +- Cite last includes only replies now (#1369571) + +Version 2.1-RC1 +* BUG FIXES +- Merged in bugfixes from between 2.0.6 and 2.0.8 (Unreleased) inclusive + as denoted later in this file +- Various CSS Fixes to improve IE compatability +- MySQL compatability fixes +* IMPROVEMENTS +- Queueing Mode +- User abilities added to the database, queue allocation takes these into + consideration +- Named rulesets in the SQL database to allow for future use of multiple + rulesets per MailManager installation +- CookieCrumbler replaced with LoginHandler, allows for login sessions stored + in SQL and timing out of user logins. + +Version 2.1-beta1 +* BUG FIXES +- Merged in bugfixes from between 2.0.1-rc1 and 2.0.5 +- Minor UI fixes (#1322897, #1350233). +* IMPROVEMENTS +- Set the HTTP realm for authentication (so that auth data doesn't clash + between multiple MailManager instances and other Zope applications on the + same server) (#1356498). +- Seems to work OK with Zope 2.8.x (tested with 2.8.5) (#1328206), with the + most recent 3rd party package release. +- Works with PostgreSQL 8.1. + +Version 2.1-alpha2 +* NEW FEATURES +- Basic syndication support (both atom and RSS) of the top 20 unread tickets + for a MailManager instance. +* IMPROVEMENTS +- Tabindex is now being set on all form elements. +- There's now a print stylesheet for all MailManager pages which should hide + the non-salient information. +* BUG FIXES +- FilterSettings page now works (#1328226). +- Now set before the stylesheet is referenced which sometimes + caused the stylesheet not to load (#1328221). +- Create ticket page should now work (#1314741). + +Version 2.1-alpha1 +* IMPROVEMENTS +- Entirely reworked user interface, which: + - Looks exactly the same as it used to! + - Is XHTML 1.0 Strict and CSS 2.1 compliant. + - Should conform to at least priority 1 and probably priority 2 of the + WAI guidelines. + - Should be really easy to skin to make it look different. + - Is vastly tidied up -- Gone from over 8,000 lines of page templates to + just under 5,000! +- Initial modularisation of the reporting engine. + +Version 2.0.8 (Unreleased) +* Unfactored from 2.0.8 +- Create ticket method is highly broken + - Cannot create HTML tickets (#1466223) +- Unicode from addresses break incoming mail (#1440861) +- Valid tags are stripped from HTML on sending (#1460262) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +* BUG FIXES +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Archive and Restore functionality broken (#1452514) +- Encoding Error with signatures (#1440862) +- Non existant refresh value leads to security error (#1466274) +- Changing format away from HTML generates a Zope error (#1460216) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.8 +* BUG FIXES +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.7 +* BUG FIXES +- Fixed the setting of next ticket id for MySQL, no longer silently ignores + the option on mailmanager creation and fixes migration (#1412787) +- Send and Close, Send Reply, Send and Hold and Add Note have all been + considerably refactored. This resolves the problem reported where outbound + messages had been silently discarded (#1415497) +- getMail could potentially drop incoming messages whilst collecting from + POP3 accounts. This has now been corrected, and a test case now exists + which reproduces the existing problem and demonstrates it being fixed. + (#1422985) +- i18n fix - on the ticket modify screen "closed" is no longer displayed as + "open" when languages other than English are used (#1423422) +* IMPROVEMENTS +- Massive improvements to the test suite. + +Version 2.0.6 +* IMPROVEMENTS +- We're now using html2text (included) instead of stripogram for converting + HTML to its plain text equivalent (when sending out HTML mail, we also + include a plain text alternative for those who can't read HTML messages). + This results in far prettier plain text conversion. +* BUG FIXES +- Notify user/group flags can now be set/cleared correctly on account + preferences (#1404595). +- Improved address validation. Well, it's now a bit more lax, but it's + completely conformant to RFCs 2821 and 2822 (#1396051). +- MySQL: Default categories are now set up at installation (#1392386). +- HTML parts of multipart/alternative messages are now encoded as UTF-8 + rather than, bizarrely, being forced into ISO-8859-1 (#1368283). +- Make sure the user is informed about *why* test data cannot be removed + (#1345788). + +Version 2.0.5 +* BUG FIXES +- MySQL: Users are now migrated correctly (#1378323) +- MySQL: Attachments can now be of virtually any size (#1378224) +- MySQL: MailManager will now start when psycopg is not present (#1378209) +- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) +- PostgreSQL: Migration works even if response target update fails (#1374603) +- Search now works for users in all timezones (#1375345) +- The test data now sets 'routing' on the accounts (#1375764) +- MMImport.py script now uses new URL (#1378385) + +Version 2.0.4 +* BUG FIXES +- Prevent multiple users replying to the same ticket by accident (#1371269) +- Filters got broken in 2.0.3, change reverted (#1372814) +- Attachments now set the Content-Type header correctly on download (#13369349) +- Template names with trailing whitespace now work (#1363768) +- Set sql_charset on the mailmanager object during migration. (#1369347) + +Version 2.0.3 +* BUG FIXES +- Be more careful about adding and removing the test data (#1353112, #1345788). +- Improve the Unicode support with the MySQL back end (#1338614). +- Support of can now be removed with MySQL back end (#1338603). +- Fixes to the response target settings (#1336398, #1337506). +- setSession correctly clears the offset and always redirects to + Tickets (#1350429). +- Offer MySQL back end as a migration option (#1340301). +- Tickets now correctly marked as unread with MySQL back end (#1344827). + +Version 2.0.2 +* BUG FIXES +- Ignore the showHTML information in the session for plain text + emails. Reapplied previous bugfix (#1242337) +- Resetting response target to None now updates database (#1336398) +- Reports for targets fixed (#1337506) +* IMPROVEMENTS +- Now has setupdb script for MySQL users +- Split off setupdb code, now available as separate module +- Added in documentation for MySQL configuration + +Version 2.0.1-release +* BUG FIXES +- Disk usage screen now fixed for empty instances (#1244446) +- Initial Manager use now has correct roles set (#1324878) +- Altering roles now works correctly (#1324876) +- Update of response target now works correctly (#1324935) +- Removing notification flag for users/group now works correctly (#1315000) +- Migration now works correctly for 1.1 instances (#1291113) +- Setting response targets no longer generates an error (#1324884) + +Version 2.0.1-rc2 +* BUG FIXES +- No longer depends on psycopg due to import statements +- Migration fixes for MySQL users +- Fixed some scoping issues causing ZSQL methods to break due to + acquisition. +* IMPROVEMENTS +- SQL Directory no longer uses FileSystemSite.DirectoryView meaning + that the SQL methods can be overridden by 3rd parties. +- Test suite now has added hooks for overloading object types + +Version 2.0.1-rc1 +* BUG FIXES +- Test suite now covers text search cache consistency, cleared issues + with MySQL's mysql_max_allowed_packet variable +- Postgres support now appears stable + +Version 2.0.1-beta1 +* BUG FIXES +- Merged in all of the changes between 2.0r6 and 2.0r7 +- Fixed the index bug which was resulting in duplicate tickets being + displayed on the list page + +Version 2.0.1-alpha1 +* NEW FEATURES +- Adds in initial MySQL support +- SQL methods given addition parameters to deal with new MySQL support +- Vastly improved test suite - regression test suite for the database code. + +Version 2.0r7 +* BUG FIXES +- Subsequent pages for search were not being returned due to misuse of the + SESSION variable. These are now handled correctly (#1276412) +- Categories and templates were moved entirely to SQL. Upgrade needs a + migration to function correctly. (#1276414) +- listTickets method now correctly searches for subjects +- Fixes a Unicode handling error in the MailMixing class, which could + potentially block up incoming mail +* IMPROVEMENTS +- Postgres installation documentation rewritten +- Changes to loading of test datasets +- Test data set improved, now covers more functionality + +Version 2.0r6 +* BUG FIXES +- Fixed the positioning of the order by section of the listTickets query, + fixes broken ordering for search. +- The listCategories SQL method was broken, which was used by the Reports + pages. Reports for categories other than category0 were broken. + +Version 2.0 +* BUG FIXES +- Fix the security declaration of checkPOP3SSL(). + +Version 2.0 RC 3 +* NEW FEATURES +- Introduce some generalisations, ready for MySQL support in 2.0.1 +- Beginnings of epydoc API documentation. +* BUG FIXES +- Update the version number on migration. (#1229769) +- Robustify the autoreply code to deal with fatal errors. (#1240870) +- When a new message comes in with a ticket id in the subject line, + verify that the ticket already exists instead of assuming that it + does. (#1240711) +- Format the email address in the To: field for replies. (#1230837) +- Ignore the showHTML information in the session for plain text + emails. (#1242337) +- Record the logged in user who sent a reply to a ticket. (#1242958) + +Version 2.0 RC 2 +* BUG FIXES +- multipart/alternative mail with both an HTML and a plain text body now + only display one of them at a time (1227265) +- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) +- Migration updates the mm version +- Create ticket works again (1227744) + +Version 2.0 RC 1 +* BUG FIXES +- Stripogram can now be installed as a Python product in site-packages (1226633) +- Reply-To: header is used in favour of From: (1226156) +- Notifiction emails can handle non-ASCII subject lines (1224784) +- URLs are now accurate on notification emails (1224756) +- Character encodings set correctly on all web pages (1224731) +- Send & Close now goes to the next ticket (1224164) +- Improved date parsing (1223755) +- Respond By: now displayed for tickets with a response target (1222528) +- Attachment titles are now decoded correctly (1223974) + +Version 2.0 Beta 2 +* BUG FIXES +- Make the email validation less strict. (1283401) +- Customers can no longer have email addresses which are used + by an account. (1216414) +- Migration: Drop filters which refer to unknown users/groups. (1216361) +- Migration: Be more careful about coercing dates into ISO8601. (1216534) +- Clarified notification email setup. (1217403) +- Fixed Chinese translation. (1215645) +- Store time zone information in the pgsl database. + +Version 2.0 Beta 1 +* NEW FEATURES +- Added a Chinese translation. +- Add some documentation for creating the Postgres database and point to + detailed docs on the Windows installation process. +- Updated the help files to reflect the new version's feature set. +* BUG FIXES +- Make mbox exports have a more meaningful filename. +- Deal with RFC2047-encoded headers correctly. (1212035) +- Make the disk usage a bit more friendly. (1213604) +- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) +- Epoz now has a white background on all browsers. (1208912) + +Version 2.0 alpha 2 +* NEW FEATURES +- Support for retrieving POP3 mail over SSL (RFE 1204236) +- Optionally notify all in a group of new messages (RFE 1208284) +* BUG FIXES +- Help tab no longer visible after logout (1207656) +- Adding a MailManager instance now creates an initial user (1207022) +- Changes to users such as adding a signature no longer clear password (1207017) +- HTML tickets work properly (1205720, 1205717) +- Time to close tickets recorded (1204825) +- Reply to all button improved (1204805) +- Reassignment notification added (1204372) +- Groups redesigned (1204312) +- Adding/removing attachments no longer clears other form fields (1204272) +- Date translations fixed (1204268) +- Templates fixed (1204267) +- Overdue tickets function properly (1203141) +- Performance v. account report fixed (1196685) +- GetMail fixed (1196606) +- Referential integrity broken on mm_message table (1194418) +- Login link on logout page fixed (1204811) +- Signature handling improved (1204877) +- HTML email fixed (1204987) + +Version 2.0 alpha 1 +* NEW FEATURES +- A complete redesign using PostgreSQL as a replacement for the ZODB in order + to improve performance and scalability. +- Can now use SMTP servers that require a login (RFE 939720) + +Version 1.1 +* NEW FEATURES +- Internationalization of the help documentation. +* BUG FIXES +- Make sure that sending mail out is the last thing done, which should reduce + the window where a ConflictError would cause duplicate emails to be sent. +- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other + than a MessageParseError. Otherwise we wind up hard-bouncing (instead of + retrying) on a ConflictError. + +Version 1.1-rc5 +* BUG FIXES +- Comptatible with Zope 2.6/Python 2.1 again + +Version 1.1-rc4 +* BUG FIXES +- Standard attachments fixed (1110435) +- Clear supporter link fixed after i18n problem (1110436) + +Version 1.1-rc3 +* NEW FEATURES +[Unfortunately it was essential to add the following features at + this late stage for commercial reasons.] +- Added archive/restore tickets (RFE 953290) +- Create ticket can now have multiple attachments (RFE 987700) +- Replies can also have multiple attachments (RFE 859141) +- Standard set of attachments can be stored on the system (RFE 985469) +* BUG FIXES +- Edit of mail headers now works properly (RFE 859102) +- Fixed broken migration + +Version 1.1-rc2 +* BUG FIXES +- Now possible to add/edit account without SSL (1090041) +- Spam tickets no longer appear on the 'New' tickets list + +Version 1.1-rc1 +* NEW FEATURES +- Users notified on re-assignment of tickets (RFE 978035) +- Internationalisation (i18n) added ready for translation to other languages. +- Support for SSL connections to remote IMAP server. +- Any mail headers may be used in filters (RFE 859102) +* BUG FIXES +- Report graphs now work for user-defined categories (978404) +- File downloads now work when there is a space in the filename (985150) +- Remove support ticket feature fixed (985677) +- Users no longer notified if spam is received (1059104) +- Spam no longer displayed on default ticket listing views +- Templates with names ending in a space may now be deleted/edited (1003514) + +Version 1.0 +No changes from 1.0-rc2 + +Version 1.0-rc2 +* NEW FEATURES +- Batch classification of tickets. (RFE 859114 and 957719) +* BUG FIXES +- Migration works when filters are of mixed formats. (945956) +- Migration works when groups are of mixed formats. (945959) +- Messages from mailer-daemon with a real name do not cause a loop. (952864) +- Works on Firefox for Mac when reply has no attachment. (963291) +- Report graphs work for more than 200 tickets in a period. (964144) + +Version 1.0-rc1 +* NEW FEATURES +- Choice of date format. (RFE 869827) +- Choice of timezone (currently only on Unix). (RFE 869827) +- Script to import mail from Unix mailboxes. (RFE 903031) +- Shortcut icon. +- Importing of tickets enabled. +* IMPROVEMENTS +- Added global error slot and adjusted settings screens to use it. (873232) +- Message response form fields remembered in request. +- An instance's children may be migrated even when it is not. +* BUG FIXES +- Mail check thread delays till Zope is ready in 2.7 as well. (835642) +- GroupSettings page template works with new-style groups. (887785) +- Problems sending mail caught and reported to the user or logged. (892947) +- Message ID added to outgoing messages. (895039) +- Newlines in the Cc field no longer break the JavaScript. (904033) +- Private notes and replies no longer lose headers in migration. (904076) +- Private notes may no longer have a To field. (912534) +- Ticket ownership transferred when user deleted. (925344) +- Customers are persistent. (930654) +- Sending files with a bad mime type does not cause an exception. (934133) +- HTML templates no longer have extra breaks added. (934235) +- MailManager.getMail() returns an empty string on success. (934902) +- Add customer form checks fields are filled. (938631) +- Fixed links to AccountSettings page. (938678) + +Version 1.0-b4 +* BUG FIX +- Fixed error when a new thread is started and notification is on. + +Version 1.0-b3 +* NEW FEATURES +- Supporter mechanism for associating tickets fully implemented. +- URLs in messages rendered as hyperlinks. +- Filters can assign to groups as well as users. +* IMPROVEMENTS +- Assigned agent mailed at every new message in ticket, customer only + when he starts a new ticket. This reverses the previous behaviour. +- Tickets can be re-opened by arrival of a new message or through + Ticket Details box. +- Migration version distinguished from product version. +- Group now a class; ensures that group members are assigned to evenly. +- By default users only see tickets assigned to them. +- Export (view raw messages) link added to Ticket index page. +* BUG FIXES +- Account signatures are now used. +- HTML setting on auto replies and templates respected. +- Agents can be deleted. +- Several others (see SourceForge bugs 859030 to 873233). + +Version 1.0-b2 +* NEW FEATURES +- Migration +- HTML messages may now be viewed. +- Most recent search results always available. +- Response target added as option in filters and create ticket screen. +* IMPROVEMENTS +- More robust ticket navigation (works with virtual hosting, "prev"/"next" + links always available, "list" goes to batch containing current ticket). +- Improved handling and presentation of attachments. +- Help screens updated (not quite finished). +- Improved interface to reports (still needs work though). +- All character sets displayed correctly (as far as the browser's fonts allow). +- Mail fetching scripts have an option to specify MailManager's URL . +- Search by from name no longer requires exact match. +- Much Python code removed from page templates. +* BUG FIXES +- Overdue ticket view and searches for overdue tickets now work. +- Automatic mail checking continues after product is refreshed. +- Numerous others (see SourceForge bugs 832932 to 858688). + +Version 1.0-b1 +- Dependence on MailHost product removed. +- Message class now wraps Message object from Python email package, + allowing mails to be retreived in their original form. +- Automatic mail fetching introduced. +- Code for creating e-mails through the web brought together in a new + module and handling added for text entered in any character set. +- Each account is now a separate folder, ready for per account + security settings. +- Fetching and handling of incoming mail moved to new Account class. +- Self service interface to allow customers to manage their own tickets. +- Better handling of HTML emails. +- Create ticket now has more sensible defaults. +- Users now deleted properly. +- Calculates an approximation of disk space used. +- Added Property Managers to ease debugging. +- Users with 'Settings' access can no longer view ZMI. +- Numerous bug fixes. + +Version 0.96 +- By default, shows newest tickets first rather than oldest +- The subject of a ticket can now be changed +- If more email is added to a read ticket it goes back to being unread (bold) +- Advises if an attachment is of a dangerous type (for Windows users) +- Attachments now download with original filename & security improved +- Browser bug in IE prevented selection of user on tickets screen (797221) +- Two extra user definable categories added +- Code tidied up & minor bug fixes + +Version 0.95 +- Added a 'Spam' status and amended reports, tickets & filters accordingly +- Can now delete spam tickets without closing ... [truncated message content] |
From: <ke...@us...> - 2006-06-01 10:23:53
|
Revision: 3125 Author: kevca Date: 2006-06-01 03:23:38 -0700 (Thu, 01 Jun 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3125&view=rev Log Message: ----------- Tagging for internal testing Added Paths: ----------- MailManager/tags/RELENG_2_1_RC5_PRE5/ MailManager/tags/RELENG_2_1_RC5_PRE5/MailManager.py MailManager/tags/RELENG_2_1_RC5_PRE5/Makefile MailManager/tags/RELENG_2_1_RC5_PRE5/README.txt MailManager/tags/RELENG_2_1_RC5_PRE5/tests/testTimezones.py Removed Paths: ------------- MailManager/tags/RELENG_2_1_RC5_PRE5/MailManager.py MailManager/tags/RELENG_2_1_RC5_PRE5/Makefile MailManager/tags/RELENG_2_1_RC5_PRE5/README.txt Copied: MailManager/tags/RELENG_2_1_RC5_PRE5 (from rev 3122, MailManager/branches/RELENG_2_1) Deleted: MailManager/tags/RELENG_2_1_RC5_PRE5/MailManager.py =================================================================== --- MailManager/branches/RELENG_2_1/MailManager.py 2006-05-31 20:31:46 UTC (rev 3122) +++ MailManager/tags/RELENG_2_1_RC5_PRE5/MailManager.py 2006-06-01 10:23:38 UTC (rev 3125) @@ -1,3900 +0,0 @@ -# (c) Copyright Logicalware Ltd 2002-2006 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ - -__version__ = '$Revision$' - -# Zope modules. -from Globals import InitializeClass, DTMLFile, package_home -from Products.PageTemplates.PageTemplateFile import PageTemplateFile -from AccessControl import ClassSecurityInfo, getSecurityManager -from AccessControl.AuthEncoding import pw_encrypt -from Acquisition import aq_inner -from OFS.Folder import Folder -from DateTime import DateTime -from zExceptions import BadRequest, Unauthorized - -# Modules from this package. -from MailMixin import MailMixin -from MMImportHandler import MMImportHandler - -from Products.MailManager.support.login import manage_addLoginHandler -from Products.MailManager.support.i18n import convertString -from Products.MailManager.support.i18n import translateString, negotiate_language - -# Add methods. -from Products.FileSystemSite.DirectoryView import manage_addDirectoryView -from Products.MailHost.MailHost import manage_addMailHost -from Products.PageTemplates.ZopePageTemplate import manage_addPageTemplate -from Products.ZSQLMethods.SQL import manage_addZSQLMethod -from Products.MailManager.sql import MailManagerSQL, FSZSQLWrapper, SQLWrapper -from Products.MailManager.Queueing import BasicQueue, QueueError -from MMUserFolder import manage_addMMUserFolder - -# Python library modules. -import base64, cgi, datetime, os, re, stat, time -from calendar import monthrange -from email.Utils import formataddr, parseaddr, mktime_tz, parsedate_tz -try: - from poplib import POP3_SSL - pop3_ssl = True -except ImportError: - pop3_ssl = False - -import poplib -import imaplib -import pprint - -from tempfile import TemporaryFile -from xml.sax.saxutils import XMLGenerator -from xml.sax import make_parser - -# Database support -try: - import MySQLdb -except ImportError, e: - pass - -try: - import psycopg -except ImportError, e: - pass - -import zLOG - -# ZopeScheduler -try: - from Products.ZopeScheduler.ISchedulingTask import ISchedulingTask - ZOPE_SCHEDULER_PRESENT = True -except ImportError: - ZOPE_SCHEDULER_PRESENT = False - -# mx.DateTime for parsing email dates -import mx.DateTime -import mx.DateTime.ISO -from mx.DateTime.Parser import DateTimeFromString - -# HTML conversion for the Create method -try: - from stripogram import html2safehtml -except ImportError: - from Products.stripogram import html2safehtml - -from Products.MailManager.support.html2text import html2text - -# Test data to be used under the ZMI and test suite -from tests.classes.mmtestdata import TestDataMixin - -# Access to data for reporting -#'from Reporting import ReportingDataMixin, manage_addHTMLReportingEngine -from Reporting import ReportingDataMixin, manage_addQueueReportingEngine -from ruleset.zope import manage_addRulesetEngine - -# Ruleset engine -from Products.MailManager.ruleset.common import NoTransitionError - -# Logging support -import logging -from Products.MailManager.support.logger import log - -# Used to generate message ids -from Products.MailManager.support.login import genRandomString - -from Globals import get_request - -# Internal dataset revision -# This should be updated each time the dataset changes. Read the developer -# documentation for details about doing this. -initialmversion = 'v2_1_0' -mversion = 'v2_1_3' - -url_pat = re.compile(r'(https?|ftp)://\S*[^,;:.!?)\]\'"\s]') -br_pat = re.compile(r'< *br *>') - -__extra_epydoc_fields__ = [ - 'teststatus', - 'requiresrequest', - 'modifies' - ] - -manage_addMailManagerForm = PageTemplateFile('www/manage_addMailManagerForm', - globals()) - - -# Our schema for what variables can be set on the ZoDB. This is currently -# implemented as a dict, as we may wish to extend the contstraints on -# these attributes later on. We may also wish to generate the property -# page values in here. - -mailmanager_attributes = { - # Attributes specified in the properties page - 'title' : '', - 'schema' : '', - 'dbplatform' : '', - 'server_url' : '', - 'virtual_root' : '', - 'date_format' : '', - 'timezone' : '', - 'version' : '', - 'mversion' : '', - 'mysql_max_allowed_packet' : '', - # Unspecified in the properties page - 'refresh' : '', - 'batch_size' : '', - 'id' : '', - 'filter_headers' : '', - 'priorities' : '', - 'display_column' : '', - # For the test suite - 'pop3lib' : '', - 'imap4lib' : '', - 'pop3lib_ssl' : '', - 'imap4lib_ssl' : '', - 'debug' : '', - 'config' : '', - 'dbcachedir' : '', - '_v_flowPointEntryCallbacks' : '', - '_v_flowPointExitCallbacks' : '', - '_v_flowpoint' : '', - # Temporary variable for storing form params for creating new - # MailManager instance - 'setup_details' : '', - # ZoDB Objects - 'sql' : '', - 'account' : '', - 'attachment' : '', - 'attachments' : '', - 'ticket' : '', - 'images' : '', - 'acl_users' : '', - 'Cookie' : '', - 'MailHost' : '', - 'Reports' : '', - 'engine' : '', - 'mailmanager_db' : '', - # For Zope - '__allow_groups__' : '', - '__before_traverse__' : '', - '__before_publishing_traverse__' : '', - '_objects' : '', - '_owner' : '', - '__ac_local_roles__' : '', - 'Control_Panel' : '', - '_is_wrapperish' : '', - # SQL Parameters - 'sql_delimiter' : '', - 'sql_boolean' : '', - 'sql_binary' : '', - 'sql_interval' : '', - 'sql_database' : '', - 'sql_deferrable' : '', - 'sql_datetimestamp' : '', - 'sql_initdefer' : '', - 'sql_indexlimit' : '', - 'sql_serialpkey' : '', - 'sql_tabletype' : '', - 'sql_charset' : '', - 'sql_true' : '', - 'sql_false' : '', - 'sql_varchar' : '', - 'sql_smalltext' : '', - 'sql_largetext' : '', - 'sql_integer' : '', - 'sql_textsearch' : '', - 'sql_truevar' : '', - 'sql_falsevar' : '', - 'suboptimise' : '', - 'sql_now' : '', - # Missing - 'sql_constraints' : '', - } - - -class InvalidAttributeError(Exception): - pass - - -def manage_addMailManager(self, id, title, admin_username=None, admin_email=None, - password=None, confirm_password='', first_tid=1, - create_tables=False, schema='', dbplatform='postgres', - REQUEST=None): - """Adds a MailManager to a folder.""" - # Test for missing mandatory fields. These are fields that should - # have string values but not the empty string that may come from - # the form. first_tid cannot be missed from the form because - # of the int converters in it. - mandatories = ['id', 'admin_username', 'admin_email', 'password'] - if REQUEST is not None: mandatories.append('confirm_password') - try: - for field in mandatories: - if not locals()[field]: - raise BadRequest, translateString('You must fill in the ${field} field.', - 'missing_field', - mapping={'field': - field.replace('_', ' ').title()}, - REQUEST=REQUEST) - if REQUEST is not None and confirm_password != password: - raise BadRequest, translateString('Admin Password and Confirm Admin Password fields must match.', - 'admin_password_mismatch', - REQUEST=REQUEST) - if schema and dbplatform != 'postgres': - raise BadRequest, translateString('Schemas are only supported on PostgreSQL.', - 'schemas_unavailable', - REQUEST=REQUEST) - except BadRequest, msg: - if REQUEST is not None: - REQUEST.set('manage_tabs_message', msg) - return self.manage_addMailManagerForm(self, REQUEST) - else: - raise BadRequest, msg - - newMailManager = MailManager(id, title, admin_username, admin_email, - password, first_tid, create_tables, schema, dbplatform, - REQUEST) - self._setObject(id, newMailManager) - if REQUEST is not None: - return self.manage_main(self, REQUEST) - -class MailManager(Folder, MailMixin, TestDataMixin, ReportingDataMixin): - """A mail management system. - - @group miscUtils: validEmail*, testMail*, row2xml*, process_task*, - migrate*, getSchemaName, listTimeZones, getBaseURL, getBatchPages*, - getMail*, generateMail*, formatTarget*, formatBody*, export*, - doSearch*, displayTime*, dateFormat*, configureMySQL, configurePostgres, - checkPOP3SSL, addZSQLMethods - @group zmiMethods: manage_* - @group ticketMethods: createTicket*, createMessage*, addMessageToTicket*, - getTicket*, listTickets* - @group attachmentMethods: addAttachment*, delAttachment*, - addStandardAttachment*, delStandardAttachment*, * - @group webMethods: setSession*, changeSelected*, setReport* - @group userMethods: addMMUser*, editMMUser*, delAgent*, getUserDetails*, - getUserConstraints*, addOrEditCustomer*, delCustomer*, getCustomer* - @group accountMethods: addOrEditAccount*, delAccount*, getAccount* - @group groupMethods: addGroup*, editGroup*, delGroup*, getGroupConstraints*, - * - @group filterMethods: addFilter*, getFilterText*, deleteFilter*, - addFilterHeader*, delFilterHeader* - @group templateMethods: addOrEditTemplate*, deleteTemplate* - @group categoryMethods: setCategory*, addChoice*, deleteChoice* - @group archivingMethods: deleteTickets*, restoreTickets*, - setTicketsScreen*, diskUsage* - @group searchMethods: setSort*, quickFind* - @group reportMethods: homePageStats*, getTicketTimes*, getGraphDetails*, - formatInterval*, setReportDate*, getReportDate*, getReportDateSettings*, - fixSubsection* - @group pageTemplates: master*, macros*, index_html*, ticket_index_html*, - Tickets*, Create*, Search*, Reports*, Settings*, UserSettings*, - AccountSettings*, GroupSettings*, FilterSettings*, CustomerSettings*, - OptionSettings*, SystemSettings*, Help*, GenerateMail*, test, LoggedOut*, - Login*, master_style_css*, javascript_js* - - """ - - meta_type = 'MailManager' - - # Security - - __ac_roles__ = ('Tickets', 'Reports', 'Settings', 'Customer', 'Queues') - security = ClassSecurityInfo() - security.setPermissionDefault('View MailManager', - ['Tickets', 'Reports', 'Settings', 'Customer', 'Queues']) - security.setPermissionDefault('MailManager Settings', ['Settings']) - security.setPermissionDefault('MailManager Reports', ['Reports']) - security.setPermissionDefault('MailManager View Tickets', - ['Tickets', 'Customer']) - security.setPermissionDefault('MailManager Create Tickets', - ['Tickets', 'Customer']) - security.setPermissionDefault('MailManager Queue Admin', - ['Queues']) - security.setPermissionDefault('MailManager Manage Tickets', - ['Tickets', 'Customer']) - - # SQL Directory overload hook - - sqldirclass = MailManagerSQL - - # Queueing logic to use - - queueclass = BasicQueue - - # Debug hooks - - pop3lib = poplib.POP3 - if pop3_ssl: - pop3lib_ssl = poplib.POP3_SSL - imap4lib = imaplib.IMAP4 - imap4lib_ssl = imaplib.IMAP4_SSL - _v_flowPointEntryCallbacks = [] - _v_flowPointExitCallbacks = [] - - # Management Screens - - manage_options = ( - {'label': 'Contents', 'action': 'manage_main'}, - {'label': 'Security', 'action': 'manage_access'}, - {'label': 'Properties', 'action': 'manage_propertiesForm'}, - # The permissions never let us see this tab! - {'label': 'View', 'action': 'index_html'}, - {'label': 'Migrate', 'action': 'manage_migrateForm'} - ) - - # Properties - - security.declareProtected('MailManager Settings', 'dateFormats') - def dateFormats(self): - """Provides the date formats that can be set through the properties.""" - return ('dd.mm.yy', 'mm.dd.yy', 'dd/mm/yy', 'mm/dd/yy') - - security.declareProtected('MailManager Settings', 'listTimeZones') - try: - from _compat23 import listTimeZones - except SyntaxError: - def listTimeZones(self): - """List all files in system's "zoneinfo" timezone database.""" - return [self.__class__.timezone] - - # Define defaults in the class because they can't yet be set at setup. - date_format = 'dd.mm.yy' - timezone = 'Default' - - # Version number for migration page - latestversion = mversion - - # XXX Define property in class temporarily to avoid need for migration. - virtual_root = '' - - _properties = ({'id': 'title', 'type': 'string', 'mode': 'w'}, - # Read-only: should be set once and for all at init. - {'id': 'schema', 'type': 'string', 'mode': 'w'}, - {'id': 'dbplatform', 'type': 'string', 'mode': 'w'}, - {'id': 'server_url', 'type': 'string', 'mode': 'w'}, - {'id': 'virtual_root', 'type': 'string', 'mode': 'w'}, - {'id': 'date_format', 'type': 'selection', - 'select_variable': 'dateFormats', 'mode': 'w'}, - {'id': 'timezone', 'type': 'selection', - 'select_variable': 'listTimeZones', 'mode': 'w'}, - {'id': 'version', 'type': 'string', 'mode': ''}, - {'id': 'mversion', 'type': 'string', 'mode': ''}, - {'id': 'mysql_max_allowed_packet', 'type': 'int', 'mode': 'w'} - ) - - dbplatform = 'postgres' - mysql_max_allowed_packet = 0 - - # Implement the ZopeScheduler interface so that MailManager can be called - # directly by the scheduler without having to use a Python Script - if ZOPE_SCHEDULER_PRESENT: - __implements__ = ISchedulingTask - - ########################################################################## - # Initialization - ########################################################################## - - def __init__(self, id, title, admin_username=None, admin_email=None, - admin_password=None, first_tid=1, create_tables=False, - schema='', dbplatform='postgres', REQUEST=None): - - # Initial error checking. - if first_tid > 1 and self.sql_database != 'postgres': - raise Exception(translateString('Sorry, setting the first ticket id is not supported for this database at present', - 'first_tid_unavailable', - REQUEST=REQUEST)) - - # These details are handled by manage_afterAdd() and deleted again - # afterwards. - self.setup_details = { - # For the creation of the initial user - 'admin_username': admin_username, - 'admin_password': admin_password, - 'admin_email': admin_email, - - # Other configuration passed to manage_afterAdd(). - 'first_tid': first_tid, - 'create_tables': create_tables, - - # Store the target language from the request object as this - # will not be available later, and we need to translate the - # default strings before inserting them into the database - 'target_language' : negotiate_language(REQUEST, 'mailmanager') or 'German' - } - - # Setup the database platform -- SQL directory, mappings, etc -- but - # the actual table creation happens later. - self.configureDatabasePlatform(dbplatform, version='v2_1', schema=schema) - - self.createInitialZodbData(id, title, REQUEST) - self.createZodbObjects() - - security.declarePrivate('manage_afterAdd') - def manage_afterAdd(self, item, container): - Folder.manage_afterAdd(self, item, container) - # Optionally, create the database tables - if self.setup_details['create_tables']: - self.createDatabaseTables() - self.createInitialSQLData(self.setup_details['target_language']) - - # Do we need to monkey with the first ticket id? - if self.setup_details['first_tid'] > 1: - self.sql.setNextTicketId(sqv_id=self.first_tid-1) - - if self.setup_details['admin_username']: - # Add the admin user - self.addOrEditMMUser(username=self.setup_details['admin_username'], - real_name='Administrator', - email=self.setup_details['admin_email'], - password=self.setup_details['admin_password'], - tickets=self._sql_bool(True), - reports=self._sql_bool(True), - settings=self._sql_bool(True)) - self.updateZodbData() - - if self.setup_details['create_tables']: - # Now migrate to bring the MailManager object up to the latest version - self.migrate() - - del self.setup_details - - - return - - security.declarePrivate('createDatabaseTables') - def createDatabaseTables(self): - """ Create the current set of database tables. """ - if self.schema: - self.sql.createSchema() - - self.sql.createTables() - return - - - def createDummyRequest(self): - """ Horrible. - - PTS Cannot cope with being called without having a request object. - This is because it uses this to maintain a number of caches. We - need to generate a temporary request object which we can pass to - PTS, so that it's code does not break. - """ - from ZPublisher.HTTPRequest import HTTPRequest - from ZPublisher.HTTPResponse import HTTPResponse - from Products.Transience.TransientObject import TransientObject - import StringIO - - stdin = StringIO.StringIO - environ = {'SERVER_NAME' : 'host.dummy.example', - 'SERVER_PORT' : '65534'} - response = HTTPResponse - - # Put SESSION object into REQUEST - request = HTTPRequest(stdin, environ, response, clean=0) - - # Normally SESSION is obtained from the session data manager, using - # getSessionData. This will in turn use the transient data stroe, - # which will return a new object of type TransientObject if it - # doesn't exist. As we don't want to store this or use the global - # sdm, we generate our own TransientObject here - session = TransientObject('session') - request.set('SESSION', session) - - #self.session = request.SESSION - # Set the language on the request - request.SESSION.set('pts_language', 'en') - request.SESSION.set('search', '') - return request - - - security.declarePrivate('createInitialSQLData') - def createInitialSQLData(self, target_language): - """ Create the initial default set of SQL data. This should only - ever really be called at the initial object creation, since we - don't want to overwrite other people's existing data. - """ - # Load the ruleset - self.engine.setup(rsname='queuesystem') - - request = self.createDummyRequest() - - # Sample template - self.sql.addTemplate( - sqv_name = translateString('Acknowledgement', 'acknowledgement', target_language=target_language, REQUEST=request), - sqv_body = translateString('Thank you for your mail.', 'acknowledgement_body', target_language=target_language, REQUEST=request), - sqv_html = False - ) - - # Create initial categories - self.sql.addCategory(sqv_id=0, sqv_label=translateString('Category', 'default_category0', target_language=target_language, REQUEST=request), - sqv_enabled=self.sql_truevar) - self.sql.addCategory(sqv_id=1, sqv_label=translateString('User Defined 1', 'default_category1', target_language=target_language, REQUEST=request), - sqv_enabled=self.sql_falsevar) - self.sql.addCategory(sqv_id=2, sqv_label=translateString('User Defined 2', 'default_category2', target_language=target_language, REQUEST=request), - sqv_enabled=self.sql_falsevar) - - self.sql.addCategoryChoice(sqv_category_id=0, - sqv_choice=translateString('Customer query', 'customer_query_category_choice', target_language=target_language, REQUEST=request)) - self.sql.addCategoryChoice(sqv_category_id=0, - sqv_choice=translateString('Sales lead', 'sales_lead_category_choice', target_language=target_language, REQUEST=request)) - self.sql.addCategoryChoice(sqv_category_id=0, - sqv_choice=translateString('Technical Issue', 'technical_issue_category_choice', target_language=target_language, REQUEST=request)) - self.sql.addCategoryChoice(sqv_category_id=0, - sqv_choice=translateString('Other', 'other_category_choice', target_language=target_language, REQUEST=request)) - - # Allow '' for an empty category setting - self.sql.addCategoryChoice(sqv_category_id = 0, sqv_choice = '') - self.sql.addCategoryChoice(sqv_category_id = 1, sqv_choice = '') - self.sql.addCategoryChoice(sqv_category_id = 2, sqv_choice = '') - - # Create the default tab views - self.sql.addTab(sqv_id = 'Tickets', sqv_title = 'Tickets', sqv_url = 'Tickets', sqv_accesskey = 't', sqv_roles = 'Tickets Customer') - self.sql.addTab(sqv_id = 'Search', sqv_title = 'Search', sqv_url = 'Search', sqv_accesskey = 'f', sqv_roles = 'Tickets Customer') - self.sql.addTab(sqv_id = 'Reports', sqv_title = 'Reports', sqv_url = 'Reports', sqv_accesskey = 'r', sqv_roles = 'Reports') - self.sql.addTab(sqv_id = 'Help', sqv_title = 'Help', sqv_url = 'Help', sqv_accesskey = 'h') - self.sql.addTab(sqv_id = 'Settings', sqv_title = 'Settings', sqv_url = 'Settings', sqv_accesskey = 's', sqv_roles = 'Settings') - self.sql.addTab(sqv_id = 'Log Out', sqv_title = 'Log Out', sqv_url = 'Cookie/logout', sqv_accesskey = 'l') - - # And all the sub tabs. - self.sql.addSubTab(sqv_tab_id='Tickets', sqv_id='overview', - sqv_title='Overview', sqv_url='index_html') - self.sql.addSubTab(sqv_tab_id='Tickets', sqv_id='Open', - sqv_title='Open', - sqv_url='setSession?key=view&value=Open') - self.sql.addSubTab(sqv_tab_id='Tickets', sqv_id='New', - sqv_title='New', - sqv_url='setSession?key=view&value=New') - self.sql.addSubTab(sqv_tab_id='Tickets', sqv_id='Overdue', - sqv_title='Overdue', - sqv_url='setSession?key=view&value=Overdue') - self.sql.addSubTab(sqv_tab_id='Tickets', sqv_id='Hold', - sqv_title='Hold', - sqv_url='setSession?key=view&value=Hold') - self.sql.addSubTab(sqv_tab_id='Tickets', sqv_id='Closed', - sqv_title='Closed', - sqv_url='setSession?key=view&value=Closed') - self.sql.addSubTab(sqv_tab_id='Tickets', sqv_id='All', - sqv_title='All', - sqv_url='setSession?key=view&value=All') - self.sql.addSubTab(sqv_tab_id='Tickets', sqv_id='Search', - sqv_title='Search Results', - sqv_url='setSession?key=view&value=Search') - self.sql.addSubTab(sqv_tab_id='Tickets', sqv_id='Spam', - sqv_title='Spam', - sqv_url='setSession?key=view&value=Spam') - self.sql.addSubTab(sqv_tab_id='Tickets', sqv_id='create', - sqv_title='Create', sqv_url='Create') - self.sql.addSubTab(sqv_tab_id='Tickets', sqv_id='queues', - sqv_title='Queues', sqv_url='Queues', - sqv_roles='Queues') - - self.sql.addSubTab( - sqv_tab_id='Reports', sqv_id='snapshot', sqv_title='Snapshot', - sqv_url='Reports/setReport?label=section&value=snapshot' - ) - self.sql.addSubTab( - sqv_tab_id='Reports', sqv_id='received', sqv_title='Email Received', - sqv_url='Reports/setReport?label=section&value=received' - ) - self.sql.addSubTab( - sqv_tab_id='Reports', sqv_id='performance', sqv_title='Performance', - sqv_url='Reports/setReport?label=section&value=performance' - ) - self.sql.addSubTab( - sqv_tab_id='Reports', sqv_id='other', sqv_title='Other', - sqv_url='Reports/setReport?label=section&value=other' - ) - - self.sql.addSubTab( - sqv_tab_id='Settings', sqv_id='users', sqv_title='Users', - sqv_url='UserSettings', - sqv_tooltip = 'Add, remove and edit Users from the system' - ) - self.sql.addSubTab( - sqv_tab_id='Settings', sqv_id='accounts', sqv_title='Accounts', - sqv_url='AccountSettings', - sqv_tooltip='Create, edit and remove email Accounts' - ) - self.sql.addSubTab( - sqv_tab_id='Settings', sqv_id='queues', sqv_title='Queues', - sqv_url='QueueSettings', - sqv_tooltip='Create, edit and remove queues' - ) - self.sql.addSubTab( - sqv_tab_id='Settings', sqv_id='groups', sqv_title='Groups', - sqv_url='GroupSettings', - sqv_tooltip='Add or remove users from groups, add and remove Groups' - ) - self.sql.addSubTab( - sqv_tab_id='Settings', sqv_id='filters', sqv_title='Filters', - sqv_url='FilterSettings', - sqv_tooltip='Set up filters to process incoming mail' - ) - self.sql.addSubTab( - sqv_tab_id='Settings', sqv_id='customers', sqv_title='Customers', - sqv_url='CustomerSettings', - sqv_tooltip='Set up Customers to use the Self Service interface' - ) - self.sql.addSubTab( - sqv_tab_id='Settings', sqv_id='options', sqv_title='Options', - sqv_url='OptionSettings', - sqv_tooltip='Personalize categories and adjust reply templates' - ) - self.sql.addSubTab( - sqv_tab_id='Settings', sqv_id='system', sqv_title='System', - sqv_url='SystemSettings', - sqv_tooltip='Remove old tickets and set tickets screen' - ) - - # Specifically for queueing support - self.sql.addSubTab( - sqv_tab_id='Reports', sqv_id='queues', sqv_title='Queues', - sqv_url='Reports/setReport?label=section&value=queues' - ) - - return - - security.declarePrivate('createInitialZodbData') - def createInitialZodbData(self, id, title, REQUEST): - """ Create the initial default set of data in the ZODB. This should - only ever really be called at the initial object creation, since we - don't want to overwrite other people's existing data and - modifications. - """ - # Constants. - self.mversion = initialmversion # Global! - self.refresh = 0 - self.batch_size = 15 - - # Passed in from initial construction. - self.id = id - self.title = title - - # Capture info for creaing URLs in absence of REQUEST. These - # values will be unhelpful if MailManager is not being added - # using the same hostname as users will access it through, and - # quite empty if MailManager is not being added through the - # web at all. In such cases they must be corrected through - # the properties tab. - if REQUEST is not None: - self.server_url = REQUEST['SERVER_URL'] - virtual_root = REQUEST.other.get('VirtualRootPhysicalPath', ('',)) - self.virtual_root = '/'.join(virtual_root) - else: - self.server_url = '' - self.virtual_root = '' - - # Data structures. - self.filter_headers = ['To', 'From', 'cc', 'Subject', 'X-Priority', - 'X-Spam-Flag'] - self.priorities = ['Junk', 'Low', 'Normal', 'High', 'Critical'] - self.display_column = {'ticket_id': True, 'state': True, - 'assigned': False, 'title': True, - 'from_name': True, 'time': True, 'date': True, - 'priority': True, 'category0': False, - 'category1': False, 'category2': False} - return - - security.declarePrivate('createZodbObjects') - def createZodbObjects(self): - """ Create the ZODB objects that are used by MailManager. For now - all objects inside MailManager are owned and controlled by - MailManager; modifying or replacing them is not explicitly - supported and may be broken by an upgrade. FIXME: At some point - we should figure out what objects are mutable by the MM admin. - """ - # Add a MailManager UserFolder to authenticate from the database - manage_addMMUserFolder(self) - - # Create a folder for standard attachments - self.manage_addFolder(id='attachments', title='Standard Attachments') - - # Use cookie based authentication. - manage_addLoginHandler(self, 'Cookie') - self.Cookie.auto_login_page = 'Login' - self.Cookie.logout_page = 'LoggedOut' - - # Add the images. - manage_addDirectoryView(self, os.path.join('MailManager', - 'www', 'images')) - - # Add the MailHost - manage_addMailHost(self, 'MailHost') - - # Add in the base reporting engine - #manage_addHTMLReportingEngine(self, 'Reports', 'Reports') - - # Add in the base reporting engine - manage_addQueueReportingEngine(self, 'Reports', 'Reports') - - # Add in the ruleset engine -- disabled for 2.1-beta1 - manage_addRulesetEngine(self, 'engine', 'Ruleset Engine') - return - - security.declarePrivate('updateZodbData') - def updateZodbData(self): - """ Update (or set) the existing ZODB data which is immutable. """ - # Get the version from the Control Panel - self.version = self.Control_Panel.Products['MailManager'].version - return - - security.declarePrivate('configureDatabasePlatform') - def configureDatabasePlatform(self, dbplatform = None, version = 'v2_1', schema = ''): - """ Configure (or change?) the MailManager SQL layer for the database - that has been setup. OK, so for now it only supports configuration - of the database platform. Initial configuration is done along - the lines of: - - self.configureDatabasePlatform('postgres') - - The migration scripts can reinitialise the db platform by calling - this with no arguments; any new mappings will be added (though old - ones won't disappear..). - """ - - dbplatform = dbplatform or self.dbplatform - from Products.MailManager.support.Database import sql_mapping - try: - version_map = sql_mapping[version] - except NameError: - raise Exception('Database support for version %s is not supported', version) - try: - mapping = version_map[dbplatform] - except NameError: - raise Exception('Database platform %s is not supported', dbplatform) - for key, value in mapping.iteritems(): - setattr(self, key, value) - self.dbplatform = dbplatform # Do we need both dbplatform and sql_database? - - # Set the schema for the database backend. OK, so some databases don't - # support a schema, so it defaults to the empty string. Adding a - # trailing '.' here vastly simplifies the zsql methods. - schema = getattr(self, 'schema', schema) - if schema.endswith('.') or not schema: - self.schema = schema.lower() - else: - self.schema = schema.lower() + '.' - - # Always replace the SQL object, as we need to sync this with the - # directory contents of the filesystem - if 'sql' in self.objectIds(): - self.manage_delObjects(['sql']) - self._setObject('sql', self.sqldirclass('sql', version = version)) - - # Add the ZSQL methods - self.addZSQLMethods() - return - - security.declarePublic('__bobo_traverse__') - def __bobo_traverse__(self, REQUEST=None, name=None): - """ Traversal hook to add HTTP realm and do method mangling - - We add in the HTTP realm on the response, is possible. We also - rename the request for local methods so that we are allowing - mangling - attempting to get addMessageToTicket will return - the method http_addMessageToTicket. This allows us to split - off the interface layer from API calls. - - There are some docs at the following page, although they don't - match the code of the base class which is what this method is - taken from - http://www.tchezope.org/traducoes/gdz_python/ObjectPublishing.html - - Eventually we will split this to use bobo_realm - """ - - if REQUEST and REQUEST.has_key('RESPONSE'): - if self.title: - title = self.title - else: - title = self.id - REQUEST.RESPONSE.realm = 'MailManager: %s' % self.title - - # First of all, try and mangle http_ in front of requests - ret = getattr(self, 'http_%s' % name, None) - if ret: return ret - - # Then try and obtain without mangling - ret = getattr(self, name, None) - if ret: return ret - else: - ret = self[name] - if ret: return ret - - return name - - security.declarePrivate('_sql_bool') - def _sql_bool(self, val): - """ Convert a Python boolean to an equivalent SQL boolean. """ - return val and self.sql_truevar or self.sql_falsevar - - security.declarePublic('getSchemaName') # since I want it from a DTML method - def getSchemaName(self): - """ Returns the schema name with the . stripped off it. - - For most uses of self.schema, the dot is desirable as it is only - going to be used for perpending the schema name to a table or - function name, eg: schema.mm_ticket - Other uses require the dot to be stripped, in particular the - drop schema method. - """ - return self.schema.rstrip('.') - - security.declarePrivate('addZSQLMethods') - def addZSQLMethods(self): - """ Add some top level ZSQL methods. - - These are added in manually as SQL objects so that object traversal - will work correctly, and people can access them via http - - The SQLWrapper class includes a fix for the security issue: - Postgres encoding security hole (#1494281) - """ - - # Remove and replace ZSQL methods. - sqlmethods = [('ticket', 'id'), ('attachment', 'id'), ('account', 'email')] - for (zsql_method, arguments) in sqlmethods: - if zsql_method in self.objectIds(): - self.manage_delObjects([zsql_method]) - - # Load the ZSQL file from disk and save the SQL data into the ZoDB - filename = os.path.join(package_home(globals()), 'sql', 'v2_1', '%s.zsql' % zsql_method) - zsqlfile = open(filename,'r') - - # Remove the ZSQL file header - data = '' - header = True - zsqlline = zsqlfile.readline() - while zsqlline: - if not header: - data = data + zsqlline - if '</dtml-comment>' in zsqlline: - header = False - zsqlline = zsqlfile.readline() - zsqlfile.close() - - zfsm = SQLWrapper(zsql_method, zsql_method, 'mailmanager_db', arguments, data) - self._setObject(zsql_method, zfsm) - - # Set the pluggable brain and allow direct traversal - self.attachment.manage_advanced(1, 1, 0, 'AttachPluggableBrain', - 'MailManager.AttachPluggableBrain', 1) - self.account.manage_advanced(1, 1, 0, 'AccountPluggableBrain', - 'MailManager.AccountPluggableBrain', 1) - self.ticket.manage_advanced(1, 1, 0, 'TicketPluggableBrain', - 'MailManager.TicketPluggableBrain', 1) - - -############################################################################### -############################################################################### - - # Housekeeping - - security.declareProtected('View management screens', 'migrate') - from migrations import migrate - - security.declareProtected('View management screens', 'manage_migrateForm') - manage_migrateForm = PageTemplateFile('www/manage_migrateForm', globals()) - -############################################################################### -############################################################################### - - # Utility Functions - - security.declarePublic('getBaseURL') - def getBaseURL(self): - """Get the MailManager object.""" - return aq_inner(self).absolute_url() - - security.declareProtected('MailManager View Tickets', 'dateFormat') - def dateFormat(self): - """Converts the date_format property to format used by strftime.""" - # XXX Only called in Ticket, Message and Tickets.zpt. - s = self.date_format - return s.replace('dd', '%d').replace('mm', '%m').replace('yy', '%y') - - security.declareProtected('MailManager View Tickets', 'displayTime') - def displayTime(self, format, timeobj): - """ Adjust time according to timezone and format it. - - The timezone adjustments only work with Python 2.3. - - @param time: The time to be formatted - @type time: DateTime.DateTime or seconds (int) - - The supplied date or time should be in UTC. - """ - # XXX Only called in Ticket, Message and Tickets.zpt. - if type(timeobj) is int or type(timeobj) is float: - secs = timeobj - elif timeobj is None: - return "N/A" - else: - secs = timeobj.timeTime() - - try: - tzset = time.tzset - # Set timezone. - if self.timezone != self.__class__.timezone: - os.environ['TZ'] = self.timezone - tzset() - # Format time. - s = time.strftime(format, time.localtime(secs)) - # Reset timezone to UTC. - if self.timezone != self.__class__.timezone: - os.environ['TZ'] = 'UTC' - tzset() - return s - except AttributeError: - return time.strftime(format, time.localtime(secs)) - - - security.declarePrivate('sendMessage') - def sendMessage(self, mfrom, mto, msg): - """ Send an outgoing mail message - - @param mfrom: From address (Real Name <email@domain>) - @type mfrom: string - @param mto: To address (Real Name <email@domain>) - @type mto: string - @param msg: Email message to send - @type msg: email.Message - - This method provides a layer through which all outgoing emails - should be sent. This lets us do any preprocessing or logging of - outgoing mails as required. - - At present, the only modification we are doing to outgoing mails - is adding on an X-MailManger header with the current version - noted in it. - """ - msg['X-MailManager'] = self.version - self.MailHost._send(mfrom, mto, msg.as_string()) - - - security.declarePrivate('validEmail') - def validEmail(self, address): - """ Returns true if the supplied email address is in a (vaguely) - valid format. We're parsing the address first of all using - the email.Utils.parseaddr() library function to split off the - address itself. Next up, we're validating it according to - RFC2821. The appropriate EBNF is: - - Let-dig = ALPHA / DIGIT - Ldh-str = *( ALPHA / DIGIT / "-" ) Let-dig - - IPv4-address-literal = Snum 3("." Snum) - IPv6-address-literal = "IPv6:" IPv6-addr - General-address-literal = Standardized-tag ":" 1*dcontent - Standardized-tag = Ldh-str - ; MUST be specified in a standards-track RFC - ; and registered with IANA - - Snum = 1*3DIGIT ; representing a decimal integer - ; value in the range 0 through 255 - - Domain = (sub-domain 1*("." sub-domain)) / address-literal - sub-domain = Let-dig [Ldh-str] - - address-literal = "[" IPv4-address-literal / - IPv6-address-literal / - General-address-literal "]" - ; See section 4.1.3 - - Mailbox = Local-part "@" Domain - - Local-part = Dot-string / Quoted-string - ; MAY be case-sensitive - - Dot-string = Atom *("." Atom) - - Atom = 1*atext - - Quoted-string = DQUOTE *qcontent DQUOTE - - String = Atom / Quoted-string - """ - atext = r'0-9a-zA-Z!#\$%\&\'\*\+_/=\?^\-`\{|\}~' - subdomain = r'[0-9a-zA-Z][0-9a-zA-Z-]*[0-9a-zA-Z]' - - name, mailbox = parseaddr(address) - try: - localpart, domain = mailbox.split('@', 1) - except ValueError: - # No @ sign? Not a valid address - return False - if re.match('^([%s][.%s]*|"[^\\"]*")$' % (atext, atext), localpart) is None: - return False - - if re.match('%s(\.%s)+' % (subdomain, subdomain), domain) is None: - return False - return True - - # Convenience Functions for Page Templates - - security.declareProtected('View MailManager', 'formatBody') - def formatBody(self, body): - """Format a message body ready for display. - - This boils down to quoting HTML characters, makeing URLs links and - converting newlines to <br />. We assume the message is in unicode. - - Once http://www.zope.org/Collectors/CMF/335 is released this could - move into a Pluggable Brain on the listMessages ZSQL method. - """ - body = cgi.escape(body, quote=True) - body = url_pat.sub(r'<a href="\g<0>" target="_blank">\g<0></a>', body) - body = '<br />'.join(body.splitlines()) - return body - - security.declareProtected('View MailManager', 'sanitiseHTML') - def sanitiseHTML(self, msg): - """ Sanitise the HTML in the message, ready for display. TODO: the - list of allowed tags should be policy, not hard coded. - - FIXME: This is still insufficient. Through the page template, we - tell the browser that we're not only supplying XHTML 1.0 strict, - but that we're supplying valid XML. Stripogram doesn't produce - valid XML! In particular it lets through <br> tags instead of - changing them to <br />, which is why we're doing that evil - pattern substitution... - - We also don't know that the resulting HTML will be *valid*... - Maybe we should make the HTML content available through a separate - URL and stick it in an iframe? Then, from a validation POV, it - becomes an SEP. - """ - html_body = br_pat.sub('<br />', msg) - return html2safehtml(html_body, ('b', 'a', 'i', 'strong', 'em', 'p', 'br')) - - security.declareProtected('View MailManager', 'listResponseTimes') - def listResponseTimes(self): - """List possible response times for use in the user interface. - - Response times are returned in seconds. - """ - return ([15*60, 30*60, 60*60, 2*60*60] + # 15 minutes to 2 hours - range(3*60*60, 60*60*24, 3*60*60) + # 3 hours to 21 hours - range(24*60*60, 31*60*60*24, 24*60*60)) # 1 day to 30 days - - security.declareProtected('View MailManager', 'formatTargetEn') - def formatTargetEn(self, target): - """Convert a response target in seconds to a human readable form. - - Method has En suffix to identify that it's not i18n-able, and needs - fixed at a later date. Used in AccountSettings, FilterSettings and - Reports. - """ - resp = {} - if not target: - return 'No target set' - resp['days'],target = divmod(int(target), 86400) # 60 * 60 * 24 == 1 day - resp['hours'],target = divmod(int(target), 3600) # 60 * 60 == 1 hour - resp['minutes'], resp['seconds'] = divmod(int(target), 60) # 1 minute - return '%(days)i days %(hours)02i:%(minutes)02i:%(seconds)02i' % resp - - security.declareProtected('MailManager Settings', 'getAccount') - def getAccount(self, email): - """Get a particular account. - - If the account does not exist, return None. - """ - result = self.sql.listAccounts(sqv_email=email) - if result: - return result[0] - else: - return None - - security.declarePublic('getListClasses') - def getListClasses(self, item, current, repeat): - """ Return the CSS classses for a list item. """ - classes = [] - if (item.id.lower() == current.lower()): - classes.append('current') - else: - classes.append('not-current') - - if repeat.end: - classes.append('last') - - return ' '.join(classes) - - security.declarePublic('hasPermission') - def hasPermission(self, user, roles): - """ Figure out if a user has one of the roles required for a particular - page view. - """ - if roles: - roles = roles.split() - for role in roles: - if user.has_role([role]): - return True - return False - else: - return user.has_permission('View MailManager', self) - -############################################################################### -############################################################################### - - # Debugging Methods - - security.declareProtected('MailManager Settings', 'getLogName') - def getLogName(self): - """ Returns an identifier to be added to log messages - - This method can be useful if you are wanting multiple MailManager - instances on a single Zope instance. - """ - return "" - - # Debugging information - # These methods will be altered in future so that by default no debugging is - # switched on - def logFlowPointEntry(self, flowchart, section): - zLOG.LOG('MailManager:', zLOG.DEBUG, - '%sflowpoint: + Entered %s %s' % (self.getLogName(), flowchart, section)) - if getattr(self, '_v_flowpoint', None) is None: - self._v_flowpoint = {} - self._v_flowpoint[flowchart] = (section, False) - for callback in self._v_flowPointEntryCallbacks: - callback(flowchart, section) - - def logFlowPointExit(self, flowchart, section): - zLOG.LOG('MailManager:', zLOG.DEBUG, - '%sflowpoint: + Exited %s %s' % (self.getLogName(), flowchart, section)) - if getattr(self, '_v_flowpoint', None) is None: - self._v_flowpoint = {} - self._v_flowpoint[flowchart] = (section, True) - for callback in self._v_flowPointExitCallbacks: - callback(flowchart, section) - -############################################################################### -############################################################################### - - # Mail Methods - - security.declarePublic('process_task') - def process_task(self): - """Called by ZopeScheduler per ISchedulingTask interface.""" - self.Cookie.cleanupSessions() - self.engine.processQueuedEvents() - return self.getMail() - - security.declarePublic('getMail') - def getMail(self, noreturn=0, REQUEST=None): - """Get mail from the POP3 and IMAP servers.""" - rets = [self.account(email=accountname)[0].getMail() - for accountname in [acct['email'] - for acct in self.sql.listAccounts(sqv_email='')]] - if REQUEST is not None and not noreturn: - return self.index_html(REQUEST) - return '\n'.join(filter(None, rets)) - - security.declareProtected('MailManager Settings', 'testMail') - def testMail(self, account_id, raw_email, REQUEST): - """Used by test.zpt to test mail processing.""" - account = self.account[account_id] - account.process(raw_email) - return self.index_html(REQUEST) - - security.declareProtected('MailManager Settings', 'generateMail') - def generateMail(self, account_name, quantity, REQUEST): - """Used by GenerateMail.zpt to test mail processing. - - This also tests createMessage. - - The Tickets will contain the famous 'Lorem Ipsum' text based on - 'de Finibus Bonorum et Malorum' by Cicero, written in 45 BC. It has - been used as filler text since the 14th century. - """ - account = self.account(email=account_name)[0] - mail_from = 'MailManager <te...@ex...>' - subject = 'Test message number %d' - body = """\ -Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do -eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad -minim veniam, quis nostrud exercitation ullamco laboris nisi ut -aliquip ex ea commodo consequat. Duis aute irure dolor in -reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla -pariatur. Excepteur sint occaecat cupidatat non proident, sunt in -culpa qui officia deserunt mollit anim id est laborum. -""" - for i in range(quantity): - msg = self.createMessage( - account_name, mail_from, subject=subject % i, body=body, - REQUEST=REQUEST)[0] - account.process(msg.as_string(), REQUEST) - return self.index_html(REQUEST) - -############################################################################### -############################################################################### - - # Ticket Methods - - security.declarePrivate('addMessageToTicket') - def addMessageToTicket(self, ticket_id, msg, from_name=None): - """Adds an email message to an existing ticket. - - @param ticket_id: The ticket to append the message to - @type ticket_id: int - @param msg: The message details - @type msg: unknown - @param from_name: - @type from_name: string - @return: None - - @teststatus: partial - """ - - body = '' - html_body = '' - decoded_from_header = self.getHeader(msg, 'from') - fname, femail = parseaddr(decoded_from_header) - id = self.sql.getNextMessageId()[0].id - if id is None: id = 1 - - attachments = [] - # Get the message body, html_body and attachments. - counter = 1 - for part, parents in walk_with_parents(msg): - if part.is_multipart(): - continue - ctype = part.get_content_type() - if ctype == 'application/applefile': - continue # skip AppleDouble resource files per RFC1740 - payload = part.get_payload(decode=1) - if payload is not None: - filename = self._isfile(part) - if filename is None: - msg_container = self._isforwarded(parents) - if filename is not None: - # An attached file - isfile = True - title = self._decodeHeader(filename) - elif msg_container is not None: - # Part of a forwarded message (excluding attached files). - # XXX Doesn't work for my message/delivery-status example. - isfile = False - title = 'Forwarded message%s' % self._getname(part, parents, - msg_container) - elif ctype == 'text/plain' and not body: - # The main message body in plain text. - # The chr(0) character is not allowed in Postgres strings - body = self.toUnicode(payload, part.get_content_charset('iso-8859-15')) - continue - elif self._ishtmlmain(ctype, parents, html_body): - html_body = self.toUnicode(payload, part.get_content_charset('iso-8859-15')) - continue - else: - # This shouldn't often happen. - isfile = False - title = 'Attachment%s' % self._getname(part, parents) - # If we get here it's an attachment. - if payload is None: - payload = '' - attachments.append( - {'title' : title, - 'content_type' : ctype, - 'is_file' : isfile and self.sql_truevar or self.sql_falsevar, - 'body' : payload, - 'dangerous' : self.sql_falsevar} - ) - - raw_headers = '\n'.join(['%s: %s' % (k, v) - for k, v in msg.items()]) - - # Temporary fix for bug #1493483 - unicode issue in getmail - if type(raw_headers) is str: - try: - raw_headers = unicode(raw_headers, errors='xmlcharrefreplace') - except UnicodeDecodeError: - raw_headers = unicode(raw_headers, 'iso-8859-15', errors='xmlcharrefreplace') - except TypeError: - raw_headers = unicode(raw_headers, 'iso-8859-15', errors='xmlcharrefreplace') - - # If msg_date cannot be decoded the current date will be used - dateobj = parsedate_tz(msg.get('date')) - if not (dateobj is None): - try: - msg_date = datetime.utcfromtimestamp(mktime_tz(dateobj)).isoformat() - except Exception, e: - # OverflowError will be called on dateobj's which are too far - # in the future. Also want to catch other errors here and log - # them, rather than blocking processing by raising an exception - zLOG.LOG('MailManager:', zLOG.DEBUG, - '%sDate Parsing Error: exception %s raised from date %s' % (self.getLogName(), str(e), msg.get('date'))) - msg_date = None - else: - msg_date = None - - self.sql.addMessage(sqv_id=id, - sqv_ticket_id=ticket_id, - sqv_message_id=msg.get('message-id'), - sqv_from_name=from_name or fname, - sqv_from_email=femail, - sqv_subject=self.getHeader(msg, 'subject'), - sqv_body=body, - sqv_msg_date=msg_date, - sqv_msg_to=self.getHeader(msg, 'to'), - sqv_cc=self.getHeader(msg, 'cc'), - sqv_bcc='', - sqv_reply_to=self.getHeader(msg, 'reply-to'), - sqv_raw_headers=raw_headers, - sqv_html_body=html_body) - # Attachments need to be inserted after the message due to - # referential integrity checks - - for attachment in attachments: - if self.dbplatform == 'postgres': - self.sql.addAttachment(sqv_message_id = id, - sqv_title = attachment['title'], - sqv_content_type = attachment['content_type'], - sqv_is_file = attachment['is_file'], - sqv_body = psycopg.Binary(attachment['body']), - sqv_dangerous = attachment['dangerous']) - elif self.dbplatform == 'mysql': - self.sql.addAttachment(sqv_message_id = id, - sqv_title = attachment['title'], - sqv_content_type = attachment['content_type'], - sqv_is_file = attachment['is_file'], - sqv_body = attachment['body'], - sqv_dangerous = attachment['dangerous']) - - security.declarePrivate('_isfile') - def _isfile(self, part): - """Test whether subpart is an attached file. - - If it is return filename. - # Attachments need to be inserted after the message due to - # referential integrity checks - for attachment in attachments: - self.sql.addAttachment(message_id = id, - title = attachment['title'], - content_type = attachment['content_type'], - is_file = attachm... [truncated message content] |
From: <ke...@us...> - 2006-06-06 02:56:53
|
Revision: 3133 Author: kevca Date: 2006-06-05 10:18:07 -0700 (Mon, 05 Jun 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3133&view=rev Log Message: ----------- Tagging for internal testing Added Paths: ----------- MailManager/tags/RELENG_2_1_RC5_PRE6/ MailManager/tags/RELENG_2_1_RC5_PRE6/CHANGES.txt MailManager/tags/RELENG_2_1_RC5_PRE6/Extensions/AccountPluggableBrain.py MailManager/tags/RELENG_2_1_RC5_PRE6/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_1_RC5_PRE6/MailManager.py MailManager/tags/RELENG_2_1_RC5_PRE6/MailMixin.py MailManager/tags/RELENG_2_1_RC5_PRE6/migrations/v2_1/__init__.py MailManager/tags/RELENG_2_1_RC5_PRE6/ruleset/data/queuesystem_2_1_4.py MailManager/tags/RELENG_2_1_RC5_PRE6/sql/v2_1/deleteTickets.zsql MailManager/tags/RELENG_2_1_RC5_PRE6/sql/v2_1/modifyTicketRulesets.zsql MailManager/tags/RELENG_2_1_RC5_PRE6/tests/classes/testStructures.py MailManager/tags/RELENG_2_1_RC5_PRE6/tests/testAPI.py MailManager/tags/RELENG_2_1_RC5_PRE6/tests/testSending.py MailManager/tags/RELENG_2_1_RC5_PRE6/tests/testUnicode.py MailManager/tags/RELENG_2_1_RC5_PRE6/www/master.zpt MailManager/tags/RELENG_2_1_RC5_PRE6/www/ticket_index_html.zpt Removed Paths: ------------- MailManager/tags/RELENG_2_1_RC5_PRE6/CHANGES.txt MailManager/tags/RELENG_2_1_RC5_PRE6/Extensions/AccountPluggableBrain.py MailManager/tags/RELENG_2_1_RC5_PRE6/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_1_RC5_PRE6/MailManager.py MailManager/tags/RELENG_2_1_RC5_PRE6/MailMixin.py MailManager/tags/RELENG_2_1_RC5_PRE6/migrations/v2_1/__init__.py MailManager/tags/RELENG_2_1_RC5_PRE6/sql/v2_1/deleteTickets.zsql MailManager/tags/RELENG_2_1_RC5_PRE6/tests/classes/testStructures.py MailManager/tags/RELENG_2_1_RC5_PRE6/tests/testAPI.py MailManager/tags/RELENG_2_1_RC5_PRE6/tests/testSending.py MailManager/tags/RELENG_2_1_RC5_PRE6/www/master.zpt MailManager/tags/RELENG_2_1_RC5_PRE6/www/ticket_index_html.zpt Copied: MailManager/tags/RELENG_2_1_RC5_PRE6 (from rev 3125, MailManager/branches/RELENG_2_1) Deleted: MailManager/tags/RELENG_2_1_RC5_PRE6/CHANGES.txt =================================================================== --- MailManager/branches/RELENG_2_1/CHANGES.txt 2006-06-01 10:23:38 UTC (rev 3125) +++ MailManager/tags/RELENG_2_1_RC5_PRE6/CHANGES.txt 2006-06-05 17:18:07 UTC (rev 3133) @@ -1,690 +0,0 @@ -Version 2.1-RC5 -* BUG FIXES -- Create tickets hardcodes Epoz (#1495917) -- Response target defaults to now (#1494223) -- Response targets for accounts are now compulsory (#1494791) -- Blank items in history (#1495097) -- Empty category choice shown on tickets page (#1496041) -- History display garbled for category changes (#1494163) -- Replied tickets are being marked as overdue (#1497428) -- Spam state not respected for new ticket alerts (#1497702) -- Empty queues break ticket display (#1498067) -- Dates not localised consistently in UI (#1494154) - -Version 2.1-RC4 -* BUG FIXES -- create_tables flag not used correctly (#1490966) -- Changing user to all has no effect (#1490876) -- Cannot view dequeued ticket (#1490915) -- Search always fails with invalid query (#1490871) -- Postgres encoding may still be in native charset (#1490182) -- Timestamps are not formatted correctly (#1484503) -- Incorrect abilities for new accounts (#1492592) -- Migration from 2.0 broken (#1492890) -- No highlight on subtab for ticket type (#1490998) -- Replying to tickets from queue omits To field (#1484499) -- Search results raises an error (#1484495) -- Queued events are not being processed (#1493443) -- Creating new ticket leads to an error (#1493482) -- No Send buttons on Tickets screen (#1493452) -- Overdue status is lost on migration (#1493442) -- Spam is not being processed (#1493596) -- Conflicting security declarations for QueueReportingEngine (#1493607) -- Filters breaking getMail with unicode messages (#1493620) -- AutoLogout not working correctly (#1493641) -- Add Note missing from overdue tickets (#1494173) -- Loop detection code prevents mailmanager mailing mailmanager (#1494827) -- Unicode issue in getmail (#1493483) -- Overdue transitions fail on closed tickets (#1493636) -- Notify user fails with unicode subjects (#1495112) -- Filters do not allow setting of state (#1495442) -- Create ticket can no longer generate email (#1495494) -- HTML messages are not displayed correctly (#1494158) -* BUG FIXES From 2.0.8 to 2.0.9 -- Formatting broken on templates for HTML (#1477664) -- No HTML response for HTML Required (#1472881) -- Selecting No change results in a failure (#1467786) -- Automatic addition of attachments (#1459924) -- UI Allows creation of empty groups (#1486433) -- Importing fails with alternative timezone (#1485389) -* BUG FIXES From 2.0.9 to 2.0.10 -* SECURITY -- Added in fix for potential security issue - Postgres encoding security hole (#1494281) - The code should not be vulnerable to this issue, but additional bugs in - the release may expose the vulnerability. Adding in a patch which will - prevent the exploit in all cases. - -Version 2.1-RC3 -* BUG FIXES -- setHTML raises Unicode error (#1477563) -- Queues page list has white on white (#1477727) -- Mass update selection doesn't work (#1478274) -- Selected colour leads to white on white (#1477724) -- Strings in code missing from i18n (#1482434) -- User abilities are not maintained consistently (#1481211) -- tickets list not finding tickets (#1481221) -- Editing a group to add a user fails (#1481095) -- Unicode usernames cannot be selected (#1478348) -- Add or Edit user breaks with unicode input (#1478345) -- HTML attachments aren't obvious (#1477717) -- Paging on Tickets screen broken (#1460936) -- show HTML is broken (#1477709) -- setSort on 'Queues' view returns 'Tickets' (#1477564) -- Queues page does not have status buttons (#1477689) -- AutoLogout not working correctly (#1477081) -- No strptime on windows (#1476818) -- getMail fails with TypeError (#1476878) -- Export to Excel on Reports (#1460909) -- Empty abilities are not being handled correctly (#1475604) -- History Display Issues (#1460955) -- Adding/Deleting Attachments problems (#1460943) -- Support of: text invisible (#1460915) -- Queue button doesn't highlight (#1460913) -- Performance Reports still contain queue masters (#1475530) -- getMail fails with unicode error (#1475487) -- Default template on accounts (#1464963) -- Setting template should return to template (#1464961) -- Close button not listed (#1464954) -- Restrict incoming emails with cc's to other accts to 1 tckt (#1464959) -- Return to Queue does not return to queues list (#1464947) -- Mass ticket updates not implemented (#1464953) -- Adding a customer fails (#1460922) -- Reports page is broken (#1472976) -* BUG FIXES From 2.0.7 to 2.0.8 -- Non existant refresh value leads to security error (#1466274) -- Cannot create HTML tickets (#1466223) -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.1-RC2 -* FEATURES -- Message loops are now caught based on presence of X-MailManager header -- Migration code improved to fit with the design proposed in the development - documentation -- TID in subject lines is now optional, based on database settings - although no UI pages allow this to be configured -* BUG FIXES -- State (or Status) of Ticket not display (#1455795) -- Issues with New state (#1456222) -- Deleting users via the Settings tab fails (#1456837) -- Deleting an Account with tickets fails (#1459386) -- RNG using too much entropy (#1459353) -- Fixed issue with non-ascii filter condition (#1438720) -- Tabs do not display on MySQL (#1451140) -- addUser page breaks on MySQL (#1451131) -- CookieCrumblerDisabled exception with http auth (#1451109) -- Fixed #1455297 login chews up entropy. Sessions are now not created until - user has successfully supplied a correct username and password combination. - In addition, the amount of entropy used per login has been reduced but can - still be considered secure. Tests have also been updated to reflect this. -* BUG FIXES From 2.0.7 to 2.0.8 -- Direct cycles of support_of are not allowed now. (#1353210) -- Cite last includes only replies now (#1369571) - -Version 2.1-RC1 -* BUG FIXES -- Merged in bugfixes from between 2.0.6 and 2.0.8 (Unreleased) inclusive - as denoted later in this file -- Various CSS Fixes to improve IE compatability -- MySQL compatability fixes -* IMPROVEMENTS -- Queueing Mode -- User abilities added to the database, queue allocation takes these into - consideration -- Named rulesets in the SQL database to allow for future use of multiple - rulesets per MailManager installation -- CookieCrumbler replaced with LoginHandler, allows for login sessions stored - in SQL and timing out of user logins. - -Version 2.1-beta1 -* BUG FIXES -- Merged in bugfixes from between 2.0.1-rc1 and 2.0.5 -- Minor UI fixes (#1322897, #1350233). -* IMPROVEMENTS -- Set the HTTP realm for authentication (so that auth data doesn't clash - between multiple MailManager instances and other Zope applications on the - same server) (#1356498). -- Seems to work OK with Zope 2.8.x (tested with 2.8.5) (#1328206), with the - most recent 3rd party package release. -- Works with PostgreSQL 8.1. - -Version 2.1-alpha2 -* NEW FEATURES -- Basic syndication support (both atom and RSS) of the top 20 unread tickets - for a MailManager instance. -* IMPROVEMENTS -- Tabindex is now being set on all form elements. -- There's now a print stylesheet for all MailManager pages which should hide - the non-salient information. -* BUG FIXES -- FilterSettings page now works (#1328226). -- Now set before the stylesheet is referenced which sometimes - caused the stylesheet not to load (#1328221). -- Create ticket page should now work (#1314741). - -Version 2.1-alpha1 -* IMPROVEMENTS -- Entirely reworked user interface, which: - - Looks exactly the same as it used to! - - Is XHTML 1.0 Strict and CSS 2.1 compliant. - - Should conform to at least priority 1 and probably priority 2 of the - WAI guidelines. - - Should be really easy to skin to make it look different. - - Is vastly tidied up -- Gone from over 8,000 lines of page templates to - just under 5,000! -- Initial modularisation of the reporting engine. - -Version 2.0.8 (Unreleased) -* Unfactored from 2.0.8 -- Create ticket method is highly broken - - Cannot create HTML tickets (#1466223) -- Unicode from addresses break incoming mail (#1440861) -- Valid tags are stripped from HTML on sending (#1460262) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -* BUG FIXES -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Archive and Restore functionality broken (#1452514) -- Encoding Error with signatures (#1440862) -- Non existant refresh value leads to security error (#1466274) -- Changing format away from HTML generates a Zope error (#1460216) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.8 -* BUG FIXES -- Non existant refresh value leads to security error (#1466274) -- Cannot create HTML tickets (#1466223) -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.7 -* BUG FIXES -- Fixed the setting of next ticket id for MySQL, no longer silently ignores - the option on mailmanager creation and fixes migration (#1412787) -- Send and Close, Send Reply, Send and Hold and Add Note have all been - considerably refactored. This resolves the problem reported where outbound - messages had been silently discarded (#1415497) -- getMail could potentially drop incoming messages whilst collecting from - POP3 accounts. This has now been corrected, and a test case now exists - which reproduces the existing problem and demonstrates it being fixed. - (#1422985) -- i18n fix - on the ticket modify screen "closed" is no longer displayed as - "open" when languages other than English are used (#1423422) -* IMPROVEMENTS -- Massive improvements to the test suite. - -Version 2.0.6 -* IMPROVEMENTS -- We're now using html2text (included) instead of stripogram for converting - HTML to its plain text equivalent (when sending out HTML mail, we also - include a plain text alternative for those who can't read HTML messages). - This results in far prettier plain text conversion. -* BUG FIXES -- Notify user/group flags can now be set/cleared correctly on account - preferences (#1404595). -- Improved address validation. Well, it's now a bit more lax, but it's - completely conformant to RFCs 2821 and 2822 (#1396051). -- MySQL: Default categories are now set up at installation (#1392386). -- HTML parts of multipart/alternative messages are now encoded as UTF-8 - rather than, bizarrely, being forced into ISO-8859-1 (#1368283). -- Make sure the user is informed about *why* test data cannot be removed - (#1345788). - -Version 2.0.5 -* BUG FIXES -- MySQL: Users are now migrated correctly (#1378323) -- MySQL: Attachments can now be of virtually any size (#1378224) -- MySQL: MailManager will now start when psycopg is not present (#1378209) -- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) -- PostgreSQL: Migration works even if response target update fails (#1374603) -- Search now works for users in all timezones (#1375345) -- The test data now sets 'routing' on the accounts (#1375764) -- MMImport.py script now uses new URL (#1378385) - -Version 2.0.4 -* BUG FIXES -- Prevent multiple users replying to the same ticket by accident (#1371269) -- Filters got broken in 2.0.3, change reverted (#1372814) -- Attachments now set the Content-Type header correctly on download (#13369349) -- Template names with trailing whitespace now work (#1363768) -- Set sql_charset on the mailmanager object during migration. (#1369347) - -Version 2.0.3 -* BUG FIXES -- Be more careful about adding and removing the test data (#1353112, #1345788). -- Improve the Unicode support with the MySQL back end (#1338614). -- Support of can now be removed with MySQL back end (#1338603). -- Fixes to the response target settings (#1336398, #1337506). -- setSession correctly clears the offset and always redirects to - Tickets (#1350429). -- Offer MySQL back end as a migration option (#1340301). -- Tickets now correctly marked as unread with MySQL back end (#1344827). - -Version 2.0.2 -* BUG FIXES -- Ignore the showHTML information in the session for plain text - emails. Reapplied previous bugfix (#1242337) -- Resetting response target to None now updates database (#1336398) -- Reports for targets fixed (#1337506) -* IMPROVEMENTS -- Now has setupdb script for MySQL users -- Split off setupdb code, now available as separate module -- Added in documentation for MySQL configuration - -Version 2.0.1-release -* BUG FIXES -- Disk usage screen now fixed for empty instances (#1244446) -- Initial Manager use now has correct roles set (#1324878) -- Altering roles now works correctly (#1324876) -- Update of response target now works correctly (#1324935) -- Removing notification flag for users/group now works correctly (#1315000) -- Migration now works correctly for 1.1 instances (#1291113) -- Setting response targets no longer generates an error (#1324884) - -Version 2.0.1-rc2 -* BUG FIXES -- No longer depends on psycopg due to import statements -- Migration fixes for MySQL users -- Fixed some scoping issues causing ZSQL methods to break due to - acquisition. -* IMPROVEMENTS -- SQL Directory no longer uses FileSystemSite.DirectoryView meaning - that the SQL methods can be overridden by 3rd parties. -- Test suite now has added hooks for overloading object types - -Version 2.0.1-rc1 -* BUG FIXES -- Test suite now covers text search cache consistency, cleared issues - with MySQL's mysql_max_allowed_packet variable -- Postgres support now appears stable - -Version 2.0.1-beta1 -* BUG FIXES -- Merged in all of the changes between 2.0r6 and 2.0r7 -- Fixed the index bug which was resulting in duplicate tickets being - displayed on the list page - -Version 2.0.1-alpha1 -* NEW FEATURES -- Adds in initial MySQL support -- SQL methods given addition parameters to deal with new MySQL support -- Vastly improved test suite - regression test suite for the database code. - -Version 2.0r7 -* BUG FIXES -- Subsequent pages for search were not being returned due to misuse of the - SESSION variable. These are now handled correctly (#1276412) -- Categories and templates were moved entirely to SQL. Upgrade needs a - migration to function correctly. (#1276414) -- listTickets method now correctly searches for subjects -- Fixes a Unicode handling error in the MailMixing class, which could - potentially block up incoming mail -* IMPROVEMENTS -- Postgres installation documentation rewritten -- Changes to loading of test datasets -- Test data set improved, now covers more functionality - -Version 2.0r6 -* BUG FIXES -- Fixed the positioning of the order by section of the listTickets query, - fixes broken ordering for search. -- The listCategories SQL method was broken, which was used by the Reports - pages. Reports for categories other than category0 were broken. - -Version 2.0 -* BUG FIXES -- Fix the security declaration of checkPOP3SSL(). - -Version 2.0 RC 3 -* NEW FEATURES -- Introduce some generalisations, ready for MySQL support in 2.0.1 -- Beginnings of epydoc API documentation. -* BUG FIXES -- Update the version number on migration. (#1229769) -- Robustify the autoreply code to deal with fatal errors. (#1240870) -- When a new message comes in with a ticket id in the subject line, - verify that the ticket already exists instead of assuming that it - does. (#1240711) -- Format the email address in the To: field for replies. (#1230837) -- Ignore the showHTML information in the session for plain text - emails. (#1242337) -- Record the logged in user who sent a reply to a ticket. (#1242958) - -Version 2.0 RC 2 -* BUG FIXES -- multipart/alternative mail with both an HTML and a plain text body now - only display one of them at a time (1227265) -- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) -- Migration updates the mm version -- Create ticket works again (1227744) - -Version 2.0 RC 1 -* BUG FIXES -- Stripogram can now be installed as a Python product in site-packages (1226633) -- Reply-To: header is used in favour of From: (1226156) -- Notifiction emails can handle non-ASCII subject lines (1224784) -- URLs are now accurate on notification emails (1224756) -- Character encodings set correctly on all web pages (1224731) -- Send & Close now goes to the next ticket (1224164) -- Improved date parsing (1223755) -- Respond By: now displayed for tickets with a response target (1222528) -- Attachment titles are now decoded correctly (1223974) - -Version 2.0 Beta 2 -* BUG FIXES -- Make the email validation less strict. (1283401) -- Customers can no longer have email addresses which are used - by an account. (1216414) -- Migration: Drop filters which refer to unknown users/groups. (1216361) -- Migration: Be more careful about coercing dates into ISO8601. (1216534) -- Clarified notification email setup. (1217403) -- Fixed Chinese translation. (1215645) -- Store time zone information in the pgsl database. - -Version 2.0 Beta 1 -* NEW FEATURES -- Added a Chinese translation. -- Add some documentation for creating the Postgres database and point to - detailed docs on the Windows installation process. -- Updated the help files to reflect the new version's feature set. -* BUG FIXES -- Make mbox exports have a more meaningful filename. -- Deal with RFC2047-encoded headers correctly. (1212035) -- Make the disk usage a bit more friendly. (1213604) -- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) -- Epoz now has a white background on all browsers. (1208912) - -Version 2.0 alpha 2 -* NEW FEATURES -- Support for retrieving POP3 mail over SSL (RFE 1204236) -- Optionally notify all in a group of new messages (RFE 1208284) -* BUG FIXES -- Help tab no longer visible after logout (1207656) -- Adding a MailManager instance now creates an initial user (1207022) -- Changes to users such as adding a signature no longer clear password (1207017) -- HTML tickets work properly (1205720, 1205717) -- Time to close tickets recorded (1204825) -- Reply to all button improved (1204805) -- Reassignment notification added (1204372) -- Groups redesigned (1204312) -- Adding/removing attachments no longer clears other form fields (1204272) -- Date translations fixed (1204268) -- Templates fixed (1204267) -- Overdue tickets function properly (1203141) -- Performance v. account report fixed (1196685) -- GetMail fixed (1196606) -- Referential integrity broken on mm_message table (1194418) -- Login link on logout page fixed (1204811) -- Signature handling improved (1204877) -- HTML email fixed (1204987) - -Version 2.0 alpha 1 -* NEW FEATURES -- A complete redesign using PostgreSQL as a replacement for the ZODB in order - to improve performance and scalability. -- Can now use SMTP servers that require a login (RFE 939720) - -Version 1.1 -* NEW FEATURES -- Internationalization of the help documentation. -* BUG FIXES -- Make sure that sending mail out is the last thing done, which should reduce - the window where a ConflictError would cause duplicate emails to be sent. -- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other - than a MessageParseError. Otherwise we wind up hard-bouncing (instead of - retrying) on a ConflictError. - -Version 1.1-rc5 -* BUG FIXES -- Comptatible with Zope 2.6/Python 2.1 again - -Version 1.1-rc4 -* BUG FIXES -- Standard attachments fixed (1110435) -- Clear supporter link fixed after i18n problem (1110436) - -Version 1.1-rc3 -* NEW FEATURES -[Unfortunately it was essential to add the following features at - this late stage for commercial reasons.] -- Added archive/restore tickets (RFE 953290) -- Create ticket can now have multiple attachments (RFE 987700) -- Replies can also have multiple attachments (RFE 859141) -- Standard set of attachments can be stored on the system (RFE 985469) -* BUG FIXES -- Edit of mail headers now works properly (RFE 859102) -- Fixed broken migration - -Version 1.1-rc2 -* BUG FIXES -- Now possible to add/edit account without SSL (1090041) -- Spam tickets no longer appear on the 'New' tickets list - -Version 1.1-rc1 -* NEW FEATURES -- Users notified on re-assignment of tickets (RFE 978035) -- Internationalisation (i18n) added ready for translation to other languages. -- Support for SSL connections to remote IMAP server. -- Any mail headers may be used in filters (RFE 859102) -* BUG FIXES -- Report graphs now work for user-defined categories (978404) -- File downloads now work when there is a space in the filename (985150) -- Remove support ticket feature fixed (985677) -- Users no longer notified if spam is received (1059104) -- Spam no longer displayed on default ticket listing views -- Templates with names ending in a space may now be deleted/edited (1003514) - -Version 1.0 -No changes from 1.0-rc2 - -Version 1.0-rc2 -* NEW FEATURES -- Batch classification of tickets. (RFE 859114 and 957719) -* BUG FIXES -- Migration works when filters are of mixed formats. (945956) -- Migration works when groups are of mixed formats. (945959) -- Messages from mailer-daemon with a real name do not cause a loop. (952864) -- Works on Firefox for Mac when reply has no attachment. (963291) -- Report graphs work for more than 200 tickets in a period. (964144) - -Version 1.0-rc1 -* NEW FEATURES -- Choice of date format. (RFE 869827) -- Choice of timezone (currently only on Unix). (RFE 869827) -- Script to import mail from Unix mailboxes. (RFE 903031) -- Shortcut icon. -- Importing of tickets enabled. -* IMPROVEMENTS -- Added global error slot and adjusted settings screens to use it. (873232) -- Message response form fields remembered in request. -- An instance's children may be migrated even when it is not. -* BUG FIXES -- Mail check thread delays till Zope is ready in 2.7 as well. (835642) -- GroupSettings page template works with new-style groups. (887785) -- Problems sending mail caught and reported to the user or logged. (892947) -- Message ID added to outgoing messages. (895039) -- Newlines in the Cc field no longer break the JavaScript. (904033) -- Private notes and replies no longer lose headers in migration. (904076) -- Private notes may no longer have a To field. (912534) -- Ticket ownership transferred when user deleted. (925344) -- Customers are persistent. (930654) -- Sending files with a bad mime type does not cause an exception. (934133) -- HTML templates no longer have extra breaks added. (934235) -- MailManager.getMail() returns an empty string on success. (934902) -- Add customer form checks fields are filled. (938631) -- Fixed links to AccountSettings page. (938678) - -Version 1.0-b4 -* BUG FIX -- Fixed error when a new thread is started and notification is on. - -Version 1.0-b3 -* NEW FEATURES -- Supporter mechanism for associating tickets fully implemented. -- URLs in messages rendered as hyperlinks. -- Filters can assign to groups as well as users. -* IMPROVEMENTS -- Assigned agent mailed at every new message in ticket, customer only - when he starts a new ticket. This reverses the previous behaviour. -- Tickets can be re-opened by arrival of a new message or through - Ticket Details box. -- Migration version distinguished from product version. -- Group now a class; ensures that group members are assigned to evenly. -- By default users only see tickets assigned to them. -- Export (view raw messages) link added to Ticket index page. -* BUG FIXES -- Account signatures are now used. -- HTML setting on auto replies and templates respected. -- Agents can be deleted. -- Several others (see SourceForge bugs 859030 to 873233). - -Version 1.0-b2 -* NEW FEATURES -- Migration -- HTML messages may now be viewed. -- Most recent search results always available. -- Response target added as option in filters and create ticket screen. -* IMPROVEMENTS -- More robust ticket navigation (works with virtual hosting, "prev"/"next" - links always available, "list" goes to batch containing current ticket). -- Improved handling and presentation of attachments. -- Help screens updated (not quite finished). -- Improved interface to reports (still needs work though). -- All character sets displayed correctly (as far as the browser's fonts allow). -- Mail fetching scripts have an option to specify MailManager's URL . -- Search by from name no longer requires exact match. -- Much Python code removed from page templates. -* BUG FIXES -- Overdue ticket view and searches for overdue tickets now work. -- Automatic mail checking continues after product is refreshed. -- Numerous others (see SourceForge bugs 832932 to 858688). - -Version 1.0-b1 -- Dependence on MailHost product removed. -- Message class now wraps Message object from Python email package, - allowing mails to be retreived in their original form. -- Automatic mail fetching introduced. -- Code for creating e-mails through the web brought together in a new - module and handling added for text entered in any character set. -- Each account is now a separate folder, ready for per account - security settings. -- Fetching and handling of incoming mail moved to new Account class. -- Self service interface to allow customers to manage their own tickets. -- Better handling of HTML emails. -- Create ticket now has more sensible defaults. -- Users now deleted properly. -- Calculates an approximation of disk space used. -- Added Property Managers to ease debugging. -- Users with 'Settings' access can no longer view ZMI. -- Numerous bug fixes. - -Version 0.96 -- By default, shows newest tickets first rather than oldest -- The subject of a ticket can now be changed -- If more email is added to a read ticket it goes back to being unread (bold) -- Advises if an attachment is of a dangerous type (for Windows users) -- Attachments now download with original filename & security improved -- Browser bug in IE prevented selection of user on tickets screen (797221) -- Two extra user definable categories added -- Code tidied up & minor bug fixes - -Version 0.95 -- Added a 'Spam' status and amended reports, tickets & filters accordingly -- Can now delete spam tickets without closing them (783289) -- Now handles AppleDouble attachments correctly (787671) -- POP3 mailbox lock removed if there is an error (787677) -- IMAP mailbox lock removed if there is an error -- Mails that can't be processed are now stored raw rather than deleted -- Added 'priority' and 'assigned' to Search screen (785360) -- Basic export of reports to Excel implemented -- Now record and report on times to close as well as times to respond -- Other minor fixes - -Version 0.94 -- Ticket status is displayed correctly in all circumstances -- Adding attachments when creating a ticket thru the web now works as expected. -- Users can be notified of new tickets in all circumstances (783955) -- Allow selection of fields to display on tickets screen (783863) -- Added submenu to the Create ticket screen -- Other minor fixes - -Version 0.93 -- Improved attachment handling and display -- Improved ticket navigation (now back/list/next on ticket view) (780783) -- Fixed a bug in the reporting graphs where the last day in the month could - be missed -- Added an auto refresh option for tickets screen (feature request 781294) -- By default tickets created through the web are assigned to the logged in user, - rather than the first user alphabetically -- Improved outgoing mail -- More advanced standard filter -- Tightened up security -- Help button now context sensitive - -Version 0.92 -- Adding a user with the Reports permission now works as expected (779986) -- Account deletion now works properly (779989) -- Admin password now hidden on the Add MailManager page (779987) - -Thanks to Ronan Amicel for spotting these four bugs. - -- Ticket deletion system improved. -- Supporting tickets system now works better. - -Version 0.91 -- Fixed the Account Help screen. Now displays properly and text is accurate. -- Fixed the 'Change details' section on a ticket screen so the user the ticket - is assigned to is displayed by default. Also ensured user names are displayed - in alphabetical order. -- Categories can now be deleted. Deleted categories will still appear in - Reports, System Settings and on the Search page until every ticket with that - category has been deleted from the system. - -Thanks to Kevin Gill for spotting these bugs. - -Version 0.9 -The first open source release of MailManager. Based on the commercial version -however with some major changes: - -- Uses the Zope Object DB instead of an external relational database. This - changes the performance, it is faster in some areas and slower in others. It - makes the product much easier to install. -- Use of HTML to generate the graphs. Not as attractive as the commercial - version but saves the difficulty of installing extensions which were not - stable on all platforms. -- Improved text editor. Epoz is used to provide rich text editing allowing - easy creation of HTML mail. -- Improved text indexing. Greatly expanded query options. -- Bug fixes. A number of minor bugs were fixed. Copied: MailManager/tags/RELENG_2_1_RC5_PRE6/CHANGES.txt (from rev 3132, MailManager/branches/RELENG_2_1/CHANGES.txt) =================================================================== --- MailManager/tags/RELENG_2_1_RC5_PRE6/CHANGES.txt (rev 0) +++ MailManager/tags/RELENG_2_1_RC5_PRE6/CHANGES.txt 2006-06-05 17:18:07 UTC (rev 3133) @@ -0,0 +1,695 @@ +Version 2.1-RC5 +* BUG FIXES +- Create tickets hardcodes Epoz (#1495917) +- Response target defaults to now (#1494223) +- Response targets for accounts are now compulsory (#1494791) +- Blank items in history (#1495097) +- Empty category choice shown on tickets page (#1496041) +- History display garbled for category changes (#1494163) +- Replied tickets are being marked as overdue (#1497428) +- Spam state not respected for new ticket alerts (#1497702) +- Empty queues break ticket display (#1498067) +- Dates not localised consistently in UI (#1494154) +- Formatting broken on templates for HTML (#1477664) - Previous fix invalid +- Problems displaying HTML messages (#1499451) +- Ruleset permissions are too strict (#1499441) +- Invalid utf-8 in from name breaks processing (#1500808) +- Delete tickets does not delete attachments (#1492850) + +Version 2.1-RC4 +* BUG FIXES +- create_tables flag not used correctly (#1490966) +- Changing user to all has no effect (#1490876) +- Cannot view dequeued ticket (#1490915) +- Search always fails with invalid query (#1490871) +- Postgres encoding may still be in native charset (#1490182) +- Timestamps are not formatted correctly (#1484503) +- Incorrect abilities for new accounts (#1492592) +- Migration from 2.0 broken (#1492890) +- No highlight on subtab for ticket type (#1490998) +- Replying to tickets from queue omits To field (#1484499) +- Search results raises an error (#1484495) +- Queued events are not being processed (#1493443) +- Creating new ticket leads to an error (#1493482) +- No Send buttons on Tickets screen (#1493452) +- Overdue status is lost on migration (#1493442) +- Spam is not being processed (#1493596) +- Conflicting security declarations for QueueReportingEngine (#1493607) +- Filters breaking getMail with unicode messages (#1493620) +- AutoLogout not working correctly (#1493641) +- Add Note missing from overdue tickets (#1494173) +- Loop detection code prevents mailmanager mailing mailmanager (#1494827) +- Unicode issue in getmail (#1493483) +- Overdue transitions fail on closed tickets (#1493636) +- Notify user fails with unicode subjects (#1495112) +- Filters do not allow setting of state (#1495442) +- Create ticket can no longer generate email (#1495494) +- HTML messages are not displayed correctly (#1494158) +* BUG FIXES From 2.0.8 to 2.0.9 +- Formatting broken on templates for HTML (#1477664) +- No HTML response for HTML Required (#1472881) +- Selecting No change results in a failure (#1467786) +- Automatic addition of attachments (#1459924) +- UI Allows creation of empty groups (#1486433) +- Importing fails with alternative timezone (#1485389) +* BUG FIXES From 2.0.9 to 2.0.10 +* SECURITY +- Added in fix for potential security issue + Postgres encoding security hole (#1494281) + The code should not be vulnerable to this issue, but additional bugs in + the release may expose the vulnerability. Adding in a patch which will + prevent the exploit in all cases. + +Version 2.1-RC3 +* BUG FIXES +- setHTML raises Unicode error (#1477563) +- Queues page list has white on white (#1477727) +- Mass update selection doesn't work (#1478274) +- Selected colour leads to white on white (#1477724) +- Strings in code missing from i18n (#1482434) +- User abilities are not maintained consistently (#1481211) +- tickets list not finding tickets (#1481221) +- Editing a group to add a user fails (#1481095) +- Unicode usernames cannot be selected (#1478348) +- Add or Edit user breaks with unicode input (#1478345) +- HTML attachments aren't obvious (#1477717) +- Paging on Tickets screen broken (#1460936) +- show HTML is broken (#1477709) +- setSort on 'Queues' view returns 'Tickets' (#1477564) +- Queues page does not have status buttons (#1477689) +- AutoLogout not working correctly (#1477081) +- No strptime on windows (#1476818) +- getMail fails with TypeError (#1476878) +- Export to Excel on Reports (#1460909) +- Empty abilities are not being handled correctly (#1475604) +- History Display Issues (#1460955) +- Adding/Deleting Attachments problems (#1460943) +- Support of: text invisible (#1460915) +- Queue button doesn't highlight (#1460913) +- Performance Reports still contain queue masters (#1475530) +- getMail fails with unicode error (#1475487) +- Default template on accounts (#1464963) +- Setting template should return to template (#1464961) +- Close button not listed (#1464954) +- Restrict incoming emails with cc's to other accts to 1 tckt (#1464959) +- Return to Queue does not return to queues list (#1464947) +- Mass ticket updates not implemented (#1464953) +- Adding a customer fails (#1460922) +- Reports page is broken (#1472976) +* BUG FIXES From 2.0.7 to 2.0.8 +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.1-RC2 +* FEATURES +- Message loops are now caught based on presence of X-MailManager header +- Migration code improved to fit with the design proposed in the development + documentation +- TID in subject lines is now optional, based on database settings + although no UI pages allow this to be configured +* BUG FIXES +- State (or Status) of Ticket not display (#1455795) +- Issues with New state (#1456222) +- Deleting users via the Settings tab fails (#1456837) +- Deleting an Account with tickets fails (#1459386) +- RNG using too much entropy (#1459353) +- Fixed issue with non-ascii filter condition (#1438720) +- Tabs do not display on MySQL (#1451140) +- addUser page breaks on MySQL (#1451131) +- CookieCrumblerDisabled exception with http auth (#1451109) +- Fixed #1455297 login chews up entropy. Sessions are now not created until + user has successfully supplied a correct username and password combination. + In addition, the amount of entropy used per login has been reduced but can + still be considered secure. Tests have also been updated to reflect this. +* BUG FIXES From 2.0.7 to 2.0.8 +- Direct cycles of support_of are not allowed now. (#1353210) +- Cite last includes only replies now (#1369571) + +Version 2.1-RC1 +* BUG FIXES +- Merged in bugfixes from between 2.0.6 and 2.0.8 (Unreleased) inclusive + as denoted later in this file +- Various CSS Fixes to improve IE compatability +- MySQL compatability fixes +* IMPROVEMENTS +- Queueing Mode +- User abilities added to the database, queue allocation takes these into + consideration +- Named rulesets in the SQL database to allow for future use of multiple + rulesets per MailManager installation +- CookieCrumbler replaced with LoginHandler, allows for login sessions stored + in SQL and timing out of user logins. + +Version 2.1-beta1 +* BUG FIXES +- Merged in bugfixes from between 2.0.1-rc1 and 2.0.5 +- Minor UI fixes (#1322897, #1350233). +* IMPROVEMENTS +- Set the HTTP realm for authentication (so that auth data doesn't clash + between multiple MailManager instances and other Zope applications on the + same server) (#1356498). +- Seems to work OK with Zope 2.8.x (tested with 2.8.5) (#1328206), with the + most recent 3rd party package release. +- Works with PostgreSQL 8.1. + +Version 2.1-alpha2 +* NEW FEATURES +- Basic syndication support (both atom and RSS) of the top 20 unread tickets + for a MailManager instance. +* IMPROVEMENTS +- Tabindex is now being set on all form elements. +- There's now a print stylesheet for all MailManager pages which should hide + the non-salient information. +* BUG FIXES +- FilterSettings page now works (#1328226). +- Now set before the stylesheet is referenced which sometimes + caused the stylesheet not to load (#1328221). +- Create ticket page should now work (#1314741). + +Version 2.1-alpha1 +* IMPROVEMENTS +- Entirely reworked user interface, which: + - Looks exactly the same as it used to! + - Is XHTML 1.0 Strict and CSS 2.1 compliant. + - Should conform to at least priority 1 and probably priority 2 of the + WAI guidelines. + - Should be really easy to skin to make it look different. + - Is vastly tidied up -- Gone from over 8,000 lines of page templates to + just under 5,000! +- Initial modularisation of the reporting engine. + +Version 2.0.8 (Unreleased) +* Unfactored from 2.0.8 +- Create ticket method is highly broken + - Cannot create HTML tickets (#1466223) +- Unicode from addresses break incoming mail (#1440861) +- Valid tags are stripped from HTML on sending (#1460262) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +* BUG FIXES +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Archive and Restore functionality broken (#1452514) +- Encoding Error with signatures (#1440862) +- Non existant refresh value leads to security error (#1466274) +- Changing format away from HTML generates a Zope error (#1460216) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.8 +* BUG FIXES +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.7 +* BUG FIXES +- Fixed the setting of next ticket id for MySQL, no longer silently ignores + the option on mailmanager creation and fixes migration (#1412787) +- Send and Close, Send Reply, Send and Hold and Add Note have all been + considerably refactored. This resolves the problem reported where outbound + messages had been silently discarded (#1415497) +- getMail could potentially drop incoming messages whilst collecting from + POP3 accounts. This has now been corrected, and a test case now exists + which reproduces the existing problem and demonstrates it being fixed. + (#1422985) +- i18n fix - on the ticket modify screen "closed" is no longer displayed as + "open" when languages other than English are used (#1423422) +* IMPROVEMENTS +- Massive improvements to the test suite. + +Version 2.0.6 +* IMPROVEMENTS +- We're now using html2text (included) instead of stripogram for converting + HTML to its plain text equivalent (when sending out HTML mail, we also + include a plain text alternative for those who can't read HTML messages). + This results in far prettier plain text conversion. +* BUG FIXES +- Notify user/group flags can now be set/cleared correctly on account + preferences (#1404595). +- Improved address validation. Well, it's now a bit more lax, but it's + completely conformant to RFCs 2821 and 2822 (#1396051). +- MySQL: Default categories are now set up at installation (#1392386). +- HTML parts of multipart/alternative messages are now encoded as UTF-8 + rather than, bizarrely, being forced into ISO-8859-1 (#1368283). +- Make sure the user is informed about *why* test data cannot be removed + (#1345788). + +Version 2.0.5 +* BUG FIXES +- MySQL: Users are now migrated correctly (#1378323) +- MySQL: Attachments can now be of virtually any size (#1378224) +- MySQL: MailManager will now start when psycopg is not present (#1378209) +- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) +- PostgreSQL: Migration works even if response target update fails (#1374603) +- Search now works for users in all timezones (#1375345) +- The test data now sets 'routing' on the accounts (#1375764) +- MMImport.py script now uses new URL (#1378385) + +Version 2.0.4 +* BUG FIXES +- Prevent multiple users replying to the same ticket by accident (#1371269) +- Filters got broken in 2.0.3, change reverted (#1372814) +- Attachments now set the Content-Type header correctly on download (#13369349) +- Template names with trailing whitespace now work (#1363768) +- Set sql_charset on the mailmanager object during migration. (#1369347) + +Version 2.0.3 +* BUG FIXES +- Be more careful about adding and removing the test data (#1353112, #1345788). +- Improve the Unicode support with the MySQL back end (#1338614). +- Support of can now be removed with MySQL back end (#1338603). +- Fixes to the response target settings (#1336398, #1337506). +- setSession correctly clears the offset and always redirects to + Tickets (#1350429). +- Offer MySQL back end as a migration option (#1340301). +- Tickets now correctly marked as unread with MySQL back end (#1344827). + +Version 2.0.2 +* BUG FIXES +- Ignore the showHTML information in the session for plain text + emails. Reapplied previous bugfix (#1242337) +- Resetting response target to None now updates database (#1336398) +- Reports for targets fixed (#1337506) +* IMPROVEMENTS +- Now has setupdb script for MySQL users +- Split off setupdb code, now available as separate module +- Added in documentation for MySQL configuration + +Version 2.0.1-release +* BUG FIXES +- Disk usage screen now fixed for empty instances (#1244446) +- Initial Manager use now has correct roles set (#1324878) +- Altering roles now works correctly (#1324876) +- Update of response target now works correctly (#1324935) +- Removing notification flag for users/group now works correctly (#1315000) +- Migration now works correctly for 1.1 instances (#1291113) +- Setting response targets no longer generates an error (#1324884) + +Version 2.0.1-rc2 +* BUG FIXES +- No longer depends on psycopg due to import statements +- Migration fixes for MySQL users +- Fixed some scoping issues causing ZSQL methods to break due to + acquisition. +* IMPROVEMENTS +- SQL Directory no longer uses FileSystemSite.DirectoryView meaning + that the SQL methods can be overridden by 3rd parties. +- Test suite now has added hooks for overloading object types + +Version 2.0.1-rc1 +* BUG FIXES +- Test suite now covers text search cache consistency, cleared issues + with MySQL's mysql_max_allowed_packet variable +- Postgres support now appears stable + +Version 2.0.1-beta1 +* BUG FIXES +- Merged in all of the changes between 2.0r6 and 2.0r7 +- Fixed the index bug which was resulting in duplicate tickets being + displayed on the list page + +Version 2.0.1-alpha1 +* NEW FEATURES +- Adds in initial MySQL support +- SQL methods given addition parameters to deal with new MySQL support +- Vastly improved test suite - regression test suite for the database code. + +Version 2.0r7 +* BUG FIXES +- Subsequent pages for search were not being returned due to misuse of the + SESSION variable. These are now handled correctly (#1276412) +- Categories and templates were moved entirely to SQL. Upgrade needs a + migration to function correctly. (#1276414) +- listTickets method now correctly searches for subjects +- Fixes a Unicode handling error in the MailMixing class, which could + potentially block up incoming mail +* IMPROVEMENTS +- Postgres installation documentation rewritten +- Changes to loading of test datasets +- Test data set improved, now covers more functionality + +Version 2.0r6 +* BUG FIXES +- Fixed the positioning of the order by section of the listTickets query, + fixes broken ordering for search. +- The listCategories SQL method was broken, which was used by the Reports + pages. Reports for categories other than category0 were broken. + +Version 2.0 +* BUG FIXES +- Fix the security declaration of checkPOP3SSL(). + +Version 2.0 RC 3 +* NEW FEATURES +- Introduce some generalisations, ready for MySQL support in 2.0.1 +- Beginnings of epydoc API documentation. +* BUG FIXES +- Update the version number on migration. (#1229769) +- Robustify the autoreply code to deal with fatal errors. (#1240870) +- When a new message comes in with a ticket id in the subject line, + verify that the ticket already exists instead of assuming that it + does. (#1240711) +- Format the email address in the To: field for replies. (#1230837) +- Ignore the showHTML information in the session for plain text + emails. (#1242337) +- Record the logged in user who sent a reply to a ticket. (#1242958) + +Version 2.0 RC 2 +* BUG FIXES +- multipart/alternative mail with both an HTML and a plain text body now + only display one of them at a time (1227265) +- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) +- Migration updates the mm version +- Create ticket works again (1227744) + +Version 2.0 RC 1 +* BUG FIXES +- Stripogram can now be installed as a Python product in site-packages (1226633) +- Reply-To: header is used in favour of From: (1226156) +- Notifiction emails can handle non-ASCII subject lines (1224784) +- URLs are now accurate on notification emails (1224756) +- Character encodings set correctly on all web pages (1224731) +- Send & Close now goes to the next ticket (1224164) +- Improved date parsing (1223755) +- Respond By: now displayed for tickets with a response target (1222528) +- Attachment titles are now decoded correctly (1223974) + +Version 2.0 Beta 2 +* BUG FIXES +- Make the email validation less strict. (1283401) +- Customers can no longer have email addresses which are used + by an account. (1216414) +- Migration: Drop filters which refer to unknown users/groups. (1216361) +- Migration: Be more careful about coercing dates into ISO8601. (1216534) +- Clarified notification email setup. (1217403) +- Fixed Chinese translation. (1215645) +- Store time zone information in the pgsl database. + +Version 2.0 Beta 1 +* NEW FEATURES +- Added a Chinese translation. +- Add some documentation for creating the Postgres database and point to + detailed docs on the Windows installation process. +- Updated the help files to reflect the new version's feature set. +* BUG FIXES +- Make mbox exports have a more meaningful filename. +- Deal with RFC2047-encoded headers correctly. (1212035) +- Make the disk usage a bit more friendly. (1213604) +- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) +- Epoz now has a white background on all browsers. (1208912) + +Version 2.0 alpha 2 +* NEW FEATURES +- Support for retrieving POP3 mail over SSL (RFE 1204236) +- Optionally notify all in a group of new messages (RFE 1208284) +* BUG FIXES +- Help tab no longer visible after logout (1207656) +- Adding a MailManager instance now creates an initial user (1207022) +- Changes to users such as adding a signature no longer clear password (1207017) +- HTML tickets work properly (1205720, 1205717) +- Time to close tickets recorded (1204825) +- Reply to all button improved (1204805) +- Reassignment notification added (1204372) +- Groups redesigned (1204312) +- Adding/removing attachments no longer clears other form fields (1204272) +- Date translations fixed (1204268) +- Templates fixed (1204267) +- Overdue tickets function properly (1203141) +- Performance v. account report fixed (1196685) +- GetMail fixed (1196606) +- Referential integrity broken on mm_message table (1194418) +- Login link on logout page fixed (1204811) +- Signature handling improved (1204877) +- HTML email fixed (1204987) + +Version 2.0 alpha 1 +* NEW FEATURES +- A complete redesign using PostgreSQL as a replacement for the ZODB in order + to improve performance and scalability. +- Can now use SMTP servers that require a login (RFE 939720) + +Version 1.1 +* NEW FEATURES +- Internationalization of the help documentation. +* BUG FIXES +- Make sure that sending mail out is the last thing done, which should reduce + the window where a ConflictError would cause duplicate emails to be sent. +- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other + than a MessageParseError. Otherwise we wind up hard-bouncing (instead of + retrying) on a ConflictError. + +Version 1.1-rc5 +* BUG FIXES +- Comptatible with Zope 2.6/Python 2.1 again + +Version 1.1-rc4 +* BUG FIXES +- Standard attachments fixed (1110435) +- Clear supporter link fixed after i18n problem (1110436) + +Version 1.1-rc3 +* NEW FEATURES +[Unfortunately it was essential to add the following features at + this late stage for commercial reasons.] +- Added archive/restore tickets (RFE 953290) +- Create ticket can now have multiple attachments (RFE 987700) +- Replies can also have multiple attachments (RFE 859141) +- Standard set of attachments can be stored on the system (RFE 985469) +* BUG FIXES +- Edit of mail headers now works properly (RFE 859102) +- Fixed broken migration + +Version 1.1-rc2 +* BUG FIXES +- Now possible to add/edit account without SSL (1090041) +- Spam tickets no longer appear on the 'New' tickets list + +Version 1.1-rc1 +* NEW FEATURES +- Users notified on re-assignment of tickets (RFE 978035) +- Internationalisation (i18n) added ready for translation to other languages. +- Support for SSL connections to remote IMAP server. +- Any mail headers may be used in filters (RFE 859102) +* BUG FIXES +- Report graphs now work for user-defined categories (978404) +- File downloads now work when there is a space in the filename (985150) +- Remove support ticket feature fixed (985677) +- Users no longer notified if spam is received (1059104) +- Spam no longer displayed on default ticket listing views +- Templates with names ending in a space may now be deleted/edited (1003514) + +Version 1.0 +No changes from 1.0-rc2 + +Version 1.0-rc2 +* NEW FEATURES +- Batch classification of tickets. (RFE 859114 and 957719) +* BUG FIXES +- Migration works when filters are of mixed formats. (945956) +- Migration works when groups are of mixed formats. (945959) +- Messages from mailer-daemon with a real name do not cause a loop. (952864) +- Works on Firefox for Mac when reply has no attachment. (963291) +- Report graphs work for more than 200 tickets in a period. (964144) + +Version 1.0-rc1 +* NEW FEATURES +- Choice of date format. (RFE 869827) +- Choice of timezone (currently only on Unix). (RFE 869827) +- Script to import mail from Unix mailboxes. (RFE 903031) +- Shortcut icon. +- Importing of tickets enabled. +* IMPROVEMENTS +- Added global error slot and adjusted settings screens to use it. (873232) +- Message response form fields remembered in request. +- An instance's children may be migrated even when it is not. +* BUG FIXES +- Mail check thread delays till Zope is ready in 2.7 as well. (835642) +- GroupSettings page template works with new-style groups. (887785) +- Problems sending mail caught and reported to the user or logged. (892947) +- Message ID added to outgoing messages. (895039) +- Newlines in the Cc field no longer break the JavaScript. (904033) +- Private notes and replies no longer lose headers in migration. (904076) +- Private notes may no longer have a To field. (912534) +- Ticket ownership transferred when user deleted. (925344) +- Customers are persistent. (930654) +- Sending files with a bad mime type does not cause an exception. (934133) +- HTML templates no longer have extra breaks added. (934235) +- MailManager.getMail() returns an empty string on success. (934902) +- Add customer form checks fields are filled. (938631) +- Fixed links to AccountSettings page. (938678) + +Version 1.0-b4 +* BUG FIX +- Fixed error when a new thread is started and notification is on. + +Version 1.0-b3 +* NEW FEATURES +- Supporter mechanism for associating tickets fully implemented. +- URLs in messages rendered as hyperlinks. +- Filters can assign to groups as well as users. +* IMPROVEMENTS +- Assigned agent mailed at every new message in ticket, customer only + when he starts a new ticket. This reverses the previous behaviour. +- Tickets can be re-opened by arrival of a new message or through + Ticket Details box. +- Migration version distinguished from product version. +- Group now a class; ensures that group members are assigned to evenly. +- By default users only see tickets assigned to them. +- Export (view raw messages) link added to Ticket index page. +* BUG FIXES +- Account signatures are now used. +- HTML setting on auto replies and templates respected. +- Agents can be deleted. +- Several others (see SourceForge bugs 859030 to 873233). + +Version 1.0-b2 +* NEW FEATURES +- Migration +- HTML messages may now be viewed. +- Most recent search results always available. +- Response target added as option in filters and create ticket screen. +* IMPROVEMENTS +- More robust ticket navigation (works with virtual hosting, "prev"/"next" + links always available, "list" goes to batch containing current ticket). +- Improved handling and presentation of attachments. +- Help screens updated (not quite finished). +- Improved interface to reports (still needs work though). +- All character sets displayed correctly (as far as the browser's fonts allow). +- Mail fetching scripts have an option to specify MailManager's URL . +- Search by from name no longer requires exact match. +- Much Python code removed from page templates. +* BUG FIXES +- Overdue ticket view and searches for overdue tickets now work. +- Automatic mail checking continues after product is refreshed. +- Numerous others (see S... [truncated message content] |
From: <ke...@us...> - 2006-06-08 02:30:07
|
Revision: 3149 Author: kevca Date: 2006-06-07 09:02:46 -0700 (Wed, 07 Jun 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3149&view=rev Log Message: ----------- Tagging 2.1-rc5 Added Paths: ----------- MailManager/tags/RELENG_2_1_RC5/ MailManager/tags/RELENG_2_1_RC5/CHANGES.txt MailManager/tags/RELENG_2_1_RC5/migrations/v2_1/__init__.py MailManager/tags/RELENG_2_1_RC5/version.txt MailManager/tags/RELENG_2_1_RC5/www/macros.zpt Removed Paths: ------------- MailManager/tags/RELENG_2_1_RC5/CHANGES.txt MailManager/tags/RELENG_2_1_RC5/migrations/v2_1/__init__.py MailManager/tags/RELENG_2_1_RC5/version.txt MailManager/tags/RELENG_2_1_RC5/www/macros.zpt Copied: MailManager/tags/RELENG_2_1_RC5 (from rev 3146, MailManager/branches/RELENG_2_1) Deleted: MailManager/tags/RELENG_2_1_RC5/CHANGES.txt =================================================================== --- MailManager/branches/RELENG_2_1/CHANGES.txt 2006-06-07 12:05:03 UTC (rev 3146) +++ MailManager/tags/RELENG_2_1_RC5/CHANGES.txt 2006-06-07 16:02:46 UTC (rev 3149) @@ -1,703 +0,0 @@ -Version 2.1-RC5 -* BUG FIXES -- Check for References in addition to In-Reply-To headers (#1501557) -- Create tickets hardcodes Epoz (#1495917) -- Response target defaults to now (#1494223) -- Response targets for accounts are now compulsory (#1494791) -- Blank items in history (#1495097) -- Empty category choice shown on tickets page (#1496041) -- History display garbled for category changes (#1494163) -- Replied tickets are being marked as overdue (#1497428) -- Spam state not respected for new ticket alerts (#1497702) -- Empty queues break ticket display (#1498067) -- Dates not localised consistently in UI (#1494154) -- Formatting broken on templates for HTML (#1477664) - Previous fix invalid -- Problems displaying HTML messages (#1499451) -- Ruleset permissions are too strict (#1499441) -- Invalid utf-8 in from name breaks processing (#1500808) -- Delete tickets does not delete attachments (#1492850) -- Invalid utf-8 data in message-id breaks email processing (#1501609) -- Username limitation is too short (#1501616) -- Adding a queue fails (#1499449) -- Problems deleting tickets (#1492845) -- Replying to a ticket puts it on hold (#1502192) -- On Hold tickets lack actions (#1502194) -- add note no longer updates to field (#1493494) - -Version 2.1-RC4 -* BUG FIXES -- create_tables flag not used correctly (#1490966) -- Changing user to all has no effect (#1490876) -- Cannot view dequeued ticket (#1490915) -- Search always fails with invalid query (#1490871) -- Postgres encoding may still be in native charset (#1490182) -- Timestamps are not formatted correctly (#1484503) -- Incorrect abilities for new accounts (#1492592) -- Migration from 2.0 broken (#1492890) -- No highlight on subtab for ticket type (#1490998) -- Replying to tickets from queue omits To field (#1484499) -- Search results raises an error (#1484495) -- Queued events are not being processed (#1493443) -- Creating new ticket leads to an error (#1493482) -- No Send buttons on Tickets screen (#1493452) -- Overdue status is lost on migration (#1493442) -- Spam is not being processed (#1493596) -- Conflicting security declarations for QueueReportingEngine (#1493607) -- Filters breaking getMail with unicode messages (#1493620) -- AutoLogout not working correctly (#1493641) -- Add Note missing from overdue tickets (#1494173) -- Loop detection code prevents mailmanager mailing mailmanager (#1494827) -- Unicode issue in getmail (#1493483) -- Overdue transitions fail on closed tickets (#1493636) -- Notify user fails with unicode subjects (#1495112) -- Filters do not allow setting of state (#1495442) -- Create ticket can no longer generate email (#1495494) -- HTML messages are not displayed correctly (#1494158) -* BUG FIXES From 2.0.8 to 2.0.9 -- Formatting broken on templates for HTML (#1477664) -- No HTML response for HTML Required (#1472881) -- Selecting No change results in a failure (#1467786) -- Automatic addition of attachments (#1459924) -- UI Allows creation of empty groups (#1486433) -- Importing fails with alternative timezone (#1485389) -* BUG FIXES From 2.0.9 to 2.0.10 -* SECURITY -- Added in fix for potential security issue - Postgres encoding security hole (#1494281) - The code should not be vulnerable to this issue, but additional bugs in - the release may expose the vulnerability. Adding in a patch which will - prevent the exploit in all cases. - -Version 2.1-RC3 -* BUG FIXES -- setHTML raises Unicode error (#1477563) -- Queues page list has white on white (#1477727) -- Mass update selection doesn't work (#1478274) -- Selected colour leads to white on white (#1477724) -- Strings in code missing from i18n (#1482434) -- User abilities are not maintained consistently (#1481211) -- tickets list not finding tickets (#1481221) -- Editing a group to add a user fails (#1481095) -- Unicode usernames cannot be selected (#1478348) -- Add or Edit user breaks with unicode input (#1478345) -- HTML attachments aren't obvious (#1477717) -- Paging on Tickets screen broken (#1460936) -- show HTML is broken (#1477709) -- setSort on 'Queues' view returns 'Tickets' (#1477564) -- Queues page does not have status buttons (#1477689) -- AutoLogout not working correctly (#1477081) -- No strptime on windows (#1476818) -- getMail fails with TypeError (#1476878) -- Export to Excel on Reports (#1460909) -- Empty abilities are not being handled correctly (#1475604) -- History Display Issues (#1460955) -- Adding/Deleting Attachments problems (#1460943) -- Support of: text invisible (#1460915) -- Queue button doesn't highlight (#1460913) -- Performance Reports still contain queue masters (#1475530) -- getMail fails with unicode error (#1475487) -- Default template on accounts (#1464963) -- Setting template should return to template (#1464961) -- Close button not listed (#1464954) -- Restrict incoming emails with cc's to other accts to 1 tckt (#1464959) -- Return to Queue does not return to queues list (#1464947) -- Mass ticket updates not implemented (#1464953) -- Adding a customer fails (#1460922) -- Reports page is broken (#1472976) -* BUG FIXES From 2.0.7 to 2.0.8 -- Non existant refresh value leads to security error (#1466274) -- Cannot create HTML tickets (#1466223) -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.1-RC2 -* FEATURES -- Message loops are now caught based on presence of X-MailManager header -- Migration code improved to fit with the design proposed in the development - documentation -- TID in subject lines is now optional, based on database settings - although no UI pages allow this to be configured -* BUG FIXES -- State (or Status) of Ticket not display (#1455795) -- Issues with New state (#1456222) -- Deleting users via the Settings tab fails (#1456837) -- Deleting an Account with tickets fails (#1459386) -- RNG using too much entropy (#1459353) -- Fixed issue with non-ascii filter condition (#1438720) -- Tabs do not display on MySQL (#1451140) -- addUser page breaks on MySQL (#1451131) -- CookieCrumblerDisabled exception with http auth (#1451109) -- Fixed #1455297 login chews up entropy. Sessions are now not created until - user has successfully supplied a correct username and password combination. - In addition, the amount of entropy used per login has been reduced but can - still be considered secure. Tests have also been updated to reflect this. -* BUG FIXES From 2.0.7 to 2.0.8 -- Direct cycles of support_of are not allowed now. (#1353210) -- Cite last includes only replies now (#1369571) - -Version 2.1-RC1 -* BUG FIXES -- Merged in bugfixes from between 2.0.6 and 2.0.8 (Unreleased) inclusive - as denoted later in this file -- Various CSS Fixes to improve IE compatability -- MySQL compatability fixes -* IMPROVEMENTS -- Queueing Mode -- User abilities added to the database, queue allocation takes these into - consideration -- Named rulesets in the SQL database to allow for future use of multiple - rulesets per MailManager installation -- CookieCrumbler replaced with LoginHandler, allows for login sessions stored - in SQL and timing out of user logins. - -Version 2.1-beta1 -* BUG FIXES -- Merged in bugfixes from between 2.0.1-rc1 and 2.0.5 -- Minor UI fixes (#1322897, #1350233). -* IMPROVEMENTS -- Set the HTTP realm for authentication (so that auth data doesn't clash - between multiple MailManager instances and other Zope applications on the - same server) (#1356498). -- Seems to work OK with Zope 2.8.x (tested with 2.8.5) (#1328206), with the - most recent 3rd party package release. -- Works with PostgreSQL 8.1. - -Version 2.1-alpha2 -* NEW FEATURES -- Basic syndication support (both atom and RSS) of the top 20 unread tickets - for a MailManager instance. -* IMPROVEMENTS -- Tabindex is now being set on all form elements. -- There's now a print stylesheet for all MailManager pages which should hide - the non-salient information. -* BUG FIXES -- FilterSettings page now works (#1328226). -- Now set before the stylesheet is referenced which sometimes - caused the stylesheet not to load (#1328221). -- Create ticket page should now work (#1314741). - -Version 2.1-alpha1 -* IMPROVEMENTS -- Entirely reworked user interface, which: - - Looks exactly the same as it used to! - - Is XHTML 1.0 Strict and CSS 2.1 compliant. - - Should conform to at least priority 1 and probably priority 2 of the - WAI guidelines. - - Should be really easy to skin to make it look different. - - Is vastly tidied up -- Gone from over 8,000 lines of page templates to - just under 5,000! -- Initial modularisation of the reporting engine. - -Version 2.0.8 (Unreleased) -* Unfactored from 2.0.8 -- Create ticket method is highly broken - - Cannot create HTML tickets (#1466223) -- Unicode from addresses break incoming mail (#1440861) -- Valid tags are stripped from HTML on sending (#1460262) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -* BUG FIXES -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Archive and Restore functionality broken (#1452514) -- Encoding Error with signatures (#1440862) -- Non existant refresh value leads to security error (#1466274) -- Changing format away from HTML generates a Zope error (#1460216) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.8 -* BUG FIXES -- Non existant refresh value leads to security error (#1466274) -- Cannot create HTML tickets (#1466223) -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.7 -* BUG FIXES -- Fixed the setting of next ticket id for MySQL, no longer silently ignores - the option on mailmanager creation and fixes migration (#1412787) -- Send and Close, Send Reply, Send and Hold and Add Note have all been - considerably refactored. This resolves the problem reported where outbound - messages had been silently discarded (#1415497) -- getMail could potentially drop incoming messages whilst collecting from - POP3 accounts. This has now been corrected, and a test case now exists - which reproduces the existing problem and demonstrates it being fixed. - (#1422985) -- i18n fix - on the ticket modify screen "closed" is no longer displayed as - "open" when languages other than English are used (#1423422) -* IMPROVEMENTS -- Massive improvements to the test suite. - -Version 2.0.6 -* IMPROVEMENTS -- We're now using html2text (included) instead of stripogram for converting - HTML to its plain text equivalent (when sending out HTML mail, we also - include a plain text alternative for those who can't read HTML messages). - This results in far prettier plain text conversion. -* BUG FIXES -- Notify user/group flags can now be set/cleared correctly on account - preferences (#1404595). -- Improved address validation. Well, it's now a bit more lax, but it's - completely conformant to RFCs 2821 and 2822 (#1396051). -- MySQL: Default categories are now set up at installation (#1392386). -- HTML parts of multipart/alternative messages are now encoded as UTF-8 - rather than, bizarrely, being forced into ISO-8859-1 (#1368283). -- Make sure the user is informed about *why* test data cannot be removed - (#1345788). - -Version 2.0.5 -* BUG FIXES -- MySQL: Users are now migrated correctly (#1378323) -- MySQL: Attachments can now be of virtually any size (#1378224) -- MySQL: MailManager will now start when psycopg is not present (#1378209) -- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) -- PostgreSQL: Migration works even if response target update fails (#1374603) -- Search now works for users in all timezones (#1375345) -- The test data now sets 'routing' on the accounts (#1375764) -- MMImport.py script now uses new URL (#1378385) - -Version 2.0.4 -* BUG FIXES -- Prevent multiple users replying to the same ticket by accident (#1371269) -- Filters got broken in 2.0.3, change reverted (#1372814) -- Attachments now set the Content-Type header correctly on download (#13369349) -- Template names with trailing whitespace now work (#1363768) -- Set sql_charset on the mailmanager object during migration. (#1369347) - -Version 2.0.3 -* BUG FIXES -- Be more careful about adding and removing the test data (#1353112, #1345788). -- Improve the Unicode support with the MySQL back end (#1338614). -- Support of can now be removed with MySQL back end (#1338603). -- Fixes to the response target settings (#1336398, #1337506). -- setSession correctly clears the offset and always redirects to - Tickets (#1350429). -- Offer MySQL back end as a migration option (#1340301). -- Tickets now correctly marked as unread with MySQL back end (#1344827). - -Version 2.0.2 -* BUG FIXES -- Ignore the showHTML information in the session for plain text - emails. Reapplied previous bugfix (#1242337) -- Resetting response target to None now updates database (#1336398) -- Reports for targets fixed (#1337506) -* IMPROVEMENTS -- Now has setupdb script for MySQL users -- Split off setupdb code, now available as separate module -- Added in documentation for MySQL configuration - -Version 2.0.1-release -* BUG FIXES -- Disk usage screen now fixed for empty instances (#1244446) -- Initial Manager use now has correct roles set (#1324878) -- Altering roles now works correctly (#1324876) -- Update of response target now works correctly (#1324935) -- Removing notification flag for users/group now works correctly (#1315000) -- Migration now works correctly for 1.1 instances (#1291113) -- Setting response targets no longer generates an error (#1324884) - -Version 2.0.1-rc2 -* BUG FIXES -- No longer depends on psycopg due to import statements -- Migration fixes for MySQL users -- Fixed some scoping issues causing ZSQL methods to break due to - acquisition. -* IMPROVEMENTS -- SQL Directory no longer uses FileSystemSite.DirectoryView meaning - that the SQL methods can be overridden by 3rd parties. -- Test suite now has added hooks for overloading object types - -Version 2.0.1-rc1 -* BUG FIXES -- Test suite now covers text search cache consistency, cleared issues - with MySQL's mysql_max_allowed_packet variable -- Postgres support now appears stable - -Version 2.0.1-beta1 -* BUG FIXES -- Merged in all of the changes between 2.0r6 and 2.0r7 -- Fixed the index bug which was resulting in duplicate tickets being - displayed on the list page - -Version 2.0.1-alpha1 -* NEW FEATURES -- Adds in initial MySQL support -- SQL methods given addition parameters to deal with new MySQL support -- Vastly improved test suite - regression test suite for the database code. - -Version 2.0r7 -* BUG FIXES -- Subsequent pages for search were not being returned due to misuse of the - SESSION variable. These are now handled correctly (#1276412) -- Categories and templates were moved entirely to SQL. Upgrade needs a - migration to function correctly. (#1276414) -- listTickets method now correctly searches for subjects -- Fixes a Unicode handling error in the MailMixing class, which could - potentially block up incoming mail -* IMPROVEMENTS -- Postgres installation documentation rewritten -- Changes to loading of test datasets -- Test data set improved, now covers more functionality - -Version 2.0r6 -* BUG FIXES -- Fixed the positioning of the order by section of the listTickets query, - fixes broken ordering for search. -- The listCategories SQL method was broken, which was used by the Reports - pages. Reports for categories other than category0 were broken. - -Version 2.0 -* BUG FIXES -- Fix the security declaration of checkPOP3SSL(). - -Version 2.0 RC 3 -* NEW FEATURES -- Introduce some generalisations, ready for MySQL support in 2.0.1 -- Beginnings of epydoc API documentation. -* BUG FIXES -- Update the version number on migration. (#1229769) -- Robustify the autoreply code to deal with fatal errors. (#1240870) -- When a new message comes in with a ticket id in the subject line, - verify that the ticket already exists instead of assuming that it - does. (#1240711) -- Format the email address in the To: field for replies. (#1230837) -- Ignore the showHTML information in the session for plain text - emails. (#1242337) -- Record the logged in user who sent a reply to a ticket. (#1242958) - -Version 2.0 RC 2 -* BUG FIXES -- multipart/alternative mail with both an HTML and a plain text body now - only display one of them at a time (1227265) -- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) -- Migration updates the mm version -- Create ticket works again (1227744) - -Version 2.0 RC 1 -* BUG FIXES -- Stripogram can now be installed as a Python product in site-packages (1226633) -- Reply-To: header is used in favour of From: (1226156) -- Notifiction emails can handle non-ASCII subject lines (1224784) -- URLs are now accurate on notification emails (1224756) -- Character encodings set correctly on all web pages (1224731) -- Send & Close now goes to the next ticket (1224164) -- Improved date parsing (1223755) -- Respond By: now displayed for tickets with a response target (1222528) -- Attachment titles are now decoded correctly (1223974) - -Version 2.0 Beta 2 -* BUG FIXES -- Make the email validation less strict. (1283401) -- Customers can no longer have email addresses which are used - by an account. (1216414) -- Migration: Drop filters which refer to unknown users/groups. (1216361) -- Migration: Be more careful about coercing dates into ISO8601. (1216534) -- Clarified notification email setup. (1217403) -- Fixed Chinese translation. (1215645) -- Store time zone information in the pgsl database. - -Version 2.0 Beta 1 -* NEW FEATURES -- Added a Chinese translation. -- Add some documentation for creating the Postgres database and point to - detailed docs on the Windows installation process. -- Updated the help files to reflect the new version's feature set. -* BUG FIXES -- Make mbox exports have a more meaningful filename. -- Deal with RFC2047-encoded headers correctly. (1212035) -- Make the disk usage a bit more friendly. (1213604) -- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) -- Epoz now has a white background on all browsers. (1208912) - -Version 2.0 alpha 2 -* NEW FEATURES -- Support for retrieving POP3 mail over SSL (RFE 1204236) -- Optionally notify all in a group of new messages (RFE 1208284) -* BUG FIXES -- Help tab no longer visible after logout (1207656) -- Adding a MailManager instance now creates an initial user (1207022) -- Changes to users such as adding a signature no longer clear password (1207017) -- HTML tickets work properly (1205720, 1205717) -- Time to close tickets recorded (1204825) -- Reply to all button improved (1204805) -- Reassignment notification added (1204372) -- Groups redesigned (1204312) -- Adding/removing attachments no longer clears other form fields (1204272) -- Date translations fixed (1204268) -- Templates fixed (1204267) -- Overdue tickets function properly (1203141) -- Performance v. account report fixed (1196685) -- GetMail fixed (1196606) -- Referential integrity broken on mm_message table (1194418) -- Login link on logout page fixed (1204811) -- Signature handling improved (1204877) -- HTML email fixed (1204987) - -Version 2.0 alpha 1 -* NEW FEATURES -- A complete redesign using PostgreSQL as a replacement for the ZODB in order - to improve performance and scalability. -- Can now use SMTP servers that require a login (RFE 939720) - -Version 1.1 -* NEW FEATURES -- Internationalization of the help documentation. -* BUG FIXES -- Make sure that sending mail out is the last thing done, which should reduce - the window where a ConflictError would cause duplicate emails to be sent. -- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other - than a MessageParseError. Otherwise we wind up hard-bouncing (instead of - retrying) on a ConflictError. - -Version 1.1-rc5 -* BUG FIXES -- Comptatible with Zope 2.6/Python 2.1 again - -Version 1.1-rc4 -* BUG FIXES -- Standard attachments fixed (1110435) -- Clear supporter link fixed after i18n problem (1110436) - -Version 1.1-rc3 -* NEW FEATURES -[Unfortunately it was essential to add the following features at - this late stage for commercial reasons.] -- Added archive/restore tickets (RFE 953290) -- Create ticket can now have multiple attachments (RFE 987700) -- Replies can also have multiple attachments (RFE 859141) -- Standard set of attachments can be stored on the system (RFE 985469) -* BUG FIXES -- Edit of mail headers now works properly (RFE 859102) -- Fixed broken migration - -Version 1.1-rc2 -* BUG FIXES -- Now possible to add/edit account without SSL (1090041) -- Spam tickets no longer appear on the 'New' tickets list - -Version 1.1-rc1 -* NEW FEATURES -- Users notified on re-assignment of tickets (RFE 978035) -- Internationalisation (i18n) added ready for translation to other languages. -- Support for SSL connections to remote IMAP server. -- Any mail headers may be used in filters (RFE 859102) -* BUG FIXES -- Report graphs now work for user-defined categories (978404) -- File downloads now work when there is a space in the filename (985150) -- Remove support ticket feature fixed (985677) -- Users no longer notified if spam is received (1059104) -- Spam no longer displayed on default ticket listing views -- Templates with names ending in a space may now be deleted/edited (1003514) - -Version 1.0 -No changes from 1.0-rc2 - -Version 1.0-rc2 -* NEW FEATURES -- Batch classification of tickets. (RFE 859114 and 957719) -* BUG FIXES -- Migration works when filters are of mixed formats. (945956) -- Migration works when groups are of mixed formats. (945959) -- Messages from mailer-daemon with a real name do not cause a loop. (952864) -- Works on Firefox for Mac when reply has no attachment. (963291) -- Report graphs work for more than 200 tickets in a period. (964144) - -Version 1.0-rc1 -* NEW FEATURES -- Choice of date format. (RFE 869827) -- Choice of timezone (currently only on Unix). (RFE 869827) -- Script to import mail from Unix mailboxes. (RFE 903031) -- Shortcut icon. -- Importing of tickets enabled. -* IMPROVEMENTS -- Added global error slot and adjusted settings screens to use it. (873232) -- Message response form fields remembered in request. -- An instance's children may be migrated even when it is not. -* BUG FIXES -- Mail check thread delays till Zope is ready in 2.7 as well. (835642) -- GroupSettings page template works with new-style groups. (887785) -- Problems sending mail caught and reported to the user or logged. (892947) -- Message ID added to outgoing messages. (895039) -- Newlines in the Cc field no longer break the JavaScript. (904033) -- Private notes and replies no longer lose headers in migration. (904076) -- Private notes may no longer have a To field. (912534) -- Ticket ownership transferred when user deleted. (925344) -- Customers are persistent. (930654) -- Sending files with a bad mime type does not cause an exception. (934133) -- HTML templates no longer have extra breaks added. (934235) -- MailManager.getMail() returns an empty string on success. (934902) -- Add customer form checks fields are filled. (938631) -- Fixed links to AccountSettings page. (938678) - -Version 1.0-b4 -* BUG FIX -- Fixed error when a new thread is started and notification is on. - -Version 1.0-b3 -* NEW FEATURES -- Supporter mechanism for associating tickets fully implemented. -- URLs in messages rendered as hyperlinks. -- Filters can assign to groups as well as users. -* IMPROVEMENTS -- Assigned agent mailed at every new message in ticket, customer only - when he starts a new ticket. This reverses the previous behaviour. -- Tickets can be re-opened by arrival of a new message or through - Ticket Details box. -- Migration version distinguished from product version. -- Group now a class; ensures that group members are assigned to evenly. -- By default users only see tickets assigned to them. -- Export (view raw messages) link added to Ticket index page. -* BUG FIXES -- Account signatures are now used. -- HTML setting on auto replies and templates respected. -- Agents can be deleted. -- Several others (see SourceForge bugs 859030 to 873233). - -Version 1.0-b2 -* NEW FEATURES -- Migration -- HTML messages may now be viewed. -- Most recent search results always available. -- Response target added as option in filters and create ticket screen. -* IMPROVEMENTS -- More robust ticket navigation (works with virtual hosting, "prev"/"next" - links always available, "list" goes to batch containing current ticket). -- Improved handling and presentation of attachments. -- Help screens updated (not quite finished). -- Improved interface to reports (still needs work though). -- All character sets displayed correctly (as far as the browser's fonts allow). -- Mail fetching scripts have an option to specify MailManager's URL . -- Search by from name no longer requires exact match. -- Much Python code removed from page templates. -* BUG FIXES -- Overdue ticket view and searches for overdue tickets now work. -- Automatic mail checking continues after product is refreshed. -- Numerous others (see SourceForge bugs 832932 to 858688). - -Version 1.0-b1 -- Dependence on MailHost product removed. -- Message class now wraps Message object from Python email package, - allowing mails to be retreived in their original form. -- Automatic mail fetching introduced. -- Code for creating e-mails through the web brought together in a new - module and handling added for text entered in any character set. -- Each account is now a separate folder, ready for per account - security settings. -- Fetching and handling of incoming mail moved to new Account class. -- Self service interface to allow customers to manage their own tickets. -- Better handling of HTML emails. -- Create ticket now has more sensible defaults. -- Users now deleted properly. -- Calculates an approximation of disk space used. -- Added Property Managers to ease debugging. -- Users with 'Settings' access can no longer view ZMI. -- Numerous bug fixes. - -Version 0.96 -- By default, shows newest tickets first rather than oldest -- The subject of a ticket can now be changed -- If more email is added to a read ticket it goes back to being unread (bold) -- Advises if an attachment is of a dangerous type (for Windows users) -- Attachments now download with original filename & security improved -- Browser bug in IE prevented selection of user on tickets screen (797221) -- Two extra user definable categories added -- Code tidied up & minor bug fixes - -Version 0.95 -- Added a 'Spam' status and amended reports, tickets & filters accordingly -- Can now delete spam tickets without closing them (783289) -- Now handles AppleDouble attachments correctly (787671) -- POP3 mailbox lock removed if there is an error (787677) -- IMAP mailbox lock removed if there is an error -- Mails that can't be processed are now stored raw rather than deleted -- Added 'priority' and 'assigned' to Search screen (785360) -- Basic export of reports to Excel implemented -- Now record and report on times to close as well as times to respond -- Other minor fixes - -Version 0.94 -- Ticket status is displayed correctly in all circumstances -- Adding attachments when creating a ticket thru the web now works as expected. -- Users can be notified of new tickets in all circumstances (783955) -- Allow selection of fields to display on tickets screen (783863) -- Added submenu to the Create ticket screen -- Other minor fixes - -Version 0.93 -- Improved attachment handling and display -- Improved ticket navigation (now back/list/next on ticket view) (780783) -- Fixed a bug in the reporting graphs where the last day in the month could - be missed -- Added an auto refresh option for tickets screen (feature request 781294) -- By default tickets created through the web are assigned to the logged in user, - rather than the first user alphabetically -- Improved outgoing mail -- More advanced standard filter -- Tightened up security -- Help button now context sensitive - -Version 0.92 -- Adding a user with the Reports permission now works as expected (779986) -- Account deletion now works properly (779989) -- Admin password now hidden on the Add MailManager page (779987) - -Thanks to Ronan Amicel for spotting these four bugs. - -- Ticket deletion system improved. -- Supporting tickets system now works better. - -Version 0.91 -- Fixed the Account Help screen. Now displays properly and text is accurate. -- Fixed the 'Change details' section on a ticket screen so the user the ticket - is assigned to is displayed by default. Also ensured user names are displayed - in alphabetical order. -- Categories can now be deleted. Deleted categories will still appear in - Reports, System Settings and on the Search page until every ticket with that - category has been deleted from the system. - -Thanks to Kevin Gill for spotting these bugs. - -Version 0.9 -The first open source release of MailManager. Based on the commercial version -however with some major changes: - -- Uses the Zope Object DB instead of an external relational database. This - changes the performance, it is faster in some areas and slower in others. It - makes the product much easier to install. -- Use of HTML to generate the graphs. Not as attractive as the commercial - version but saves the difficulty of installing extensions which were not - stable on all platforms. -- Improved text editor. Epoz is used to provide rich text editing allowing - easy creation of HTML mail. -- Improved text indexing. Greatly expanded query options. -- Bug fixes. A number of minor bugs were fixed. Copied: MailManager/tags/RELENG_2_1_RC5/CHANGES.txt (from rev 3147, MailManager/branches/RELENG_2_1/CHANGES.txt) =================================================================== --- MailManager/tags/RELENG_2_1_RC5/CHANGES.txt (rev 0) +++ MailManager/tags/RELENG_2_1_RC5/CHANGES.txt 2006-06-07 16:02:46 UTC (rev 3149) @@ -0,0 +1,704 @@ +Version 2.1-RC5 +* BUG FIXES +- Check for References in addition to In-Reply-To headers (#1501557) +- Create tickets hardcodes Epoz (#1495917) +- Response target defaults to now (#1494223) +- Response targets for accounts are now compulsory (#1494791) +- Blank items in history (#1495097) +- Empty category choice shown on tickets page (#1496041) +- History display garbled for category changes (#1494163) +- Replied tickets are being marked as overdue (#1497428) +- Spam state not respected for new ticket alerts (#1497702) +- Empty queues break ticket display (#1498067) +- Dates not localised consistently in UI (#1494154) +- Formatting broken on templates for HTML (#1477664) - Previous fix invalid +- Problems displaying HTML messages (#1499451) +- Ruleset permissions are too strict (#1499441) +- Invalid utf-8 in from name breaks processing (#1500808) +- Delete tickets does not delete attachments (#1492850) +- Invalid utf-8 data in message-id breaks email processing (#1501609) +- Username limitation is too short (#1501616) +- Adding a queue fails (#1499449) +- Problems deleting tickets (#1492845) +- Replying to a ticket puts it on hold (#1502192) +- On Hold tickets lack actions (#1502194) +- add note no longer updates to field (#1493494) +- Queues list shows role user (#1498085) + +Version 2.1-RC4 +* BUG FIXES +- create_tables flag not used correctly (#1490966) +- Changing user to all has no effect (#1490876) +- Cannot view dequeued ticket (#1490915) +- Search always fails with invalid query (#1490871) +- Postgres encoding may still be in native charset (#1490182) +- Timestamps are not formatted correctly (#1484503) +- Incorrect abilities for new accounts (#1492592) +- Migration from 2.0 broken (#1492890) +- No highlight on subtab for ticket type (#1490998) +- Replying to tickets from queue omits To field (#1484499) +- Search results raises an error (#1484495) +- Queued events are not being processed (#1493443) +- Creating new ticket leads to an error (#1493482) +- No Send buttons on Tickets screen (#1493452) +- Overdue status is lost on migration (#1493442) +- Spam is not being processed (#1493596) +- Conflicting security declarations for QueueReportingEngine (#1493607) +- Filters breaking getMail with unicode messages (#1493620) +- AutoLogout not working correctly (#1493641) +- Add Note missing from overdue tickets (#1494173) +- Loop detection code prevents mailmanager mailing mailmanager (#1494827) +- Unicode issue in getmail (#1493483) +- Overdue transitions fail on closed tickets (#1493636) +- Notify user fails with unicode subjects (#1495112) +- Filters do not allow setting of state (#1495442) +- Create ticket can no longer generate email (#1495494) +- HTML messages are not displayed correctly (#1494158) +* BUG FIXES From 2.0.8 to 2.0.9 +- Formatting broken on templates for HTML (#1477664) +- No HTML response for HTML Required (#1472881) +- Selecting No change results in a failure (#1467786) +- Automatic addition of attachments (#1459924) +- UI Allows creation of empty groups (#1486433) +- Importing fails with alternative timezone (#1485389) +* BUG FIXES From 2.0.9 to 2.0.10 +* SECURITY +- Added in fix for potential security issue + Postgres encoding security hole (#1494281) + The code should not be vulnerable to this issue, but additional bugs in + the release may expose the vulnerability. Adding in a patch which will + prevent the exploit in all cases. + +Version 2.1-RC3 +* BUG FIXES +- setHTML raises Unicode error (#1477563) +- Queues page list has white on white (#1477727) +- Mass update selection doesn't work (#1478274) +- Selected colour leads to white on white (#1477724) +- Strings in code missing from i18n (#1482434) +- User abilities are not maintained consistently (#1481211) +- tickets list not finding tickets (#1481221) +- Editing a group to add a user fails (#1481095) +- Unicode usernames cannot be selected (#1478348) +- Add or Edit user breaks with unicode input (#1478345) +- HTML attachments aren't obvious (#1477717) +- Paging on Tickets screen broken (#1460936) +- show HTML is broken (#1477709) +- setSort on 'Queues' view returns 'Tickets' (#1477564) +- Queues page does not have status buttons (#1477689) +- AutoLogout not working correctly (#1477081) +- No strptime on windows (#1476818) +- getMail fails with TypeError (#1476878) +- Export to Excel on Reports (#1460909) +- Empty abilities are not being handled correctly (#1475604) +- History Display Issues (#1460955) +- Adding/Deleting Attachments problems (#1460943) +- Support of: text invisible (#1460915) +- Queue button doesn't highlight (#1460913) +- Performance Reports still contain queue masters (#1475530) +- getMail fails with unicode error (#1475487) +- Default template on accounts (#1464963) +- Setting template should return to template (#1464961) +- Close button not listed (#1464954) +- Restrict incoming emails with cc's to other accts to 1 tckt (#1464959) +- Return to Queue does not return to queues list (#1464947) +- Mass ticket updates not implemented (#1464953) +- Adding a customer fails (#1460922) +- Reports page is broken (#1472976) +* BUG FIXES From 2.0.7 to 2.0.8 +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.1-RC2 +* FEATURES +- Message loops are now caught based on presence of X-MailManager header +- Migration code improved to fit with the design proposed in the development + documentation +- TID in subject lines is now optional, based on database settings + although no UI pages allow this to be configured +* BUG FIXES +- State (or Status) of Ticket not display (#1455795) +- Issues with New state (#1456222) +- Deleting users via the Settings tab fails (#1456837) +- Deleting an Account with tickets fails (#1459386) +- RNG using too much entropy (#1459353) +- Fixed issue with non-ascii filter condition (#1438720) +- Tabs do not display on MySQL (#1451140) +- addUser page breaks on MySQL (#1451131) +- CookieCrumblerDisabled exception with http auth (#1451109) +- Fixed #1455297 login chews up entropy. Sessions are now not created until + user has successfully supplied a correct username and password combination. + In addition, the amount of entropy used per login has been reduced but can + still be considered secure. Tests have also been updated to reflect this. +* BUG FIXES From 2.0.7 to 2.0.8 +- Direct cycles of support_of are not allowed now. (#1353210) +- Cite last includes only replies now (#1369571) + +Version 2.1-RC1 +* BUG FIXES +- Merged in bugfixes from between 2.0.6 and 2.0.8 (Unreleased) inclusive + as denoted later in this file +- Various CSS Fixes to improve IE compatability +- MySQL compatability fixes +* IMPROVEMENTS +- Queueing Mode +- User abilities added to the database, queue allocation takes these into + consideration +- Named rulesets in the SQL database to allow for future use of multiple + rulesets per MailManager installation +- CookieCrumbler replaced with LoginHandler, allows for login sessions stored + in SQL and timing out of user logins. + +Version 2.1-beta1 +* BUG FIXES +- Merged in bugfixes from between 2.0.1-rc1 and 2.0.5 +- Minor UI fixes (#1322897, #1350233). +* IMPROVEMENTS +- Set the HTTP realm for authentication (so that auth data doesn't clash + between multiple MailManager instances and other Zope applications on the + same server) (#1356498). +- Seems to work OK with Zope 2.8.x (tested with 2.8.5) (#1328206), with the + most recent 3rd party package release. +- Works with PostgreSQL 8.1. + +Version 2.1-alpha2 +* NEW FEATURES +- Basic syndication support (both atom and RSS) of the top 20 unread tickets + for a MailManager instance. +* IMPROVEMENTS +- Tabindex is now being set on all form elements. +- There's now a print stylesheet for all MailManager pages which should hide + the non-salient information. +* BUG FIXES +- FilterSettings page now works (#1328226). +- Now set before the stylesheet is referenced which sometimes + caused the stylesheet not to load (#1328221). +- Create ticket page should now work (#1314741). + +Version 2.1-alpha1 +* IMPROVEMENTS +- Entirely reworked user interface, which: + - Looks exactly the same as it used to! + - Is XHTML 1.0 Strict and CSS 2.1 compliant. + - Should conform to at least priority 1 and probably priority 2 of the + WAI guidelines. + - Should be really easy to skin to make it look different. + - Is vastly tidied up -- Gone from over 8,000 lines of page templates to + just under 5,000! +- Initial modularisation of the reporting engine. + +Version 2.0.8 (Unreleased) +* Unfactored from 2.0.8 +- Create ticket method is highly broken + - Cannot create HTML tickets (#1466223) +- Unicode from addresses break incoming mail (#1440861) +- Valid tags are stripped from HTML on sending (#1460262) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +* BUG FIXES +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Archive and Restore functionality broken (#1452514) +- Encoding Error with signatures (#1440862) +- Non existant refresh value leads to security error (#1466274) +- Changing format away from HTML generates a Zope error (#1460216) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.8 +* BUG FIXES +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.7 +* BUG FIXES +- Fixed the setting of next ticket id for MySQL, no longer silently ignores + the option on mailmanager creation and fixes migration (#1412787) +- Send and Close, Send Reply, Send and Hold and Add Note have all been + considerably refactored. This resolves the problem reported where outbound + messages had been silently discarded (#1415497) +- getMail could potentially drop incoming messages whilst collecting from + POP3 accounts. This has now been corrected, and a test case now exists + which reproduces the existing problem and demonstrates it being fixed. + (#1422985) +- i18n fix - on the ticket modify screen "closed" is no longer displayed as + "open" when languages other than English are used (#1423422) +* IMPROVEMENTS +- Massive improvements to the test suite. + +Version 2.0.6 +* IMPROVEMENTS +- We're now using html2text (included) instead of stripogram for converting + HTML to its plain text equivalent (when sending out HTML mail, we also + include a plain text alternative for those who can't read HTML messages). + This results in far prettier plain text conversion. +* BUG FIXES +- Notify user/group flags can now be set/cleared correctly on account + preferences (#1404595). +- Improved address validation. Well, it's now a bit more lax, but it's + completely conformant to RFCs 2821 and 2822 (#1396051). +- MySQL: Default categories are now set up at installation (#1392386). +- HTML parts of multipart/alternative messages are now encoded as UTF-8 + rather than, bizarrely, being forced into ISO-8859-1 (#1368283). +- Make sure the user is informed about *why* test data cannot be removed + (#1345788). + +Version 2.0.5 +* BUG FIXES +- MySQL: Users are now migrated correctly (#1378323) +- MySQL: Attachments can now be of virtually any size (#1378224) +- MySQL: MailManager will now start when psycopg is not present (#1378209) +- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) +- PostgreSQL: Migration works even if response target update fails (#1374603) +- Search now works for users in all timezones (#1375345) +- The test data now sets 'routing' on the accounts (#1375764) +- MMImport.py script now uses new URL (#1378385) + +Version 2.0.4 +* BUG FIXES +- Prevent multiple users replying to the same ticket by accident (#1371269) +- Filters got broken in 2.0.3, change reverted (#1372814) +- Attachments now set the Content-Type header correctly on download (#13369349) +- Template names with trailing whitespace now work (#1363768) +- Set sql_charset on the mailmanager object during migration. (#1369347) + +Version 2.0.3 +* BUG FIXES +- Be more careful about adding and removing the test data (#1353112, #1345788). +- Improve the Unicode support with the MySQL back end (#1338614). +- Support of can now be removed with MySQL back end (#1338603). +- Fixes to the response target settings (#1336398, #1337506). +- setSession correctly clears the offset and always redirects to + Tickets (#1350429). +- Offer MySQL back end as a migration option (#1340301). +- Tickets now correctly marked as unread with MySQL back end (#1344827). + +Version 2.0.2 +* BUG FIXES +- Ignore the showHTML information in the session for plain text + emails. Reapplied previous bugfix (#1242337) +- Resetting response target to None now updates database (#1336398) +- Reports for targets fixed (#1337506) +* IMPROVEMENTS +- Now has setupdb script for MySQL users +- Split off setupdb code, now available as separate module +- Added in documentation for MySQL configuration + +Version 2.0.1-release +* BUG FIXES +- Disk usage screen now fixed for empty instances (#1244446) +- Initial Manager use now has correct roles set (#1324878) +- Altering roles now works correctly (#1324876) +- Update of response target now works correctly (#1324935) +- Removing notification flag for users/group now works correctly (#1315000) +- Migration now works correctly for 1.1 instances (#1291113) +- Setting response targets no longer generates an error (#1324884) + +Version 2.0.1-rc2 +* BUG FIXES +- No longer depends on psycopg due to import statements +- Migration fixes for MySQL users +- Fixed some scoping issues causing ZSQL methods to break due to + acquisition. +* IMPROVEMENTS +- SQL Directory no longer uses FileSystemSite.DirectoryView meaning + that the SQL methods can be overridden by 3rd parties. +- Test suite now has added hooks for overloading object types + +Version 2.0.1-rc1 +* BUG FIXES +- Test suite now covers text search cache consistency, cleared issues + with MySQL's mysql_max_allowed_packet variable +- Postgres support now appears stable + +Version 2.0.1-beta1 +* BUG FIXES +- Merged in all of the changes between 2.0r6 and 2.0r7 +- Fixed the index bug which was resulting in duplicate tickets being + displayed on the list page + +Version 2.0.1-alpha1 +* NEW FEATURES +- Adds in initial MySQL support +- SQL methods given addition parameters to deal with new MySQL support +- Vastly improved test suite - regression test suite for the database code. + +Version 2.0r7 +* BUG FIXES +- Subsequent pages for search were not being returned due to misuse of the + SESSION variable. These are now handled correctly (#1276412) +- Categories and templates were moved entirely to SQL. Upgrade needs a + migration to function correctly. (#1276414) +- listTickets method now correctly searches for subjects +- Fixes a Unicode handling error in the MailMixing class, which could + potentially block up incoming mail +* IMPROVEMENTS +- Postgres installation documentation rewritten +- Changes to loading of test datasets +- Test data set improved, now covers more functionality + +Version 2.0r6 +* BUG FIXES +- Fixed the positioning of the order by section of the listTickets query, + fixes broken ordering for search. +- The listCategories SQL method was broken, which was used by the Reports + pages. Reports for categories other than category0 were broken. + +Version 2.0 +* BUG FIXES +- Fix the security declaration of checkPOP3SSL(). + +Version 2.0 RC 3 +* NEW FEATURES +- Introduce some generalisations, ready for MySQL support in 2.0.1 +- Beginnings of epydoc API documentation. +* BUG FIXES +- Update the version number on migration. (#1229769) +- Robustify the autoreply code to deal with fatal errors. (#1240870) +- When a new message comes in with a ticket id in the subject line, + verify that the ticket already exists instead of assuming that it + does. (#1240711) +- Format the email address in the To: field for replies. (#1230837) +- Ignore the showHTML information in the session for plain text + emails. (#1242337) +- Record the logged in user who sent a reply to a ticket. (#1242958) + +Version 2.0 RC 2 +* BUG FIXES +- multipart/alternative mail with both an HTML and a plain text body now + only display one of them at a time (1227265) +- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) +- Migration updates the mm version +- Create ticket works again (1227744) + +Version 2.0 RC 1 +* BUG FIXES +- Stripogram can now be installed as a Python product in site-packages (1226633) +- Reply-To: header is used in favour of From: (1226156) +- Notifiction emails can handle non-ASCII subject lines (1224784) +- URLs are now accurate on notification emails (1224756) +- Character encodings set correctly on all web pages (1224731) +- Send & Close now goes to the next ticket (1224164) +- Improved date parsing (1223755) +- Respond By: now displayed for tickets with a response target (1222528) +- Attachment titles are now decoded correctly (1223974) + +Version 2.0 Beta 2 +* BUG FIXES +- Make the email validation less strict. (1283401) +- Customers can no longer have email addresses which are used + by an account. (1216414) +- Migration: Drop filters which refer to unknown users/groups. (1216361) +- Migration: Be more careful about coercing dates into ISO8601. (1216534) +- Clarified notification email setup. (1217403) +- Fixed Chinese translation. (1215645) +- Store time zone information in the pgsl database. + +Version 2.0 Beta 1 +* NEW FEATURES +- Added a Chinese translation. +- Add some documentation for creating the Postgres database and point to + detailed docs on the Windows installation process. +- Updated the help files to reflect the new version's feature set. +* BUG FIXES +- Make mbox exports have a more meaningful filename. +- Deal with RFC2047-encoded headers correctly. (1212035) +- Make the disk usage a bit more friendly. (1213604) +- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) +- Epoz now has a white background on all browsers. (1208912) + +Version 2.0 alpha 2 +* NEW FEATURES +- Support for retrieving POP3 mail over SSL (RFE 1204236) +- Optionally notify all in a group of new messages (RFE 1208284) +* BUG FIXES +- Help tab no longer visible after logout (1207656) +- Adding a MailManager instance now creates an initial user (1207022) +- Changes to users such as adding a signature no longer clear password (1207017) +- HTML tickets work properly (1205720, 1205717) +- Time to close tickets recorded (1204825) +- Reply to all button improved (1204805) +- Reassignment notification added (1204372) +- Groups redesigned (1204312) +- Adding/removing attachments no longer clears other form fields (1204272) +- Date translations fixed (1204268) +- Templates fixed (1204267) +- Overdue tickets function properly (1203141) +- Performance v. account report fixed (1196685) +- GetMail fixed (1196606) +- Referential integrity broken on mm_message table (1194418) +- Login link on logout page fixed (1204811) +- Signature handling improved (1204877) +- HTML email fixed (1204987) + +Version 2.0 alpha 1 +* NEW FEATURES +- A complete redesign using PostgreSQL as a replacement for the ZODB in order + to improve performance and scalability. +- Can now use SMTP servers that require a login (RFE 939720) + +Version 1.1 +* NEW FEATURES +- Internationalization of the help documentation. +* BUG FIXES +- Make sure that sending mail out is the last thing done, which should reduce + the window where a ConflictError would cause duplicate emails to be sent. +- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other + than a MessageParseError. Otherwise we wind up hard-bouncing (instead of + retrying) on a ConflictError. + +Version 1.1-rc5 +* BUG FIXES +- Comptatible with Zope 2.6/Python 2.1 again + +Version 1.1-rc4 +* BUG FIXES +- Standard attachments fixed (1110435) +- Clear supporter link fixed after i18n problem (1110436) + +Version 1.1-rc3 +* NEW FEATURES +[Unfortunately it was essential to add the following features at + this late stage for commercial reasons.] +- Added archive/restore tickets (RFE 953290) +- Create ticket can now have multiple attachments (RFE 987700) +- Replies can also have multiple attachments (RFE 859141) +- Standard set of attachments can be stored on the system (RFE 985469) +* BUG FIXES +- Edit of mail headers now works properly (RFE 859102) +- Fixed broken migration + +Version 1.1-rc2 +* BUG FIXES +- Now possible to add/edit account without SSL (1090041) +- Spam tickets no longer appear on the 'New' tickets list + +Version 1.1-rc1 +* NEW FEATURES +- Users notified on re-assignment of tickets (RFE 978035) +- Internationalisation (i18n) added ready for translation to other languages. +- Support for SSL connections to remote IMAP server. +- Any mail headers may be used in filters (RFE 859102) +* BUG FIXES +- Report graphs now work for user-defined categories (978404) +- File downloads now work when there is a space in the filename (985150) +- Remove support ticket feature fixed (985677) +- Users no longer notified if spam is received (1059104) +- Spam no longer displayed on default ticket listing views +- Templates with names ending in a space may now be deleted/edited (1003514) + +Version 1.0 +No changes from 1.0-rc2 + +Version 1.0-rc2 +* NEW FEATURES +- Batch classification of tickets. (RFE 859114 and 957719) +* BUG FIXES +- Migration works when filters are of mixed formats. (945956) +- Migration works when groups are of mixed formats. (945959) +- Messages from mailer-daemon with a real name do not cause a loop. (952864) +- Works on Firefox for Mac when reply has no attachment. (963291) +- Report graphs work for more than 200 tickets in a period. (964144) + +Version 1.0-rc1 +* NEW FEATURES +- Choice of date format. (RFE 869827) +- Choice of timezone (currently only on Unix). (RFE 869827) +- Script to import mail from Unix mailboxes. (RFE 903031) +- Shortcut icon. +- Importing of tickets enabled. +* IMPROVEMENTS +- Added global error slot and adjusted settings screens to use it. (873232) +- Message response form fields remembered in request. +- An instance's children may be migrated even when it is not. +* BUG FIXES +- Mail check thread delays till Zope is ready in 2.7 as well. (835642) +- GroupSettings page template works with new-style groups. (887785) +- Problems sending mail caught and reported to the user or logged. (892947) +- Message ID added to outgoing messages. (895039) +- Newlines in the Cc field no longer break the JavaScript. (904033) +- Private notes and replies no longer lose headers in migration. (904076) +- Private notes may no longer have a To field. (912534) +- Ticket ownership transferred when user deleted. (925344) +- Customers are persistent. (930654) +- Sending files with a bad mime type does not cause an exception. (934133) +- HTML templates no longer have extra breaks added. (934235) +- MailManager.getMail() returns an empty string on success. (934902) +- Add customer form checks fields are filled. (938631) +- Fixed links to AccountSettings page. (938678) + +Version 1.0-b4 +* BUG FIX +- Fixed error when a new thread is started and notification is on. + +Version 1.0-b3 +* NEW FEATURES +- Supporter mechanism for associating tickets fully implemented. +- URLs in messages rendered as hyperlinks. +- Filters can assign to groups as well as users. +* IMPROVEMENTS +- Assigned agent mailed at every new message in ticket, customer only + when he starts a new ticket. This reverses the previous behaviour. +- Tickets can be re-opened by arrival of a new message or through + Ticket Details box. +- Migration version distinguished from product version. +- Group now a class; ensures that group members are assigned to evenly. +- By default users only see tickets assigned to them. +- Export (view raw messages) link added to Ticket index page. +* BUG FIXES +- Account signatures are now used. +- HTML setting on auto replies and templates respected. +- Agents can be deleted. +- Several others (see SourceForge bugs 859030 to 873233). + +Version 1.0-b2 +* NEW FEATURES +- Migration +- HTML messages may now be viewed. +- Most recent search results always available. +- Response target added as option in filters and create ticket screen. +* IMPROVEMENTS +- More robust ticket navigation (works with virtual hosting, "prev"/"next" + links always available, "list" goes to batch containing current ticket). +- Improved handling and presentation of attachments. +- Help screens updated (not quite finished). +- Improved interface to reports (still needs work though). +- All character sets displayed correctly (as far as the browser's fonts allow). +- Mail fetching scripts have an option to specify MailManager's URL . +- Search by from name no longer requires exact match. +- Much Python code removed from page templates. +* BUG FIXES +- Overdue ticket view and searches for overdue tickets now work. +- Automatic mail checking continues after product is refreshed. +- Numerous others (see SourceForge bugs 832932 to 858688). + +Version 1.0-b1 +- Dependence on MailHost product removed. +- Message class now wraps Message object from Python email package, + allowing mails to be retreived in their original form. +-... [truncated message content] |
From: <ke...@us...> - 2006-06-18 13:09:36
|
Revision: 3199 Author: kevca Date: 2006-06-18 06:09:23 -0700 (Sun, 18 Jun 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3199&view=rev Log Message: ----------- Tagging another release for internal testing Modified Paths: -------------- MailManager/tags/RELENG_2_1_RC6_PRE1/docs/development/source/sections/ruleset.xml MailManager/tags/RELENG_2_1_RC6_PRE1/docs/development/source/sections/testing.xml MailManager/tags/RELENG_2_1_RC6_PRE1/docs/development/source/sections/unicode.xml Added Paths: ----------- MailManager/tags/RELENG_2_1_RC6_PRE1/ Copied: MailManager/tags/RELENG_2_1_RC6_PRE1 (from rev 3198, MailManager/branches/RELENG_2_1) Modified: MailManager/tags/RELENG_2_1_RC6_PRE1/docs/development/source/sections/ruleset.xml =================================================================== --- MailManager/branches/RELENG_2_1/docs/development/source/sections/ruleset.xml 2006-06-17 21:00:48 UTC (rev 3198) +++ MailManager/tags/RELENG_2_1_RC6_PRE1/docs/development/source/sections/ruleset.xml 2006-06-18 13:09:23 UTC (rev 3199) @@ -1,4 +1,4 @@ -<!-- $Id:$ --> +<!-- $Id$ --> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" Modified: MailManager/tags/RELENG_2_1_RC6_PRE1/docs/development/source/sections/testing.xml =================================================================== --- MailManager/branches/RELENG_2_1/docs/development/source/sections/testing.xml 2006-06-17 21:00:48 UTC (rev 3198) +++ MailManager/tags/RELENG_2_1_RC6_PRE1/docs/development/source/sections/testing.xml 2006-06-18 13:09:23 UTC (rev 3199) @@ -1,4 +1,4 @@ -<!-- $Id:$ --> +<!-- $Id$ --> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" Modified: MailManager/tags/RELENG_2_1_RC6_PRE1/docs/development/source/sections/unicode.xml =================================================================== --- MailManager/branches/RELENG_2_1/docs/development/source/sections/unicode.xml 2006-06-17 21:00:48 UTC (rev 3198) +++ MailManager/tags/RELENG_2_1_RC6_PRE1/docs/development/source/sections/unicode.xml 2006-06-18 13:09:23 UTC (rev 3199) @@ -1,4 +1,4 @@ -<!-- $Id:$ --> +<!-- $Id$ --> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-06-22 15:56:21
|
Revision: 3220 Author: kevca Date: 2006-06-22 08:55:48 -0700 (Thu, 22 Jun 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3220&view=rev Log Message: ----------- Tagging 2.1-rc5-pre2 Modified Paths: -------------- MailManager/tags/RELENG_2_1_RC6_PRE2/docs/development/source/sections/ruleset.xml MailManager/tags/RELENG_2_1_RC6_PRE2/docs/development/source/sections/testing.xml MailManager/tags/RELENG_2_1_RC6_PRE2/docs/development/source/sections/unicode.xml Added Paths: ----------- MailManager/tags/RELENG_2_1_RC6_PRE2/ MailManager/tags/RELENG_2_1_RC6_PRE2/CHANGES.txt MailManager/tags/RELENG_2_1_RC6_PRE2/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_1_RC6_PRE2/MailManager.py MailManager/tags/RELENG_2_1_RC6_PRE2/support/setupdb.py MailManager/tags/RELENG_2_1_RC6_PRE2/tests/classes/testStructures.py MailManager/tags/RELENG_2_1_RC6_PRE2/tests/testsuite.conf.sample MailManager/tags/RELENG_2_1_RC6_PRE2/version.txt MailManager/tags/RELENG_2_1_RC6_PRE2/www/ticket_index_html.zpt Removed Paths: ------------- MailManager/tags/RELENG_2_1_RC6_PRE2/CHANGES.txt MailManager/tags/RELENG_2_1_RC6_PRE2/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_1_RC6_PRE2/MailManager.py MailManager/tags/RELENG_2_1_RC6_PRE2/support/setupdb.py MailManager/tags/RELENG_2_1_RC6_PRE2/tests/classes/testStructures.py MailManager/tags/RELENG_2_1_RC6_PRE2/tests/testsuite.conf.sample MailManager/tags/RELENG_2_1_RC6_PRE2/version.txt MailManager/tags/RELENG_2_1_RC6_PRE2/www/ticket_index_html.zpt Copied: MailManager/tags/RELENG_2_1_RC6_PRE2 (from rev 3211, MailManager/branches/RELENG_2_1) Deleted: MailManager/tags/RELENG_2_1_RC6_PRE2/CHANGES.txt =================================================================== --- MailManager/branches/RELENG_2_1/CHANGES.txt 2006-06-20 15:11:46 UTC (rev 3211) +++ MailManager/tags/RELENG_2_1_RC6_PRE2/CHANGES.txt 2006-06-22 15:55:48 UTC (rev 3220) @@ -1,715 +0,0 @@ -Version 2.1-RC6 -* BUG FIXES -- Date Parsing Error in logs (#1504722) -- Repeat of partial fix for Problems deleting tickets (#1492845) -- Repeat of partial fix for Username limitation is too short (#1501616) -- Double spaces break templates (#1505367) -- Unicode filenames in attachments break viewing (#1505895) -- Expired logouts cause issues (#1502271) -- Migration broken from 2.0 (#1506535) -- Windows support is broken (#1509270) - -Version 2.1-RC5 -* BUG FIXES -- Check for References in addition to In-Reply-To headers (#1501557) -- Create tickets hardcodes Epoz (#1495917) -- Response target defaults to now (#1494223) -- Response targets for accounts are now compulsory (#1494791) -- Blank items in history (#1495097) -- Empty category choice shown on tickets page (#1496041) -- History display garbled for category changes (#1494163) -- Replied tickets are being marked as overdue (#1497428) -- Spam state not respected for new ticket alerts (#1497702) -- Empty queues break ticket display (#1498067) -- Dates not localised consistently in UI (#1494154) -- Formatting broken on templates for HTML (#1477664) - Previous fix invalid -- Problems displaying HTML messages (#1499451) -- Ruleset permissions are too strict (#1499441) -- Invalid utf-8 in from name breaks processing (#1500808) -- Delete tickets does not delete attachments (#1492850) -- Invalid utf-8 data in message-id breaks email processing (#1501609) -- Username limitation is too short (#1501616) -- Adding a queue fails (#1499449) -- Problems deleting tickets (#1492845) -- Replying to a ticket puts it on hold (#1502192) -- On Hold tickets lack actions (#1502194) -- add note no longer updates to field (#1493494) -- Queues list shows role user (#1498085) - -Version 2.1-RC4 -* BUG FIXES -- create_tables flag not used correctly (#1490966) -- Changing user to all has no effect (#1490876) -- Cannot view dequeued ticket (#1490915) -- Search always fails with invalid query (#1490871) -- Postgres encoding may still be in native charset (#1490182) -- Timestamps are not formatted correctly (#1484503) -- Incorrect abilities for new accounts (#1492592) -- Migration from 2.0 broken (#1492890) -- No highlight on subtab for ticket type (#1490998) -- Replying to tickets from queue omits To field (#1484499) -- Search results raises an error (#1484495) -- Queued events are not being processed (#1493443) -- Creating new ticket leads to an error (#1493482) -- No Send buttons on Tickets screen (#1493452) -- Overdue status is lost on migration (#1493442) -- Spam is not being processed (#1493596) -- Conflicting security declarations for QueueReportingEngine (#1493607) -- Filters breaking getMail with unicode messages (#1493620) -- AutoLogout not working correctly (#1493641) -- Add Note missing from overdue tickets (#1494173) -- Loop detection code prevents mailmanager mailing mailmanager (#1494827) -- Unicode issue in getmail (#1493483) -- Overdue transitions fail on closed tickets (#1493636) -- Notify user fails with unicode subjects (#1495112) -- Filters do not allow setting of state (#1495442) -- Create ticket can no longer generate email (#1495494) -- HTML messages are not displayed correctly (#1494158) -* BUG FIXES From 2.0.8 to 2.0.9 -- Formatting broken on templates for HTML (#1477664) -- No HTML response for HTML Required (#1472881) -- Selecting No change results in a failure (#1467786) -- Automatic addition of attachments (#1459924) -- UI Allows creation of empty groups (#1486433) -- Importing fails with alternative timezone (#1485389) -* BUG FIXES From 2.0.9 to 2.0.10 -* SECURITY -- Added in fix for potential security issue - Postgres encoding security hole (#1494281) - The code should not be vulnerable to this issue, but additional bugs in - the release may expose the vulnerability. Adding in a patch which will - prevent the exploit in all cases. - -Version 2.1-RC3 -* BUG FIXES -- setHTML raises Unicode error (#1477563) -- Queues page list has white on white (#1477727) -- Mass update selection doesn't work (#1478274) -- Selected colour leads to white on white (#1477724) -- Strings in code missing from i18n (#1482434) -- User abilities are not maintained consistently (#1481211) -- tickets list not finding tickets (#1481221) -- Editing a group to add a user fails (#1481095) -- Unicode usernames cannot be selected (#1478348) -- Add or Edit user breaks with unicode input (#1478345) -- HTML attachments aren't obvious (#1477717) -- Paging on Tickets screen broken (#1460936) -- show HTML is broken (#1477709) -- setSort on 'Queues' view returns 'Tickets' (#1477564) -- Queues page does not have status buttons (#1477689) -- AutoLogout not working correctly (#1477081) -- No strptime on windows (#1476818) -- getMail fails with TypeError (#1476878) -- Export to Excel on Reports (#1460909) -- Empty abilities are not being handled correctly (#1475604) -- History Display Issues (#1460955) -- Adding/Deleting Attachments problems (#1460943) -- Support of: text invisible (#1460915) -- Queue button doesn't highlight (#1460913) -- Performance Reports still contain queue masters (#1475530) -- getMail fails with unicode error (#1475487) -- Default template on accounts (#1464963) -- Setting template should return to template (#1464961) -- Close button not listed (#1464954) -- Restrict incoming emails with cc's to other accts to 1 tckt (#1464959) -- Return to Queue does not return to queues list (#1464947) -- Mass ticket updates not implemented (#1464953) -- Adding a customer fails (#1460922) -- Reports page is broken (#1472976) -* BUG FIXES From 2.0.7 to 2.0.8 -- Non existant refresh value leads to security error (#1466274) -- Cannot create HTML tickets (#1466223) -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.1-RC2 -* FEATURES -- Message loops are now caught based on presence of X-MailManager header -- Migration code improved to fit with the design proposed in the development - documentation -- TID in subject lines is now optional, based on database settings - although no UI pages allow this to be configured -* BUG FIXES -- State (or Status) of Ticket not display (#1455795) -- Issues with New state (#1456222) -- Deleting users via the Settings tab fails (#1456837) -- Deleting an Account with tickets fails (#1459386) -- RNG using too much entropy (#1459353) -- Fixed issue with non-ascii filter condition (#1438720) -- Tabs do not display on MySQL (#1451140) -- addUser page breaks on MySQL (#1451131) -- CookieCrumblerDisabled exception with http auth (#1451109) -- Fixed #1455297 login chews up entropy. Sessions are now not created until - user has successfully supplied a correct username and password combination. - In addition, the amount of entropy used per login has been reduced but can - still be considered secure. Tests have also been updated to reflect this. -* BUG FIXES From 2.0.7 to 2.0.8 -- Direct cycles of support_of are not allowed now. (#1353210) -- Cite last includes only replies now (#1369571) - -Version 2.1-RC1 -* BUG FIXES -- Merged in bugfixes from between 2.0.6 and 2.0.8 (Unreleased) inclusive - as denoted later in this file -- Various CSS Fixes to improve IE compatability -- MySQL compatability fixes -* IMPROVEMENTS -- Queueing Mode -- User abilities added to the database, queue allocation takes these into - consideration -- Named rulesets in the SQL database to allow for future use of multiple - rulesets per MailManager installation -- CookieCrumbler replaced with LoginHandler, allows for login sessions stored - in SQL and timing out of user logins. - -Version 2.1-beta1 -* BUG FIXES -- Merged in bugfixes from between 2.0.1-rc1 and 2.0.5 -- Minor UI fixes (#1322897, #1350233). -* IMPROVEMENTS -- Set the HTTP realm for authentication (so that auth data doesn't clash - between multiple MailManager instances and other Zope applications on the - same server) (#1356498). -- Seems to work OK with Zope 2.8.x (tested with 2.8.5) (#1328206), with the - most recent 3rd party package release. -- Works with PostgreSQL 8.1. - -Version 2.1-alpha2 -* NEW FEATURES -- Basic syndication support (both atom and RSS) of the top 20 unread tickets - for a MailManager instance. -* IMPROVEMENTS -- Tabindex is now being set on all form elements. -- There's now a print stylesheet for all MailManager pages which should hide - the non-salient information. -* BUG FIXES -- FilterSettings page now works (#1328226). -- Now set before the stylesheet is referenced which sometimes - caused the stylesheet not to load (#1328221). -- Create ticket page should now work (#1314741). - -Version 2.1-alpha1 -* IMPROVEMENTS -- Entirely reworked user interface, which: - - Looks exactly the same as it used to! - - Is XHTML 1.0 Strict and CSS 2.1 compliant. - - Should conform to at least priority 1 and probably priority 2 of the - WAI guidelines. - - Should be really easy to skin to make it look different. - - Is vastly tidied up -- Gone from over 8,000 lines of page templates to - just under 5,000! -- Initial modularisation of the reporting engine. - -Version 2.0.8 (Unreleased) -* Unfactored from 2.0.8 -- Create ticket method is highly broken - - Cannot create HTML tickets (#1466223) -- Unicode from addresses break incoming mail (#1440861) -- Valid tags are stripped from HTML on sending (#1460262) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -* BUG FIXES -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Archive and Restore functionality broken (#1452514) -- Encoding Error with signatures (#1440862) -- Non existant refresh value leads to security error (#1466274) -- Changing format away from HTML generates a Zope error (#1460216) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.8 -* BUG FIXES -- Non existant refresh value leads to security error (#1466274) -- Cannot create HTML tickets (#1466223) -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.7 -* BUG FIXES -- Fixed the setting of next ticket id for MySQL, no longer silently ignores - the option on mailmanager creation and fixes migration (#1412787) -- Send and Close, Send Reply, Send and Hold and Add Note have all been - considerably refactored. This resolves the problem reported where outbound - messages had been silently discarded (#1415497) -- getMail could potentially drop incoming messages whilst collecting from - POP3 accounts. This has now been corrected, and a test case now exists - which reproduces the existing problem and demonstrates it being fixed. - (#1422985) -- i18n fix - on the ticket modify screen "closed" is no longer displayed as - "open" when languages other than English are used (#1423422) -* IMPROVEMENTS -- Massive improvements to the test suite. - -Version 2.0.6 -* IMPROVEMENTS -- We're now using html2text (included) instead of stripogram for converting - HTML to its plain text equivalent (when sending out HTML mail, we also - include a plain text alternative for those who can't read HTML messages). - This results in far prettier plain text conversion. -* BUG FIXES -- Notify user/group flags can now be set/cleared correctly on account - preferences (#1404595). -- Improved address validation. Well, it's now a bit more lax, but it's - completely conformant to RFCs 2821 and 2822 (#1396051). -- MySQL: Default categories are now set up at installation (#1392386). -- HTML parts of multipart/alternative messages are now encoded as UTF-8 - rather than, bizarrely, being forced into ISO-8859-1 (#1368283). -- Make sure the user is informed about *why* test data cannot be removed - (#1345788). - -Version 2.0.5 -* BUG FIXES -- MySQL: Users are now migrated correctly (#1378323) -- MySQL: Attachments can now be of virtually any size (#1378224) -- MySQL: MailManager will now start when psycopg is not present (#1378209) -- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) -- PostgreSQL: Migration works even if response target update fails (#1374603) -- Search now works for users in all timezones (#1375345) -- The test data now sets 'routing' on the accounts (#1375764) -- MMImport.py script now uses new URL (#1378385) - -Version 2.0.4 -* BUG FIXES -- Prevent multiple users replying to the same ticket by accident (#1371269) -- Filters got broken in 2.0.3, change reverted (#1372814) -- Attachments now set the Content-Type header correctly on download (#13369349) -- Template names with trailing whitespace now work (#1363768) -- Set sql_charset on the mailmanager object during migration. (#1369347) - -Version 2.0.3 -* BUG FIXES -- Be more careful about adding and removing the test data (#1353112, #1345788). -- Improve the Unicode support with the MySQL back end (#1338614). -- Support of can now be removed with MySQL back end (#1338603). -- Fixes to the response target settings (#1336398, #1337506). -- setSession correctly clears the offset and always redirects to - Tickets (#1350429). -- Offer MySQL back end as a migration option (#1340301). -- Tickets now correctly marked as unread with MySQL back end (#1344827). - -Version 2.0.2 -* BUG FIXES -- Ignore the showHTML information in the session for plain text - emails. Reapplied previous bugfix (#1242337) -- Resetting response target to None now updates database (#1336398) -- Reports for targets fixed (#1337506) -* IMPROVEMENTS -- Now has setupdb script for MySQL users -- Split off setupdb code, now available as separate module -- Added in documentation for MySQL configuration - -Version 2.0.1-release -* BUG FIXES -- Disk usage screen now fixed for empty instances (#1244446) -- Initial Manager use now has correct roles set (#1324878) -- Altering roles now works correctly (#1324876) -- Update of response target now works correctly (#1324935) -- Removing notification flag for users/group now works correctly (#1315000) -- Migration now works correctly for 1.1 instances (#1291113) -- Setting response targets no longer generates an error (#1324884) - -Version 2.0.1-rc2 -* BUG FIXES -- No longer depends on psycopg due to import statements -- Migration fixes for MySQL users -- Fixed some scoping issues causing ZSQL methods to break due to - acquisition. -* IMPROVEMENTS -- SQL Directory no longer uses FileSystemSite.DirectoryView meaning - that the SQL methods can be overridden by 3rd parties. -- Test suite now has added hooks for overloading object types - -Version 2.0.1-rc1 -* BUG FIXES -- Test suite now covers text search cache consistency, cleared issues - with MySQL's mysql_max_allowed_packet variable -- Postgres support now appears stable - -Version 2.0.1-beta1 -* BUG FIXES -- Merged in all of the changes between 2.0r6 and 2.0r7 -- Fixed the index bug which was resulting in duplicate tickets being - displayed on the list page - -Version 2.0.1-alpha1 -* NEW FEATURES -- Adds in initial MySQL support -- SQL methods given addition parameters to deal with new MySQL support -- Vastly improved test suite - regression test suite for the database code. - -Version 2.0r7 -* BUG FIXES -- Subsequent pages for search were not being returned due to misuse of the - SESSION variable. These are now handled correctly (#1276412) -- Categories and templates were moved entirely to SQL. Upgrade needs a - migration to function correctly. (#1276414) -- listTickets method now correctly searches for subjects -- Fixes a Unicode handling error in the MailMixing class, which could - potentially block up incoming mail -* IMPROVEMENTS -- Postgres installation documentation rewritten -- Changes to loading of test datasets -- Test data set improved, now covers more functionality - -Version 2.0r6 -* BUG FIXES -- Fixed the positioning of the order by section of the listTickets query, - fixes broken ordering for search. -- The listCategories SQL method was broken, which was used by the Reports - pages. Reports for categories other than category0 were broken. - -Version 2.0 -* BUG FIXES -- Fix the security declaration of checkPOP3SSL(). - -Version 2.0 RC 3 -* NEW FEATURES -- Introduce some generalisations, ready for MySQL support in 2.0.1 -- Beginnings of epydoc API documentation. -* BUG FIXES -- Update the version number on migration. (#1229769) -- Robustify the autoreply code to deal with fatal errors. (#1240870) -- When a new message comes in with a ticket id in the subject line, - verify that the ticket already exists instead of assuming that it - does. (#1240711) -- Format the email address in the To: field for replies. (#1230837) -- Ignore the showHTML information in the session for plain text - emails. (#1242337) -- Record the logged in user who sent a reply to a ticket. (#1242958) - -Version 2.0 RC 2 -* BUG FIXES -- multipart/alternative mail with both an HTML and a plain text body now - only display one of them at a time (1227265) -- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) -- Migration updates the mm version -- Create ticket works again (1227744) - -Version 2.0 RC 1 -* BUG FIXES -- Stripogram can now be installed as a Python product in site-packages (1226633) -- Reply-To: header is used in favour of From: (1226156) -- Notifiction emails can handle non-ASCII subject lines (1224784) -- URLs are now accurate on notification emails (1224756) -- Character encodings set correctly on all web pages (1224731) -- Send & Close now goes to the next ticket (1224164) -- Improved date parsing (1223755) -- Respond By: now displayed for tickets with a response target (1222528) -- Attachment titles are now decoded correctly (1223974) - -Version 2.0 Beta 2 -* BUG FIXES -- Make the email validation less strict. (1283401) -- Customers can no longer have email addresses which are used - by an account. (1216414) -- Migration: Drop filters which refer to unknown users/groups. (1216361) -- Migration: Be more careful about coercing dates into ISO8601. (1216534) -- Clarified notification email setup. (1217403) -- Fixed Chinese translation. (1215645) -- Store time zone information in the pgsl database. - -Version 2.0 Beta 1 -* NEW FEATURES -- Added a Chinese translation. -- Add some documentation for creating the Postgres database and point to - detailed docs on the Windows installation process. -- Updated the help files to reflect the new version's feature set. -* BUG FIXES -- Make mbox exports have a more meaningful filename. -- Deal with RFC2047-encoded headers correctly. (1212035) -- Make the disk usage a bit more friendly. (1213604) -- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) -- Epoz now has a white background on all browsers. (1208912) - -Version 2.0 alpha 2 -* NEW FEATURES -- Support for retrieving POP3 mail over SSL (RFE 1204236) -- Optionally notify all in a group of new messages (RFE 1208284) -* BUG FIXES -- Help tab no longer visible after logout (1207656) -- Adding a MailManager instance now creates an initial user (1207022) -- Changes to users such as adding a signature no longer clear password (1207017) -- HTML tickets work properly (1205720, 1205717) -- Time to close tickets recorded (1204825) -- Reply to all button improved (1204805) -- Reassignment notification added (1204372) -- Groups redesigned (1204312) -- Adding/removing attachments no longer clears other form fields (1204272) -- Date translations fixed (1204268) -- Templates fixed (1204267) -- Overdue tickets function properly (1203141) -- Performance v. account report fixed (1196685) -- GetMail fixed (1196606) -- Referential integrity broken on mm_message table (1194418) -- Login link on logout page fixed (1204811) -- Signature handling improved (1204877) -- HTML email fixed (1204987) - -Version 2.0 alpha 1 -* NEW FEATURES -- A complete redesign using PostgreSQL as a replacement for the ZODB in order - to improve performance and scalability. -- Can now use SMTP servers that require a login (RFE 939720) - -Version 1.1 -* NEW FEATURES -- Internationalization of the help documentation. -* BUG FIXES -- Make sure that sending mail out is the last thing done, which should reduce - the window where a ConflictError would cause duplicate emails to be sent. -- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other - than a MessageParseError. Otherwise we wind up hard-bouncing (instead of - retrying) on a ConflictError. - -Version 1.1-rc5 -* BUG FIXES -- Comptatible with Zope 2.6/Python 2.1 again - -Version 1.1-rc4 -* BUG FIXES -- Standard attachments fixed (1110435) -- Clear supporter link fixed after i18n problem (1110436) - -Version 1.1-rc3 -* NEW FEATURES -[Unfortunately it was essential to add the following features at - this late stage for commercial reasons.] -- Added archive/restore tickets (RFE 953290) -- Create ticket can now have multiple attachments (RFE 987700) -- Replies can also have multiple attachments (RFE 859141) -- Standard set of attachments can be stored on the system (RFE 985469) -* BUG FIXES -- Edit of mail headers now works properly (RFE 859102) -- Fixed broken migration - -Version 1.1-rc2 -* BUG FIXES -- Now possible to add/edit account without SSL (1090041) -- Spam tickets no longer appear on the 'New' tickets list - -Version 1.1-rc1 -* NEW FEATURES -- Users notified on re-assignment of tickets (RFE 978035) -- Internationalisation (i18n) added ready for translation to other languages. -- Support for SSL connections to remote IMAP server. -- Any mail headers may be used in filters (RFE 859102) -* BUG FIXES -- Report graphs now work for user-defined categories (978404) -- File downloads now work when there is a space in the filename (985150) -- Remove support ticket feature fixed (985677) -- Users no longer notified if spam is received (1059104) -- Spam no longer displayed on default ticket listing views -- Templates with names ending in a space may now be deleted/edited (1003514) - -Version 1.0 -No changes from 1.0-rc2 - -Version 1.0-rc2 -* NEW FEATURES -- Batch classification of tickets. (RFE 859114 and 957719) -* BUG FIXES -- Migration works when filters are of mixed formats. (945956) -- Migration works when groups are of mixed formats. (945959) -- Messages from mailer-daemon with a real name do not cause a loop. (952864) -- Works on Firefox for Mac when reply has no attachment. (963291) -- Report graphs work for more than 200 tickets in a period. (964144) - -Version 1.0-rc1 -* NEW FEATURES -- Choice of date format. (RFE 869827) -- Choice of timezone (currently only on Unix). (RFE 869827) -- Script to import mail from Unix mailboxes. (RFE 903031) -- Shortcut icon. -- Importing of tickets enabled. -* IMPROVEMENTS -- Added global error slot and adjusted settings screens to use it. (873232) -- Message response form fields remembered in request. -- An instance's children may be migrated even when it is not. -* BUG FIXES -- Mail check thread delays till Zope is ready in 2.7 as well. (835642) -- GroupSettings page template works with new-style groups. (887785) -- Problems sending mail caught and reported to the user or logged. (892947) -- Message ID added to outgoing messages. (895039) -- Newlines in the Cc field no longer break the JavaScript. (904033) -- Private notes and replies no longer lose headers in migration. (904076) -- Private notes may no longer have a To field. (912534) -- Ticket ownership transferred when user deleted. (925344) -- Customers are persistent. (930654) -- Sending files with a bad mime type does not cause an exception. (934133) -- HTML templates no longer have extra breaks added. (934235) -- MailManager.getMail() returns an empty string on success. (934902) -- Add customer form checks fields are filled. (938631) -- Fixed links to AccountSettings page. (938678) - -Version 1.0-b4 -* BUG FIX -- Fixed error when a new thread is started and notification is on. - -Version 1.0-b3 -* NEW FEATURES -- Supporter mechanism for associating tickets fully implemented. -- URLs in messages rendered as hyperlinks. -- Filters can assign to groups as well as users. -* IMPROVEMENTS -- Assigned agent mailed at every new message in ticket, customer only - when he starts a new ticket. This reverses the previous behaviour. -- Tickets can be re-opened by arrival of a new message or through - Ticket Details box. -- Migration version distinguished from product version. -- Group now a class; ensures that group members are assigned to evenly. -- By default users only see tickets assigned to them. -- Export (view raw messages) link added to Ticket index page. -* BUG FIXES -- Account signatures are now used. -- HTML setting on auto replies and templates respected. -- Agents can be deleted. -- Several others (see SourceForge bugs 859030 to 873233). - -Version 1.0-b2 -* NEW FEATURES -- Migration -- HTML messages may now be viewed. -- Most recent search results always available. -- Response target added as option in filters and create ticket screen. -* IMPROVEMENTS -- More robust ticket navigation (works with virtual hosting, "prev"/"next" - links always available, "list" goes to batch containing current ticket). -- Improved handling and presentation of attachments. -- Help screens updated (not quite finished). -- Improved interface to reports (still needs work though). -- All character sets displayed correctly (as far as the browser's fonts allow). -- Mail fetching scripts have an option to specify MailManager's URL . -- Search by from name no longer requires exact match. -- Much Python code removed from page templates. -* BUG FIXES -- Overdue ticket view and searches for overdue tickets now work. -- Automatic mail checking continues after product is refreshed. -- Numerous others (see SourceForge bugs 832932 to 858688). - -Version 1.0-b1 -- Dependence on MailHost product removed. -- Message class now wraps Message object from Python email package, - allowing mails to be retreived in their original form. -- Automatic mail fetching introduced. -- Code for creating e-mails through the web brought together in a new - module and handling added for text entered in any character set. -- Each account is now a separate folder, ready for per account - security settings. -- Fetching and handling of incoming mail moved to new Account class. -- Self service interface to allow customers to manage their own tickets. -- Better handling of HTML emails. -- Create ticket now has more sensible defaults. -- Users now deleted properly. -- Calculates an approximation of disk space used. -- Added Property Managers to ease debugging. -- Users with 'Settings' access can no longer view ZMI. -- Numerous bug fixes. - -Version 0.96 -- By default, shows newest tickets first rather than oldest -- The subject of a ticket can now be changed -- If more email is added to a read ticket it goes back to being unread (bold) -- Advises if an attachment is of a dangerous type (for Windows users) -- Attachments now download with original filename & security improved -- Browser bug in IE prevented selection of user on tickets screen (797221) -- Two extra user definable categories added -- Code tidied up & minor bug fixes - -Version 0.95 -- Added a 'Spam' status and amended reports, tickets & filters accordingly -- Can now delete spam tickets without closing them (783289) -- Now handles AppleDouble attachments correctly (787671) -- POP3 mailbox lock removed if there is an error (787677) -- IMAP mailbox lock removed if there is an error -- Mails that can't be processed are now stored raw rather than deleted -- Added 'priority' and 'assigned' to Search screen (785360) -- Basic export of reports to Excel implemented -- Now record and report on times to close as well as times to respond -- Other minor fixes - -Version 0.94 -- Ticket status is displayed correctly in all circumstances -- Adding attachments when creating a ticket thru the web now works as expected. -- Users can be notified of new tickets in all circumstances (783955) -- Allow selection of fields to display on tickets screen (783863) -- Added submenu to the Create ticket screen -- Other minor fixes - -Version 0.93 -- Improved attachment handling and display -- Improved ticket navigation (now back/list/next on ticket view) (780783) -- Fixed a bug in the reporting graphs where the last day in the month could - be missed -- Added an auto refresh option for tickets screen (feature request 781294) -- By default tickets created through the web are assigned to the logged in user, - rather than the first user alphabetically -- Improved outgoing mail -- More advanced standard filter -- Tightened up security -- Help button now context sensitive - -Version 0.92 -- Adding a user with the Reports permission now works as expected (779986) -- Account deletion now works properly (779989) -- Admin password now hidden on the Add MailManager page (779987) - -Thanks to Ronan Amicel for spotting these four bugs. - -- Ticket deletion system improved. -- Supporting tickets system now works better. - -Version 0.91 -- Fixed the Account Help screen. Now displays properly and text is accurate. -- Fixed the 'Change details' section on a ticket screen so the user the ticket - is assigned to is displayed by default. Also ensured user names are displayed - in alphabetical order. -- Categories can now be deleted. Deleted categories will still appear in - Reports, System Settings and on the Search page until every ticket with that - category has been deleted from the system. - -Thanks to Kevin Gill for spotting these bugs. - -Version 0.9 -The first open source release of MailManager. Based on the commercial version -however with some major changes: - -- Uses the Zope Object DB instead of an external relational database. This - changes the performance, it is faster in some areas and slower in others. It - makes the product much easier to install. -- Use of HTML to generate the graphs. Not as attractive as the commercial - version but saves the difficulty of installing extensions which were not - stable on all platforms. -- Improved text editor. Epoz is used to provide rich text editing allowing - easy creation of HTML mail. -- Improved text indexing. Greatly expanded query options. -- Bug fixes. A number of minor bugs were fixed. Copied: MailManager/tags/RELENG_2_1_RC6_PRE2/CHANGES.txt (from rev 3213, MailManager/branches/RELENG_2_1/CHANGES.txt) =================================================================== --- MailManager/tags/RELENG_2_1_RC6_PRE2/CHANGES.txt (rev 0) +++ MailManager/tags/RELENG_2_1_RC6_PRE2/CHANGES.txt 2006-06-22 15:55:48 UTC (rev 3220) @@ -0,0 +1,716 @@ +Version 2.1-RC6 +* BUG FIXES +- Date Parsing Error in logs (#1504722) +- Repeat of partial fix for Problems deleting tickets (#1492845) +- Repeat of partial fix for Username limitation is too short (#1501616) +- Double spaces break templates (#1505367) +- Unicode filenames in attachments break viewing (#1505895) +- Expired logouts cause issues (#1502271) +- Migration broken from 2.0 (#1506535) +- Windows support is broken (#1509270) +- Reply addresses are quoted incorrectly (#1510507) + +Version 2.1-RC5 +* BUG FIXES +- Check for References in addition to In-Reply-To headers (#1501557) +- Create tickets hardcodes Epoz (#1495917) +- Response target defaults to now (#1494223) +- Response targets for accounts are now compulsory (#1494791) +- Blank items in history (#1495097) +- Empty category choice shown on tickets page (#1496041) +- History display garbled for category changes (#1494163) +- Replied tickets are being marked as overdue (#1497428) +- Spam state not respected for new ticket alerts (#1497702) +- Empty queues break ticket display (#1498067) +- Dates not localised consistently in UI (#1494154) +- Formatting broken on templates for HTML (#1477664) - Previous fix invalid +- Problems displaying HTML messages (#1499451) +- Ruleset permissions are too strict (#1499441) +- Invalid utf-8 in from name breaks processing (#1500808) +- Delete tickets does not delete attachments (#1492850) +- Invalid utf-8 data in message-id breaks email processing (#1501609) +- Username limitation is too short (#1501616) +- Adding a queue fails (#1499449) +- Problems deleting tickets (#1492845) +- Replying to a ticket puts it on hold (#1502192) +- On Hold tickets lack actions (#1502194) +- add note no longer updates to field (#1493494) +- Queues list shows role user (#1498085) + +Version 2.1-RC4 +* BUG FIXES +- create_tables flag not used correctly (#1490966) +- Changing user to all has no effect (#1490876) +- Cannot view dequeued ticket (#1490915) +- Search always fails with invalid query (#1490871) +- Postgres encoding may still be in native charset (#1490182) +- Timestamps are not formatted correctly (#1484503) +- Incorrect abilities for new accounts (#1492592) +- Migration from 2.0 broken (#1492890) +- No highlight on subtab for ticket type (#1490998) +- Replying to tickets from queue omits To field (#1484499) +- Search results raises an error (#1484495) +- Queued events are not being processed (#1493443) +- Creating new ticket leads to an error (#1493482) +- No Send buttons on Tickets screen (#1493452) +- Overdue status is lost on migration (#1493442) +- Spam is not being processed (#1493596) +- Conflicting security declarations for QueueReportingEngine (#1493607) +- Filters breaking getMail with unicode messages (#1493620) +- AutoLogout not working correctly (#1493641) +- Add Note missing from overdue tickets (#1494173) +- Loop detection code prevents mailmanager mailing mailmanager (#1494827) +- Unicode issue in getmail (#1493483) +- Overdue transitions fail on closed tickets (#1493636) +- Notify user fails with unicode subjects (#1495112) +- Filters do not allow setting of state (#1495442) +- Create ticket can no longer generate email (#1495494) +- HTML messages are not displayed correctly (#1494158) +* BUG FIXES From 2.0.8 to 2.0.9 +- Formatting broken on templates for HTML (#1477664) +- No HTML response for HTML Required (#1472881) +- Selecting No change results in a failure (#1467786) +- Automatic addition of attachments (#1459924) +- UI Allows creation of empty groups (#1486433) +- Importing fails with alternative timezone (#1485389) +* BUG FIXES From 2.0.9 to 2.0.10 +* SECURITY +- Added in fix for potential security issue + Postgres encoding security hole (#1494281) + The code should not be vulnerable to this issue, but additional bugs in + the release may expose the vulnerability. Adding in a patch which will + prevent the exploit in all cases. + +Version 2.1-RC3 +* BUG FIXES +- setHTML raises Unicode error (#1477563) +- Queues page list has white on white (#1477727) +- Mass update selection doesn't work (#1478274) +- Selected colour leads to white on white (#1477724) +- Strings in code missing from i18n (#1482434) +- User abilities are not maintained consistently (#1481211) +- tickets list not finding tickets (#1481221) +- Editing a group to add a user fails (#1481095) +- Unicode usernames cannot be selected (#1478348) +- Add or Edit user breaks with unicode input (#1478345) +- HTML attachments aren't obvious (#1477717) +- Paging on Tickets screen broken (#1460936) +- show HTML is broken (#1477709) +- setSort on 'Queues' view returns 'Tickets' (#1477564) +- Queues page does not have status buttons (#1477689) +- AutoLogout not working correctly (#1477081) +- No strptime on windows (#1476818) +- getMail fails with TypeError (#1476878) +- Export to Excel on Reports (#1460909) +- Empty abilities are not being handled correctly (#1475604) +- History Display Issues (#1460955) +- Adding/Deleting Attachments problems (#1460943) +- Support of: text invisible (#1460915) +- Queue button doesn't highlight (#1460913) +- Performance Reports still contain queue masters (#1475530) +- getMail fails with unicode error (#1475487) +- Default template on accounts (#1464963) +- Setting template should return to template (#1464961) +- Close button not listed (#1464954) +- Restrict incoming emails with cc's to other accts to 1 tckt (#1464959) +- Return to Queue does not return to queues list (#1464947) +- Mass ticket updates not implemented (#1464953) +- Adding a customer fails (#1460922) +- Reports page is broken (#1472976) +* BUG FIXES From 2.0.7 to 2.0.8 +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.1-RC2 +* FEATURES +- Message loops are now caught based on presence of X-MailManager header +- Migration code improved to fit with the design proposed in the development + documentation +- TID in subject lines is now optional, based on database settings + although no UI pages allow this to be configured +* BUG FIXES +- State (or Status) of Ticket not display (#1455795) +- Issues with New state (#1456222) +- Deleting users via the Settings tab fails (#1456837) +- Deleting an Account with tickets fails (#1459386) +- RNG using too much entropy (#1459353) +- Fixed issue with non-ascii filter condition (#1438720) +- Tabs do not display on MySQL (#1451140) +- addUser page breaks on MySQL (#1451131) +- CookieCrumblerDisabled exception with http auth (#1451109) +- Fixed #1455297 login chews up entropy. Sessions are now not created until + user has successfully supplied a correct username and password combination. + In addition, the amount of entropy used per login has been reduced but can + still be considered secure. Tests have also been updated to reflect this. +* BUG FIXES From 2.0.7 to 2.0.8 +- Direct cycles of support_of are not allowed now. (#1353210) +- Cite last includes only replies now (#1369571) + +Version 2.1-RC1 +* BUG FIXES +- Merged in bugfixes from between 2.0.6 and 2.0.8 (Unreleased) inclusive + as denoted later in this file +- Various CSS Fixes to improve IE compatability +- MySQL compatability fixes +* IMPROVEMENTS +- Queueing Mode +- User abilities added to the database, queue allocation takes these into + consideration +- Named rulesets in the SQL database to allow for future use of multiple + rulesets per MailManager installation +- CookieCrumbler replaced with LoginHandler, allows for login sessions stored + in SQL and timing out of user logins. + +Version 2.1-beta1 +* BUG FIXES +- Merged in bugfixes from between 2.0.1-rc1 and 2.0.5 +- Minor UI fixes (#1322897, #1350233). +* IMPROVEMENTS +- Set the HTTP realm for authentication (so that auth data doesn't clash + between multiple MailManager instances and other Zope applications on the + same server) (#1356498). +- Seems to work OK with Zope 2.8.x (tested with 2.8.5) (#1328206), with the + most recent 3rd party package release. +- Works with PostgreSQL 8.1. + +Version 2.1-alpha2 +* NEW FEATURES +- Basic syndication support (both atom and RSS) of the top 20 unread tickets + for a MailManager instance. +* IMPROVEMENTS +- Tabindex is now being set on all form elements. +- There's now a print stylesheet for all MailManager pages which should hide + the non-salient information. +* BUG FIXES +- FilterSettings page now works (#1328226). +- Now set before the stylesheet is referenced which sometimes + caused the stylesheet not to load (#1328221). +- Create ticket page should now work (#1314741). + +Version 2.1-alpha1 +* IMPROVEMENTS +- Entirely reworked user interface, which: + - Looks exactly the same as it used to! + - Is XHTML 1.0 Strict and CSS 2.1 compliant. + - Should conform to at least priority 1 and probably priority 2 of the + WAI guidelines. + - Should be really easy to skin to make it look different. + - Is vastly tidied up -- Gone from over 8,000 lines of page templates to + just under 5,000! +- Initial modularisation of the reporting engine. + +Version 2.0.8 (Unreleased) +* Unfactored from 2.0.8 +- Create ticket method is highly broken + - Cannot create HTML tickets (#1466223) +- Unicode from addresses break incoming mail (#1440861) +- Valid tags are stripped from HTML on sending (#1460262) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +* BUG FIXES +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Archive and Restore functionality broken (#1452514) +- Encoding Error with signatures (#1440862) +- Non existant refresh value leads to security error (#1466274) +- Changing format away from HTML generates a Zope error (#1460216) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.8 +* BUG FIXES +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.7 +* BUG FIXES +- Fixed the setting of next ticket id for MySQL, no longer silently ignores + the option on mailmanager creation and fixes migration (#1412787) +- Send and Close, Send Reply, Send and Hold and Add Note have all been + considerably refactored. This resolves the problem reported where outbound + messages had been silently discarded (#1415497) +- getMail could potentially drop incoming messages whilst collecting from + POP3 accounts. This has now been corrected, and a test case now exists + which reproduces the existing problem and demonstrates it being fixed. + (#1422985) +- i18n fix - on the ticket modify screen "closed" is no longer displayed as + "open" when languages other than English are used (#1423422) +* IMPROVEMENTS +- Massive improvements to the test suite. + +Version 2.0.6 +* IMPROVEMENTS +- We're now using html2text (included) instead of stripogram for converting + HTML to its plain text equivalent (when sending out HTML mail, we also + include a plain text alternative for those who can't read HTML messages). + This results in far prettier plain text conversion. +* BUG FIXES +- Notify user/group flags can now be set/cleared correctly on account + preferences (#1404595). +- Improved address validation. Well, it's now a bit more lax, but it's + completely conformant to RFCs 2821 and 2822 (#1396051). +- MySQL: Default categories are now set up at installation (#1392386). +- HTML parts of multipart/alternative messages are now encoded as UTF-8 + rather than, bizarrely, being forced into ISO-8859-1 (#1368283). +- Make sure the user is informed about *why* test data cannot be removed + (#1345788). + +Version 2.0.5 +* BUG FIXES +- MySQL: Users are now migrated correctly (#1378323) +- MySQL: Attachments can now be of virtually any size (#1378224) +- MySQL: MailManager will now start when psycopg is not present (#1378209) +- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) +- PostgreSQL: Migration works even if response target update fails (#1374603) +- Search now works for users in all timezones (#1375345) +- The test data now sets 'routing' on the accounts (#1375764) +- MMImport.py script now uses new URL (#1378385) + +Version 2.0.4 +* BUG FIXES +- Prevent multiple users replying to the same ticket by accident (#1371269) +- Filters got broken in 2.0.3, change reverted (#1372814) +- Attachments now set the Content-Type header correctly on download (#13369349) +- Template names with trailing whitespace now work (#1363768) +- Set sql_charset on the mailmanager object during migration. (#1369347) + +Version 2.0.3 +* BUG FIXES +- Be more careful about adding and removing the test data (#1353112, #1345788). +- Improve the Unicode support with the MySQL back end (#1338614). +- Support of can now be removed with MySQL back end (#1338603). +- Fixes to the response target settings (#1336398, #1337506). +- setSession correctly clears the offset and always redirects to + Tickets (#1350429). +- Offer MySQL back end as a migration option (#1340301). +- Tickets now correctly marked as unread with MySQL back end (#1344827). + +Version 2.0.2 +* BUG FIXES +- Ignore the showHTML information in the session for plain text + emails. Reapplied previous bugfix (#1242337) +- Resetting response target to None now updates database (#1336398) +- Reports for targets fixed (#1337506) +* IMPROVEMENTS +- Now has setupdb script for MySQL users +- Split off setupdb code, now available as separate module +- Added in documentation for MySQL configuration + +Version 2.0.1-release +* BUG FIXES +- Disk usage screen now fixed for empty instances (#1244446) +- Initial Manager use now has correct roles set (#1324878) +- Altering roles now works correctly (#1324876) +- Update of response target now works correctly (#1324935) +- Removing notification flag for users/group now works correctly (#1315000) +- Migration now works correctly for 1.1 instances (#1291113) +- Setting response targets no longer generates an error (#1324884) + +Version 2.0.1-rc2 +* BUG FIXES +- No longer depends on psycopg due to import statements +- Migration fixes for MySQL users +- Fixed some scoping issues causing ZSQL methods to break due to + acquisition. +* IMPROVEMENTS +- SQL Directory no longer uses FileSystemSite.DirectoryView meaning + that the SQL methods can be overridden by 3rd parties. +- Test suite now has added hooks for overloading object types + +Version 2.0.1-rc1 +* BUG FIXES +- Test suite now covers text search cache consistency, cleared issues + with MySQL's mysql_max_allowed_packet variable +- Postgres support now appears stable + +Version 2.0.1-beta1 +* BUG FIXES +- Merged in all of the changes between 2.0r6 and 2.0r7 +- Fixed the index bug which was resulting in duplicate tickets being + displayed on the list page + +Version 2.0.1-alpha1 +* NEW FEATURES +- Adds in initial MySQL support +- SQL methods given addition parameters to deal with new MySQL support +- Vastly improved test suite - regression test suite for the database code. + +Version 2.0r7 +* BUG FIXES +- Subsequent pages for search were not being returned due to misuse of the + SESSION variable. These are now handled correctly (#1276412) +- Categories and templates were moved entirely to SQL. Upgrade needs a + migration to function correctly. (#1276414) +- listTickets method now correctly searches for subjects +- Fixes a Unicode handling error in the MailMixing class, which could + potentially block up incoming mail +* IMPROVEMENTS +- Postgres installation documentation rewritten +- Changes to loading of test datasets +- Test data set improved, now covers more functionality + +Version 2.0r6 +* BUG FIXES +- Fixed the positioning of the order by section of the listTickets query, + fixes broken ordering for search. +- The listCategories SQL method was broken, which was used by the Reports + pages. Reports for categories other than category0 were broken. + +Version 2.0 +* BUG FIXES +- Fix the security declaration of checkPOP3SSL(). + +Version 2.0 RC 3 +* NEW FEATURES +- Introduce some generalisations, ready for MySQL support in 2.0.1 +- Beginnings of epydoc API documentation. +* BUG FIXES +- Update the version number on migration. (#1229769) +- Robustify the autoreply code to deal with fatal errors. (#1240870) +- When a new message comes in with a ticket id in the subject line, + verify that the ticket already exists instead of assuming that it + does. (#1240711) +- Format the email address in the To: field for replies. (#1230837) +- Ignore the showHTML information in the session for plain text + emails. (#1242337) +- Record the logged in user who sent a reply to a ticket. (#1242958) + +Version 2.0 RC 2 +* BUG FIXES +- multipart/alternative mail with both an HTML and a plain text body now + only display one of them at a time (1227265) +- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) +- Migration updates the mm version +- Create ticket works again (1227744) + +Version 2.0 RC 1 +* BUG FIXES +- Stripogram can now be installed as a Python product in site-packages (1226633) +- Reply-To: header is used in favour of From: (1226156) +- Notifiction emails can handle non-ASCII subject lines (1224784) +- URLs are now accurate on notification emails (1224756) +- Character encodings set correctly on all web pages (1224731) +- Send & Close now goes to the next ticket (1224164) +- Improved date parsing (1223755) +- Respond By: now displayed for tickets with a response target (1222528) +- Attachment titles are now decoded correctly (1223974) + +Version 2.0 Beta 2 +* BUG FIXES +- Make the email validation less strict. (1283401) +- Customers can no longer have email addresses which are used + by an account. (1216414) +- Migration: Drop filters which refer to unknown users/groups. (1216361) +- Migration: Be more careful about coercing dates into ISO8601. (1216534) +- Clarified notification email setup. (1217403) +- Fixed Chinese translation. (1215645) +- Store time zone information in the pgsl database. + +Version 2.0 Beta 1 +* NEW FEATURES +- Added a Chinese translation. +- Add some documentation for creating the Postgres database and point to + detailed docs on the Windows installation process. +- Updated the help files to reflect the new version's feature set. +* BUG FIXES +- Make mbox exports have a more meaningful filename. +- Deal with RFC2047-encoded headers correctly. (1212035) +- Make the disk usage a bit more friendly. (1213604) +- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) +- Epoz now has a white background on all browsers. (1208912) + +Version 2.0 alpha 2 +* NEW FEATURES +- Support for retrieving POP3 mail over SSL (RFE 1204236) +- Optionally notify all in a group of new messages (RFE 1208284) +* BUG FIXES +- Help tab no longer visible after logout (1207656) +- Adding a MailManager instance now creates an initial user (1207022) +- Changes to users such as adding a signature no longer clear password (1207017) +- HTML tickets work properly (1205720, 1205717) +- Time to close tickets recorded (1204825) +- Reply to all button improved (1204805) +- Reassignment notification added (1204372) +- Groups redesigned (1204312) +- Adding/removing attachments no longer clears other form fields (1204272) +- Date translations fixed (1204268) +- Templates fixed (1204267) +- Overdue tickets function properly (1203141) +- Performance v. account report fixed (1196685) +- GetMail fixed (1196606) +- Referential integrity broken on mm_message table (1194418) +- Login link on logout page fixed (1204811) +- Signature handling improved (1204877) +- HTML email fixed (1204987) + +Version 2.0 alpha 1 +* NEW FEATURES +- A complete redesign using PostgreSQL as a replacement for the ZODB in order + to improve performance and scalability. +- Can now use SMTP servers that require a login (RFE 939720) + +Version 1.1 +* NEW FEATURES +- Internationalization of the help documentation. +* BUG FIXES +- Make sure that sending mail out is the last thing done, which should reduce + the window where a ConflictError would cause duplicate emails to be sent. +- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other + than a MessageParseError. Otherwise we wind up hard-bouncing (instead of + retrying) on a ConflictError. + +Version 1.1-rc5 +* BUG FIXES +- Comptatible with Zope 2.6/Python 2.1 again + +Version 1.1-rc4 +* BUG FIXES +- Standard attachments fixed (1110435) +- Clear supporter link fixed after i18n problem (1110436) + +Version 1.1-rc3 +* NEW FEATURES +[Unfortunately it was essential to add the following features at + this late stage for commercial reasons.] +- Added archive/restore tickets (RFE 953290) +- Create ticket can now have multiple attachments (RFE 987700) +- Replies can also have multiple attachments (RFE 859141) +- Standard set of attachments can be stored on the system (RFE 985469) +* BUG FIXES +- Edit of mail headers now works properly (RFE 859102) +- Fixed broken migration + +Version 1.1-rc2 +* BUG FIXES +- Now possible to add/edit account without SSL (1090041) +- Spam tickets no longer appear on the 'New' tickets list + +Version 1.1-rc1 +* NEW FEATURES +- Users notified on re-assignment of tickets (RFE 978035) +- Internationalisation (i18n) added ready for translation to other languages. +- Support for SSL connections to remote IMAP server. +- Any mail headers may be used in filters (RFE 859102) +* BUG FIXES +- Report graphs now work for user-defined categories (978404) +- File downloads now work when there is a space in the filename (985150) +- Remove support ticket feature fixed (985677) +- Users no longer notified if spam is received (1059104) +- Spam no longer displayed on default ticket listing views +- Templates with names ending in a space may now be deleted/edited (1003514) + +Version 1.0 +No changes from 1.0-rc2 + +Version 1.0-rc2 +* NEW FEATURES +- Batch classification of tickets. (RFE 859114 and 957719) +* BUG FIXES +- Migration works when filters are of mixed formats. (945956) +- Migration works when groups are of mixed formats. (945959) +- Messages from mailer-daemon with a real name do not cause a loop. (952864) +- Works on Firefox for Mac when reply has no attachment. (963291) +- Report graphs work for more than 200 tickets in a period. (964144) + +Version 1.0-rc1 +* NEW FEATURES +- Choice of date format. (RFE 869827) +- Choice of timezone (currently only on Unix). (RFE 869827) +- Script to import mail from Unix mailboxes. (RFE 903031) +- Shortcut icon. +- Importing of tickets enabled. +* IMPROVEMENTS +- Added global error slot and adjusted settings screens to use it. (873232) +- Message response form fields remembered in request. +- An instance's children may be migrated even when it is not. +* BUG FIXES +- Mail check thread delays till Zope is ready in 2.7 as well. (835642) +- GroupSettings page template works with new-style groups. (887785) +- Problems sending mail caught and reported to the user or logged. (892947) +- Message ID added to outgoing messages. (895039) +- Newlines in the Cc field no longer break the JavaScript. (904033) +- Private notes and replies no longer lose headers in migration. (904076) +- Private notes may no longer have a To field. (912534) +- Ticket ownership transferred when user deleted. (925344) +- Customers are persistent. (930654) +- Sending files with a bad mime type does not cause an exception. (934133) +- HTML templates no longer have extra breaks added. (934235) +- MailManager.getMail() returns an empty string on success. (934902) +- Add customer form checks fields are filled. (938631) +- Fixed links to AccountSettings page. (938678) + +Version 1.0-b4 +* BUG FIX +- Fixed error when a new thread is started and notification is on. + +Version 1.0-b3 +* NEW FEATURES +- Supporter mechanism for associating tickets fully implemented. +- URLs in messages rendered as hyperlinks. +- Filters can assign... [truncated message content] |
From: <ke...@us...> - 2006-06-26 08:49:34
|
Revision: 3239 Author: kevca Date: 2006-06-26 01:49:14 -0700 (Mon, 26 Jun 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3239&view=rev Log Message: ----------- Tagging dev release Modified Paths: -------------- MailManager/tags/RELENG_2_1_RC6_PRE3/docs/development/source/sections/ruleset.xml MailManager/tags/RELENG_2_1_RC6_PRE3/docs/development/source/sections/testing.xml MailManager/tags/RELENG_2_1_RC6_PRE3/docs/development/source/sections/unicode.xml Added Paths: ----------- MailManager/tags/RELENG_2_1_RC6_PRE3/ MailManager/tags/RELENG_2_1_RC6_PRE3/CHANGES.txt MailManager/tags/RELENG_2_1_RC6_PRE3/migrations/v2_1/__init__.py MailManager/tags/RELENG_2_1_RC6_PRE3/ruleset/data/queuesystem_2_1_6.py MailManager/tags/RELENG_2_1_RC6_PRE3/sql/v2_1/migrateAddCategoryIndexes.zsql MailManager/tags/RELENG_2_1_RC6_PRE3/version.txt Removed Paths: ------------- MailManager/tags/RELENG_2_1_RC6_PRE3/CHANGES.txt MailManager/tags/RELENG_2_1_RC6_PRE3/migrations/v2_1/__init__.py MailManager/tags/RELENG_2_1_RC6_PRE3/version.txt Copied: MailManager/tags/RELENG_2_1_RC6_PRE3 (from rev 3232, MailManager/branches/RELENG_2_1) Deleted: MailManager/tags/RELENG_2_1_RC6_PRE3/CHANGES.txt =================================================================== --- MailManager/branches/RELENG_2_1/CHANGES.txt 2006-06-25 22:04:17 UTC (rev 3232) +++ MailManager/tags/RELENG_2_1_RC6_PRE3/CHANGES.txt 2006-06-26 08:49:14 UTC (rev 3239) @@ -1,716 +0,0 @@ -Version 2.1-RC6 -* BUG FIXES -- Date Parsing Error in logs (#1504722) -- Repeat of partial fix for Problems deleting tickets (#1492845) -- Repeat of partial fix for Username limitation is too short (#1501616) -- Double spaces break templates (#1505367) -- Unicode filenames in attachments break viewing (#1505895) -- Expired logouts cause issues (#1502271) -- Migration broken from 2.0 (#1506535) -- Windows support is broken (#1509270) -- Reply addresses are quoted incorrectly (#1510507) - -Version 2.1-RC5 -* BUG FIXES -- Check for References in addition to In-Reply-To headers (#1501557) -- Create tickets hardcodes Epoz (#1495917) -- Response target defaults to now (#1494223) -- Response targets for accounts are now compulsory (#1494791) -- Blank items in history (#1495097) -- Empty category choice shown on tickets page (#1496041) -- History display garbled for category changes (#1494163) -- Replied tickets are being marked as overdue (#1497428) -- Spam state not respected for new ticket alerts (#1497702) -- Empty queues break ticket display (#1498067) -- Dates not localised consistently in UI (#1494154) -- Formatting broken on templates for HTML (#1477664) - Previous fix invalid -- Problems displaying HTML messages (#1499451) -- Ruleset permissions are too strict (#1499441) -- Invalid utf-8 in from name breaks processing (#1500808) -- Delete tickets does not delete attachments (#1492850) -- Invalid utf-8 data in message-id breaks email processing (#1501609) -- Username limitation is too short (#1501616) -- Adding a queue fails (#1499449) -- Problems deleting tickets (#1492845) -- Replying to a ticket puts it on hold (#1502192) -- On Hold tickets lack actions (#1502194) -- add note no longer updates to field (#1493494) -- Queues list shows role user (#1498085) - -Version 2.1-RC4 -* BUG FIXES -- create_tables flag not used correctly (#1490966) -- Changing user to all has no effect (#1490876) -- Cannot view dequeued ticket (#1490915) -- Search always fails with invalid query (#1490871) -- Postgres encoding may still be in native charset (#1490182) -- Timestamps are not formatted correctly (#1484503) -- Incorrect abilities for new accounts (#1492592) -- Migration from 2.0 broken (#1492890) -- No highlight on subtab for ticket type (#1490998) -- Replying to tickets from queue omits To field (#1484499) -- Search results raises an error (#1484495) -- Queued events are not being processed (#1493443) -- Creating new ticket leads to an error (#1493482) -- No Send buttons on Tickets screen (#1493452) -- Overdue status is lost on migration (#1493442) -- Spam is not being processed (#1493596) -- Conflicting security declarations for QueueReportingEngine (#1493607) -- Filters breaking getMail with unicode messages (#1493620) -- AutoLogout not working correctly (#1493641) -- Add Note missing from overdue tickets (#1494173) -- Loop detection code prevents mailmanager mailing mailmanager (#1494827) -- Unicode issue in getmail (#1493483) -- Overdue transitions fail on closed tickets (#1493636) -- Notify user fails with unicode subjects (#1495112) -- Filters do not allow setting of state (#1495442) -- Create ticket can no longer generate email (#1495494) -- HTML messages are not displayed correctly (#1494158) -* BUG FIXES From 2.0.8 to 2.0.9 -- Formatting broken on templates for HTML (#1477664) -- No HTML response for HTML Required (#1472881) -- Selecting No change results in a failure (#1467786) -- Automatic addition of attachments (#1459924) -- UI Allows creation of empty groups (#1486433) -- Importing fails with alternative timezone (#1485389) -* BUG FIXES From 2.0.9 to 2.0.10 -* SECURITY -- Added in fix for potential security issue - Postgres encoding security hole (#1494281) - The code should not be vulnerable to this issue, but additional bugs in - the release may expose the vulnerability. Adding in a patch which will - prevent the exploit in all cases. - -Version 2.1-RC3 -* BUG FIXES -- setHTML raises Unicode error (#1477563) -- Queues page list has white on white (#1477727) -- Mass update selection doesn't work (#1478274) -- Selected colour leads to white on white (#1477724) -- Strings in code missing from i18n (#1482434) -- User abilities are not maintained consistently (#1481211) -- tickets list not finding tickets (#1481221) -- Editing a group to add a user fails (#1481095) -- Unicode usernames cannot be selected (#1478348) -- Add or Edit user breaks with unicode input (#1478345) -- HTML attachments aren't obvious (#1477717) -- Paging on Tickets screen broken (#1460936) -- show HTML is broken (#1477709) -- setSort on 'Queues' view returns 'Tickets' (#1477564) -- Queues page does not have status buttons (#1477689) -- AutoLogout not working correctly (#1477081) -- No strptime on windows (#1476818) -- getMail fails with TypeError (#1476878) -- Export to Excel on Reports (#1460909) -- Empty abilities are not being handled correctly (#1475604) -- History Display Issues (#1460955) -- Adding/Deleting Attachments problems (#1460943) -- Support of: text invisible (#1460915) -- Queue button doesn't highlight (#1460913) -- Performance Reports still contain queue masters (#1475530) -- getMail fails with unicode error (#1475487) -- Default template on accounts (#1464963) -- Setting template should return to template (#1464961) -- Close button not listed (#1464954) -- Restrict incoming emails with cc's to other accts to 1 tckt (#1464959) -- Return to Queue does not return to queues list (#1464947) -- Mass ticket updates not implemented (#1464953) -- Adding a customer fails (#1460922) -- Reports page is broken (#1472976) -* BUG FIXES From 2.0.7 to 2.0.8 -- Non existant refresh value leads to security error (#1466274) -- Cannot create HTML tickets (#1466223) -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.1-RC2 -* FEATURES -- Message loops are now caught based on presence of X-MailManager header -- Migration code improved to fit with the design proposed in the development - documentation -- TID in subject lines is now optional, based on database settings - although no UI pages allow this to be configured -* BUG FIXES -- State (or Status) of Ticket not display (#1455795) -- Issues with New state (#1456222) -- Deleting users via the Settings tab fails (#1456837) -- Deleting an Account with tickets fails (#1459386) -- RNG using too much entropy (#1459353) -- Fixed issue with non-ascii filter condition (#1438720) -- Tabs do not display on MySQL (#1451140) -- addUser page breaks on MySQL (#1451131) -- CookieCrumblerDisabled exception with http auth (#1451109) -- Fixed #1455297 login chews up entropy. Sessions are now not created until - user has successfully supplied a correct username and password combination. - In addition, the amount of entropy used per login has been reduced but can - still be considered secure. Tests have also been updated to reflect this. -* BUG FIXES From 2.0.7 to 2.0.8 -- Direct cycles of support_of are not allowed now. (#1353210) -- Cite last includes only replies now (#1369571) - -Version 2.1-RC1 -* BUG FIXES -- Merged in bugfixes from between 2.0.6 and 2.0.8 (Unreleased) inclusive - as denoted later in this file -- Various CSS Fixes to improve IE compatability -- MySQL compatability fixes -* IMPROVEMENTS -- Queueing Mode -- User abilities added to the database, queue allocation takes these into - consideration -- Named rulesets in the SQL database to allow for future use of multiple - rulesets per MailManager installation -- CookieCrumbler replaced with LoginHandler, allows for login sessions stored - in SQL and timing out of user logins. - -Version 2.1-beta1 -* BUG FIXES -- Merged in bugfixes from between 2.0.1-rc1 and 2.0.5 -- Minor UI fixes (#1322897, #1350233). -* IMPROVEMENTS -- Set the HTTP realm for authentication (so that auth data doesn't clash - between multiple MailManager instances and other Zope applications on the - same server) (#1356498). -- Seems to work OK with Zope 2.8.x (tested with 2.8.5) (#1328206), with the - most recent 3rd party package release. -- Works with PostgreSQL 8.1. - -Version 2.1-alpha2 -* NEW FEATURES -- Basic syndication support (both atom and RSS) of the top 20 unread tickets - for a MailManager instance. -* IMPROVEMENTS -- Tabindex is now being set on all form elements. -- There's now a print stylesheet for all MailManager pages which should hide - the non-salient information. -* BUG FIXES -- FilterSettings page now works (#1328226). -- Now set before the stylesheet is referenced which sometimes - caused the stylesheet not to load (#1328221). -- Create ticket page should now work (#1314741). - -Version 2.1-alpha1 -* IMPROVEMENTS -- Entirely reworked user interface, which: - - Looks exactly the same as it used to! - - Is XHTML 1.0 Strict and CSS 2.1 compliant. - - Should conform to at least priority 1 and probably priority 2 of the - WAI guidelines. - - Should be really easy to skin to make it look different. - - Is vastly tidied up -- Gone from over 8,000 lines of page templates to - just under 5,000! -- Initial modularisation of the reporting engine. - -Version 2.0.8 (Unreleased) -* Unfactored from 2.0.8 -- Create ticket method is highly broken - - Cannot create HTML tickets (#1466223) -- Unicode from addresses break incoming mail (#1440861) -- Valid tags are stripped from HTML on sending (#1460262) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -* BUG FIXES -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Archive and Restore functionality broken (#1452514) -- Encoding Error with signatures (#1440862) -- Non existant refresh value leads to security error (#1466274) -- Changing format away from HTML generates a Zope error (#1460216) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.8 -* BUG FIXES -- Non existant refresh value leads to security error (#1466274) -- Cannot create HTML tickets (#1466223) -- Archive and Restore functionality broken (#1452514) -- Unicode from addresses break incoming mail (#1440861) -- Changing format away from HTML generates a Zope error (#1460216) -- Email sent from Macs/Linux to Windows aren't formatted (#1440850) -- Valid tags are stripped from HTML on sending (#1460262) -- Encoding Error with signatures (#1440862) -- Installing test suite data fails (#1463368) -- Fixed issue with non-ascii filter condition (#1438720) -- Cite last includes only replies now (#1369571) -- Direct cycles of support_of are not allowed now. (#1353210) -- Tickets without a subject no longer result in a permissions error (#1436863) -- Test dataset has broken messages (#1422365) -- Account and User drop downs now work with Internet Explorer (#1410232) -- Ticket date is set to application server date by default (#1444200) -- Test suite no longer generates testsuite.log unless set in config - -Version 2.0.7 -* BUG FIXES -- Fixed the setting of next ticket id for MySQL, no longer silently ignores - the option on mailmanager creation and fixes migration (#1412787) -- Send and Close, Send Reply, Send and Hold and Add Note have all been - considerably refactored. This resolves the problem reported where outbound - messages had been silently discarded (#1415497) -- getMail could potentially drop incoming messages whilst collecting from - POP3 accounts. This has now been corrected, and a test case now exists - which reproduces the existing problem and demonstrates it being fixed. - (#1422985) -- i18n fix - on the ticket modify screen "closed" is no longer displayed as - "open" when languages other than English are used (#1423422) -* IMPROVEMENTS -- Massive improvements to the test suite. - -Version 2.0.6 -* IMPROVEMENTS -- We're now using html2text (included) instead of stripogram for converting - HTML to its plain text equivalent (when sending out HTML mail, we also - include a plain text alternative for those who can't read HTML messages). - This results in far prettier plain text conversion. -* BUG FIXES -- Notify user/group flags can now be set/cleared correctly on account - preferences (#1404595). -- Improved address validation. Well, it's now a bit more lax, but it's - completely conformant to RFCs 2821 and 2822 (#1396051). -- MySQL: Default categories are now set up at installation (#1392386). -- HTML parts of multipart/alternative messages are now encoded as UTF-8 - rather than, bizarrely, being forced into ISO-8859-1 (#1368283). -- Make sure the user is informed about *why* test data cannot be removed - (#1345788). - -Version 2.0.5 -* BUG FIXES -- MySQL: Users are now migrated correctly (#1378323) -- MySQL: Attachments can now be of virtually any size (#1378224) -- MySQL: MailManager will now start when psycopg is not present (#1378209) -- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) -- PostgreSQL: Migration works even if response target update fails (#1374603) -- Search now works for users in all timezones (#1375345) -- The test data now sets 'routing' on the accounts (#1375764) -- MMImport.py script now uses new URL (#1378385) - -Version 2.0.4 -* BUG FIXES -- Prevent multiple users replying to the same ticket by accident (#1371269) -- Filters got broken in 2.0.3, change reverted (#1372814) -- Attachments now set the Content-Type header correctly on download (#13369349) -- Template names with trailing whitespace now work (#1363768) -- Set sql_charset on the mailmanager object during migration. (#1369347) - -Version 2.0.3 -* BUG FIXES -- Be more careful about adding and removing the test data (#1353112, #1345788). -- Improve the Unicode support with the MySQL back end (#1338614). -- Support of can now be removed with MySQL back end (#1338603). -- Fixes to the response target settings (#1336398, #1337506). -- setSession correctly clears the offset and always redirects to - Tickets (#1350429). -- Offer MySQL back end as a migration option (#1340301). -- Tickets now correctly marked as unread with MySQL back end (#1344827). - -Version 2.0.2 -* BUG FIXES -- Ignore the showHTML information in the session for plain text - emails. Reapplied previous bugfix (#1242337) -- Resetting response target to None now updates database (#1336398) -- Reports for targets fixed (#1337506) -* IMPROVEMENTS -- Now has setupdb script for MySQL users -- Split off setupdb code, now available as separate module -- Added in documentation for MySQL configuration - -Version 2.0.1-release -* BUG FIXES -- Disk usage screen now fixed for empty instances (#1244446) -- Initial Manager use now has correct roles set (#1324878) -- Altering roles now works correctly (#1324876) -- Update of response target now works correctly (#1324935) -- Removing notification flag for users/group now works correctly (#1315000) -- Migration now works correctly for 1.1 instances (#1291113) -- Setting response targets no longer generates an error (#1324884) - -Version 2.0.1-rc2 -* BUG FIXES -- No longer depends on psycopg due to import statements -- Migration fixes for MySQL users -- Fixed some scoping issues causing ZSQL methods to break due to - acquisition. -* IMPROVEMENTS -- SQL Directory no longer uses FileSystemSite.DirectoryView meaning - that the SQL methods can be overridden by 3rd parties. -- Test suite now has added hooks for overloading object types - -Version 2.0.1-rc1 -* BUG FIXES -- Test suite now covers text search cache consistency, cleared issues - with MySQL's mysql_max_allowed_packet variable -- Postgres support now appears stable - -Version 2.0.1-beta1 -* BUG FIXES -- Merged in all of the changes between 2.0r6 and 2.0r7 -- Fixed the index bug which was resulting in duplicate tickets being - displayed on the list page - -Version 2.0.1-alpha1 -* NEW FEATURES -- Adds in initial MySQL support -- SQL methods given addition parameters to deal with new MySQL support -- Vastly improved test suite - regression test suite for the database code. - -Version 2.0r7 -* BUG FIXES -- Subsequent pages for search were not being returned due to misuse of the - SESSION variable. These are now handled correctly (#1276412) -- Categories and templates were moved entirely to SQL. Upgrade needs a - migration to function correctly. (#1276414) -- listTickets method now correctly searches for subjects -- Fixes a Unicode handling error in the MailMixing class, which could - potentially block up incoming mail -* IMPROVEMENTS -- Postgres installation documentation rewritten -- Changes to loading of test datasets -- Test data set improved, now covers more functionality - -Version 2.0r6 -* BUG FIXES -- Fixed the positioning of the order by section of the listTickets query, - fixes broken ordering for search. -- The listCategories SQL method was broken, which was used by the Reports - pages. Reports for categories other than category0 were broken. - -Version 2.0 -* BUG FIXES -- Fix the security declaration of checkPOP3SSL(). - -Version 2.0 RC 3 -* NEW FEATURES -- Introduce some generalisations, ready for MySQL support in 2.0.1 -- Beginnings of epydoc API documentation. -* BUG FIXES -- Update the version number on migration. (#1229769) -- Robustify the autoreply code to deal with fatal errors. (#1240870) -- When a new message comes in with a ticket id in the subject line, - verify that the ticket already exists instead of assuming that it - does. (#1240711) -- Format the email address in the To: field for replies. (#1230837) -- Ignore the showHTML information in the session for plain text - emails. (#1242337) -- Record the logged in user who sent a reply to a ticket. (#1242958) - -Version 2.0 RC 2 -* BUG FIXES -- multipart/alternative mail with both an HTML and a plain text body now - only display one of them at a time (1227265) -- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) -- Migration updates the mm version -- Create ticket works again (1227744) - -Version 2.0 RC 1 -* BUG FIXES -- Stripogram can now be installed as a Python product in site-packages (1226633) -- Reply-To: header is used in favour of From: (1226156) -- Notifiction emails can handle non-ASCII subject lines (1224784) -- URLs are now accurate on notification emails (1224756) -- Character encodings set correctly on all web pages (1224731) -- Send & Close now goes to the next ticket (1224164) -- Improved date parsing (1223755) -- Respond By: now displayed for tickets with a response target (1222528) -- Attachment titles are now decoded correctly (1223974) - -Version 2.0 Beta 2 -* BUG FIXES -- Make the email validation less strict. (1283401) -- Customers can no longer have email addresses which are used - by an account. (1216414) -- Migration: Drop filters which refer to unknown users/groups. (1216361) -- Migration: Be more careful about coercing dates into ISO8601. (1216534) -- Clarified notification email setup. (1217403) -- Fixed Chinese translation. (1215645) -- Store time zone information in the pgsl database. - -Version 2.0 Beta 1 -* NEW FEATURES -- Added a Chinese translation. -- Add some documentation for creating the Postgres database and point to - detailed docs on the Windows installation process. -- Updated the help files to reflect the new version's feature set. -* BUG FIXES -- Make mbox exports have a more meaningful filename. -- Deal with RFC2047-encoded headers correctly. (1212035) -- Make the disk usage a bit more friendly. (1213604) -- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) -- Epoz now has a white background on all browsers. (1208912) - -Version 2.0 alpha 2 -* NEW FEATURES -- Support for retrieving POP3 mail over SSL (RFE 1204236) -- Optionally notify all in a group of new messages (RFE 1208284) -* BUG FIXES -- Help tab no longer visible after logout (1207656) -- Adding a MailManager instance now creates an initial user (1207022) -- Changes to users such as adding a signature no longer clear password (1207017) -- HTML tickets work properly (1205720, 1205717) -- Time to close tickets recorded (1204825) -- Reply to all button improved (1204805) -- Reassignment notification added (1204372) -- Groups redesigned (1204312) -- Adding/removing attachments no longer clears other form fields (1204272) -- Date translations fixed (1204268) -- Templates fixed (1204267) -- Overdue tickets function properly (1203141) -- Performance v. account report fixed (1196685) -- GetMail fixed (1196606) -- Referential integrity broken on mm_message table (1194418) -- Login link on logout page fixed (1204811) -- Signature handling improved (1204877) -- HTML email fixed (1204987) - -Version 2.0 alpha 1 -* NEW FEATURES -- A complete redesign using PostgreSQL as a replacement for the ZODB in order - to improve performance and scalability. -- Can now use SMTP servers that require a login (RFE 939720) - -Version 1.1 -* NEW FEATURES -- Internationalization of the help documentation. -* BUG FIXES -- Make sure that sending mail out is the last thing done, which should reduce - the window where a ConflictError would cause duplicate emails to be sent. -- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other - than a MessageParseError. Otherwise we wind up hard-bouncing (instead of - retrying) on a ConflictError. - -Version 1.1-rc5 -* BUG FIXES -- Comptatible with Zope 2.6/Python 2.1 again - -Version 1.1-rc4 -* BUG FIXES -- Standard attachments fixed (1110435) -- Clear supporter link fixed after i18n problem (1110436) - -Version 1.1-rc3 -* NEW FEATURES -[Unfortunately it was essential to add the following features at - this late stage for commercial reasons.] -- Added archive/restore tickets (RFE 953290) -- Create ticket can now have multiple attachments (RFE 987700) -- Replies can also have multiple attachments (RFE 859141) -- Standard set of attachments can be stored on the system (RFE 985469) -* BUG FIXES -- Edit of mail headers now works properly (RFE 859102) -- Fixed broken migration - -Version 1.1-rc2 -* BUG FIXES -- Now possible to add/edit account without SSL (1090041) -- Spam tickets no longer appear on the 'New' tickets list - -Version 1.1-rc1 -* NEW FEATURES -- Users notified on re-assignment of tickets (RFE 978035) -- Internationalisation (i18n) added ready for translation to other languages. -- Support for SSL connections to remote IMAP server. -- Any mail headers may be used in filters (RFE 859102) -* BUG FIXES -- Report graphs now work for user-defined categories (978404) -- File downloads now work when there is a space in the filename (985150) -- Remove support ticket feature fixed (985677) -- Users no longer notified if spam is received (1059104) -- Spam no longer displayed on default ticket listing views -- Templates with names ending in a space may now be deleted/edited (1003514) - -Version 1.0 -No changes from 1.0-rc2 - -Version 1.0-rc2 -* NEW FEATURES -- Batch classification of tickets. (RFE 859114 and 957719) -* BUG FIXES -- Migration works when filters are of mixed formats. (945956) -- Migration works when groups are of mixed formats. (945959) -- Messages from mailer-daemon with a real name do not cause a loop. (952864) -- Works on Firefox for Mac when reply has no attachment. (963291) -- Report graphs work for more than 200 tickets in a period. (964144) - -Version 1.0-rc1 -* NEW FEATURES -- Choice of date format. (RFE 869827) -- Choice of timezone (currently only on Unix). (RFE 869827) -- Script to import mail from Unix mailboxes. (RFE 903031) -- Shortcut icon. -- Importing of tickets enabled. -* IMPROVEMENTS -- Added global error slot and adjusted settings screens to use it. (873232) -- Message response form fields remembered in request. -- An instance's children may be migrated even when it is not. -* BUG FIXES -- Mail check thread delays till Zope is ready in 2.7 as well. (835642) -- GroupSettings page template works with new-style groups. (887785) -- Problems sending mail caught and reported to the user or logged. (892947) -- Message ID added to outgoing messages. (895039) -- Newlines in the Cc field no longer break the JavaScript. (904033) -- Private notes and replies no longer lose headers in migration. (904076) -- Private notes may no longer have a To field. (912534) -- Ticket ownership transferred when user deleted. (925344) -- Customers are persistent. (930654) -- Sending files with a bad mime type does not cause an exception. (934133) -- HTML templates no longer have extra breaks added. (934235) -- MailManager.getMail() returns an empty string on success. (934902) -- Add customer form checks fields are filled. (938631) -- Fixed links to AccountSettings page. (938678) - -Version 1.0-b4 -* BUG FIX -- Fixed error when a new thread is started and notification is on. - -Version 1.0-b3 -* NEW FEATURES -- Supporter mechanism for associating tickets fully implemented. -- URLs in messages rendered as hyperlinks. -- Filters can assign to groups as well as users. -* IMPROVEMENTS -- Assigned agent mailed at every new message in ticket, customer only - when he starts a new ticket. This reverses the previous behaviour. -- Tickets can be re-opened by arrival of a new message or through - Ticket Details box. -- Migration version distinguished from product version. -- Group now a class; ensures that group members are assigned to evenly. -- By default users only see tickets assigned to them. -- Export (view raw messages) link added to Ticket index page. -* BUG FIXES -- Account signatures are now used. -- HTML setting on auto replies and templates respected. -- Agents can be deleted. -- Several others (see SourceForge bugs 859030 to 873233). - -Version 1.0-b2 -* NEW FEATURES -- Migration -- HTML messages may now be viewed. -- Most recent search results always available. -- Response target added as option in filters and create ticket screen. -* IMPROVEMENTS -- More robust ticket navigation (works with virtual hosting, "prev"/"next" - links always available, "list" goes to batch containing current ticket). -- Improved handling and presentation of attachments. -- Help screens updated (not quite finished). -- Improved interface to reports (still needs work though). -- All character sets displayed correctly (as far as the browser's fonts allow). -- Mail fetching scripts have an option to specify MailManager's URL . -- Search by from name no longer requires exact match. -- Much Python code removed from page templates. -* BUG FIXES -- Overdue ticket view and searches for overdue tickets now work. -- Automatic mail checking continues after product is refreshed. -- Numerous others (see SourceForge bugs 832932 to 858688). - -Version 1.0-b1 -- Dependence on MailHost product removed. -- Message class now wraps Message object from Python email package, - allowing mails to be retreived in their original form. -- Automatic mail fetching introduced. -- Code for creating e-mails through the web brought together in a new - module and handling added for text entered in any character set. -- Each account is now a separate folder, ready for per account - security settings. -- Fetching and handling of incoming mail moved to new Account class. -- Self service interface to allow customers to manage their own tickets. -- Better handling of HTML emails. -- Create ticket now has more sensible defaults. -- Users now deleted properly. -- Calculates an approximation of disk space used. -- Added Property Managers to ease debugging. -- Users with 'Settings' access can no longer view ZMI. -- Numerous bug fixes. - -Version 0.96 -- By default, shows newest tickets first rather than oldest -- The subject of a ticket can now be changed -- If more email is added to a read ticket it goes back to being unread (bold) -- Advises if an attachment is of a dangerous type (for Windows users) -- Attachments now download with original filename & security improved -- Browser bug in IE prevented selection of user on tickets screen (797221) -- Two extra user definable categories added -- Code tidied up & minor bug fixes - -Version 0.95 -- Added a 'Spam' status and amended reports, tickets & filters accordingly -- Can now delete spam tickets without closing them (783289) -- Now handles AppleDouble attachments correctly (787671) -- POP3 mailbox lock removed if there is an error (787677) -- IMAP mailbox lock removed if there is an error -- Mails that can't be processed are now stored raw rather than deleted -- Added 'priority' and 'assigned' to Search screen (785360) -- Basic export of reports to Excel implemented -- Now record and report on times to close as well as times to respond -- Other minor fixes - -Version 0.94 -- Ticket status is displayed correctly in all circumstances -- Adding attachments when creating a ticket thru the web now works as expected. -- Users can be notified of new tickets in all circumstances (783955) -- Allow selection of fields to display on tickets screen (783863) -- Added submenu to the Create ticket screen -- Other minor fixes - -Version 0.93 -- Improved attachment handling and display -- Improved ticket navigation (now back/list/next on ticket view) (780783) -- Fixed a bug in the reporting graphs where the last day in the month could - be missed -- Added an auto refresh option for tickets screen (feature request 781294) -- By default tickets created through the web are assigned to the logged in user, - rather than the first user alphabetically -- Improved outgoing mail -- More advanced standard filter -- Tightened up security -- Help button now context sensitive - -Version 0.92 -- Adding a user with the Reports permission now works as expected (779986) -- Account deletion now works properly (779989) -- Admin password now hidden on the Add MailManager page (779987) - -Thanks to Ronan Amicel for spotting these four bugs. - -- Ticket deletion system improved. -- Supporting tickets system now works better. - -Version 0.91 -- Fixed the Account Help screen. Now displays properly and text is accurate. -- Fixed the 'Change details' section on a ticket screen so the user the ticket - is assigned to is displayed by default. Also ensured user names are displayed - in alphabetical order. -- Categories can now be deleted. Deleted categories will still appear in - Reports, System Settings and on the Search page until every ticket with that - category has been deleted from the system. - -Thanks to Kevin Gill for spotting these bugs. - -Version 0.9 -The first open source release of MailManager. Based on the commercial version -however with some major changes: - -- Uses the Zope Object DB instead of an external relational database. This - changes the performance, it is faster in some areas and slower in others. It - makes the product much easier to install. -- Use of HTML to generate the graphs. Not as attractive as the commercial - version but saves the difficulty of installing extensions which were not - stable on all platforms. -- Improved text editor. Epoz is used to provide rich text editing allowing - easy creation of HTML mail. -- Improved text indexing. Greatly expanded query options. -- Bug fixes. A number of minor bugs were fixed. Copied: MailManager/tags/RELENG_2_1_RC6_PRE3/CHANGES.txt (from rev 3234, MailManager/branches/RELENG_2_1/CHANGES.txt) =================================================================== --- MailManager/tags/RELENG_2_1_RC6_PRE3/CHANGES.txt (rev 0) +++ MailManager/tags/RELENG_2_1_RC6_PRE3/CHANGES.txt 2006-06-26 08:49:14 UTC (rev 3239) @@ -0,0 +1,721 @@ +Version 2.1-RC6 +* BUG FIXES +- Date Parsing Error in logs (#1504722) +- Repeat of partial fix for Problems deleting tickets (#1492845) +- Repeat of partial fix for Username limitation is too short (#1501616) +- Double spaces break templates (#1505367) +- Unicode filenames in attachments break viewing (#1505895) +- Expired logouts cause issues (#1502271) +- Migration broken from 2.0 (#1506535) +- Windows support is broken (#1509270) +- Reply addresses are quoted incorrectly (#1510507) +- Missing index on categories (#1510557) +- Ticket from getQueuedTicket is not bookmarkable (#1511206) +- Performance issues with getQueuedTicket (#1511326) +- Replies to tickets are not processed via ruleset engine (#1511436) +- Queues Page is broken (#1511414) + +Version 2.1-RC5 +* BUG FIXES +- Check for References in addition to In-Reply-To headers (#1501557) +- Create tickets hardcodes Epoz (#1495917) +- Response target defaults to now (#1494223) +- Response targets for accounts are now compulsory (#1494791) +- Blank items in history (#1495097) +- Empty category choice shown on tickets page (#1496041) +- History display garbled for category changes (#1494163) +- Replied tickets are being marked as overdue (#1497428) +- Spam state not respected for new ticket alerts (#1497702) +- Empty queues break ticket display (#1498067) +- Dates not localised consistently in UI (#1494154) +- Formatting broken on templates for HTML (#1477664) - Previous fix invalid +- Problems displaying HTML messages (#1499451) +- Ruleset permissions are too strict (#1499441) +- Invalid utf-8 in from name breaks processing (#1500808) +- Delete tickets does not delete attachments (#1492850) +- Invalid utf-8 data in message-id breaks email processing (#1501609) +- Username limitation is too short (#1501616) +- Adding a queue fails (#1499449) +- Problems deleting tickets (#1492845) +- Replying to a ticket puts it on hold (#1502192) +- On Hold tickets lack actions (#1502194) +- add note no longer updates to field (#1493494) +- Queues list shows role user (#1498085) + +Version 2.1-RC4 +* BUG FIXES +- create_tables flag not used correctly (#1490966) +- Changing user to all has no effect (#1490876) +- Cannot view dequeued ticket (#1490915) +- Search always fails with invalid query (#1490871) +- Postgres encoding may still be in native charset (#1490182) +- Timestamps are not formatted correctly (#1484503) +- Incorrect abilities for new accounts (#1492592) +- Migration from 2.0 broken (#1492890) +- No highlight on subtab for ticket type (#1490998) +- Replying to tickets from queue omits To field (#1484499) +- Search results raises an error (#1484495) +- Queued events are not being processed (#1493443) +- Creating new ticket leads to an error (#1493482) +- No Send buttons on Tickets screen (#1493452) +- Overdue status is lost on migration (#1493442) +- Spam is not being processed (#1493596) +- Conflicting security declarations for QueueReportingEngine (#1493607) +- Filters breaking getMail with unicode messages (#1493620) +- AutoLogout not working correctly (#1493641) +- Add Note missing from overdue tickets (#1494173) +- Loop detection code prevents mailmanager mailing mailmanager (#1494827) +- Unicode issue in getmail (#1493483) +- Overdue transitions fail on closed tickets (#1493636) +- Notify user fails with unicode subjects (#1495112) +- Filters do not allow setting of state (#1495442) +- Create ticket can no longer generate email (#1495494) +- HTML messages are not displayed correctly (#1494158) +* BUG FIXES From 2.0.8 to 2.0.9 +- Formatting broken on templates for HTML (#1477664) +- No HTML response for HTML Required (#1472881) +- Selecting No change results in a failure (#1467786) +- Automatic addition of attachments (#1459924) +- UI Allows creation of empty groups (#1486433) +- Importing fails with alternative timezone (#1485389) +* BUG FIXES From 2.0.9 to 2.0.10 +* SECURITY +- Added in fix for potential security issue + Postgres encoding security hole (#1494281) + The code should not be vulnerable to this issue, but additional bugs in + the release may expose the vulnerability. Adding in a patch which will + prevent the exploit in all cases. + +Version 2.1-RC3 +* BUG FIXES +- setHTML raises Unicode error (#1477563) +- Queues page list has white on white (#1477727) +- Mass update selection doesn't work (#1478274) +- Selected colour leads to white on white (#1477724) +- Strings in code missing from i18n (#1482434) +- User abilities are not maintained consistently (#1481211) +- tickets list not finding tickets (#1481221) +- Editing a group to add a user fails (#1481095) +- Unicode usernames cannot be selected (#1478348) +- Add or Edit user breaks with unicode input (#1478345) +- HTML attachments aren't obvious (#1477717) +- Paging on Tickets screen broken (#1460936) +- show HTML is broken (#1477709) +- setSort on 'Queues' view returns 'Tickets' (#1477564) +- Queues page does not have status buttons (#1477689) +- AutoLogout not working correctly (#1477081) +- No strptime on windows (#1476818) +- getMail fails with TypeError (#1476878) +- Export to Excel on Reports (#1460909) +- Empty abilities are not being handled correctly (#1475604) +- History Display Issues (#1460955) +- Adding/Deleting Attachments problems (#1460943) +- Support of: text invisible (#1460915) +- Queue button doesn't highlight (#1460913) +- Performance Reports still contain queue masters (#1475530) +- getMail fails with unicode error (#1475487) +- Default template on accounts (#1464963) +- Setting template should return to template (#1464961) +- Close button not listed (#1464954) +- Restrict incoming emails with cc's to other accts to 1 tckt (#1464959) +- Return to Queue does not return to queues list (#1464947) +- Mass ticket updates not implemented (#1464953) +- Adding a customer fails (#1460922) +- Reports page is broken (#1472976) +* BUG FIXES From 2.0.7 to 2.0.8 +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.1-RC2 +* FEATURES +- Message loops are now caught based on presence of X-MailManager header +- Migration code improved to fit with the design proposed in the development + documentation +- TID in subject lines is now optional, based on database settings + although no UI pages allow this to be configured +* BUG FIXES +- State (or Status) of Ticket not display (#1455795) +- Issues with New state (#1456222) +- Deleting users via the Settings tab fails (#1456837) +- Deleting an Account with tickets fails (#1459386) +- RNG using too much entropy (#1459353) +- Fixed issue with non-ascii filter condition (#1438720) +- Tabs do not display on MySQL (#1451140) +- addUser page breaks on MySQL (#1451131) +- CookieCrumblerDisabled exception with http auth (#1451109) +- Fixed #1455297 login chews up entropy. Sessions are now not created until + user has successfully supplied a correct username and password combination. + In addition, the amount of entropy used per login has been reduced but can + still be considered secure. Tests have also been updated to reflect this. +* BUG FIXES From 2.0.7 to 2.0.8 +- Direct cycles of support_of are not allowed now. (#1353210) +- Cite last includes only replies now (#1369571) + +Version 2.1-RC1 +* BUG FIXES +- Merged in bugfixes from between 2.0.6 and 2.0.8 (Unreleased) inclusive + as denoted later in this file +- Various CSS Fixes to improve IE compatability +- MySQL compatability fixes +* IMPROVEMENTS +- Queueing Mode +- User abilities added to the database, queue allocation takes these into + consideration +- Named rulesets in the SQL database to allow for future use of multiple + rulesets per MailManager installation +- CookieCrumbler replaced with LoginHandler, allows for login sessions stored + in SQL and timing out of user logins. + +Version 2.1-beta1 +* BUG FIXES +- Merged in bugfixes from between 2.0.1-rc1 and 2.0.5 +- Minor UI fixes (#1322897, #1350233). +* IMPROVEMENTS +- Set the HTTP realm for authentication (so that auth data doesn't clash + between multiple MailManager instances and other Zope applications on the + same server) (#1356498). +- Seems to work OK with Zope 2.8.x (tested with 2.8.5) (#1328206), with the + most recent 3rd party package release. +- Works with PostgreSQL 8.1. + +Version 2.1-alpha2 +* NEW FEATURES +- Basic syndication support (both atom and RSS) of the top 20 unread tickets + for a MailManager instance. +* IMPROVEMENTS +- Tabindex is now being set on all form elements. +- There's now a print stylesheet for all MailManager pages which should hide + the non-salient information. +* BUG FIXES +- FilterSettings page now works (#1328226). +- Now set before the stylesheet is referenced which sometimes + caused the stylesheet not to load (#1328221). +- Create ticket page should now work (#1314741). + +Version 2.1-alpha1 +* IMPROVEMENTS +- Entirely reworked user interface, which: + - Looks exactly the same as it used to! + - Is XHTML 1.0 Strict and CSS 2.1 compliant. + - Should conform to at least priority 1 and probably priority 2 of the + WAI guidelines. + - Should be really easy to skin to make it look different. + - Is vastly tidied up -- Gone from over 8,000 lines of page templates to + just under 5,000! +- Initial modularisation of the reporting engine. + +Version 2.0.8 (Unreleased) +* Unfactored from 2.0.8 +- Create ticket method is highly broken + - Cannot create HTML tickets (#1466223) +- Unicode from addresses break incoming mail (#1440861) +- Valid tags are stripped from HTML on sending (#1460262) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +* BUG FIXES +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Archive and Restore functionality broken (#1452514) +- Encoding Error with signatures (#1440862) +- Non existant refresh value leads to security error (#1466274) +- Changing format away from HTML generates a Zope error (#1460216) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.8 +* BUG FIXES +- Non existant refresh value leads to security error (#1466274) +- Cannot create HTML tickets (#1466223) +- Archive and Restore functionality broken (#1452514) +- Unicode from addresses break incoming mail (#1440861) +- Changing format away from HTML generates a Zope error (#1460216) +- Email sent from Macs/Linux to Windows aren't formatted (#1440850) +- Valid tags are stripped from HTML on sending (#1460262) +- Encoding Error with signatures (#1440862) +- Installing test suite data fails (#1463368) +- Fixed issue with non-ascii filter condition (#1438720) +- Cite last includes only replies now (#1369571) +- Direct cycles of support_of are not allowed now. (#1353210) +- Tickets without a subject no longer result in a permissions error (#1436863) +- Test dataset has broken messages (#1422365) +- Account and User drop downs now work with Internet Explorer (#1410232) +- Ticket date is set to application server date by default (#1444200) +- Test suite no longer generates testsuite.log unless set in config + +Version 2.0.7 +* BUG FIXES +- Fixed the setting of next ticket id for MySQL, no longer silently ignores + the option on mailmanager creation and fixes migration (#1412787) +- Send and Close, Send Reply, Send and Hold and Add Note have all been + considerably refactored. This resolves the problem reported where outbound + messages had been silently discarded (#1415497) +- getMail could potentially drop incoming messages whilst collecting from + POP3 accounts. This has now been corrected, and a test case now exists + which reproduces the existing problem and demonstrates it being fixed. + (#1422985) +- i18n fix - on the ticket modify screen "closed" is no longer displayed as + "open" when languages other than English are used (#1423422) +* IMPROVEMENTS +- Massive improvements to the test suite. + +Version 2.0.6 +* IMPROVEMENTS +- We're now using html2text (included) instead of stripogram for converting + HTML to its plain text equivalent (when sending out HTML mail, we also + include a plain text alternative for those who can't read HTML messages). + This results in far prettier plain text conversion. +* BUG FIXES +- Notify user/group flags can now be set/cleared correctly on account + preferences (#1404595). +- Improved address validation. Well, it's now a bit more lax, but it's + completely conformant to RFCs 2821 and 2822 (#1396051). +- MySQL: Default categories are now set up at installation (#1392386). +- HTML parts of multipart/alternative messages are now encoded as UTF-8 + rather than, bizarrely, being forced into ISO-8859-1 (#1368283). +- Make sure the user is informed about *why* test data cannot be removed + (#1345788). + +Version 2.0.5 +* BUG FIXES +- MySQL: Users are now migrated correctly (#1378323) +- MySQL: Attachments can now be of virtually any size (#1378224) +- MySQL: MailManager will now start when psycopg is not present (#1378209) +- MySQL: The first message ID is now 0, fixing migration from MM11 (#1364247) +- PostgreSQL: Migration works even if response target update fails (#1374603) +- Search now works for users in all timezones (#1375345) +- The test data now sets 'routing' on the accounts (#1375764) +- MMImport.py script now uses new URL (#1378385) + +Version 2.0.4 +* BUG FIXES +- Prevent multiple users replying to the same ticket by accident (#1371269) +- Filters got broken in 2.0.3, change reverted (#1372814) +- Attachments now set the Content-Type header correctly on download (#13369349) +- Template names with trailing whitespace now work (#1363768) +- Set sql_charset on the mailmanager object during migration. (#1369347) + +Version 2.0.3 +* BUG FIXES +- Be more careful about adding and removing the test data (#1353112, #1345788). +- Improve the Unicode support with the MySQL back end (#1338614). +- Support of can now be removed with MySQL back end (#1338603). +- Fixes to the response target settings (#1336398, #1337506). +- setSession correctly clears the offset and always redirects to + Tickets (#1350429). +- Offer MySQL back end as a migration option (#1340301). +- Tickets now correctly marked as unread with MySQL back end (#1344827). + +Version 2.0.2 +* BUG FIXES +- Ignore the showHTML information in the session for plain text + emails. Reapplied previous bugfix (#1242337) +- Resetting response target to None now updates database (#1336398) +- Reports for targets fixed (#1337506) +* IMPROVEMENTS +- Now has setupdb script for MySQL users +- Split off setupdb code, now available as separate module +- Added in documentation for MySQL configuration + +Version 2.0.1-release +* BUG FIXES +- Disk usage screen now fixed for empty instances (#1244446) +- Initial Manager use now has correct roles set (#1324878) +- Altering roles now works correctly (#1324876) +- Update of response target now works correctly (#1324935) +- Removing notification flag for users/group now works correctly (#1315000) +- Migration now works correctly for 1.1 instances (#1291113) +- Setting response targets no longer generates an error (#1324884) + +Version 2.0.1-rc2 +* BUG FIXES +- No longer depends on psycopg due to import statements +- Migration fixes for MySQL users +- Fixed some scoping issues causing ZSQL methods to break due to + acquisition. +* IMPROVEMENTS +- SQL Directory no longer uses FileSystemSite.DirectoryView meaning + that the SQL methods can be overridden by 3rd parties. +- Test suite now has added hooks for overloading object types + +Version 2.0.1-rc1 +* BUG FIXES +- Test suite now covers text search cache consistency, cleared issues + with MySQL's mysql_max_allowed_packet variable +- Postgres support now appears stable + +Version 2.0.1-beta1 +* BUG FIXES +- Merged in all of the changes between 2.0r6 and 2.0r7 +- Fixed the index bug which was resulting in duplicate tickets being + displayed on the list page + +Version 2.0.1-alpha1 +* NEW FEATURES +- Adds in initial MySQL support +- SQL methods given addition parameters to deal with new MySQL support +- Vastly improved test suite - regression test suite for the database code. + +Version 2.0r7 +* BUG FIXES +- Subsequent pages for search were not being returned due to misuse of the + SESSION variable. These are now handled correctly (#1276412) +- Categories and templates were moved entirely to SQL. Upgrade needs a + migration to function correctly. (#1276414) +- listTickets method now correctly searches for subjects +- Fixes a Unicode handling error in the MailMixing class, which could + potentially block up incoming mail +* IMPROVEMENTS +- Postgres installation documentation rewritten +- Changes to loading of test datasets +- Test data set improved, now covers more functionality + +Version 2.0r6 +* BUG FIXES +- Fixed the positioning of the order by section of the listTickets query, + fixes broken ordering for search. +- The listCategories SQL method was broken, which was used by the Reports + pages. Reports for categories other than category0 were broken. + +Version 2.0 +* BUG FIXES +- Fix the security declaration of checkPOP3SSL(). + +Version 2.0 RC 3 +* NEW FEATURES +- Introduce some generalisations, ready for MySQL support in 2.0.1 +- Beginnings of epydoc API documentation. +* BUG FIXES +- Update the version number on migration. (#1229769) +- Robustify the autoreply code to deal with fatal errors. (#1240870) +- When a new message comes in with a ticket id in the subject line, + verify that the ticket already exists instead of assuming that it + does. (#1240711) +- Format the email address in the To: field for replies. (#1230837) +- Ignore the showHTML information in the session for plain text + emails. (#1242337) +- Record the logged in user who sent a reply to a ticket. (#1242958) + +Version 2.0 RC 2 +* BUG FIXES +- multipart/alternative mail with both an HTML and a plain text body now + only display one of them at a time (1227265) +- Disk usage is now displayed correctly for 0 bytes (1227745, 1227753) +- Migration updates the mm version +- Create ticket works again (1227744) + +Version 2.0 RC 1 +* BUG FIXES +- Stripogram can now be installed as a Python product in site-packages (1226633) +- Reply-To: header is used in favour of From: (1226156) +- Notifiction emails can handle non-ASCII subject lines (1224784) +- URLs are now accurate on notification emails (1224756) +- Character encodings set correctly on all web pages (1224731) +- Send & Close now goes to the next ticket (1224164) +- Improved date parsing (1223755) +- Respond By: now displayed for tickets with a response target (1222528) +- Attachment titles are now decoded correctly (1223974) + +Version 2.0 Beta 2 +* BUG FIXES +- Make the email validation less strict. (1283401) +- Customers can no longer have email addresses which are used + by an account. (1216414) +- Migration: Drop filters which refer to unknown users/groups. (1216361) +- Migration: Be more careful about coercing dates into ISO8601. (1216534) +- Clarified notification email setup. (1217403) +- Fixed Chinese translation. (1215645) +- Store time zone information in the pgsl database. + +Version 2.0 Beta 1 +* NEW FEATURES +- Added a Chinese translation. +- Add some documentation for creating the Postgres database and point to + detailed docs on the Windows installation process. +- Updated the help files to reflect the new version's feature set. +* BUG FIXES +- Make mbox exports have a more meaningful filename. +- Deal with RFC2047-encoded headers correctly. (1212035) +- Make the disk usage a bit more friendly. (1213604) +- Sanitise outgoing HTML mail (mostly to remove malicious Javascript). (1211895) +- Epoz now has a white background on all browsers. (1208912) + +Version 2.0 alpha 2 +* NEW FEATURES +- Support for retrieving POP3 mail over SSL (RFE 1204236) +- Optionally notify all in a group of new messages (RFE 1208284) +* BUG FIXES +- Help tab no longer visible after logout (1207656) +- Adding a MailManager instance now creates an initial user (1207022) +- Changes to users such as adding a signature no longer clear password (1207017) +- HTML tickets work properly (1205720, 1205717) +- Time to close tickets recorded (1204825) +- Reply to all button improved (1204805) +- Reassignment notification added (1204372) +- Groups redesigned (1204312) +- Adding/removing attachments no longer clears other form fields (1204272) +- Date translations fixed (1204268) +- Templates fixed (1204267) +- Overdue tickets function properly (1203141) +- Performance v. account report fixed (1196685) +- GetMail fixed (1196606) +- Referential integrity broken on mm_message table (1194418) +- Login link on logout page fixed (1204811) +- Signature handling improved (1204877) +- HTML email fixed (1204987) + +Version 2.0 alpha 1 +* NEW FEATURES +- A complete redesign using PostgreSQL as a replacement for the ZODB in order + to improve performance and scalability. +- Can now use SMTP servers that require a login (RFE 939720) + +Version 1.1 +* NEW FEATURES +- Internationalization of the help documentation. +* BUG FIXES +- Make sure that sending mail out is the last thing done, which should reduce + the window where a ConflictError would cause duplicate emails to be sent. +- Soft bounce messages in MMMailIn{,-Qmail}.py if the error was anything other + than a MessageParseError. Otherwise we wind up hard-bouncing (instead of + retrying) on a ConflictError. + +Version 1.1-rc5 +* BUG FIXES +- Comptatible with Zope 2.6/Python 2.1 again + +Version 1.1-rc4 +* BUG FIXES +- Standard attachments fixed (1110435) +- Clear supporter link fixed after i18n problem (1110436) + +Version 1.1-rc3 +* NEW FEATURES +[Unfortunately it was essential to add the following features at + this late stage for commercial reasons.] +- Added archive/restore tickets (RFE 953290) +- Create ticket can now have multiple attachments (RFE 987700) +- Replies can also have multiple attachments (RFE 859141) +- Standard set of attachments can be stored on the system (RFE 985469) +* BUG FIXES +- Edit of mail headers now works properly (RFE 859102) +- Fixed broken migration + +Version 1.1-rc2 +* BUG FIXES +- Now possible to add/edit account without SSL (1090041) +- Spam tickets no longer appear on the 'New' tickets list + +Version 1.1-rc1 +* NEW FEATURES +- Users notified on re-assignment of tickets (RFE 978035) +- Internationalisation (i18n) added ready for translation to other languages. +- Support for SSL connections to remote IMAP server. +- Any mail headers may be used in filters (RFE 859102) +* BUG FIXES +- Report graphs now work for user-defined categories (978404) +- File downloads now work when there is a space in the filename (985150) +- Remove support ticket feature fixed (985677) +- Users no longer notified if spam is received (1059104) +- Spam no longer displayed on default ticket listing views +- Templates with names ending in a space may now be deleted/edited (1003514) + +Version 1.0 +No changes from 1.0-rc2 + +Version 1.0-rc2 +* NEW FEATURES +- Batch classification of tickets. (RFE 859114 and 957719) +* BUG FIXES +- Migration works when filters are of mixed formats. (945956) +- Migration works when groups are of mixed formats. (945959) +- Messages from mailer-daemon with a real name do not cause a loop. (952864) +- Works on Firefox for Mac when reply has no attachment. (963291) +- Report graphs work for more than 200 tickets in a period. (964144) + +Version 1.0-rc1 +* NEW FEATURES +- Choice of date format. (RFE 869827) +- Choice of timezone (currently only on Unix). (RFE 869827) +- Script to import mail from Unix mailboxes. (RFE 903031) +- Shortcut icon. +- Importing of tickets enabled. +* IMPROVEMENTS +- Added global error slot and adjusted settings screens to use it. (873232) +- Message response form fields remembered in request. +- An instance's children may be migrated even when it is not. +* BUG FIXES +- Mail check thread delays till Zope is ready in 2.7 as well. (835642) +- GroupSettings page template works with new-style groups. (887785) +- Problems sending mail caught and reported to the user or logged. (892947) +- Message ID added to outgoing messages. (895039) +- Newlines in the Cc field no longer break the JavaScript. (904033) +- Private notes and replies no longer lose headers in migration. (904076) +- Private notes may no longer have a To field. (912534) +- Ticket ownership transferred when user deleted. (925344) +- Customers are persistent. (930654) +- Sending files with a bad mime type does not cause an exception. (934133) +- HTML templates no longer have extra breaks added. (934235) +- MailManager.getMail() returns an empty string on success. (934902) +- Add customer form checks fields are filled. (938631) +- Fixed links to AccountSettings page. (938678) + +Version 1.0-b4 +* BUG FIX +- Fixed error when a new thread is started and notification is on. + +Version 1.0-b3 +* NEW FEATURES +- Supporter mechanism for associating tickets fully implemented. +- URLs in messages rendered as hyperlinks. +- Filters can assign to groups as well as users. +* IMPROVEMENTS +- Assigned agent mailed at every new message in ticket, customer only + when he starts a new ticket. This reverses the previous behaviour. +- Ti... [truncated message content] |
From: <ke...@us...> - 2006-06-26 13:54:02
|
Revision: 3244 Author: kevca Date: 2006-06-26 06:53:43 -0700 (Mon, 26 Jun 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3244&view=rev Log Message: ----------- another testing revision Modified Paths: -------------- MailManager/tags/RELENG_2_1_RC6_PRE4/docs/development/source/sections/ruleset.xml MailManager/tags/RELENG_2_1_RC6_PRE4/docs/development/source/sections/testing.xml MailManager/tags/RELENG_2_1_RC6_PRE4/docs/development/source/sections/unicode.xml Added Paths: ----------- MailManager/tags/RELENG_2_1_RC6_PRE4/ MailManager/tags/RELENG_2_1_RC6_PRE4/tests/testDeleteTickets.py MailManager/tags/RELENG_2_1_RC6_PRE4/tests/testQueueing.py MailManager/tags/RELENG_2_1_RC6_PRE4/version.txt MailManager/tags/RELENG_2_1_RC6_PRE4/www/SystemSettings.zpt Removed Paths: ------------- MailManager/tags/RELENG_2_1_RC6_PRE4/tests/testQueueing.py MailManager/tags/RELENG_2_1_RC6_PRE4/version.txt MailManager/tags/RELENG_2_1_RC6_PRE4/www/SystemSettings.zpt Copied: MailManager/tags/RELENG_2_1_RC6_PRE4 (from rev 3240, MailManager/branches/RELENG_2_1) Modified: MailManager/tags/RELENG_2_1_RC6_PRE4/docs/development/source/sections/ruleset.xml =================================================================== --- MailManager/branches/RELENG_2_1/docs/development/source/sections/ruleset.xml 2006-06-26 13:29:13 UTC (rev 3240) +++ MailManager/tags/RELENG_2_1_RC6_PRE4/docs/development/source/sections/ruleset.xml 2006-06-26 13:53:43 UTC (rev 3244) @@ -1,4 +1,4 @@ -<!-- $Id:$ --> +<!-- $Id$ --> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" Modified: MailManager/tags/RELENG_2_1_RC6_PRE4/docs/development/source/sections/testing.xml =================================================================== --- MailManager/branches/RELENG_2_1/docs/development/source/sections/testing.xml 2006-06-26 13:29:13 UTC (rev 3240) +++ MailManager/tags/RELENG_2_1_RC6_PRE4/docs/development/source/sections/testing.xml 2006-06-26 13:53:43 UTC (rev 3244) @@ -1,4 +1,4 @@ -<!-- $Id:$ --> +<!-- $Id$ --> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" Modified: MailManager/tags/RELENG_2_1_RC6_PRE4/docs/development/source/sections/unicode.xml =================================================================== --- MailManager/branches/RELENG_2_1/docs/development/source/sections/unicode.xml 2006-06-26 13:29:13 UTC (rev 3240) +++ MailManager/tags/RELENG_2_1_RC6_PRE4/docs/development/source/sections/unicode.xml 2006-06-26 13:53:43 UTC (rev 3244) @@ -1,4 +1,4 @@ -<!-- $Id:$ --> +<!-- $Id$ --> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" Copied: MailManager/tags/RELENG_2_1_RC6_PRE4/tests/testDeleteTickets.py (from rev 3241, MailManager/branches/RELENG_2_1/tests/testDeleteTickets.py) =================================================================== --- MailManager/tags/RELENG_2_1_RC6_PRE4/tests/testDeleteTickets.py (rev 0) +++ MailManager/tags/RELENG_2_1_RC6_PRE4/tests/testDeleteTickets.py 2006-06-26 13:53:43 UTC (rev 3244) @@ -0,0 +1,193 @@ +# (c) Copyright Logicalware Ltd 2002-2005 +# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details +# including conditions of redistribution are contained in LICENSE.txt +# http://www.logicalware.org/ +# $Id: testQueueing.py 3226 2006-06-23 16:36:36Z kevca $ + + +# +# Test Deleting Tickets +# +# Test case is solely for addressing bug +# Problems deleting tickets (#1492845) at present. The +# +# + +import os, sys +if __name__ == '__main__': + execfile(os.path.join(sys.path[0], 'framework.py')) + +from Testing import ZopeTestCase + +from Products.MailManager.tests.classes import testStructures +from Products.MailManager.tests.classes import registry + +ZopeTestCase.installProduct('MailManager') +ZopeTestCase.installProduct('PlacelessTranslationService') + +import random +import time +import re +import shutil +import DocumentTemplate +import DateTime + +from Testing import makerequest +from Testing.ZopeTestCase import utils, transaction +from Products import PlacelessTranslationService + +from Products.MailManager.MailManager import manage_addMailManager + +import logging +import copy + +import mx.DateTime + + +class deletingTicketsTest(testStructures.mailManagerTestCase): + """ + """ + + _loglevels = { + 'event.mailmanager.ruleset.engine' : logging.DEBUG, + 'event.mailmanager.ruleset.actions' : logging.DEBUG, + 'event.mailmanager.ticket.notify' : logging.DEBUG, + } + + raw_msg = """Return-Path: <kev@chana.logicalprogression.example> +X-Original-To: sales@acmewidgets.example +Delivered-To: acme-sales@chana.logicalprogression.example +Received: by chana.logicalprogression.net (Postfix, from userid 503) + id 5DD8050075; Mon, 13 Jun 2005 15:45:45 +0100 (BST) +To: sales@acmewidgets.example +Subject: %(subject)s +Reply-To: %(replyto)s +Message-Id: x +Date: Mon, 13 Jun 2005 15:45:45 +0100 (BST) +From: %(from)s + +test + +Received with thanks. +-- +This email message is intended only for the addressee(s) and contains information that may be confidential and/or copyright. If you are not the intended recipient please + notify the sender by reply email and immed +iately delete this email. Use, disclosure or reproduction of this email by anyone other than the intended recipient(s) is strictly prohibited. No representation is made +that this email or any attachments are free + of viruses. Virus scanning is recommended and is the responsibility of the recipient. +""" + + + def deletingTicketsTests(self): + self.mmobj.setStartDate(mx.DateTime.Parser.DateTimeFromString("20010101 00:00")) + if self.dbplatform == 'postgres': + self.mmobj.sql_now = "CAST ('2001-01-01 12:00' AS TIMESTAMP)" + elif self.dbplatform == 'mysql': + self.mmobj.sql_now = "(SELECT CAST('2001-01-01 12:00' AS DATETIME))" + else: + raise NotImplementedError("testSending isn't implemented for platform %s yet" % self.dbplatform) + + self.webInterfaceTest() + + + def webInterfaceTest(self): + """ Delete tickets sent to sales@acmewidgets.example + + + """ + msg = self.raw_msg % { + 'from' : 'sender@acmecustomer.example', + 'subject' : 'Subject', + 'replyto' : 'sender@acmecustomer.example', + } + + account = self.mmobj.account(email='sales@acmewidgets.example')[0] + account.process(msg, REQUEST=self.request) + + res = self.mmobj.sql.listTickets(sqv_count = self.mmobj.sql_true) + self.failUnless(res[0].count == 1) + + # Try and delete the tickets via the web interface + # First step should return a confirmation option + self.request.set('section', 'delete') + self.request.set('state', 'Open') + self.request.set('account_id', 'sales@acmewidgets.example') + self.request.set('to_date', '2001-01-01 12:00') + res = self.mmobj.http_deleteTickets( + to_date='2006/12/12 12:00', + account_id='sales@acmewidgets.example', + section='delete', + REQUEST=self.request, RESPONSE=self.request.RESPONSE, + state='Open', category0='', category1='', + category2='', archive=False) + + # Doesn't work as the i18n:name stuff is broken + #regex = re.compile('(?P<count>\d+)\s*ticket\(s\) found to be deleted.') + #match = regex.search(res) + #if match: + # count = int(match.groupdict()['count']) + # print count, "tickets to be deleted" + + self.failUnless('ticket(s) found to be deleted.') + self.failIf("There are no tickets matching your criteria to delete." in res) + + # Try and delete the tickets via the web interface + self.request.set('section', 'confirm') + self.request.set('state', 'Open') + self.request.set('account_id', 'sales@acmewidgets.example') + self.request.set('to_date', '2001-01-01 12:00') + res = self.mmobj.http_deleteTickets( + to_date='2006/12/12 12:00', + account_id='sales@acmewidgets.example', + section='confirm', + REQUEST=self.request, RESPONSE=self.request.RESPONSE, + state='Open', category0='', category1='', + category2='', archive=False) + + # Ensure that the tickets are deleted + res = self.mmobj.sql.listTickets(sqv_count = self.mmobj.sql_true) + self.failUnless(res[0].count == 0) + + # Try and delete the tickets via the web interface + self.request.set('section', 'delete') + self.request.set('state', 'Open') + self.request.set('account_id', 'sales@acmewidgets.example') + self.request.set('to_date', '2001-01-01 12:00') + res = self.mmobj.http_deleteTickets( + to_date='2006/12/12 12:00', + account_id='sales@acmewidgets.example', + section='delete', + REQUEST=self.request, + RESPONSE=self.request.RESPONSE, + state='Open', category0='', category1='', + category2='', archive=False) + + self.failUnless("There are no tickets matching your criteria to delete." in res) + + self.mmobj.sql.deleteRulesetTimeEvents() + self.mmobj.sql.deleteTickets() + + + ########################################################################### + +class TestDeletingTickets(deletingTicketsTest): + + def testDeletingTickets(self): + self.dbplatform = self.config['databases']['primary_database'] + self.setupMailManager(dbplatform = self.dbplatform, debugmode = True) + self.mmobj.populateAccounts('acmestatic') + self.deletingTicketsTests() + + + + ########################################################################### + +def test_suite(): + from unittest import TestSuite, makeSuite + suite = TestSuite() + suite.addTest(makeSuite(TestDeletingTickets)) + return suite + +if __name__ == '__main__': + framework() + Deleted: MailManager/tags/RELENG_2_1_RC6_PRE4/tests/testQueueing.py =================================================================== --- MailManager/branches/RELENG_2_1/tests/testQueueing.py 2006-06-26 13:29:13 UTC (rev 3240) +++ MailManager/tags/RELENG_2_1_RC6_PRE4/tests/testQueueing.py 2006-06-26 13:53:43 UTC (rev 3244) @@ -1,338 +0,0 @@ -# (c) Copyright Logicalware Ltd 2002-2005 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ - -# -# Workflow ZopeTestCase -# -# This is a higher level set of tests for the database test suite. These -# operate against the python code in the MailManager core. This adds in -# testing for potential bugs in the calling of the ZSQL methods for each -# database platform. -# - -import os, sys -if __name__ == '__main__': - execfile(os.path.join(sys.path[0], 'framework.py')) - -from Testing import ZopeTestCase - -from Products.MailManager.tests.classes import testStructures -from Products.MailManager.tests.classes import registry - -ZopeTestCase.installProduct('MailManager') -ZopeTestCase.installProduct('PlacelessTranslationService') - -import random -import time -import re -import shutil -import DocumentTemplate -import DateTime - -from Testing import makerequest -from Testing.ZopeTestCase import utils, transaction -from Products import PlacelessTranslationService - -from Products.MailManager.MailManager import manage_addMailManager - -import logging -import copy - - -class queueingTest(testStructures.mailManagerTestCase): - """ - This test case checks out the results of the the queueing code - ensuring that it is correctly assigning tickets based on the - queue logic. - """ - - _loglevels = { - 'event.mailmanager.queueing.trace' : logging.DEBUG, - 'event.mailmanager.queueing.getTicket' : logging.DEBUG, - } - - def queueingTests(self): - #self.miscMethods() - self.reassignmentTest() - self.abilitiesTest() - self.assignmentTest() - self.rulesetQueueTest() - self.basicQueueTest() - self.webInterfaceTest() - self.queueSettingsTest() - self.performanceTest() - #self.mmobj.engine.generateDot(open('/tmp/ruleset.dot','w+b')) - #os.system('dot -Tps /tmp/ruleset.dot > /tmp/ruleset.ps') - - def abilitiesTest(self): - print "Abilities for jacques" - print "-------------------------------" - res = self.mmobj.sql.listUserAbilities(sqv_username = 'jacques') - for r in res: - print "'%s' '%s' '%s'" % (r.category0, r.category1, r.category2) - print "-------------------------------" - print - - def assignmentTest(self): - """ - Check the database method for finding queued tickets which can - dealt with by certain users, or only dealt with by certain - users. - - Languages Skills - - Jacques French, English Engineering, IT - Mark English Sales, IT - Jane English Sales, Support - John English Sales, IT - - Tickets: - - 1 - Prio3 ... French, IT (Jacques only) - 2 - Prio3 ... English, IT (Jacques, Mark, John) - 3 - Prio4 ... English, Sales (Mark, Jane, John) - 4 - Prio3 ... English, Support (Jane only) - 5 - Prio2 ... English, IT (Jacques, Mark, John) - 6 - Prio1 ... English, IT (Jacques, Mark, John) - 7 - Prio1 ... French, Engineering (Jacques only) - 8 - Prio5 ... English, Engineering (Jacques only) - """ - - tickets = self.mmobj.sql.listQueuedTickets(sqv_acceptable_user = 'jacques', sqv_nolimit = self.mmobj.sql_true) - - # Check no tickets are returned which shouldn't be - for t in tickets: - print "Ticket in result ", t, t.category0, t.category1 - if not t.id in [1,2,5,6,7,8]: - self.fail('Ticket %i should not be given to jacques' % t.id) - # Check all tickets which should be returned are returned - for id in [1,2,5,6,7,8]: - if not id in [t.id for t in tickets]: - res = self.mmobj.sql.listTickets(sqv_ticket_id = id) - for r in res: - print "'%s' '%s' '%s'" % (r.category0, r.category1, r.category2) - self.fail('Ticket %i was not given to jacques' % id) - - tickets = self.mmobj.sql.listQueuedTickets(sqv_only_user = 'jacques') - # Check no tickets are returned which shouldn't be - for t in tickets: - if not t.id in [1,7,8]: - self.fail('Ticket %i should not be given solely to jacques' % t.id) - # Check all tickets which should be returned are returned - for id in [1,7,8]: - if not id in [t.id for t in tickets]: - self.fail('Ticket %i was not given solely to jacques' % id) - - - def rulesetQueueTest(self): - """ Check the the populated tickets for the queuetests dataset - are in state Queued as expected - """ - res = self.mmobj.sql.listTickets(sqv_assigned = '_Qincoming') - for ticket in res: - print ticket.id - - - def basicQueueTest(self): - """ Check that the tickets - - """ - queuelogic = self.mmobj.queueclass(self.mmobj) - id = queuelogic.getNextTicketIdFromQueue(username='jacques', queuename='incoming') - print "Next ticket in queue is %i" % id - - def reassignmentTest(self): - """ Check that the reassignment works as expected - - We use mark as an example, as there are no tickets which only - mark can deal with. The ordering should look like: - - 3 - Prio4 ... English, Sales (Mark, Jane, John) - 2 - Prio3 ... English, IT (Jacques, Mark, John) - 5 - Prio2 ... English, IT (Jacques, Mark, John) - 6 - Prio1 ... English, IT (Jacques, Mark, John) - """ - self.mmobj.wipeDataset('queuetests') - self.mmobj.sql.setNextTicketId(sqv_id=1) - self.mmobj.populateDataset('queuetests') - self.setCurrentUser('mark', ('Manager', 'Tickets', 'Reports', 'Settings')) - - queuelogic = self.mmobj.queueclass(self.mmobj) - id = queuelogic.getNextTicketIdFromQueue(username='mark', queuename='incoming') - print "Next ticket in queue is %i" % id - - self.failUnless(id == 3, "Wrong ticket obtained from dataset") - - tobj = self.mmobj.ticket(id = id)[0] - self.mmobj.engine.processEvent('GetNextTicketFromQueue', 'mark', tobj) - - # Resolve the ticket - tobj = self.mmobj.ticket(id = id)[0] - self.mmobj.engine.processEvent('Close', 'mark', tobj) - - # A new ticket event should reopen and requeue the ticket - tobj = self.mmobj.ticket(id = id)[0] - self.mmobj.engine.processEvent('AppendToTicket', None, tobj) - - # Check the ticket was requeued - tobj = self.mmobj.ticket(id = id)[0] - self.failUnless(tobj.state == 'Queued') - - # Check that we will still obtain ticket 3 from the queue again - queuelogic = self.mmobj.queueclass(self.mmobj) - id = queuelogic.getNextTicketIdFromQueue(username='mark', queuename='incoming') - print "Next ticket in queue is %i" % id - self.failUnless(id == 3, "Wrong ticket obtained from dataset") - - # Alter the prio in the database so that we would get ticket 2 - # is the reassignment rule was not working correctly. - tobj.save(changed_by = 'mark', priority = 1) - - # This should still be ticket 3 due to the previously assignment - queuelogic = self.mmobj.queueclass(self.mmobj) - id = queuelogic.getNextTicketIdFromQueue(username='mark', queuename='incoming') - print "Next ticket in queue is %i" % id - self.failUnless(id == 3, "Wrong ticket obtained from dataset") - - - def webInterfaceTest(self): - """ Check the following User Interface modifications - - These modifications were all made as part of the Queueing code - which was added in 2.1. They make only minor changes to - functionality of the main product, but have considerable impact - when combined with Queueing and certain rulesets. Eventually this - test should move into another test case where it is more relevant. - - The following modifications were made: - - * The main index page, with all accounts assigned to a queue, - will take the user straight to a page showing a list of - queues to obtain a ticket from - * An index when only one ticket will be displayed, immediately - opens that one ticket. - * With no open tickets, and viewing the list of open tickets, - the user will be presented with an option to get a ticket - for any queues they are assignable from. - * With only one queue existing, the previous two modifications - will not show a list of queues, just one single queue. - - Start State: queuetests dataset - """ - - # Check the ticket index page - # Should redirect to open tickets page - res = self.mmobj.index_html(REQUEST=self.request) - # Should possibly be a redirect in here - self.failUnless('You currently have no open tickets. To obtain a ticket' in res) - - # Check the open tickets page, this should display "get ticket from - # queue" as an option - res = self.mmobj.Tickets(REQUEST=self.request) - self.failUnless('You currently have no open tickets. To obtain a ticket' in res) - - # Obtain a ticket from the queue - # Check that the open tickets page now redirects to the one open ticket - - self.setCurrentUser('jacques', ('Manager', 'Tickets', 'Reports', 'Settings')) - tickets = self.mmobj.sql.listQueuedTickets(sqv_queue_user = '_Qincoming') - ticket = tickets[0] - tobj = self.mmobj.ticket(id = ticket.id)[0] - print ticket.id, ticket.subject - self.mmobj.engine.processEvent('GetNextTicketFromQueue', 'jacques', tobj) - - res = self.mmobj.Tickets(REQUEST=self.request) - #print res - #self.failUnless('<!-- End form to add message. -->' in res) - - def queueSettingsTest(self): - """ Check that the queue settings correctly allow the following: - - * Queue names to 62 characters - * Group names to 128 characters - """ - - self.mmobj.addGroup(group_name='x' * 128, usernames=['jacques']) - self.mmobj.addGroup(group_name='y' * 128, usernames=['jacques']) - self.mmobj.http_addQueue(queue_name='n'*62, group_name='x'*128, REQUEST=self.request) - res = self.mmobj.sql.listQueues( - sqv_queue_name = 'n' * 62 - ) - self.failUnless(len(res) == 1) - self.mmobj.http_editQueue(queue_name='n'*62, group_name='y'*128, REQUEST=self.request) - res = self.mmobj.sql.listQueues( - sqv_queue_name = 'n' * 62 - ) - self.failUnless(len(res) == 1) - self.failUnless(res[0].assign_group == 'y' * 128) - - def performanceTest(self): - """ Check the performance for x tickets in the queue - - Really just a debugging method for development - """ - - self.setCurrentUser('jacques', ('Manager', 'Tickets', 'Reports', 'Settings')) - - for ticket_count in [1000]: - - # Create x000 queued tickets - print "Generating %i queued tickets for perf test" % ticket_count - self.mmobj.generateMail('incoming@acmewidgets.example', ticket_count, REQUEST=self.request) - - # Pull them out of the queue - print "Taking 10 tickets out of the queue" - start_time = time.time() - - loglevels = copy.copy(self._loglevels) - #loglevels.update({ - # 'event.mailmanager.database.queries' : logging.DEBUG, - # 'event.mailmanager.queueing.trace' : logging.DEBUG, - #}) - #self.setupLogging(loglevels) - - for i in range(1,10): - queuelogic = self.mmobj.queueclass(self.mmobj) - print "Finding ticket id" - - id = queuelogic.getNextTicketIdFromQueue(username='jacques', queuename='incoming') - - print "Next ticket in queue is %i" % id - tobj = self.mmobj.ticket(id = id)[0] - print "Processing event" - self.mmobj.engine.processEvent('GetNextTicketFromQueue', 'jacques', tobj) - - #self.setupLogging(self._loglevels) - - end_time = time.time() - - print "time is", end_time - start_time - - - - - ########################################################################### - -class TestQueueing(queueingTest): - - def testQueueing(self): - self.dbplatform = self.config['databases']['primary_database'] - self.setupMailManager(dbplatform = self.dbplatform, debugmode = True) - self.mmobj.populateDataset('queuetests') - self.queueingTests() - - - ########################################################################### - -def test_suite(): - from unittest import TestSuite, makeSuite - suite = TestSuite() - suite.addTest(makeSuite(TestQueueing)) - return suite - -if __name__ == '__main__': - framework() - Copied: MailManager/tags/RELENG_2_1_RC6_PRE4/tests/testQueueing.py (from rev 3242, MailManager/branches/RELENG_2_1/tests/testQueueing.py) =================================================================== --- MailManager/tags/RELENG_2_1_RC6_PRE4/tests/testQueueing.py (rev 0) +++ MailManager/tags/RELENG_2_1_RC6_PRE4/tests/testQueueing.py 2006-06-26 13:53:43 UTC (rev 3244) @@ -0,0 +1,338 @@ +# (c) Copyright Logicalware Ltd 2002-2005 +# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details +# including conditions of redistribution are contained in LICENSE.txt +# http://www.logicalware.org/ +# $Id$ + +# +# Workflow ZopeTestCase +# +# This is a higher level set of tests for the database test suite. These +# operate against the python code in the MailManager core. This adds in +# testing for potential bugs in the calling of the ZSQL methods for each +# database platform. +# + +import os, sys +if __name__ == '__main__': + execfile(os.path.join(sys.path[0], 'framework.py')) + +from Testing import ZopeTestCase + +from Products.MailManager.tests.classes import testStructures +from Products.MailManager.tests.classes import registry + +ZopeTestCase.installProduct('MailManager') +ZopeTestCase.installProduct('PlacelessTranslationService') + +import random +import time +import re +import shutil +import DocumentTemplate +import DateTime + +from Testing import makerequest +from Testing.ZopeTestCase import utils, transaction +from Products import PlacelessTranslationService + +from Products.MailManager.MailManager import manage_addMailManager + +import logging +import copy + + +class queueingTest(testStructures.mailManagerTestCase): + """ + This test case checks out the results of the the queueing code + ensuring that it is correctly assigning tickets based on the + queue logic. + """ + + _loglevels = { + 'event.mailmanager.queueing.trace' : logging.DEBUG, + 'event.mailmanager.queueing.getTicket' : logging.DEBUG, + } + + def queueingTests(self): + #self.miscMethods() + self.reassignmentTest() + self.abilitiesTest() + self.assignmentTest() + self.rulesetQueueTest() + self.basicQueueTest() + self.webInterfaceTest() + self.queueSettingsTest() + self.performanceTest() + #self.mmobj.engine.generateDot(open('/tmp/ruleset.dot','w+b')) + #os.system('dot -Tps /tmp/ruleset.dot > /tmp/ruleset.ps') + + def abilitiesTest(self): + print "Abilities for jacques" + print "-------------------------------" + res = self.mmobj.sql.listUserAbilities(sqv_username = 'jacques') + for r in res: + print "'%s' '%s' '%s'" % (r.category0, r.category1, r.category2) + print "-------------------------------" + print + + def assignmentTest(self): + """ + Check the database method for finding queued tickets which can + dealt with by certain users, or only dealt with by certain + users. + + Languages Skills + + Jacques French, English Engineering, IT + Mark English Sales, IT + Jane English Sales, Support + John English Sales, IT + + Tickets: + + 1 - Prio3 ... French, IT (Jacques only) + 2 - Prio3 ... English, IT (Jacques, Mark, John) + 3 - Prio4 ... English, Sales (Mark, Jane, John) + 4 - Prio3 ... English, Support (Jane only) + 5 - Prio2 ... English, IT (Jacques, Mark, John) + 6 - Prio1 ... English, IT (Jacques, Mark, John) + 7 - Prio1 ... French, Engineering (Jacques only) + 8 - Prio5 ... English, Engineering (Jacques only) + """ + + tickets = self.mmobj.sql.listQueuedTickets(sqv_acceptable_user = 'jacques', sqv_nolimit = self.mmobj.sql_true) + + # Check no tickets are returned which shouldn't be + for t in tickets: + print "Ticket in result ", t, t.category0, t.category1 + if not t.id in [1,2,5,6,7,8]: + self.fail('Ticket %i should not be given to jacques' % t.id) + # Check all tickets which should be returned are returned + for id in [1,2,5,6,7,8]: + if not id in [t.id for t in tickets]: + res = self.mmobj.sql.listTickets(sqv_ticket_id = id) + for r in res: + print "'%s' '%s' '%s'" % (r.category0, r.category1, r.category2) + self.fail('Ticket %i was not given to jacques' % id) + + tickets = self.mmobj.sql.listQueuedTickets(sqv_only_user = 'jacques') + # Check no tickets are returned which shouldn't be + for t in tickets: + if not t.id in [1,7,8]: + self.fail('Ticket %i should not be given solely to jacques' % t.id) + # Check all tickets which should be returned are returned + for id in [1,7,8]: + if not id in [t.id for t in tickets]: + self.fail('Ticket %i was not given solely to jacques' % id) + + + def rulesetQueueTest(self): + """ Check the the populated tickets for the queuetests dataset + are in state Queued as expected + """ + res = self.mmobj.sql.listTickets(sqv_assigned = '_Qincoming') + for ticket in res: + print ticket.id + + + def basicQueueTest(self): + """ Check that the tickets + + """ + queuelogic = self.mmobj.queueclass(self.mmobj) + id = queuelogic.getNextTicketIdFromQueue(username='jacques', queuename='incoming') + print "Next ticket in queue is %i" % id + + def reassignmentTest(self): + """ Check that the reassignment works as expected + + We use mark as an example, as there are no tickets which only + mark can deal with. The ordering should look like: + + 3 - Prio4 ... English, Sales (Mark, Jane, John) + 2 - Prio3 ... English, IT (Jacques, Mark, John) + 5 - Prio2 ... English, IT (Jacques, Mark, John) + 6 - Prio1 ... English, IT (Jacques, Mark, John) + """ + self.mmobj.wipeDataset('queuetests') + self.mmobj.sql.setNextTicketId(sqv_id=1) + self.mmobj.populateDataset('queuetests') + self.setCurrentUser('mark', ('Manager', 'Tickets', 'Reports', 'Settings')) + + queuelogic = self.mmobj.queueclass(self.mmobj) + id = queuelogic.getNextTicketIdFromQueue(username='mark', queuename='incoming') + print "Next ticket in queue is %i" % id + + self.failUnless(id == 3, "Wrong ticket obtained from dataset") + + tobj = self.mmobj.ticket(id = id)[0] + self.mmobj.engine.processEvent('GetNextTicketFromQueue', 'mark', tobj) + + # Resolve the ticket + tobj = self.mmobj.ticket(id = id)[0] + self.mmobj.engine.processEvent('Close', 'mark', tobj) + + # A new ticket event should reopen and requeue the ticket + tobj = self.mmobj.ticket(id = id)[0] + self.mmobj.engine.processEvent('AppendToTicket', None, tobj) + + # Check the ticket was requeued + tobj = self.mmobj.ticket(id = id)[0] + self.failUnless(tobj.state == 'Queued') + + # Check that we will still obtain ticket 3 from the queue again + queuelogic = self.mmobj.queueclass(self.mmobj) + id = queuelogic.getNextTicketIdFromQueue(username='mark', queuename='incoming') + print "Next ticket in queue is %i" % id + self.failUnless(id == 3, "Wrong ticket obtained from dataset") + + # Alter the prio in the database so that we would get ticket 2 + # is the reassignment rule was not working correctly. + tobj.save(changed_by = 'mark', priority = 1) + + # This should still be ticket 3 due to the previously assignment + queuelogic = self.mmobj.queueclass(self.mmobj) + id = queuelogic.getNextTicketIdFromQueue(username='mark', queuename='incoming') + print "Next ticket in queue is %i" % id + self.failUnless(id == 3, "Wrong ticket obtained from dataset") + + + def webInterfaceTest(self): + """ Check the following User Interface modifications + + These modifications were all made as part of the Queueing code + which was added in 2.1. They make only minor changes to + functionality of the main product, but have considerable impact + when combined with Queueing and certain rulesets. Eventually this + test should move into another test case where it is more relevant. + + The following modifications were made: + + * The main index page, with all accounts assigned to a queue, + will take the user straight to a page showing a list of + queues to obtain a ticket from + * An index when only one ticket will be displayed, immediately + opens that one ticket. + * With no open tickets, and viewing the list of open tickets, + the user will be presented with an option to get a ticket + for any queues they are assignable from. + * With only one queue existing, the previous two modifications + will not show a list of queues, just one single queue. + + Start State: queuetests dataset + """ + + # Check the ticket index page + # Should redirect to open tickets page + res = self.mmobj.index_html(REQUEST=self.request) + # Should possibly be a redirect in here + self.failUnless('You currently have no open tickets. To obtain a ticket' in res) + + # Check the open tickets page, this should display "get ticket from + # queue" as an option + res = self.mmobj.Tickets(REQUEST=self.request) + self.failUnless('You currently have no open tickets. To obtain a ticket' in res) + + # Obtain a ticket from the queue + # Check that the open tickets page now redirects to the one open ticket + + self.setCurrentUser('jacques', ('Manager', 'Tickets', 'Reports', 'Settings')) + tickets = self.mmobj.sql.listQueuedTickets(sqv_queue_user = '_Qincoming') + ticket = tickets[0] + tobj = self.mmobj.ticket(id = ticket.id)[0] + print ticket.id, ticket.subject + self.mmobj.engine.processEvent('GetNextTicketFromQueue', 'jacques', tobj) + + res = self.mmobj.Tickets(REQUEST=self.request) + #print res + #self.failUnless('<!-- End form to add message. -->' in res) + + def queueSettingsTest(self): + """ Check that the queue settings correctly allow the following: + + * Queue names to 62 characters + * Group names to 128 characters + """ + + self.mmobj.addGroup(group_name='x' * 128, usernames=['jacques']) + self.mmobj.addGroup(group_name='y' * 128, usernames=['jacques']) + self.mmobj.http_addQueue(queue_name='n'*62, group_name='x'*128, REQUEST=self.request) + res = self.mmobj.sql.listQueues( + sqv_queue_name = 'n' * 62 + ) + self.failUnless(len(res) == 1) + self.mmobj.http_editQueue(queue_name='n'*62, group_name='y'*128, REQUEST=self.request) + res = self.mmobj.sql.listQueues( + sqv_queue_name = 'n' * 62 + ) + self.failUnless(len(res) == 1) + self.failUnless(res[0].assign_group == 'y' * 128) + + def performanceTest(self): + """ Check the performance for x tickets in the queue + + Really just a debugging method for development + """ + + self.setCurrentUser('jacques', ('Manager', 'Tickets', 'Reports', 'Settings')) + + for ticket_count in [10]: # 1000 is a sensbile test size, but disabled for normal testing + + # Create x000 queued tickets + print "Generating %i queued tickets for perf test" % ticket_count + self.mmobj.generateMail('incoming@acmewidgets.example', ticket_count, REQUEST=self.request) + + # Pull them out of the queue + print "Taking 10 tickets out of the queue" + start_time = time.time() + + loglevels = copy.copy(self._loglevels) + #loglevels.update({ + # 'event.mailmanager.database.queries' : logging.DEBUG, + # 'event.mailmanager.queueing.trace' : logging.DEBUG, + #}) + #self.setupLogging(loglevels) + + for i in range(1,10): + queuelogic = self.mmobj.queueclass(self.mmobj) + print "Finding ticket id" + + id = queuelogic.getNextTicketIdFromQueue(username='jacques', queuename='incoming') + + print "Next ticket in queue is %i" % id + tobj = self.mmobj.ticket(id = id)[0] + print "Processing event" + self.mmobj.engine.processEvent('GetNextTicketFromQueue', 'jacques', tobj) + + #self.setupLogging(self._loglevels) + + end_time = time.time() + + print "time is", end_time - start_time + + + + + ########################################################################### + +class TestQueueing(queueingTest): + + def testQueueing(self): + self.dbplatform = self.config['databases']['primary_database'] + self.setupMailManager(dbplatform = self.dbplatform, debugmode = True) + self.mmobj.populateDataset('queuetests') + self.queueingTests() + + + ########################################################################### + +def test_suite(): + from unittest import TestSuite, makeSuite + suite = TestSuite() + suite.addTest(makeSuite(TestQueueing)) + return suite + +if __name__ == '__main__': + framework() + Deleted: MailManager/tags/RELENG_2_1_RC6_PRE4/version.txt =================================================================== --- MailManager/branches/RELENG_2_1/version.txt 2006-06-26 13:29:13 UTC (rev 3240) +++ MailManager/tags/RELENG_2_1_RC6_PRE4/version.txt 2006-06-26 13:53:43 UTC (rev 3244) @@ -1 +0,0 @@ -2.1-rc6-pre3 Copied: MailManager/tags/RELENG_2_1_RC6_PRE4/version.txt (from rev 3243, MailManager/branches/RELENG_2_1/version.txt) =================================================================== --- MailManager/tags/RELENG_2_1_RC6_PRE4/version.txt (rev 0) +++ MailManager/tags/RELENG_2_1_RC6_PRE4/version.txt 2006-06-26 13:53:43 UTC (rev 3244) @@ -0,0 +1 @@ +2.1-rc6-pre4 Deleted: MailManager/tags/RELENG_2_1_RC6_PRE4/www/SystemSettings.zpt =================================================================== --- MailManager/branches/RELENG_2_1/www/SystemSettings.zpt 2006-06-26 13:29:13 UTC (rev 3240) +++ MailManager/tags/RELENG_2_1_RC6_PRE4/www/SystemSettings.zpt 2006-06-26 13:53:43 UTC (rev 3244) @@ -1,386 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" i18n:attributes="lang language; xml:lang language" - xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - xmlns:i18n="http://xml.zope.org/namespaces/i18n" - i18n:domain="mailmanager" - tal:define="page string:Settings; - view string:system; - help string:HelpSystem; - section python:request.get('section', 'delete'); - action python:request.get('action', ''); - dummy python:request.RESPONSE.setHeader('content-type', 'text/html;;charset=UTF-8')"> - <head metal:use-macro="container/master/macros/head"> - <title metal:fill-slot="title">Logicalware MailManager : System Settings</title> - </head> - <body metal:use-macro="here/master/macros/template"> - <div metal:fill-slot="portlets"> - <div class="box"> - <h2 i18n:translate="options">Options</h2> - <ul> - <li tal:attributes="class python:section in ('delete', 'confirm') and 'current' or 'not-current'"><a href="SystemSettings?section=delete" i18n:translate="delete_archive">Delete & Archive Tickets</a></li> - <li tal:attributes="class python:section == 'restore' and 'current' or 'not-current'"><a href="SystemSettings?section=restore" i18n:translate="restore_tickets">Restore Tickets</a></li> - <li tal:attributes="class python:section == 'tickets' and 'current' or 'not-current'"><a href="SystemSettings?section=tickets" i18n:translate="set_ticket_list_headers">Set Ticket List Headers</a></li> - <li tal:attributes="class python:section == 'datetime' and 'current' or 'not-current'"><a href="SystemSettings?section=datetime" i18n:translate="date_and_timezone">Date & Timezone</a></li> - <li tal:attributes="class python:section == 'diskusage' and 'current' or 'not-current'"><a href="SystemSettings?section=diskusage" i18n:translate="disk_usage">Disk Usage</a></li> - <li tal:attributes="class python:section == 'testdata' and 'current' or 'not-current'"><a href="SystemSettings?section=testdata" i18n:translate="test_data">Test Data</a></li> - </ul> - </div> - </div> - - <div metal:fill-slot="main_content" tal:omit-tag=""> - <form accept-charset="utf-8" class="blockform" action="deleteTickets" method="post" tal:condition="python:section == 'delete'"> - <h2 i18n:translate="delete_archive">Delete & Archive Tickets</h2> - - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td> - <label for="account_id" tal:attributes="class python:test(request.has_key('flag_account_id'), 'error', None)" i18n:translate="account_label">Account</label> - </td> - <td> - <select tal:attributes="tabindex tabindex/next" id="account_id" name="account_id"> - <option value="">Any</option> - <option tal:repeat="acc python:here.sql.listAccounts(sqv_email='')" tal:attributes="value acc/email" tal:content="acc/email">te...@ex...</option> - </select> - </td> - </tr> - - <tr> - <td> - <label for="to_date" tal:attributes="class python:test(request.has_key('flag_to_date'), 'error', None)" i18n:translate="delete_tickets_older" >Delete tickets older than</label> - </td> - <td> - <select tal:attributes="tabindex tabindex/next" id="to_date" name="to_date:date"> - <option tal:attributes="value python:(DateTime()).HTML4()" i18n:translate="now">Now</option> - <option tal:attributes="value python:(DateTime()-1).HTML4()" i18n:translate="yesterday">Yesterday</option> - <option tal:attributes="value python:(DateTime()-7).HTML4()" i18n:translate="1_week">1 week</option> - <option tal:attributes="value python:(DateTime()-14).HTML4()" i18n:translate="2_weeks">2 weeks</option> - <option selected="selected" tal:attributes="value python:(DateTime()-31).HTML4()" i18n:translate="1_month">1 month</option> - <option tal:attributes="value python:(DateTime()-62).HTML4()" i18n:translate="x_months"><span i18n:name="x">2</span> months</option> - <option tal:attributes="value python:(DateTime()-92).HTML4()" i18n:translate="x_months"><span i18n:name="x">3</span> months</option> - <option tal:attributes="value python:(DateTime()-182).HTML4()" i18n:translate="x_months"><span i18n:name="x">6</span> months</option> - <option tal:attributes="value python:(DateTime()-274).HTML4()" i18n:translate="x_months"><span i18n:name="x">9</span> months</option> - <option tal:attributes="value python:(DateTime()-365).HTML4()" i18n:translate="1_year">1 year</option> - <option tal:attributes="value python:(DateTime()-730).HTML4()" i18n:translate="x_years"><span i18n:name="x">2</span> years</option> - <option tal:attributes="value python:(DateTime()-1095).HTML4()" i18n:translate="x_years"><span i18n:name="x">3</span> years</option> - </select> - </td> - </tr> - - <tr> - <td> - <label tal:attributes="class python:test(request.has_key('flag_status'), 'error', None)" i18n:translate="status">Status</label> - </td> - <td> - <input tal:attributes="tabindex tabindex/next" id="status_closed" name="state:list" value="Closed" type="checkbox" checked="checked" /> - <label for="status_closed" class="checkbox" i18n:translate="closed">Closed</label><br /> - <input tal:attributes="tabindex tabindex/next" id="status_spam" name="state:list" value="Spam" type="checkbox" checked="checked" /> - <label for="status_spam" class="checkbox" i18n:translate="spam">Spam</label> - </td> - </tr> - - <tr tal:repeat="cat python:[cat for cat in here.sql.listCategories() if cat['enabled']]"> - <td> - <label tal:define="catid cat/id" tal:attributes="for string:category$catid" tal:content="cat/label">Category</label> - </td> - <td> - <select tal:define="catid cat/id" tal:attributes="tabindex tabindex/next; name string:category$catid; id string:category$catid"> - <option value="" i18n:translate="any">Any</option> - <option tal:repeat="item python:here.sql.listCategoryChoices(sqv_category_id=catid)" tal:attributes="value catid" tal:content="item/choice">Sales lead</option> - </select> - </td> - </tr> - - <tr> - <td> </td> - <td> - <input tal:attributes="tabindex tabindex/next" type="checkbox" id="archive" name="archive" value="1" /> - <label for="archive" class="checkbox" i18n:translate="save_deleted">Save deleted tickets in an archive file.</label> - </td> - </tr> - - <tr> - <td> </td> - <td> - <input type="hidden" name="section" value="delete" /> - <input type="hidden" name="count" value="1" /> - <input tal:attributes="tabindex tabindex/next" type="submit" i18n:attributes="value" value="Delete" /> - </td> - </tr> - </table> - </form> - - <form accept-charset="utf-8" class="blockform" method="post" action="restoreTickets" enctype="multipart/form-data" tal:condition="python:section == 'restore'"> - <h2 i18n:translate="restore_tickets">Restore Tickets</h2> - - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td> - <label for="archive_file" tal:attributes="class python:test(request.has_key('flag_archive_file'), 'error', None)" i18n:translate="archive_file">Archive File</label> - </td> - <td> - <input tal:attributes="tabindex tabindex/next" type="file" id="archive_file" name="archive_file" /> - </td> - </tr> - - <tr> - <td> </td> - <td> - <input tal:attributes="tabindex tabindex/next" type="submit" value="Restore" i18n:translate="restore" /> - </td> - </tr> - </table> - </form> - - - <div tal:condition="python:section == 'confirm'"> - <div tal:define="ticketList python:(here.sql.listTickets( - sqv_account_id=request.account_id, - sqv_to_date=request.to_date, - sqv_count=request.count, - sqv_state=request.state, - sqv_category0=request.get('category0'), - sqv_category1=request.get('category1'), - sqv_category2=request.get('category2'), - )); - count python:ticketList and ticketList[0].count or 0"> - <form accept-charset="utf-8" class="blockform" action="deleteTickets" method="post" tal:condition="python:count and request.has_key('state')"> - <h2 i18n:translate="delete_archive">Delete & Archive Tickets</h2> - <p tal:condition="exists:request/state" i18n:translate="x_tickets_to_be_deleted"> - <strong tal:content="python:count" i18n:name="x">12</strong> ticket(s) found to be deleted. - </p> - <p><strong i18n:translate="note">Note:</strong> - <strong i18n:translate="delete_cannot_be_restored" tal:condition="not:exists:request/archive">Deleted tickets cannot be restored.</strong> - <strong i18n:translate="archive_file_can_be_used_for_restore" tal:condition="exists:request/archive">The archive file can be used to restore the deleted tickets.</strong> - </p> - <p> - <input tal:attributes="tabindex tabindex/next" type="submit" value="Submit" /> - <input tal:repeat="cat python:here.sql.listCategories()" tal:attributes="tabindex tabindex/next; value python:request.get('category%d' % cat['id'], ''); name python:'category%d' % cat['id']" type="hidden" /> - <input tal:attributes="tabindex tabindex/next; value request/account_id" type="hidden" name="account_id" /> - <input tal:attributes="tabindex tabindex/next; value request/to_date" type="hidden" name="to_date:date" /> - <input tal:repeat="item request/state" tal:attributes="tabindex tabindex/next; value item" type="hidden" name="state:list" /> - <input tal:condition="exists:request/archive" type="hidden" name="archive" value="1" /> - <input type="hidden" name="section" value="confirm" /> - </p> - </form> - <p tal:condition="not:count" i18n:translate="no_tickets_found_to_delete"> - There are no tickets matching your criteria to delete. - </p> - </div> - </div> - - <form accept-charset="utf-8" class="blockform" action="setTicketsScreen" method="post" tal:condition="python:section == 'tickets'"> - <h2 i18n:translate="set_ticket_list_headers">Set Ticket List Headers</h2> - - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td style="vertical-align: top"> - <label i18n:translate="display_columns">Display columns</label> - </td> - <td> - <input type="checkbox" id="ticket_id" name="ticket_id" value="1" tal:attributes="tabindex tabindex/next; checked python:test(here.display_column['ticket_id'], 'checked', None)" /> - <label for="ticket_id" class="checkbox" i18n:translate="ticket_number">Ticket number</label><br /> - - <input type="checkbox" name="state" id="state" value="1" tal:attributes="tabindex tabindex/next; checked python:test(here.display_column['state'], 'checked', None)" /> - <label for="state" class="checkbox" i18n:translate="state">Status</label><br /> - - <input type="checkbox" name="assigned" id="assigned" value="1" tal:attributes="tabindex tabindex/next; checked python:test(here.display_column['assigned'], 'checked', None)" /> - <label for="assigned" class="checkbox" i18n:translate="assigned_to">Assigned to</label><br /> - - <input type="checkbox" name="title" id="title" value="1" tal:attributes="tabindex tabindex/next; checked python:test(here.display_column['title'], 'checked', None)" /> - <label for="title" class="checkbox" i18n:translate="subject">Subject</label><br /> - - <input type="checkbox" name="from_name" id="from_name" value="1" tal:attributes="tabindex tabindex/next; checked python:test(here.display_column['from_name'], 'checked', None)" /> - <label for="from_name" class="checkbox" i18n:translate="from">From</label><br /> - - <input type="checkbox" name="time" id="time" value="1" tal:attributes="tabindex tabindex/next; checked python:test(here.display_column['time'], 'checked', None)" /> - <label for="time" class="checkbox" i18n:translate="time">Time</label><br /> - - <input type="checkbox" name="date" id="date" value="1" tal:attributes="tabindex tabindex/next; checked python:test(here.display_column['date'], 'checked', None)" /> - <label for="date" class="checkbox" i18n:translate="date">Date</label><br /> - - <input type="checkbox" name="priority" id="priority" value="1" tal:attributes="tabindex tabindex/next; checked python:test(here.display_column['priority'], 'checked', None)" /> - <label for="priority" class="checkbox" i18n:translate="priority">Priority</label><br /> - - <span tal:repeat="cat python:[cat for cat in here.sql.listCategories() if cat['enabled']]" tal:omit-tag=""> - <input type="checkbox" name="category0" id="category0" value="1" tal:attributes="tabindex tabindex/next; name python:'category%d' % cat['id']; id python:'category%d' % cat['id']; checked python:test(here.display_column['category%d' % cat['id']], 'checked', None)" /> - <label tal:attributes="for python:'category%d' % cat['id']" class="checkbox" tal:content="cat/label">Category</label><br /> - </span> - </td> - </tr> - - <tr> - <td> - <label for="refresh:int" tal:attributes="class python:test(request.has_key('flag_refresh:int'), 'error', None)" i18n:translate="refresh_screen">Refresh screen</label> - </td> - - <td> - <select tal:attributes="tabindex tabindex/next" id="refresh:int" name="refresh:int"> - <option value="0" tal:attributes="selected python:test(here.refresh == 0, 1, None)" i18n:translate="never">Never</option> - <option value="1" tal:attributes="selected python:test(here.refresh == 1, 1, None)" i18n:translate="1_minute">1 minute</option> - <option tal:repeat="min python:range(2, 31)" tal:attributes="selected python:test(here.refresh == min, 1, None); value min" i18n:translate="x_minutes"> - <tal:span i18n:name="x" tal:content="min">2</tal:span> minutes - </option> - </select> - </td> - </tr> - - <tr> - <td nowrap="nowrap"> - <label for="batch_size:int" tal:attributes="class python:test(request.has_key('flag_batch_size:int'), 'error', None)" i18n:translate="number_of_tickets_to_display">Display no. of tickets</label> - </td> - <td> - <select tal:attributes="tabindex tabindex/next" id="batch_size:int" name="batch_size:int"> - <option tal:repeat="num python:range(10, 105, 5)" tal:attributes="value num; selected python:test(num == here.batch_size, 1, None)" tal:content="num">15</option> - </select> - </td> - </tr> - - <tr> - <td> </td> - <td> - <input tal:attributes="tabindex tabindex/next" value="Save" i18n:attributes="value" type="submit" /> - </td> - </tr> - </table> - </form> - - - <form class="blockform" action="setDateAndTimezone" method="post" tal:condition="python:section == 'datetime'"> - <h2 i18n:translate="date_and_timezone">Date & Timezone</h2> - - <table border="0" cellpadding="0" cellspacing="0"> - <tr> - <td> - <label for="date_format" i18n:translate="date_format">Date Format</label> - </td> - - <td> - <select id="date_format" name="date_format" tal:attributes="tabindex tabindex/next"> - <option tal:repeat="fmt here/dateFormats" tal:attributes="value fmt; selected python:test(fmt == here.date_format, 'selected', None)" tal:content="fmt">dd.mm.yy</option> - </select> - </td> - </tr> - - <tr> - <td> - <label for="timezone" i18n:translate="timezone">Timezone</label> - </td> - <td> - <select id="timezone" name="timezone" tal:attributes="tabindex tabindex/next"> - <option tal:repeat="tz here/listTimeZones" tal:attributes="value tz; selected python:test(tz == here.timezone, 'selected', None)" tal:content="python:tz.replace('_', ' ')">Europe/London</option> - </select> - </td> - </tr> - - <tr> - <td> </td> - <td> - <input tal:attributes="tabindex tabindex/next" value="Save" i18n:attributes="value" type="submit" /> - </td> - </tr> - </table> - - <p> </p> - </form> - - <div tal:condition="python:section == 'diskusage'" tal:omit-tag=""> - <h2 i18n:translate="disk_usage">Disk Usage</h2> - <p> - <label i18n:translate="disk_usage">Disk Usage</label> - <span tal:content="here/diskUsage">1024 MB</span> - </p> - <p i18n:translate="disk_approx"> - Note: This disk usage figure is an approximation. - </p> - </div> - - <form action="setTestData" method="post" tal:condition="python:section == 'testdata'"> - <h2 i18n:translate="test_data">Test Data</h2> - <p style="float: right"> - <input tal:condition="python:here.isTestDataInstalled('acmewidgets')" type="submit" name="action" value="Remove Test Data"/> - <input tal:condition="python:not here.isTestDataInstalled('acmewidgets')" type="submit" name="action" value="Deploy Test Data"/> - <input type="hidden" name="section" value="testdata" /> - </p> - <p i18n:translate="describe_test_data">Test data is provided with your MailManager trial instance so that you can get a feel for how the software should work once you have it configured correctly.</p> - <p i18n:translate="test_data_removed">Test data can be removed when no longer required.</p> - </form> - - <div tal:condition="python:section == 'debug'"> - - <h2>Developer and Debugging information</h2> - <p> - Warning, this page is intended for developers only. Please do not use - the functionality on this page unless you know what you are doing. - The functions on this page may currently be broken or may not do as - you expect. - </p> - - <form action="setTestData" method="post"> - <h2 i18n:translate="test_data">Test Data</h2> - <p> - <select name='action'> - <option value="Remove Test Data">Remove Test Data </option> - <option value="Deploy Test Data">Deploy Test Data</option> - </select> - <br/> - Dataset: <input type="text" name="dsname" value="acmewidgets" /> - <input type="hidden" name="section" value="testdata" /> - <input type="submit"/> - </p> - </form> - - <form action="populateQueueTests" method="post"> - <h2>Queue Test Data</h2> - <p> - <select name='action'> - <option value="Remove Test Data">Remove Test Data </option> - <option value="Deploy Test Data">Deploy Test Data</option> - </select> - <br/> - - Dataset: <input type="text" ... [truncated message content] |
From: <ke...@us...> - 2006-06-26 20:23:31
|
Revision: 3252 Author: kevca Date: 2006-06-26 13:23:12 -0700 (Mon, 26 Jun 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3252&view=rev Log Message: ----------- Tagging release for testing Modified Paths: -------------- MailManager/tags/RELENG_2_1_RC6_PRE4/docs/development/source/sections/ruleset.xml MailManager/tags/RELENG_2_1_RC6_PRE4/docs/development/source/sections/testing.xml MailManager/tags/RELENG_2_1_RC6_PRE4/docs/development/source/sections/unicode.xml Added Paths: ----------- MailManager/tags/RELENG_2_1_RC6_PRE4/ MailManager/tags/RELENG_2_1_RC6_PRE4/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_1_RC6_PRE4/MMImportHandler.py MailManager/tags/RELENG_2_1_RC6_PRE4/MailManager.py MailManager/tags/RELENG_2_1_RC6_PRE4/Makefile MailManager/tags/RELENG_2_1_RC6_PRE4/sql/v2_1/addMessage.zsql MailManager/tags/RELENG_2_1_RC6_PRE4/tests/testDatabase.py Removed Paths: ------------- MailManager/tags/RELENG_2_1_RC6_PRE4/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_1_RC6_PRE4/MMImportHandler.py MailManager/tags/RELENG_2_1_RC6_PRE4/MailManager.py MailManager/tags/RELENG_2_1_RC6_PRE4/Makefile MailManager/tags/RELENG_2_1_RC6_PRE4/sql/v2_1/addMessage.zsql MailManager/tags/RELENG_2_1_RC6_PRE4/tests/testDatabase.py Copied: MailManager/tags/RELENG_2_1_RC6_PRE4 (from rev 3250, MailManager/branches/RELENG_2_1) Deleted: MailManager/tags/RELENG_2_1_RC6_PRE4/Extensions/TicketPluggableBrain.py =================================================================== --- MailManager/branches/RELENG_2_1/Extensions/TicketPluggableBrain.py 2006-06-26 17:32:03 UTC (rev 3250) +++ MailManager/tags/RELENG_2_1_RC6_PRE4/Extensions/TicketPluggableBrain.py 2006-06-26 20:23:12 UTC (rev 3252) @@ -1,1799 +0,0 @@ -# (c) Copyright Logicalware Ltd 2002-2006 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ - -# Zope modules. -from Globals import InitializeClass -from AccessControl import ClassSecurityInfo, getSecurityManager -from DateTime import DateTime -import mx.DateTime -from zExceptions.unauthorized import Unauthorized -from zExceptions import BadRequest - -# Modules from this package -from Products.MailManager.MailMixin import MailMixin - -# 3rd party modules. -try: - from psycopg import Binary -except ImportError: - pass -try: - from stripogram import html2safehtml -except ImportError: - from Products.stripogram import html2safehtml - -from Products.MailManager.support.html2text import html2text - -# Python library modules. -import re -import operator -from email.Utils import formataddr, parseaddr, make_msgid -from smtplib import SMTPRecipientsRefused - -from Products.MailManager import ruleset - -import zLOG - -from Products.MailManager.ruleset.common import historyItem, ticketState, NoTransitionError, SecurityError - -import logging -from Products.MailManager.support.logger import log - -import pprint - -from AccessControl import getSecurityManager - -from Products.MailManager.support.strptime import strptime - - -from_escape = re.compile('^>*From ') -sig_remover = re.compile('^-- $.*\Z', re.DOTALL | re.MULTILINE) - - -class TicketPluggableBrain(MailMixin): - - security = ClassSecurityInfo() - security.setPermissionDefault('MailManager Manage Tickets', - ['Tickets', 'Customer']) - - security.declareProtected('MailManager Manage Tickets', 'checkAuthorized') - def checkAuthorized(self): - user = getSecurityManager().getUser() - - if not 'Tickets' in user.roles: - username = user.getUserName() - addrs = self.sql.getCustomerAddresses(sqv_username=username) - if not self['from_email'] in [x.access_email for x in addrs]: - raise Unauthorized("You are not allowed to view this ticket") - - security.declarePublic('__bobo_traverse__') - def __bobo_traverse__(self, REQUEST=None, name=None): - """ Traversal hook to do namespace mangling for putting http in - from of requests. - - We rename the request for local methods so that we are allowing - mangling - attempting to get addMessageToTicket will return - the method http_addMessageToTicket. This allows us to split - off the interface layer from API calls. - """ - # First of all, try and mangle http_ in front of requests - ret = getattr(self, 'http_%s' % name, None) - if ret: return ret - - # Then try and obtain without mangling - ret = getattr(self, name, None) - if ret: return ret - else: - ret = self[name] - if ret: return ret - return name - - - security.declareProtected('MailManager Manage Tickets', 'index_html') - def index_html(self, REQUEST): - """Provide a view for the simple direct traversal.""" - return self.ticket_index_html(REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'findSupporter') - def findSupporter(self, REQUEST, SESSION): - """Find a supporter for this Ticket. - - This method doesn't really do what you might expect. It sets the - find_supporter session variable to the current ticket id. It then - shows the ticket index so the end user can find another ticket. - When viewing other tickets, they will now have an option to make - the other ticket a supporter of the current ticket. This is mainly - handled in the zpts. - """ - SESSION.set('find_supporter', self.id) - return self.ticket_index_html(REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'change') - def change(self, REQUEST): - """Return a view allowing the details to be changed.""" - REQUEST.set('details', 'y') - return self.ticket_index_html(REQUEST) - - - security.declareProtected('MailManager Manage Tickets', 'http_save') - def http_save(self, subject='', assigned='', state='', priority=0, - category0=None, category1=None, category2=None, support_of=None, - event='', transition=None, REQUEST=None, RESPONSE=None): - """ Save changes to a ticket. - - Check what has been changed, record changes in history and then make - the changes to the ticket. - - transition is the id of transition from the ruleset engine which is - being used to make this change. - - event is the name of the event which is causing the transition to - occur. - - FIXME: RULESETMODS - """ - # Sort out encodings first - subject = unicode(subject, 'utf-8') - assigned = unicode(assigned, 'utf-8') - if category0 is not None: - category0 = unicode(category0, 'utf-8') - if category1 is not None: - category1 = unicode(category1, 'utf-8') - if category2 is not None: - category2 = unicode(category2, 'utf-8') - - if REQUEST is not None: - # Check for errors (if called through the web). - error = None - if state == 'Closed' != self.state and not self._okToClose(): - error = 'All supporting tickets must be Closed.' - REQUEST.set('flag_supporters', True) - if support_of and support_of != self.support_of: - # Check ticket to be supported exists, is not Closed and does - # not already support self. - results = self.ticket(id=support_of) - if not results: - error = 'Ticket %06d does not exist.' % support_of - REQUEST.set('flag_support_of', True) - elif results[0].state == 'Closed': - error = 'Ticket %06d is Closed.' % support_of - REQUEST.set('flag_support_of', True) - elif results[0].support_of == self.id: - error = ('Ticket %06d itself supports this ticket.' % - support_of) - REQUEST.set('flag_support_of', True) - if error is not None: - REQUEST.set('error', error) - REQUEST.set('details', 'y') - return self.ticket_index_html(REQUEST) - - changed_by = getSecurityManager().getUser().getUserName() - if changed_by == 'Anonymous User': changed_by = '' - - self.save( - changed_by = changed_by, - subject = subject, - assigned = assigned, - state = state, - priority = priority, - category0 = category0, - category1 = category1, - category2 = category2, - support_of = support_of, - event = event, - transition = transition - ) - - if RESPONSE is not None: - return RESPONSE.redirect('%s/ticket/%06d' % (self.getBaseURL(), - self.id)) - - security.declareProtected('MailManager Manage Tickets', 'save') - def save(self, changed_by, subject='', assigned='', state='', priority=0, - category0=None, category1=None, category2=None, support_of=None, - event='', transition=None): - """ Save changes to a ticket. - - Check what has been changed, record changes in history and then make - the changes to the ticket. - - transition is the id of transition from the ruleset engine which is - being used to make this change. - - event is the name of the event which is causing the transition to - occur. - - changed_by : - - """ - changes = {} - set_date_Closed = False - clear_date_Closed = False - - # Changes need to be done to the local object as well as set in the - # database. Some changes need special SQL parameters. - - if state and state != self.state: - if state == 'Closed': - # Record the date & time the ticket was Closed. - set_date_Closed = True - elif self.state == 'Closed': - # Clear date_Closed when we re-open a ticket. - clear_date_Closed = True - changes['state'] = self.state - if subject and subject != self.subject: - changes['subject'] = self.subject - self.subject = subject - if assigned and assigned != self.assigned: - changes['assigned'] = self.assigned - self.assigned = assigned - # If the assigned user was changed by someone other than the new - # user and the 'Notify users of new tickets' flag is set then let - # the new user know they have got a ticket. - if assigned != changed_by: - if self.account(email=self.account_id)[0].notify_user: - # Hook in user notification - self.notifyUser(new_id=assigned) - if state and state != self.state: - changes['state'] = self.state - self.state = state - if priority and priority != self.priority: - changes['priority'] = self.priority - self.priority = priority - if category0 and category0 != self.category0: - changes['category0'] = self.category0 - self.category0 = category0 - if category1 and category1 != self.category1: - changes['category1'] = self.category1 - self.category1 = category1 - if category2 and category2 != self.category2: - changes['category2'] = self.category2 - self.category2 = category2 - if support_of is not None and support_of != self.support_of: - changes['support_of'] = self.support_of or 0 - self.support_of = support_of - - if changes: - - # If the transition/event don't actually change anything we - # wouldn't want to record them, so don't set these before the - # conditional test above - - changes['transition'] = transition - changes['event'] = event - - self.sql.addHistory(sqv_ticket_id=self.id, - sqv_subject=changes.get('subject', ''), - sqv_assigned=changes.get('assigned', ''), - sqv_state=changes.get('state', ''), - sqv_priority=changes.get('priority'), - sqv_category0=changes.get('category0', ''), - sqv_category1=changes.get('category1', ''), - sqv_category2=changes.get('category2', ''), - sqv_support_of=changes.get('support_of', ''), - sqv_transition=changes.get('transition', ''), - sqv_event=changes.get('event', ''), - sqv_changed_by=changed_by) - self.sql.editTicket(sqv_id=self.id, - sqv_subject=subject or self.subject, - sqv_assigned=assigned or self.assigned, - sqv_state=state or self.state, - sqv_priority=priority or self.priority, - sqv_category0=category0 or self.category0 or '', - sqv_category1=category1 or self.category1 or '', - sqv_category2=category2 or self.category2 or '', - sqv_set_date_Closed=set_date_Closed, - sqv_clear_date_Closed=clear_date_Closed) - # Icky, but let's update the support_of separately. - # This allows the use of clear_support_of to set None - # values - if support_of == 0: - self.sql.editTicket(sqv_id = self.id, sqv_clear_support_of = True) - elif support_of: - self.sql.editTicket(sqv_id = self.id, sqv_set_support_of = True, sqv_support_of = support_of) - - - security.declareProtected('MailManager Manage Tickets', 'headers') - def headers(self, REQUEST): - """Show or hide the message's raw headers.""" - if REQUEST.SESSION.has_key('show_headers'): - del REQUEST.SESSION['show_headers'] - else: - REQUEST.SESSION.set('show_headers', True) - return self.ticket_index_html(REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'showHTML') - def showHTML(self, REQUEST): - """Should html_body be displayed?""" - show_html = REQUEST.SESSION.get('show_html') - if show_html is None: - return 0 - return show_html.get(self.absolute_url(), 0) - - security.declareProtected('MailManager Manage Tickets', 'toggleShowHTML') - def toggleShowHTML(self, REQUEST): - """Change whether html_body is displayed.""" - show_html = REQUEST.SESSION.get('show_html', {}) - if not show_html: - REQUEST.SESSION.set('show_html', show_html) - url = self.absolute_url() - show_html[url] = not show_html.get(url, 0) - return REQUEST.RESPONSE.redirect('%s/ticket/%06d' % (self.getBaseURL(), - self.id)) - - security.declareProtected('MailManager Manage Tickets', 'viewTicket') - def viewTicket(self): - """ User interface hook to note the ticket has been viewed - - We are currently tracking unread status in two places, once in - the ticket itself in sql (2.0 functionality) and once as an - attribute in the ruleset via hooks. The latter will be used in - future revisions to allow for more complex rulesets - """ - self.sql.markRead(sqv_id = self.id) - - # Generate and process the event - user = getSecurityManager().getUser().getUserName() - try: - self.engine.processEvent('ViewTicket', user, self) - except NoTransitionError: - pass - - transitions = True - while transitions: - try: - self.engine.processEvent('Epsilon', None, self) - print "Transition made" - except NoTransitionError: - print "No transition made" - transitions = False - - - security.declareProtected('MailManager Manage Tickets', 'export') - def export(self, RESPONSE): - """Export all of a ticket's messages in mbox format. TODO: export - the attachments too. This is probably going to involve creating - an email object to let it do the appropriate construction. - """ - RESPONSE.setHeader('content-type', 'text/plain') - RESPONSE.setHeader('Content-Disposition', - 'attachment; filename=mbox.txt') - write = RESPONSE.write # Saves a lookup every time - for msg in self.sql.listMessages(sqv_ticket_id = self.id): - date = DateTime(msg.msg_date).rfc822() - from_email = msg.from_email or self.from_email - write("From %s %s\n" % (from_email.encode('utf-8'), date)) - write(msg.raw_headers.encode('utf-8')) - write('\n\n') - for line in msg.body.splitlines(): - if from_escape.match(line): - line = u">" + line - write(line.encode('utf-8')) - write('\n') - write ('\n') - return - - security.declarePrivate('notifyUser') - def notifyUser(self, new_id=None): - """Email the assigned user that the ticket has been created/updated. - - By default notify the user the ticket is presently assigned to, if - new_id is set then notify the new user with that username. - """ - if self.state == 'Spam': - return - - log('%sNotifyUser alerting %s' % (self.getLogName(), new_id.encode('utf-8')), - logging.DEBUG, 'ticket.notify') - - mail_to = self.sql.listUsers(sqv_username=new_id or self.assigned)[0].email - # Guard against agent setting personal address to same as account's. - if mail_to == self.account_id: - return - - # Check to see if server_url and virtual_root are set. If so, use them. - # Otherwise, use getBaseURL(). Note that getBaseURL() may not work - # properly if called when the REQUEST object is not available. - if self.server_url: - if self.server_url.endswith('/'): - url = self.server_url + self.virtual_root - else: - url = self.server_url + '/' + self.virtual_root - else: - url = self.getBaseURL() - - zmsg = self.sql.listMessages(sqv_ticket_id=self.id)[-1] - body = u"""You have a new or updated ticket. - -From: %s -To: %s -Subject: %s -Full details: -%s/ticket/%06d""" % (zmsg.from_email, zmsg.msg_to, zmsg.subject, - url, self.id) - msg = self.createMessage(mail_to=mail_to, - mail_from=self.account_id, - subject=u'You have a new or updated ticket', - body=body)[0] - self.sendMessage(self.account_id, mail_to, msg) - - security.declarePrivate('notifyGroup') - def notifyGroup(self, group_name): - """Notify members of a group that a new mail has arrived. - - Do not notify the group member to whom the ticket has been assigned as - they will usually have been notified by the notifyUser() method. - """ - if self.state == 'Spam': - return - zmsg = self.sql.listMessages(sqv_ticket_id=self.id)[-1] - subject = u'%s has a new or updated ticket' % self.assigned - body = u"""%s has a new or updated ticket. - -From: %s -To: %s -Subject: %s -Full details: -%s/ticket/%06d""" % (self.assigned, zmsg.from_email, zmsg.msg_to, zmsg.subject, - self.absolute_url(), self.id) - - log('%sNotifying group memebers of %s' % (self.getLogName(), group_name.encode('utf-8')), - logging.DEBUG, 'ticket.notify') - - for member in self.sql.listGroupMembers(sqv_group_name=group_name): - log('%sNotifying user %s' % (self.getLogName(), member.username.encode('utf-8')), - logging.DEBUG, 'ticket.notify') - mail_to = self.sql.listUsers(sqv_username=member.username)[0].email - msg = self.createMessage(mail_to=mail_to, - mail_from=self.account_id, - subject=subject, - body=body)[0] - self.sendMessage(self.account_id, mail_to, msg) - - - ## Sending Methods #################################################### - # - # The following methods all handle sending replies from the user - # interface. - # - # http_sendReply \ - # http_sendAndClose \ sendMethod - addNote - # http_sendAndHold / - # http_addNote / - # - # The http methods are partially there for historical reasons, as these - # are what the ZPTs call. These in turn all call the refactored method - # sendMessage, adding information on what method made the call by - # passing the event and change_state variables. - # - # Replacing the http_ methods with a more generic method may cause - # problems by allowing the end user to manually submit with event or - # change_state variables. Permissions would need to be analysed before - # making this change. - # - - security.declareProtected('MailManager Manage Tickets', 'http_sendReply') - def http_sendReply(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, user_signature=None, next_id=None, - offset=None, last_modified=None, - REQUEST=None, RESPONSE=None): - """ Send a reply to a customer. """ - - return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, - subject=subject, body=body, body_is_html=body_is_html, - user_signature=user_signature, next_id=next_id, - last_modified=last_modified, offset=offset, - change_state=None, - event='SendReply', - REQUEST=REQUEST, RESPONSE=RESPONSE) - - security.declareProtected('MailManager Manage Tickets', 'http_sendAndClose') - def http_sendAndClose(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, user_signature=None, next_id=None, - offset=None, last_modified=None, - REQUEST=None, RESPONSE=None): - """ Send a reply and close the ticket. """ - - return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, - subject=subject, body=body, body_is_html=body_is_html, - user_signature=user_signature, next_id=next_id, - last_modified=last_modified, offset=offset, - change_state='Closed', - event='SendAndClose', - REQUEST=REQUEST, RESPONSE=RESPONSE) - - security.declareProtected('MailManager Manage Tickets', 'http_sendAndHold') - def http_sendAndHold(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, user_signature=None, next_id=None, - last_modified=None, offset=None, - REQUEST=None, RESPONSE=None): - """ Send a reply and put the ticket on hold. """ - - return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, - subject=subject, body=body, body_is_html=body_is_html, - user_signature=user_signature, next_id=next_id, - last_modified=last_modified, offset=offset, - change_state = 'Hold', - event = 'SendAndHold', - REQUEST=REQUEST, RESPONSE=RESPONSE) - - - security.declareProtected('MailManager Manage Tickets', 'http_addNote') - def http_addNote(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=False, user_signature=None, - last_modified=None, REQUEST=None, RESPONSE=None): - """ Add a note to a ticket. No mail is generated """ - - return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, - subject=subject, body=body, body_is_html=body_is_html, - user_signature=user_signature, sendmail=False, - last_modified=last_modified, - change_state = None, - event = 'AddNote', - REQUEST=REQUEST, RESPONSE=RESPONSE) - - security.declareProtected('MailManager Manage Tickets', 'http_Close') - def http_Close(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, user_signature=None, next_id=None, - offset=None, last_modified=None, - REQUEST=None, RESPONSE=None): - """ Close the ticket. - - This method is a little larger than the previous wrappers as it - does not actually send any message, so the combined sendMethod - cannot be used. - """ - # First, check for any modifications to the ticket - if last_modified: - mdate = str(self.sql.getTicketLastModified( - sqv_ticket_id = self.id)[0].last_modified.timeTime()) - if not last_modified == mdate: - REQUEST.set('error', 'This ticket has been modified. Please check it, and then retry your request') - return self.ticket_index_html(REQUEST) - - changed_by = getSecurityManager().getUser().getUserName() - if changed_by == 'Anonymous User': changed_by = '' - self.save(changed_by=changed_by, state='Closed', event='Close') - - # Redirect to the next ticket in the list, or just to the main - # tickets screen if no next ticket exists. - if RESPONSE is not None: - if next_id and offset: - RESPONSE.redirect('%s/ticket/%06d?offset:int=%d' % ( - self.getBaseURL(), next_id, offset)) - else: - RESPONSE.redirect('%s/Tickets' % self.getBaseURL()) - - - def sendMethod(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=False, user_signature=None, next_id=None, - last_modified=None, offset=None, change_state=None, - transition=None, event=None, sendmail=True, - REQUEST=None, RESPONSE=None): - """ Common underlying method for sending replies/adding notes - - This method handles all of the various http_ request method which - handle a user request to send a reply, or add a note to a ticket. - In order to avoid code duplication, this method takes care of - generating error messages, and sanitising user input, before - passing it to the addNote method to act on the request. - - - @param mail_to: The intended recipient - should be blank for notes - @param cc: Carbon Copy recipients - should be blank for notes - @param bcc: Blind Carbon Copy recipients - should be blank for notes - @type mail_to string (utf-8) - @type cc: string (utf-8) - @type bcc: string (utf-8) - @type subject: string (utf-8) - @type body_is_html: boolean - @type body: string (utf-8) - @type user_signature: string (utf-8) - @type next_id: int - @type last_modified: string (ascii, iso date format) - @type offset: int - @type change_state: string (utf-8) - @type transition: string (utf-8) - @type event: string (utf-8) - @type sendmail: boolean - """ - - # Sanitize the string parameters - # Parameters are in utf-8, convert to unicode to avoid problems - if mail_to is not None: mail_to = mail_to.decode('utf-8') - if cc is not None: cc = cc.decode('utf-8') - if bcc is not None: bcc = bcc.decode('utf-8') - if subject is not None: subject = subject.decode('utf-8') - if body is not None: body = body.decode('utf-8') - if user_signature is not None: user_signature = user_signature.decode('utf-8') - if change_state is not None: change_state= change_state.decode('utf-8') - if transition is not None: transition = transition.decode('utf-8') - if event is not None: event = event.decode('utf-8') - body_is_html = int(body_is_html) - - # First, check for any modifications to the ticket - if last_modified: - mdate = str(self.sql.getTicketLastModified( - sqv_ticket_id = self.id)[0].last_modified.timeTime()) - if not last_modified == mdate: - REQUEST.set('error', 'This ticket has been modified. Please check it, and then retry your request') - return self.ticket_index_html(REQUEST) - - if change_state: - if change_state == 'Closed' and not self._okToClose(): - if REQUEST is not None: - REQUEST.set('error', 'All supporting tickets must be Closed.') - REQUEST.set('flag_supporters', 1) - return self.ticket_index_html(REQUEST) - raise BadRequest, 'All supporting tickes must be Closed.' - - if sendmail: - if not mail_to: - if REQUEST is not None: - REQUEST.set('error', 'The To field may not be empty') - REQUEST.set('flag_mail_to', 1) - return self.ticket_index_html(REQUEST) - raise BadRequest, 'The To field may not be empty' - - if not self.validEmail(mail_to): - if REQUEST is not None: - REQUEST.set('error', '%s is not a valid email address.' % mail_to) - REQUEST.set('flag_mail_to', 1) - return self.ticket_index_html(REQUEST) - raise BadRequest, 'The To field may not be empty' - - else: - if mail_to or cc or bcc: - if REQUEST is not None: - REQUEST.set('error', - 'Private notes may not be sent to anyone.') - if mail_to: - REQUEST.set('flag_mail_to', True) - # Since the user probably didn't ask for this field to - # be filled in the first place helpfully remove it. - REQUEST.set('mail_to', '') - if cc: - REQUEST.set('flag_cc', True) - if bcc: - REQUEST.set('flag_bcc', True) - return self.ticket_index_html(REQUEST) - raise BadRequest, 'Private notes may not be sent to anyone.' - - # from_name will be the username of the logged in user. This will be - # stored in the database but will not be included in the outgoing mail. - from_name = getSecurityManager().getUser().getUserName() - - # Get attachments out of the session - if REQUEST is not None: - attachments = REQUEST.SESSION.get('attachments', {}) - if attachments: - del REQUEST.SESSION['attachments'] - else: - attachments = {} - - if REQUEST is not None: - raw_headers = 'X-IP-Address: %s' % REQUEST.REMOTE_ADDR - remote_addr = REQUEST.REMOTE_ADDR - else: - raw_headers = '' - remote_addr = None - - # Generate and process the event - # Catch security and permissions violations - try: - if event: - user = getSecurityManager().getUser().getUserName() - self.engine.processEvent(event, user, self) - - transitions = True - while transitions: - try: - self.engine.processEvent('Epsilon', None, self) - print "Transition made" - except NoTransitionError: - print "No transition made" - transitions = False - except SecurityError, e: - - get_transaction().abort() - - error_msg = 'Your attempt to send this message failed due to a security ' - error_msg += 'failure: %s ' % str(e) - - if REQUEST is not None: - REQUEST.set('error', error_msg) - return self.ticket_index_html(REQUEST) - else: - raise BadRequest, error_msg - - try: - self.addNote(mail_to = mail_to, cc = cc, bcc = bcc, subject = subject, - body = body, body_is_html = body_is_html, - raw_headers = raw_headers, - attachments = attachments, from_name = from_name, - user_signature = user_signature, sendmail=sendmail, - change_state = change_state, remote_addr = remote_addr, - transition = transition, event = event) - except SMTPRecipientsRefused, e: - - get_transaction().abort() - - error_msg = 'The mailserver returned a failure whilst trying to ' - error_msg += 'send this message. Check your mail addresses are correct. ' - error_msg += 'The exact error recieved is %s ' % str(e) - - if REQUEST is not None: - REQUEST.set('error', error_msg) - REQUEST.set('flag_mail_to', True) - REQUEST.set('flag_cc', True) - REQUEST.set('flag_bcc', True) - return self.ticket_index_html(REQUEST) - else: - raise BadRequest, error_msg - - # Actions complete, either show the updated ticket, or in the case - # of tickets with modified state, redirect to the next ticket - - if change_state == 'Closed' or change_state == 'Hold': - # Redirect to the next ticket in the list, or just to the main - # tickets screen if no next ticket exists. - if RESPONSE is not None: - if next_id and offset: - RESPONSE.redirect('%s/ticket/%06d?offset:int=%d' % ( - self.getBaseURL(), next_id, offset)) - else: - RESPONSE.redirect('%s/Tickets' % self.getBaseURL()) - - else: - # Redirect to show the updated ticket - if RESPONSE is not None: - return RESPONSE.redirect('%s/ticket/%06d' % (self.getBaseURL(), - self.id)) - - - - security.declareProtected('MailManager Manage Tickets', 'addNote') - def addNote(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, attachments = {}, from_name = '', - user_signature=None, sendmail=0, raw_headers = '', - change_state = None, last_modified=None, - remote_addr = None, transition=None, event=None): - """ Add a copy of a message to a ticket. - - Also actually send the message to the customer, unless the - message is just a private note. - - Note that the signature is added to the message before it is added - to sql, and that is is not added before being passed to createMessage. - This is because the createMessage method adds on a signature on its - own accord. This should eventually be refactored, so that the message - being saved to the db and the message generated by createMessage are - one and the same. - - This method - - """ - - log('%sAdding message to ticket' % (self.getLogName()), - logging.DEBUG, 'ticket.addnote') - - #if change_state: - # # Forcably set the new state. - # changed_by = getSecurityManager().getUser().getUserName() - # if changed_by == 'Anonymous User': changed_by = '' - # self.save(changed_by=changed_by, state=change_state, event=event) - - # The first time we reply check promptness. - if not self.date_responded: - self.sql.setDateResponded(sqv_id=self.id) - - # Get the account signature - account = self.sql.listAccounts(sqv_email=self.account_id)[0] - if account.signature: - account_signature = (account.signature_text, - account.html_signature) - else: - account_signature = None - - - # Obtain body or html_body with appended signatures - if body_is_html: - log('%sSanitising HTML body' % (self.getLogName()), - logging.DEBUG, 'ticket.addnote') - body, html_body = '', body - body_with_sig = body - html_body_with_sig = self._addSignature(html_body, user_signature, - account_signature, html=1) - else: - html_body = '' - body_with_sig = self._addSignature(body, user_signature, account_signature) - html_body_with_sig = '' - - # Get an SQL id for this message. Note that the SQL ids are sequential - # ids to identify each message in mailmanager. The message_id otoh, is - # there to uniquely identify the message globally. They are entirely - # independant fields in the SQL database. - msg_id = self.sql.getNextMessageId()[0].id - - # Generate a message id for this message - message_id = self.generateMessageId(self.id, msg_id) - - log('%sStoring message in database' % (self.getLogName()), - logging.DEBUG, 'ticket.addnote') - - self.sql.addMessage(sqv_id=msg_id, - sqv_ticket_id=self.id, - sqv_message_id=message_id, - sqv_from_name=from_name, - sqv_from_email=self.account_id, - sqv_subject=subject, - sqv_msg_to=mail_to, - sqv_cc=cc, - sqv_bcc=bcc, - sqv_reply_to='', - sqv_raw_headers=raw_headers, - sqv_body=body_with_sig, - sqv_html_body=html_body_with_sig) - - for attach in attachments.values(): - # IE sets the filename to being the full path - title=attach['filename'].split('\\')[-1] - log('%sAdding attachment %s' % (self.getLogName(), title), - logging.DEBUG, 'ticket.addnote') - - if self.dbplatform == 'postgres': - self.sql.addAttachment(sqv_message_id=msg_id, - sqv_title=title, - sqv_content_type=attach['content-type'], - sqv_is_file=self.sql_truevar, - sqv_body=Binary(attach['data']), - sqv_dangerous=self.sql_falsevar) - else: - self.sql.addAttachment(sqv_message_id=msg_id, - sqv_title=title, - sqv_content_type=attach['content-type'], - sqv_is_file=self.sql_truevar, - sqv_body=attach['data'], - sqv_dangerous=self.sql_falsevar) - - if sendmail: - # A very irritating hack. The ZSQL methods will not accept None as - # a null so we need to use '' in sql.addAttachment. However the - # createMessage has to be able to distinguish between an empty - # body/html_body (body='', html_body='') and the body/html_body not - # present (body=None, html_body=None). This can be removed when the - # following Zope bug is fixed: - # http://www.zope.org/Collectors/Zope/556 - if body_is_html: - body = None - else: - html_body = None - msg, recipients = self.createMessage(mail_to=mail_to, - mail_from=self.account_id, - attach=attachments, - cc=cc, - bcc=bcc, - subject=subject, - body=body, - html_body=html_body, - user_signature=user_signature, - account_signature=account_signature, - message_id=message_id, - remote_addr = remote_addr) - - log('%sSending outgoing message' % (self.getLogName()), - logging.DEBUG, 'ticket.addnote') - - self.sendMessage(self.account_id, - reduce(operator.add, recipients.values()), - msg) - - - security.declareProtected('MailManager Manage Tickets', 'http_returnToQueue') - def http_returnToQueue(self, mail_to, cc='', bcc='', subject='', - body='', body_is_html=0, user_signature=None, - sendmail=0, next_id=None, last_modified=None, - offset=None, REQUEST=None, RESPONSE=None): - """ Returns the current ticket to the queue - - This method returns the current ticket to the queue. It then - redirects to the next ticket, or to the tickets list should - no next ticket exist. - """ - # First, check for any modifications to the ticket - if last_modified: - mdate = str(self.sql.getTicketLastModified( - sqv_ticket_id = self.id)[0].last_modified.timeTime()) - if not last_modified == mdate: - REQUEST.set('error', 'This ticket has been modified. Please check it, and then retry your request') - return self.ticket_index_html(REQUEST) - - # Generate and process the event - user = getSecurityManager().getUser().getUserName() - self.engine.processEvent('ReturnToQueue', user, self) - - transitions = True - while transitions: - try: - self.engine.processEvent('Epsilon', None, self) - print "Transition made" - except NoTransitionError: - print "No transition made" - transitions = False - - # Redirect to next ticket or to the tickets list - if RESPONSE is not None: - if next_id is not None and offset is not None: - RESPONSE.redirect('%s/ticket/%06d?offset:int=%d' % ( - self.getBaseURL(), next_id, offset)) - else: - RESPONSE.redirect('%s/Tickets' % self.getBaseURL()) - - - def getDefaultTemplate(self, REQUEST): - """ Method to set the default template in the ticket response - - This method is called from the ticket index page. It will set the - default template for replies, providing that no template has been - set already. This method will translate the template_name - and possibly update the body and body_is_html request variables - """ - - # Check to see if a template name is already set - if REQUEST.get('template_name', None) is not None: - return unicode(REQUEST['template_name'], 'utf-8') - - # Otherwise, this is a new reponse, set the template automatically - else: - - # Template has not already been set, get the default - account = self.sql.listAccounts(sqv_email=self.account_id)[0] - template_name = account.default_template - - # Obtain the template details, deailing with the cite_last - # method appropriately - if template_name == 'cite_last': - - # Find the last actual message - msgs = self.sql.listMessages(sqv_ticket_id=self.id) - # Skip over any notes - for position in range(1,len(msgs)+1): - zmsg = msgs[-position] - if not zmsg.msg_to == '': break - # Remove the signature and split the plain text body per - # line, start with > for quote chars. Note that we don't - # currently quote HTML, but that would be a nice addition - # in the future. - cite = sig_remover.sub('', zmsg.body) - body = u''.join(['> %s' % line for line - in cite.splitlines(1)]) - template_is_html = 0 - - elif template_name is not None and not (template_name == ''): - template = self._getTemplate(template_name) - body = template['body'] - template_is_html = template['html'] - - else: - template_is_html = False - template_name = u'' - body = u'' - - # Is this an HTML template? Check the settings flag - if template_is_html: - # Set the body_is_html flag so that the correct editor is - # used for the reply - REQUEST.set('body_is_html', True) - else: - # If HTMLRequired is set, convert to HTML for the editing pane - # Fixes bug - Formatting broken on templates for HTML (#1477664) - if self.HTMLRequired(): - body = self._makeHTML(body) - REQUEST.set('body_is_html', True) - else: - REQUEST.set('body_is_html', False) - - REQUEST.set('body', body) - - # Return value of 'No Change' to UI - return '' - - - def http_setTemplate(self, REQUEST): - """ Handler for user selecting a new template to use in a message - - This method is called when the end user clicks the arrow button - to the right of the template. This method then replaces the - content of the current message body with the given template, - setting the editor to HTML/plain text as appropriate. If - template_name is None then do nothing. - - Request variables: - - * template_name : the template name we are to replace with - * body_is_html : the format to encode the resulting body in - * body : altered to be the content of the given tempalte - """ - template_name = REQUEST.get('template_name', '').decode('utf-8') - - if template_name: - - # Obtain the template details, deailing with the cite_last - # method appropriately - if template_name == 'cite_last': - body = self._citeLastMessage() - template_is_html = 0 - else: - template = self._getTemplate(template_name) - # Replace template paramaters - body = self.replaceTemplateParameters(template['body']) - template_is_html = template['html'] - - # Is this an HTML template? Check the settings flag - if template_is_html: - # Set the body_is_html flag so that the correct editor is - # used for the reply - REQUEST.set('body_is_html', True) - else: - # If HTMLRequired is set, convert to HTML for the editing pane - # Fixes bug - Formatting broken on templates for HTML (#1477664) - if self.HTMLRequired(): - body = self._makeHTML(body) - REQUEST.set('body_is_html', True) - else: - REQUEST.set('body_is_html', False) - - REQUEST.set('body', body) - REQUEST.set('autojump', True) - - return self.index_html(REQUEST) - - security.declareProtected('MailManager Manage Tickets', '_citeLastMessage') - def _citeLastMessage(self): - """ Obtain a citation of the last message - - Returns a utf-8 encoded string - """ - - # Find the last actual message - msgs = self.sql.listMessages(sqv_ticket_id=self.id) - # Skip over any notes - for position in range(1,len(msgs)+1): - zmsg = msgs[-position] - if not zmsg.msg_to == '': break - # Remove the signature and split the plain text body per - # line, start with > for quote chars. Note that we don't - # currently quote HTML, but that would be a nice addition - # in the future. - cite = sig_remover.sub('', zmsg.body) - body = ''.join(['> %s' % line.encode('utf-8') for line - in cite.splitlines(1)]) - return body - - security.declareProtected('MailManager Manage Tickets', 'replaceTemplateParameters') - def replaceTemplateParameters(self, template_body): - """ Replace the metavariables in the templates with the right content - - Currently supported is: - - %T - ticket id - %L - cite last message - """ - # Replace any paramaters in this code - template_body = template_body.replace('%T', str(self.id)) - template_body = template_body.replace('%L', self._citeLastMessage()) - return template_body - - - security.declareProtected('MailManager Manage Tickets', 'renderHTML') - def renderHTML(self, msg_id): - """ Temporary method to render a message as an iframe """ - return u""" - <iframe src="ticket/%i/messageContent?msg_id=%i" width="100%%" - style="height:25.0em" scrolling="no" - marginwidth="0" marginheight="0"> - </iframe> - """ % (self.id, msg_id) - - security.declareProtected('MailManager Manage Tickets', 'messageContent') - def messageContent(self, msg_id, REQUEST): - """ Returns the content of an HTML message as an HTML page """ - msg = self.sql.listMessages(sqv_sql_id=msg_id)[0] - return self.MessageTemplate(messageContent=msg.html_body) - - def http_setHTML(self, REQUEST): - """ Handler for user changing the format of a message body - - This method is called when the end user clicks the arrow button - to the right of the HTML/Plain text option. This method then - replaces the content of the current message body based on - given template, converting to HTML/plain text as appropriate. - - Request variables: - - * new_body_format: the format to encode the resulting body in - * body_is_html : gets set to the format the body is now in - * body : altered so that it is in the correct format - """ - body_is_html = int(REQUEST.get('body_is_html', False)) - new_body_html = int(REQUEST.get('new_body_html', False)) - body = REQUEST.get('body', '').decode('utf-8') - - if body_is_html and not new_body_html: - # Convert from html to text - body = html2text(body) - - if not body_is_html and new_body_html: - # Convert from text to html - body = self._makeHTML(body) - - REQUEST.set('body', body.encode('utf-8')) - REQUEST.set('body_is_html', new_body_html) - REQUEST.set('autojump', True) - - return self.index_html(REQUEST) - - security.declarePrivate('_getTemplate') - def _getTemplate(self, template_name): - templates = self.sql.getTemplate(sqv_name = template_name) - if len(templates) > 0: - return templates[0] - else: - return {} - - security.declareProtected('MailManager Manage Tickets', 'HTMLRequired') - def HTMLRequired(self): - """Determine whether the message must be composed in HTML. - - Currently HTML is required when an HTML account signature is - in use. Once HTML user signatures are added they will also - force HTML composition. - """ - account = self.sql.listAccounts(sqv_email=self.account_id)[0] - return account.signature and account.html_signature - - security.declareProtected('MailManager Manage Tickets', 'getTo') - def getTo(self): - """Get the email address for the To: line. - - Format the name and email address nicely, eg: - Andrew Veitch <an...@lo...> - """ - return formataddr( (self.from_name, self.from_email) ) - - security.declareProtected('MailManager Manage Tickets', 'formatAddr') - def formatAddr(self, addrtuple): - """Format an address pair (name, email) for reply - - This is here purely so the ticket_index_html.zpt file can reference - the email.Utils package method. - """ - return formataddr( addrtuple ) - - security.declareProtected('MailManager Manage Tickets', 'getReplyTo') - def getReplyTo(self): - """Get the Reply-To header from the first message in the ticket. - - Used instead of From: as the address to reply to, if present. - """ - zmsg = self.sql.listMessages(sqv_ticket_id=self.id)[0] - return zmsg.reply_to - - security.declareProtected('MailManager Manage Tickets', 'getReplyAll') - def getReplyAll(self): - """Get the address for Reply to All. - - Include addresses in the To field and in the Cc field of the original - mail. Do not return duplicate addresses. Only the actual email portion - of the address should be returned. - """ - zmsg = self.sql.listMessages(sqv_ticket_id=self.id)[0] - emails = [parseaddr(addr)[1] - for addr in (self._tokenizer(zmsg.msg_to) + - self._tokenizer(zmsg.cc)) - if addr] - # We only want to copy in extra To addresses so ignore the account id - # and ignore the user's own address in case they copied themselves into - # their original email. - if self.account_id in emails: - emails.remove(self.account_id) - if self.from_email in emails: - emails.remove(self.from_email) - # Make unique - return ', '.join(dict.fromkeys(emails).keys()) - - security.declareProtected('MailManager Manage Tickets', 'addAttachment') - def addAttachment(self, REQUEST, RESPONSE, standard_attach = None, - file_attach=None): - """Add an attachment to a reply. - - The attachment can either be one of the standard attachments or an - uploaded file. Attachments are stored in the SESSION until the message - is sent. - """ - attachments = REQUEST.SESSION.get('attachments', {}) - if standard_attach: - file = self.attachments[standard_attach] - attachments[standard_attach] = {'filename': standard_attach, - 'content-type': file.content_type, - 'data': file.manage_FTPget()} - if file_attach: - file = {'filename': file_attach.filename, - 'content-type': - file_attach.headers.get('content-type', - 'application/octet-stream'), - 'data': file_attach.read()} - attachments[file_attach.filename] = file - REQUEST.SESSION.set('attachments', attachments) - REQUEST.set('autojump', True) - return self.ticket_index_html(REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'delAttachment') - def delAttachment(self, REQUEST, RESPONSE, ids=[]): - """Delete an attachment.""" - for id in ids: - attachments = REQUEST.SESSION['attachments'] - del attachments[id] - REQUEST.SESSION.set('attachments', attachments) - return self.ticket_index_html(REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'getPrevNext') - def getPrevNext(self, request): - """ - Get the previous and next ticket ids. The supplied variable offset - is the current position in the list of tickets. We retreive the - ticket previous to the offset and the one after. Return value is - a tuple containing the previous ticket id, and the next ticket id. - """ - offset = request.get('offset') - if offset is None: - return (None, None) - - if offset == 0: - # If we are at the start of the result set, the previous ticket - # does not exist. Only retreive two tickets. - results = self.listTickets(request, offset=0, limit=2) - if not results: - return (None, None) - - if len(results) == 2: - return (None, results[1].id) - else: - return (None, None) - - else: - # We are in the middle of a result set, so we want to try and - # retrieve three tickets (previous, current, next) - results = self.listTickets(request, offset=max(offset-1, 0), limit=3) - if not results: - return (None, None) - - if len(results) == 3: - return(results[0].id, results[2].id) - elif len(results) > 0: - return(results[0].id, None) - else: - return (None, None) - - ######################################################################### - # - # Information methods - # - # The following methods are called from ZPTs in order to get information - # about the current ticket - # - - security.declareProtected('MailManager Manage Tickets', 'getHistory') - def getHistory(self): - """ Returns a structure which can be used to give a human readable - history of a ticket's lifecycle. - - @return: list of dictionarys ('string' : 'struct') - - FIXME: This needs support for i18n added - - The results of this method are shown on the side of the ticket - display. This shows a list of history items, each with a number - of key:value entries depicting what was changed. The value of - each of the entries is a struct, allowing us to generate img - tags or similar if necessary. - - State - Subject - Assigned - Priority - Category - Support of - Changed - - The ruleset engine adds in the following two history items - - event - allows retrieval of the user action or otherwise - which caused the ticket to be changed. - transition - allows retrieval of what actions should have - occurred at the given time. - - Queue States - Queue Name - Epsilon Transitions - - See the developers documentation for more information - """ - - histdata = [] # Data returned at the end, order list of tuples (name, value) - histitem = {} # the current item - nextitem = None - - # Iterate through the history items in increasing order - history = self.sql.listHistor... [truncated message content] |
From: <ke...@us...> - 2006-06-27 11:20:57
|
Revision: 3258 Author: kevca Date: 2006-06-27 04:20:24 -0700 (Tue, 27 Jun 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3258&view=rev Log Message: ----------- Tagging 2.1-rc6-pre5 Modified Paths: -------------- MailManager/tags/RELENG_2_1_RC6_PRE5/docs/development/source/sections/ruleset.xml MailManager/tags/RELENG_2_1_RC6_PRE5/docs/development/source/sections/testing.xml MailManager/tags/RELENG_2_1_RC6_PRE5/docs/development/source/sections/unicode.xml Added Paths: ----------- MailManager/tags/RELENG_2_1_RC6_PRE5/ MailManager/tags/RELENG_2_1_RC6_PRE5/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_1_RC6_PRE5/MMImportHandler.py MailManager/tags/RELENG_2_1_RC6_PRE5/MailManager.py MailManager/tags/RELENG_2_1_RC6_PRE5/Makefile MailManager/tags/RELENG_2_1_RC6_PRE5/sql/v2_1/addMessage.zsql MailManager/tags/RELENG_2_1_RC6_PRE5/sql/v2_1/listQueuedTickets.zsql MailManager/tags/RELENG_2_1_RC6_PRE5/support/login.py MailManager/tags/RELENG_2_1_RC6_PRE5/tests/testDatabase.py MailManager/tags/RELENG_2_1_RC6_PRE5/version.txt MailManager/tags/RELENG_2_1_RC6_PRE5/www/SystemSettings.zpt MailManager/tags/RELENG_2_1_RC6_PRE5/www/macros.zpt MailManager/tags/RELENG_2_1_RC6_PRE5/www/ticket_index_html.zpt Removed Paths: ------------- MailManager/tags/RELENG_2_1_RC6_PRE5/Extensions/TicketPluggableBrain.py MailManager/tags/RELENG_2_1_RC6_PRE5/MMImportHandler.py MailManager/tags/RELENG_2_1_RC6_PRE5/MailManager.py MailManager/tags/RELENG_2_1_RC6_PRE5/Makefile MailManager/tags/RELENG_2_1_RC6_PRE5/sql/v2_1/addMessage.zsql MailManager/tags/RELENG_2_1_RC6_PRE5/sql/v2_1/listQueuedTickets.zsql MailManager/tags/RELENG_2_1_RC6_PRE5/support/login.py MailManager/tags/RELENG_2_1_RC6_PRE5/tests/testDatabase.py MailManager/tags/RELENG_2_1_RC6_PRE5/version.txt MailManager/tags/RELENG_2_1_RC6_PRE5/www/SystemSettings.zpt MailManager/tags/RELENG_2_1_RC6_PRE5/www/macros.zpt MailManager/tags/RELENG_2_1_RC6_PRE5/www/ticket_index_html.zpt Copied: MailManager/tags/RELENG_2_1_RC6_PRE5 (from rev 3250, MailManager/branches/RELENG_2_1) Deleted: MailManager/tags/RELENG_2_1_RC6_PRE5/Extensions/TicketPluggableBrain.py =================================================================== --- MailManager/branches/RELENG_2_1/Extensions/TicketPluggableBrain.py 2006-06-26 17:32:03 UTC (rev 3250) +++ MailManager/tags/RELENG_2_1_RC6_PRE5/Extensions/TicketPluggableBrain.py 2006-06-27 11:20:24 UTC (rev 3258) @@ -1,1799 +0,0 @@ -# (c) Copyright Logicalware Ltd 2002-2006 -# Logicalware MailManager comes with ABSOLUTELY NO WARRANTY. Further details -# including conditions of redistribution are contained in LICENSE.txt -# http://www.logicalware.org/ -# $Id$ - -# Zope modules. -from Globals import InitializeClass -from AccessControl import ClassSecurityInfo, getSecurityManager -from DateTime import DateTime -import mx.DateTime -from zExceptions.unauthorized import Unauthorized -from zExceptions import BadRequest - -# Modules from this package -from Products.MailManager.MailMixin import MailMixin - -# 3rd party modules. -try: - from psycopg import Binary -except ImportError: - pass -try: - from stripogram import html2safehtml -except ImportError: - from Products.stripogram import html2safehtml - -from Products.MailManager.support.html2text import html2text - -# Python library modules. -import re -import operator -from email.Utils import formataddr, parseaddr, make_msgid -from smtplib import SMTPRecipientsRefused - -from Products.MailManager import ruleset - -import zLOG - -from Products.MailManager.ruleset.common import historyItem, ticketState, NoTransitionError, SecurityError - -import logging -from Products.MailManager.support.logger import log - -import pprint - -from AccessControl import getSecurityManager - -from Products.MailManager.support.strptime import strptime - - -from_escape = re.compile('^>*From ') -sig_remover = re.compile('^-- $.*\Z', re.DOTALL | re.MULTILINE) - - -class TicketPluggableBrain(MailMixin): - - security = ClassSecurityInfo() - security.setPermissionDefault('MailManager Manage Tickets', - ['Tickets', 'Customer']) - - security.declareProtected('MailManager Manage Tickets', 'checkAuthorized') - def checkAuthorized(self): - user = getSecurityManager().getUser() - - if not 'Tickets' in user.roles: - username = user.getUserName() - addrs = self.sql.getCustomerAddresses(sqv_username=username) - if not self['from_email'] in [x.access_email for x in addrs]: - raise Unauthorized("You are not allowed to view this ticket") - - security.declarePublic('__bobo_traverse__') - def __bobo_traverse__(self, REQUEST=None, name=None): - """ Traversal hook to do namespace mangling for putting http in - from of requests. - - We rename the request for local methods so that we are allowing - mangling - attempting to get addMessageToTicket will return - the method http_addMessageToTicket. This allows us to split - off the interface layer from API calls. - """ - # First of all, try and mangle http_ in front of requests - ret = getattr(self, 'http_%s' % name, None) - if ret: return ret - - # Then try and obtain without mangling - ret = getattr(self, name, None) - if ret: return ret - else: - ret = self[name] - if ret: return ret - return name - - - security.declareProtected('MailManager Manage Tickets', 'index_html') - def index_html(self, REQUEST): - """Provide a view for the simple direct traversal.""" - return self.ticket_index_html(REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'findSupporter') - def findSupporter(self, REQUEST, SESSION): - """Find a supporter for this Ticket. - - This method doesn't really do what you might expect. It sets the - find_supporter session variable to the current ticket id. It then - shows the ticket index so the end user can find another ticket. - When viewing other tickets, they will now have an option to make - the other ticket a supporter of the current ticket. This is mainly - handled in the zpts. - """ - SESSION.set('find_supporter', self.id) - return self.ticket_index_html(REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'change') - def change(self, REQUEST): - """Return a view allowing the details to be changed.""" - REQUEST.set('details', 'y') - return self.ticket_index_html(REQUEST) - - - security.declareProtected('MailManager Manage Tickets', 'http_save') - def http_save(self, subject='', assigned='', state='', priority=0, - category0=None, category1=None, category2=None, support_of=None, - event='', transition=None, REQUEST=None, RESPONSE=None): - """ Save changes to a ticket. - - Check what has been changed, record changes in history and then make - the changes to the ticket. - - transition is the id of transition from the ruleset engine which is - being used to make this change. - - event is the name of the event which is causing the transition to - occur. - - FIXME: RULESETMODS - """ - # Sort out encodings first - subject = unicode(subject, 'utf-8') - assigned = unicode(assigned, 'utf-8') - if category0 is not None: - category0 = unicode(category0, 'utf-8') - if category1 is not None: - category1 = unicode(category1, 'utf-8') - if category2 is not None: - category2 = unicode(category2, 'utf-8') - - if REQUEST is not None: - # Check for errors (if called through the web). - error = None - if state == 'Closed' != self.state and not self._okToClose(): - error = 'All supporting tickets must be Closed.' - REQUEST.set('flag_supporters', True) - if support_of and support_of != self.support_of: - # Check ticket to be supported exists, is not Closed and does - # not already support self. - results = self.ticket(id=support_of) - if not results: - error = 'Ticket %06d does not exist.' % support_of - REQUEST.set('flag_support_of', True) - elif results[0].state == 'Closed': - error = 'Ticket %06d is Closed.' % support_of - REQUEST.set('flag_support_of', True) - elif results[0].support_of == self.id: - error = ('Ticket %06d itself supports this ticket.' % - support_of) - REQUEST.set('flag_support_of', True) - if error is not None: - REQUEST.set('error', error) - REQUEST.set('details', 'y') - return self.ticket_index_html(REQUEST) - - changed_by = getSecurityManager().getUser().getUserName() - if changed_by == 'Anonymous User': changed_by = '' - - self.save( - changed_by = changed_by, - subject = subject, - assigned = assigned, - state = state, - priority = priority, - category0 = category0, - category1 = category1, - category2 = category2, - support_of = support_of, - event = event, - transition = transition - ) - - if RESPONSE is not None: - return RESPONSE.redirect('%s/ticket/%06d' % (self.getBaseURL(), - self.id)) - - security.declareProtected('MailManager Manage Tickets', 'save') - def save(self, changed_by, subject='', assigned='', state='', priority=0, - category0=None, category1=None, category2=None, support_of=None, - event='', transition=None): - """ Save changes to a ticket. - - Check what has been changed, record changes in history and then make - the changes to the ticket. - - transition is the id of transition from the ruleset engine which is - being used to make this change. - - event is the name of the event which is causing the transition to - occur. - - changed_by : - - """ - changes = {} - set_date_Closed = False - clear_date_Closed = False - - # Changes need to be done to the local object as well as set in the - # database. Some changes need special SQL parameters. - - if state and state != self.state: - if state == 'Closed': - # Record the date & time the ticket was Closed. - set_date_Closed = True - elif self.state == 'Closed': - # Clear date_Closed when we re-open a ticket. - clear_date_Closed = True - changes['state'] = self.state - if subject and subject != self.subject: - changes['subject'] = self.subject - self.subject = subject - if assigned and assigned != self.assigned: - changes['assigned'] = self.assigned - self.assigned = assigned - # If the assigned user was changed by someone other than the new - # user and the 'Notify users of new tickets' flag is set then let - # the new user know they have got a ticket. - if assigned != changed_by: - if self.account(email=self.account_id)[0].notify_user: - # Hook in user notification - self.notifyUser(new_id=assigned) - if state and state != self.state: - changes['state'] = self.state - self.state = state - if priority and priority != self.priority: - changes['priority'] = self.priority - self.priority = priority - if category0 and category0 != self.category0: - changes['category0'] = self.category0 - self.category0 = category0 - if category1 and category1 != self.category1: - changes['category1'] = self.category1 - self.category1 = category1 - if category2 and category2 != self.category2: - changes['category2'] = self.category2 - self.category2 = category2 - if support_of is not None and support_of != self.support_of: - changes['support_of'] = self.support_of or 0 - self.support_of = support_of - - if changes: - - # If the transition/event don't actually change anything we - # wouldn't want to record them, so don't set these before the - # conditional test above - - changes['transition'] = transition - changes['event'] = event - - self.sql.addHistory(sqv_ticket_id=self.id, - sqv_subject=changes.get('subject', ''), - sqv_assigned=changes.get('assigned', ''), - sqv_state=changes.get('state', ''), - sqv_priority=changes.get('priority'), - sqv_category0=changes.get('category0', ''), - sqv_category1=changes.get('category1', ''), - sqv_category2=changes.get('category2', ''), - sqv_support_of=changes.get('support_of', ''), - sqv_transition=changes.get('transition', ''), - sqv_event=changes.get('event', ''), - sqv_changed_by=changed_by) - self.sql.editTicket(sqv_id=self.id, - sqv_subject=subject or self.subject, - sqv_assigned=assigned or self.assigned, - sqv_state=state or self.state, - sqv_priority=priority or self.priority, - sqv_category0=category0 or self.category0 or '', - sqv_category1=category1 or self.category1 or '', - sqv_category2=category2 or self.category2 or '', - sqv_set_date_Closed=set_date_Closed, - sqv_clear_date_Closed=clear_date_Closed) - # Icky, but let's update the support_of separately. - # This allows the use of clear_support_of to set None - # values - if support_of == 0: - self.sql.editTicket(sqv_id = self.id, sqv_clear_support_of = True) - elif support_of: - self.sql.editTicket(sqv_id = self.id, sqv_set_support_of = True, sqv_support_of = support_of) - - - security.declareProtected('MailManager Manage Tickets', 'headers') - def headers(self, REQUEST): - """Show or hide the message's raw headers.""" - if REQUEST.SESSION.has_key('show_headers'): - del REQUEST.SESSION['show_headers'] - else: - REQUEST.SESSION.set('show_headers', True) - return self.ticket_index_html(REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'showHTML') - def showHTML(self, REQUEST): - """Should html_body be displayed?""" - show_html = REQUEST.SESSION.get('show_html') - if show_html is None: - return 0 - return show_html.get(self.absolute_url(), 0) - - security.declareProtected('MailManager Manage Tickets', 'toggleShowHTML') - def toggleShowHTML(self, REQUEST): - """Change whether html_body is displayed.""" - show_html = REQUEST.SESSION.get('show_html', {}) - if not show_html: - REQUEST.SESSION.set('show_html', show_html) - url = self.absolute_url() - show_html[url] = not show_html.get(url, 0) - return REQUEST.RESPONSE.redirect('%s/ticket/%06d' % (self.getBaseURL(), - self.id)) - - security.declareProtected('MailManager Manage Tickets', 'viewTicket') - def viewTicket(self): - """ User interface hook to note the ticket has been viewed - - We are currently tracking unread status in two places, once in - the ticket itself in sql (2.0 functionality) and once as an - attribute in the ruleset via hooks. The latter will be used in - future revisions to allow for more complex rulesets - """ - self.sql.markRead(sqv_id = self.id) - - # Generate and process the event - user = getSecurityManager().getUser().getUserName() - try: - self.engine.processEvent('ViewTicket', user, self) - except NoTransitionError: - pass - - transitions = True - while transitions: - try: - self.engine.processEvent('Epsilon', None, self) - print "Transition made" - except NoTransitionError: - print "No transition made" - transitions = False - - - security.declareProtected('MailManager Manage Tickets', 'export') - def export(self, RESPONSE): - """Export all of a ticket's messages in mbox format. TODO: export - the attachments too. This is probably going to involve creating - an email object to let it do the appropriate construction. - """ - RESPONSE.setHeader('content-type', 'text/plain') - RESPONSE.setHeader('Content-Disposition', - 'attachment; filename=mbox.txt') - write = RESPONSE.write # Saves a lookup every time - for msg in self.sql.listMessages(sqv_ticket_id = self.id): - date = DateTime(msg.msg_date).rfc822() - from_email = msg.from_email or self.from_email - write("From %s %s\n" % (from_email.encode('utf-8'), date)) - write(msg.raw_headers.encode('utf-8')) - write('\n\n') - for line in msg.body.splitlines(): - if from_escape.match(line): - line = u">" + line - write(line.encode('utf-8')) - write('\n') - write ('\n') - return - - security.declarePrivate('notifyUser') - def notifyUser(self, new_id=None): - """Email the assigned user that the ticket has been created/updated. - - By default notify the user the ticket is presently assigned to, if - new_id is set then notify the new user with that username. - """ - if self.state == 'Spam': - return - - log('%sNotifyUser alerting %s' % (self.getLogName(), new_id.encode('utf-8')), - logging.DEBUG, 'ticket.notify') - - mail_to = self.sql.listUsers(sqv_username=new_id or self.assigned)[0].email - # Guard against agent setting personal address to same as account's. - if mail_to == self.account_id: - return - - # Check to see if server_url and virtual_root are set. If so, use them. - # Otherwise, use getBaseURL(). Note that getBaseURL() may not work - # properly if called when the REQUEST object is not available. - if self.server_url: - if self.server_url.endswith('/'): - url = self.server_url + self.virtual_root - else: - url = self.server_url + '/' + self.virtual_root - else: - url = self.getBaseURL() - - zmsg = self.sql.listMessages(sqv_ticket_id=self.id)[-1] - body = u"""You have a new or updated ticket. - -From: %s -To: %s -Subject: %s -Full details: -%s/ticket/%06d""" % (zmsg.from_email, zmsg.msg_to, zmsg.subject, - url, self.id) - msg = self.createMessage(mail_to=mail_to, - mail_from=self.account_id, - subject=u'You have a new or updated ticket', - body=body)[0] - self.sendMessage(self.account_id, mail_to, msg) - - security.declarePrivate('notifyGroup') - def notifyGroup(self, group_name): - """Notify members of a group that a new mail has arrived. - - Do not notify the group member to whom the ticket has been assigned as - they will usually have been notified by the notifyUser() method. - """ - if self.state == 'Spam': - return - zmsg = self.sql.listMessages(sqv_ticket_id=self.id)[-1] - subject = u'%s has a new or updated ticket' % self.assigned - body = u"""%s has a new or updated ticket. - -From: %s -To: %s -Subject: %s -Full details: -%s/ticket/%06d""" % (self.assigned, zmsg.from_email, zmsg.msg_to, zmsg.subject, - self.absolute_url(), self.id) - - log('%sNotifying group memebers of %s' % (self.getLogName(), group_name.encode('utf-8')), - logging.DEBUG, 'ticket.notify') - - for member in self.sql.listGroupMembers(sqv_group_name=group_name): - log('%sNotifying user %s' % (self.getLogName(), member.username.encode('utf-8')), - logging.DEBUG, 'ticket.notify') - mail_to = self.sql.listUsers(sqv_username=member.username)[0].email - msg = self.createMessage(mail_to=mail_to, - mail_from=self.account_id, - subject=subject, - body=body)[0] - self.sendMessage(self.account_id, mail_to, msg) - - - ## Sending Methods #################################################### - # - # The following methods all handle sending replies from the user - # interface. - # - # http_sendReply \ - # http_sendAndClose \ sendMethod - addNote - # http_sendAndHold / - # http_addNote / - # - # The http methods are partially there for historical reasons, as these - # are what the ZPTs call. These in turn all call the refactored method - # sendMessage, adding information on what method made the call by - # passing the event and change_state variables. - # - # Replacing the http_ methods with a more generic method may cause - # problems by allowing the end user to manually submit with event or - # change_state variables. Permissions would need to be analysed before - # making this change. - # - - security.declareProtected('MailManager Manage Tickets', 'http_sendReply') - def http_sendReply(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, user_signature=None, next_id=None, - offset=None, last_modified=None, - REQUEST=None, RESPONSE=None): - """ Send a reply to a customer. """ - - return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, - subject=subject, body=body, body_is_html=body_is_html, - user_signature=user_signature, next_id=next_id, - last_modified=last_modified, offset=offset, - change_state=None, - event='SendReply', - REQUEST=REQUEST, RESPONSE=RESPONSE) - - security.declareProtected('MailManager Manage Tickets', 'http_sendAndClose') - def http_sendAndClose(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, user_signature=None, next_id=None, - offset=None, last_modified=None, - REQUEST=None, RESPONSE=None): - """ Send a reply and close the ticket. """ - - return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, - subject=subject, body=body, body_is_html=body_is_html, - user_signature=user_signature, next_id=next_id, - last_modified=last_modified, offset=offset, - change_state='Closed', - event='SendAndClose', - REQUEST=REQUEST, RESPONSE=RESPONSE) - - security.declareProtected('MailManager Manage Tickets', 'http_sendAndHold') - def http_sendAndHold(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, user_signature=None, next_id=None, - last_modified=None, offset=None, - REQUEST=None, RESPONSE=None): - """ Send a reply and put the ticket on hold. """ - - return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, - subject=subject, body=body, body_is_html=body_is_html, - user_signature=user_signature, next_id=next_id, - last_modified=last_modified, offset=offset, - change_state = 'Hold', - event = 'SendAndHold', - REQUEST=REQUEST, RESPONSE=RESPONSE) - - - security.declareProtected('MailManager Manage Tickets', 'http_addNote') - def http_addNote(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=False, user_signature=None, - last_modified=None, REQUEST=None, RESPONSE=None): - """ Add a note to a ticket. No mail is generated """ - - return self.sendMethod(mail_to=mail_to, cc=cc, bcc=bcc, - subject=subject, body=body, body_is_html=body_is_html, - user_signature=user_signature, sendmail=False, - last_modified=last_modified, - change_state = None, - event = 'AddNote', - REQUEST=REQUEST, RESPONSE=RESPONSE) - - security.declareProtected('MailManager Manage Tickets', 'http_Close') - def http_Close(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, user_signature=None, next_id=None, - offset=None, last_modified=None, - REQUEST=None, RESPONSE=None): - """ Close the ticket. - - This method is a little larger than the previous wrappers as it - does not actually send any message, so the combined sendMethod - cannot be used. - """ - # First, check for any modifications to the ticket - if last_modified: - mdate = str(self.sql.getTicketLastModified( - sqv_ticket_id = self.id)[0].last_modified.timeTime()) - if not last_modified == mdate: - REQUEST.set('error', 'This ticket has been modified. Please check it, and then retry your request') - return self.ticket_index_html(REQUEST) - - changed_by = getSecurityManager().getUser().getUserName() - if changed_by == 'Anonymous User': changed_by = '' - self.save(changed_by=changed_by, state='Closed', event='Close') - - # Redirect to the next ticket in the list, or just to the main - # tickets screen if no next ticket exists. - if RESPONSE is not None: - if next_id and offset: - RESPONSE.redirect('%s/ticket/%06d?offset:int=%d' % ( - self.getBaseURL(), next_id, offset)) - else: - RESPONSE.redirect('%s/Tickets' % self.getBaseURL()) - - - def sendMethod(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=False, user_signature=None, next_id=None, - last_modified=None, offset=None, change_state=None, - transition=None, event=None, sendmail=True, - REQUEST=None, RESPONSE=None): - """ Common underlying method for sending replies/adding notes - - This method handles all of the various http_ request method which - handle a user request to send a reply, or add a note to a ticket. - In order to avoid code duplication, this method takes care of - generating error messages, and sanitising user input, before - passing it to the addNote method to act on the request. - - - @param mail_to: The intended recipient - should be blank for notes - @param cc: Carbon Copy recipients - should be blank for notes - @param bcc: Blind Carbon Copy recipients - should be blank for notes - @type mail_to string (utf-8) - @type cc: string (utf-8) - @type bcc: string (utf-8) - @type subject: string (utf-8) - @type body_is_html: boolean - @type body: string (utf-8) - @type user_signature: string (utf-8) - @type next_id: int - @type last_modified: string (ascii, iso date format) - @type offset: int - @type change_state: string (utf-8) - @type transition: string (utf-8) - @type event: string (utf-8) - @type sendmail: boolean - """ - - # Sanitize the string parameters - # Parameters are in utf-8, convert to unicode to avoid problems - if mail_to is not None: mail_to = mail_to.decode('utf-8') - if cc is not None: cc = cc.decode('utf-8') - if bcc is not None: bcc = bcc.decode('utf-8') - if subject is not None: subject = subject.decode('utf-8') - if body is not None: body = body.decode('utf-8') - if user_signature is not None: user_signature = user_signature.decode('utf-8') - if change_state is not None: change_state= change_state.decode('utf-8') - if transition is not None: transition = transition.decode('utf-8') - if event is not None: event = event.decode('utf-8') - body_is_html = int(body_is_html) - - # First, check for any modifications to the ticket - if last_modified: - mdate = str(self.sql.getTicketLastModified( - sqv_ticket_id = self.id)[0].last_modified.timeTime()) - if not last_modified == mdate: - REQUEST.set('error', 'This ticket has been modified. Please check it, and then retry your request') - return self.ticket_index_html(REQUEST) - - if change_state: - if change_state == 'Closed' and not self._okToClose(): - if REQUEST is not None: - REQUEST.set('error', 'All supporting tickets must be Closed.') - REQUEST.set('flag_supporters', 1) - return self.ticket_index_html(REQUEST) - raise BadRequest, 'All supporting tickes must be Closed.' - - if sendmail: - if not mail_to: - if REQUEST is not None: - REQUEST.set('error', 'The To field may not be empty') - REQUEST.set('flag_mail_to', 1) - return self.ticket_index_html(REQUEST) - raise BadRequest, 'The To field may not be empty' - - if not self.validEmail(mail_to): - if REQUEST is not None: - REQUEST.set('error', '%s is not a valid email address.' % mail_to) - REQUEST.set('flag_mail_to', 1) - return self.ticket_index_html(REQUEST) - raise BadRequest, 'The To field may not be empty' - - else: - if mail_to or cc or bcc: - if REQUEST is not None: - REQUEST.set('error', - 'Private notes may not be sent to anyone.') - if mail_to: - REQUEST.set('flag_mail_to', True) - # Since the user probably didn't ask for this field to - # be filled in the first place helpfully remove it. - REQUEST.set('mail_to', '') - if cc: - REQUEST.set('flag_cc', True) - if bcc: - REQUEST.set('flag_bcc', True) - return self.ticket_index_html(REQUEST) - raise BadRequest, 'Private notes may not be sent to anyone.' - - # from_name will be the username of the logged in user. This will be - # stored in the database but will not be included in the outgoing mail. - from_name = getSecurityManager().getUser().getUserName() - - # Get attachments out of the session - if REQUEST is not None: - attachments = REQUEST.SESSION.get('attachments', {}) - if attachments: - del REQUEST.SESSION['attachments'] - else: - attachments = {} - - if REQUEST is not None: - raw_headers = 'X-IP-Address: %s' % REQUEST.REMOTE_ADDR - remote_addr = REQUEST.REMOTE_ADDR - else: - raw_headers = '' - remote_addr = None - - # Generate and process the event - # Catch security and permissions violations - try: - if event: - user = getSecurityManager().getUser().getUserName() - self.engine.processEvent(event, user, self) - - transitions = True - while transitions: - try: - self.engine.processEvent('Epsilon', None, self) - print "Transition made" - except NoTransitionError: - print "No transition made" - transitions = False - except SecurityError, e: - - get_transaction().abort() - - error_msg = 'Your attempt to send this message failed due to a security ' - error_msg += 'failure: %s ' % str(e) - - if REQUEST is not None: - REQUEST.set('error', error_msg) - return self.ticket_index_html(REQUEST) - else: - raise BadRequest, error_msg - - try: - self.addNote(mail_to = mail_to, cc = cc, bcc = bcc, subject = subject, - body = body, body_is_html = body_is_html, - raw_headers = raw_headers, - attachments = attachments, from_name = from_name, - user_signature = user_signature, sendmail=sendmail, - change_state = change_state, remote_addr = remote_addr, - transition = transition, event = event) - except SMTPRecipientsRefused, e: - - get_transaction().abort() - - error_msg = 'The mailserver returned a failure whilst trying to ' - error_msg += 'send this message. Check your mail addresses are correct. ' - error_msg += 'The exact error recieved is %s ' % str(e) - - if REQUEST is not None: - REQUEST.set('error', error_msg) - REQUEST.set('flag_mail_to', True) - REQUEST.set('flag_cc', True) - REQUEST.set('flag_bcc', True) - return self.ticket_index_html(REQUEST) - else: - raise BadRequest, error_msg - - # Actions complete, either show the updated ticket, or in the case - # of tickets with modified state, redirect to the next ticket - - if change_state == 'Closed' or change_state == 'Hold': - # Redirect to the next ticket in the list, or just to the main - # tickets screen if no next ticket exists. - if RESPONSE is not None: - if next_id and offset: - RESPONSE.redirect('%s/ticket/%06d?offset:int=%d' % ( - self.getBaseURL(), next_id, offset)) - else: - RESPONSE.redirect('%s/Tickets' % self.getBaseURL()) - - else: - # Redirect to show the updated ticket - if RESPONSE is not None: - return RESPONSE.redirect('%s/ticket/%06d' % (self.getBaseURL(), - self.id)) - - - - security.declareProtected('MailManager Manage Tickets', 'addNote') - def addNote(self, mail_to, cc='', bcc='', subject='', body='', - body_is_html=0, attachments = {}, from_name = '', - user_signature=None, sendmail=0, raw_headers = '', - change_state = None, last_modified=None, - remote_addr = None, transition=None, event=None): - """ Add a copy of a message to a ticket. - - Also actually send the message to the customer, unless the - message is just a private note. - - Note that the signature is added to the message before it is added - to sql, and that is is not added before being passed to createMessage. - This is because the createMessage method adds on a signature on its - own accord. This should eventually be refactored, so that the message - being saved to the db and the message generated by createMessage are - one and the same. - - This method - - """ - - log('%sAdding message to ticket' % (self.getLogName()), - logging.DEBUG, 'ticket.addnote') - - #if change_state: - # # Forcably set the new state. - # changed_by = getSecurityManager().getUser().getUserName() - # if changed_by == 'Anonymous User': changed_by = '' - # self.save(changed_by=changed_by, state=change_state, event=event) - - # The first time we reply check promptness. - if not self.date_responded: - self.sql.setDateResponded(sqv_id=self.id) - - # Get the account signature - account = self.sql.listAccounts(sqv_email=self.account_id)[0] - if account.signature: - account_signature = (account.signature_text, - account.html_signature) - else: - account_signature = None - - - # Obtain body or html_body with appended signatures - if body_is_html: - log('%sSanitising HTML body' % (self.getLogName()), - logging.DEBUG, 'ticket.addnote') - body, html_body = '', body - body_with_sig = body - html_body_with_sig = self._addSignature(html_body, user_signature, - account_signature, html=1) - else: - html_body = '' - body_with_sig = self._addSignature(body, user_signature, account_signature) - html_body_with_sig = '' - - # Get an SQL id for this message. Note that the SQL ids are sequential - # ids to identify each message in mailmanager. The message_id otoh, is - # there to uniquely identify the message globally. They are entirely - # independant fields in the SQL database. - msg_id = self.sql.getNextMessageId()[0].id - - # Generate a message id for this message - message_id = self.generateMessageId(self.id, msg_id) - - log('%sStoring message in database' % (self.getLogName()), - logging.DEBUG, 'ticket.addnote') - - self.sql.addMessage(sqv_id=msg_id, - sqv_ticket_id=self.id, - sqv_message_id=message_id, - sqv_from_name=from_name, - sqv_from_email=self.account_id, - sqv_subject=subject, - sqv_msg_to=mail_to, - sqv_cc=cc, - sqv_bcc=bcc, - sqv_reply_to='', - sqv_raw_headers=raw_headers, - sqv_body=body_with_sig, - sqv_html_body=html_body_with_sig) - - for attach in attachments.values(): - # IE sets the filename to being the full path - title=attach['filename'].split('\\')[-1] - log('%sAdding attachment %s' % (self.getLogName(), title), - logging.DEBUG, 'ticket.addnote') - - if self.dbplatform == 'postgres': - self.sql.addAttachment(sqv_message_id=msg_id, - sqv_title=title, - sqv_content_type=attach['content-type'], - sqv_is_file=self.sql_truevar, - sqv_body=Binary(attach['data']), - sqv_dangerous=self.sql_falsevar) - else: - self.sql.addAttachment(sqv_message_id=msg_id, - sqv_title=title, - sqv_content_type=attach['content-type'], - sqv_is_file=self.sql_truevar, - sqv_body=attach['data'], - sqv_dangerous=self.sql_falsevar) - - if sendmail: - # A very irritating hack. The ZSQL methods will not accept None as - # a null so we need to use '' in sql.addAttachment. However the - # createMessage has to be able to distinguish between an empty - # body/html_body (body='', html_body='') and the body/html_body not - # present (body=None, html_body=None). This can be removed when the - # following Zope bug is fixed: - # http://www.zope.org/Collectors/Zope/556 - if body_is_html: - body = None - else: - html_body = None - msg, recipients = self.createMessage(mail_to=mail_to, - mail_from=self.account_id, - attach=attachments, - cc=cc, - bcc=bcc, - subject=subject, - body=body, - html_body=html_body, - user_signature=user_signature, - account_signature=account_signature, - message_id=message_id, - remote_addr = remote_addr) - - log('%sSending outgoing message' % (self.getLogName()), - logging.DEBUG, 'ticket.addnote') - - self.sendMessage(self.account_id, - reduce(operator.add, recipients.values()), - msg) - - - security.declareProtected('MailManager Manage Tickets', 'http_returnToQueue') - def http_returnToQueue(self, mail_to, cc='', bcc='', subject='', - body='', body_is_html=0, user_signature=None, - sendmail=0, next_id=None, last_modified=None, - offset=None, REQUEST=None, RESPONSE=None): - """ Returns the current ticket to the queue - - This method returns the current ticket to the queue. It then - redirects to the next ticket, or to the tickets list should - no next ticket exist. - """ - # First, check for any modifications to the ticket - if last_modified: - mdate = str(self.sql.getTicketLastModified( - sqv_ticket_id = self.id)[0].last_modified.timeTime()) - if not last_modified == mdate: - REQUEST.set('error', 'This ticket has been modified. Please check it, and then retry your request') - return self.ticket_index_html(REQUEST) - - # Generate and process the event - user = getSecurityManager().getUser().getUserName() - self.engine.processEvent('ReturnToQueue', user, self) - - transitions = True - while transitions: - try: - self.engine.processEvent('Epsilon', None, self) - print "Transition made" - except NoTransitionError: - print "No transition made" - transitions = False - - # Redirect to next ticket or to the tickets list - if RESPONSE is not None: - if next_id is not None and offset is not None: - RESPONSE.redirect('%s/ticket/%06d?offset:int=%d' % ( - self.getBaseURL(), next_id, offset)) - else: - RESPONSE.redirect('%s/Tickets' % self.getBaseURL()) - - - def getDefaultTemplate(self, REQUEST): - """ Method to set the default template in the ticket response - - This method is called from the ticket index page. It will set the - default template for replies, providing that no template has been - set already. This method will translate the template_name - and possibly update the body and body_is_html request variables - """ - - # Check to see if a template name is already set - if REQUEST.get('template_name', None) is not None: - return unicode(REQUEST['template_name'], 'utf-8') - - # Otherwise, this is a new reponse, set the template automatically - else: - - # Template has not already been set, get the default - account = self.sql.listAccounts(sqv_email=self.account_id)[0] - template_name = account.default_template - - # Obtain the template details, deailing with the cite_last - # method appropriately - if template_name == 'cite_last': - - # Find the last actual message - msgs = self.sql.listMessages(sqv_ticket_id=self.id) - # Skip over any notes - for position in range(1,len(msgs)+1): - zmsg = msgs[-position] - if not zmsg.msg_to == '': break - # Remove the signature and split the plain text body per - # line, start with > for quote chars. Note that we don't - # currently quote HTML, but that would be a nice addition - # in the future. - cite = sig_remover.sub('', zmsg.body) - body = u''.join(['> %s' % line for line - in cite.splitlines(1)]) - template_is_html = 0 - - elif template_name is not None and not (template_name == ''): - template = self._getTemplate(template_name) - body = template['body'] - template_is_html = template['html'] - - else: - template_is_html = False - template_name = u'' - body = u'' - - # Is this an HTML template? Check the settings flag - if template_is_html: - # Set the body_is_html flag so that the correct editor is - # used for the reply - REQUEST.set('body_is_html', True) - else: - # If HTMLRequired is set, convert to HTML for the editing pane - # Fixes bug - Formatting broken on templates for HTML (#1477664) - if self.HTMLRequired(): - body = self._makeHTML(body) - REQUEST.set('body_is_html', True) - else: - REQUEST.set('body_is_html', False) - - REQUEST.set('body', body) - - # Return value of 'No Change' to UI - return '' - - - def http_setTemplate(self, REQUEST): - """ Handler for user selecting a new template to use in a message - - This method is called when the end user clicks the arrow button - to the right of the template. This method then replaces the - content of the current message body with the given template, - setting the editor to HTML/plain text as appropriate. If - template_name is None then do nothing. - - Request variables: - - * template_name : the template name we are to replace with - * body_is_html : the format to encode the resulting body in - * body : altered to be the content of the given tempalte - """ - template_name = REQUEST.get('template_name', '').decode('utf-8') - - if template_name: - - # Obtain the template details, deailing with the cite_last - # method appropriately - if template_name == 'cite_last': - body = self._citeLastMessage() - template_is_html = 0 - else: - template = self._getTemplate(template_name) - # Replace template paramaters - body = self.replaceTemplateParameters(template['body']) - template_is_html = template['html'] - - # Is this an HTML template? Check the settings flag - if template_is_html: - # Set the body_is_html flag so that the correct editor is - # used for the reply - REQUEST.set('body_is_html', True) - else: - # If HTMLRequired is set, convert to HTML for the editing pane - # Fixes bug - Formatting broken on templates for HTML (#1477664) - if self.HTMLRequired(): - body = self._makeHTML(body) - REQUEST.set('body_is_html', True) - else: - REQUEST.set('body_is_html', False) - - REQUEST.set('body', body) - REQUEST.set('autojump', True) - - return self.index_html(REQUEST) - - security.declareProtected('MailManager Manage Tickets', '_citeLastMessage') - def _citeLastMessage(self): - """ Obtain a citation of the last message - - Returns a utf-8 encoded string - """ - - # Find the last actual message - msgs = self.sql.listMessages(sqv_ticket_id=self.id) - # Skip over any notes - for position in range(1,len(msgs)+1): - zmsg = msgs[-position] - if not zmsg.msg_to == '': break - # Remove the signature and split the plain text body per - # line, start with > for quote chars. Note that we don't - # currently quote HTML, but that would be a nice addition - # in the future. - cite = sig_remover.sub('', zmsg.body) - body = ''.join(['> %s' % line.encode('utf-8') for line - in cite.splitlines(1)]) - return body - - security.declareProtected('MailManager Manage Tickets', 'replaceTemplateParameters') - def replaceTemplateParameters(self, template_body): - """ Replace the metavariables in the templates with the right content - - Currently supported is: - - %T - ticket id - %L - cite last message - """ - # Replace any paramaters in this code - template_body = template_body.replace('%T', str(self.id)) - template_body = template_body.replace('%L', self._citeLastMessage()) - return template_body - - - security.declareProtected('MailManager Manage Tickets', 'renderHTML') - def renderHTML(self, msg_id): - """ Temporary method to render a message as an iframe """ - return u""" - <iframe src="ticket/%i/messageContent?msg_id=%i" width="100%%" - style="height:25.0em" scrolling="no" - marginwidth="0" marginheight="0"> - </iframe> - """ % (self.id, msg_id) - - security.declareProtected('MailManager Manage Tickets', 'messageContent') - def messageContent(self, msg_id, REQUEST): - """ Returns the content of an HTML message as an HTML page """ - msg = self.sql.listMessages(sqv_sql_id=msg_id)[0] - return self.MessageTemplate(messageContent=msg.html_body) - - def http_setHTML(self, REQUEST): - """ Handler for user changing the format of a message body - - This method is called when the end user clicks the arrow button - to the right of the HTML/Plain text option. This method then - replaces the content of the current message body based on - given template, converting to HTML/plain text as appropriate. - - Request variables: - - * new_body_format: the format to encode the resulting body in - * body_is_html : gets set to the format the body is now in - * body : altered so that it is in the correct format - """ - body_is_html = int(REQUEST.get('body_is_html', False)) - new_body_html = int(REQUEST.get('new_body_html', False)) - body = REQUEST.get('body', '').decode('utf-8') - - if body_is_html and not new_body_html: - # Convert from html to text - body = html2text(body) - - if not body_is_html and new_body_html: - # Convert from text to html - body = self._makeHTML(body) - - REQUEST.set('body', body.encode('utf-8')) - REQUEST.set('body_is_html', new_body_html) - REQUEST.set('autojump', True) - - return self.index_html(REQUEST) - - security.declarePrivate('_getTemplate') - def _getTemplate(self, template_name): - templates = self.sql.getTemplate(sqv_name = template_name) - if len(templates) > 0: - return templates[0] - else: - return {} - - security.declareProtected('MailManager Manage Tickets', 'HTMLRequired') - def HTMLRequired(self): - """Determine whether the message must be composed in HTML. - - Currently HTML is required when an HTML account signature is - in use. Once HTML user signatures are added they will also - force HTML composition. - """ - account = self.sql.listAccounts(sqv_email=self.account_id)[0] - return account.signature and account.html_signature - - security.declareProtected('MailManager Manage Tickets', 'getTo') - def getTo(self): - """Get the email address for the To: line. - - Format the name and email address nicely, eg: - Andrew Veitch <an...@lo...> - """ - return formataddr( (self.from_name, self.from_email) ) - - security.declareProtected('MailManager Manage Tickets', 'formatAddr') - def formatAddr(self, addrtuple): - """Format an address pair (name, email) for reply - - This is here purely so the ticket_index_html.zpt file can reference - the email.Utils package method. - """ - return formataddr( addrtuple ) - - security.declareProtected('MailManager Manage Tickets', 'getReplyTo') - def getReplyTo(self): - """Get the Reply-To header from the first message in the ticket. - - Used instead of From: as the address to reply to, if present. - """ - zmsg = self.sql.listMessages(sqv_ticket_id=self.id)[0] - return zmsg.reply_to - - security.declareProtected('MailManager Manage Tickets', 'getReplyAll') - def getReplyAll(self): - """Get the address for Reply to All. - - Include addresses in the To field and in the Cc field of the original - mail. Do not return duplicate addresses. Only the actual email portion - of the address should be returned. - """ - zmsg = self.sql.listMessages(sqv_ticket_id=self.id)[0] - emails = [parseaddr(addr)[1] - for addr in (self._tokenizer(zmsg.msg_to) + - self._tokenizer(zmsg.cc)) - if addr] - # We only want to copy in extra To addresses so ignore the account id - # and ignore the user's own address in case they copied themselves into - # their original email. - if self.account_id in emails: - emails.remove(self.account_id) - if self.from_email in emails: - emails.remove(self.from_email) - # Make unique - return ', '.join(dict.fromkeys(emails).keys()) - - security.declareProtected('MailManager Manage Tickets', 'addAttachment') - def addAttachment(self, REQUEST, RESPONSE, standard_attach = None, - file_attach=None): - """Add an attachment to a reply. - - The attachment can either be one of the standard attachments or an - uploaded file. Attachments are stored in the SESSION until the message - is sent. - """ - attachments = REQUEST.SESSION.get('attachments', {}) - if standard_attach: - file = self.attachments[standard_attach] - attachments[standard_attach] = {'filename': standard_attach, - 'content-type': file.content_type, - 'data': file.manage_FTPget()} - if file_attach: - file = {'filename': file_attach.filename, - 'content-type': - file_attach.headers.get('content-type', - 'application/octet-stream'), - 'data': file_attach.read()} - attachments[file_attach.filename] = file - REQUEST.SESSION.set('attachments', attachments) - REQUEST.set('autojump', True) - return self.ticket_index_html(REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'delAttachment') - def delAttachment(self, REQUEST, RESPONSE, ids=[]): - """Delete an attachment.""" - for id in ids: - attachments = REQUEST.SESSION['attachments'] - del attachments[id] - REQUEST.SESSION.set('attachments', attachments) - return self.ticket_index_html(REQUEST) - - security.declareProtected('MailManager Manage Tickets', 'getPrevNext') - def getPrevNext(self, request): - """ - Get the previous and next ticket ids. The supplied variable offset - is the current position in the list of tickets. We retreive the - ticket previous to the offset and the one after. Return value is - a tuple containing the previous ticket id, and the next ticket id. - """ - offset = request.get('offset') - if offset is None: - return (None, None) - - if offset == 0: - # If we are at the start of the result set, the previous ticket - # does not exist. Only retreive two tickets. - results = self.listTickets(request, offset=0, limit=2) - if not results: - return (None, None) - - if len(results) == 2: - return (None, results[1].id) - else: - return (None, None) - - else: - # We are in the middle of a result set, so we want to try and - # retrieve three tickets (previous, current, next) - results = self.listTickets(request, offset=max(offset-1, 0), limit=3) - if not results: - return (None, None) - - if len(results) == 3: - return(results[0].id, results[2].id) - elif len(results) > 0: - return(results[0].id, None) - else: - return (None, None) - - ######################################################################### - # - # Information methods - # - # The following methods are called from ZPTs in order to get information - # about the current ticket - # - - security.declareProtected('MailManager Manage Tickets', 'getHistory') - def getHistory(self): - """ Returns a structure which can be used to give a human readable - history of a ticket's lifecycle. - - @return: list of dictionarys ('string' : 'struct') - - FIXME: This needs support for i18n added - - The results of this method are shown on the side of the ticket - display. This shows a list of history items, each with a number - of key:value entries depicting what was changed. The value of - each of the entries is a struct, allowing us to generate img - tags or similar if necessary. - - State - Subject - Assigned - Priority - Category - Support of - Changed - - The rul... [truncated message content] |
From: <ke...@us...> - 2006-06-28 16:15:16
|
Revision: 3260 Author: kevca Date: 2006-06-28 09:02:31 -0700 (Wed, 28 Jun 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3260&view=rev Log Message: ----------- Massive restructuring from CVS import from sourceforge Added Paths: ----------- MailManager/tags/HEAD_LASTMERGEFROMRELENG_2_0_tmp/ MailManager/tags/RELENG_1_1_1_tmp/ MailManager/tags/RELENG_1_1_2_tmp/ MailManager/tags/RELENG_1_1_BP_tmp/ MailManager/tags/RELENG_2_0_0_A1_tmp/ MailManager/tags/RELENG_2_0_0_A2_tmp/ MailManager/tags/RELENG_2_0_0_B1_tmp/ MailManager/tags/RELENG_2_0_0_B2_tmp/ MailManager/tags/RELENG_2_0_0_B3_tmp/ MailManager/tags/RELENG_2_0_1_A1_tmp/ MailManager/tags/RELENG_2_0_1_BETA1_tmp/ MailManager/tags/RELENG_2_0_1_RC1_tmp/ MailManager/tags/RELENG_2_0_1_RC2_tmp/ MailManager/tags/RELENG_2_0_1_RELEASE_tmp/ MailManager/tags/RELENG_2_0_2_RELEASE_tmp/ MailManager/tags/RELENG_2_0_2_UPDATE_tmp/ MailManager/tags/RELENG_2_0_2_tmp/ MailManager/tags/RELENG_2_0_3_RELEASE_tmp/ MailManager/tags/RELENG_2_0_4_RELEASE_tmp/ MailManager/tags/RELENG_2_0_5_RELEASE_tmp/ MailManager/tags/RELENG_2_0_6_RELEASE_tmp/ MailManager/tags/RELENG_2_0_7_RELEASE_tmp/ MailManager/tags/RELENG_2_0_BP_tmp/ MailManager/tags/RELENG_2_0_FINAL/Extensions/ MailManager/tags/RELENG_2_0_FINAL_tmp/ MailManager/tags/RELENG_2_0_LASTMERGETOHEAD_tmp/ MailManager/tags/RELENG_2_0_R1_tmp/ MailManager/tags/RELENG_2_0_R4_tmp/ MailManager/tags/v1-0b1-migration_tmp/ MailManager/tags/v1-0b1_tmp/ MailManager/tags/v1-0b2-newfeatures_tmp/ MailManager/tags/v1-0b2_tmp/ MailManager/tags/v1-0b3_tmp/ MailManager/tags/v1-0b4_tmp/ MailManager/tags/v1-0rc1_tmp/ MailManager/tags/v1-0rc2_tmp/ MailManager/tags/v1-1rc2_tmp/ MailManager/tags/v1-1rc3_tmp/ Removed Paths: ------------- MailManager/tags/HEAD_LASTMERGEFROMRELENG_2_0/MailManager/ MailManager/tags/RELENG_1_1_1/MailManager/ MailManager/tags/RELENG_1_1_2/MailManager/ MailManager/tags/RELENG_1_1_BP/MailManager/ MailManager/tags/RELENG_2_0_0_A1/MailManager/ MailManager/tags/RELENG_2_0_0_A2/MailManager/ MailManager/tags/RELENG_2_0_0_B1/MailManager/ MailManager/tags/RELENG_2_0_0_B2/MailManager/ MailManager/tags/RELENG_2_0_0_B3/MailManager/ MailManager/tags/RELENG_2_0_1_A1/MailManager/ MailManager/tags/RELENG_2_0_1_BETA1/MailManager/ MailManager/tags/RELENG_2_0_1_RC1/MailManager/ MailManager/tags/RELENG_2_0_1_RC2/MailManager/ MailManager/tags/RELENG_2_0_1_RELEASE/MailManager/ MailManager/tags/RELENG_2_0_2/MailManager/ MailManager/tags/RELENG_2_0_2_RELEASE/MailManager/ MailManager/tags/RELENG_2_0_2_UPDATE/MailManager/ MailManager/tags/RELENG_2_0_3_RELEASE/MailManager/ MailManager/tags/RELENG_2_0_4_RELEASE/MailManager/ MailManager/tags/RELENG_2_0_5_RELEASE/MailManager/ MailManager/tags/RELENG_2_0_6_RELEASE/MailManager/ MailManager/tags/RELENG_2_0_7_RELEASE/MailManager/ MailManager/tags/RELENG_2_0_BP/MailManager/ MailManager/tags/RELENG_2_0_FINAL/MailManager/ MailManager/tags/RELENG_2_0_FINAL_tmp/Extensions/ MailManager/tags/RELENG_2_0_LASTMERGETOHEAD/MailManager/ MailManager/tags/RELENG_2_0_R1/MailManager/ MailManager/tags/RELENG_2_0_R4/MailManager/ MailManager/tags/v1-0b1/MailManager/ MailManager/tags/v1-0b1-migration/MailManager/ MailManager/tags/v1-0b2/MailManager/ MailManager/tags/v1-0b2-newfeatures/MailManager/ MailManager/tags/v1-0b3/MailManager/ MailManager/tags/v1-0b4/MailManager/ MailManager/tags/v1-0rc1/MailManager/ MailManager/tags/v1-0rc2/MailManager/ MailManager/tags/v1-1rc2/MailManager/ MailManager/tags/v1-1rc3/MailManager/ Copied: MailManager/tags/HEAD_LASTMERGEFROMRELENG_2_0_tmp (from rev 3259, MailManager/tags/HEAD_LASTMERGEFROMRELENG_2_0/MailManager) Copied: MailManager/tags/RELENG_1_1_1_tmp (from rev 3259, MailManager/tags/RELENG_1_1_1/MailManager) Copied: MailManager/tags/RELENG_1_1_2_tmp (from rev 3259, MailManager/tags/RELENG_1_1_2/MailManager) Copied: MailManager/tags/RELENG_1_1_BP_tmp (from rev 3259, MailManager/tags/RELENG_1_1_BP/MailManager) Copied: MailManager/tags/RELENG_2_0_0_A1_tmp (from rev 3259, MailManager/tags/RELENG_2_0_0_A1/MailManager) Copied: MailManager/tags/RELENG_2_0_0_A2_tmp (from rev 3259, MailManager/tags/RELENG_2_0_0_A2/MailManager) Copied: MailManager/tags/RELENG_2_0_0_B1_tmp (from rev 3259, MailManager/tags/RELENG_2_0_0_B1/MailManager) Copied: MailManager/tags/RELENG_2_0_0_B2_tmp (from rev 3259, MailManager/tags/RELENG_2_0_0_B2/MailManager) Copied: MailManager/tags/RELENG_2_0_0_B3_tmp (from rev 3259, MailManager/tags/RELENG_2_0_0_B3/MailManager) Copied: MailManager/tags/RELENG_2_0_1_A1_tmp (from rev 3259, MailManager/tags/RELENG_2_0_1_A1/MailManager) Copied: MailManager/tags/RELENG_2_0_1_BETA1_tmp (from rev 3259, MailManager/tags/RELENG_2_0_1_BETA1/MailManager) Copied: MailManager/tags/RELENG_2_0_1_RC1_tmp (from rev 3259, MailManager/tags/RELENG_2_0_1_RC1/MailManager) Copied: MailManager/tags/RELENG_2_0_1_RC2_tmp (from rev 3259, MailManager/tags/RELENG_2_0_1_RC2/MailManager) Copied: MailManager/tags/RELENG_2_0_1_RELEASE_tmp (from rev 3259, MailManager/tags/RELENG_2_0_1_RELEASE/MailManager) Copied: MailManager/tags/RELENG_2_0_2_RELEASE_tmp (from rev 3259, MailManager/tags/RELENG_2_0_2_RELEASE/MailManager) Copied: MailManager/tags/RELENG_2_0_2_UPDATE_tmp (from rev 3259, MailManager/tags/RELENG_2_0_2_UPDATE/MailManager) Copied: MailManager/tags/RELENG_2_0_2_tmp (from rev 3259, MailManager/tags/RELENG_2_0_2/MailManager) Copied: MailManager/tags/RELENG_2_0_3_RELEASE_tmp (from rev 3259, MailManager/tags/RELENG_2_0_3_RELEASE/MailManager) Copied: MailManager/tags/RELENG_2_0_4_RELEASE_tmp (from rev 3259, MailManager/tags/RELENG_2_0_4_RELEASE/MailManager) Copied: MailManager/tags/RELENG_2_0_5_RELEASE_tmp (from rev 3259, MailManager/tags/RELENG_2_0_5_RELEASE/MailManager) Copied: MailManager/tags/RELENG_2_0_6_RELEASE_tmp (from rev 3259, MailManager/tags/RELENG_2_0_6_RELEASE/MailManager) Copied: MailManager/tags/RELENG_2_0_7_RELEASE_tmp (from rev 3259, MailManager/tags/RELENG_2_0_7_RELEASE/MailManager) Copied: MailManager/tags/RELENG_2_0_BP_tmp (from rev 3259, MailManager/tags/RELENG_2_0_BP/MailManager) Copied: MailManager/tags/RELENG_2_0_FINAL/Extensions (from rev 3259, MailManager/tags/RELENG_2_0_FINAL/MailManager/Extensions) Copied: MailManager/tags/RELENG_2_0_FINAL_tmp (from rev 3259, MailManager/tags/RELENG_2_0_FINAL/MailManager) Copied: MailManager/tags/RELENG_2_0_LASTMERGETOHEAD_tmp (from rev 3259, MailManager/tags/RELENG_2_0_LASTMERGETOHEAD/MailManager) Copied: MailManager/tags/RELENG_2_0_R1_tmp (from rev 3259, MailManager/tags/RELENG_2_0_R1/MailManager) Copied: MailManager/tags/RELENG_2_0_R4_tmp (from rev 3259, MailManager/tags/RELENG_2_0_R4/MailManager) Copied: MailManager/tags/v1-0b1-migration_tmp (from rev 3259, MailManager/tags/v1-0b1-migration/MailManager) Copied: MailManager/tags/v1-0b1_tmp (from rev 3259, MailManager/tags/v1-0b1/MailManager) Copied: MailManager/tags/v1-0b2-newfeatures_tmp (from rev 3259, MailManager/tags/v1-0b2-newfeatures/MailManager) Copied: MailManager/tags/v1-0b2_tmp (from rev 3259, MailManager/tags/v1-0b2/MailManager) Copied: MailManager/tags/v1-0b3_tmp (from rev 3259, MailManager/tags/v1-0b3/MailManager) Copied: MailManager/tags/v1-0b4_tmp (from rev 3259, MailManager/tags/v1-0b4/MailManager) Copied: MailManager/tags/v1-0rc1_tmp (from rev 3259, MailManager/tags/v1-0rc1/MailManager) Copied: MailManager/tags/v1-0rc2_tmp (from rev 3259, MailManager/tags/v1-0rc2/MailManager) Copied: MailManager/tags/v1-1rc2_tmp (from rev 3259, MailManager/tags/v1-1rc2/MailManager) Copied: MailManager/tags/v1-1rc3_tmp (from rev 3259, MailManager/tags/v1-1rc3/MailManager) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-06-29 08:45:55
|
Revision: 3263 Author: kevca Date: 2006-06-29 01:45:45 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3263&view=rev Log Message: ----------- Massive restructuring from CVS import from sourceforge Removed Paths: ------------- MailManager/tags/RELENG_1_1_1/ MailManager/tags/RELENG_1_1_2/ MailManager/tags/RELENG_1_1_BP/ MailManager/tags/RELENG_2_0_0_A1/ MailManager/tags/RELENG_2_0_0_A2/ MailManager/tags/RELENG_2_0_0_B1/ MailManager/tags/RELENG_2_0_0_B2/ MailManager/tags/RELENG_2_0_0_B3/ MailManager/tags/RELENG_2_0_1_A1/ MailManager/tags/RELENG_2_0_1_BETA1/ MailManager/tags/RELENG_2_0_1_RC1/ MailManager/tags/RELENG_2_0_1_RC2/ MailManager/tags/RELENG_2_0_1_RELEASE/ MailManager/tags/RELENG_2_0_2/ MailManager/tags/RELENG_2_0_2_RELEASE/ MailManager/tags/RELENG_2_0_2_UPDATE/ MailManager/tags/RELENG_2_0_3_RELEASE/ MailManager/tags/RELENG_2_0_4_RELEASE/ MailManager/tags/RELENG_2_0_5_RELEASE/ MailManager/tags/RELENG_2_0_6_RELEASE/ MailManager/tags/RELENG_2_0_7_RELEASE/ MailManager/tags/RELENG_2_0_BP/ MailManager/tags/RELENG_2_0_FINAL/ MailManager/tags/RELENG_2_0_LASTMERGETOHEAD/ MailManager/tags/RELENG_2_0_R1/ MailManager/tags/RELENG_2_0_R4/ MailManager/tags/v1-0b1/ MailManager/tags/v1-0b1-migration/ MailManager/tags/v1-0b2/ MailManager/tags/v1-0b2-newfeatures/ MailManager/tags/v1-0b3/ MailManager/tags/v1-0b4/ MailManager/tags/v1-0rc1/ MailManager/tags/v1-0rc2/ MailManager/tags/v1-1rc2/ MailManager/tags/v1-1rc3/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-06-29 10:56:51
|
Revision: 3265 Author: kevca Date: 2006-06-29 03:55:18 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3265&view=rev Log Message: ----------- Massive restructuring from CVS import from sourceforge Added Paths: ----------- MailManager/tags/HEAD_LASTMERGEFROMRELENG_2_0/ MailManager/tags/RELENG_1_1_1/ MailManager/tags/RELENG_1_1_2/ MailManager/tags/RELENG_1_1_BP/ MailManager/tags/RELENG_2_0_0_A1/ MailManager/tags/RELENG_2_0_0_A2/ MailManager/tags/RELENG_2_0_0_B1/ MailManager/tags/RELENG_2_0_0_B2/ MailManager/tags/RELENG_2_0_0_B3/ MailManager/tags/RELENG_2_0_1_A1/ Removed Paths: ------------- MailManager/tags/HEAD_LASTMERGEFROMRELENG_2_0_tmp/ MailManager/tags/RELENG_1_1_1_tmp/ MailManager/tags/RELENG_1_1_2_tmp/ MailManager/tags/RELENG_1_1_BP_tmp/ MailManager/tags/RELENG_2_0_0_A1_tmp/ MailManager/tags/RELENG_2_0_0_A2_tmp/ MailManager/tags/RELENG_2_0_0_B1_tmp/ MailManager/tags/RELENG_2_0_0_B2_tmp/ MailManager/tags/RELENG_2_0_0_B3_tmp/ MailManager/tags/RELENG_2_0_1_A1_tmp/ Copied: MailManager/tags/HEAD_LASTMERGEFROMRELENG_2_0 (from rev 3262, MailManager/tags/HEAD_LASTMERGEFROMRELENG_2_0_tmp) Copied: MailManager/tags/RELENG_1_1_1 (from rev 3262, MailManager/tags/RELENG_1_1_1_tmp) Copied: MailManager/tags/RELENG_1_1_2 (from rev 3262, MailManager/tags/RELENG_1_1_2_tmp) Copied: MailManager/tags/RELENG_1_1_BP (from rev 3262, MailManager/tags/RELENG_1_1_BP_tmp) Copied: MailManager/tags/RELENG_2_0_0_A1 (from rev 3262, MailManager/tags/RELENG_2_0_0_A1_tmp) Copied: MailManager/tags/RELENG_2_0_0_A2 (from rev 3262, MailManager/tags/RELENG_2_0_0_A2_tmp) Copied: MailManager/tags/RELENG_2_0_0_B1 (from rev 3262, MailManager/tags/RELENG_2_0_0_B1_tmp) Copied: MailManager/tags/RELENG_2_0_0_B2 (from rev 3262, MailManager/tags/RELENG_2_0_0_B2_tmp) Copied: MailManager/tags/RELENG_2_0_0_B3 (from rev 3262, MailManager/tags/RELENG_2_0_0_B3_tmp) Copied: MailManager/tags/RELENG_2_0_1_A1 (from rev 3262, MailManager/tags/RELENG_2_0_1_A1_tmp) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-06-29 12:03:24
|
Revision: 3272 Author: kevca Date: 2006-06-29 05:01:41 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3272&view=rev Log Message: ----------- Massive restructuring from CVS import from sourceforge Added Paths: ----------- MailManager/tags/RELENG_2_0_1_BETA1/ MailManager/tags/RELENG_2_0_1_RC1/ MailManager/tags/RELENG_2_0_1_RC2/ MailManager/tags/RELENG_2_0_1_RELEASE/ MailManager/tags/RELENG_2_0_2/ MailManager/tags/RELENG_2_0_2_RELEASE/ MailManager/tags/RELENG_2_0_2_UPDATE/ MailManager/tags/RELENG_2_0_3_RELEASE/ MailManager/tags/RELENG_2_0_4_RELEASE/ MailManager/tags/RELENG_2_0_5_RELEASE/ MailManager/tags/RELENG_2_0_6_RELEASE/ MailManager/tags/RELENG_2_0_7_RELEASE/ MailManager/tags/RELENG_2_0_BP/ MailManager/tags/RELENG_2_0_FINAL/ MailManager/tags/RELENG_2_0_LASTMERGETOHEAD/ MailManager/tags/RELENG_2_0_R1/ MailManager/tags/RELENG_2_0_R4/ MailManager/tags/v1-0b1/ MailManager/tags/v1-0b1-migration/ MailManager/tags/v1-0b2/ MailManager/tags/v1-0b2-newfeatures/ MailManager/tags/v1-0b3/ MailManager/tags/v1-0b4/ MailManager/tags/v1-0rc1/ MailManager/tags/v1-0rc2/ MailManager/tags/v1-1rc2/ MailManager/tags/v1-1rc3/ Removed Paths: ------------- MailManager/tags/RELENG_2_0_1_BETA1_tmp/ MailManager/tags/RELENG_2_0_1_RC1_tmp/ MailManager/tags/RELENG_2_0_1_RC2_tmp/ MailManager/tags/RELENG_2_0_1_RELEASE_tmp/ MailManager/tags/RELENG_2_0_2_RELEASE_tmp/ MailManager/tags/RELENG_2_0_2_UPDATE_tmp/ MailManager/tags/RELENG_2_0_2_tmp/ MailManager/tags/RELENG_2_0_3_RELEASE_tmp/ MailManager/tags/RELENG_2_0_4_RELEASE_tmp/ MailManager/tags/RELENG_2_0_5_RELEASE_tmp/ MailManager/tags/RELENG_2_0_6_RELEASE_tmp/ MailManager/tags/RELENG_2_0_7_RELEASE_tmp/ MailManager/tags/RELENG_2_0_BP_tmp/ MailManager/tags/RELENG_2_0_FINAL_tmp/ MailManager/tags/RELENG_2_0_LASTMERGETOHEAD_tmp/ MailManager/tags/RELENG_2_0_R1_tmp/ MailManager/tags/RELENG_2_0_R4_tmp/ MailManager/tags/v1-0b1-migration_tmp/ MailManager/tags/v1-0b1_tmp/ MailManager/tags/v1-0b2-newfeatures_tmp/ MailManager/tags/v1-0b2_tmp/ MailManager/tags/v1-0b3_tmp/ MailManager/tags/v1-0b4_tmp/ MailManager/tags/v1-0rc1_tmp/ MailManager/tags/v1-0rc2_tmp/ MailManager/tags/v1-1rc2_tmp/ MailManager/tags/v1-1rc3_tmp/ Copied: MailManager/tags/RELENG_2_0_1_BETA1 (from rev 3262, MailManager/tags/RELENG_2_0_1_BETA1_tmp) Copied: MailManager/tags/RELENG_2_0_1_RC1 (from rev 3262, MailManager/tags/RELENG_2_0_1_RC1_tmp) Copied: MailManager/tags/RELENG_2_0_1_RC2 (from rev 3262, MailManager/tags/RELENG_2_0_1_RC2_tmp) Copied: MailManager/tags/RELENG_2_0_1_RELEASE (from rev 3262, MailManager/tags/RELENG_2_0_1_RELEASE_tmp) Copied: MailManager/tags/RELENG_2_0_2 (from rev 3262, MailManager/tags/RELENG_2_0_2_tmp) Copied: MailManager/tags/RELENG_2_0_2_RELEASE (from rev 3262, MailManager/tags/RELENG_2_0_2_RELEASE_tmp) Copied: MailManager/tags/RELENG_2_0_2_UPDATE (from rev 3262, MailManager/tags/RELENG_2_0_2_UPDATE_tmp) Copied: MailManager/tags/RELENG_2_0_3_RELEASE (from rev 3262, MailManager/tags/RELENG_2_0_3_RELEASE_tmp) Copied: MailManager/tags/RELENG_2_0_4_RELEASE (from rev 3262, MailManager/tags/RELENG_2_0_4_RELEASE_tmp) Copied: MailManager/tags/RELENG_2_0_5_RELEASE (from rev 3262, MailManager/tags/RELENG_2_0_5_RELEASE_tmp) Copied: MailManager/tags/RELENG_2_0_6_RELEASE (from rev 3262, MailManager/tags/RELENG_2_0_6_RELEASE_tmp) Copied: MailManager/tags/RELENG_2_0_7_RELEASE (from rev 3262, MailManager/tags/RELENG_2_0_7_RELEASE_tmp) Copied: MailManager/tags/RELENG_2_0_BP (from rev 3262, MailManager/tags/RELENG_2_0_BP_tmp) Copied: MailManager/tags/RELENG_2_0_FINAL (from rev 3262, MailManager/tags/RELENG_2_0_FINAL_tmp) Copied: MailManager/tags/RELENG_2_0_LASTMERGETOHEAD (from rev 3262, MailManager/tags/RELENG_2_0_LASTMERGETOHEAD_tmp) Copied: MailManager/tags/RELENG_2_0_R1 (from rev 3262, MailManager/tags/RELENG_2_0_R1_tmp) Copied: MailManager/tags/RELENG_2_0_R4 (from rev 3262, MailManager/tags/RELENG_2_0_R4_tmp) Copied: MailManager/tags/v1-0b1 (from rev 3262, MailManager/tags/v1-0b1_tmp) Copied: MailManager/tags/v1-0b1-migration (from rev 3262, MailManager/tags/v1-0b1-migration_tmp) Copied: MailManager/tags/v1-0b2 (from rev 3262, MailManager/tags/v1-0b2_tmp) Copied: MailManager/tags/v1-0b2-newfeatures (from rev 3262, MailManager/tags/v1-0b2-newfeatures_tmp) Copied: MailManager/tags/v1-0b3 (from rev 3262, MailManager/tags/v1-0b3_tmp) Copied: MailManager/tags/v1-0b4 (from rev 3262, MailManager/tags/v1-0b4_tmp) Copied: MailManager/tags/v1-0rc1 (from rev 3262, MailManager/tags/v1-0rc1_tmp) Copied: MailManager/tags/v1-0rc2 (from rev 3262, MailManager/tags/v1-0rc2_tmp) Copied: MailManager/tags/v1-1rc2 (from rev 3262, MailManager/tags/v1-1rc2_tmp) Copied: MailManager/tags/v1-1rc3 (from rev 3262, MailManager/tags/v1-1rc3_tmp) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ke...@us...> - 2006-07-21 13:23:34
|
Revision: 3306 Author: kevca Date: 2006-07-21 06:23:17 -0700 (Fri, 21 Jul 2006) ViewCVS: http://svn.sourceforge.net/mailmanager/?rev=3306&view=rev Log Message: ----------- Tagging new version for internal testing Modified Paths: -------------- MailManager/tags/RELENG_2_1_RC6_PRE6/docs/development/source/sections/ruleset.xml MailManager/tags/RELENG_2_1_RC6_PRE6/docs/development/source/sections/testing.xml MailManager/tags/RELENG_2_1_RC6_PRE6/docs/development/source/sections/unicode.xml Added Paths: ----------- MailManager/tags/RELENG_2_1_RC6_PRE6/ MailManager/tags/RELENG_2_1_RC6_PRE6/version.txt Removed Paths: ------------- MailManager/tags/RELENG_2_1_RC6_PRE6/version.txt Copied: MailManager/tags/RELENG_2_1_RC6_PRE6 (from rev 3304, MailManager/branches/RELENG_2_1) Modified: MailManager/tags/RELENG_2_1_RC6_PRE6/docs/development/source/sections/ruleset.xml =================================================================== --- MailManager/branches/RELENG_2_1/docs/development/source/sections/ruleset.xml 2006-07-21 13:05:37 UTC (rev 3304) +++ MailManager/tags/RELENG_2_1_RC6_PRE6/docs/development/source/sections/ruleset.xml 2006-07-21 13:23:17 UTC (rev 3306) @@ -1,4 +1,4 @@ -<!-- $Id:$ --> +<!-- $Id$ --> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" Modified: MailManager/tags/RELENG_2_1_RC6_PRE6/docs/development/source/sections/testing.xml =================================================================== --- MailManager/branches/RELENG_2_1/docs/development/source/sections/testing.xml 2006-07-21 13:05:37 UTC (rev 3304) +++ MailManager/tags/RELENG_2_1_RC6_PRE6/docs/development/source/sections/testing.xml 2006-07-21 13:23:17 UTC (rev 3306) @@ -1,4 +1,4 @@ -<!-- $Id:$ --> +<!-- $Id$ --> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" Modified: MailManager/tags/RELENG_2_1_RC6_PRE6/docs/development/source/sections/unicode.xml =================================================================== --- MailManager/branches/RELENG_2_1/docs/development/source/sections/unicode.xml 2006-07-21 13:05:37 UTC (rev 3304) +++ MailManager/tags/RELENG_2_1_RC6_PRE6/docs/development/source/sections/unicode.xml 2006-07-21 13:23:17 UTC (rev 3306) @@ -1,4 +1,4 @@ -<!-- $Id:$ --> +<!-- $Id$ --> <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" Deleted: MailManager/tags/RELENG_2_1_RC6_PRE6/version.txt =================================================================== --- MailManager/branches/RELENG_2_1/version.txt 2006-07-21 13:05:37 UTC (rev 3304) +++ MailManager/tags/RELENG_2_1_RC6_PRE6/version.txt 2006-07-21 13:23:17 UTC (rev 3306) @@ -1 +0,0 @@ -2.1-rc6-pre5 Copied: MailManager/tags/RELENG_2_1_RC6_PRE6/version.txt (from rev 3305, MailManager/branches/RELENG_2_1/version.txt) =================================================================== --- MailManager/tags/RELENG_2_1_RC6_PRE6/version.txt (rev 0) +++ MailManager/tags/RELENG_2_1_RC6_PRE6/version.txt 2006-07-21 13:23:17 UTC (rev 3306) @@ -0,0 +1 @@ +2.1-rc6-pre6 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |