{{ :en:blog:tutorials:dokuwiki:building-a-ticketing-system-in-dokuwiki.png?nolink |}}
====== How to Build a Simple Ticketing System in DokuWiki ======
Ticketing systems are invaluable tools for managing tasks, issues, or support requests in an organized and efficient way. Whether you are running a help desk or just need a way to track internal issues, a ticketing system provides a centralized method to manage communication and resolve problems promptly. In this tutorial, we will guide you through building a simple ticketing system using **DokuWiki** and the **Bureaucracy** plugin. This approach allows you to leverage DokuWiki's flexible content management capabilities while offering an easy way for users to create and track tickets.
By the end of this guide, you will have a working ticketing system with pages for creating, viewing, and managing tickets. Let's get started!
===== Plugins Used =====
To create this ticketing system, we use the following plugins:
* **[[https://www.dokuwiki.org/plugin:bureaucracy|Bureaucracy]]**: To handle form submissions and automate ticket creation.
* **[[https://www.dokuwiki.org/plugin:tag|Tag]]**: For tagging and categorizing tickets by status.
* **[[https://www.dokuwiki.org/plugin:tagbutton|Tag Button]]**: To add interactive buttons for changing ticket statuses (e.g., Mark as Solved).
* **[[https://www.dokuwiki.org/plugin:discussion|Discussion]]**: To add comments or notes to tickets for collaboration.
* **[[https://www.dokuwiki.org/plugin:gallery|Gallery]]**: For adding image attachments related to the ticket.
* **[[https://www.dokuwiki.org/plugin:barcode|Barcode]]**: To add a barcode representing the ticket ID for easy reference.
* **[[https://www.dokuwiki.org/plugin:wrap|Wrap]]**: To help style different parts of the content, such as buttons and boxes.
===== Security Considerations =====
It's important to set up proper **Access Control Lists (ACL)** to secure the ticketing system. You want the ticket creation form to be accessible to users who need to submit tickets. At the same time, the other pages, like ticket details or management templates, should only be accessible to authorized users who will handle the tickets.
To accomplish this, we will:
* Set up the **Bureaucracy plugin** to [[https://www.dokuwiki.org/plugin:bureaucracy?s[]=runas#template_mode|run as]] a non-existent user called **''bureaucracy''** in the [[https://www.dokuwiki.org/plugin:config|Configuration Manager]].
* Allow the **bureaucracy** user full control over the ''tickets'' directory using the [[https://www.dokuwiki.org/plugin:acl|ACL manager]].
This setup will ensure that tickets can be created by users while preventing unauthorized access to ticket management functionalities.
===== Setting Up the Ticketing System =====
The ticketing system is organized into different pages and templates that serve specific roles. Below is the structure of the system:
tickets/
├── start.txt (This serves as the main index)
├── labels.txt (Contains labels for our form)
├── mail.txt (Contains the email template for tickets)
├── ticket.txt (Contains the page template for individual tickets)
└── new.txt (Contains the form to create new tickets)
Each file has a specific purpose, and we'll go through each of them in detail.
==== Main Ticket Page (start.txt) ====
The **start.txt** file is the entry point for our ticketing system. It provides a list of tickets categorized by their status:
~~NOCACHE~~
~~NOTOC~~
====== Tickets ======
[[new|New Ticket]]
[[ticket|Template]]
[[mail|Mail]]
[[labels|Labels]]
===== Oldest Ticket(s) =====
{{topic>.?ticket Ticket -priority -closed -solved -archived&table&nodesc&sort&date&user&nolinkbacks&tags&noimage&header&limit=5}}
===== Critical Ticket(s) =====
{{topic>.?ticket Ticket -priority -closed -solved -archived +critical&table&nodesc&sort&date&user&nolinkbacks&tags&noimage&header}}
===== Open Ticket(s) =====
{{topic>.?ticket Ticket -priority -closed -solved -archived&table&nodesc&sort&date&user&nolinkbacks&tags&noimage&header}}
===== Solved Ticket(s) =====
{{topic>.?solved -priority -archived&table&nodesc&sort&date&user&nolinkbacks&tags&noimage&header}}
===== Closed Ticket(s) =====
{{topic>.?closed -priority -archived&table&nodesc&sort&date&user&nolinkbacks&tags&noimage&header}}
===== Archived Ticket(s) =====
{{topic>.?archived -priority&table&nodesc&sort&date&user&nolinkbacks&tags&noimage&header}}
This page acts as the main dashboard, allowing users to see tickets organized by status, such as **Open**, **Critical**, **Solved**, etc.
==== Labels (labels.txt) ====
The **labels.txt** file contains the labels for the form fields in our ticketing system, making it easier to manage and localize the system:
====== Labels ======
* contact = "Contact Information"
* issue = "Issue"
* files = "Upload Images"
* create = "Create your Ticket"
* full_name = "Full Name"
* email = "Email"
* phone = "Phone"
* priority = "Priority"
* subject = "Subject"
* description = "Description"
* attachments = "Upload file(s)"
* open = "Open Ticket"
These labels are used throughout the system to ensure consistent wording in the user interface.
==== Ticket Creation Form (new.txt) ====
The **new.txt** file contains the form that users will use to create a new ticket:
====== Open a Ticket ======
This form collects essential information from the user, such as **Full Name**, **Email**, **Priority**, and a detailed description of the issue.
==== Ticket Template (ticket.txt) ====
The **ticket.txt** file is used to generate a new ticket page when a user submits the form:
~~NOTOC~~
====== @@ticketid@@ - @@subject@@ ======
{{tag>Ticket @@priority@@ %Y %B}}
----
{{tag-button>closed:error|Mark as Closed}}
{{tag-button>solved:success|Mark as Solved}}
{{tag-button>archived|Archive}}
===== Ticket Information =====
| ||||
^ ID | @@ticketid@@ ^ Created | @@created@@ |
^ Priority | @@priority|@@ ||
===== Contact Information =====
^ Name | @@full_name|@@ |
^ Email | [[@@email|@@]] |
^ Phone Number | @@phone|@@ |
===== Gallery =====
{{gallery>.}}
===== Issue =====
@@description|@@
~~DISCUSSION|Notes~~
This template structures the information for each individual ticket page, making it easy to follow and manage each issue.
==== Mail Template (mail.txt) ====
The **mail.txt** file is used to generate a new ticket email when a user submits the form:
====== Mail ======
Ticket - @@ticketid@@ - @@priority@@ - @@subject@@
Ticket Information
ID | @@ticketid@@ | Created | @@created@@ |
Priority | @@priority@@ | |
Contact Information
Name | @@full_name@@ |
Email | @@email@@ |
Phone Number | @@phone|@@ |
Issue
Subject | @@subject@@ |
@@description@@ |
LaswitchTech
Ticket - @@ticketid@@ - @@priority@@
------------------------------------------------------------
Ticket Information
------------------------------------------------------------
ID: @@ticketid@@ Created: @@created@@
Priority: @@priority@@
------------------------------------------------------------
Contact Information
------------------------------------------------------------
Name: @@full_name@@
Email: @@email@@
Phone Number: @@phone|@@
------------------------------------------------------------
Issue
------------------------------------------------------------
Subject: @@subject@@
Description: @@description@@
This template structures the information for each individual ticket, Notifying the users.
===== Conclusion =====
By following this guide, you’ve successfully set up a basic ticketing system using **DokuWiki** and the **Bureaucracy plugin**. This system will help you keep track of requests, issues, and tasks in an organized way, streamlining communication and resolution. DokuWiki’s extensibility makes it an excellent choice for quickly setting up such internal tools.
Feel free to customize the labels, templates, and settings to meet your specific needs. The power of this ticketing system lies in its simplicity and adaptability, making it a perfect choice for small teams and projects.
===== Tags =====
{{tag>"DokuWiki" "Ticketing System" "Bureaucracy Plugin" "Documentation"}}
~~socialite:icon twitter facebook linkedin reddit telegram email~~
~~LINKBACK~~
~~DISCUSSION~~