A Django application to manage tickets for an internal helpdesk. Formerly known as Jutda Helpdesk.
Go to file
Ross Poulton 576150c40d Fix issue #72 - international characters in e-mail attachment filenames
threw up errors.

Also sanitised filenames to remove anything other than 'a-zA-Z0-9._-'.

Thanks to mdornseif for the patch.
2009-07-21 09:29:57 +00:00
fixtures * Use markdown on knowledgebase pages 2008-10-07 06:52:52 +00:00
htdocs Fixes issues #56 and #58: Introducing NullBooleanField in Django 1.1 raised a validation error in Jutda Helpdesk due to us relying on a bug (oops!). 2009-05-24 05:26:12 +00:00
locale * Added russian translation (Issue # 14). Thanks to Artiom Diomin. 2008-10-26 00:46:41 +00:00
management Fix issue #72 - international characters in e-mail attachment filenames 2009-07-21 09:29:57 +00:00
templates Issue #75: Typo in 'recent activities' RSS feed URL 2009-07-15 23:08:31 +00:00
templatetags Fixes issue #51: links to other tickets (via #n syntax in followups etc) were 2009-03-08 06:13:51 +00:00
views Fixes issue #63. Thanks, Kirim. 2009-06-27 01:00:55 +00:00
__init__.py Initial import of Python files & templates 2007-12-27 00:29:17 +00:00
admin.py * Add ability to modify email ignore list via Admin 2008-12-02 20:47:49 +00:00
akismet.py Resolves issue #62 - adds spam filtering via akismet.py using either 2009-06-25 11:22:53 +00:00
forms.py Fixes issue #49 - tickets had no 'edit' function. 2009-06-03 11:43:46 +00:00
lib.py Resolves issue #62 - adds spam filtering via akismet.py using either 2009-06-25 11:22:53 +00:00
LICENSE Big checkin that adds a number of features and makes some changes: 2008-08-28 09:06:24 +00:00
LICENSE.3RDPARTY Resolves issue #62 - adds spam filtering via akismet.py using either 2009-06-25 11:22:53 +00:00
models.py Fixes issues #56 and #58: Introducing NullBooleanField in Django 1.1 raised a validation error in Jutda Helpdesk due to us relying on a bug (oops!). 2009-05-24 05:26:12 +00:00
README Issue #76: Disable directory listings for attachments. 2009-07-15 22:58:57 +00:00
UPGRADE Add option to the EmailIgnore model to allow emails from an ignored address to be deleted (previous behaviour was to keep them all, so the mailbox could potentially become quite large - and every message was downloaded again every time the mailbox was checked). Upgrade instructions provided to both add the new database field and automatically switch to the old behaviour. 2009-01-23 10:36:41 +00:00
urls.py Fixes issue #49 - tickets had no 'edit' function. 2009-06-03 11:43:46 +00:00

Jutda Helpdesk - A Django powered ticket tracker for small enterprise.

(c) Copyright 2009 Jutda. All Rights Reserved. See LICENSE for details.

#########################
0. Table of Contents
#########################

1. Licensing
2. Dependencies (pre-flight checklist)
3. Upgrading from previous versions
4. Installation
5. Initial Configuration
6. Spam filtering
7. API Usage
8. Thank You

#########################
1. Licensing
#########################

See the file 'LICENSE' for licensing terms. Note that Jutda Helpdesk is 
distributed with 3rd party products which have their own licenses. See 
LICENSE.3RDPARTY for license terms for included packages.

#########################
2. Dependencies (pre-flight checklist)
#########################
1. Python 2.3+ 

2. Django (1.0 alpha 1 or newer, or an SVN checkout after 7941).

3. An existing WORKING Django project with database etc. If you
   cannot log into the Admin, you won't get this product working.

NOTE REGARDING SQLITE AND SEARCHING:
If you use sqlite as your database, the search function will not work as
effectively as it will with other databases due to its inability to do
case-insensitive searches. It's recommended that you use PostgreSQL or MySQL
if possible. For more information, see this note in the Django documentation:
http://docs.djangoproject.com/en/dev/ref/databases/#sqlite-string-matching

When you try to do a keyword search using sqlite, a message will be displayed
to alert you to this shortcoming. There is no way around it, sorry.

#########################
3. Upgrading from previous versions
#########################

If you are upgrading from a previous version of Jutda Helpdesk, you should 
read the UPGRADING file to learn what changes you will need to make to get 
the current version of Jutda Helpdesk working.

1. Find out your current version of Jutda Helpdesk. In the 'helpdesk' folder,
   use the 'svn' command to find the current revision:

    svn info .

   Look for the 'Revision' line, eg:

    Revision: 92

2. Read through the UPGRADE file, looking for any changse made _after_ that 
   revision. Apply the commands provided in order from oldest to most recent.

3. Restart your web server software (eg Apache) or FastCGI instance, to ensure
   the latest changes are in use.

4. Continue to the 'Initial Configuration' area, if needed.

#########################
4. Installation
#########################

1. Place 'helpdesk' in your Python path. I use /var/django, others may use 
   /usr/lib/python2.3/site-packages/ or a similar path.

2. In your projects' settings.py file, add these lines to the INSTALLED_APPS
   setting:
   'helpdesk',
   'django.contrib.admin',

3. In your projects' urls.py file, add this line:
    (r'helpdesk/', include('helpdesk.urls')),

    You can substitute 'helpdesk/' for something else, eg 'support/' or even ''.

4. Ensure the admin line is un-hashed in urls.py:
    # Uncomment this for admin:
    from django.contrib import admin
    admin.autodiscover()
    (r'^admin/(.*)', admin.site.root),

    If you use helpdesk at the top of your domain (at /), ensure the admin 
    line comes BEFORE the helpdesk line.

5. In your project directory (NOT the helpdesk directory) run 
    ./manage.py syncdb
   to create database tables

6. Inside your MEDIA_ROOT folder, create a new folder called 'helpdesk' and 
   copy the contents of helpdesk/htdocs/ into it. Alternatively, create a
   symlink:
    ln -s /path/to/helpdesk/htdocs /path/to/media/helpdesk

   This application assumes all helpdesk media will be accessible at
   http://MEDIA_URL/helpdesk/

7. Inside your MEDIA_ROOT folder, inside the 'helpdesk' folder, is a folder 
   called 'attachments'. Ensure your web server software can write to this 
   folder - something like this should do the trick:

    chown www-data:www-data attachments/; chmod 700 attachments
     (substitute www-data for the user / group that your web server runs
      as, eg 'apache' or 'httpd')

   If all else fails ensure all users can write to it:

    chmod 777 attachments/

   This is NOT recommended, especially if you're on a shared server.

8. Ensure that your 'attachments' folder has directory listings turned off, 
   to ensure users don't download files that they are not specifically linked 
   to from their tickets.

   If you are using Apache, put a .htaccess file in the 'attachments' folder 
   with the following content:

    Options -Indexes

   You will also have to make sure that .htaccess files aren't being ignored.

   Ideally, accessing http://MEDIA_URL/helpdesk/attachments/ will give you a 
   403 access denied error.

#########################
5. Initial Configuration
#########################

1. Visit http://yoursite/admin/ and add a Helpdesk Queue. If you wish, 
   enter your POP3 or IMAP server details. 

   IMPORTANT NOTE: Any tickets created via POP3 or IMAP mailboxes will DELETE
   the original e-mail from the mail server.

2. Visit http://yoursite/helpdesk/ (or other path as defined in your urls.py) 

3. If you wish to automatically create tickets from the contents of an e-mail 
   inbox, set up a cronjob to run scripts/get_email.py on a regular basis. 

   Don't forget to set the relevant Django environment variables in your 
   crontab:

   */5 * * * * /path/to/helpdesksite/manage.py get_email

   This will run the e-mail import every 5 minutes

   IMPORTANT NOTE: Any tickets created via POP3 or IMAP mailboxes will DELETE
   the original e-mail from the mail server.

4. If you wish to automatically escalate tickets based on their age, set up 
   a cronjob to run scripts/escalate_tickets.py on a regular basis:
   
   0 * * * * /path/to/helpdesksite/manage.py escalate_tickets
   
   This will run the escalation process hourly, using the 'Escalation Hours' 
   setting for each queue to determine which tickets to escalate.

5. If you wish to exclude some days (eg, weekends) from escalation calculations, enter 
   the dates manually via the Admin, or setup a cronjob to run 
   scripts/create_escalation_exclusions on a regular basis:

   0 0 * * 0 /path/to/helpdesksite/manage.py create_escalation_exclusions.py --days saturday,sunday --escalate-verbosely

   This will, on a weekly basis, create exclusions for the coming weekend.

6. Log in to your Django admin screen, and go to the 'Sites' module. If the 
   site 'example.com' is listed, click it and update the details so they are 
   relevant for your website.

7. If you do not send mail directly from your web server (eg, you need to 
   use an SMTP server) then edit your settings.py file so it contains your 
   mail server details:

   EMAIL_HOST = 'XXXXX'
   EMAIL_HOST_USER = 'YYYYYY@ZZZZ.PPP'
   EMAIL_HOST_PASSWORD = '123456'

You're now up and running!

#########################
7. Spam filtering
#########################

Jutda Helpdesk includes a copy of `akismet.py' by Michael Foord, which lets
incoming ticket submissions be automatically checked against either the 
Akismet or TypePad Anti-Spam services.

To enable this functionality, sign up for an API key with one of the following
serviceS:

Akismet: http://akismet.com/
Save your API key in settings.py as AKISMET_API_KEY
Note: Akismet is only free for personal use. Paid commercial accounts are 
available.

TypePad AntiSpam: http://antispam.typepad.com/
Save your API key in settings.py as TYPEPAD_ANTISPAM_API_KEY
This service is free to use, within their terms and conditions.

If you have either of these settings enabled, the spam filtering will be 
done automatically. If you have *both* settings configured, TypePad will 
be used instead of Akismet.

Example configuration in settings.py:

TYPEPAD_ANTISPAM_API_KEY = 'abc123'

#########################
7. API Usage
#########################

Jutda Helpdesk includes an API accessible via HTTP POST requests, allowing
you to create and alter tickets from 3rd party software and systems.

For usage instructions and command syntax, see the file
templates/helpdesk/api_help.html, or visit http://helpdesk/api/help/.

#########################
8. Thank You
#########################

While this started as a project to suit my own needs, since publishing the
code a number of people have made some fantastic improvements and provided
bug fixes and updates as the Django codebase has moved on and caused small
portions of this application to break.

To these people, my sincere thanks:

David Clymer <http://djangopeople.net/vezult/>
Chris Etcp
Nikolay Panov