Issue

The Issue feature is a ticket management tool integrated within the QFQ framework. It handles issue tracking, permissions, notifications, and comment management.

How to get started

  • Create a new page in your Typo3 Backend.

  • Set the ‘URL slug’ to /issue.

  • Create a content element of type ‘QFQ Element’.

  • Insert file=_issue

Configuration

To use the Issue feature, the following configuration steps are required:

Database Tables

Ensure the following tables exist in your database:

  • Grp: Must include records with the following references:

    • qfq_project_access_write

    • qfq_project_access_read

    • qfq_project_access_admin

    • qfq_upload_issue

    • qfq_upload_comment

    • qfq_upload_commentNew

    • qfq_status_issue

  • Project

  • Status

  • Comment

  • FileUpload

  • Issue

System Store Variables

Define the following variables in the SYSTEM-STORE (Dynamic/Custom) via QFQ configuration:

  • pIdUser: ID of the current user

  • emailUser: Email of the current user

  • personTableName: Table name for person records

  • personFirstNameColumnName: First name column in person table

  • personLastNameColumnName: Last name column in person table

  • personEmailColumnName: Email column in person table

Use

The core interface is accessible via the report at /issue.

Functionality

  • Displays a table of issues the current user has permission to access

  • Fully filterable and sortable using tablesorter

  • Works with or without SIP

  • Can be embedded using AS _restClient for dashboards or integrations (integration)

URL Parameters

Filter issues by passing URL parameters. Each parameter corresponds to a column in the Issue table. All parameters use the = operator, except for sea, which uses LIKE on both title and description.

Parameter

Column

pro

prId

sta

stId

xid

xId

fid

formId

fna

formName

cre

pIdCreator

ass

pIdAssignee

con

pIdContact

mco

mailContact

mws

mailWatcherSet

msn

mailSetNotification

mno

mailNotification

tit

title

des

description

str

start

due

due

rem

reminder

eti

estimatedTime

del

deleted

sea

title, description (LIKE)

Form: issue

Most fields in this form are self-explanatory, but the following may require additional context:

  • Status: Dropdown listing all records from the Status table where grId = qfq_status_issue

  • Project: Dropdown listing all records from the Project table

  • Assignee: TypeAhead input listing all users with permissions on the selected project

  • Creator: TypeAhead input listing all users. Only visible to users logged into the Typo3 backend or users with admin permissions on the selected project

  • Contact person: TypeAhead input listing all users

  • Contact person mail: Optional email address when the contact person is not in the database

  • Watcher mail (list): Comma-separated list of email addresses

  • Notification: See notification

  • Comment: See comments

Note

QFQ provides forms to configure status and projects (status.json and project.json).

Permissions

Access Control

Access is automatically managed by QFQ:

  1. Project-Based Access

    Users gain access to issues by being assigned permissions on a project (the issue belongs to) via the Glue table. Available permission levels:

    Level

    Reference

    Description

    Write

    qfq_project_access_write

    View, create, edit, delete

    Read

    qfq_project_access_read

    View only

    Admin

    qfq_project_access_admin

    Like Write + extra options in form

  2. Contact/Watcher-Based Access

    Even without project permissions, users may access an issue if they are:

    • Listed as a contact person or watcher

    • And access contact/watcher is enabled

Additional Rules

  • Creators of an issue or comment always have access

  • Logged-in Typo3 backend users (typically developers) have full access

  • Unassigned issues (no project) can be accessed only by:

    • The creator

    • The contact person (if allowed)

    • The watcher (if allowed)

    • Backend users

Comments

There are two ways a user can add a comment to an issue:

  1. Edit Issue

    When editing an existing issue, a Comment tab (pill) is available. This allows users to add a new comment along with its permissions. This method is ideal when the user needs to update the issue and leave a comment simultaneously — for example, when closing an issue and providing a reason.

  2. New Comment

    Use this option when no changes to the issue itself are required and only a comment needs to be added.

Each comment can have specific permissions:

  • Comments can be restricted from contact person and watchers

  • A badge beside the edit button indicates if a comment is restricted or not

Notification

The notification mechanism allows to alert involved parties via email when changes are made to an issue.

Recipients:

  • Creator

  • Contact person

  • Watchers

  • Assignee

Behavior:

  • Upon saving an issue/comment, a timestamp (+2 minutes) is added if recipients are selected

  • This 2-minute delay allows batching of quick consecutive changes

  • If all recipients are removed, the timestamp is reset to 0000-00-00 00:00:00

Note

Use a cron job to regularly check timestamps and dispatch emails.

Integration

Issue linked to a specific record

Issues can be linked to a specific record (and form) by enabling the issue option under Show button in the form editor of the primary form.

When this option is enabled:

  • An Issue button appears on the form

  • The button displays the number of issues associated with the current record, including how many are still open

  • Clicking the button redirects the user to /issue

  • When creating a new issue from this view, it is automatically assigned to the originating record (xId) and form (formId)

Embedded view

The /issue page can be embedded with AS _restClient, which is useful for integrating issue views in dashboards or external systems. By using the parameter type=2 only the raw HTML will be returned.

{
  sql = SELECT 'n:{{baseUrl:Y}}issue?type=2' AS _restClient
            , 'n:{{baseUrl:Y}}issue?type=2&ass=1&pro1' AS _restClient
}

Deleting issues/comments

Issues and comments are never physically deleted; instead, they are marked as deleted by setting deleted = yes.