mirror of
https://github.com/django-helpdesk/django-helpdesk.git
synced 2024-11-07 16:54:10 +01:00
Remove django-tagging support, as that library is unmaintained. Closes #194.
This commit is contained in:
parent
3de2cc42ba
commit
d340446feb
11
README.rst
11
README.rst
@ -26,11 +26,11 @@ Dependencies (pre-flight checklist)
|
||||
-----------------------------------
|
||||
|
||||
1. Python 2.5+
|
||||
2. Django (1.3 or newer)
|
||||
2. Django (1.4 or newer)
|
||||
3. South for database migrations (highly recommended, but not required). Download from http://south.aeracode.org/
|
||||
4. An existing WORKING Django project with database etc. If you
|
||||
cannot log into the Admin, you won't get this product working.
|
||||
5. You must have ``django.contrib.markup`` in your ``settings.INSTALLED_APPS`` setting.
|
||||
5. `pip install django-bootstrap-form` and add `bootstrapform` to `settings.INSTALLED_APPS`
|
||||
|
||||
**NOTE REGARDING SQLITE AND SEARCHING:**
|
||||
If you use sqlite as your database, the search function will not work as
|
||||
@ -55,13 +55,6 @@ If you do NOT do this step, and you only want to use English-language templates,
|
||||
you can continue however you will receive a warning when running the 'migrate'
|
||||
commands.
|
||||
|
||||
Tagging
|
||||
-------
|
||||
|
||||
If you use Django-tagging and want to tag your Helpdesk tickets, ensure that
|
||||
django-tagging is installed and you have done a ``syncdb`` **before** you
|
||||
add ``helpdesk`` to your ``INSTALLED_APPS``.
|
||||
|
||||
Fresh Django Installations
|
||||
--------------------------
|
||||
|
||||
|
@ -22,7 +22,6 @@ except ImportError:
|
||||
|
||||
from helpdesk.lib import send_templated_mail, safe_template_context
|
||||
from helpdesk.models import Ticket, Queue, FollowUp, Attachment, IgnoreEmail, TicketCC, CustomField, TicketCustomFieldValue, TicketDependency
|
||||
from helpdesk.settings import HAS_TAG_SUPPORT
|
||||
from helpdesk import settings as helpdesk_settings
|
||||
|
||||
class EditTicketForm(forms.ModelForm):
|
||||
@ -176,17 +175,6 @@ class TicketForm(forms.Form):
|
||||
help_text=_('You can attach a file such as a document or screenshot to this ticket.'),
|
||||
)
|
||||
|
||||
if HAS_TAG_SUPPORT:
|
||||
tags = forms.CharField(
|
||||
max_length=255,
|
||||
required=False,
|
||||
widget=forms.TextInput(),
|
||||
label=_('Tags'),
|
||||
help_text=_('Words, separated by spaces, or phrases separated by commas. '
|
||||
'These should communicate significant characteristics of this '
|
||||
'ticket'),
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""
|
||||
Add any custom fields that are defined to the form
|
||||
@ -255,9 +243,6 @@ class TicketForm(forms.Form):
|
||||
due_date = self.cleaned_data['due_date'],
|
||||
)
|
||||
|
||||
if HAS_TAG_SUPPORT:
|
||||
t.tags = self.cleaned_data['tags']
|
||||
|
||||
if self.cleaned_data['assigned_to']:
|
||||
try:
|
||||
u = User.objects.get(id=self.cleaned_data['assigned_to'])
|
||||
|
@ -21,11 +21,6 @@ try:
|
||||
except ImportError:
|
||||
from datetime import datetime as timezone
|
||||
|
||||
from helpdesk.settings import HAS_TAG_SUPPORT
|
||||
|
||||
if HAS_TAG_SUPPORT:
|
||||
from tagging.fields import TagField
|
||||
|
||||
class Queue(models.Model):
|
||||
"""
|
||||
A queue is a collection of tickets into what would generally be business
|
||||
@ -445,9 +440,6 @@ class Ticket(models.Model):
|
||||
return TicketDependency.objects.filter(ticket=self).filter(depends_on__status__in=OPEN_STATUSES).count() == 0
|
||||
can_be_resolved = property(_can_be_resolved)
|
||||
|
||||
if HAS_TAG_SUPPORT:
|
||||
tags = TagField(blank=True)
|
||||
|
||||
class Meta:
|
||||
get_latest_by = "created"
|
||||
|
||||
|
@ -6,12 +6,6 @@ Default settings for django-helpdesk.
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
# check for django-tagging support
|
||||
HAS_TAG_SUPPORT = 'tagging' in settings.INSTALLED_APPS
|
||||
try:
|
||||
import tagging
|
||||
except ImportError:
|
||||
HAS_TAG_SUPPORT = False
|
||||
|
||||
try:
|
||||
DEFAULT_USER_SETTINGS = settings.HELPDESK_DEFAULT_SETTINGS
|
||||
@ -154,3 +148,5 @@ QUEUE_EMAIL_BOX_SSL = getattr(settings, 'QUEUE_EMAIL_BOX_SSL', None)
|
||||
QUEUE_EMAIL_BOX_HOST = getattr(settings, 'QUEUE_EMAIL_BOX_HOST', None)
|
||||
QUEUE_EMAIL_BOX_USER = getattr(settings, 'QUEUE_EMAIL_BOX_USER', None)
|
||||
QUEUE_EMAIL_BOX_PASSWORD = getattr(settings, 'QUEUE_EMAIL_BOX_PASSWORD', None)
|
||||
|
||||
HAS_TAG_SUPPORT = False
|
||||
|
@ -186,11 +186,6 @@ function googleTranslateElementInit() {
|
||||
<dt><label for='id_due_date'>{% trans "Due on" %}</label></dt>
|
||||
<dd>{{ form.due_date }}</dd>
|
||||
|
||||
{% if tags_enabled %}
|
||||
<dt><label for='id_tags'>{% trans "Tags" %}</label></dt>
|
||||
<dd><input type='text' id='id_tags' name='tags' value='{{ ticket.tags }}'/></dd>
|
||||
{% endif %}
|
||||
|
||||
</dl>
|
||||
|
||||
</div>
|
||||
|
@ -58,13 +58,6 @@
|
||||
<td>{{ ticketcc_string }} <strong><a class='tooltip' href='{% url 'helpdesk_ticket_cc' ticket.id %}'>{% trans "Manage" %}<span>{% trans "Click here to add / remove people who should receive an e-mail whenever this ticket is updated." %}</span></a></strong>{% if SHOW_SUBSCRIBE %}, <strong><a class='tooltip' href='?subscribe'>{% trans "Subscribe" %}<span>{% trans "Click here to subscribe yourself to this ticket, if you want to receive an e-mail whenever this ticket is updated." %}</span></a></strong>{% endif %}</td>
|
||||
</tr>
|
||||
|
||||
{% if tags_enabled %}
|
||||
<tr class='{% cycle rowcolors %}'>
|
||||
<th>{% trans "Tags" %}</th>
|
||||
<td>{{ ticket.tags }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
<tr class='{% cycle rowcolors %}'>
|
||||
<th>{% trans "Dependencies" %}</th>
|
||||
<td>{% for dep in ticket.ticketdependency.all %}
|
||||
|
@ -69,9 +69,6 @@ $(document).ready(function() {
|
||||
<option value='Status'>{% trans "Status" %}</option>
|
||||
<option value='Keywords'>{% trans "Keywords" %}</option>
|
||||
<option value='Dates'>{% trans "Date Range" %}</option>
|
||||
{% if tags_enabled %}
|
||||
<option value='Tags'>{% trans "Tags" %}</option>
|
||||
{% endif %}
|
||||
</select>
|
||||
<input type='button' id='filterBuilderButton' value='+' />
|
||||
{% csrf_token %}</form>
|
||||
@ -137,14 +134,6 @@ $(document).ready(function() {
|
||||
<input type='button' class='filterBuilderRemove' value='-' />
|
||||
</div>
|
||||
|
||||
{% if tags_enabled %}
|
||||
<div class='thumbnail filterBox{% if query_params.tags %} filterBoxShow{% endif %}' id='filterBoxTags'>
|
||||
<label for='id_tags'>{% trans "Tag(s)" %}</label><select id='id_tags' name='tags' multiple='selected' size='5'>{% for t in tag_choices %}<option value='{{t.name}}'{% if t.name|in_list:query_params.tags %} selected='selected'{% endif %}>{{ t.name }}</option>{% endfor %}</select>
|
||||
<p class='filterHelp'>{% trans "Ctrl-click to select multiple options" %}</p>
|
||||
<input type='button' class='filterBuilderRemove' value='-' />
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class='thumbnail filterBox{% if query %} filterBoxShow{% endif %}' id='filterBoxKeywords'>
|
||||
<label for='id_query'>{% trans "Keywords" %}</label><input type='text' name='q' value='{{ query }}' id='id_query' />
|
||||
<p class='filterHelp'>{% trans "Keywords are case-insensitive, and will be looked for in the title, body and submitter fields." %}</p>
|
||||
@ -232,7 +221,7 @@ $(document).ready(function() {
|
||||
<table class="table table-hover table-bordered">
|
||||
<thead>
|
||||
<tr class='row_tablehead'><td colspan='9'>{% trans "Tickets" %}</td></tr>
|
||||
<tr class='row_columnheads'><th>#</th><th> </th><th>{% trans "Pr" %}</th><th>{% trans "Title" %}</th><th>{% trans "Queue" %}</th><th>{% trans "Status" %}</th><th>{% trans "Created" %}</th><th>{% trans "Owner" %}</th>{% if tags_enabled %}<th>{% trans "Tags" %}</th>{% endif %}</tr>
|
||||
<tr class='row_columnheads'><th>#</th><th> </th><th>{% trans "Pr" %}</th><th>{% trans "Title" %}</th><th>{% trans "Queue" %}</th><th>{% trans "Status" %}</th><th>{% trans "Created" %}</th><th>{% trans "Owner" %}</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% if tickets %}{% for ticket in tickets.object_list %}
|
||||
@ -245,7 +234,6 @@ $(document).ready(function() {
|
||||
<td>{{ ticket.get_status }}</td>
|
||||
<td><span title='{{ ticket.created|date:"r" }}'>{{ ticket.created|timesince }} ago</span></td>
|
||||
<td>{{ ticket.get_assigned_to }}</td>
|
||||
{% if tags_enabled %}<td>{{ ticket.tags }}</td>{% endif %}
|
||||
</tr>
|
||||
{% endfor %}{% else %}
|
||||
<tr class='row_odd'><td colspan='5'>{% trans "No Tickets Match Your Selection" %}</td></tr>
|
||||
@ -273,4 +261,4 @@ $(document).ready(function() {
|
||||
<p><label for='id_mass_action'>{% trans "With Selected Tickets:" %}</label> <select name='action' id='id_mass_action'><option value='take'>{% trans "Take (Assign to me)" %}</option><option value='delete'>{% trans "Delete" %}</option><optgroup label='{% trans "Close" %}'><option value='close'>{% trans "Close (Don't Send E-Mail)" %}</option><option value='close_public'>{% trans "Close (Send E-Mail)" %}</option></optgroup><optgroup label='{% trans "Assign To" %}'><option value='unassign'>{% trans "Nobody (Unassign)" %}</option>{% for u in user_choices %}<option value='assign_{{ u.id }}'>{{ u.username }}</option>{% endfor %}</optgroup></select> <input type='submit' value='Go' /></p>
|
||||
{% csrf_token %}</form>
|
||||
{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -34,12 +34,8 @@ except ImportError:
|
||||
from helpdesk.forms import TicketForm, UserSettingsForm, EmailIgnoreForm, EditTicketForm, TicketCCForm, EditFollowUpForm, TicketDependencyForm
|
||||
from helpdesk.lib import send_templated_mail, query_to_dict, apply_query, safe_template_context
|
||||
from helpdesk.models import Ticket, Queue, FollowUp, TicketChange, PreSetReply, Attachment, SavedSearch, IgnoreEmail, TicketCC, TicketDependency
|
||||
from helpdesk.settings import HAS_TAG_SUPPORT
|
||||
from helpdesk import settings as helpdesk_settings
|
||||
|
||||
if HAS_TAG_SUPPORT:
|
||||
from tagging.models import Tag, TaggedItem
|
||||
|
||||
if helpdesk_settings.HELPDESK_ALLOW_NON_STAFF_TICKET_UPDATE:
|
||||
# treat 'normal' users like 'staff'
|
||||
staff_member_required = user_passes_test(lambda u: u.is_authenticated() and u.is_active)
|
||||
@ -272,7 +268,6 @@ def view_ticket(request, ticket_id):
|
||||
'active_users': users,
|
||||
'priorities': Ticket.PRIORITY_CHOICES,
|
||||
'preset_replies': PreSetReply.objects.filter(Q(queues=ticket.queue) | Q(queues__isnull=True)),
|
||||
'tags_enabled': HAS_TAG_SUPPORT,
|
||||
'ticketcc_string': ticketcc_string,
|
||||
'SHOW_SUBSCRIBE': SHOW_SUBSCRIBE,
|
||||
}))
|
||||
@ -346,7 +341,6 @@ def update_ticket(request, ticket_id, public=False):
|
||||
else:
|
||||
due_date = timezone.now()
|
||||
due_date = due_date.replace(due_date_year, due_date_month, due_date_day)
|
||||
tags = request.POST.get('tags', '')
|
||||
|
||||
no_changes = all([
|
||||
not request.FILES,
|
||||
@ -356,7 +350,6 @@ def update_ticket(request, ticket_id, public=False):
|
||||
priority == int(ticket.priority),
|
||||
due_date == ticket.due_date,
|
||||
(owner == -1) or (not owner and not ticket.assigned_to) or (owner and User.objects.get(id=owner) == ticket.assigned_to),
|
||||
(HAS_TAG_SUPPORT and tags == ticket.tags) or not HAS_TAG_SUPPORT,
|
||||
])
|
||||
if no_changes:
|
||||
return return_to_ticket(request.user, helpdesk_settings, ticket)
|
||||
@ -463,17 +456,6 @@ def update_ticket(request, ticket_id, public=False):
|
||||
c.save()
|
||||
ticket.due_date = due_date
|
||||
|
||||
if HAS_TAG_SUPPORT:
|
||||
if tags != ticket.tags:
|
||||
c = TicketChange(
|
||||
followup=f,
|
||||
field=_('Tags'),
|
||||
old_value=ticket.tags,
|
||||
new_value=tags,
|
||||
)
|
||||
c.save()
|
||||
ticket.tags = tags
|
||||
|
||||
if new_status in [ Ticket.RESOLVED_STATUS, Ticket.CLOSED_STATUS ]:
|
||||
if new_status == Ticket.RESOLVED_STATUS or ticket.resolution is None:
|
||||
ticket.resolution = comment
|
||||
@ -745,7 +727,7 @@ def ticket_list(request):
|
||||
or request.GET.has_key('q')
|
||||
or request.GET.has_key('sort')
|
||||
or request.GET.has_key('sortreverse')
|
||||
or request.GET.has_key('tags') ):
|
||||
):
|
||||
|
||||
# Fall-back if no querying is being done, force the list to only
|
||||
# show open/reopened/resolved (not closed) cases sorted by creation
|
||||
@ -821,13 +803,6 @@ def ticket_list(request):
|
||||
}
|
||||
ticket_qs = apply_query(Ticket.objects.select_related(), query_params)
|
||||
|
||||
## TAG MATCHING
|
||||
if HAS_TAG_SUPPORT:
|
||||
tags = request.GET.getlist('tags')
|
||||
if tags:
|
||||
ticket_qs = TaggedItem.objects.get_by_model(ticket_qs, tags)
|
||||
query_params['tags'] = tags
|
||||
|
||||
ticket_paginator = paginator.Paginator(ticket_qs, request.user.usersettings.settings.get('tickets_per_page') or 20)
|
||||
try:
|
||||
page = int(request.GET.get('page', '1'))
|
||||
@ -853,10 +828,6 @@ def ticket_list(request):
|
||||
querydict = request.GET.copy()
|
||||
querydict.pop('page', 1)
|
||||
|
||||
tag_choices = []
|
||||
if HAS_TAG_SUPPORT:
|
||||
# FIXME: restrict this to tags that are actually in use
|
||||
tag_choices = Tag.objects.all()
|
||||
|
||||
return render_to_response('helpdesk/ticket_list.html',
|
||||
RequestContext(request, dict(
|
||||
@ -866,14 +837,12 @@ def ticket_list(request):
|
||||
user_choices=User.objects.filter(is_active=True,is_staff=True),
|
||||
queue_choices=Queue.objects.all(),
|
||||
status_choices=Ticket.STATUS_CHOICES,
|
||||
tag_choices=tag_choices,
|
||||
urlsafe_query=urlsafe_query,
|
||||
user_saved_queries=user_saved_queries,
|
||||
query_params=query_params,
|
||||
from_saved_query=from_saved_query,
|
||||
saved_query=saved_query,
|
||||
search_message=search_message,
|
||||
tags_enabled=HAS_TAG_SUPPORT
|
||||
)))
|
||||
ticket_list = staff_member_required(ticket_list)
|
||||
|
||||
@ -891,7 +860,6 @@ def edit_ticket(request, ticket_id):
|
||||
return render_to_response('helpdesk/edit_ticket.html',
|
||||
RequestContext(request, {
|
||||
'form': form,
|
||||
'tags_enabled': HAS_TAG_SUPPORT,
|
||||
}))
|
||||
edit_ticket = staff_member_required(edit_ticket)
|
||||
|
||||
@ -924,7 +892,6 @@ def create_ticket(request):
|
||||
return render_to_response('helpdesk/create_ticket.html',
|
||||
RequestContext(request, {
|
||||
'form': form,
|
||||
'tags_enabled': HAS_TAG_SUPPORT,
|
||||
}))
|
||||
create_ticket = staff_member_required(create_ticket)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user