Upgrading to 3.0 from 2.6

SupportPal 3.0 is a major release containing a completely revamped interface. The interface has been designed for better functionality and mobile support, and includes a dark mode option.

Estimated Upgrade Time: 1-2 Hours.

What's New?

View the 3.0 Release Notes for the new features and improvements in this series.

New System Requirements

  • The new minimum PHP version is now 7.2.0.
    PHP 7.0 and 7.1 have reached end of life and support for them have been dropped in this release.
  • The Ctype PHP extension is now required.
  • libxml 2.7.0 or above is now required.

Email Template Changes

The upgrader will attempt to automatically update email templates that have not been modified. If you see a message stating Unable to update email template when running database upgrades then you'll need to update the template mentioned manually:
  1. Browse to Settings > General > Email Templates and find the template mentioned
  2. In the text editor, click on the <> button (view HTML)
  3. Replace all content with the relevant email template from the list below
  4. Repeat for any translated versions
  5. Click Save

Ticket feedback request

The 'Ticket feedback request' email template has been updated to add a neutral feedback option.

<table width="450" style="width:450px;">
    <tbody>
        <tr>
            <td align="center" style="text-align: center">
                <a href="{{ route('ticket.frontend.ticket.feedback', [ ticket.number, token ]) }}?rating=1">
                    <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAABqlBMVEUAAAAuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEuzHEeM3AYAAAAjXRSTlMAAQIDBAUGBwgJCgsMDg8QERITFBUWFxgaGxwdHh8gIiQmKSorLC4vMDIzNDY4OTo8Pj9BQ0RFR0lKS0xOT1RVVldYWVtcXV5hYmNmaG9zdHV4fH5/hYiLjo+UlZeYmp6gpaaoqqutr7C1t7q8vsHDxcfIzM7P0dPV19na3ODi5Obo6evt7/Hz9ff5+/3xUOGfAAACRklEQVQYGYXBiSOTYQDH8d+z7Z0iYpPpkhrpPuhS6dKlRBedohKx7kQpraKY7fs/9zzvsA2tz0cFvH3dbzJYk73Hy/VPdQPke3/YaDWxUZabOqgVTCfOrzv7akrDayvj18dwnq5RIe8V1qt65VT1Ys3ElK/0CzDZpEKRZ0A6rpzQZ+BxQCucBtK1WmRGgA6tpn4WZkq1oB3o1OrqgGFlVWagX5ZpaIlokWloicg6ARyVrx9+BiWFx4CLygqPAVdkPYTpgKwo0CyrByciXw9OtaR1wClZt2HCyEritMiXxDkm6yZMSTKzsF9OAqdBvgROk6y1QEzaCpmgnEasMSNfI9a4kTME16Q2eK6sxkSyJ6wFjYlkT1i+VngpPYBzKq4G5qW3sFPFeYCnKdik4gxQpnmo1n8AVfoBG1WcAdbpA8RVXAgI6wm0ybf+zUBQeZon2+WLQMboAvTJdxfOKMfLQEhOM7yWtsOckdMGyYCWXIXv8vXBDSmQhrickjT0atGmDJyR4wF1kh5AQr7LwP2gfLtTMBWQ0w4zRtJWoEGOGQamr26piB4YAdIxOV4KOuSMwoSRExwkZ3abfF2Q8uRsBm7JZ86mWfCiTL4dwCVl3QKOKMs7OZiC8a6Ysirm4KNRVmAC2K8lRksqvkI6qkVl00CnVorPAbuUs+E3MBxVIa8bq1X5yr9h3StXTuh8CsjsUSGvDyfRVhs2Uqjq0KMM1qdqrbD3O8vNdxitwrRMku9PZ1j/Er08lML3rrveqDivrKq8xGi5v+9pCmPJArjSAAAAAElFTkSuQmCC" alt="Good, I'm satisfied">
                </a><br>
                Good, I'm satisfied
            </td>
            <td align="center" style="text-align: center">
                <a href="{{ route('ticket.frontend.ticket.feedback', [ ticket.number, token ]) }}?rating=2">
                    <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAABmFBMVEUAAADxxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/xxA/4+wrwAAAAh3RSTlMAAQIDBAUGBwgJCgsMDQ4PERITFBUWFxgaGxwdHyAkJikqKywuLzAzNDY4Ojw+P0FDREVHSUpMTk9SVFZXWFlcXV5iY2Zob3BzdHV4fH6ChYaIiYuPlJWXmJqeoKWmqK2vsLK1t7q8vsHDxcfIzM7P0dPV19na3ODi5Obo6evt7/Hz9ff5+/36/rmZAAACCUlEQVQYGYXBCUNMUQCG4e9M3aFFNU2apIYpoVBZIkWIKNkiVKJQ2SMiad/m/dvOuVNqVs+jJF5j3/s41uzA+RJlVfuCvT6dMcokMkGquVNKY3pwFu83VhYGC8pit6ZxRvcrmTeFNRXVrtAA1nJEexX+AGYblKz8JbAV067878DzgNJcAraqtMO8BbqVSXQNlgu1rQvoUWa1wLgSyuIwIsvUtYT1T7S1WtYF4Kx8I7CQJyk4DdxQgnkDPJb1FJYCssJAs6yHOBXydeI0SCoGLsq6BzNG1jzOOflGce7IugtzkswaNMmZxGmQ7wHOZVkFQESqgXienHqsb0a+MNZKUM4Y3JTa4ZUS6ifnHwW1rWpsYfiAfG3wWhqETuVWCZvSBzim3DzA0xxUKzcDFGkTKvQfQEh/4JByM0CxPkNMueUDQQ1DuxICXgojXznEja7CkHwdpFqNyGmGd9IRWDdyFknTK2cIbkuBLYjJ6SDVWkSWB9RKGoRJ+QJeCiOnC5aNpBqgTtl5G9AtZwJmjLLqhQ1PzmGgX9kcBa4poR9oVWal6/DFKCEwAzQpk9KfsBXWjqIloEfpYuvAce06uAKMh5XM68Nq014lv7CelGhX/pUNIH5CybwhnMn2qqCR8kOnn8WxvlYozcnfpNrsNsrAtMyy12pPUNmEr49t4PvYFzXKzSsKlewzSvUXTrn3Jn1lbwAAAAAASUVORK5CYII=" alt="I'm not sure">
                </a><br>
                I'm not sure
            </td>
            <td align="center" style="text-align: center">
                <a href="{{ route('ticket.frontend.ticket.feedback', [ ticket.number, token ]) }}?rating=0">
                    <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAMAAAC7IEhfAAABpFBMVEUAAADnTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDznTDw8vlXlAAAAi3RSTlMAAQIDBAUGBwgJCgsMDQ4PERITFBUWFxgaGxwdHh8gJCYpKissLi8wMzQ2ODo8PT4/QUNERUZHSUpMTk9QUlZXWFlbXF1eYmNmaG9zdHV4fH6ChYiJi4+UlZeYmpudnqClpqitr7C1t7q8vsHDxcfIzM7P0dPV19na3N7g4uTm6Onr7e/x8/X3+fv9/9BgVAAAAkNJREFUGBmFwYlDi2EAx/Hfs/a+UUmtlLPYcuXMGbkSURJCyC20co4ICRVb7ftPe553W9tq5vNREa994FUaa+rmsVr9U8tjCr09YFRK8xjLTe/VCqYP59f19qYqf3Vd9HIC58kqFfPGscZblVd/E2uuWYWqPgNTO1Qs8hRYjCov/Am4F9IKJ4HF9coxL4FeldL6B+aqlNUN9Km0FuC5MurS8EiWiXVElGNiHRFZx4HDCjyCnxWS/ARwXhl+Argo6w7MhmQ1AAdlDeFEFBjCaZRUA5yQdQ0mjawZnA4FZnCOyLoK05LMH9gjJ44TUyCOs0PWaqBZ2gLpCjltWAmjQBvWRyNnFC5JXfBMGW3xmSFfWW3xmSFfgU54IQ3DGZXXBAvSa9iu8jzA0zRsVHkGqNYCNOo/gHr9gA0qzwA1egdR5YXab00mv492r1FeGPB1H7q0ZP88WcO+ciKQNjoHI8oyd8j72aSsgzAhbYWkUcZDYGEw1rz5RAJI1iljBPql0CJEFTgFPKlU4GgaPhs5HtAiaRjicrwUPFBOFOiU0w1zRtIWICbrGMyFtaQfpmR5KeiVMwaTRtIN6FFeJeBJugIpT84mYFBS47eJsAqcTvVL2gb0KGMQOKTS1ibhvVFGaBLYo1LWfoHFBuVUzwJ9WimaBHYqb9088LxBxbwBrE4Vqv2KdbtWeeGzKSC9S8W8EZx413rfSOH6fXfTWB8atcLu7yy30GtUgumYotDvPl//0nBhNEXgzUCrUXledX1tpdFyfwF8RgXXQ7P1gQAAAABJRU5ErkJggg==" alt="Bad, I'm unsatisfied">
                </a><br>
                Bad, I'm unsatisfied
            </td>
        </tr>
    </tbody>
</table>

Development Changes

Database changes

The following tables have been changed:

  • All feedback_* tables have been renamed and prefixed by ticket_
  • article_rating table renamed to article_feedback_log
  • article_rating.score column renamed to article_feedback_log.rating
  • article.positive_rating and article.total_rating columns have dropped. The information is still available in the article_feedback_log table

API changes

The following API functions have backward incompatible changes:

  • The default_icon parameter on the POST and PUT /api/selfservice/type endpoints has been renamed to icon, and now accepts FontAwesome icon names as values, such as 'fa-book'.
  • The score parameter on the POST /api/selfservice/article/{id}/rating endpoint has been renamed to rating

Framework

We've upgraded the core framework (laravel/framework) from version 5.5 to 6. Some of these releases have breaking changes which may break any code you've written.

Notable changes

  • str_* functions have been replaced by \Illuminate\Support\Str::*
  • array_* functions have been replaced by \Illuminate\Support\Arr::*
  • Event::fire is now Event::dispatch
  • Cache::* saving items to the cache for a certain period of time now uses seconds instead of minutes
  • The Input facade, which was primarily a duplicate of the Request facade, has been removed. If you are using the Input::get method, you should now call the Request::input method. All other calls to the Input facade may simply be updated to use the Request facade.
  • Route parameters which do not match the route definition are no longer replaced and instead added as query parameters. For more information please read: URL Generation.

For a full list of changes, please read through the Laravel upgrade guides:

  1. 5.5 to 5.6
  2. 5.6 to 5.7
  3. 5.7 to 5.8
  4. 5.8 to 6.0

We recommend to test your plugin on a development installation before upgrading your help desk. Please contact us for a development license key if you don't already have one.

Views

Any jQuery code used before the scripts_footer block must be moved to the body end. jQuery is now loaded later to improve page rendering times.

The extendedViews and overriddenViews options have now also been removed. These have not been documented since being replaced with extending templates plugin documentation if your plugin makes use of either of these.

Template Changes

Both the operator and frontend templates have been completely rewritten and many JavaScript libraries updated or removed. If you've made template modifications please review your files.

If you were using of the below functions in canned responses, email templates or your own custom portal templates then please read on:

  • array_get
    The array_get function no longer exists. Please use the |get filter instead.
    For example my_var|get('foo.bar', 'default')
  • str_limit
    The str_limit function no longer exists. Please use the |limit filter instead.
    For example my_var|limit(100).

Config File Changes

config/app.php
The following logging related configuration options have been removed:

  • log
  • log_max_files
  • log_level
See Logging Configuration for more information on the new config options.

config/trustedproxy.php
The config file refers to class constants which are no longer available - this may result in fatal PHP errors if not replaced. We recommend to compare your trusted proxy configuration with our new default and copy over any changes. View the /config/trustedproxy.php file and Configuring a Trusted Proxy section for more information.

Other Important Changes

  • Self-service type frontend icons
    The self-service section now utilises FontAwesome for the type frontend icon option, making it much easier to set a custom icon. All existing custom icons will be wiped on upgrade, and we would recommend to review your self-service type settings after in case you wish to set different icons.
  • LDAP accounts
    LDAP linked operator accounts are now restricted to authentication via the LDAP service. If you need to login via both your help desk email / password and also the LDAP service then we've added a backwards compatible configuration option.
  • configureMonologUsing function removed
    The $app->configureMonologUsing function has been removed. If you had made any modifications to our core unencoded files then you may be affected. Logging can be now configured via a new /config/logging.php file. See Logging Configuration for more information on how to edit the new configuration file.
  • Email commands
    HTML is no longer supported in email commands; any HTML will be removed. For example if you enter {% note <strong>Hello</strong> %} then Hello is not going to be bold and the <strong> tag will be removed.