Add a client side open ticket list to osTicket 1.8.1

This article replaces the old one from:
https://tmib.net/add-client-side-open-ticket-list-osticket-18

With the release of osTicket 1.8.1 I thought that it was time to update this article which adds a client side open ticket list, adds the ability to control it its on/off, and how many tickets it should display in the admin panel. One of the features that I would love to see integrated into osTicket is an open ticket listing for clients. I feel that it gives clients the ability to see what tickets are already open so as to cut down on duplicate tickets, and give them a better idea of how many tickets are ahead of them when they place their request. This mod is will be added to github and a pull request to integrate it made.  It was originally written for osTicket 1.6ST, updated for 1.7 as well as 1.8. I have included two ways to install it. If you have modified your installation already you can install manually following the directions. If you have not modified your installation I have included all the files that you can simply copy over your existing ones.

With the release of osTicket 1.8.1ST I thought that it was time to revisit this article.  This article describes a mod which adds the following functionality to osTicket:

  • a "safe" client side open ticket list [reduced information]
  • Toggle display on/off in admin panel -> tickets
  • Configure how many open tickets to display in admin panel -> tickets (default 10)
  • more intelligent display of open tickets and faqs (built in)
  • aesthetic css formating for the list.
  • Utilizes osTicket db functions for communication with the DB.
One of the features that I would love to see integrated into osTicket is an open ticket listing for clients. I feel that it gives clients the ability to see what tickets are already open so as to cut down on duplicate tickets, and give them a better idea of how many tickets are ahead of them when they place their request.

It was originally written for osTicket 1.6ST, was later updated for 1.7 as well as 1.8. I have included two ways to install it. If you have modified your installation already you can install manually following the directions. If you have not modified your installation I have included all the files that you can simply copy over your existing ones.

1. Save the display_open_topics.php into your base osTicket folder. Open it and edit the lines 16 through 18 to match your setup.

2. Save the theme.css to osticketDirectory\assets\default\css\theme.css -OR- open osticketDirectory\assets\default\css\theme.css

A. To make the landing page fit together a little better scroll or find:

#landing_page #new_ticket

change

margin-top: 40px;

to

margin-top: 10px;

scroll or find:

#landing_page #check_status

change

margin-top: 40px;

to

margin-top: 10px;

 

B. add the following to the bottom

#openticks {
  padding:5px;
  background:#BFBFBF;
  -moz-border-radius: 5px;
  border-radius: 5px;
  -moz-box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.4);
  -webkit-box-shadow: 3px 3px rgba(0, 0, 0, 0.4);
  box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.4);
}

#openticks-a {
  border-right-style: solid;
  border-right-width: 1px;
  border-right-color: #BFBFBF;
  text-align:center;
  vertical-align:middle;
  padding-bottom:4px;
}

#openticks-b {
  text-align:center;
  vertical-align:middle;
  padding-bottom:4px;
}

3. Copy the index.php (included) into your base osTicket folder -OR- open and edit \index.php scroll down and replace line 50-54

<p>Be sure to browse our <a href="kb/index.php">Frequently Asked Questions (FAQs)</a>, before opening a ticket.</p>
</div>
<?php
} ?>
<?php require(CLIENTINC_DIR.'footer.inc.php'); ?>

change to:

<p>Be sure to browse both our <a href="kb/index.php">Frequently Asked Questions (FAQs)</a>, and the open tickets below before opening a ticket.  Thank you.
  <div id="openticks"><?php include('display_open_topics.php'); ?></div>
</p>
</div>
<?php
} ?>
<?php require(CLIENTINC_DIR.'footer.inc.php'); ?>

NOTE: This will not get displayed if you have not enabled and setup knowledgebases and have a public FAQ! To do so read this article: setting up and using FAQS in osticket. Alternatively you can replace the code change above with this one:

<?php
if($cfg && $cfg->isKnowledgebaseEnabled()){
    //FIXME: provide ability to feature or select random FAQs ??
?>
<p>Be sure to browse both our <a href="kb/index.php">Frequently Asked Questions (FAQs)</a>.
<?php
} ?>
<p>Please review the open tickets below before opening a ticket.  Thank you.
<div id="openticks"><?php include('display_open_topics.php'); ?></div>
</p>
</div>
<?php require(CLIENTINC_DIR.'footer.inc.php'); ?>

The file archive for this mod can be downloaded here.

osTicket 1.8

This section is devoted to the articles on this site about the 1.8 tree from version 1.8ST to 1.8.11.

Articles for osTicket 1.8.x:

  • HELP: Upgrading osTicket 1.8.1.2 to current (1.9rc)
  • HELP: Using the osTicket 1.8.1.2 API
  • HELP: How to manually update a client/user phone number in osTicket 1.8.1.x
  • HELP: osTicket 1.8.1 – How to configure the LDAP Authentication and Lookup plugin
  • BUGFIX: osTicket 1.8.1 – Opening tickets via email fails
  • News: a peek at osTicket 1.8.1
  • HELP: osTicket 1.8.0.2 – Email Template Variables
  • MOD: Add a client side open ticket list to osTicket 1.8
  • HELP: osTicket 1.8 Frequently Asked Questions (FAQ)
  • BUG: osTicket 1.8rc2 upgrader clean up
  • osTicket 1.9.4 released

    Yesterday the folks over at osticket.com released the latest version of the 1.9 series, specifically the stable 1.9.4.  This version had not only a DPR (Developer Preview Release) and 5 RC (release candidates) before going live.  You can get this version via github or at http://osticket.com/download.  It features a slew of enhancements, bug fixes, and security updates.  Here is a list of them:

    Major New Features

    • New ticket states (archived, and deleted) (#1094, #1159)
    • Custom ticket statuses (#1159)
    • Custom ticket number formats (#1128)
    • Full text search capabilities (beta)
    • Multiselect for choice fields and custom list selections
    • Phase II Multi-Lingual Support (User Interface) (see http://i18n.osticket.com and http://jipt.i18n.osticket.com) (#1096)
      • Active interface translations of 46 languages currently
      • Popup help tip documentation in all languages
      • Flags displayed on client portal for manual switch of UI language by endusers
      • Automatic detection of enduser and agent language preference as advertised by the browser
      • Improved PDF ticket printing support, including greater support for eastern characters such as Thai, Korean, Chinese, and Japanese
      • Proper support for searching, including breaking words for languages which do not use word breaks, such as Japanese
      • Proper user interface layout for right-to-left languages such as Hebrew, Arabic, and Farsi
      • Right-to-Left support for the HTML text editor, regardless of the viewing user’s current language setting
      • Proper handling of bidirectional text in PDF output and in the ticket view

    Enhancements

    • Plugins can have custom configurations (#1156)
    • Upgrade to mPDF to v5.7.3 (#1356)
    • Add support for PDF fonts in language packs (#1356)
    • Advanced search improved to support multiple selections, custom status and flags

    Improvements

    • Fix display of text thread entries with HTML characters (<) (#1360)
    • Fix crash creating new ticket if organization custom data has a selection field (#1361)
    • Fix footer disappearance on PJAX navigation (#1366)
    • Fix User Directory not sortable by user status (#1375)
    • Fix loss of enduser or agent priority selection on new ticket (#1365)
    • Add validation error if setting EndUser username to an email address (#1368)
    • Fix skipped validation of some fields (#1369) (regression from rc4)
    • Fix detection of inline attachments from rich text inputs (#1357)
    • Fix dropping attachments when updating canned responses (#1357)
    • Fix PJAX navigation crash in some browsers (#1378)
    • Fix searching for tickets in the client portal (#1379) (regression from rc4)
    • Fix crash submitting new ticket as agent with validation errors (#1380)
    • Fix display of unanswered tickets in open queue (#1384)
    • Fix incorrect statistics on dashboard page (#1345)
    • Fix sorting by ticket number if using sequential numbers
    • Fix threading if HTML is enabled and QR is disabled (#1197)
    • Export ticket “created” date (#1201)
    • Fix duplicate email where a collaborator would receive a confirmation for his own message (#1235)
    • Fix multi-line display of checkbox descriptions (#1160)
    • Fix API validation failure for custom list selections (#1238)
    • Fix crash adding a new user with a selection field custom data
    • Fix failed user identification from email headers if “References” header is sorted differently be mail client (#1263)
    • Fix deletion of inline images on pages if draft was not saved (#1288)
    • Fix corruption of custom date time fields on client portal if using non US date format (#1320)
    • Fix corruption of email mailbox if improperly encoded as ISO-8859-1 without RFC 2047 charset hint (#1332)
    • Fix occasional MySQL Commands OOS error from ORM (#1334)

    Performance and Security

    • Fix possible XSS vulnerability in email template management (#1163)

     

    You can read more about it at their at github.  They additionally released maintance release for the 1.7 and 1.8 series which should fix some of the issues in those.

    osTicket 1.9.2 released

    Earlier today the folks over at osticket.com released the latest version of the 1.9 series, specifically the stable 1.9.2.  You can get this version via github or at http://osticket.com/download.  It features a slew of enhancements, bug fixes, and security updates.  Here is a list of them:

    Enhancements

    • Help topics have super powers (#974)
      • They can be arbitrarily nested
      • They can be manually sorted
      • Admins can select a system default help topic
      • They can inherit the form from a parent
    • Form data entered to custom forms is preserved when switching help topics
    • Update to Redactor 9.2.4 (http://imperavi.com/redactor/log/)
    • Using canned responses no longer requires [Append] click (#973)
    • Guests can sign out (#1000)
    • Filter by custom list item properties (#1024)
    • Time selection is based on admin configured time format (#1036)
    • (Optionally) clients can access tickets without clicking email link (#999)
    • Introduction of signals for mail filter plugins (#952)

    Improvements

    • Fix a few glitches on site page management (#986)
    • Fix saving department alert recipients (#985)
    • Fix assignment to account manager regardless of setting (#1013)
    • Fix dialog boxes on some PJAX navigations (#1034)
    • Help topics are properly sorted in FAQ management (#1035)
    • Fix MySQL commands out-of-sync triggered by the ORM (#1012)
    • Clients can follow email links from multiple tickets (#1001)
    • Workaround for PHP variable corruption issue (#917, #969)
    • All other improvements cited in v1.8.3

    Performance and Security

    • Fix XSS vulnerability in phone number widget (#1025)
    • Fix several XSS vulnerabilities in client and staff interfaces (#1024, #1025)

     

    You can read more about it at their blog post.  They additionally released maintenance release for the 1.7 and 1.8 series which should fix some of the issues in those.

    Upgrading osTicket 1.8.1.2 to current (1.9rc)

    So your running osTicket version 1.8.1.2 and you want to upgrade it to current which as of this writing is 1.9-rc1. Yopu’ve come to the right place. A couple notes before we get started. You may have read something on the forums about the pending release of 1.8.2 well due to the number of and the severity of changes in this new version it was decided that the 1.8.2 release number would be skipped and we would jump right to 1.9. This is not a minor release like originally planned, and I have to say that the beta group gave us some fantastic feedback. If you are interested in joining the osTicket AVid Users (Beta group) please go to https://groups.google.com/a/osticket.com/forum/#!forum/beta-testers

    Now back to our regularly scheduled article.

    Rember that 1.9-rc1 is not a stable release and should never be used on a production server in a production environment. You should really wait for 1.9ST to be released before you upgrade. The images in this article are for going from v 1.8.1.2 to 1.8.2 but this is the same thing as 1.9 as I stated previously the only real difference is the version number.

    If you have ever upgraded osTicket in the past your experience this time will not be much different than it has been.

    Before you start it is important to mention that if you have installed any mods or performed any custom coding (including changing graphics, translations, etc.) that upgrading will not be as simple as it sounds in this article and you will lose all the modifications that you made. You could very well break your site and at the very least lose some of the functionality that you now enjoy.

      1. Put the site into offline mode.

    To do this log into your site and navigate to Admin panel -> Settings -> Helpdesk Status and toggle the radial to “Offline (Disabled)”, scroll down and click “Save Changes”.

    note: I personally leave the site open, but navigated back to the Client panel.

    2. Make a back up of your database.

    There are various ways to do this and I am not going to cover all of them, but my preferred way is to use command line. You can do this simply by issuing a command similar to:

    mysqldump -u userName -p databaseName > fileName.sql

    note: change userName to your DB username, databaseName to the name of your DB, and fileName to what ever you want to call the back up file.

    Another easy way to do backups (on windows) is to use MySQL Admin (deprecated) or MySQL WorkBench.

    3. Make a back up of your site.

    Once again there are various ways to achieve this. I trust that you know how you want to do it, just make sure that you do it.

    NOTE: You should never rely on your ISPs automatic backups,
    always make your own backups before upgrading!!!

    While you are here, you may want to also make a separate copy of your /include/ost-config.php file. This file contains the database connection information.

    4. Download the latest version of OSTicket.  Once 1.9ST is released you will be able to get it from GitHub, but for right now you can only get the Release Candidate from osTicket.com/download-edge.

    5. Extract it to your OSTicket directory. Yes, you can and should have it over write existing files.

    6. re load your web page. When the page loads you should be looking at the image below. Since this is an upgrade you should be looking at the upgrader. This is important to note since the Upgrader looks different from the Installer.

    fig 1 – upgrader
    click image to enlarge

     

    You should at this point be able to click the “Start Upgrade Now” button. The next screen should look like this:

    fig 2 – upgrader, page 2
    click image to enlarge

     

    Unless you have a reason not to, go ahead and click the “Do It Now!” button. This should result in a small rectangle popping up in the middle of your screen like this:

    fig 3 – upgrader, actual upgrading
    click image to enlarge

     

    Once it has completed you should be looking at the following page:

    fig 4 – upgrader, upgrade completed
    click image to enlarge

     

    Now if you click on the Settings tab you should be looking at the following:

    fig 5 – admin panel, version
    click image to enlarge

     

    While you are here if you put the site into Offline mode you should put it back in Online mode (don’t forget to click Save Changes at the bottom of the page).

    Congratulations! You’ve upgraded from 1.8.1.2 to 1.9, however you are not quite finished yet.

    7. Time for post install clean up.

    First go into your OSTicket directory and delete [or rename] the setup folder. It is not needed for a live or production site and should never be left on a publicly accessible server. I recommend that you delete it, but some people like renaming it to keep the files around should they need it again. For the record you should not need it again, and if you did you can always just re-download the distribution archive.

     

    That’s it for the “hard” stuff. I would at this point recommend that you take another back up of your site (both database and files) since you just made major changes to the site.

    As a side note, if you are upgrading from 1.8.2 (beta) to 1.9rc you will not see the upgrader because there were no database changes between those two versions.

    Enjoy!

    N

    tmib

     

    p.s. the instructions for installing and configuring the LDAP/AD plugin really haven’t changed.

    How to add a configuration option to osTicket 1.8.1.2

    So you wrote a mod or a plugin and want to add some configuration options directly to into the osTicket Admin panel. This is a short tutorial on how to add a setting to osTicket 1.8.1.2, and then have your mod (or plugin) check that setting.

    First off realize that modding osTicket can result in the breaking of your site, and you should really perform a backup of both the site and your database prior to making changes.

    Next is to decide what you want your setting to be; where you want to put it in the admin panel; and what you want to label it.  Personally I wrote a mod a while back that adds a client side open ticket list and think it would be great to be able to toggle this feature on and off, and control how many open tickets the mod displays.  You do not have to have this mod installed to follow this tutorial, but I figured a real world example might be easier so this tutorial will assume that mod is already installed. To that end I've decided on two settings:

    • "Display Open Tickets to Clients" which will be a check box., and have the help text of " Allow clients to view a safe summary of open tickets on the landing page"
    • "Display # open ticket to Clients:" which will be a text field, and have a help text of " (Limit the number of open tickets to display to clients – default 10)"

    I've decided to put both of these settings in Admin panel -> Settings -> Tickets, as the last two options before the "Attachments" section.  So lets start editting with adding these fields there.

    Let's open and edit: /include/class.config.php
    Scroll down to line 304.
    Just after the closing } add:

        function clientDisplayOpen() {
            return $this->get('client_display_open');
        }

        function clientDisplayNum() {
            return $this->get('client_display_num');
        }

    This will let us use those functions to get the config variables values later.

    Next scroll down to line 903.
    After the line that reads:
    'allow_client_updates'=>isset($vars['allow_client_updates'])?1:
    add:
    'client_display_open'=>isset($vars['client_display_open'])?1:0,
    'client_display_num'=>$vars['client_display_num'],

    This will make sure that our fields get updated when we hit save.

    Now lets open and edit: /include/staff/settings-tickets.inc.php.
    Scroll down to line 138.
    Place your cursor after the </tr> and hit enter.
    We are going to add a new tr here to display the settings on the page.
    add:
            <tr>
                <td>Display Open Tickets to Clients:</td>
                <td>
                    <input type="checkbox" name="client_display_open" <?php
                    echo $config['client_display_open']?'checked="checked"':''; ?>>
                    Allow clients to view a safe summary of open tickets on the landing page
                </td>
            </tr>
            <tr>
                <td>Display # open ticket to Clients:</td>
                <td>
                    <?php
                        if($config['client_display_num'] == '0' || $config['client_display_num'] == null) {
                            $client_display_num = '10';
                        } else {
                            $client_display_num = $config['client_display_num'];
                        } ?>
                    <input type="text" name="client_display_num" size=4 value="<?php echo $client_display_num ?>">
                    <em>(Limit the number of open tickets to display to clients - default 10)</em>
                </td>
            </tr>

    Let's go over this a little.
    $config['client_display_open'] is the variable that holds if our check box is checked.
    $config['client_display_num'] is the variable that holds the # of tickets to display.  Additionally it defaults to 10 if its not set, or is set to 0. This is redundant as its also checked in the display_help_topics.php also. 

    Note: if you have a LOT of tickets open on a regular basis you may want to consider hard coding in a default for maximum also so that way staff cannot set it to say 500 and have it display 500 open tickets to the client.

    Lastly we need to change the display logic a little to determine if we should be displaying the open ticket list.
    lets open and edit: /index.php

    replace last 9 lines with:
    <?php
        if($cfg && $cfg->isKnowledgebaseEnabled()){ $displayfaq = '1'; }
        else { $displayfaq = '0'; }
        if ($ost->getConfig()->clientDisplayOpen()) { $displayopen = '1'; }
        else { $displayopen = '0'; }
        
        if ($displayopen == '1' && $displayfaq == '1') { ?>
            <p>Be sure to browse both our <a href="kb/index.php">Frequently Asked Questions (FAQs)</a>, and the open tickets below before opening a ticket.  Thank you.
            <div id="openticks"><?php include('display_open_topics.php'); ?></div>
            </p>
        <?php }
        else {
            if($displayfaq == '1') { ?>
                <p>Be sure to browse our <a href="kb/index.php">Frequently Asked Questions (FAQs)</a> before opening a ticket.  Thank you.
            <?php }
            if($displayopen == '1') { ?>
                <div id="openticks"><?php include('display_open_topics.php'); ?></div>
            <?php }   
        } ?></div><?php require(CLIENTINC_DIR.'footer.inc.php'); ?>

    What this does is based on how displayfaq and displayopen are set it shows different things. The important part here if you're going to do this for something else is how we reference the setting specifically: $ost->getConfig()->clientDisplayOpen().

    Lastly to be complete we need to edit the display_open_topics.php.  This file is not part of the standard osTicket distribution (yet?) and is included in the mod archive I mentioned earlier.  Currently its hard coded to display 10 records.  Locate lines 21-22 which should look like this:

    // The maximum amount of open tickets that you want to display.
    $limit = '10';

    Replace them with the following:
    // The maximum amount of open tickets that you want to display.
    $limit = $ost->getConfig()->clientDisplayNum();

    // if limit is 0 or null set to default [10].
    if($limit == '0' || $limit == null) {
        $limit ='10';
    }

    What this does is check for the setting in the database and if it doesn't exist or is 0 for some reason sets the number to 10.  This is a little redundant because we also check to make sure that if its 0 or null that it gets set to 10 in /include/staff/settings-tickets.inc.php.

    Now if you log into your osTicket installation and go to Admin panel -> Settings -> Settings -> Tickets you should see something like this:
    new config options
     

    Using the osTicket 1.8.1.2 API

    One of the [I feel] less documented features of osTicket is the ticket API.  This API has been built into osTicket for quite some time and allows you to write your own html forms and push the data to osTicket to open tickets.  This means that you could write a contact block for your web page and have it submit to osTicket directly, or if you have another piece of software that can run a script you can write your own custom script to open tickets from that software.  Example a network monitoring system (like NOCOL/SNIPS) could open a ticket when a device stops responding.

    Before you can start using the API you will need to do some configuring in osTicket.  Log into your osTicket installation with your admin account. and go to Admin panel -> Manage -> API Key.

    api key start

    On the right click on "Add New API Key".

    osticket add api key

    There are several things that you need to enter here.  First is the IP address of the source where the request will originate from.  This can be the server IP address assigned to your server that hosts the software. Next you will want to check "Can Create Tickets (XML/JSON/EMAIL)".  Then under "Admin Notes" put a note so that in the future you can go in and see what this API key was made for.  Something like: "API Key for automating X software opening tickets." where X is the name of the software your using.  Feel free to customize this to be what will relay to you the reason for this API key.  Next click "Add Key".

    api key is setup

    Take note of the "THISISAFAKEAPIKEYHERE!" (which of course will be a real API key for your installation).  You will need this for your script.

    Next download the osTicket API example. The only thing in this archive is a file called: ost-api-example.php.   This is an example of how to use the API using PHP.  Obviously you will need to edit this file to suit your implementation of osTicket.  The two really important parts are on lines 18 and 19. 

    'url'=>'http://your.domain.tld/api/tickets.json', // URL to site.tld/api/tickets.json 'key'=>'PUTyourAPIkeyHERE' // API Key goes here Edit line 18 to have your URL.
    Edit line 19 by changing "PUTyourAPIkeyHERE" to your API key (aka the "THISISAFAKEAPIKEYHERE!" from earlier).

    If you have any required custom fields you will want to add them to the $data = array (lines 39 through line 49).  There are examples of both a list and text field included (Agency and Site).

    Next try to run the script.  You can do this by putting the script on a web server and browsing to it. [note: the webserver will need to have the IP address that you put in the API key!]

    How to manually update a client/user phone number in osTicket 1.8.1.x

    I'm not sure why anyone would WANT to do this, but on the off chance someone thinks that they need to and wants to try it here is how you can manually add or update an existing client/user phone number in osTicket at the SQL level.

    • First Look up user id in ost_user

    SELECT id FROM ost_user where name='THE NAME';lets pretend it returns '15'.

    • Next look up the client phone field (by default this is 3, but we should check just in case.)

    SELECT * FROM ost_form_field WHERE label = 'Phone Number';let's pretend that it returns an id = 3.

    • Look for it in ost_form_entry_values

    SELECT * FROM ost_form_entry_values where entry_id = 15 and (field_id = 3 OR field_id = 10);You may get two records back. That look something like this:
    15,3,XXXXX,NULL
    15,10,XXXXX,NULL
    where XXXXX is a phone number.

    To add a missing number
    INSERT INTO ost_form_entry_values VALUES(15,Y,'phonenumber','');where Y is 3 or 10 (the missing one)

    To update an existing number
    UPDATE ost_form_entry_values SET value='NEWphoneNUM' WHERE entry_id=15 AND field_id='Y';where Y is 3 or 10 (the one you want to update)
     

    osTicket 1.8.1.2 coming very soon

    Over on github at the osTicket-1.8 project this a new v1.8.1.2 tag was added.  This tag means that version 1.8.1.2 will be released shortly.  Here are the release notes:

    v1.8.1.2

    Enhancements

    • Better detection of email loops (#584, #684)
    • Any valid email address can be used throughout the system (#673)

    Bugs

    • Fix selection of the auto-response email for a department (#666)
    • Allow usernames to have Unicode characters continued (6986e6f)
    • Don't require current password when resetting (#671)
    • Fix incorrect matchup of collaborators to users (#676)
    • Fix over-stripping of some HTML element sections (#686)
    • Fix upgrade crash from some osTicket 1.6 installations (#687)
    • Fix attachments from new ticket by staff to be associated with the response (#688)

    Geeky Stuff

    • Persistent database connections are supported (#693)
    • Regression testing now tests for JS syntax errors (#669)

     

    source: https://github.com/osTicket/osTicket-1.8/releases/tag/v1.8.1.2

    osTicket 1.8.1.1 released

    As of a few days ago you can now download 1.8.1.1 from the osticket.com/downloads page.

    Here is a list of the enhancements, bug fixes, and Security updates:

    Enhancements

    • Add signature to activity notice for staff replies
    • Show company name in the copyright footer (#586)
    • Departments can have a department if there are no members (#618)
    • Signature is displayed below the staff response box (#609)

    Bugs

    • Fix footnotes generated in html2text for same link text but different URLs (5e2f58d)
    • Fix processing of emails for existing users (#588)
    • Avoid adding an aliased system email address as a collaborator (#604, #627)
    • Show current staff / user names where possible (#608)
    • Fix display of forgot my password link (#611)
    • Export the value of custom fields (not the ID number) (#610)
    • Fix saving the backend with file metadata (#595)
    • Use the database as a failsafe attachment backend (#594)
    • Avoid a crash when sending some mails (#589)
    • Preserve image float css attribute in ticket thread (#612)
    • Fix appending canned responses if HTML ticket thread is disabled (#621)
    • Fix migrating attachments when upgrading from osTicket 1.6 (#614)
    • Fix SQL error for some variable names on custom fields (#620)
    • Fix stripping of leading zeros from phone numbers (#622)
    • Strip <?xml ... > processing instructions from html email (#628)
    • Fix crash during PDF generation for some PHP installations (#631)
    • Disable error_reporting for releases (#630)
    • Add git version to the deployment script (#630)
    • Email templates ship with the ticket number in the subject line (#644)
    • FAQ last-modified time can be something other than midnight (#647)
    • Fix creeping widget sizes in create-user dialog (#648)
    • If Auto-claim tickets is disabled, reopen tickets unassigned (#651)
    • Usernames can have Unicode characters (#650)
    • If inline images are stripped from the email, they are not considered attachments (#649, bcbebd0, 35a23be)
    • Fix incorrect Content-Id headers generated for inline images (23ce0a0, e37ec74)
    • New SLA's default to have alerts enabled (#654)
    • Fix creating ticket by staff without required contact-information fields (#656)
    • Fix crash for some custom field configurations (#659)
    • Fix crash viewing ticket in the client portal if no departments are public (#658)
    • New installs have the
      Staff

      group enabled (c7130c5)

    • Always show the ticket thread when following an email link (17725ca)
    • Allow manual update of SLA to a transient SLA (#663)

    Security and Performance

    • Staff can only see closed tickets if they have access via group or primary department (#623, #655)
    • Fix incorrect honoring of ban list and over limit settings (#660)
    • Keep existing session after login (c4bfb69)
    • Fix password reset system (dfaca0d, #664)