diff --git a/docs/install.rst b/docs/install.rst index 82a55c78..da306c6c 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -56,11 +56,7 @@ Adding To Your Django Project ./manage.py syncdb - If you're wise enough to use South, the first migration will need to be a fake:: - - ./manage.py migrate helpdesk 0001 --fake - - After the initial migration, all others are done in the usual way:: + Then migrate using South ./manage.py migrate helpdesk diff --git a/docs/settings.rst b/docs/settings.rst index 6e9d250a..c1e89089 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -1,6 +1,14 @@ Settings ======== +First, django-helpdesk needs ``django.core.context_processors.request`` activated, so in your ``settings.py`` add:: + + from django.conf import global_settings + TEMPLATE_CONTEXT_PROCESSORS = ( + global_settings.TEMPLATE_CONTEXT_PROCESSORS + + ('django.core.context_processors.request',) + ) + The following settings can be changed in your ``settings.py`` file to help change the way django-helpdesk operates. HELPDESK_DEFAULT_SETTINGS diff --git a/helpdesk/fixtures/initial_data.json b/helpdesk/fixtures/initial_data.json index 1ecb3262..a8bbffe5 100644 --- a/helpdesk/fixtures/initial_data.json +++ b/helpdesk/fixtures/initial_data.json @@ -574,5 +574,197 @@ "subject": "(Aktualisiert)", "locale": "de" } + }, + { + "pk": 49, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket Assign\u00e9", + "html": "

Bonjour,

\r\n\r\n

Ce courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} ({{ ticket.title }}) par {{ ticket.submitter_email }} {% if ticket.assigned_to %}a \u00e9t\u00e9 assign\u00e9 \u00e0 {{ ticket.assigned_to }}{% else %} n'est plus assign\u00e9 \u00e0 personne{% endif %}.

\r\n\r\n

\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)

\r\n\r\n

Pour m\u00e9moire, la description originelle \u00e9tait :

\r\n\r\n
{{ ticket.description }}
", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") par {{ ticket.submitter_email }} {% if ticket.assigned_to %} a \u00e9t\u00e9 assign\u00e9 \u00e0 {{ ticket.assigned_to }}{% else %} n'est plus assign\u00e9 \u00e0 personne{% endif %}.\r\n\r\nIdentifiant\u00a0: {{ ticket.ticket }}\r\nFile d'attente\u00a0: {{ queue.title }}\r\nTitre\u00a0: {{ ticket.title }}\r\nOuvert le\u00a0: {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par\u00a0: {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9\u00a0: {{ ticket.get_priority_display }}\r\nStatut\u00a0: {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0\u00a0: {{ ticket.get_assigned_to }}\r\nAdresse\u00a0: {{ ticket.staff_url }}\r\n\r\nLa description originelle \u00e9tait\u00a0:\r\n\r\n{{ ticket.description }}\r\n\r\n", + "subject": "(Assign\u00e9)", + "template_name": "assigned_cc" + } + }, + { + "pk": 50, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Le ticket vous est assign\u00e9", + "html": "

Bonjour,

\r\n\r\n

Ce courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} ({{ ticket.title }}) pour {{ ticket.submitter_email }} vous a \u00e9t\u00e9 assign\u00e9.

\r\n\r\n

\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)

\r\n\r\n

Pour m\u00e9moire, la description originelle \u00e9tait :

\r\n\r\n
{{ ticket.description }}
", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") pour {{ ticket.submitter_email }} vous a \u00e9t\u00e9 assign\u00e9.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nLa description originelle \u00e9tait :\r\n\r\n{{ ticket.description }}", + "subject": "(Pour vous)", + "template_name": "assigned_owner" + } + }, + { + "pk": 51, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket Ferm\u00e9", + "html": "

Bonjour,

\r\n\r\n

Le ticket {{ ticket.title }} ('{{ ticket.title }}'){% if ticket.assigned_to %}, assign\u00e9 \u00e0 {{ ticket.get_assigned_to }}{% endif %} a \u00e9t\u00e9 ferm\u00e9.

\r\n\r\n

\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)

\r\n\r\n

Pour m\u00e9moire, la description originelle \u00e9tait :

\r\n\r\n
{{ ticket.description }}
\r\n

La motivation de r\u00e9solution est:

\r\n\r\n
{{ resolution }}
", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nLe ticket {{ ticket.title }} (\"{{ ticket.title }}\"){% if ticket.assigned_to %}, assign\u00e9 \u00e0 {{ ticket.assigned_to }}{% endif %} a \u00e9t\u00e9 ferm\u00e9.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nLa description originelle \u00e9tait :\r\n\r\n{{ ticket.description }}\r\n\r\nLa motivation de r\u00e9solution est:\r\n\r\n{{ resolution }}\r\n\r\n", + "subject": "(Ferm\u00e9)", + "template_name": "closed_cc" + } + }, + { + "pk": 52, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket Ferm\u00e9", + "html": "

Bonjour,

\r\n\r\n

\r\nLe ticket suivant qui vous est actuellement assign\u00e9 a \u00e9t\u00e9 ferm\u00e9.

\r\n\r\n

\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)

\r\n\r\n

Pour m\u00e9moire, la description originelle \u00e9tait :

\r\n\r\n
{{ ticket.description }}
\r\n

La motivation de r\u00e9solution est:

\r\n\r\n
{{ resolution }}
\r\n", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nLe ticket suivant qui vous est actuellement assign\u00e9 a \u00e9t\u00e9 ferm\u00e9.\r\n\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }} (authentification obligatoire)\r\n\r\nLa description originelle \u00e9tait :\r\n\r\n{{ ticket.description }}\r\n\r\nLa motivation de r\u00e9solution est:\r\n\r\n{{ resolution }}", + "subject": "(Ferm\u00e9 - \u00e0 vous)", + "template_name": "closed_owner" + } + }, + { + "pk": 53, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket Ferm\u00e9", + "html": "

Bonjour,

\r\n\r\n

Vous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est {{ ticket.title }}. Ce courriel vous confirme que ce ticket a \u00e9t\u00e9 ferm\u00e9.

\r\n\r\n

\"La r\u00e9solution a \u00e9t\u00e9 motiv\u00e9e ainsi :

\r\n\r\n
{{ ticket.resolution }}
\r\n\r\n

Vous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.

\r\n\r\n

Si vous pensez que nous devons encore travailler sur ce probl\u00e8me, faites le nous savoir en r\u00e9pondant \u00e0 ce courriel en conservant le sujet tel-quel..

", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nVous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est \"{{ ticket.title }}\". Ce courriel vous confirme que ce ticket a \u00e9t\u00e9 ferm\u00e9.\r\n\r\nSi vous pensez que nous devons encore travailler sur ce probl\u00e8me, faites le nous savoir en r\u00e9pondant \u00e0 ce courriel en conservant le sujet tel-quel.\r\n\r\nVous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.\r\n\r\nLa r\u00e9solution a \u00e9t\u00e9 motiv\u00e9e ainsi\u00a0:\r\n\r\n{{ ticket.resolution }}\r\n\r\n", + "subject": "(Ferm\u00e9)", + "template_name": "closed_submitter" + } + }, + { + "pk": 54, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Priorit\u00e9 du ticket augment\u00e9e", + "html": "

Bonjour,

\r\n\r\n

Ce courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} ('{{ ticket.title }}') a vu sa priorit\u00e9 augment\u00e9 de mani\u00e8re automatique.

\r\n

\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)

\r\n\r\n

Pour m\u00e9moire, la description originelle \u00e9tait :

\r\n\r\n
{{ ticket.description }}
", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") a vu sa priorit\u00e9 augment\u00e9 de mani\u00e8re automatique.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nLa description originelle \u00e9tait :\r\n\r\n{{ ticket.description }}\r\n", + "subject": "(Priorit\u00e9 augment\u00e9e)", + "template_name": "escalated_cc" + } + }, + { + "pk": 55, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Votre ticket a vu sa priorit\u00e9 augment\u00e9e", + "html": "

Bonjour,

\r\n\r\n

Vous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est {{ ticket.title }} . Ce courriel vous informe que ce ticket a vu sa priorit\u00e9 augment\u00e9 de mani\u00e8re automatique, vu son d\u00e9lai de r\u00e9solution plus long que pr\u00e9vu.

\r\n\r\n

Nous allons reprendre rapidement ce ticket afin d'essayer de le r\u00e9soudre le plus vite possible.

\r\n\r\n

Vous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.

", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\n\r\nVous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est \"{{ ticket.title }}\". Ce courriel vous informe que ce ticket a vu sa priorit\u00e9 augment\u00e9 de mani\u00e8re automatique, vu son d\u00e9lai de r\u00e9solution plus long que pr\u00e9vu.\r\n\r\nNous allons reprendre rapidement ce ticket afin d'essayer de le r\u00e9soudre le plus vite possible.\r\n\r\nVous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.\r\n\r\n", + "subject": "(Priorit\u00e9 augment\u00e9e)", + "template_name": "escalated_submitter" + } + }, + { + "pk": 56, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Priorit\u00e9 de votre ticket augment\u00e9e", + "html": "

Bonjour,

\r\n\r\n

Un ticket qui vous est assign\u00e9 a vu sa priorit\u00e9 augment\u00e9 vu son d\u00e9lai de r\u00e9solution plus long que pr\u00e9vu.

\r\n\r\n

\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)

\r\n\r\n

Pour m\u00e9moire, la description originelle \u00e9tait :

\r\n\r\n
{{ ticket.description }}
\r\n\r\n

Merci de reprendre ce ticket afin d'essayer de le r\u00e9soudre le plus vite possible..

", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nUn ticket qui vous est assign\u00e9 a vu sa priorit\u00e9 augment\u00e9 vu son d\u00e9lai de r\u00e9solution plus long que pr\u00e9vu.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nLa description originelle \u00e9tait :\r\n\r\n{{ ticket.description }}\r\n\r\nMerci de reprendre ce ticket afin d'essayer de le r\u00e9soudre le plus vite possible.\r\n", + "subject": "(Priorit\u00e9 augment\u00e9e - \u00e0 vous)", + "template_name": "escalated_owner" + } + }, + { + "pk": 57, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Nouveau ticket ouvert", + "html": "

Bonjour,

\r\n\r\n

Ce courriel indicatif permet de vous pr\u00e9venir qu'un nouveau ticket a \u00e9t\u00e9 ouvert.

\r\n\r\n

\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)

\r\n\r\n

Description :

\r\n\r\n
{{ ticket.description }}
", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir qu'un nouveau ticket a \u00e9t\u00e9 ouvert.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nDescription\u00a0:\r\n{{ ticket.description }}\r\n\r\n", + "subject": "(Ouvert)", + "template_name": "newticket_cc" + } + }, + { + "pk": 58, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Votre ticket est d\u00e9sormais ouvert", + "html": "

Bonjour,

\r\n\r\n

Ce courriel permet de vous informer que nous avons re\u00e7u votre demande de support dont le sujet est {{ ticket.title }}.

\r\n\r\n

\"Vous n'avez rien de plus \u00e0 faire pour le moment. Votre ticket porte l'identifiant {{ ticket.ticket }} et sera trait\u00e9 rapidement.

\r\n\r\n

Si vous voulez nous donner plus de d\u00e9tails ou si vous avez une question concernant ce ticket, merci d'inclure la r\u00e9f\u00e9rence {{ ticket.ticket }} dans le sujet du message. Le plus simple \u00e9tant d'utiliser la fonction 'r\u00e9pondre' de votre logiciel de messagerie.

\r\n\r\n

Vous pouvez visualiser ce ticket en ligne et y ajouter des informations ou des pi\u00e8ces jointes ainsi que voir les derni\u00e8res mies \u00e0 jour en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.

\r\n\r\n

Nous allons traiter votre demande afin, si possible, de la r\u00e9soudre au plus vite. Vous recevrez des mise \u00e0 jour ou la r\u00e9ponse au ticket \u00e0 cette adresse mail.

", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nCe courriel permet de vous informer que nous avons re\u00e7u votre demande de support dont le sujet est \"{{ ticket.title }}\".\r\n\r\nVous n'avez rien de plus \u00e0 faire pour le moment. Votre ticket porte l'identifiant {{ ticket.ticket }} et sera trait\u00e9 rapidement.\r\n\r\nSi vous voulez nous donner plus de d\u00e9tails ou si vous avez une question concernant ce ticket, merci d'inclure la r\u00e9f\u00e9rence '{{ ticket.ticket }}' dans le sujet du message. Le plus simple \u00e9tant d'utiliser la fonction 'r\u00e9pondre' de votre logiciel de messagerie.\r\n\r\nVous pouvez visualiser ce ticket en ligne et y ajouter des informations ou des pi\u00e8ces jointes ainsi que voir les derni\u00e8res mies \u00e0 jour en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.\r\n\r\nNous allons traiter votre demande afin, si possible, de la r\u00e9soudre au plus vite. Vous recevrez des mise \u00e0 jour ou la r\u00e9ponse au ticket \u00e0 cette adresse mail.", + "subject": "(Ouvert)", + "template_name": "newticket_submitter" + } + }, + { + "pk": 59, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket r\u00e9solu", + "html": "

Bonjour,

\r\n\r\n

Le ticket suivant a \u00e9t\u00e9 r\u00e9solu.

\r\n\r\n

\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)

\r\n\r\n

Pour m\u00e9moire, la description originelle \u00e9tait :

\r\n\r\n
{{ ticket.description }}
\r\n

La motivation de r\u00e9solution est:

\r\n\r\n
{{ resolution }}
\r\n\r\n

\r\nCette information a \u00e9t\u00e9 envoy\u00e9 au cr\u00e9ateur de ce ticket, qui la confirmera avant que vous puissiez fermer ce ticket.

", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nLe ticket suivant a \u00e9t\u00e9 r\u00e9solu.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nLa description originelle \u00e9tait :\r\n\r\n{{ ticket.description }}\r\n\r\nLa motivation de r\u00e9solution est:\r\n\r\n{{ resolution }}\r\n\r\nCette information a \u00e9t\u00e9 envoy\u00e9 au cr\u00e9ateur de ce ticket, qui la confirmera avant que vous puissiez fermer ce ticket.\r\n\r\n", + "subject": "(R\u00e9solu)", + "template_name": "resolved_cc" + } + }, + { + "pk": 60, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket r\u00e9solu", + "html": "

Bonjour,

\r\n\r\n

Un ticket qui vous est assign\u00e9 a \u00e9t\u00e9 r\u00e9solu.

\r\n\r\n

\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)

\r\n\r\n

Pour m\u00e9moire, la description originelle \u00e9tait :

\r\n\r\n
{{ ticket.description }}
\r\n

La motivation de r\u00e9solution est:

\r\n\r\n
{{ resolution }}
\r\n\r\n

\r\nCette information a \u00e9t\u00e9 envoy\u00e9 au cr\u00e9ateur de ce ticket, qui la confirmera avant que vous puissiez fermer ce ticket.

", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nUn ticket qui vous est assign\u00e9 a \u00e9t\u00e9 r\u00e9solu.\r\n\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nLa description originelle \u00e9tait :\r\n\r\n{{ ticket.description }}\r\n\r\nLa motivation de r\u00e9solution est:\r\n\r\n{{ resolution }}\r\n\r\nCette information a \u00e9t\u00e9 envoy\u00e9 au cr\u00e9ateur de ce ticket, qui la confirmera avant que vous puissiez fermer ce ticket.\r\n\r\n", + "subject": "(R\u00e9solu - \u00e0 vous)", + "template_name": "resolved_owner" + } + }, + { + "pk": 61, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Votre ticket a \u00e9t\u00e9 r\u00e9solu", + "html": "

Bonjour,

\r\n\r\n

Vous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est {{ ticket.title }}. Ce message vous informe d'une r\u00e9solution de la demande.

\r\n\r\n

La solution suivante a \u00e9t\u00e9 donn\u00e9e au ticket {{ ticket.ticket }}:

\r\n\r\n
{{ resolution }}
\r\n\r\n

Merci de confirmer que cette solution vous convient afin que nous puissions clore le ticket. Si vous avez d'autre demandes, o\u00f9 si vous pensez que cette solution n'est pas adapt\u00e9e, merci de r\u00e9pondre \u00e0 ce mail en conservant le sujet tel-quel.

\r\n\r\n

Vous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.

", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nVous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est \"{{ ticket.title }}\" . Ce message vous informe d'une r\u00e9solution de la demande.\r\n\r\nLa solution suivante a \u00e9t\u00e9 donn\u00e9e au ticket {{ ticket.ticket }}:\r\n\r\n{{ resolution }}\r\n\r\nMerci de confirmer que cette solution vous convient afin que nous puissions clore le ticket. Si vous avez d'autre demandes, o\u00f9 si vous pensez que cette solution n'est pas adapt\u00e9e, merci de r\u00e9pondre \u00e0 ce mail en conservant le sujet tel-quel.\r\n\r\nVous pouvez visualiser ce ticket en ligne, en vous rendant \u00e0 l'adresse {{ ticket.ticket_url }}.\r\n\r\n", + "subject": "(R\u00e9solu)", + "template_name": "resolved_submitter" + } + }, + { + "pk": 62, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket mis \u00e0 jour", + "html": "

Bonjour,

\r\n\r\n

Ce courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") par {{ ticket.submitter_email }} a \u00e9t\u00e9 mis \u00e0 jour.

\r\n\r\n

\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)

\r\n\r\n

Pour m\u00e9moire, la description originelle \u00e9tait :

\r\n\r\n
{{ ticket.description }}
\r\n\r\n

Le commentaire suivant a \u00e9t\u00e9 ajout\u00e9 :

\r\n\r\n
{{ comment }}
\r\n\r\n

Cette information {% if private %} n' a pas {% else %} a {% endif %} \u00e9t\u00e9 envoy\u00e9 par mail \u00e0 l'\u00e9metteur.

", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") par {{ ticket.submitter_email }} a \u00e9t\u00e9 mis \u00e0 jour.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nDescription originelle :\r\n\r\n{{ ticket.description }}\r\n\r\nLe commentaire suivant a \u00e9t\u00e9 ajout\u00e9\u00a0:\r\n\r\n{{ comment }}\r\n\r\nCette information {% if private %} n' a pas {% else %} a {% endif %} \u00e9t\u00e9 envoy\u00e9 par mail \u00e0 l'\u00e9metteur.\r\n\r\n", + "subject": "(Mis \u00e0 jour)", + "template_name": "updated_cc" + } + }, + { + "pk": 63, + "model": "helpdesk.emailtemplate", + "fields": { + "heading": "Ticket mis \u00e0 jour", + "html": "

Bonjour,

\r\n\r\n

Ce courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") par {{ ticket.submitter_email }}, qui vous est assign\u00e9, a \u00e9t\u00e9 mis \u00e0 jour.

\r\n\r\n

\r\nFile d'attente : {{ ticket.ticket }}
\r\nQueue : {{ queue.title }}
\r\nTitre : {{ ticket.title }}
\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}
\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}
\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}
\r\nStatut : {{ ticket.get_status }}
\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}
\r\nVoir le ticket en ligne pour le mettre \u00e0 jour (apr\u00e8s authentification)

\r\n\r\n

Pour m\u00e9moire, la description originelle \u00e9tait :

\r\n\r\n
{{ ticket.description }}
\r\n\r\n

Le commentaire suivant a \u00e9t\u00e9 ajout\u00e9 :

\r\n\r\n
{{ comment }}
\r\n\r\n

Cette information {% if private %} n' a pas {% else %} a {% endif %} \u00e9t\u00e9 envoy\u00e9 par mail \u00e0 l'\u00e9metteur.

", + "locale": "fr", + "plain_text": "Hello,\r\n\r\nCe courriel indicatif permet de vous pr\u00e9venir que le ticket {{ ticket.ticket }} (\"{{ ticket.title }}\") par {{ ticket.submitter_email }}, qui vous est assign\u00e9, a \u00e9t\u00e9 mis \u00e0 jour.\r\n\r\nIdentifiant : {{ ticket.ticket }}\r\nFile d'attente : {{ queue.title }}\r\nTitre : {{ ticket.title }}\r\nOuvert le : {{ ticket.created|date:\"l N jS Y, \\a\\t P\" }}\r\nSoumis par : {{ ticket.submitter_email|default:\"Unknown\" }}\r\nPriorit\u00e9 : {{ ticket.get_priority_display }}\r\nStatut : {{ ticket.get_status }}\r\nAssign\u00e9 \u00e0 : {{ ticket.get_assigned_to }}\r\nAdresse : {{ ticket.staff_url }}\r\n\r\nDescription originelle :\r\n\r\n{{ ticket.description }}\r\n\r\nLe commentaire suivant a \u00e9t\u00e9 ajout\u00e9 :\r\n\r\n{{ comment }}\r\n\r\nCette information {% if private %} n' a pas {% else %} a {% endif %} \u00e9t\u00e9 envoy\u00e9 par mail \u00e0 l'\u00e9metteur.\r\n\r\n", + "subject": "(Mis \u00e0 jour - \u00e0 vous)", + "template_name": "updated_owner" + } + }, + { + "model": "helpdesk.emailtemplate", + "pk": 64, + "fields": { + "heading": "Votre ticket a \u00e9t\u00e9 mis \u00e0 jour", + "html": "

Bonjour,

\r\n\r\n

Vous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est {{ ticket.title }} . Ce message vous informe d'une mise \u00e0 jour du ticket.

\r\n\r\n

Le commentaire suivant a \u00e9t\u00e9 ajout\u00e9 au ticket {{ ticket.ticket }}:

\r\n\r\n
{{ comment }}
\r\n\r\n

\"Si vous voulez nous fournir d'autres informations, merci de r\u00e9pondre \u00e0 ce mail en conservant le sujet tel-quel. Vous pouvez \u00e9galement voir et mettre \u00e0 jour ce ticket en ligne \u00e0 l'adresse {{ ticket.ticket_url }}.

", + "locale": "fr", + "plain_text": "Bonjour,\r\n\r\nVous avez r\u00e9cemment ouvert chez nous un ticket dont le sujet est \"{{ ticket.title }}\". Ce message vous informe d'une mise \u00e0 jour du ticket.\r\n\r\nLe commentaire suivant a \u00e9t\u00e9 ajout\u00e9 au ticket {{ ticket.ticket }}\u00a0:\r\n\r\n{{ comment }}\r\n\r\nSi vous voulez nous fournir d'autres informations, merci de r\u00e9pondre \u00e0 ce mail en conservant le sujet tel-quel. Vous pouvez \u00e9galement voir et mettre \u00e0 jour ce ticket en ligne \u00e0 l'adresse {{ ticket.ticket_url }}", + "subject": "(Mis \u00e0 jour)", + "template_name": "updated_submitter" + } } ] diff --git a/helpdesk/forms.py b/helpdesk/forms.py index 502a90bb..bfc61bcd 100644 --- a/helpdesk/forms.py +++ b/helpdesk/forms.py @@ -15,7 +15,7 @@ from django.conf import settings from django.contrib.auth.models import User from django.utils.translation import ugettext as _ -from helpdesk.lib import send_templated_mail +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 @@ -280,11 +280,8 @@ class TicketForm(forms.Form): # settings.MAX_EMAIL_ATTACHMENT_SIZE) are sent via email. files.append(a.file.path) - context = { - 'ticket': t, - 'queue': q, - 'comment': f.comment, - } + context = safe_template_context(t) + context['comment'] = f.comment messages_sent_to = [] @@ -482,10 +479,7 @@ class PublicTicketForm(forms.Form): # settings.MAX_EMAIL_ATTACHMENT_SIZE) are sent via email. files.append(a.file.path) - context = { - 'ticket': t, - 'queue': q, - } + context = safe_template_context(t) messages_sent_to = [] diff --git a/helpdesk/lib.py b/helpdesk/lib.py index 05469588..5a3960f5 100644 --- a/helpdesk/lib.py +++ b/helpdesk/lib.py @@ -17,6 +17,9 @@ try: except ImportError: from base64 import decodestring as b64decode +import logging +logger = logging.getLogger('helpdesk') + from django.utils.encoding import smart_str def send_templated_mail(template_name, email_context, recipients, sender=None, bcc=None, fail_silently=False, files=None): @@ -66,6 +69,8 @@ def send_templated_mail(template_name, email_context, recipients, sender=None, b try: t = EmailTemplate.objects.get(template_name__iexact=template_name, locale__isnull=True) except EmailTemplate.DoesNotExist: + logger.warning('template "%s" does not exist, no mail sent' % + template_name) return # just ignore if template doesn't exist if not sender: @@ -96,9 +101,8 @@ def send_templated_mail(template_name, email_context, recipients, sender=None, b "{{ ticket.ticket }} {{ ticket.title|safe }} %s" % t.subject ).render(context) - if type(recipients) == str: - if recipients.find(','): - recipients = recipients.split(',') + if isinstance(recipients,(str,unicode)): + recipients = recipients.split(',') elif type(recipients) != list: recipients = [recipients,] diff --git a/helpdesk/management/commands/escalate_tickets.py b/helpdesk/management/commands/escalate_tickets.py index 13f6b712..b6050061 100644 --- a/helpdesk/management/commands/escalate_tickets.py +++ b/helpdesk/management/commands/escalate_tickets.py @@ -13,12 +13,12 @@ import getopt from optparse import make_option import sys -from django.core.management.base import BaseCommand +from django.core.management.base import BaseCommand, CommandError from django.db.models import Q from django.utils.translation import ugettext as _ from helpdesk.models import Queue, Ticket, FollowUp, EscalationExclusion, TicketChange -from helpdesk.lib import send_templated_mail +from helpdesk.lib import send_templated_mail, safe_template_context class Command(BaseCommand): @@ -99,10 +99,7 @@ def escalate_tickets(queues, verbose): t.priority -= 1 t.save() - context = { - 'ticket': t, - 'queue': q, - } + context = safe_template_context(t) if t.submitter_email: send_templated_mail( diff --git a/helpdesk/management/commands/get_email.py b/helpdesk/management/commands/get_email.py index 795fc2e5..c3b9e33f 100644 --- a/helpdesk/management/commands/get_email.py +++ b/helpdesk/management/commands/get_email.py @@ -26,7 +26,7 @@ from django.core.management.base import BaseCommand from django.db.models import Q from django.utils.translation import ugettext as _ -from helpdesk.lib import send_templated_mail +from helpdesk.lib import send_templated_mail, safe_template_context from helpdesk.models import Queue, Ticket, FollowUp, Attachment, IgnoreEmail @@ -246,10 +246,7 @@ def ticket_from_message(message, queue, quiet): t.status = Ticket.REOPENED_STATUS t.save() - context = { - 'ticket': t, - 'queue': queue, - } + context = safe_template_context(t) if new: diff --git a/helpdesk/templates/helpdesk/fr/email_html_base.html b/helpdesk/templates/helpdesk/fr/email_html_base.html new file mode 100644 index 00000000..02415ba1 --- /dev/null +++ b/helpdesk/templates/helpdesk/fr/email_html_base.html @@ -0,0 +1,9 @@ +

{% block header %}Helpdesk{% endblock %}

+ +{% block content %}{% endblock %} + +

Cordialement,

+ +

{{ queue.title }}{% if queue.email_address %}
{{ queue.email_address }}{% endif %}

+ +

Ce courriel vous a été envoyé en tant qu'utilisateur de notre service de support, en accord avec notre politique de confidentialité. Merci de nous informer si vous pensez que ce message ne vous était pas destiné.

diff --git a/helpdesk/templates/helpdesk/fr/email_text_footer.txt b/helpdesk/templates/helpdesk/fr/email_text_footer.txt new file mode 100644 index 00000000..b1ceeaa3 --- /dev/null +++ b/helpdesk/templates/helpdesk/fr/email_text_footer.txt @@ -0,0 +1,6 @@ +Cordialement, + +{{ queue.title }}{% if queue.email_address %} +{{ queue.email_address }}{% endif %} + +Ce courriel vous a été envoyé en tant qu'utilisateur de notre service de support, en accord avec notre politique de confidentialité. Merci de nous informer si vous pensez que ce message ne vous était pas destiné. diff --git a/helpdesk/templates/helpdesk/ticket_desc_table.html b/helpdesk/templates/helpdesk/ticket_desc_table.html index 01239590..b135a6b1 100644 --- a/helpdesk/templates/helpdesk/ticket_desc_table.html +++ b/helpdesk/templates/helpdesk/ticket_desc_table.html @@ -1,6 +1,6 @@ {% load i18n %} - + diff --git a/helpdesk/views/api.py b/helpdesk/views/api.py index 236f4842..0c394b86 100644 --- a/helpdesk/views/api.py +++ b/helpdesk/views/api.py @@ -22,7 +22,7 @@ from django.template import loader, Context from django.utils import simplejson from helpdesk.forms import TicketForm -from helpdesk.lib import send_templated_mail +from helpdesk.lib import send_templated_mail, safe_template_context from helpdesk.models import Ticket, Queue, FollowUp STATUS_OK = 200 @@ -191,11 +191,8 @@ class API: f.save() - context = { - 'ticket': ticket, - 'queue': ticket.queue, - 'comment': f.comment, - } + context = safe_template_context(ticket) + context['comment'] = f.comment messages_sent_to = [] @@ -266,11 +263,8 @@ class API: ) f.save() - context = { - 'ticket': ticket, - 'queue': ticket.queue, - 'resolution': f.comment, - } + context = safe_template_context(ticket) + context['resolution'] = f.comment subject = '%s %s (Resolved)' % (ticket.ticket, ticket.title) diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index bc80f60a..6e5f38af 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -419,11 +419,10 @@ def mass_update(request): f = FollowUp(ticket=t, date=datetime.now(), title=_('Closed in bulk update'), public=True, user=request.user, new_status=Ticket.CLOSED_STATUS) f.save() # Send email to Submitter, Owner, Queue CC - context = { - 'ticket': t, - 'queue': t.queue, - 'resolution': t.resolution, - } + context = safe_template_context(t) + context.update( + resolution=t.resolution, + ) messages_sent_to = [] @@ -833,7 +832,7 @@ def run_report(request, report): month = 1 if (year > last_year) or (month > last_month and year >= last_year): working = False - periods.append("%s %s" % (months[month], year)) + periods.append("%s %s" % (months[month - 1], year)) if report == 'userpriority': title = _('User by Priority')
{{ ticket.id }}. {{ ticket.title }} [{{ ticket.get_status }}] EditDelete{% if ticket.on_hold %}{% trans "Unhold" %}{% else %}{% trans "Hold" %}{% endif %}
{{ ticket.id }}. {{ ticket.title }} [{{ ticket.get_status }}] EditDelete{% if ticket.on_hold %}{% trans "Unhold" %}{% else %}{% trans "Hold" %}{% endif %}
{% blocktrans with ticket.queue as queue %}Queue: {{ queue }}{% endblocktrans %}