Markdown for Knowledge base, ticket and comments.

Removed markdown-deux
This commit is contained in:
Jachym Cepicky 2019-03-05 18:05:11 +00:00 committed by Jachym Cepicky
parent 4fb6c40c4e
commit d4f1f85b29
9 changed files with 55 additions and 17 deletions

View File

@ -37,7 +37,6 @@ INSTALLED_APPS = [
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'django.contrib.sites', 'django.contrib.sites',
'django.contrib.humanize', 'django.contrib.humanize',
'markdown_deux',
'bootstrap4form', 'bootstrap4form',
'helpdesk' 'helpdesk'
] ]

View File

@ -57,7 +57,6 @@ errors with trying to create User settings.
'django.contrib.sites', # Required for determining domain url for use in emails 'django.contrib.sites', # Required for determining domain url for use in emails
'django.contrib.admin', # Required for helpdesk admin/maintenance 'django.contrib.admin', # Required for helpdesk admin/maintenance
'django.contrib.humanize', # Required for elapsed time formatting 'django.contrib.humanize', # Required for elapsed time formatting
'markdown_deux', # Required for Knowledgebase item formatting
'bootstrap4form', # Required for nicer formatting of forms with the default templates 'bootstrap4form', # Required for nicer formatting of forms with the default templates
'helpdesk', # This is us! 'helpdesk', # This is us!
) )
@ -114,21 +113,17 @@ errors with trying to create User settings.
Ideally, accessing http://MEDIA_URL/helpdesk/attachments/ will give you a 403 access denied error. Ideally, accessing http://MEDIA_URL/helpdesk/attachments/ will give you a 403 access denied error.
7. If it's not already installed, install ``markdown_deux`` and ensure it's in your ``INSTALLED_APPS``:: 7. If you already have a view handling your logins, then great! If not, add the following to ``settings.py`` to get your Django installation to use the login view included in ``django-helpdesk``::
pip install django-markdown-deux
8. If you already have a view handling your logins, then great! If not, add the following to ``settings.py`` to get your Django installation to use the login view included in ``django-helpdesk``::
LOGIN_URL = '/helpdesk/login/' LOGIN_URL = '/helpdesk/login/'
Alter the URL to suit your installation path. Alter the URL to suit your installation path.
9. Load initial e-mail templates, otherwise you will not be able to send e-mail:: 8. Load initial e-mail templates, otherwise you will not be able to send e-mail::
python manage.py loaddata emailtemplate.json python manage.py loaddata emailtemplate.json
10. If you intend on using local mail directories for processing email into tickets, be sure to create the mail directory before adding it to the queue in the Django administrator interface. The default mail directory is ``/var/lib/mail/helpdesk/``. Ensure that the directory has appropriate permissions so that your Django/web server instance may read and write files from this directory. 9. If you intend on using local mail directories for processing email into tickets, be sure to create the mail directory before adding it to the queue in the Django administrator interface. The default mail directory is ``/var/lib/mail/helpdesk/``. Ensure that the directory has appropriate permissions so that your Django/web server instance may read and write files from this directory.
Note that by default, any mail files placed in your local directory will be permanently deleted after being successfully processed. It is strongly recommended that you take further steps to save emails if you wish to retain backups. Note that by default, any mail files placed in your local directory will be permanently deleted after being successfully processed. It is strongly recommended that you take further steps to save emails if you wish to retain backups.

View File

@ -19,11 +19,37 @@ from io import StringIO
import re import re
import datetime import datetime
from django.utils.safestring import mark_safe
from markdown import markdown
from markdown.extensions import Extension
import uuid import uuid
from .templated_email import send_templated_mail from .templated_email import send_templated_mail
class EscapeHtml(Extension):
def extendMarkdown(self, md, md_globals):
del md.preprocessors['html_block']
del md.inlinePatterns['html']
def get_markdown(text):
if not text:
return ""
return mark_safe(
markdown(
text,
extensions=[
EscapeHtml(), 'markdown.extensions.nl2br',
'markdown.extensions.fenced_code'
]
)
)
class Queue(models.Model): class Queue(models.Model):
""" """
A queue is a collection of tickets into what would generally be business A queue is a collection of tickets into what would generally be business
@ -717,6 +743,9 @@ class Ticket(models.Model):
queue = '-'.join(parts[0:-1]) queue = '-'.join(parts[0:-1])
return queue, parts[-1] return queue, parts[-1]
def get_markdown(self):
return get_markdown(self.description)
class FollowUpManager(models.Manager): class FollowUpManager(models.Manager):
@ -768,8 +797,10 @@ class FollowUp(models.Model):
_('Public'), _('Public'),
blank=True, blank=True,
default=False, default=False,
help_text=_('Public tickets are viewable by the submitter and all ' help_text=_(
'staff, but non-public tickets can only be seen by staff.'), 'Public tickets are viewable by the submitter and all '
'staff, but non-public tickets can only be seen by staff.'
),
) )
user = models.ForeignKey( user = models.ForeignKey(
@ -821,6 +852,9 @@ class FollowUp(models.Model):
t.save() t.save()
super(FollowUp, self).save(*args, **kwargs) super(FollowUp, self).save(*args, **kwargs)
def get_markdown(self):
return get_markdown(self.comment)
class TicketChange(models.Model): class TicketChange(models.Model):
""" """
@ -1161,6 +1195,9 @@ class KBItem(models.Model):
from django.urls import reverse from django.urls import reverse
return reverse('helpdesk:kb_item', args=(self.id,)) return reverse('helpdesk:kb_item', args=(self.id,))
def get_markdown(self):
return get_markdown(self.answer)
class SavedSearch(models.Model): class SavedSearch(models.Model):
""" """

View File

@ -77,3 +77,9 @@ Add your custom styles here
} }
#helpdesk-body {padding-top: 100px;} #helpdesk-body {padding-top: 100px;}
img.brand {padding-right: 30px;} img.brand {padding-right: 30px;}
pre {
background: #eee;
padding: 1em;
border: 1pt solid white;
}

View File

@ -1,4 +1,4 @@
{% extends "helpdesk/public_base.html" %}{% load i18n %}{% load markdown_deux_tags %} {% extends "helpdesk/public_base.html" %}{% load i18n %}
{% block helpdesk_breadcrumb %} {% block helpdesk_breadcrumb %}
<li class="breadcrumb-item"> <li class="breadcrumb-item">
@ -19,7 +19,7 @@
{{ item.question }} {{ item.question }}
</div> </div>
<div class="card-body"> <div class="card-body">
<p>{{ item.answer|markdown }}</p> <p>{{ item.get_markdown }}</p>
</div> </div>
<div class="card-footer"> <div class="card-footer">
<div class="row"> <div class="row">

View File

@ -2,6 +2,8 @@
{% load i18n bootstrap4form humanize %} {% load i18n bootstrap4form humanize %}
{% load static from staticfiles %} {% load static from staticfiles %}
{% block helpdesk_title %}{{ ticket.queue.slug }}-{{ ticket.id }} : {% trans "View Ticket Details" %}{% endblock %} {% block helpdesk_title %}{{ ticket.queue.slug }}-{{ ticket.id }} : {% trans "View Ticket Details" %}{% endblock %}
{% block helpdesk_head %} {% block helpdesk_head %}
@ -44,7 +46,7 @@
</div> </div>
<p class="mb-1"> <p class="mb-1">
{% if followup.comment %} {% if followup.comment %}
<p>{{ followup.comment|force_escape|urlizetrunc:50|num_to_link|linebreaksbr }}</p> <p>{{ followup.get_markdown|urlizetrunc:50|num_to_link|linebreaksbr }}</p>
{% endif %} {% endif %}
{% if followup.time_spent %} {% if followup.time_spent %}
<small>{% trans "Time spent" %}: {{ followup.time_spent }}</small></p> <small>{% trans "Time spent" %}: {{ followup.time_spent }}</small></p>

View File

@ -26,7 +26,7 @@
<th colspan='2'>{% trans "Description" %}</th> <th colspan='2'>{% trans "Description" %}</th>
</tr> </tr>
<tr> <tr>
<td id="ticket-description" colspan='2'>{{ ticket.description|force_escape|urlizetrunc:50|num_to_link|linebreaksbr }}</td> <td id="ticket-description" colspan='2'>{{ ticket.get_markdown|urlizetrunc:50|num_to_link|linebreaksbr }}</td>
</tr> </tr>
{% if ticket.resolution %}<tr> {% if ticket.resolution %}<tr>

View File

@ -27,7 +27,6 @@ class QuickDjangoTest(object):
'django.contrib.sessions', 'django.contrib.sessions',
'django.contrib.sites', 'django.contrib.sites',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'markdown_deux',
'bootstrap4form' 'bootstrap4form'
) )
MIDDLEWARE = [ MIDDLEWARE = [

View File

@ -4,7 +4,7 @@ celery
django-celery-beat django-celery-beat
email-reply-parser email-reply-parser
akismet akismet
django-markdown-deux markdown
beautifulsoup4 beautifulsoup4
lxml lxml
simplejson simplejson