HomeAdmin ManualPrinter Friendly Version

Admin Manual

Everything you need for installation, upgrading, configuration and other advanced issues.

1. Email Setup and Troubleshooting

1.1. Mailbox Setup - Microsoft / Office 365 Email Configuration

Office 365 (Exchange Online) email connections are now configured using the mail authentication flow instead of traditional IMAP and SMTP sending settings. Office 365 (Exchange Online) email is received and sent via Microsoft's API using oAUTH authentication. 

If you are migrating from existing IMAP and SMTP connections for your mailboxes, we recommend first disabling your old mailbox, then following the steps below to create a new mailbox connection.

Video Tutorial

Connecting an Office 365 Mailbox

Before beginning this process make sure that your browser is signed into the Office / Microsoft 365 mailbox that you wish to integrate with HelpSpot.

  1. Navigate to Admin > Email Mailboxes
  2. Select "Microsoft 365" from the menu


  3. Next enter the Reply to Email Account This is the email address that maps to this box ie: support@mydomain.com
  4. Click on the link to the HelpSpot email authentication service
  5. This will open a new tab. Select Sign in with Microsoft.


  6. Make sure that the email account listed on the permissions confirmation screen is the one that you want to integrate with HelpSpot.


  7. Next copy your credentials from the screen displayed.

  8. Enter the credentials provided back in your HelpSpot mailbox setup screen.


  9. Set any other options as desired and then select "Add Mailbox" at the bottom.
  10. Important! If you are using Office 365 for all of your mailboxes you will also need to go to Admin > Settings > Email Integration and select a configured mailbox your outgoing email in the "Send Outbound Email Via" setting.

Your Microsoft / Office 365 (Exchange Online) mailbox is now connected to HelpSpot.

 

1.2. Mailbox Setup - Google G Suite and Gmail Email Configuration

Google G Suite and Gmail Email Connections are now configured using the mail authentication flow instead of traditional IMAP and SMTP sending settings. Google Suite email is received and sent via Google's API using oAUTH authentication. 

If you are migrating from existing IMAP and SMTP connections for your mailboxes, we recommend first disabling your old mailbox, then following the steps below to create a new mailbox connection.

Connecting an Google Suite Mailbox

Before beginning this process make sure that your browser is signed into the Google Suite mailbox that you wish to integrate with HelpSpot.

  1. Navigate to Admin > Email Mailboxes
  2. Select "Google" from the menu



  3. Next enter the Reply to Email Account This is the email address that maps to this box ie: support@mydomain.com
  4. Click on the link to the HelpSpot email authentication service
  5. This will open a new tab. Select Sign in with Google.


  6. Make sure that the email account listed on the permissions confirmation screen is the one that you want to integrate with HelpSpot. Also ensure that the bottom two checkboxes are checked if provided.


  7. Next copy your credentials from the screen displayed.

  8. Enter the credentials provided back in your HelpSpot mailbox setup screen.

  9. Set any other options as desired and then select "Add Mailbox" at the bottom.
  10. If you are setting up your default mailbox you will also want to got to Admin > Settings > Email Integration and select your new mailbox as the default sending option.

Your Google Suite / Gmail mailbox is now connected to HelpSpot.

1.3. Legacy Mailbox Setup - Office 365 IMAP/SMTP

IMAP/SMTP settings can be used for Office 365 mailbox setup. However, we now recommend using HelpSpot's API integration with Office 365 as Microsoft will soon be disabling IMAP and SMTP basic authentication functionality.

Please note, before beginning that IMAP must be enabled for the Office 365 Mailbox you want to connect to HelpSpot. This can be done via the Exchange Online Remote Powershell (https://support.microsoft.com/en-us/kb/2416434) or via the web based exchange admin tools. Once your mailbox is setup properly:

 

  1. Login to HelpSpot as an Administrator.
  2. Navigate to Admin > Email Mailboxes
  3. Enter your account information. The non-account specific information is as follows: 
    Hostname: outlook.office365.com 
    Account Type: IMAPS 
    Port: 993 
    Security Type: SSL no-validate
  4. Test your mailbox settings to make sure that your inbound connection is successful
  5. Next select Custom for the Outgoing Email SMTP Settings to use
  6. The non-account specific connection information for SMTP is as follows: 
    SMTP Security Protocol: TLS 
    SMTP Host: smtp.office365.com
    SMTP Port: 587 
    Use SMTP Authentication: Yes 

 

O365

1.4. Legacy Mailbox Setup - G Suite IMAP/SMTP

Because of G Suite's security system, you first need to prep your mailbox for integration with HelpSpot. Here is a guide to the settings that need to be setup before hand. Some of these may be already configured depending on your environment.  If so you can proceed to step 4.

1. Enable Imap Access

  1. Go to https://admin.google.com and login with a G Suite admin account
  2. From the Admin console dashboard, go to Apps > G Suite > Gmail > Advanced settings.

    Tip: To see Advanced settings, scroll to the bottom of the Gmail page.

  3. In the Organizations section, select the organizational unit for which you want to configure settings.
  4. Under POP and IMAP Access, clear the check box for Disable POP and IMAP access for all users in the domain.
It may take up to one hour for IMAP and POP changes to take effect. As long as the box is cleared, users can configure POP and IMAP access for a host of clients.

2. Turn on access for "less secure apps"

  1. Go to https://admin.google.com and login with a G Suite admin account
  2. Click Security > Basic settings.
  3. Under Less secure apps, select Go to settings for less secure apps.
  4. In the subwindow, select the Allow users to manage their access to less secure apps radio button.

3. Toggle access for less secure apps on your G Suite account

  1. Go to the "Less secure apps" section in My Account.
  2. Next to "Access for less secure apps," select Turn on.

4. Setup Your Mailbox In HelpSpot

  1. Login to HelpSpot as an Adminstrator.
  2. Navigate to Admin > Email Mailboxes
  3. Enter your account information. The non-account specific information is as follows:
    Hostname: imap.gmail.com
    Account Type: IMAPS
    Port: 993
    Security Type: SSL no-validate
  4. Test your mailbox settings to make sure that your inbound connection is successful
  5. Next select Custom for the Outgoing Email SMTP Settings to use
  6. The non-account specific connection information for SMTP is as follows:
    SMTP Security Protocol: TLS
    SMTP Host: smtp.gmail.com
    SMTP Port: 587
    Use SMTP Authentication: Yes

1.5. What Happens When You Migrate to an OAuth-based Mailbox?

Introduction to OAuth Based Mailbox Migration

Migrating your mailbox to an OAuth-based system is an important step towards enhancing security and efficiency in your email operations. This process involves creating a new mailbox and subsequently disabling the old one. Understanding the implications of this migration is crucial for a seamless transition.

Effects of Migrating to an OAuth Based Mailbox

The migration to an OAuth-based mailbox entails several significant changes that affect how users interact with their emails and the portal. Here are the key impacts:

  • Inaccessibility of Requests in the Old Mailbox: Following the migration, any requests made under the old mailbox cannot be accessed in the portal using the previous access key. This necessitates a process to either migrate or archive these requests for future access.

  • Resetting of Secondary Portal Mailbox Assignments: Secondary portal mailbox assignments lose their configuration and need re-setup. This means updating the settings to ensure they point to the new oAuth-based mailbox, maintaining the flow of communication without disruptions.

  • Triggers, Automation, and Mail Rules May Be Affected: If triggers, automation setups, and mail rules are configured to rely on the old mailbox ID, they will no longer function correctly with the new mailbox. It is essential to review and update these configurations to align with the new mailbox ID, ensuring that automated processes and rules continue to work as intended.

1.6. Handling Large Email File Attachments

To properly handle large file attachments it is often necessary to modify settings in your HelpSpot, PHP.ini file and database configuration.

HelpSpot Settings

Admin->Settings->Email Integration->Max Attachment Size - This defaults to 10mb. If you need to handle larger sizes, you'll first need to increase this setting.

PHP.ini Values to Review

memory_limit - PHP may require more memory to import large files then it has available. Increasing this value will give PHP more memory to use. 60mb has proven to be a good value for this variable if you want to handle attachments up to about 10mb.

max_execution_time - The time PHP has to execute a script. If you're downloading large files from across the internet, you may need more time.

upload_max_filesize - The maximum size a file upload can be. This affects files staff try to upload to attach to emails.

post_max_size - The maximum size an HTTP POST request can be, this can limit the maximum size a file can be when uploading files to attach to emails.

upload_tmp_dir - The directory uploaded files are temporarily stored in during transmission. If no attachments of any size are able to be uploaded then this value may be unset or set to a directory which is not writable by the web server.

Database Settings

MySQL: max_allowed_packet - On MySQL, increase the max packet size to greater than the biggest files you expect to handle. This is done in the MySQL configuration file. See your MySQL documentation for specific instructions for your version.

IIS Settings

IIS has a maximum content length setting that can affect the ability to upload / attach files. Here's how you can check that:

  1. Open IIS Manager.
  2. Select the website that you want to configure.
  3. Make sure you are in Features View per the button at the bottom of the manager.
  4. Select Requests Filtering and open it by double-clicking the icon. The Request Filtering pane displays.
  5. From the Actions pane on the right hand side of the screen click Edit Feature Settings... link. The Edit Request Filtering Settings window displays.
  6. In the Request Limits section, enter the appropriate Maximum allowed content length (Bytes) and then click the OK button.
  7. Restart IIS.

NGINX Settings

NGINX has a client_max_body_size that can prevent larger attachments if the value is set too low.

 

2. HelpSpot Mobile Apps

2.1. Setup for Mobile Applications

HelpSpot has both iOS (iPhone / iPad) and Android mobile applications available.

HelpSpot Requirements:

For HelpSpot, these require that:

  1. You use HelpSpot version 4 or greater.
  2. The Private API be enabled within the Admin > Settings > Web Services API configuration.

Login To Mobile App

Since the mobile app connects to your instance of helpspot you will need the URL of your helpspot site the first time you login to the mobile app.

  1. Open the mobile app
  2. Enter the URL to your helpspot instance. For example https://helpspot.yourdomain.com
  3. Enter your username and password

If you encounter issues logging in. Visit our troubleshooting guide.

2.2. Troubleshooting

"HelpSpot Could Not Be Reached" error

There are a few possible reasons why HelpSpot may return the "HelpSpot could not be reached error:

  1. HelpSpot's private API is not enabled
  2. iOS/Android limitations in connecting over "https"
  3. Server does not allow or support HTTP Basic Authorization

Private API

Please be sure to enable HelpSpot's Private API from within the Admin > Settings > Web Services API configuration.

HTTPS and SSL Certificates

If the private API is enabled and you continue to receive an error, you may have an SSL certificate configuration that supports too few secure protocols. For example, Apple's iOS version 9 may only support TLS1.2, but a web server's SSL certificate may only support or enable TLS1.0.

We suggest following these configurations for a secure and functional SSL configuration.

If you are curious about your site's SSL configuration, you can run it through this SSL Certificate tester, which will inform you of any potential issues in your SSL configuration.

Basic Authentication

HelpSpot's API's are authenticated against use HTTP Basic Authentication.

  • Some servers may prevent this type of authentications, perhaps by removing an incoming request's Authorization header.
  • Apache servers running PHP as fast-cgi will not pass basic authentication from Apache to PHP.
  • Nginx users may find that the "auth_basic" setting has been used either in their Nginx configuration. A setting of "auth_basic off;" would prevent the HelpSpot mobile applications from being able to authenticate against HelpSpot.

3. Authentication

3.1. Microsoft Entra / Azure SAML Authentication

Make sure the staff configured within HelpSpot have a "Black Box/LDAP/AD/SAML Username" setup matching their Office365 email addresses in their HelpSpot staff profiles.

You also may want to enable SAML Debugging before enabling SAML for the first time.

Microsoft Entra Setup

  1. Go to https://entra.microsoft.com/#home and click on Identity > Applications > Enterprise applications.
  2. We'll create a "non-gallery" application.
    1. Select "New Application"
    2. Select "Create your own application"
    3. Give the application a name, and keep the default option "Integrate any other application you don't find in the gallery"
  3. After the app is created:
    1. Select single sign on and then choose SAML for the sign on type.
    2. Edit step 1 "Basic SAML Configuration" and enter an Identifier (Entity ID) found in HelpSpot Admin > Settings > Authentication > SAML2.0.
    3. Enter the Reply URL (Assertion Consumer Service URL) (also know as ASC URL) that is found in HelpSpot Admin > Settings > Authentication > SAML2.0
    4. Save your settings
  4. Still within the application settings, head to Users and group and choose Add User to add users or role who may authenticate into HelpSpot

HelpSpot Setup

  1. After completing the above, and saving the settings, step 3 on the SAML setup page should update with more information.
    1. Download the Federation Metadata XML file. In this file, you will find the <X509Certificate> tag. Copy the value that is between the <X509Certificate> and </X509Certificate> tags. Paste this value into Certificate field in HelpSpot Admin > Settings > Authentication > SAML2.0.
  2. Move down to step 4 is the azure SAML setup page and copy the Login URL to the Login URL (SSO) in the HelpSpot SAML setup page.
  3. Copy the Logout URL to the Logout URL (SLO) in the HelpSpot SAML setup page.
  4. Copy the Azure AD Identifier to the Entity ID in the HelpSpot SAML setup page
  5. Save your settings in HelpSpot and then head back to the Azure SAML setup page and validate your single sign-on with SAML
 

3.2. Google Suite SAML Authentication

Make sure the staff configured within HelpSpot have a " setup matching their email addresses in their HelpSpot staff profiles.

You also may want to enable SAML Debugging before enabling SAML for the first time.

Within Google admin for your organization:

  1. Head into the menu > Apps > SAML Apps
  2. Click the blue Add a service/app to your domain link.
  3. Choose "setup my own custom app".
  4. Copy the Google IdP information, and download the certificate (https://d.pr/i/OGcx0h). We will use this in HelpSpot under Admin > Settings > Authentication.
  5. Add the Basic Information for your application (the name and description is arbitrary) (https://d.pr/i/NHTMOu)
  6. Add the IdP information from the HelpSpot Admin > Settings > Authentication section into the Gsuite admin (https://d.pr/i/duEPpx)
  7. Click "Next" to skip attribute mapping (https://d.pr/i/PFkLjS)
  8. Close the confirmation window telling you to "upload" the SAML information, and be sure to add the info from step 6 if you have not done so.
  9. Choose "User Access" to enable users from a domain to use the SAML application (https://d.pr/i/R9gAuq)
    • It defaults to being "OFF for everyone"
  10. It should then be "ON for everyone" (or similar) (https://d.pr/i/SRSJS2)
  11. In HelpSpot navigate to Admin > Settings > Authentication.
  12. Select SAML authentication and enter the Entity ID, SSO URL and copy the certificate contents into the HelpSpot settings.

SAML should then function within HelpSpot.

3.3. Two Factor Authentication (2fa) Support

Helpspot supports native 2fa authentication for staff members when using HelpSpot's internal authentication. To enable this option, follow these steps:

  1. Navigate to your user preferences:
  2. Select "Enable Two Factor Authentication"
  3. You can then scan the displayed QR code with your authenticator app such as Google Authenticator, 1Password, Microsoft Authenticator or Authy. Alternatively, if you don't have a device that can scan QR codes you can manually enter the key in your authenticator app.
  4. After doing this, enter the enter the code from your authenticator app to confirm the key. Two factor authentication will not be enabled on your account until the key is confirmed.

After enabling 2fa authentication you will be prompted to enter your login code whenever you authenticate to HelpSpot. Administrators can disabled 2fa authentication to unlock accounts.

Enabling 2fa will also disable basic authentication on the API. API keys will need to be used for any API interactions.

3.4. Black Box Authentication (agent login) with Active Directory

These instructions should work with most Active Directory installations, however, minor adjustments may need to be made to fit your exact setup.

  • Download the Active Directory/PHP Helper library from http://adldap.sourceforge.net/
  • Unpack the download and place the adLDAP library files (as of this writing, the 'adLDAP.php' file and the 'classes' and 'collections' directories) into the /custom_code folder of your HelpSpot installation.
  • Open adLDAP.php in a text editor. Around line 82 there starts a few variables you'll need to modify so that an AD connection can be made to your AD server. You'll likely need to modify at least $accountSuffix , $baseDn, and $domainControllers variables. When finished save the file.
  • Copy the file /custom_code/BlackBox-base.php to /custom_code/BlackBox.php
  • Open BlackBox.php in a text editor. Replace the BlackBox function with this code (sample file also available at the bottom of this page):
    //include the class
    require_once("adLDAP.php");
    	
    function BlackBox($username, $password){
    	
    	//create the AD LDAP connection
    	$adldap = new adLDAP();
    
    	//authenticate a user
    	if ($adldap->authenticate($username,$password)){
    		return true;
    	}else{
    		return false;
    	}
    
    }
    
  • Login to HelpSpot and go to Settings in the upper right hand corner. Make sure the 'Black Box Username' field contains your Active Directory username or you will not be able to login. Every other user must also have this field filled in or they will not be able to login. You don't need to enter them all right now though.
  • Go to Admin->Settings and under 'Authentication' select 'Black Box'. Save the settings and Black Box/Active Directory authentication will be enabled. You should log out, if the system doesn't do it for you and attempt to login with your Active Directory username and password.

3.5. Black Box Authentication (agent login)

Black box authentication allows you to integrate your organizations authentication system with HelpSpot. Configuration requires only a few simple steps.

Summary: Steps to enable BlackBox Authentication

  • Customize the BlackBox function in the file /custom_code/BlackBox-base.php to authenticate the username and password passed to it against your own authentication system.
  • Rename BlackBox-base.php to BlackBox.php
  • Confirm that your staff has the "Black Box Username" field set correctly in their accounts.
  • Enable Black Box authentication in Admin->Settings

Customizing the BlackBox function

In the root of your installation there's a folder called /custom_code. Within that folder is the BlackBox-base.php file. This file contains the empty BlackBox function:

function BlackBox($username, $password){

	/* DO YOUR AUTHENTICATION HERE */

	return false;

}

Customize this function to do authentication against your internal system by using the username and password provided. Here is an example of the function customized to authenticate against a MySQL database: (some security procedures left out for clarity)

function BlackBox($username, $password){

       $dblink = mysql_connect('localhost', 'mysql_user', 'mysql_password');
       mysql_select_db('database', $dblink);
       
       $username = mysql_real_escape_string($username);
       $password = mysql_real_escape_string($password);

       $result = mysql_query("SELECT userid 
       						  FROM users 
       						  WHERE users = '$username' AND pass = '$password'", $dblink);
       $num_rows = mysql_num_rows($result);

       if($num_rows == 1){
			return true;
       }else{
			return false;
       }
}

Returning true will authenticate the user, while false denies access. Note that even after you return true, HelpSpot looks up the username to make sure the username is that of a valid HelpSpot user. If you have not assigned the username to any of your staff then authentication will still fail.

Enabling Black Box Authentication

Before enabling check each account account that will be impacted by this authentication changes to make sure they have "black blox username" set. If they do not, they will not be able to login.

Enabling Black Box authentication is a two step process. First you must rename the BlackBox-base.php file to BlackBox.php. Second, you must change the authentication type to Black Box [Admin->Settings]. After changing the setting you will likely have to login again at which point the login box should say "username" instead of "email".

HelpSpot Password

HelpSpot still requires a password for all accounts even though it's not used for your custom authentication. This is because HelpSpot will attempt to login against it's own internal authentication when your custom authentication returns false. This allows users to get into HelpSpot even if the custom function is not working correctly using their HelpSpot email and password.

3.6. Black Box Portal Authentication (customer portal login)

Black box authentication allows you to integrate your organizations authentication system with HelpSpot. Configuration requires only a few simple steps.

Summary: Steps to enable BlackBox Authentication

  • Customize the BlackBox function in the file /custom_code/BlackBoxPortal-base.php to authenticate the username and password passed to it against your own authentication system.
  • Rename BlackBoxPortal-base.php to BlackBoxPortal.php
  • Enable Black Box authentication in Admin->Settings->Portal->Request History Login Type

Customizing the BlackBox function

In the root of your installation there's a folder called /custom_code. Within that folder is the BlackBoxPortal-base.php file. This file contains the empty BlackBox function:

function BlackBoxPortal($username, $password){

	/* 
		DO YOUR AUTHENTICATION HERE 
		
		Here's an example of how to return a valid user:
		return "john.smith@company.com";
	*/

	return false;

}

Customize this function to do authentication against your internal system by using the username and password provided. Here is an example of the function customized to authenticate against a MySQL database: (some security procedures left out for clarity)

function BlackBoxPortal($username, $password){

       $dblink = mysql_connect('localhost', 'mysql_user', 'mysql_password');
       mysql_select_db('database', $dblink);

       $username = mysql_real_escape_string($username);
       $password = mysql_real_escape_string($password);

       $result = mysql_query("SELECT email FROM users WHERE users = '$username' AND pass = '$password'", $dblink);
       $num_rows = mysql_num_rows($result);

       if(mysql_num_rows($result) == 1){
              $row = mysql_fetch_assoc($result);
              //An email must be returned
              return $row['email']; 
       }else{
              return false;
       }
}

Returning an email will authenticate the user and show them any requests for that email, while false denies access.

Using LDAP with Portal BlackBox authentication

Just like with the Staff BlackBox authentication, you can use LDAP. However, because HelpSpot needs an email address returned upon successful authentication (instead of simply "true"), we need to do a little more work. Using the above LDAP library, you can query the LDAP server for the user information. This usually contains an email address associated with the account (however that may change depending on your LDAP server).

To get started, follow the instructions on downloading the LDAP library. Then create the BlackBoxPortal.php file. The following is some sample code which shows retrieving a users email address from the LDAP server if they successfully authenticate.

 

require_once("adLDAP.php");

function BlackBoxPortal($username, $password){
 
    //create the AD LDAP connection
    $adldap = new adLDAP();
 
    //authenticate a user
    if ($adldap->authenticate($username,$password))
    {
        $userinfo = $adldap->user()->info( $username, array("mail","displayname"));
        return $userinfo[0]["mail"][0];
    }else{
        return false;
    }
 
}

3.7. SAML Debugging

** These notes are for self-hosted customers only. HelpSpot Cloud customers will need to contact support **

If you become locked out of your SAML authenticated HelpSpot server you can enable a debugging mode to use local accounts to login and change SAML settings.

  1. Edit the .env file located in your HelpSpot directory
  2. Change APP_DEBUG=true and save the file
  3. In your browser navigate to https://myhelpspotsite.com/altlogin
  4. You will then be presented with a local authentication form to temporarily authenticate to the admin area

3.8. SAML User Login Redirects to Portal Instead of Admin Workspace

When SAML authentication is enabled HelpSpot will search the "Black Box/LDAP/AD/SAML Username" field of the staff profiles to find a matching profile. If no matching profile is found, the user will be redirected back to the customer portal.

To correct this issue follow these steps:

  1. Navigate to Admin > Staff  and select the staff member.
  2. Update or add the correct "Black Box/LDAP/AD/SAML Username" value to that account. In most cases this will be the users email address.

4. System Administration

4.1. HelpSpot Command Line Tool

Commands Available

HelpSpot 5 has some new commands available, along with most commands from HelpSpot 4.

HelpSpot includes an hs command that can be used to run or automate certain tasks.

Linux:

The hs command installed with HelpSpot is the command line utility. On Linux servers, you can run it using PHP:

# List the available commands and options:
php hs

Windows:

On Windows, you need to run the hs command using the PHP that comes with HelpSpot using Cmd or PowerShell, and let it know which configuration file to use:

C:\'Program Files (x86)'\helpspot\php\php.exe -c C:\'Program Files (x86)'\helpspot\php\php.ini C:\'Program Files (x86)'\helpspot\helpspot\hs

It might be easier to first "change directory" into the HelpSpot directory so these file paths are shorter:

cd C:\'Program Files (x86)'\helpspot\helpspot
..\php\php.exe -c ..\php\php.ini .\hs

For both Linux and Windows, running hs without any parameters will simply list out the available commands.

Command Details

Each command has a list of options you can pass to it. To see the details of available flags, use the -h flag:

php hs install -h
Description:
  Install HelpSpot.

Usage:
  install [options]

Options:
      --agree                                    Agree to HelpSpots License Terms
      --name[=NAME]                              Full Name (first name last name)
      --admin-email[=ADMIN-EMAIL]                Admin User Email Address
...and so on

Available Commands

Here are the commands available for HelpSpot:

  • install
  • update
  • attachments:tofile
  • automation:rules
  • cache:clear
  • config:convert
  • mail:check
  • portal:migrate
  • request:delete
  • request:delete-spam
  • request:delete-trash
  • report:logs

install

This will guide you through installing HelpSpot. For installing without prompts, you can use the available flags to provide the needed details.

# Interactive
php hs install


# Or prefill some or all options
php hs install --agree --name="Jane Doe" --admin-email="jane@example.com" --password="secret" ...and so on

update

To update between HelpSpot 5 versions (e.g. 5.1.0 to 5.2.0), use the update command.

# Update with prompt
php hs update

# Update with no prompt
php hs update --yes

The update command is safe to run multiple times (don't worry about accidentally running it).

attachments:tofile

This command will allow you to save your file attachments from the database (the default location prior to HelpSpot version 4) to your server file system.

This command will delete file data from your database as it saves it to the disk. We highly suggest backing up your database before running this command.

# Prompted for attachment file path to use
php hs attachments:tofile

# Or provide the file attachment path:
php hs attachments:tofile --path=storage/documents

automation:rules

You can run all Automation Rules, or specific Automation Rules by their ID. Their ID is found within HelpSpot when viewing the list of Automation Rules.

# Run all automation rules
# Except those marked to run on a Custom Schedule
php hs automation:rules

# Run automation rule 1
# regardless of Custom Schedule setting
php hs automation:rules --id=1

# Run automation rule 1 and 2
# regardless of Custom Schedule setting
php hs automation:rules --id=1,2

cache:clear

HelpSpot uses some caching to save certain settings, configuration, and data to reduce database load. To clear the cache, you can run the following command:

php hs cache:clear

config:convert

When updating from HelpSpot 4 to HelpSpot 5, the config.php file can be converted to a .env file using this command:

# Assumes config.php file is present

# Create a .env file from config.php file values
php hs config:convert

# Print the contents of the converted configuration
# but do not create the .env file
php hs config:convert --dump

mail:check

HelpSpot runs this command periodically via it's CRON task (Linux) or Scheduled Tasks (Windows).

This command fires off a queue job, which in turns checks configured/enabled mailboxes for new email.

You can check all Mailboxes, or specific Mailboxes by their ID. Their ID is found within HelpSpot when viewing the list of Email Mailboxes.

# Check all configured/enabled mailboxes
php hs mail:check

# Check mailbox id 1
php hs mail:check --id=1

# Check mailbox id 1 and 2
php hs mail:check --id=1,2

portal:migrate

This command will help move existing portals from the old HelpSpot 4 location to one appropriate for HelpSpot 5.

# Move portals, if it can
php hs portal:migrate

# Report on what changes the command would make
# but don't make the changes
php hs portal:migrate --dry-run

request:delete (-spam,-trash)

You can delete one specific request (and it's related data) by its ID:

# Delete request 1234
php hs request:delete --id=1234

You can delete all Spam as well, without using those requests to train the spam filter:

# Delete all spam, with prompt
php hs request:delete-spam

# Delete without prompting
php hs requets:delete-spam --force

And you can delete requests in the Trash:

# No prompt, deletes trash.
# Does use the Trash Delete Delay setting
php hs request:delete-trash

Report: Logs

The report:logs command will export a CSV file of your helpspot request event logs to your data/documents/ directory.

php hs report:logs
 

4.2. How to Backup HelpSpot

HelpSpot stores all it's data in the database, this makes backing up HelpSpot very easy. To have a complete backup of all your data simply backup the database using standard database backup procedures. These will vary depending on which database system you use, though it's likely your system administrators are already doing it or can have it done easily.

Systems Using an Alternate Attachment Storage Location

For systems that handle many email attachments HelpSpot has a setting (Admin->Settings->System->Attachment Storage Location) to allow attachments to be stored on the servers disks rather than in the database. This is more efficient and makes backup of the database much easier because the size of the database is much smaller.

If your installation uses this feature you'll also need to backup the attachments which are on disk in order to have a complete backup.

HelpSpot Files

It's optional to backup the HelpSpot files themselves. You can always re-download them if you need to, but if you do want to backup the files be sure to do so in a binary safe manner as all the .PHP files in HelpSpot are binary.

Even if you don't backup all the files you may want to keep a backup of config.php which stores the database connection settings as a convenience in case a recovery is needed. This file is in the root HelpSpot folder.

Restoring

To restore your HelpSpot installation follow your databases standard restoration procedure. Restore the HelpSpot files (if necessary), replace config.php or rebuild it (if necessary) and your installation should be up and running.

Some database specific backup resources:

 

4.3. How to Move HelpSpot

How you move a HelpSpot installation is dependent upon how it was initially installed. The instructions differ based on if the installation was first installed manually or via the Windows Installer. Instructions for moving both types of installation methods are provided below.

Moving a Manually Installed Installation

Moving a manual installation is much like doing a backup. These instructions presume you've already setup a proper environment on the new server, PHP, database, web server, etc.

  • Put the old system in maintenance mode (Admin->System Overview) to prevent any requests being created in there via email or portal form.
  • Backup the database: How to Backup HelpSpot
  • Restore the database on the new server (this presumes you're moving the database. If the database is not moving then skip this)
  • Copy the HelpSpot files to the new server, be sure to move in a binary safe manner
  • On the new server edit .env in the root HelpSpot folder to be sure it includes the proper database connection information and correct APP_URL for the new location
  • On the new server setup the queue worker and cron jobs.
Your new installation should now be available. Check that the system is running correctly and you can take the old system offline.

Moving a Windows Installer Installation

The easiest way to move an installation done via the Windows Installer is to use the installer again to re-install on the new server and then move the database.

  • Run the Windows Installer on the new server, allow it to create a new empty database in SQL Server or MySQL. No need to run installer.php when it pops up.
  • Place your old server into maintenance mode.
  • Backup your old servers database
  • Restore your database, overwriting the new one the installer just created
Your new installation should now be working. Be sure to uninstall your old installation or at least turn off the scheduled tasks so that no emails are imported into the old installation.

Other Considerations

Attachments Saved to Disk - If you've configured HelpSpot to save attachments to the file system (Admin->Settings->System->Attachment Storage Location), then you'll need to move those files as well and update the file path to them in the new servers settings.

Upgrading While Moving - If on the new server you're using a newer version of HelpSpot files than the old server was running then after the move you'll need to run installer.php to upgrade the HelpSpot database. This can only be done inside of major versions. You must use the documented upgrade process to move from v3 to v4 or v4 to v5.

4.4. Moving HelpSpot 5 Windows Installations

To move a windows installation from one server to another, first take an assessment of your current system environment.

  • Database Platform: MySQL or SQL Server? - You can determine this by opening the .env file in your current environment and noting the DB_CONNECTION value
  • Database Location: Application server or external? - You can determine this by opening the .env file in your current environment and noting the DB_HOST value. If the value is "localhost" or "127.0.0.1" then the database is co-located with the application server. If you have a connection to an external IP or DNS then the db is most likely external and won't need to be moved along with the application server.
  • Web Server: Apache or IIS? - Determine if you are using IIS or Apache to host your helpspot instance. You may want to open the "IIS Manager" tool in windows to look for a helpspot site and check your helpspot install location to see if Apache has been installed.

Install HelpSpot on Your New Server

  1. Follow the standard windows installation instructions as if you were installing a new server: https://support.helpspot.com/index.php?pg=kb.page&id=648. You can install the latest version of HelpSpot 5 even if your current installation is on an older version of HelpSpot 5. The moving process will also update your instance.
  2. This guide will direct you to install HelpSpot using IIS and Microsoft SQL Server. If you determined above that you are using MySQL, you will need to modify your installation .env to connect to your mysql server. You will also need to enable the mysql extensions in your php.ini file.
  3. It can be good to just login and make sure that you new server is all configured and functional before starting to move your data.

Migrate The Database

  1. Place your old server in maintenance mode. This will prevent the old server from performing database changes during migration.
  2. If you determined that your database location is on the Application server you will need to make a backup of that database and import it into your new database server. Standard MySQL or SQL Server backup and restore tools can be used. This article include links for database backup tool instructions (specific links at bottom): https://support.helpspot.com/index.php?pg=kb.page&id=315
  3. Update the connection information in the .env file on you new server to connect to your migrated database. If your database server location is external your can simply update the connection information in the new server's env file with the parameters from your old server's .env.

Copy The Application Key

  1. Copy the APP_KEY setting located .env file on you old server to your new server. This is needed to decrypt values in the migrated database.

Copy Files

  1. Copy the files in these locations on your old installation to the corresponding location on your new installation. (Locations listed here are relative to the directory your .env file is located in):
    helpspot/storage/*
    helpspot/public/custom_code/*
    helpspot/public/custom_templates/*
    helpspot/helpspot/custom_pages
  2. If you have created a custom language pack you will need to copy that language pack over.
  3. If you have created secondary portals, those portal directories will need to be copied over.

Update HelpSpot

  1. Open a command prompt on your new server and cd to your helpspot directory: cd c:\inetpub\wwwroot\helpspot
  2. Run the helpspot update command: C:\php\php.exe hs update

This will move your HelpSpot installation. You may need to make DNS and webserver binding and certificate changes to direct users to the new location.

4.5. Removing virtual directory in HelpSpot on IIS

By default, HelpSpot will install as a virtual directory in IIS. This means that if you install it into your site example.com, HelpSpot will appear as a virtual directory "/helpspot", making it accessible at example.com/helpspot.

If you want to use HelpSpot in the root of a domain (perhaps support.helpspot.com), you can "move" HelpSpot out of the virtual directory and into a website in IIS.

4.6. Removing /helpspot directory in URL on Windows / Apache

This video tutorial walks through how to remove the /helpspot directory from the HelpSpot application path on a Windows / Apache installation.

4.7. Connecting To A Network File Share For Attachment Storage

HelpSpot installs based on IIS can be configured to store their attachments on a network file share allowing the file storage duties to be offloaded from the application server. IIS needs to be configured properly to allow it to write to network file systems.

  1. Open the IIS Manager
  2. Find your app pool for HelpSpot and open up the advanced settings
  3. Set the identity to a user that has access to the local helpspot install and to the network file share you plan on using

  4. Open up your website in the IIS manager and select the authentication options.
  5. Edit the anonymous authentication settings and select the application pool identity.
  6. Restart IIS
  7. Go your HelpSpot admin screen and click on settings
  8. Edit the attachment file system directory setting to point at the UNC path of your file store
  9. When you save the settings HelpSpot will verify that it can write to that directory
  10. Migrate your existing files to that new file store location.

4.8. Enabling SSL in Apache on Windows

SSL for HelpSpot can be enabled on windows based installations, but it does require some configuration. This document will not cover in detail how to create a CSR or obtain certs in the proper format for Apache as this varies based on the certificate provider. This document will assume that an Apache-compatible cert, certificate chain and key have been obtained. It is intended as a general guide and the exact set up for a specific installation may vary.

Editing the Apache configuration files

  1. Backup your C:\Program Files (x86)\helpspot\apache\conf\ directory.

  2. Place your certificate, certificate chain and key in the C:\Program Files (x86)\helpspot\apache\conf\directory.

  3. Navigate to C:\Program Files (x86)\helpspot\apache\conf\ and edit the httpd.conf file as follows. Uncomment (remove the #) these lines: 
    LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
     

    LoadModule ssl_module modules/mod_ssl.so
     

    Include conf/extra/httpd-ssl.conf

  4. Edit the C:\Program Files (x86)\helpspot\apache\conf\extra\httpd-ssl.conf In the most basic setup you will need to verify / edit these paths:
    SSLCertificateFile "${SRVROOT}/conf/cert.pem"


    SSLCertificateKeyFile "${SRVROOT}/conf/cert.key"
     

    Most certificate will also need a chain file. 

    SSLCertificateChainFile "${SRVROOT}/conf/server-ca.crt"

  5. Now restart your HelpSpot Apache service in the windows services area. If service does not start up, we recommend running C:\Program Files (x86)\helpspot\apache\bin\httpd.exe from the command line to obtain useful error output.

  6. Once you have a working configuration make sure to take a new backup of the  C:\Program Files (x86)\helpspot\apache\conf\  directory. This backup can be used to restore changes after a HelpSpot upgrade.

 

4.9. HelpSpot Limits

HelpSpot has several built in limits on record counts and various other operations to ensure good performance and prevent mis-configuration from negatively impacting the system operation. Some of these limits can be adjusted on self-hosted instances using configuration variables.

  • Max Note Size - Each note in a request is limited to 70,000 UTF8 characters.
  • Max Request History Records - Each request is limited to 1,500 request history items. When this limit is reached a notice will be displayed staff members alerting them to the issue. This limit is configurable via the cHD_MAX_REQUEST_HISTORY setting in the HS_Settings table.
  • Full Text Searches In Filters - Full text searches in filters are limited to 2000 results on MySQL and 5,000 results on SQL Server
  • Automation Rule Matches - Automation rule can be run on a individual request for a maximum of 50 times.  This limit is configurable via the cHD_MAX_AUTO_RUNS setting in the HS_Settings table.
  • Custom Field Creation - Creation of custom fields is theoretically limited on MySQL based installations by the maximum column count of the InnoDB storage engine.
  • Filter Date Limit - The Filter Within Previous (days) setting found in Admin > Settings limits the number of days back a filter searches for records. By default this is set to 365. You can change this setting in the settings area or you can add a date criteria to your filter to override the default limit.
  • Max Results to Display - The Max Results to Display setting found in Admin > Settings limits the maximum number of requests shown in filters and search results sets.

4.10. .env Configuration Options

The .env file on self hosted installations controls much of how HelpSpot runs at a global level. The standard settings are setup during installation but there are additional settings that can be configured if needed. All environment variables are entered into the .env file in this format: env_var_name="value"

  • SECURITY_FRAME_OPTIONS - Controls the x-frame-options http header.
    • Default: SAMEORIGIN.
    • Values: SAMEORIGIN, DENY, ""
  • CUSTOM_CSP - inserts custom CSP domains to be allowed in the admin area.
    • Default: null
    • Values: "yoururl.com"
  • FORCE_HTTPS - This setting is used when SSL is offloaded to a reverse proxy or load balencer and traffic between the proxy and the HelpSpot server if unencrypted. If SSL is provided by the HelpSpot web server only the APP_URL needs to be changed to reflect the https protocol. In most cases when enabling SSL on a web server the only change needed is to update the APP_URL.
    • Default: false
    • Values: true, false
  •  DISABLE_CSRF - Disable CSRF protection to certain routes, comma separated list of routes.
    • Default: null
    • example .env setting: DISABLE_CSRF_FOR="https://example.org/my-route,https://example.org/index.php?pg=login"\
  • MAIL_CRON_INTERVAL - Set custom timing for how often email mailboxes are checked for mai
    • Default: * * * * *
    • Values: Valid CRON format schedule.
  • MAINTENANCE_CRON_INTERVAL - Set custom timing when daily db maintenance tasks are run.
    • Default: 0 0 * * *
    • Values: Valid CRON format schedule.
  • AUTO_COLLECT_MAIL - Enable (default) or Disable mail collection
    • Default: true
    • Values: true, false
  • SEND_MAIL_DELAY - Add a delay between mail sends to help with services that throttle sends over time
    • Default: 1
    • Values: Time in seconds
  • SEND_MAIL_BACKOFF - The number of seconds to wait before re-trying an email that failed to send
    • Default: 30
    • Values: Time in seconds
  • SEND_MAIL_RETRIES - The maximum number of times HelpSpot will attempt to resend an email.
    • Default: 5
    • Values: An integer of reties
  • MAINTENANCE_MODE - Put HelpSpot into maintenance mode
    • Default: false
    • Values: true, false
  • SECURITY_CONTENT_TYPE_OPTIONS - Sets the X-Content-Type-Options
    • Default: nosniff
    • Values: nosniff or empty

5. Customizing HelpSpot

5.1. Templates: The Basics

The HelpSpot portal is fully customizable to allow integration with any website or intranet.

PHP and HTML

HelpSpot templates are HTML with PHP, not an esoteric template language. This means PHP can be used within the templates themselves to call user-defined functions, includes, an other PHP constructs. This can make customizing an installation easier to allow the inclusion of templates from a main site, thereby preventing the duplication of code.

Editing Templates

The easiest way to edit the portal templates is by navigating to Admin > Customize > Portal Templates. Here you can view and edit the templates for your primary portal and any secondary portals. HelpSpot automatically versions your changes and allows you to roll them back if needed.

If you with to edit the files on the server directly, templates are located in the folder: /helpspot/templates. While it's possible to modify the files there directly it is not recommended. Instead it is recommended that the files be copied and placed in: /custom_templates. HelpSpot's template system will automatically check the /custom_templates folder and use the template from there instead of from /helpspot/templates. Using a custom templates folder prevents customizations from being overwritten during future version upgrades.

Common Files to Modify

These files are included on each page of the portal. For a basic level of integration (ie: standardizing 'look and feel), modifying only these files, in most cases, would be enough.

  • header.tpl.php
  • footer.tpl.php
  • navigation.tpl.php
  • css.tpl.php

List of All Templates

Each template contains specific documentation inside it, so please see the templates themselves for more details

Template Description
captcha.tpl.php HTML elements for the CAPTCHA system
css.blue.tpl.php (Blue) CSS styles used in the portal
css.clean.tpl.php (Clean) CSS styles used in the portal
css.grey.tpl.php (Grey) CSS styles used in the portal
css.tpl.php (Classic) CSS styles used in the portal
footer.tpl.php HTML footer used across all portal pages
header.tpl.php The HTML header is stored in this file as well as the 'container' DIV that holds all other page elements. Often just adding your organizations standard header to this file is enough to provide a consistent feel across the sites.
home.tpl.php The portals homepage
ie.css.blue.tpl.php (Blue) Special IE specific CSS styles used in the portal
ie.css.clean.tpl.php (Clean) Special IE specific CSS styles used in the portal
ie.css.grey.tpl.php (Grey) Special IE specific CSS styles used in the portal
ie.css.tpl.php (Classic) Special IE specific CSS styles used in the portal
index.tpl.php A special page that includes the correct template. All pages pass through the index template.
js.tpl.php Javascript required for the portal
kb.book.tpl.php Books table of contents page
kb.chapter.tpl.php Chapter with list of chapter pages
kb.page.tpl.php Knowledge book page
kb.printer.friendly.tpl.php All a knowledge books pages on one page for easy printing.
kb.tpl.php List of available knowledge books
login.create.tpl.php Customer account creation page
login.forgot.tpl.php Customer forgot password page
login.reset.tpl.php Customer reset password page
loginbar.tpl.php The menu bar at the top of the request check pages when a user is logged in.
maintenance.tpl.php A page which is shown to visitors when the system is in maintenance mode
navigation.tpl.php HTML for side bar navigation used across all portal pages
request.check.tpl.php Page where customers check their requests
request.history.tpl.php List of requests visitors see when logged into the portal
request.tpl.php Submit a request form
search.tpl.php Search results page
searchbox.tpl.php HTML for search box used across all portal pages
tag.search.tpl.php List of pages/topics matching a knowledge tag
terms.tpl.php HTML Elements for agreeing to the terms and privacy policy.

5.2. Admin Themes

AS OF HELPSPOT 5.0 ADMIN THEMES ARE NO LONGER USED

Admin themes have been replaced with custom javascript and css settings.

Admin themes allow you to customize the look and feel of your staff pages in HelpSpot. A few simple uses include:

  • Changing the header to your company colors
  • Adjusting text sizes more to your liking
  • Adding or removing UI elements

Theme Structure

HelpSpot ships with several built in themes. The code for these /themes/ with a subfolder for each specific theme. So the blue theme is in /themes/blue/. Inside the folder is the css for that theme and optionally an image folder and custom javascript file. So a theme folder with everything would look like this:

Creating a Custom Theme

It's often useful to start with one of the built in themes as those contain the most common elements you want to modify. To do so simply copy one of the folders like /themes/blue to your own folder such as /themes/pink. In this case you'd then change blue.css to pink.css and you're all set. From there you can modify pink.css to match your design.

You can find all the built in CSS elements in /static_#HelpSpot_Version#/css/base.css and any of those styles can be overridden by your custom CSS.

Using Custom Javascript

If you'd like to add your own javascript logic to HelpSpot you can do so by adding a theme_name.js file to your theme folder, such as /themes/pink/pink.js. HelpSpot will automatically include that file in the head of every page. jQuery is currently also available, however, it uses a custom shorthand of $jq instead of the more familiar $. Of course jQuery() can be used as well. For most things you'll also probably want to wait for the page to load using:

$jq(document).ready(function(){
     //Your jQuery here
});

5.3. Portal Privacy Policy and Terms of Service

The HelpSpot portal allows for the display and agreement to a Privacy Policy and Terms of Service before a customer request can be submitted. These settings are found in Admin > Settings > Portal. These two settings allow you to set a URL for where your Privacy Policy and Terms of Service are hosted. If you don’t have these externally hosted you can create them as KB pages and then link to them.

After adding one or both of these URLs a checkbox will be displayed on your portal forms asking your customers to agree to the terms and privacy policy before proceeding. 



If you are using a customized request.tpl.php template from a version of HelpSpot prior to 4.8.0, you will need to update that template in order to allow the checkbox to be properly displayed. This new code needs to be added immediately following the captcha include:


<?php include $this->loadTemplate('terms.tpl.php'); ?>



5.4. Language Files - Modifying Language Packs

Every word and phrase used in HelpSpot is stored in a language file located in:

/helpspot/lang/english-us/

Customizing your language pack may be necessary if HelpSpot doesn't come with your desired language or if you would like to make changes to the default phrases in HelpSpot

Prevent Overwriting During Updates

If you directly modify a HelpSpot language pack your changes will be lost during the next update because the file will be overwritten. To protect your changes follow these steps.

  1. Duplicate the original language pack and give it a new unique name. For example copy /english-us/ to /english-mycompany/
  2. Next go to Admin->Settings and change the "Language:" options to your newly created language pack
  3. That's it. You may now safely modify your custom language pack.

5.5. Populating Customer Information via Links

Creating links to the admin

Some customers find it convenient to add an HTML link to their other customer data systems, which allows them to open a new HelpSpot request. The URL you should use for this is below:

http://your-helpspot-url/admin.php?pg=request

In addition, it's possible to pass in customer information so that the customer information form fields will be pre-filled in. You may pass in the following fields via the URL.

URL Variable Description
sUserId Unique customer ID
sEmail Email address
sFirstName First name
sLastName Last name
sPhone Phone number
tBody The text for the note field
xCategory Put the ID of the category to be selected
xStatus Put the ID of the status to be selected

An example:

http://your-helpspot-url/admin.php?pg=request&sUserId=12345&sEmail=tsmith@company.com&sFirstName=Tim&sLastName=Smith&sPhone=8451234567

Creating links to the portal

The portal's request form may also be populated with data via links. In addition to the above variables that can be passed in, the following are valid for the portal form.

URL Variable Description
fullname A persons full name: "Todd Smith"
sEmail An email address
simple The textarea when using the simple format for the form (the default format)
Custom# A custom field value where # is
fUrgent Set urgency. 1 for urgent, 0 for not.
additional Populates a hidden field that will be submitted with the request and appended to note.

An example:

http://your-helpspot-url/index.php?pg=request&fullname=todd%20jones

5.6. Category Management

Categories are the primary way of grouping requests inside of HelpSpot. When HelpSpot is installed it will come with pre-populated categories to get you started. Using these categories is completely optional. 

To customize the categories available in your helpspot instance navigate to Admin > Categories.

Adding a New Category

Use the add category form to add a new category to HelpSpot.

Settings in Depth:

Category Name: The name of the category that will appear in the user interface of helpspot.

Category Grouping: Sets of categories can be grouped together for easier navigation. 

Visibility: This setting will control whether a category is available on public request forms. Allowing request categorization also needs to be enabled at the portal level.

Category Staff Member: The option allows you to select staff members who are available for work requests in this category. This setting works in conjunction with the Auto Assign Requests setting to define the pool of staff used for auto assignment rules.

Default Staff Contact: This setting defines the default staff member that will be assigned requests in this category. It can be left blank. 

Auto Assign Requests: This dropdown allows an auto assignment rule to be defined for a category. The options are as follows:

  • To Default Contact - Automatically assigned requests to the Default Staff Contact
  • Random Category Staffer - This will randomly select a staff member from the Category Staff Member's pool.
  • Random Category Staffer (No Administrators) - This will randomly select a staff member from the Category Staff Member's pool, but staff that are administrators will be excluded.
  • Category Staffer With The Least Requests - This will assign requests to the category staff member with the least number of open requests in Helpspot.
  • Category Staffer With The Least Requests (No Administrators) - This will assign requests to the category staff member with the least number of open requests in Helpspot, but staff that are administrators will be excluded.
  • Round Robin (Even Distribution) - Category staff members will be rotated through in order (i.e. staff 1 - receives request 1, staff 2 - receives request 2, staff 3 - receives request 3, staff 1 - receives  request 4 and so on.)
  • Round Robin (Even Distribution, No Administrators) - The same round robin methodology as the previous setting, but excluding administrators.

Reporting Tags: Report tags provide another level of organization beyond categories themselves. Reporting tags are unique in that more than one reporting tag can be selected at a time. 

Custom Fields: Custom fields for a specific category can be specified here. Custom fields that are checked will be included in the side bar of the request window. If the category and custom fields are marked as public they will also be visible on the customer portal form. 

Editing Categories

Each category can be edited by clicking on the category name in the categories listing. All of the settings available when creating a new category are also available when editing.

Deleting Categories 

Categories can not be deleted, but they can be made inactive. To make a category inactive, edit the category and then click on the "Make Category Inactive" button in the lower right hand corner. Once a category is made inactive, it can be accessed by clicking on the "Show Inactive Categories" button in the main categories setting page. Inactive categories can be reactivated by editing the category and then clicking on the "Restore" button.

5.7. Time Tracking

To enable time tracking go to Admin->Settings and click the Time Tracking bar. Set enabled to Yes and save the settings. Each request (after it's created) will now have a time tracking bar at the top for managing that requests time.

Other Time Tracking Tips

  • Time can be entered in normal time format hh:mm or in decimal form 1.5, 4.25
  • You can add a time column to your custom filters to see how much time was spent on each request right from the workspace.
  • After enabling time tracking 2 new reports will be available under the reports tab which allow for time reporting by customer and staff.
  • There is a preference in each users settings to default the time tracker box to open.

5.8. Formatted Text Syntax (Markdown)

HelpSpot uses the text formatting language Markdown to support building HTML documents from text.

Markdown also accepts HTML, so you can intermingle HTML tags with the Markdown syntax.

Phrase Emphasis

*italic*   **bold**
_italic_   __bold__

Links

Inline:

An [example](http://url.com/ "Title")

Reference-style labels (titles are optional):

An [example][id]. Then, anywhere
else in the doc, define the link:

[id]: http://example.com/  "Title"

Images

Inline (titles are optional):

![alt text](/path/img.jpg "Title")

Reference-style:

![alt text][id]

[id]: /url/to/img.jpg "Title"

Headers

Setext-style:

Header 1
========
Header 2
--------

atx-style (closing #'s are optional):

# Header 1 #
## Header 2 ##
###### Header 6

Lists

Ordered, without paragraphs:

1.  Foo
2.  Bar

Unordered, with paragraphs:

*   A list item.
    With multiple paragraphs.
*   Bar

You can nest them:

*   Bus
  * Yellow
*   Cars
  1.  Dodge
  2.  Honda
    * Civic
  3. Trucks
*   Cunning

Manual Line Breaks

End a line with two or more spaces:

Roses are red,
Violets are blue.

Tables

A simple table

First Header  | Second Header
------------- | -------------
Content Cell  | Content Cell
Content Cell  | Content Cell

A table with the right columned aligned (note the : at the end of the header line)

| Item      | Value |
| --------- | -----:|
| Computer  | $1600 |
| Phone     |   $12 |
| Pipe      |    $1 |

Formatting can be used within the table

First Header  | Second Header
------------- | -------------
Content Cell  | **Content Cell**
*Content Cell*  | Content Cell

Blockquotes

> Email-style angle brackets
> are used for blockquotes.
> > And, they can be nested.
> #### Headers in blockquotes
> 
> * You can quote a list.
> * Etc.

Code Spans

`<code>` spans are delimited
by backticks.
You can include literal backticks
like `` `this` ``.

Preformatted Code Blocks

Indent every line of a code block by at least 4 spaces or 1 tab.

This is a normal paragraph.
  This is a preformatted
  code block.

Horizontal Rules

Three or more dashes or asterisks:

---

* * *

- - - -

5.9. Widget Tab Setup

The widget tab allows you to gather questions/feedback from any page on your website or even multiple websites. With just a few lines of javascript the tab can be included on any web page.

The widget is completely configurable for seamless integration with your website, even the image used for the tab itself can be changed.

Basic Setup:

<style type="text/css">@import url('http://www.YOURDOMAIN.com/helpdesk/widgets/widgets.css');</style>
<script type="text/javascript" src="http://www.YOURDOMAIN.com/helpdesk/widgets/widgets.js"></script>
<script type="text/javascript">
HelpSpotWidget.Tab.show({ 
	// Nearly every aspect of the widget is customizable, complete documentation here:
	// http://www.helpspot.com/helpdesk/index.php?pg=kb.page&id=323
	host: 'http://www.YOURDOMAIN.com/helpdesk'
});
</script>

Where to Place the Code:

The inclusion code should be placed on every page where you want the tab to appear. For performance it's best to place the code at the bottom of your HTML page just inside the closing </body> tag.

Complete Example:

This example shows every configuration option in use.

<style type="text/css">@import url('http://www.YOURDOMAIN.com/helpdesk/widgets/widgets.css');</style>
<script type="text/javascript" src="http://www.YOURDOMAIN.com/helpdesk/widgets/widgets.js"></script>
<script type="text/javascript">
HelpSpotWidget.Tab.show({ 
	host: 'http://www.YOURDOMAIN.com/helpdesk',
	alignment: 'left',
	tabtype: 'questions',
	tabtype_custom_img: '',
	top: '30%',
	width: 600, 
	color: 'white',
	background_color: '#222222',
	hover_color: '#222222',
	popup_background_color: '#fff',
	popup_border_color: '#ccc',
	popup_border_size: '10px',
	overlay_color: '#000',
	default_note: '',
	default_name: '',
	default_email: '',
	use_field_name: true,
	text_header: 'How can we help?',
	text_intro: 'Submit your question/comment for a member of our team.',
	text_note: 'Question',
	text_note_er: 'Please provide some information on your request',
	text_email: 'Your Email',
	text_email_er: 'Please provide your email address',
	text_name: 'Your Name',
	text_name_er: 'Please provide your name',
	text_submit: 'Submit',
	text_msg_submit: 'Message sent, thank you.',
	text_msg_submit_error: 'Sorry, there was an error.',
	text_msg_submit_error_link: 'Please try this form',
	text_msg_submit_error_url: 'http://www.YOURDOMAIN.com/helpdesk',
	text_loading: 'Loading...',
	text_special: ''
	//,onLoad: function(){ alert('open'); },
	//onClose: function(){ alert('close'); }
});
</script>

CSS Customizations:

The options above allow you to control the look of the tab, but the form itself can be customized via CSS. To do so put a file named widget_tab.css inside your /custom_code folder. If the system detects this file it will include it on the tabs form page automatically.

Option Descriptions:

host The root URL of your HelpSpot installation
alignment The tab can be aligned left or right on the page
tabtype Image that's shown in the tab. Options are: questions, contact, support, feedback, help
tabtype_custom_img Full URL to an image to use for the tab other than one of the defaults
top % or PX for how far from the top of the screen the tab should be positioned
width How wide the popup window will be
color Color of the tab image to use: white or black
background_color Background color of the tab
hover_color Color used when the tab is hovered over
popup_background_color Color for the background of the popup box
popup_border_color: Color used in the popup box border
popup_border_size Thickness of the popup border
overlay_color Color of the background overlay behind the popup
default_note Text to be inserted in the note field by default
default_name Text to be inserted in the name field by default (if being used)
default_email Text to be inserted in the email field by default
use_field_name Show the name field to be filled in by the visitor (true/false), defaults to false
text_header Large text shown at top of popup
text_intro Subheading text
text_note Label for the note field
text_note_er Error text when the note field is not filled in
text_email Label for the email field
text_email_er Error text when the email field is not filled in
text_name Label for the name field
text_name_er Error text when the name field is not filled in
text_submit Submit button text
text_msg_submit Shown when a request is successfully submitted
text_msg_submit_error Shown if there is an error sending in the request
text_msg_submit_error_link When there is an error a link is provided to a secondary form to try (if an error link URL is set)
text_msg_submit_error_url URL to link to if an error occurs when submitting the request from the tab
text_loading Text to use while the widget loads
text_special Text that sits below the text_intro which has a special style applied. Good for unique notes or temporary messages.
onLoad A javascript function that will executed when the popup box opens
onClose A javascript function that will be executed after the popup closes

5.10. Email Templates

Customizing Email Templates

The default email templates can be customized by navigating to Admin > Customize > Email Templates. Each template can be both edited and viewed from this page. Once edits have been made, be sure to save them with the save button at the bottom of the page. Email templates can be formatted with html and can include template tags. These can be selected from the dropdown or typed into the editor.

Most templates contain three separate tabs, HTML, Text, and Subject. The HTML template will send for those that can receive HTML emails. The text version is a plain text version of the same email for those that do not accept HTML email. When editing make sure to update both of these tabs. The subject tab allows you to adjust the subject line of the email. You can also use template tags in this area to personalize the subject line.

Per Mailbox Templates

Email templates can also be specified at the Mailbox level for Auto Reply, Public Notes to Customer, External Notes and Requests Created by Portal Form. These settings can be found in Admin > Email Mailboxes. Once a mailbox is selected the templates can be edited at the bottom of the mailbox's setup page.

When defined, these templates will override the default templates that are set up in the Email Templates page. The "Request Created by Portal Form" template will only override the main template only if the mailbox is defined as the "Send Emails From" mailbox for a secondary portal. 

5.11. Email Template Tags Reference

Email templates can process a variety of template tags. These tags can be typed directly into the template or they can be selected from the tag selector dropdown below the template editor box. Below is a reference to all the available tags. See the Email Templates document for more information on how to edit email templates. The tags below are available for the current version of HelpSpot. Note that HelpSpot versions less than 5.0.0 use a different syntax.

{{ $requestcheckurl }} The URL to check the request.
{{ $accesskey }} Access key. This is the key that is used by a customer to access tickets in the portal. 
{{ $message }} The note body of the current note.
{{ $fullpublichistoryex }} Outputs the full public history of notes not including the current note.
{{ $fullpublichistory }} Outputs the full public history of notes including the current note.
{{ $lastcustomernote }} Outputs the last note by the customer.
{{ $requestid }} The Request ID generated by HelpSpot for this request.
{{ $replyabove }} This outputs the "Reply Above" Text that is defined in the Replay Above template.
{{ $portal_email }} The email address the customer can use to login to the portal to view their request.
{{ $portal_password }} The password the customer can use to login to the portal to view their request.
{{ $customerfirst }} Customer first name
{{ $customerlast }} Customer last name
{{ $customerid }} Customer ID
{{ $customeremail }} Customer email
{{ $customerphone }} Customer phone
{{ $status }} The current status of the request.
{{ $category }} The category assigned to the request.
{{ $urgent }} Returns if the request is marked as urgent.
{{ $open_closed }} Returns if the ticket is currently open or closed.
{{ $date_opened }} Date Opened
{{ $date_now }} The current date/time
{{ $assigned_first }} Assigned staff member: first name
{{ $assigned_last }} Assigned staff member: last name
{{ $assigned_email }} Assigned staff member: email
{{ $assigned_phone }} Assigned staff member: phone
{{ $logged_in_first }} Logged in staff member: first name
{{ $logged_in_last }} Logged in staff member: last name
{{ $logged_in_email }} Logged in staff member: email
{{ $logged_in_phone }} Logged in staff member: phone
{{ $subject }} Original mail subject line
{{ $initialrequest }} This returns the initial (first) request note.
{{ $orgname }} The organization name for the helpspot instance as defined in the Admin area.
{{ $helpdeskurl }} Help Desk URL
{{ $requestformurl }} Request Form URL
{{ $requestcheckurl }} Request Check URL
{{ $knowledgebookurl }} Knowledge Book URL
{{ $custom1 }} Each custom field can be referenced by it's ID in the format "{{ $CustomID }}" where ID is the actual ID number.
@if ($customerid == 12938)
    Company A
@elseif ($customerid == 12938)
    Company B
@else
    Unknown Company
@endif
Conditional statements can be structured as demonstrated to the left. You may construct if statements using the @if, @elseif, @else, and @endif directives. 

5.12. Custom Pages

Custom pages allow you to add navigation/pages to HelpSpot's workspace. They're useful for adding content which is protected by HelpSpot's authentication. The uses are practically limitless, here's a few ideas:
  • A page simply listing links to other help desk resources elsewhere for staff
  • A report from an external system
  • A redirect to an external system
  • A page for AJAX based tools

Naming and Location

Custom pages are located in the custom_pages directory in your HelpSpot application server. To access custom pages on HelpSpot Cloud please contact customer service. Sample page is provided in that directory.

Naming Convention

  • Letters, numbers, underscores and dashes only (no spaces)
  • Must end in .php
  • Navigation link will show underscores as spaces and capitalize the first letter of each word

LIMITS/ACCESS

Custom pages do not have access to HelpSpot's PHP functions, however, they can make use of jQuery and HelpSpot's CSS.


5.13. Filter Color Tags

Filter color tags allow easy visual sorting of requests. Color tags are set on the Predefined List custom field type. To add color tags, navigate to Admin → Custom Fields. Then select an existing predefined list or add an new one. Once you have the predefined list setup open you can set the color options for each list item. The color can be selected by clicking on the color code box.

Once the color options are selected in the custom field setup, you can add the custom field to filters using the column selector under the filter editor. 

After saving these changes, color labels will appear in the filter grid.

 

6. HelpSpot AI

6.1. Connecting OpenAI

HelpSpot AI utilizes the OpenAI API to complete AI tasks. In order to enable HelpSpot AI you will need to generate an API key.

To get started with OpenAI, you need to follow the below steps:

  1. Visit the OpenAI website and sign up for an account.
  2. Once you have signed up, navigate to the API section or get there by clicking your profile and selecting View API keys.
  3. If you need to create a new OpenAI API key, click Create new secret key.
  4. Now your new OpenAI API key will be created. Be sure to remember to save the OpenAI API key somewhere secure. You won’t be able to view it again if you forget it or misplace it.
  5. If you want to revoke your OpenAI API key, just click the trash can icon next to the API key you want to delete and click Revoke API to permanently disable it.

After you have generated your API key, it can be entered in Admin  > HelpSpot AI > AI Settings. This will enable HelpSpot AI; after enabling HelpSpot AI, you will also want to select you AI model and your translation language.

 

6.2. Writing AI Prompts

To create and manage AI prompts navigate to Admin > HelpSpot AI > AI Prompts.

Writing an AI Prompt

Every AI prompt needs a name. This name will be used in the user interface when staff invoke this prompt.

Each prompt contains a Role and a Action Prompt.

Role

The Role describes how the assistant is suppose to behave. Here are some examples:

  • You are a helpful customer support assistant that uses polite, informal language. You try to preserve html images and links.
  • You are a HTML list writer
  • You are a professional customer service representative who speaks fluent English & Spanish.

Action Prompt

The Action Prompt is the action that you want the assistant to perform. Try to be as exact as possible when describing what you want the assistant to do. Here are some examples:

  • The customers name is: {{ first.name }}. Rewrite as if you were responding to an customer.  
    ---
    {{ input.text }}
    ---
    Include a greeting. Add a closing asking them to follow up as needed and signing off with the name {{ staff.first.name }}. Don't add any new information that isn't in the original message.
  • Rewrite this as a list: {{ input.text }}
  • Translate {{ input.text }} from English into Spanish.

Here we are using placeholders to dynamically insert data into our Action Prompt. Placeholder can be typed into the prompt or they can be inserted from the placeholder selector. There are a number of placeholders available for use in prompt design.

Placeholder Description
{{ first.name }} First name of the customer. Can only be used in request prompts.
{{ last.name }} Last name of the customer. Can only be used in request prompts.
{{ staff.first.name }} First name of the acting staff member.
{{ staff.last.name }} Last name of the acting staff member. 
{{ input.text }} This is a selected text in the editor if the user has made a selection. Or if no selection has been made it is the whole text editor content.

6.3. Understanding Data Transfer to OpenAI When Using HelpSpot AI Functions

Your OpenAI Key and Data Transfer

In the interest of data privacy and security, HelpSpot utilizes your own OpenAI key for these AI functionalities. The data you send via HelpSpot's AI features is transferred directly to your own OpenAI account. This ensures that you have full control over your data and its security, as it's associated directly with your OpenAI account.

Action Prompts

Action prompts in HelpSpot allow users to invoke actions through intuitive, natural language instructions. When an action prompt is used, the data transferred to OpenAI is limited to the information specifically stated by the placeholders in the prompt.

Here are examples of some placeholders:

  • {{ first.name }} - Represents the first name of the customer. This can only be used in request prompts.
  • {{ staff.first.name }} - Stands for the first name of the acting staff member.
  • {{ input.text }} - This is a selected text in the editor if the user has made a selection. If no selection has been made, it represents the whole text editor content.

These placeholders define the specific pieces of information that are sent to OpenAI.

Summarize Request History Feature

HelpSpot's Summarize Request History feature is an advanced tool that uses AI to condense extensive request histories into a brief and coherent summary. In this case, the entire request history for the specific request is sent to OpenAI.

This is necessary to ensure the AI model has all the relevant information needed to generate a comprehensive and accurate summary.

Translate Request History Feature

The Translate Request History feature translates an individual request history item when requested. When this feature is used, only the specific request history item being translated is passed to OpenAI.

7. Automated Actions

7.1. Triggers, Mail Rules and Automations

There are three types of automated actions in HelpSpot that can be created. The main difference between them is when a request is checked to see if it matches the conditions defined by an automation rule.

Mail Rules

Mail Rules are run when an incoming email is read and a new request is created. This is only run when the request is first created - so it can only be applied once per request. Subsequent responses to a request, even if received through email, are not run against Mail Rules.

Triggers

Triggers are run anytime a request is created or updated. This can check if some conditions are present, or if they've changed. For example, an action can be taken if a category of a request was changed specifically from "technical" to "sales".

Automation Rules

The last category of automation rules is also called "Automation Rules". These are run periodically. How often these run is configurable in the automation settings.

Automation rules are useful for time-dependent tasks. For example, if you wish to escalate a request or send an email notification if a request has not been answered within a certain time period.

 

8. Automation Rules

8.1. Overview

Automation Rules (Admin->Triggers and Rules->Automation Rules) provide a means to preform actions on a set of requests that meet a specific set of conditions. With highly flexible rules-based logic, Administrators have the power to create rules that allow for improved management of support requests.

Automation rules are commonly used for:

  • Request escalation
  • Workflow creation
  • Staff/Management notification
  • Customer notification
  • Setting/changing request detail values

 

Designing Rules

With such flexibility, and varied uses, Automation Rules allows for tasks to be accomplished in a number of ways.

While there might not always be one set way to design a rule, the following should always be considered to ensure the rules accomplishes the desired end result.

  • Which conditions should be used to pull the appropriate requests?
  • What actions should be preformed?
  • How frequently should this rule run?
  • Should this request be allowed to run more than once per request?

Subsequent pages in this chapter well show the creation and running of automation rules as well as specific examples.

8.2. Rule Creation: Defining Conditions

Automation Rule conditions, just like Filter conditions, are based on individual elements of the request, Customer, or actions taken on a request. Administrators must define if the requests should match any or all conditions defined for the rule.

For each condition there is a means to define the value, via either a drop-down or text field. Each condition provides an additional drop-down for selecting the operator(s) to define how the specified value is applied.

Sample operators include:

  • greater than
  • less than
  • is not
  • is

Using category and email as a very simple example, it can be seen how Administrators would work through defining these conditions. Conditions are added and removed by using the plus and minus signs to the right of the condition definition.

A complete list of all conditions, defined, can be found in the attached file found at the bottom of this page.

Testing Conditions

Automation Rules require the defined conditions be tested prior to saving. Because the subsequent actions that are applied can make unreversible changes to requests, testing allows Administrators to verify the conditions defined truly meet the business need.

8.3. Rule Creation: Defining Actions

Once conditions are tested and defined, Administrators can move on to defining the subsequent action(s) to be preformed.

Actions can be divided into two types:

  • Actions that change information within the request.
  • Actions that notify specified individuals.

Important to remember: the actions defined in a rule will apply to all requests that meet the condition(s). Since some actions result in changes to the request, it's critical Administrators verify the conditions prior to making rules live.

Many times the 'change' and 'notify' actions must be used together within a rule to complete the automated process.

For example, a rule can have actions that notify two staffers and change a category; three individual actions working together to complete the automated process.

8.4. Preventing Reoccurring Matches

Special Note: As of HelpSpot v4.9.0 new automation rules will only run once per request by default. The actions below are only needed if the "Run Once" checkbox is deselected in an automation rule.

Beyond the creation of conditions and actions to define the rule, Administrators must also consider how to use conditions and actions to prevent the rule from continually pulling the same requests as matches.

Rule matches the same requests over and over when it shouldn't?!

This is a common question when first creating rules. To understand why this happens, let's quickly review how rules work.

When a rule runs (details on rule scheduling can be found via the links below) requests are identified, via conditions, and the defined actions are taken.

The next time the rule is run the same requests will be picked up and action taken unless an action is set that makes a change to the request. This change will be the indicator that the request(s) has already been processed.

In practical terms, when creating a rule Administrators need to ask themselves:

  • What component of the request do I have to change? (set applicable action)
  • Do I have a condition that will look for something outside of what I changed in action? (verify conditions)

Let's work through an example. To support internal procedures, a rule is created to notify Sally Smith (help desk supervisor) when a request hasn't been updated in 4 hours.

To ensure Sally isn't notified continually on the same requests, there needs to be an indicator in the rule that changes. In this example we choose status as the indicator.

So, when creating this rule we must:

  • have a condition that looks for those NOT in the Escalated status.
  • have an action that changes the status to Escalated. Depending on installation configuration, custom fields or category could also be used.

Below is a look at how the conditions and actions of this rule would be configured.


8.5. Custom Scheduling Automation Rules

automation:rules

You can run all Automation Rules, or specific Automation Rules by their ID. Their ID is found within HelpSpot when viewing the list of Automation Rules.

# Run all automation rules
# Except those marked to run on a Custom Schedule php 
hs automation:rules 

# Run automation rule 1 
# regardless of Custom Schedule setting 
php hs automation:rules --id=1 

# Run automation rule 1 and 2 
# regardless of Custom Schedule setting 
php hs automation:rules --id=1,2

8.6. Examples

Now let's look at how to create Automation Rules that support specific business needs. When reviewing these examples, keep in mind:

  • Different combinations of conditions/actions may be used; we attempted to use the most direct way of accomplishing each.
  • When considering how to apply to your business, conditions and/or actions may need to be added/taken away.

Escalation: No update to customer after 24 hours

Scenario: XYZ support desk has a policy that all requests falling in the Account Inquires category must be responded to within 24 hours. For those that aren't, the escalation should be a reassignment to Sally Smith and, to create transparency for the customer, an email is sent to the customer stating their inquiry is in process.
Here's how this need would be translated into an Automation Rule.
Important to Notice
  • To prevent the same requests from matching over and over we changed the assignment to Sally and have a condition that looks for requests not assigned to Sally.
  • In addition to update timeframe, we used category as one of the conditions for reassignment; keep in mind status, custom fields, etc. could have been used as well.
  • In our customer email we used the placeholder for the assigned staffers first name. Given the company wants to create transparency on the process for the customer, this was an appropriate addition. The choice to use the placeholder, over typing a name, simplifies the process if reassignment moves away from Sally and to another.

Notification: Request due tomorrow

Scenario: ABC support desk wants to notify staff (via SMS notification) of requests that are due tomorrow (a custom field). Due date is only tracked for those requiring off-site work, specifically hardware installation.

Here's how this need would be translated into an Automation Rule.
Important to Notice
  • Conditions depend on the existence of:
    • a custom field for completion date, and
    • category/reporting tag for Hardware, Installation.
  • Required Completion Date (custom field) set to tomorrow will prevent multiple notifications from being sent for the same request. This is assuming the rule is run at the default once per day.
  • Staff must have a mobile number in their preferences in order to be selected to receive a message.
  • While SMS was used in this example email notification is another notification option. Configuration is similar to as shown in the first example.

Email Results Set: Creating daily management reports

Scenario: Department managers in the company are expected to have an understanding of the types of issues the support desk is handling on behalf of the areas they manage. To facilitate this, the support manager wants to create a report that shows all each departments requests, opened in the past 24 hours. For ease this report should be emailed daily to each manager.

Here's how this need would be translated, for one of the departments, into an Automation Rule.

A sample results set, as it will be emailed to each manager, is shown below.
Important to Notice
  • Conditions are:
    • categories since it's related to each department in the company, and
    • relative date opened, so the manager can see all new requested worked in the past day.
  • The results set will be sent every day when the rule is run (using default, once per day).
  • Recipients must have a HelpSpot account.
  • A rule would have to be created for each manager in the company.

 

9. Secondary Portals

9.1. Secondary Portal Overview and Limitations

HelpSpot's secondary portal system provides the unique ability to create multiple portal instances, all of which feed into a single installation. Secondary portals are ideal for HelpSpot installations that need to support distinct website domains or require custom portals for different departments, groups or brands.

How it Works

All secondary portals are initially based on the primary portal (default, built-in portal), however can be customized to meet the needs of the target customers. As such, Administrators can choose to exclude/include:

  • Knowledge Books and Forums
  • Public Categories
  • Public Custom fields

Because each secondary portal has it's own set of templates, Administrators have full control over giving each their own look and feel.

Limitations

Given the current design of secondary portals, Administrators should be aware of the following limitations / considerations prior to implementing.

* Secondary portals currently all share logins with the primary portal. For departments this is likely fine. If you're using it across websites this may be an issue if you expect customers to use both websites. In that case you could disabling logins or use Black Box logins to enforce your own login logic.

* Secondary portals cannot show requests that were manually created by staff. Only requests created by the customer via email or the secondary portal can be shown to customers when logged in.

* All secondary portals must be on the same server as the main HelpSpot installation or at least available across a network drive. Secondary portals must be able to read files from the main HelpSpot installation.

* Several settings are currently not able to be overridden and default to what the primary portal is set for in Admin->Settings->Portals. Examples include which captcha to use and if the request form should use the simple or detailed format.

* The reCaptcha keys (for installations using reCaptcha) are shared across all portals so a global reCaptcha key must be used.

* Public components (knowledge books and forums) created for secondary portals will be shown on the primary portal. If this is not desired, a secondary portal must be created to override the default primary portal. Details on that process are here.

In the subsequent pages we'll look at the creation process, including file placement, and how to address special considerations.

 

9.2. Adding a Secondary Portal

There are two main steps to adding a Secondary Portal:

  1. Configuring the portal within HelpSpot
  2. Creating the Secondary Portal files as instructed from HelpSpot (If you are using HelpSpot Cloud please contact support)

Configuring a Secondary Portal

To configure a new Secondary Portal, head to Admin > Customize > Secondary Portal. There you can edit an existing or create a new Secondary Portal. For details on the configuration options available, see the section Explanation of Each Portal Setting.

Once you create a new Secondary Portal, you'll be provided with a set of instructions on setting up the portal.

Create the Secondary Portal files

HelpSpot will attempt to setup your portal files system and URL automatically (If you are using HelpSpot Cloud please contact support):

If HelpSpot is unable to automatically setup your portal, there is a View Instructions link available at the Admin > Customize > Secondary Portal page (the same page which lists existing Secondary Portal).

9.3. Explanation of Each Portal Setting

Administrators should go to Admin area->Tools->Manage Secondary Portals. It is from here the process begins. The following fields, described below, are the first phase of two phases in the creation process.

Remember: Because every secondary portal is based on the primary portal, settings not described here use the values in Admin->Settings->Portal.

Portal Name - This overrides the organization name that is used in the Primary portal. This name will be shown in the header of the secondary portal and is also used as a label when reference is made to this portal in the request history, workspace, filters, and reports.

Portal URL - The URL of the secondary portal. This may be an alternate domain or a subfolder of where HelpSpot is currently installed. For instance, if HelpSpot is installed at:

http://www.mydomain.com/helpdesk

and this secondary portal is going to support a different website at www.cookies.com then you would set this URL to be:

http://www.cookies.com/helpdesk

Note that there should be no trailing slash at the end of the URL.

File System Directory Path - The file path to the URL. This path need to be on the same server as the main HelpSpot installation or a network accessible path. This path is used to reach the /custom_templates folder for this secondary portal and include an override files in that folder.

Note that there should be no trailing slash at the end of the file path.

Categories to Display - This is a list of all the public categories created in Admin->Categories. Any categories checked will be available in the category drop down of the secondary portals submit a request form.

This allows flexibility in customizing the request form for this portal. For example, if this secondary portal is for another department only categories related to that department would be checked.

Checking no categories will prevent the category selection drop down from being visible on the request form for this portal.

Custom Fields to Display - This is a list of all public custom fields created in Admin->Tools->Custom Request Fields. Any custom fields checked will be available on the secondary portals submit a request form.

Note that they will still be restricted to whatever visibility has been specified for them so if the custom field only shows up for particular categories you'll want to make sure those categories are checked in "Categories to Display" as described above.

Knowledge Books to Display - A list of all public knowledge books. Selected books will be available on this secondary portal.

Forums to Display - A list of all public Forums. Selected forums will be available on this secondary portal.

Remember that all public categories, custom fields, books and forums are always visible on the primary portal (built in portal). If this is not desirable in your situation you should read this page on how to change that.

Send Emails From When an email is generated from this portal (ie: auto reply for when a request is created or User/Staff replies to requests) this is the mailbox that will show as the FROM. This is an important setting if you're supporting a secondary website where you want the email domain to match the portals domain.

Customer Log-in View - Mailboxes selected allow requests created via those mailboxes for a logged in portal visitor to be shown in the request history for that customer. So, logging into this secondary portal will allow customers to see all requests they created via the portal form as well as requests emailed in to any of the mailboxes selected in this setting.

Portal Phone - Show a phone number for this secondary portal in the portals left navigation.

Portal Homepage Message - Override the default portal message that's in Admin->Settings->Portal. This message appears on the portals homepage. It can include HTML.

The second phase of the creation process requires directories be created and files be moved to specified locations. Each step of the process is outlined on screen and should be followed to completion.

9.4. How Portal Templates Work in Secondary Portals

When a secondary portal is created a /custom_templates folder is created for the portal. Having it's own /custom_templates folder allows the secondary portal to be modified to match the look of an existing website or have a look of it's own.

The location and procedure for editing templates in a secondary portal is the same as the primary portal (information here), the only difference is that the edited templates should be placed in the secondary portals /custom_templates folder instead of the primary portals /custom_templates folder which is in the root HelpSpot directory.

Important to Remember: Secondary portal templates are stored in it's own /custom_templates folder. Any template changes for a secondary portal should be saved to this location.

9.5. The Primary Portal as a Secondary Portal

By default the primary portal shows every public category, custom field, knowledge book and forum created in the system. In most installations this is the desired behavior, however, in some installations (typically those using secondary portals) some of those items may not be appropriate for the primary portal. For example, a knowledge book may be created which is only for the secondary portal and should not be shown on the primary portal.

For these instances, a simple way to control what appears on the primary portal is to create a secondary portal to be used to override the primary portal. Technically and functionally, the primary portal becomes a secondary portal that can be customized with the desired components.

Because the creation process assumes the secondary portal will exist along side the primary portal, the following process should be used to override the primary portal.

Procedure

  1. Create a secondary portal which will override the primary portal. This portal should use the primary portals URL for it's URL and have the same file path as the HelpSpot installation itself.
  2. Check the checkbox in the secondary portal for "Use as Primary Portal."

Your primary portal is now overridden by the newly created secondary portal and should conform to the settings specified.

9.6. Adding a Secondary Portal within Microsoft IIS

There are two ways in which Secondary Portals are typically used.

  1. As a sub-directory so your site. This will create a Secondary Portal under the same domain as your HelpSpot installation, but under a different directory. For example, if HelpSpot is located at http://support.example.com, and you would like a secondary portal at http://support.example.com/portal, the /portal portion of the URL if the sub-directory under which the Secondary Portal will be installed.
  2. As a different domain or subdomain. This will create a Secondary Portal under a domain or sub-domain which is different from your HelpSpot installation. For example, this describes if HelpSpot is located at http://support.example.com, but you'd like the secondary portal to be a different subdomain such as http://portal.example.com OR if you would like the secondary portal to be at a different domain altogether such as http://another-example.com.

Here we will cover how to accomplish either situation.

Assumptions

In both situations, we will cover these basic steps:

  1. Creating a secondary portal within the HelpSpot Admin configuration.
  2. Configuration the secondary portal location within the system (via IIS Manager)
  3. Configuring PHP to be used within the secondary portal.
  4. Create needed PHP files

Note: We're using IIS7 for this configuration and are basing these instructions off of a default installation of a new HelpSpot instance.

Create a Secondary Portal

The first task to complete in either case (sub-directory or additional domain name) is to create a Secondary Portal within HelpSpot's Admin area.

  1. Click to Admin > Customize > Secondary Portal.
  2. Fill out the appropriate forms:
    • Portal Name - This will be the name that portal users see when they visit it. It can be anything you'd like.
    • Portal URL - This will be the full URL for the portal. If you are using a sub-directory, include the directory path. For example, a subdirectory for this field may be http://example.com/portal. If you are using a subdomain or domain, fill that in. An example of a domain would be http://portal.example.com or http://new-example.com.
    • File Directory Path - This should be the full file path for your portal files. If your HelpSpot web files are located in it's default install location of C:\Program Files (x86)\helpspot\helpspot, we recommend putting your Secondary Portal files alongside them. For example, C:\Program Files (x86)\helpspot\new-portal. If this directory does not already exist, you can create it
    • The remaining settings you can set up as you wish. You can find more information on them in the documentation here.
  3. Once you save, you'll be give content to copy and paste into two files, an index.php file and a config.php file. Create these two files in the file location specified (in this example, create C:\Program Files (x86)\helpspot\new-portal\index.php and C:\Program Files (x86)\helpspot\new-portal\config.php) at this time.
    • Ensure that you also create an empty custom_templates directory.

Note that the URL settings in the new Secondary Portal need to match the Virtual Directory or Domain created in the next steps.

Secondary Portal as a Sub-Directory

If you are installing HelpSpot's Secondary Portal in a sub-directory, continue on with these instructions. Otherwise, you can skip to the next section "Secondary Portal as an Additional Domain".

This assumes you have followed the steps above under "Create a Secondary Portal".

By default, HelpSpot installs under a "site", usually the "Default Web Site". Within the Default Web Site, it creates a Virtual Directory named "helpspot" and configures it to work with PHP via the PHP_FastCGI module mapping.

These are the same configurations used to create a Secondary Portal under a new Virtual Directory.

1. Create a New Virtual Directory

Under the same website HelpSpot is under (usually Default Web Site), create a new Virtual Directory by right-clicking Default Web Site (or the name of your site) and choosing "Add Virtual Directory".

Fill out the fields as follows:

  • Alias - This will be the subdirectory of the url. If you fill in new-portal, the sub-directory will then be http://example.com/new-portal.
  • Physical Path - This will be the same path used when creating the new Secondary Portal within HelpSpot. Select the directory you created above when creating a Secondary Portal within HelpSpot. In this example, that path is C:\Program Files (x86)\helpspot\new-portal



2. Configure PHP

Next and lastly, the virtual directory will need to be told to use PHP FastCGI to interpret the PHP files. There are two steps to this.

First, set a Default Document. This tells IIS to search for a document (such as index.php) if no document is specified. A url such as http://example.com/my-portal has no document specified, while http://example.com/my-portal/index.php does.

The document index.php needs to be added as a default document. Click on the new Virtual Directory "new-portal" and then double-click on the Default Document icon. If you do not see index.php listed as a default document, then you can choose the 'Add...' link on the right-hand menu in order to add it as shown.

Next, enable PHP to be run by adding a Handler Mapping. Once again, click on the new-portal Virtual Directory and then double click on the Handler Mappings icon.

PHP FastCGI needs to be added as a handler. Click on the "Add Module Mapping" link on the right-hand menu. The fields are as follows:

  1. Request Path - Let IIS know which documents to use FastCGI with. HelpSpot needs to run any PHP file through Fast CGI, so a wildcard path *.php should be used.
  2. Module - The HelpSpot installer ensures that the FastCGI Module is already available to use. Here we can use that module for this Virtual Directory. Choose "FastCgiModule" from the list of available Modules.
  3. Executable Path - This is the path to the php-cgi.exe file installed by HelpSpot to run PHP. This is installed with HelpSpot and can be found in it's install location. By default, this is "C:\Program Files (x86)\helpspot\php\php-cgi.exe". Note that use of quotes, to account for the space within the file path. Lastly, note that when you check the file path, you may need to set the file type from *.dll to *.exe as pictured below in order to make the php-cgi.exe file visible.
  4. Name - The name is arbitrary. We recommend naming it "PHP FastCGI".
  5. Click OK and then choose Yes to make it an application.


 

Now when you enter http://example.com/my-portal (adjusting the domain as appropriate), you should see the newly created Secondary Portal home page.

Secondary Portal as an Additional Domain

Adding a secondary portal under an additional domain is very similar to adding a new Virtual Directory.

1. Create a New Site

This assumes you have followed the steps above under "Create a Secondary Portal".

In order to use a different domain for the Secondary Portal, create a new Site within IIS. In this example, we'll assume the additional domain will be portal.example.com.

Right-click on Sites and choose "Add Web Site". Fill out the fields as follows:

  1. Site Name - This is arbitrary. In this example, we'll use "Example Portal".
  2. Physical Path - This is the path to the directory created when adding a new Secondary Portal. In this example, we created the "new-portal" directory alongside the main HelpSpot files at C:\Program Files (x86)\helpspot\new-portal.
  3. Type/Binding/Port - These can remain as default in most cases. If you are using an SSL certificate with this additional domain, you may need to change the Type to "https".
  4. Host Name - This is the domain used, in our example portal.example.com.

Configure PHP

In many cases, because HelpSpot is already installed, PHP will already be configured for new sites created within IIS. The settings will often be the same as the Default Web Site.

However, to make sure PHP is properly configured, ensure the following two configurations are set:

Default Document - Ensure the Default Document includes index.php. Within the IIS manager, click on the newly created web site, then double-click the Default Document icon. Ensure that index.php is listed there.

If index.php is not listed, choose the 'Add...' link on the right-hand menu in order to add it as shown.

PHP FastCGI - Ensure that the FastCGI Module is set to run for any PHP file. Once again, click on the newly created web site and double-click the Handler Mappings icon. The setting "PHP FastCGI" should be enabled for the path *.php.

If "PHP FastCGI" is not listed, then it needs to be added as a handler. Click on the "Add Module Mapping" link on the right-hand menu. The fields to complete are as follows:

  1. Request Path - Let IIS know which documents to use FastCGI with. HelpSpot needs to run any PHP file through Fast CGI, so a wildcard path *.php should be used.
  2. Module - The HelpSpot installer ensures that the FastCGI Module is already available to use. Here we can use that module for this Virtual Directory. Choose "FastCgiModule" from the list of available Modules.
  3. Executable Path - This is the path to the php-cgi.exe file installed by HelpSpot to run PHP. This is installed with HelpSpot and can be found in it's install location. By default, this is "C:\Program Files (x86)\helpspot\php\php-cgi.exe". Note that use of quotes, to account for the space within the file path. Lastly, note that when you check the file path, you may need to set the file type from *.dll to *.exe as pictured below in order to make the php-cgi.exe file visible.
  4. Name - The name is arbitrary. We recommend naming it "PHP FastCGI".
  5. Click OK and then choose Yes to make it an application.


 

Now when you enter http://portal.example.com/ (adjusting the domain as appropriate and assuming the DNS settings for the domain are set), you should see the newly created Secondary Portal home page.

10. In-depth: Admin Settings

10.1. SSN & Credit Card Redaction

HelpSpot now has options to redact credit card and/or Social Security Numbers from new requests & updates to existing requests.  When enabled, HelpSpot automatically detects when either credit card and/or Social Security numbers are part of a new ticket or an update to an existing ticket and redacts the sensitive data inside HelpSpot, the support portal, and even public notes to the customer.

To turn redaction on or off, go to Admin -> Settings -> System.

Please note that custom fields are not checked, and updates (private, public, or external) to requests that have already been written aren't retroactively checked once these options are enabled.

10.2. Time Tracker

HelpSpot's time tracker feature allows Users to log time spent working individual requests, right within the request page.

To enable this feature, navigate to Admin > Settings > Time Tracker.

Once this is done, Users will see the time tracker module at the top of the request page for every request.

For more on how the time tracker is used by Staff, see the Users Manual.

10.3. License Information

The Admin area contains the details of the installation such as: customer ID, number of users, version, and support contract information.



Below all the installation information, Administrators will find an file upload area for the license key. Upon initial installation a license file must be uploaded. Any subsequent changes to the installation such as the purchase of additional licenses or a support renewal will also require uploading a new license file, which will be emailed to the primary contact on file with UserScape.

10.4. Maintenance Mode

Maintenance mode allows Administrators to suspends the creation and updating of requests while upgrades or other maintenance is being completed.

Maintenance mode suspends:

  • Email integration. All emails will remain on the mail server until maintenance mode is disabled, at which time all emails sent during the maintenance period will be pulled.
  • Portal submission. Customers will not have access to the portal during maintenance mode periods. Subsequent sections discuss on this page discuss how this looks to the customer.
  • API integration. Those creating/updating requests via an automated process (API) will find during a maintenance period that an error to the application calling the API.

To put the installation in maintenance mode, Administrators must click the Enable Maintenance Mode button. Immediately the maintenance page will be presented to all attempting to access HelpSpot or the portal. Only Administrators have the ability to disable using the disable button on the maintenance page presented to Users (as shown below).

 

Maintenance Mode for Users

Below shows the maintenance page as presented to Users attempting to access HelpSpot. During maintenance mode, Users will not be able to log into HelpSpot.

 

Customizing Maintenance Mode for Portal

HelpSpot will display the default message, as shown below, to customers attempting to access the portal while the site is in maintenance mode.

 


 

However, Administrators can customize this message by editing the appropriate portal template (maintenance.tpl.php).

For details on how to customize portal templates, see the Portal Template chapter referenced below.

10.5. Status Types

HelpSpot offers the flexibility of creating customized status type which are typically used to denote the current progress made on a request.

By default, HelpSpot provides 5 status types. These can be edited or set to inactive and replaced by those created by an Administrator. To add a status type, Administrators simply type the name of the status in the Add a New Status box. Hitting Save at the bottom of the Settings page will create the status and set it as active.

 

While the use of status is required, it's important to note that the status must be changed to something other than Active to close a request.

Status Types in Use

Beyond using as an indicator of where on the continuum of resolution an issue sits, Administrators may opt to have status serve as milestones in a process to resolution. When status types are used as milestones, they can be coupled with automation/mail rules or even filters to create specific workflows.

10.6. Custom Fields

HelpSpot custom fields allow for the creation of user-defined fields that store data on a given request. Custom fields are full-fledged data items in HelpSpot. They can be filtered on, modified with automation, used in templates, etc.

Custom Field Types and Creation

Custom fields are created and modified in Admin > Custom Fields. Below is a list of the available custom field types.

  • Predefined List - Creates a dropdown list of options that a user can select.
  • Drill Down List - Creates multiple levels of dropdown lists that are dependent on the parent selection.
  • Text Field - Stores text data on a single line.
  • Large Text Field - Store multiline text data.
  • Date Field - Stores date data and presents a calendar date-picker for date entry.
  • Date and Time Field - Stores date and time data and presents a date and time picker for entry.
  • Regular Expression Field - Validates text data against a regular expression before allowing data entry.
  • AJAX Selection Field - A programmatic field that dynamically populates options. More info here: Ajax Fields
  • Checkbox - Creates a single checkbox fields
  • Numeric Field - Stores whole number data.
  • Decimal Field - Stores decimal number data.

Custom Field Options

When creating a custom field you can attach the custom field to particular categories. The requests in the categories selected will be the only requests that present those custom fields. You can also choose to make custom fields public which will show them on the public customer portal.

You can also choose to make a custom field required. If a custom field is required. Users will not be able to update / create a request without providing a value.

10.7. Permission Groups

Permission Groups in HelpSpot allow administrator to define the rights for helpspot staff members. Permission groups also serve a secondary function in controlling access to resources like shared filters and responses. Permission groups are defined in Admin > Organize > Permission Groups. HelpSpot comes with several predefined permission groups each of these can be edited or deleted with the exception of the Administrator group. To edit a permission group simple select it from the list. Permission groups can also be copied by choosing the clone link. Below is a summary of the available permission group options.

Permission Description
Module Permissions - Reports Controls if reports are available to users in this permission group
Module Permissions - Manage Knowledge Books Controls the ability to create, edit and delete knowledge books. Users without this permission can still view knowledge books. Note, there are also granular permissions available on the knowledge book level to control editing.
Module Permissions - Manage Forums Controls the ability to create, edit and delete forums. Users without this permission can still view forums and interact with them.
Access Permissions - Batch Respond to Requests Controls access to the batch response tools in the workspace.
Access Permissions - Merge Requests Controls the ability to merge requests in the workspace.
Access Permissions - Access the advanced search page Controls access to advanced search. Without this permission, only quick search is possible.
Access Permissions - Manage Spam Controls access to being able to mark items as spam and delete spam items.
Access Permissions - Manage Trash Controls access to being able to mark items as trash.
Access Permissions - View Private KB's Controls access to KB books that are marked private. If this permission is unchecked, staff will only be able to see public books.
Access Permissions - View Private Forum Controls access to forums that are marked private. If this permission is unchecked, staff will only be able to see public forums.
Access Permissions - Workspace Inbox Controls whether the inbox will be visible to staff members.
Can view own requests ONLY This is a very limiting permission allowing a user to only view their own requests as well as limiting searching and filtering.
Limit to assigned categories ONLY
The user can only see other users and assign to other users in the same categories they are in.

Assigning Staff to Permission Groups

Administrators can assign staff members to a permission group on the Staff page inside of the Admin panel. Only one permission group can be selected per individual.

Using Permission Groups in Filters and Responses

When setting up a filter or response, permission groups can be selected as a criteria for sharing the item. Multiple permission groups can be selected for sharing in the filter or response. 

10.8. System

The Systems box within the Settings page contains the general system configurations for the installation. Each group of settings are described below.

Keep in mind: any changes to these settings will take effect once the Save button is hit at the bottom of the page.

Help Desk Name

The name provided here will be used throughout the installation where the name of the desk is referenced. For example: the top left corner of the HelpSpot for logged in Users, the display name in placeholders, and on the portal.

Default Send From

HelpSpot will look to the mailboxes for populating the drop-down for selecting the default send from account, therefore email integration is required prior to setting this default.

The default selected here will be used as the default 'From' in the recipients mail client. IAN: what happens if I'm not using email integration?

Language

By default, HelpSpot ships with one language file, English-US. You can however create additional language files for HelpSpot to use (seeLanguage Files - Modifying Language Packs). If additional language files have been created they will appear within this drop down field.

Default Contact Method in Request Form

Administrators can set the default contact method on the drop-down when Users use the Create Request form. Contact methods include: phone, email, walk-in, mail, other, forum, instant message, fax, and voicemail. Administrators can also opt to set no default which will force the User to select the contact method prior to initially saving.

Allow Batch Closing of Requests

Enabling batch closing gives all Users the ablity to change the status and close multiple requests, without going into each individual request.

See the Quick Actions section of the Users Manual for more detailed information on how batch processing is preformed.

Allow Batch Responding/Editing of Requests

Selecting 'Yes' for this will allow Administrators and Help Desk Staff level Users to preform a batch updating/editing. Similar to batch closing, batching responding/editing allows for responding and/or editing any field within the request details without entering the request page for each request.

See the Quick Actions section of the Users Manual for more detailed information on how batch processing is preformed.

Guest and Level 2 Limited Access Modes

Guest/Level 2 level Users will be limited to seeing, working, and assigning only within the categories to which they are assigned. Requests outside of those categories will not be accessible to these level Users while this mode is active.

This mode is most often used when an installation allows access to multiple organizations, such as external vendors, for the purpose of working Customer requests.

IP's authorized to call tasks.php and tasks2.php

Tasks.php and tasks2.php are the files resposible for mail integration and the excuation of all automation and mail rules. Administrators that wish to create an level of security around these files should list the IPs in the box provided that are authorized to run the files. When IPs are provided, no other IP will be able to run either file. If the field is left blank, the files will be accessible by any IP.

RSS Feeds Enabled and RSS Feeds Copyright Notice

The simple 'Yes/No' drop-down sets if the installation will offer RSS feeds for any of the filtered views. For those that opt to allow RSS feeds, they many also wish to specify a copyright/usage notice to all readers.

Delete requests after this many days in the trash

HelpSpot will hold all request that have been put into Trash for the amount of time designated within this drop-down. Administrators can choose from 1 day-never. HelpSpot defaults to 30 days, however Administrators should be aware that no matter the time frame selected, deleted items are in no way accessible.

Request Note Draft Save Frequency

HelpSpot has a built in draft save function that periodically saves a Users note and with one click allows them to apply any saved version of a note. The default frequency is every 30 seconds, however this can be changed by using the field provided to type (in seconds) the desired save frequency.

Request History Rendering

Administrators can set how the request history is rendered for Users on the request page. HTML can be displayed, escaped, or removed. HTML is the default and recommended for most installations.

10.9. Date and Time

HelpSpot provides Administrators the ability to configure date/time display to conform to local preference.

Each setting within this box relates to a date/time format used within the installation.

System Time Zone

As part of the installation process, Administrators are asked to provide the time zone. This time zone will be used to display all dates in the system.

Date Format

This long date format can include: month, day, date, year, and time and can be configured in a number of ways. For example: DD, MM YYYY, TT:TT or Day DD, MM YYYY, TT:TT.

The provided drop-down is a quick way to select format or Administrators can type the desired PHP date format.

Short Date Format

The primary difference between the short date and long date, above, is the exclusion of time in the short date. A sample use of short date includes the check request page on the portal.

Configuring short date functionally is the same as the long date, as described above.

Popup Calendar Date Format

To ensure the date/time used by the popup calendar conforms to all other date formats, Administrators can configure the format through the use of the drop-down provided.

Popup Calendar Short Date Format

As with short date configuration, this setting option allows Administrators to set the short date format for the popup calendar.

10.10. Business Hours

Business hours allow you to configure your helpdesk's hours of operation. These settings are accessed in Admin > Settings > Business Hours. Business hours are important to configure because HelpSpot uses these settings for calculations such as First Response Speed and Resolution Speed. In addition these settings can be used to control when triggers and automations are in effect.

The first area of the business hours page allows the configuration of HelpSpot's default business hours. The lower area of the screen allows you to configure holiday hours. These hours override the default settings. Holidays can be configured to block off an entire day or to modify the hours of operation.

Video Tutorial

10.11. Email Mailboxes

Mailbox Settings

Admin > Email Mailboxes

Mailboxes are how HelpSpot imports new emails from customers and converts them into requests or request updates. A mailbox in Helpspot establishes a POP3 or IMAP connection with the mailbox on your email server. It then imports messages found in the inbox and processes them for inclusion in Helpspot.

Account Name —Name shown in emails sent from this account. You can use placeholders in this field to dynamically insert data like the acting agent's name.

Account Name — The email account that maps to this box ie: support@mydomain.com.

Mailbox — Normally INBOX but can be any folder within the account. This can be used to retrieve email from a different IMAP folder if desired.

Archive Mail — With this enabled mail will be moved to a "helpspot_archive_folder" instead of deleting the email. This only works with imap. Note: HelpSpot deletes emails from the mailbox if this is disabled.

Host Name — This is the hostname of the IMAP or POP3 server you wish to retrieve email from. You will obtain this information from your email provider.

Username — The username used for IMAP or POP3 authentication.

Password — The password used for IMAP or POP3 authentication.

Account Type — The protocol of the account your are connecting to. Options are:

  • POP3
  • POP3s
  • IMAP
  • IMAPs
  • NNTP
  • NNTPS

Port — The port that you wish to establish a connection with your email server on. Usually 110 for POP3, 143 - IMAP, 995 - POP3S, 993 - IMAPS

Security Type — If you are establishing a secure connection you will need to select the correct security type for your email provider.

Default Category — Email to this mailbox will automatically be assigned to the selected category.

Enable Auto Reply — This setting will send an automatic reply to a customer when they create a new request through this mailbox.

SMTP Setting to Use — You can set this to use the system default settings that are found in Admin > Settings > Email Integration or you can specify custom settings here. This is especially important if your SMTP provider requires that the reply-to address match the sending account credentials.

Email Templates —Templates here will override versions found in system email templates (Admin > Customize > Email Templates) when emails are sent from this mailbox. If you do not specify a custom template the default will be used.

 

 

10.12. Email Integration

This email integration area allows Administrators to configure outbound messaging, as well as general mail preferences.

Administrators should keep in mind that to properly integrate an existing email support account with HelpSpot, they must set up email integration and create a Mailbox. For more on creating a mailbox, see the Mailboxes page referenced below.

Outbound Email Configuration

Note: HelpSpot will use this configuration for all outbound emails (User notices and outbound customer messages), however these settings can be overridden (if configured as such) by the creation of a mailbox.

Send Outbound Email Via

If you have already set up a mailbox with an API integration or SMTP configuration you can select that mailbox to send your outbound email via. This is the best option in most cases.

A separate SMTP configuration can also be configured on this screen if desired.

Administrators can opt to use PHP mail function or an SMTP server to send all outbound messages. Note that PHP mail is limited in use to only non-Windows installations.

SMTP Configuration (not displayed if a modern authentication mailbox is selected above)

When SMTP is used, the following settings must be provided:

  • SMTP Security Protocol. Most installations will not have to configure this and can leave the default, none. Those running servers requiring a security protocol, can configure as such.
  • SMTP Host. Provide the host name. Multiple names should be listed without any spaces and separated by a semicolon.
  • SMTP Port. The standard port is usually 25, secure is 465. These can vary by server, so check with mail provider.
  • SMTP Authentication. Indicate if your mail server requires username/password for authentication.
  • SMTP Username/password. If required, and Yes is selected above, provide account username and password.
  • SMTP HELO. Most installation will not require this, however those that do can provide it here.

Notification Email Address

In order to send notifications and replies, HelpSpot must have a 'reply to' email address designated. For the recipient of these messages, this email will be the 'From' in the mail client.

For Administrators using email integration this will simply be an account specified when creating mailboxes. By selecting an existing integrated account, they ensure all message sent to the notification email are integrated into HelpSpot.

For those not using email integration, keep in mind the notification email is for outbound use only and no messages sent to this address will be captured by HelpSpot.

Notification Email Address Name

In addition to specifying the notification/outbound email address, administrators must set the name of the account as it will display in the recipient's mail client.

Default Send From

Dropdown selector to specify which Email Mailbox to use for outbound sending of public notes when creating requests. There is also the option of selecting "Do not send email" which will prevent outbound notifications of public notes. 

Request ID Prefix

This is used only for those attempting to send requests between HelpSpot installations. For example, the IT and maintenance department have separate installations but have the need to send requests to each other. So no installations requests are overwritten, they can proceed each request ID with letters to identify their installation.

Global BCC

An email address entered here will receive blind carbon copies of all outbound emails (not visible to other recipients). The dropdown selector allows electing to BCC only public notes or all outbound emails.

Reply Above Text

This field allows administrators to customize the text used to automatically remove quoted history inserted by email clients.

The balance of the settings on this page apply to all INBOUND messages, regardless of the mailbox the message entered in from.

Allow Email Attachments

This simple yes/no drop-down allows Administrators to specify if attachments are imported with incoming email messages. If no attachments are permitted, HelpSpot will strip the attachment prior to importing the message.

Because HelpSpot deletes all messages from the mail server after importing, it is recommended that this be left at the default of yes to ensure no important attachment are lost.

Do Not Allow Attachments with These Extensions

To prevent potentially malicious files from entering HelpSpot, Administrators can specify file types that will be stripped from imported messages. By default HelpSpot lists: exe and vbs. Additional file extensions can be provided in a comma separated list.

Max Attachment Size

The default maximum file size for attachments is 50MB; providing a reasonable balance between sharing of critical files and conserving database space. This can be increased/decreased based on individual organization need.

Reopening Closed Requests

By design, HelpSpot will re-open a request if an update is sent in within 30 days of closing. Administrators have the option of specifying the number of days or setting to 0, which will always force HelpSpot to re-open closed requests when updated. 

Using the default setting helps in keeping new issues from being lost among those that are newly submitted, but done using an old request.

Maximum Emails to Retrieve at Once

To prevent the system from attempting to pull in more emails that in can handle, and run the risk of timing out before messages are retrieved, HelpSpot allows Administrators to limit the number of messages pulled in, per mailbox, for each run of tasks.php. The default provided is 10. It's not recommended that you ever set this to higher than 30.

New Request Loop Protection

HelpSpot will attempt to prevent email loops with other systems based on the rules defined in Admin > Settings > Email Integration > New Request Loop ProtectionTwo of the three rules in New Request Loop Protection work in concert to stop email loops, and the third rule works independently to prevent duplicate looping. 

Time Period and Max emails in time period work in concert, engaging New Request Loop Protection if one email address sends more than the defined Max number of emails within the defined Time Period.

The Duplicate Check works independently, comparing the subject and body content of incoming emails for exact duplicates within the defined time period (in seconds).

More details about each feature are available on the New Request Loop Protection page.

Enable tasks.php Debugging Output

When setting up your email integrations or if a problem arises you may want to turn this on. Once enabled, when you visit tasks.php via your browser to manually run the process debugging information will be show (it can be useful to 'view source' in the browser for a cleaner view).

10.13. New Request Loop Protection

HelpSpot will attempt to prevent email loops with other systems based on the rules defined in Admin > Settings > Email Integration > New Request Loop Protection.

TL;DR;

  • Two of the three rules in New Request Loop Protection work in concert to stop email loops, and the third rule works independently to prevent duplicate looping. 
  • Time Period and Max emails in time period are engaged if one email address sends more than the defined Max number of emails within the defined Time Period.
  • Duplicate Check compares the subject and body content of incoming emails for exact duplicates within the defined time period (in seconds).
  • Trigger-based Auto-Replies are a special-case, customizable option which allow adding extra conditions to enhance functionality.

Time Period and Max emails in time period work together, disabling the mailbox-level auto-reply feature if one email address sends more than the defined Max number of emails within the defined Time Period. This feature only compares inbound email from the same email address over the defined Time Period, without considering the content of the email body or subject.

The mailbox-level auto-reply feature generates new requests for each new email received and sends your configured auto-reply notification back to the sender with their new Request ID appended to the subject line. Any subsequent replies to that notification email contain the Request ID in the subject and are added to the same request rather than generating additional new-request notifications.

So with the settings depicted above, four individual emails from one sender address within an hour would generate four separate new requests and four new request notifications. The fifth individual email from the same sender within one hour would engage the loop protection feature, and a fifth new request would not be generated. This also means they would not receive a fifth new request notification. If they sent the fifth request an hour and a half after the first, it would fall outside of the defined time period and generate a new request and corresponding notification auto-reply as usual.

The Duplicate Check works independently of the other two settings, comparing the subject and body content of incoming emails for exact duplicates within the defined time period (in seconds). Incoming emails are monitored over the defined time period and any with identical subject lines and body contents trigger duplicate protection and prevent new, duplicate requests from being generated.

With the settings depicted above, two duplicate emails received within 600 seconds (i.e., 10 minutes) would trigger the duplicate check and prevent a second, duplicate request from being created. However, two duplicate emails received eleven minutes apart would fall outside the defined time period, and a second, duplicate request would be generated.

It is important to note that emails generated by other automated systems which contain timestamps in the subject line or body may result in non-identical subject/body contents which result in HelpSpot's duplicate check conditions not being met. This is one of the conditions we commonly check for in figuring out how some emails circumvent the duplicate check loop protection.

The New Request Loop Protection settings on the Email Integration page target specific conditions to reduce the likelihood of false positives which could prevent legitimate, similar incoming emails from generating appropriate requests. Because of the chances of other automated systems sending emails which inadvertently fall outside of the Loop Prevention definitions, some HelpSpot customers have also elected to disable the mailbox-level auto-reply functionality and instead opt to utilize trigger-level auto-replies.

10.14. Customer Tools

HelpSpot Customer Tools allow for the export and deletion of customer data. You will find the customer tools in the Admin area of HelpSpot.

Export

The export option in the customer tools will export all request details and public notes as well as public attachments for the entered customer email address. This export is generated as a zip file that can be downloaded and sent to the customer.

Deletion

Customer information deletion has a few more options as it can be used with GDPR requests, purging passwords, PHI, and payment information that accidentally makes its way into HelpSpot. All of the deletions done through this screen are permanent so it is important to make sure that you select the right data to delete.

Request Note Deletion

Customer information can be deleted at the individual request note level. Request note IDs can be retrieved by using the request note menu next to each note. When you delete a request note that individual note along with any attachments in that note will be deleted from HelpSpot.


Request Deletion

Moving one level up. An entire request ID can be deleted from HelpSpot by providing the request id. All notes, history events and attachments will be deleted in this case.

Customer Deletion

Finally, customer information can be deleted based on Customer ID or Customer Email address. This will delete all requests and attachments found for this customer in HelpSpot. 

 

11. HelpSpot Cloud Administration

11.1. How to Use a Custom Domain Name with HelpSpot Cloud Instance

If you're looking to use a custom domain name with your HelpSpot cloud instance, there are a few steps you need to follow. Here's what you need to do:

  1. Create a new request at https://support.helpspot.com/index.php?pg=request: This is the first step in the process. Contacting customer support will get you in touch with the right people who can help you set up your custom domain name.
  2. Request a static IP: Customer support will provide you with the static IP of your instance. This IP is required to point the A record of your domain name at.
  3. Point the A record of your domain name: Once you have the static IP, you'll need to point the A record of your domain name at it. This is typically done through your domain registrar's control panel.
  4. Notify your support contact: Once you've pointed the A record of your domain name, you'll need to let your support contact know. They will then swap your HelpSpot configuration and issue an SSL certificate for your domain.

And that's it! With these four steps, you'll be able to use a custom domain name with your HelpSpot cloud instance. If you have any questions or need assistance, don't hesitate to reach out to our support team at https://support.helpspot.com/index.php?pg=request.

12. Troubleshooting Guides

12.1. Turn On Debugging and Logging In HelpSpot 5

There are two debugging / logging settings in HelpSpot 5 that can be enabled. Both of these settings are found in the .env settings file in the root of your HelpSpot install directory.

HelpSpot Cloud customers, please contact customer support for debugging assistance.

The first setting that can be enabled is:

  • APP_DEBUG=true


This setting will enabled the display of errors and stack traces in the browser when they are encountered. It is set to false by default.

The second setting is not included in the .env file by default. To enable it you will need to add this string:

  • LOG_LEVEL=debug


This setting will cause more details on certain processes in helpspot to be written to the helpspot.log file located in helpspot/storage/logs/helpspot.log.

Note, that when changing these settings you will need to restart supervisor or windows helpspot services in order for them to take effect for logging items like mail retrieval and sending queue jobs.

12.2. HelpSpot Speed and Performance

If you are noticing speed or performance issues within your HelpSpot installation, here are a few places to check on.

Note that these apply to HelpSpot Cloud installations as well.

Updating Requests are Slow (only applies to HelpSpot v4 and below)

If HelpSpot hangs / is slow when updating a request, this is most often related to HelpSpot sending emails when updating the request. This usually happens when a request update sends multiple emails

Multiple email notifications may be sent under a few different conditions:

  • Triggers may add an email notification if a condition is met when updating a request
  • Any staff who are subscribed to a request will generate an additional email send
  • Any staff being notified on a Private or External request update will generate an additional email send

However, some Exchange mail servers intentionally cause delays between sending multiple requests.

Slow Workspace

Sometimes staff see slowness when navigating around the Workspace section of HelpSpot.

This is often related to having many filters defined, or having a filter that results in a "heavy" database query.

Often filters have a count of found requests next to them. HelpSpot has to run the filter in order to get this number, so in some conditions, many filters are being run all at once as users click around the Workspace. This can result in a pile up of expensive database queries.

The filter result count is saved (cached) for up to 5 minutes, however depending on how HelpSpot is used, the cached count may get invalidated often enough to cause slowness within HelpSpot.

HelpSpot admins can check on what filters may be causing issues in Admin > System > Filter Management. Problem filters will often be highlighted in red. These are ones whose database queries take over 1 second to complete.

The query time is an average, so seeing something take over 1 second often means many queries are taking longer. Query time may vary depending on the current load against the HelpSpot database.

To reduce issues caused by filters, you can:

  1. Delete unused or rarely-used filters
  2. Remove the option to show the request count next the filter ("Display count in Workspace" option)
  3. Reduce the number of people who can see a filter
  4. Reduce filters to only query within certain times or filter down to more specific sets of requests (this often helps but has potential to make the queries take longer! Test your filters with the "Run Filter" button before saving them).

 

 

 

12.3. Microsoft SQL Server

Connecting to a Named Instance

In order to connect to a named instance of SQL Server you will need to configure an alias for that instance as described in the Create an Alias section on this page: https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/create-or-delete-a-server-alias-for-use-by-a-client?view=sql-server-ver16

General SQL connectivity troubleshooting tips from Microsoft are available here: https://learn.microsoft.com/en-US/troubleshoot/sql/database-engine/connect/resolve-connectivity-errors-overview

Common Connection Troubles

  • SQL Client Tools - On some servers you will need to install the SQL Server client tools. This is especially true if your SQL Server is on a different server than your web server.

  • (local) Registration - If your SQL Servers registered name is (local) you'll need to delete that registration and change the registration to the machine name. You should then be able to set the DB_HOST in your .env file to 'localhost' and be able to connect.

  • SQL Authentication - The SQL Server must be setup to use both SQL Server authentication and Windows authentication. Both for the user as well as the server as a whole. This setting is in SERVER_NAME->Properties->Security

  • privileges - The HelpSpot database user must have sufficient privileges to access the database. Making them the database owner will work, though other configurations may also be effective. The database user will also usually need to have public access enabled.

  • port number - On some PHP/SQL Server installations you'll need to provide the port number your SQL Server listens for requests on. You can do this by specifying the port number in the DB_PORT variable like in your .env file. (MS SQL is configured for port 1433 by default.)

  • TCP/IP in SQL Server Configuration - In order to connect by IP you may need to specifically allow that protocol by going to the SQL Server Configuration Manager, go to Protocols and then enable TCP/IP.

  • ntwdblib.dll - The most common issue is that you do not have the ntwdblib.dll file installed in your PHP directory (where php.exe is, or sometimes placing it in the ext directory works as well). This library can be found with your Enterprise Manager dll's or in your SQL servers system32 folder. It's generally best to take the file from the server where SQL Server is installed.

  • ntwdblib.dll Version - On some systems the ntwdblib.dll version is too old to work correctly with PHP. If your version does not end in 80.194.0 it's probably too old. You can download the 80.194 version here.
  • Registry key - In rare cases an edit to the registry may help.
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo]
    "DSQUERY"="DBNETLIB"

Error: "The statement has been terminated."

In extremely rare cases SQL Server can lose seeding on the HS_Request table or another tables, primary key. If this occurs inserts to the database will fail with this error. You can check if this is the case by running the following in management studio:

DBCC CHECKIDENT ('HS_Request');

If the current seed value doesn't match the current column value (it will be less) than there's a problem. You can reseed the tables primary key with this command:

DBCC CHECKIDENT ('HS_Request',RESEED,######);

where ###### is the new ID value. Make this a few higher than the current highest value in the table. That should resolve the issue.

Moving from local SQL Server to SQL Server on RDS

Use SQL Server Management Studio and select the database that will be used as the source. Right click on the database and select the generate scripts task. Select advanced, scroll to types of data to script and select Schema and Data. Once the file is saved, open it to make some minor changes for Amazon RDS compatibility.  Change the path in the FileName section of the script to be D:\RDSDBDATA\DATA\ instead of the default C:\Program Files\..... . Save the script. Next, run the script to import the data and the schema. The last step is to open security on the newly created database and ensure that the user created in the script has db_owner rights to the database.
 
Performing the above steps, allowed the user to copy the schema and the data from a SQL Server 2008R2 instance on a traditional Windows Server 2008 R2 instance and migrate it intact to an Amazon RDS instance.

12.4. Microsoft Exchange Server

Exchange 2010 Slow Delivery / Request Duplication

Exchange 2010 has a new tarpit feature that forces a 5+ second delay between each email sent on a connection. This is designed to help combat spammers, however, it's often necessary for HelpSpot to send a group of emails at once and this feature of Exchange can cause problems. At the very least it slows down email sending causing the request screen to feel slow on updates. More significant issues can be seen if your installation does a lot of notification emails to staff on import as each email will have a 5 second delay between them meaning importing a single email could take a minute or more. In such cases the scheduled tasks which pull in email may end up duplicating some requests as one running of tasks.php is still going (due to the delay) while a second is initiated.

The setting in Exchange can be checked with this command:

Get-ReceiveConnector "connectorname" | select tarpitinterval

The setting can be turned off with:

Set-ReceiveConnector "connectorname" –TarpitInterval 00:00:00

Make sure to run the command for each connector name your installation has.

Acknowledgement Delay

Sometimes Exchange 2010 still has delays in sending multiple messages. Exchange may be making HelpSpot wait until it has received confirmation that a sent email was received by the recipient mail server. This is called "acknowledgement delay".

To eliminate the acknowledgement delay, run the following command:

Set-ReceiveConnector "SMTP Application relay" -MaxAcknowledgementDelay 0

Exchange 2010 Rate Limit Exceeded

The setting in Exchange can be checked with this command:

Set-recieveconnector "Server Name\Client Connector" -Messageratelimit 500

Connection Troubles

  • Pop3/IMAP - Make sure Pop and/or IMAP is enabled on your Exchange server. These options are often off by default.
  • Password - If your POP or IMAP password contains a backslash (ex: \ ) this will break the connection. Remove the backslash from your Exchange password and the connection should work.
  • NOTLS - On Exchange 2007 it is sometimes necessary to choose the NOTLS security option.

Kerberos Error

"Kerberos error: Credentials cache file '/tmp/krb5cc_33' not found (try running kinit)" Note that the number appended to the cache file may be different.

This error can occur if the number of simultaneous connections exceed the limit. The Exchange error log should show the errors. Restarting Exchange usually clears the issue.

Using IMAP or IMAPS instead of POP/POPS within HelpSpot's Email Mailbox configurations can also alleviate this issue if the error is seen.

Routing through IIS

It can sometimes be useful to route email via IIS's built in SMTP relay system. Note, that in some configurations you may want to set this up to forward the email to Exchange from IIS. The basics on setting it up can be found in this article: http://www.geeksengine.com/article/php-microsoft-smtp.html

PHP Bug 33500

There is some evidence that Microsoft Exchange Rollup 7 fixes the issues below. Please upgrade to rollup 7 before trying any of the below procedures.

Items below relate to PHP bug: http://bugs.php.net/bug.php?id=33500 which affects Exchange 2007.

Note, that the first thing to check before doing the below is that your Exchange server is set for

"Plain text logon (Basic authentication) No TLS connection is required for the client to authenticate to the server"

and NOT

"Plain text authentication logon (integrated windows authentication) No TLS connection is required for the client to authenticate to the server"

If you have multiple front end Exchange server be sure all are setup for basic plain text login.

Also be sure you don't have any # in your mailbox passwords.

Authentication Trouble on Exchange 2007 - Kerberos

Under certain configurations in Exchange 2007 having Kerberos setup is required in order to connect to the Exchange server. A customer contributed these steps on how to set that up in a Linux environment.

Step 1:
Edit the krb5.conf file to match your domain environment.

Step 2:
Create a script to check the mail that creates the ticket if it does not exist already then checks the mail. This script should be called via cron instead of tasks.php directly:

/usr/kerberos/bin/klist -c /var/tmp/apache | grep -q krbtgt || echo <mailboxusename> |
/usr/kerberos/bin/kinit -c /var/tmp/apache <mailboxusename>
export KRB5CCNAME=/var/tmp/apache

/usr/bin/php /var/www/html/helpspot/tasks.php

Step 3:
Add another crontab entry that renews the kerberos ticket every hour:

/usr/kerberos/bin/kinit -R -c /var/tmp/apache

Alternative: Recompile PHP with IMAP Adjustment

On Linux based installations recompiling PHP and making an adjustment to the IMAP source is also a possible solution. This method was tested on CentOS 5.1 and is still needed at least up to PHP 5.2.9.

  1. Download the latest IMAP Toolkit release at ftp://ftp.cac.washington.edu/mail/imap.tar.Z
  2. Extract the files, then open up imap-2007/src/osdep/unix/Makefile and go to line 1002. Comment out the following section:
    ckpgss: # Kerberos V (must have gss EXTRAAUTHENTICATOR as well)
            @echo Kerberos V password authentication
            $(LN) ckp_gss.c osdepckp.c
    
  3. Save the file and exit. Change dirs back to the imap-2007 directory and build with the following: 
    make slx SSLINCLUDE=/usr/include/openssl SSLTYPE=nopwd
  4. Once complete, download the latest PHP from php.net. Extract the files, then run configure with the following options (you may need to adjust these options as needed for your setup):
    ./configure --without-kerberos --with-zlib --with-curl=/usr/lib --enable-dba --with-gd --enable-gd-native-ttf --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib --with-zlib-dir=/usr/lib --with-imap=/PATH-TO/imap-2007 --with-imap-ssl --enable-mbstring --with-mysql=/usr/lib/mysql --with-mysql-sock --with-mysqli --enable-soap --enable-sockets --with-pear --with-mcrypt --with-openssl --with-xml --with-apxs2=/PATH-TO/apxs --enable-memory-limit --enable-track-vars --enable-wddx --enable-ftp --enable-sysvmsg --enable-sysvem --enable-sysvshm --enable-transid --enable-cli --enable-cgi --with-ldap
  5. There may be a bunch of package dependencies (like libmcrypt, libmcrypt-devel, openssl, openssl-devel, httpd-devel, etc.) that I won't go into here. Basically, if configure errs out and complains about a package not being installed, then install it and go from there.
  6. Then run make, make test, and finally sudo make install.
  7. Once it's installed, you'll need to add the following to /etc/httpd/conf/httpd.conf if you don't have it already:
    LoadModule php5_module /usr/lib/httpd/modules/libphp5.so
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php .phtml

  8. Restart Apache and you should be all set.

12.5. Missing Microsoft.pem File

Email Mailboxes will not connect to O365 via new OAuth connection

On some subversions of HelpSpot v5, a file required for Microsoft OAuth connectivity is overwritten and not restored during upgrade. If you are setting up a new Email Mailbox using OAuth authentication and it fails to retrieve incoming messages, this is one possible cause. This missing file may also produce errors in the helpspot.log file (located in the /storage/logs subfolder under the site root directory) similar to either of the following:

  • Error: OpenSSL unable to sign data DETAILED CONNECTION DUMP
  • production.ERROR: DomainException: OpenSSL unable to sign data in C:\Program Files (x86)\helpspot\helpspot\vendor\firebase\php-jwt\src\JWT.php

You can verify this condition by searching for a microsoft.pem file in the /storage/keys subfolder under the site root directory. 

If the file or the entire /keys folder is missing, you will need to create the keys folder within the storage directory and manually copy the microsoft.pem file to that location. Reloading Apache/NGINX (on Linux) or performing an iisreset (on Windows) may be necessary to ensure the new file is identified by the system.

The download referenced in this page contains the file in a ZIP which can be downloaded and extracted into the /keys folder.

 

12.6. MySQL

How to Repair a MySQL Table on Windows

If you've used our Windows Installer and need to rebuild a table this is how to do it. If you're experiencing odd behavior such as filters with counts not actually showing the requests when entered this could be the case.

Steps to repair the table:

 

  1. Open the command prompt
  2. enter: cd "c:\program files\helpspot\mysql\bin"
  3. enter: mysql -u HELPSOT_USER -p
  4. enter your password when asked
  5. enter: use HELPSPOT_DATABASE;
  6. enter: repair table HELPSPOT_TABLE;
If you need to find the HelpSpot username, database, or password you can find them in config.php in the root HelpSpot directory.

 

Table Creation Errors

On some MySQL servers during installation only some of the tables will be created. Normally when this error occurs it's about 19 tables that are created. When this occurs the screen of the installer will often turn blank white while trying to complete installation.

This error is caused by MySQL being set in STRICT mode. Your my.cnf or my.ini file probably has a line similar to this:

sql-mode="STRICT_TRANS_TABLES"

Removing the strict restriction should allow installation to complete normally.

12.7. MySQL - Convert Lowercase Windows Table Names to Mixed Case for Linux/Unix

When converting a MySQL database from Windows to Linux/Unix the Windows server will often export the database table names in all lowercase. HelpSpot on Linux/Unix requires mixed case table names.

This script will convert the lowercase names into proper mixed case names.

There are separate scripts for V2 and V3

Usage:

 

  1. Place this file in the same directory as config.php
  2. Visit the script in your browser
  3. Delete the script

12.8. Microsoft IIS

PHP CGI Error in IIS

On some PHP installations running as a CGI on Windows IIS a CGI 502 error is received at random. This is a bug in the interaction between PHP and IIS and is not HelpSpot specific. It appears to happen most on fast servers which are under low load. One options is to run PHP as an ISAPI module. However, if you would prefer to keep it as a CGI there appears to be an effective workaround for the issue.

The workaround works by telling Windows to optimize for foreground applications instead of background services. This appears to slow down the processing enough so that IIS doesn't throw an error. Please be aware that this is a system wide setting and will affect the overall speed of your server to some degree. If you change this setting it is highly recommended that you keep close watch on the server afterwards to make sure none of your applications have been adversely affected.

On Windows Server 2003 go to: Start -> Control Panel -> System -> Advanced (tab) -> Performance (settings) -> Advanced (tab) -> and switch "adjust for best performance of" to "Programs". Apply the change and the effect should be immediate.

On Windows 2000 go to: Start -> Settings -> Control Panel -> System -> Advanced (tab) -> Performance (performance options) -> Select "applications". The change should be immediate.

This solution was discovered in the discourse of this PHP bug history: http://bugs.php.net/bug.php?id=9852

Note: that this solution does not always work when PHP is used with the MS SQL extension. When this solution fails while using the MS SQL extension the only solutions appear to be to switch PHP to ISAPI or switch to using MySQL or PostgreSQL.

IIS Crashes every few hours or more, tasks.php takes a significant time to run

An upgrade to .net version 3.0 can partially cause this issue. Note that .net is not used by HelpSpot, but the upgrade causes permission issues which cause IIS to be unstable. This situation can be fixed following the information in this article: http://support.microsoft.com/kb/918041.

If the situation persists after the fix uninstalling .net v2 may be needed using aspnet_regiis.exe -u followed by aspnet_regiis.exe -u started from: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

Live Lookup fails to load

This can sometimes be happen when using IIS due to it's low maxQueryString setting. Resources and details on how to adjust that:

Process:
  • Control Panel > Administrative Tools > Internet Information Services (IIS) Manager
  • In the Connections pane, drill down to the relevant site you want to modify. Something Like SERVER > Sites > Default Web Site.
  • In the Home pane for Default Web Site, open Request Filtering.
  • In the Action pane, click Edit Features Settings.
  • Maximum query string defaults to 2048; set it to 10240 and click OK.
  • Close IIS Manager, and restart the World Wide Web Publishing Service.

Attachments Do Not Upload to a Network Drive

HelpSpot allows the Attachment Storage System to optionally save to the file system, rather than the database. If you have set the file path to a network drive (typically a path such as "\\path\to\shared\directory") and attachments are not successfully being saved, it is important to ensure proper credentials are set. If the IIS worker processes runs under a user who has permission to write to the network drive and attachments still are not saved correctly, then the Application Default settings may need to be set with the username and password of the user with permission to write to the network drive.

Process:

  1. Within the IIS Manager, select your site from the Connections pane on the left by clicking on it. This is typically labeled "Default Web Site".
  2. Click the "View Applications" link in the Actions pane on the right.
  3. Options within the Actions pane will change. Click "Set Application Defaults" with the Actions pane.
  4. Next to "PhysicalPathCredentials", click the empty field with the smaller button containing three dots(...). This will open a new window labeled "Connect As"
  5. Choose "Specific User", Click the "Set" button, and enter the username and password of the user who has permission to write to the shared drive.

A. Pictured: Click the "View Applications" link in the Actions pane on the right.

B. Pictured: Set Application Defaults, Choose Physical Path Credentials, Select Specific User, Enter Credentials

12.9. IIS: WSUS (Windows Server Update Services) And HelpSpot - 500 error

If you are using Microsoft IIS and install WSUS (Windows Server Update Services), you may receive an 500 error post-installation when viewing HelpSpot. This usually says there is an issue with the web.conf file, however that is a generic error message.

If you see the Module in question in the error message is the CompressionModule, this is a known issue. (You'll have to access HelpSpot locally on a browser within the web server to see the full error message).

This issue is outlined and resolved here: http://forums.iis.net/t/1149768.aspx?500+19+Error+When+Enabling+32+bit+Application+Pool

WSUS enables a CompressionModule, which is not compatible with HelpSpot's installation. To resolve this issue, you must disable the CompressionModule. TO do so, run the following command (taken from the previous linked article) and run it in the CMD prompt. This command will not work within PowerShell:

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-[name='xpress']

 

 

12.10. Portal Pages Sometimes Return Blank

This error is sometimes found on servers running Apache 1.3 and using the mod_gzip module. To fix this error create a .htaccess file in the base directory of your HelpSpot installation. Within the .htaccess file add the following line:

mod_gzip_item_exclude file .*

Save the file and the blank pages should stop appearing.

12.11. Month names are not translated

You can adjust the date and time that HelpSpot displays by going to "admin -> settings -> date and time" and then selecting the proper format from the drop-down lists. This setting will only adjust the way it's formatted and if you would like to have the month names translated then you can edit the lg.charset.php file and adjust the setlocale line: 

setlocale(LC_ALL, 'en-us','english');

For example to have month names displayed in Swedish you could use: 

setlocale(LC_ALL, 'sv_SE', 'Swedish', 'swedish');

If you've made that change and the month names are still in English then your server may not have the locale installed. 

You can verify a list of installed locales on Unix/Linux servers by running: 

locale -a

If yours is not displayed in the list, you can utilize the locale-gen command to install additional: 

locale-gen de_DE de_DE.utf8

12.12. fPinned Duplicate Column Error

Note: This error has been fixed in the latest version 4.5.4+ of HelpSpot. Please download the latest installer.

Some customers have run into an error when installing the 4.5 update that indicates there is a duplicate column named fPinned on the HS_Request_History table. This error can be fixed by following the steps below.

  1. Open up your helpspot database in the database editor of your choice.
  2. Run this query: Select * from HS_Migrations;
  3. Look at the last migration listed in the results and note the number in the "batch" column
  4. Run this insert query to add the needed migration history to the database
INSERT INTO `HS_Migrations` (`migration`, `batch`)
VALUES
	('2016_02_18_211111_add_pinned_to_request_history', 2);
Edit the batch value to reflect the value that you noted above. After running this insert query you can return to the installer page and continue with the installation.

12.13. LDAP connections with Self-Signed SSL

If an LDAP server being utilized with HelpSpot does not a have a publicly trusted cert the PHP LDAP DLL needs to be configured with the proper settings to allow it to connect.

This condition is indicated by an error in the HelpSpot log file stating:

BindException: Can’t contact LDAP server in C:\inetpub\wwwroot\vendor\adldap2\src\Auth\Guard.php

You should first confirm that there is no firewall rule blocking port 389 (standard LDAP) or port 636 (LDAPS).

If you can telnet to the LDAP server specified in HelpSpot's settings on the LDAP ports from the HelpSpot server, but it still fails to authenticate users, select one of the options below to resolve the issue.

Note: The Windows PHP libraries are hard-coded to look for an open ldap config file (ldap.conf) in C:\openldap\sysconf\ldap.conf. On Linux you should be able to find it in /etc/openldap/ldap.conf

Create the ldap.conf text file mentioned above - this is where you point to your certificate store. Once you create this file in the needed location, you can begin to edit it.

There are two options for resolution. The first option is the most secure, providing certificate verification by referencing a trusted certificate path. In a secured environment not publicly accessible, you may elect to bypass certificate verification using the second option.

Option 1: provide a path to a valid trusted certificate

  1. Create a cert file that contains the certificate hashes.
  2. Edit the ldap.conf file and add a line for the command TLS_CACERT like TLS_CACERT=C:\path\to\my\cert.pem
  3. To add a certificate as a trusted in the cacert.pem file, simply get a copy of the public key of the certificate in question (this needs to be exported in base64 format).

Option 2: automatically trust all certs without verification

  1. Edit the ldap.conf file to include only the line TLS_REQCERT never

After making the required changes, restart your web server.

12.14. Blackbox ADLAD Error on PHP 7.4+

When using the adldap library for blackbox authentication with php 7.4+ the adLDAPUsers.php file needs to be updated for compatibility. In custom_code\classes\adLDAPUsers.php find this line:

        for ($i=0; $i <strlen($password); $i++){ $encoded.="{$password{$i}}\000"; }

and change it to:

        for ($i=0; $i <strlen($password); $i++){ $encoded.="{$password[$i]}\000"; }

13. HelpSpot Hacks

13.1. Converting Attachments from Database Storage to File System

HelpSpot allows the option to save all request file attachments in the database. This makes for easy backups. However, on some high volume installations or installations which deal in many large attachments it's better to save the attachments to disk to prevent the database from becoming unwieldy.

Moving to File System Storage

  1. Create a directory to store attachments in. This directory should be outside the web root and writable by the web server.
  2. In Admin->Settings->System change Attachment Storage Location to "Server File System"
  3. In the box that appears (Attachment File System Directory) put the full path to the directory you created
  4. Save the settings

Converting Database Stored Attachments to the File System

HelpSpot 4.0+

By default, after the change above HelpSpot will store new attachments to the file system, but old attachments will continue to be stored and served from the database. On version 4 and greater you can use the HelpSpot command attachments:tofile 

HelpSpot 3

If you'd like to convert these old attachments on HelpSpot version 3 to the file system you can use the script linked below do to so. To use the script:

  1. Download the script below, move it to the root HelpSpot folder. This is the one with config.php in it. If using FTP to move the file be sure to force binary mode.
  2. Backup your database (seriously)
  3. Place HelpSpot in maintenance mode to prevent new requests while the script runs (Admin->Settings)
  4. From the command line do "/path/do/php -f /path/to/convert_attach_from_db_to_file.php"
You can run it from the browser if you have no choice, though you may have to restart it from time to time if the web server times out. Note that the file may take hours to run if you have a lot of attachments.
 
Link to script on github https://github.com/helpspot/HelpSpot-Convert-Attachments-to-File-System
 

13.2. Changing Custom Field Lengths

Custom field lengths at the database level are only editable on creation within the user interface. If changes to field size need to be made after creation, these changes must be made at the database level. These instructions are specific to the Text Field type. Note that the following instructions can be destructive (resulting in the truncation of data) if you are reducing field lengths. Because of this, it is recommend to make a database backup before performing these operations.

MySQL

  1. Change the size of text field in the user interface via the custom field setup area (Admin > Custom Fields)
  2. Note custom field ID in this interface.
  3. Access your helpspot database and run this query to change your field size. 
// Replace 'Custom1' with the associated ID for your custom field and replace VARCHAR(25) with the appropriate length.
ALTER TABLE HS_Request MODIFY Custom1 VARCHAR(25); 

SQLServer

  1. Change the size of text field in the user interface via the custom field setup area (Admin > Custom Fields)
  2. Note custom field ID in this interface.
  3. Access your helpspot database and run this query to change your field size. 
/****** Drop the current index on the custom field ******/
DROP INDEX [hs_request_custom1_index] ON [dbo].[HS_Request] GO
/****** Alter the column length ******/
ALTER TABLE [dbo].[HS_Request]
ALTER COLUMN [Custom1] [nvarchar](80) NULL
/****** Rebuild index on the custom field ******/
CREATE NONCLUSTERED INDEX [hs_request_custom1_index] ON [dbo].[HS_Request]
(
	[Custom1] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO

13.3. Search Request History by Customer Email

This template adds the ability for customers to search for their past requests by entering their email address rather than an access key. Searching by email will give them a complete list of all requests ever submitted by that email address. Note that this is completely insecure by default. However, it would be possible to tie the search into an active directory login or LDAP user in order to make it secure, though this template does not provide the code for that integration.

 

13.4. Delete SPAM Without Training Filter

Some customers have very high SPAM counts and cannot delete it all conveniently via the web interface. They no longer need to train the SPAM filter with every SPAM since it's already catching them.

This script will delete all references to any requests currently marked as SPAM without training the SPAM filter. This is a destructive script. It will permanently delete requests and if any real requests are accidentally marked as SPAM when this script runs they will also be deleted.

Instructions for V4 and above

  1. Follow these instructions to access the helpspot command line tool
  2. Use the command: php hs request:delete-spam

Instructions for V3.2.12 and below

  1. Download the delete_spam.php script below
  2. Place the script on your server. It's recommended you run it from the command line and place the script outside the web root so that outsiders cannot run it
  3. Make sure the 2 includes() at the top of the file have the correct paths to the files they're including
  4. Run the script, usually something like: /usr/local/bin/php -f /path/to/delete_spam.php

13.5. Hidden Settings

Several settings are available in HelpSpot that are not part of the user interface in the admin area. These settings are advanced and should only be used if you know they are needed.

Config.php Settings

  • Secure MySQL Connections - Some MySQL setups, especially on remote servers, require a secure client connection. Adding the line below to you config.php file will force HelpSpot to connect securely. Should be used only if you know it's necessary.

    define('cMYSQL_CLIENT_SSL',true);

  • Additional SMTP Security Settings (Version 4.6+) — Some SMTP connections require a specific version of TLS in order to connection properly. Adding this setting will enable additional options on the SMTP setup screens in the admin area.

    define('cEXTRASECURITYOPTIONS', true);

HS_Settings Table

In the HS_Settings table, the items below relate to rows in the sSetting column. Updating the tValue column in rows where sSetting matches the values described below.

  • cHD_BAYESIAN_PROB_SPAM and cHD_PORTAL_BAYESIAN_PROB_SPAM - The probability value an email or portal post must be above to be considered spam.
  • cHD_LIVEREFRESH_TIME - How often in seconds the Live Refresh of the Workspace refreshes the filter currently being viewed.
  • cHD_SAVE_DRAFTS_EVERY - How often in seconds to save drafts of requests notes while on the request screen.
  • cHD_IMAGE_THUMB_SIZE - Size in pixels of image thumbnails created for the request history.
  • cHD_DISABLESHORTCUTS - Change to 1 to disable shortcut commands from being replaced in notes (these are r: k: f: which create shortcuts to requests, KB's and forums respectively)
  • cHD_IMAGE_THUMB_MAXBYTES - The number of bytes an image can be before HelpSpot will stop attempting to create a thumbnail version of the image in the request history.
  • cHD_TAKEIT_DOCHECK - The "Take It" button column in filters by default will check to see if a request is already assigned and if it is, show an error not allowing the clicking user to take the request. This setting allows a change in this behavior where the clicking user will always be assigned the request, no check will be done.
  • cHD_SAVE_LAST_SEARCH - The number of seconds a search done in the search tab is saved for so that when you return it's still there ready to be modified. Defaults to 1200 seconds (20 minutes).
  • cHD_FILTER_COUNT_CACHE - The number of seconds to cache the counts for each filter on the workspace screen. Defaults to 300 (5 minutes). Lowering this value is not recommended. If you need to exclude a particular filter from the cache that can be done under the advanced options for that filter.
  • cFORCE_MERGE_LOCKING - (MySQL ONLY) - force the database to lock all request related tables while merging requests. You should only enable this if you have a good performing server stack for HelpSpot (and plan to keep it that way as HelpSpot grows). If you're on shared hosting or running a large installation on a small server configuration turning this on can cause performance issues due to database contention.
  • cHD_DISABLE_GRAVATAR - Disable gravatar images and always fall back to the default supplied by HelpSpot.
  • cHD_MAX_REQUEST_HISTORY  Set the max number of request history entries that is allowed for any one request. Default is 1500.

13.6. Redirect HTTP Requests to HTTPS

IIS

Note you must have an SSL certificate properly installed and https bindings set up properly in IIS before completing these steps. In addition be sure to edit the APP_URL variable in your .env configuration file for HelpSpot to reflect the https:// url. 

  1. Install the rewrite module in IIS following these directions http://www.iis.net/downloads/microsoft/url-rewrite
  2. Open the IIS Manager and navigate to the site that your helpspot instance is installed on.
  3. Select URL Rewrite and add a new rule.
  4. For the pattern to match input the regular expression.*
  5. Add a new condition that checks if {HTTPS} is off

  1. For the action choose to redirect to https://{HTTP_HOST}/{R:0}

You site should now redirect urls that are http:// to https://

13.7. Trigger-Based Auto-Replies

Although not a part of the New Request Loop Protection settings, Trigger-based Auto-Replies can be set up to automatically reply to customers when a request is created, so the auto-replies only get sent for new incoming requests which don't contain the Request ID appended to the subject line. The advantage of trigger-based auto-replies is that you can add extra conditions to enhance functionality. 

For example, you could define two triggers to send different auto-reply text to customers contacting you via two different Email Mailboxes. You can also add conditions to the triggers which exclude sending auto-replies to inbound new messages from senders containg "noreply" or "no-reply" in the email address. You can even set up a separate trigger to immediately trash incoming requests received from "noreply" or other specific email accounts.

Things to keep in mind if electing to create trigger-based auto-replies:

  • Trigger-based auto-replies don't preclude the need for New Request Loop Protection configuration.
  • Users electing to set up trigger-based auto-replies should disable mailbox-level auto-replies (at least on mailboxes configured within the trigger conditions) to prevent customers from receiving duplicate new request notifications.
  • The message content for trigger-based auto-replies is defined in the trigger actions, rather than in the Auto-Reply email templates associated with particular Email Mailboxes.
  • Because trigger-based auto-replies get their message text from trigger actions, the message text passes through the Public Notes to Customers Email Template (or External Notes Email Template), expanding in the location of the {message} placeholder within the respective template's definition.

Patches

1. HelpSpot 4.9.5 Patch

To apply this patch:

  1. Verify that you are using HelpSpot 4.9.5 in the web Admin page.
  2. Navigate to helpspot/portal under your HelpSpot installation directory.
  3. Replace logic.php with the download included on this page.

2. Version 3.1.8

Bug on PHP 5.4 using IonCube on 64bit Linux

This bug is a problem with the IonCube loader for 64 bit linux for PHP 5.4 only. They'll be releasing updated loaders soon, but until then if the latest loader is 4.2.2 you should update to the one attached below or you could experience problems with filters and automation rules.

To apply simply download, unzip and overwrite the loader of the same name with this one.

Bug #235

  • Updated By filter condition could show incorrect results

Fix:

This patch fixes the issue

Installation:

  • Download the file below for Zend or Ioncube as appropriate for your installation
  • Overwrite file of the same name in /helpspot/lib/ and /helpspot/pages/ as in the download

Bug #234

  • Full text searches bypass the in category check when using limited access mode permissions

Fix:

This patch fixes the issue

Installation:

  • Download the file below for Zend or Ioncube as appropriate for your installation
  • Overwrite files of the same name in /helpspot/lib/

3. Version 3.1.7

Bug #224

  • Magnifying glass doesn't work in Live Lookup with multiple matches

Fix:

This patch fixes the issue

Installation:

  • Download the file below
  • Overwrite files of the same name in /static_3.1.7/js/

Bug #231

  • Filters that show the last public note cause a 500 error when there are 0 matches for the filter

Fix:

This patch fixes the issue

Installation:

  • Download the file below for Zend or Ioncube as appropriate for your installation
  • Overwrite file of the same name in /helpspot/lib/

4. Version 3.1.6

Bug #143

  • In rare cases a portal login could cause MySQL CPU to jump to 100%

Fix:

This patch fixes the issue

Installation:

  • Download the file below (for either the IonCube or Zend encoded version)
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Move/overwrite files of the same name in /helpspot/lib/

Bug #155

  • IE did not show button to spellchecker in wysiwyg

Fix:

This patch fixes the issue

Installation:

  • Download the file below (for either the IonCube or Zend encoded version)
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Move/overwrite display.lib.php in /helpspot/lib/
  • Move/overwrite HelpSpotSpellchecker.php in /helpspot/static_3.1.6/js/tiny_mce_3432/plugins/spellchecker/classes/

Bug #153

  • Full text search sort order could be incorrect

Fix:

This patch fixes the issue

Installation:

  • Download the file below (for either the IonCube or Zend encoded version)
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Move/overwrite files of the same name in /helpspot/lib/

5. Version 3.1.5

Combo Patch 1 for Bugs #105, #108, #109, #110

  • Error lib could throw PHP error if DB connection fails
  • Name menu (top right of admin) couldn't be clicked on iPad
  • Live Lookup when run from a trigger/rule didn't send correct query parameters
  • Pipe character (|) in reporting tag name broke some reports

Fix:

This patch fixes the issues

Installation:

  • Download the file below (for either the IonCube or Zend encoded version)
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Move/overwrite files of the same name in /helpspot/lib/

6. Version 3.1.1

Bug #74

MSSQL installations could not show the instant search selection list for knowledge book tags

Fix:

This patch fixes the issue

Installation:

  • Download the file below (for either the IonCube or Zend encoded version)
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Move/overwrite api.lib.php into /helpspot/lib/

Bug #94

Using a trigger which sends an email can cause an error if the trigger is triggered on the portal

Fix:

This patch fixes the issue

Installation:

  • Download the file below (for either the IonCube or Zend encoded version)
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Move/overwrite logic.php into /helpspot/portal/

7. Version 2.7.2

ReCaptcha

Google recently turned off their legacy ReCaptcha URL's, if you use HelpSpot over HTTPS this will break your ReCaptcha. To fix this issue simply download the latest ReCaptcha library from this URL:

http://code.google.com/p/recaptcha/downloads/list?q=label:phplib-Latest

Overwrite the exiting file in /helpspot/lib/recaptcha/ and that should fix the issue.

Bug 1529 & 1530

Fixes several reporting bugs with daylight savings time, overrun dates and time events when reporting on a single day.

Fix:

This patch fixes the issue

Installation:

  • Download the file below (for either the IonCube or Zend encoded version)
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Move class.reporting.php into /helpspot/lib/

8. Version 2.7.0

Bug 1372

CSV output for Speed to First Response report does not take business hour selection into account

Fix:

This patch fixes the issue

Installation:

  • Download the file below
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Move excel.php into /helpspot/pages/
  • Move class.reporting.php into /helpspot/lib/

9. Version 2.6.3

Bug 1080

RSS feeds can contain HTML tags in RSS title tags under some conditions

Fix:

This patch makes sure HTML tags are stripped from the RSS feeds

Installation:

  • Download the file below
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Move feed_filter.php into /helpspot/pages/

Bug 1088

Person list in time tracker includes inactive staff when it should not.

Fix:

This patch removes inactive staff from the list

Installation:

  • Download the file below
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Move request.php into /helpspot/pages/

Bug 1104 & 1263

1104: When uploading multiple files via API in private.request.update all but the first will fail

1263: Reporting tags can not be added via private.request.create in some cases

Fix:

This patch fixes the bug so all files upload correctly and reporting tags can be added.

Installation:

  • Download the file below
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Move class.api.private.php into /helpspot/lib/

Bug 1231

The special "additional" portal hidden field does not work when the portal form is set to use the simple format.

Fix:

This patch fixes the bug so the additional information is captured

Installation:

  • Download the file below
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Move logic.php into /helpspot/portal/

10. Version 2.6.0

 

Bug 974

This bug causes an insecure content message in Internet Explorer when HelpSpot is running over HTTPS.

Fix:

This patch fixes a file path in one of the javascript libraries to prevent this message.

Installation:

  • Download the file below
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Move class.cache.statis.php into /helpspot/lib/
  • Move prototip.js into /js/prototip/js/
  • Login to HelpSpot and change the URL to admin.php?clearcache to clear the javascript cache

 

11. Version 2.4.7

Bug 561

This bug causes emails forwarded into HelpSpot which only have a name in the forwarding information and not an email address to incorrectly set the customer email address in HelpSpot.

Fix:

This patch makes HelpSpot ignore the forwarding information if an email address is not in the forwarding information.

Installation:

  • Download the file below
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Both files overwrite files of the same name in /helpspot/lib/

Bugs 623 and 624

These bugs affect the public API. 624 caused the array of files to be returned directly in the request history. The patch creates a tag for files and files are contained within that so that most XML parsers return an array of files.

623 prevented files from being uploaded into a request with an update. 

 

Installation:

  • Download the file below
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Both files overwrite files of the same name in /helpspot/lib/

Bug 631

This bug causes the portal black box system to not allow logins even with valid credentials.

Fix:

This patch fixes this issue.

Installation:

  • Download the file below
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • The logic.php overwrites a file of the same name in /helpspot/portal/
  • The class.api.public.php overwrites a file of the same name in /helpspot/lib/

Bug 627

This bug causes an unusual number of emails to get stuck and stuck email notifications to appear in the Workspace.

Fix:

This patch fixes an issue with the spam check system that causes this issue.

Installation:

  • Download the file below
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • The file overwrites a file of the same name in /helpspot/lib/

 

Bugs 629 and 639

Bug 629 is a display bug where non-email requests show a subject line in filters.

Bug 639 is a bug in the private.request.search API method that prevents a tNote from being returned with the search results.

Installation:

  • Download the file below
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • All files overwrite files of the same name in /helpspot/lib/

Bug 821

Knowledge book pages that have embedded flash movies which have been uploaded to HelpSpot (not directly linked outside of HelpSpot) fail to play for portal visitors in FireFox/Safari when using Flash 10.

Fix:

This patch changes the HTTP headers so that the video's play

Installation:

  • Download the file below
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Overwrite the file of the same name in /helpspot/pages/

Improvement 607

Dramatically improves speed for filters based on reporting tags and several other conditions.

Installation:

  • Download the file below
  • Unpack on the server if possible. If not and you must use FTP to move the file be sure to force binary mode in the FTP client
  • Overwrite the file of the same name in /helpspot/lib/

 

Release Notes

1. Upgrading - Redirect

Upgrade documentation has moved for HelpSpot 5. Please visit: https://support.helpspot.com/index.php?pg=kb.chapter&id=95

2. New Release Notes Location

Release notes are now located at https://helpspot.com/releases. Please update your bookmarks.

3. Version 4.0.30

Release notes now found on:

https://www.helpspot.com/releases

4. Version 4.0.29

Bug Fixes

  • Fixed issue in output of secondary portals which included an invisible null byte character in the output for the config.php file, resulting in hard to diagnose php errors
  • Fixed an issue where email subject lines could get stripped out under certain conditions related to email character set and multipart settings

5. Version 4.0.28

Enhancements

  • Added an index on session table for users with large numbers of sessions

Bug Fixes

  • Fixed bug where OOO checks in conjunction with round robin auto-assignment within a category could result in a single person getting more requests than they should
  • Certain characters for database passwords in SphinxSearch configuration file escaped
  • Fixed issue where non-multipart emails required converting Subject line to utf-8 encoding (Otherwise resulting in an error when inserting into SqlServer databases)
  • Updated export of csv files to be more compatible with Excel when using special character
  • Fixed issue where filenames of a file/attachment being downloaded containing path separators or "%" characters generated an error

6. Version 4.0.27

Bugs

  • Fixed bug where admin editing a Response changed owner of the response to themselves
  • Fixed issue where SMS notifications were not sent on staff notifications (to staff added to "Notify Staff" section when editing a response)
  • Fixed issue where FULL REQUEST HISTORY email template tag may not have included the most recent note on staff notifications 

Enhancements

  • Security Improvements
  • Admins can change owner of a Response
  • Responses no longer paginated, as it provided an issue for customers with large numbers of responses

7. Version 4.0.26

Reverted an update from 4.0.25 which caused multiple triggers that should normally fire against a request update may to potentially not fire

8. Version 4.0.25

Bug Fixes

  • Fixed missing ##name## replacement in the notify staff on a request email. 
  • Fixed incorrect message that said "Opened via Portal" when a customer reopened a request through replying by email. 
  • Fixed a bug when updating from HelpSpot 3 to HelpSpot 4 where a MySQL databaes connection may be made incorrectly, resulting in an error during update
  • Fixed bug where converting request to public or private note would result in raw HTML being displayed

Enhancement

  • Multiple triggers will test result of previous trigger ran rather than original data

 

9. Version 4.0.24

Bug Fixes

  • Fixed a bug introduced in 4.0.23 where editing a custom field could mistakenly set it's maximum length to "1"
  • Fixed a bug where subscribed staff may not be notified on a new, unassigned request
  • Fixed a bug where users set as Out of Office may be mistakenly selected if they are within a round-robin assignment within a default category

Enchancements

10. Version 4.0.23

Bug Fixes

  • Staff subscribed to a request now get notification emails even if "send notifications via email" is unchecked. To stop emails they need to unsubscribe from the request.
  • Fixed issue with extra field dates and utf8 languages.
  • When using the keyboard shortcut to search the input wasn't getting cleared out. 
  • Removed a double line break with signatures in HTML email. 
  • Fixed an issue with the WYSIWYG editor inserting response placeholders as headings. 
  • Fixed issue where MySQL client may incorrect fallback to latin1 character set instead of utf8/utf8mb4 on Linux
  • Fixed an issue during upgrade where email headers may not be parsed correctly
  • Fixed overflow in note history with non-breaking strings.
  • Fixed sanitization on portal pages.
  • Fixed portal category grouping option in portal template code.
  • Prevent browser from autocompleting username and password when editing staff members.
  • Removed unneeded br tag that was inserted before email signatures 
  • Fix calendar display for foreign languages
  • LiveLookup grid results now overflow with a horizontal scroll bar.
  • Time Tracker is now more accurate even when in a background tab.

Enhancements

  • Improvement in SphinxSearch delta indexes. If you would like, after updating, you can re-generate your Sphinx configuration file using the search:config command.
  • Added group by Category option to the Time Tracker Over Time report.
  • The HelpSpot logo now look better on retina screens

11. Version 4.0.22

Bug Fixes

  • Fixed issue when clicking "done" after reordering triggers in IE11. 
  • Removed "now viewing" when opening a request in peek view.
  • Fixed issue where a slash "/" in the mailbox password would give an error response. 
  • Resolved Windows updater issue when updating from 3.2.12 to 4.0.21 where custom fields may not be re-created correctly

 

Enhancements

  • Live lookup HTTP requests can use user-defined query strings, e.g. example.com?foo=bar
  • Added a new hs command: request:delete to delete a single request
  • Added a new hs command: request:delete-spam to delete all spam currently in the spam queue
  • Custom Connection (Admin > Settings > System > Customer Connect) UI option added to control diagnostic reporting

12. Version 4.0.21

Internal Changes

  • When an email comes in with only a single name in the email header we now treat that name as the first name rather than the last name.

Bug Fixes

  • Fixed round-robin assignments going to deleted staff
  • Fixed issue where blank SMS notifications may be received
  • Fixed issue where plaintext emails may be marked has html in email headers
  • Fixed bug where attachments/files may not be retrieved from the filesystem or SqlServer correctly
  • Fixed issue where replying to staff notifications set the response to private.
  • Fixed filenames for download that may not have ascii-only characters
  • Fixed issues where email replies may mistakenly be marked as private
  • Changed WYSIWYG to not attempt to change URLs, which affected Windows local file paths
  • When editing staff account ensure the secondary email is entered when checking send notifications to secondary email. 
  • If sending a reply fails reopen the request and show the error.
  • Fixed address book issue where clicking a letter wouldn't scroll to the correct location. 
  • Fixed database error when sorting reminders.
  • Fixed issue with API kb searching setting the wrong root tag if Sphinx installed.

Enhancements

  • Added the ability to turn off gravatar photos. See the hidden settings page for instructions.
  • Text Custom fields now use the number entered as the column size. 
  • Admin now requires you to confirm the email address when editing a user 
  • Updated database library for usage with Windows installer upgrade, which uses PHP 5.6 (as of 4.0.20) and related SqlServer drivers

 

13. Version 4.0.20

Enhancements:

  • Email sending library replaced with more modern library, resulting in better error messages and SMTP support
  • MySQL can connect to servers in alternative ports using hostname format `hostname:port`, e.g. `127.0.0.1:3306`
  • Minor improvements in Advanced Search searching tips
  • Windows installer updates PHP to PHP 5.6, which has official support until 2019. (Note that HelpSpot is not yet tested on PHP 7 yet)

 

Bug Fixes:

  • Fixed issue where stored incoming email headers may have incorrectly been stripped out when viewing in admin area
  • Fixed instances where public replies from staff to customers from their email client did not get added as a public note
  • Portal image styles (defaults) tweaked, adding max-width
  • Fixed IE cache bug, overly-eager at caching
  • Fixed issue with placeholder replacement when using a url that is different than cHOST.
  • Fixed issue with html all on one line being stripped. 
  • Removed "take it" button from closed unassigned requests.
  • Fixed issue where Sphinx configuration did not pull in create date of items from Request History, resulting in relevant search results being pushed to the bottom of results
    • We recommend re-generating your Sphinx configuration file
  • Fixed local storage saving when editing existing requests.
  • Fixed issue where mysql host in format of `hostname:port` generated incorrect Sphinx configuration
  • Fixed issue where Safari and iOS could not play .wav files (commonly emailed into HelpSpot as voicemails)
  • Fixed bug where email message ID may not be correctly added to an outgoing email (affected replying to a customer directly from email client)

14. Version 4.0.19

 

Fixes

  • Remove backslashes "\" from drop down lists custom fields.
  • Allow target="_blank" in links created from WYSIWYG. 
  • Fixed issue where IE was too aggressive in caching pages.
  • Adjusted email parsing to account for signatures that had weird formatting. 

15. Version 4.0.18

Enhancements:

  • Tasks now also checks and deletes old error logs and filter performance metrics, helping reduce database size over time

Bug Fixes:

  • Fixed issue where grand-fathered Unlimited licenses were incorrectly reported as invalid during update to HelpSpot version 4
  • Fixed issue for Windows users on Apache, where openssl and curl PHP binaries did not function correctly (loaded old files from Apache installation over the correct PHP dll files)

16. Version 4.0.17

Enhancements

  • Add ability for email templates to include "tel:" and "sms:" links.
  • Added "Next 7/14/30/90/365 Days" to date conditions in filters and rules
  • Options to connect to MySQL via SSL
  • Security Improvements

Fixes:

  • The closing date wasn't being set when creating a brand new request and closing it.
  • In the portal, inline image attachments pointed to the wrong location. 
  • Fixed tabindex on the request screen for drill down extra fields.
  • Improved the performance of the filter management admin screen
  • First Response Speed (biz hours) in filters had incorrect time.
  • Validation check to prevent using the same email for mailboxes and staff. 
  • Fixed opening image attachments in a modal window on closed requests.
  • Updated HelpSpot Windows installer to fix issue where customers on alternate drives (not the C:\) had issues updating. 

17. Version 4.0.16

Enhancements

  • Added "Urgency" condition to Triggers, to test if a request is (or is not) urgent

Fixes

  • Fixed issue where popup blockers prevented viewing a knowledge book in the portal from admin. 
  • Fixed issue where business hours was defaulting to "45 minutes", if you entered 8:00 it would show 8:45. 
  • Windows install bug fixed for Windows customers using MySQL that was not bundled with HelpSpot. The installer assumed MySQL customers were using bundled MySQL's.
  • Fixed issue when adding time to a request the log would get cleared out until you refreshed. 

18. Version 4.0.15

Enhancements

  • Added a Safari pin icon. In Safari, right click on your HelpSpot tab to pin HelpSpot to your tab bar.
  • Mailbox ID's are now included in email errors

Fixes

  • Fixed issue where the last public note wasn't showing in filters.
  • Fixed bug where filter/mail rule condition field ID's not always random

Notes:

  • Version 4.0.14 fixed a security vulnerability, it's recommended you update to the latest HelpSpot
  • Users of HelpSpot 3 (versions 3.1.1 - 3.2.12) can download a patch file within https://store.helpspot.com

19. Version 4.0.14

Bugs

  • Security improvements
  • Official release (non beta) of bug fixes from version 4.0.13

20. Version 4.0.13

Bugs

  • KnowledgeBook search results had no ID in URL of results
  • Fixed issue where local storage wasn't being cleared after creating a new request.
  • Updated Live Lookup to filter out HTML email content fields, which were received when automating Live Lookup through triggers
  • Fixed issue where SqlServer customers, in particular using German language, were seeing garbled character sets (especially on umlaut's).
  • Fixed issue where MySQL customers may have garbled filters during update to version 4 (usually coinciding with a mismatch when storing as UTF-8 but setting the connecting client as latin1 or latin2 character sets).
  • Actually, for realsies, fixed issue of php.ini's date.timezone setting (or lack of setting) generating an invalid license error on update. Seriously, I think we got it this time.

21. Version 4.0.12

Bug Fixes

  • Resolved issue where the initial request column in the workspace had weird character spacing.
  • Resolved issue with the selected state of select fields.

22. Version 4.0.11

Bug Fixes

  • Resolved issue where select drop down option value incorrectly parsed when it had integer values
  • Resolved issue where some customers experienced using HelpSpot commands where a PHP class was not found

23. Version 4.0.10

Features

  • Drafts are now saved automatically to the browsers localstorage for new requests, where supported

Bug Fixes

  • String vs number values in custom fields (leading/traililng 0 issue)
  • Notifications may have failed to be received due to being flagged as duplicate by mail servers
  • Fixed issues for PostgreSQL database during updates
  • Fixed issues where customers with large number of custom field ran into MySQL error due to limit of 64 indexes per table

24. Version 4.0.0 - 4.0.9

HelpSpot Version 4 Changelog (July 21, 2015)

Upgrade Documentation - Note upgrading requires you be on HelpSpot 3.2.12 first.

Major Features:

  • HelpSpot Cloud - Hosting for HelpSpot provided by Userscape
  • Native iOS/Android applications
  • True multi-lingual support (UTF-8 character set support)
  • Better search via SphinxSearch search engine
  • See https://www.helpspot.com/new for more!

Additional features:

  • Sidebar can search request history.
  • Added user option - User can decide to make sidebar search full history by default
  • Modified attachment handling so they are not lost when switching between public/private/external.
  • CLI Commands now supported in HelpSpot!
    • attachments:tofile - Save database attachments to the filesystem
    • convert:base - Convert helpspot 3 database to helpspot 4 database
    • convert:requests - Convert requests to UTF8 for helpspot 3 to 4 update
    • search:config - Generate configuration for Sphinx serach engine
    • update - After installing new HelpSpot files, run this command to update HelpSpot, useful for automating the update process
    • db:exists - Test if HelpSpot database (as configured in config.php) exists and has HelpSpot data within it
    • reset:email-templates - Reset email templates to "factory defaults"
  • Improved the markdown handling
  • Ability to add attachments to responses.
  • Added replying to notifications as public responses back to customer
  • API error responses for merged requests now returns the request ID of the correct request. Developer Note: API errors can now return meta data about the request $this->_error(208, '', ['field_name' => 'some_value']);
  • Added additional email loop protection - HelpSpot ensures it is not emailing itself
  • Added private.meta - api call for getting basic details on the installation
  • Added private.util.getAllStaff - gets all staff ever in the install
  • Added private.util.getStaffPhoto - base64 of staffer image. Expects xPerson passed in via get
  • Viewing of closed requests now tracked and displayable
  • Improved display of currently viewing. Now shows in the workspace grid.
  • Added grouping by customer id and customer email to requests over time and total over time reports
  • Support for Outlook's [mailto: example@domain.com] format in forwarded emails.
  • Filter has new "last update by" column, to show if last update (of any kind) was done by staff, the system or a customer.
  • Custom fields of type date or datetime in email defined as ##hs_custom<fieldid>:1234567890## can now parse human-readable dates, such as: ##hs_custom<fieldid>:11/13/1984 11:59:00## (the date format there can vary greatly and still be parsed accurately).
  • Added LDAP library that's easier to use for Authentication and Live Lookup.
  • Added private.request.markRead and private.request.markUnRead (only usable for requests assigned to the user)
  • Implemented Google's latest reCAPTCHA on public portal
  • Added private.request.markTrash - mark a request as trash
  • Added private.request.markSpam - mark a request as spam
  • Removed fTrash flag option from private.request.create and private.request.update 
  • Added skipCustomChecks to private.request.create and private.request.update - allows custom field checks to be skipped
  • Added private.response.listAll - returns a list of all responses
  • Added private.response.usersMostCommon - returns the top 10 responses used by a user
  • Added private.response.get - returns a response
  • Added webhooks to triggers and automation rules (need to document sample of what's POST'd perhaps in api docs?)
  • Added ##hs_request_id:012345## email parser tag to assign update to an existing request ID, useful if automated systems (e.g. eBay support) strips out the {12345} request ID tag from the subject line
  • Removed spellcheck module in TinyMCE wysiwyg in favor or browser-based spellcheck. All modern browsers now support this (including IE10+).
  • Live Lookup now expects your xml to be in UTF-8.

Bug Fixes:

  • Fixed users not receiving email on new, un-open requests.  
  • Fixed dtGMTClosed date when setting fOpen = 0 via api - 
  • Fixed a bug where clicking a predefined response parent folder would send the user to /null - 
  • Fixed a bug when activating a previously de-activated trigger with a quote in the name would trigger a js error. - 
  • Fixed a bug where some API calls that error could dump out invalid XML. 
  • Fixed word break in request history for IE9 - NOTE: Need to document the portal templates css change - 
  • Fixed the html to text conversion when quoting. 
  • Fixed bug when calculating minutes in reports.
  • Fixed bug where multiple space-separated names in ##hs_customer_firstname## and ##hs_customer_lastname## email tags weren't parsed correctly. For example fname: herbert walker and lname: bush would turn into fname: herbert and lname: walker bush.
  • Fixed bug where trigger notifications to staff included incorrect REQUESTCHECKURL value 
  • Fixed bug with advanced tags encoding 
  • Fixed bug where setting batch status to active wouldn't reopen the request. 
  • Fixed xss issue with customer information and extra fields. 
  • Improved on styling for minor issues
  • Improved cache handling for images retrieved behind authentication
  • No longer url-encoding mailbox folder (INBOX and subfolders) so customers can include sub-folder mailboxs such as INBOX/helpspot.
  • Fixed KB title to be converted to htmlentities on save. 
  • Fixed cdata in multiple results of LL 
  • Fixed toggling of tags in responses 
  • Fixed ability to set out of office forwarding to yourself. Basically anyone except the current staff you are editing. 
  • Fixed issue where if you was subscribed to two tickets and later they became merged. You were subscribed twice. 
  • Force logout users when marking them as inactive from admin.

25. Version 3.2.12

Version 3.2.12 Change log (July 9th, 2014)

  • Improved update in WYSIWYG to result in improved button layout for users who have not customized the WYSIWYG button layout previously. Will only affect users updating from 3.2.10 or lower to 3.2.12.
  • Improved wording on instructions for WYSIWYG buttons.
  • Added "browser_spellcheck" option (if applicable) to WYSIWYG to allow browser-based spellchecking as per latest TinyMCE documentation
  • Fixed issue where running HelpSpot in an iFrame would not fully function when a URI-encoded entity was present for $_GET variables, used to fill out customer information.
  • Fixed issue in Triggers & Rules where stripping HTML out of search terms also stripped out email that were in format "FName LName <sample@email.com>"

For the latest WYSIWYG update (version 3.2.11 and higher), we suggest using a button format of the following when editing requests. This can be edited in Admin > Settings > HTML Email:

  • Button Row One: styleselect fontsizeselect | outdent indent | undo redo | code
  • Button Row Two: | bold italic underline strikethrough | link unlink | blockquote | bullist numlist | removeformat | pastetext pasteword | forecolor backcolor
  • Leave Button Row Three empty

These options will appear look like so:

...and will result in this layout:

26. Version 3.2.11

Version 3.2.11 Change log (June 18th, 2014)

  • NEW Inbox zero messages
  • NEW Wysiwyg for improved performance in all browsers
  • Responses used via the search for responses function weren't counted in the response usage report
  • Fixed issue with PHP 5.3 on installs missing mbstring not encoding some things correctly
  • Fixed repeating notes in the note stream
  • Fixed escaping of some characters in responses
  • Fixed ReCaptcha on HTTPS urls
  • Fixed a bug with Windows-Baltic encodings
  • Improved matching of the body text of emails when using 'contains'
  • Account Name placeholders were not properly set in automation based emails
  • Fixed bug where IIS based installations could not use Live Lookup via automation rules/triggers due to HTTP GET length
  • Fixed issue where inactive staff could be assigned requests via automation rules
  • Fixed issue where CC/BCC addresses on external notes would be added to public notes and have to be manually removed
  • Fixed users showing up more than once in the "viewable by" label on filters
  • Fixed bug where last insert id may not be returned correctly in some cases

27. Version 3.2.10

Version 3.2.10 Change log (January 24th, 2014)

  • Bug - Latest Chrome version (32) incorrectly set tooltip height
  • Bug - Some custom fields weren't deletable on SQL Server 2008+
  • Bug - Emails with certain unencoded characters could be cut off, resulting in missing content
  • Bug - Curly quotes and other special characters were converted to question marks instead of the correct standard character

28. Version 3.2.9

Version 3.2.9 Change log (December 26th, 2013)

  • New Feature - Added the ability to update requests as a customer via private.request.update
  • Bug - Grouping by contacted via in reports didn't show mailboxes correctly
  • Bug - Prevent sending notification emails in some cases to inactive users
  • Bug - Improvements for IE10 and IE11
  • Bug - Adjust wysiwyg to fix issue with nested lists in Outlook
  • Bug - Improve merge UI in workspace to include more information in drop down
  • Bug - Fixed issue where last selected request for batch merge would not be listed
  • Bug - Fix time tracker column display in filters
  • Bug - Batch responding with a response will now apply 1 usage for each batched reply rather than 1 total for the entire batch in response usage report
  • Bug - Fixed load more in inactive users
  • Bug - Fixed remove request button from batch importing UI
  • Bug - Fixed search for staff where it could be broken in some cases

29. Version 3.2.7

Version 3.2.7 Changelog (November 8th, 2013)

  • New Feature - Gravatars are now shown in request history for customers who have them
  • New Feature - Add ability to group reports by drill down custom fields.
  • Bug - Add validation to reminders to make sure a date is set before submitting
  • Bug - Fixed issue with some triggers not replacing the ##ACCESSKEY## correctly.
  • Bug - Fixed some html labels that didn't match up to the correct inputs.
  • Bug - Fixed issue with triggers not being called in API request.update
  • Bug - Fixed issue with reattaching an attachment with an apostrophe in the file name.
  • Bug - Fixed issue with category tags not working correctly if it contained a percent symbol.
  • Bug - Response folders were not respecting permissions
  • Bug - Fixed issue with grouping by year in reports
  • Bug - Adjusted the way drafts are saved.
  • Bug - In CSV export change the time tracker time to be in seconds.
  • Bug - Fixed issue with time tracker not escaping properly.
  • Bug - Hide the next / previous when opening the request modal from a sidebar search.
  • Bug - The keyboard shortcuts were not respecting the workspace view type.
  • Bug - Made Javascript includes work across http/https for mobile UI to prevent warnings

30. Version 3.2.5

Version 3.2.5 Changelog (June 24, 2013)

  • Bug - display of request subscribers was not working and adding errors to the error log.

31. Version 3.2.4

Version 3.2.4 Changelog (June 18, 2013)

  • Bug - Changed an internal setting that creates a hard lock on MySQL databases when merging requests. On low performance servers this created significant database contention. HelpSpot will no longer lock the request tables while merging. However, if you're on a database configuration with good performance for your HelpSpot installation size this can be re-enabled via a hidden setting.
  • Bug - Changed the embed shortcuts so they are less sensitive
  • Bug - In mobile UI remove inactive users from selection list
  • Bug - Remove subscribers when they are marked inactive.
  • Bug - Fixed admin -> mailboxes sorting by name
  • Bug - Fixed issue when clicking the attachment icon
  • Bug - Fixed double inserting a URL in the mail notes template
  • Bug - Fixed the trigger for "contacted via", "Now is", "Email"
  • Bug - Limited staff shouldn't get notification on new uncategorized requests.
  • Bug - Fixed support for german forwarded emails
  • Bug - Fixed time tracker person list should honor the limited to category setting.
  • Bug - Fixed report grouping by contacted via.
  • Bug - Adjusted the print stylesheet for the ticket
  • Bug - Fixed support for basic authentication on API/RSS feeds on fastCGI setups
  • Bug - Fixed bug where editing a reporting tag would create a new one rather the editing the existing ones name
  • Bug - Fixed issue with IE and the drill down list on the portal
  • Bug - Accented characters in custom field selection items cause reports to fail to load

32. Version 3.2.3

Version 3.2.3 Changelog (4/19/2013)

  • New Feature - Filter management and performance screen now available in Admin -> System -> Filter Management
  • New Feature - Filters that don't use a date range are now limited to the past year of results by default to improve poorly constructed filters. This can be adjusted in Admin -> Settings -> System or disabled there if desired. If you're seeing some tickets "disappear" after upgrading it's like due to this setting so you may want to extend the range to more days or disable.
  • Bug - Fixed several bugs with the Windows installer
  • Bug - Auto refresh in Workspace wasn't always refreshing correctly
  • Bug - Fixed several SQL Server errors and bugs

33. Version 3.1.9

Version 3.1.9 Changelog (1/30/2013)

  • Bug - Full text searches could bypass limited to category permission
  • Bug - Update By could return incorrect results
  • Bug - Embedded images have incorrect URL in the portal and API results
  • Bug - A bad character could break grouping by assigned user reports
  • Bug - A rule with more than one request push call fails after first
  • Bug - Live Lookup would not follow a URL redirect
  • Bug - Fixed SMS notifications on urgent requests
  • Bug - private.filter.get didn't honor user permissions
  • Bug - Fix Windows installer bug with LDAP PHP module
  • Update - TinyMCE wysiwyg
  • Update - PHP in Windows installer to 5.3.20

34. Version 3.1.8

Version 3.1.8 Changelog

  • Bug - Fixed error on filters which tried to show last public notes in a filter with 0 results
  • Bug - Fixed bug in Live Lookup where multiple result could not be viewed via magnifying glass icon
  • Bug - Adjusted session key storage size for some systems

35. Version 3.1.7

Version 3.1.7 Changelog

  • New - Support for unlimited user licenses
  • Change - The "Updated By" condition is now applied after the results of other conditions to enhance performance for it's more common use cases
  • Change - Windows Installer upgrades PHP to 5.3.15
  • Bug - Improved checking for empty fields in Live Lookup
  • Bug - A long line in an email could cause the outbound email to be truncated
  • Bug - Improved speed when selecting last public note for display in filters
  • Bug - Fixed Firefox 13 bugs
  • Bug - Fixed spellchecker default for Chrome/Firefox
  • Bug - Triggers would not check note type properly
  • Bug - Forums LatestTopics parameter in templates did not honor setting
  • Bug - Fixed error with SQL full text search
  • Bug - Passing an empty field to the API incorrectly caused the request creation to fail
  • Bug - A wrong URL was included in staff notifications
  • Bug - Character fixes to widget
  • Bug - When API's are off return HTTP code 400 rather than 200
  • Bug - In emails a bad character could cause data to be stripped
  • Bug - Widget background failed to close on Firefox
  • Bug - Fixed update and close on mobile
  • Bug - Knowledge pages didn't detect HTML content containing only HTML lists as HTML pages
  • Bug - Incorrect rounding of decimal fields in grid view
  • Bug - Long numeric only strings in a text custom field were rounded
  • Bug - Links to KB weren't properly linked in full public history placeholder
  • Bug - Fixed spellchecker on IE
  • Bug - Changed ordering of full text search results
  • Bug - Various wording changes
  • Bug - Request push could fail to return error information in UI
  • Bug - Bad data in a MySQL query could cause high load on the MySQL server

36. Version 3.1.6

Version 3.1.6 Changelog

  • Bug - Add admin username/password for built in LDAP authentication
  • Bug - The popup calendar would not work from the search page
  • Bug - Time tracker events report could fail to load
  • Bug - Non HTML notes sent in via the API displayed with HTML paragraph tags
  • Bug - Tag search on the portal could show a non-functional link to a hidden page of a public book
  • Bug - Triggers sending email could end up with a PHP error
  • Bug - private.request.create should not append a signature to a note when using xPersonOpenedBy=0 (customer)
  • Bug - Triggers with multiple actions could cause a PHP include error
  • Bug - MSSQL had an error with full text search using "is not" in a phrase
  • Bug - Triggers could not match custom field checkboxes
  • Bug - Triggers could fail to match changed conditions
  • Bug - Made response usage report more accurate and clear by removing filter option
  • Bug - Changed UI of public notes to customers template editing to notify but not request a request ID be included
  • Bug - Responses could fail to display properly for group user permissions
  • Bug - Live Lookup via a trigger could sent the wrong HTTP GET parameters to the Live Lookup script
  • Bug - The name menu (top right corner) could not be clicked on iPad
  • Bug - Emailing customers from an automation rule/trigger could fail in some cases
  • Bug - A pipe (|) in a reporting tag breaks the reports

37. Version 3.1.5

Version 3.1.5 Changelog

  • Bug - Triggers may not be executed in some scenerios when they should be
  • Bug - Fixed several character encoding issues
  • Bug - Title bar count didn't match total of the filter
  • Bug - Adjusted full text search ordering
  • Bug - Getting started tab didn't register custom reports
  • Bug - Open before/after filter condition didn't properly set time of day
  • Bug - SMS would not send from Automation Rule
  • Bug - Empty date custom fields would show today's date in workspace grid
  • Bug - Response search could show responses not in a users permissions
  • Bug - Name menu had to short a closing delay for iPad
  • Bug - Email headers would not display more than 1 of same header (like received)
  • Bug - Response search would show inactive messages
  • Bug - Triggers that generated emails from portal actions could have a PHP error
  • Bug - Portal query error for secondary portals with no KB's
  • Bug - Added more mime type extensions for attachments with invalid or unknown names
  • Bug - Emails in Windows-1257 character encoding could have characters dropped from email
  • Bug - Response folders could not display due to javascript error
  • Bug - Filter CSV should download all results
  • Bug - KB images may not display in secondary portal
  • Bug - Mobile ui shows inactive users in drop down
  • Bug - Fixed issue where custom pages were only for admin users
  • Bug - Time events report now has customer ID column
  • Bug - IE8 category selection javascript error

38. Version 3.1.1

Version 3.1.1 Changelog

  • 2127: Bug - My Queue read/unread image click improperly incremented
  • 2352: Bug - Triggers could miss some events such as reopens of requests
  • 2384: Bug - Fixed problems with links to requests after a left navigation search
  • 2386: Bug - Moved to using HTML5 audio plugin on supported browsers for inline audio attachments
  • 2388: Bug - Fixed "load more" on filters
  • 2391: Bug - Added groupings to Speed to Resolution report
  • 2395: Bug - Fixed inline image inserts on Webkit browsers
  • 2397: Bug - Address book could not delete contacts
  • 2401: Bug - Fixed issue with drop down lists in popup tooltips on IE
  • 2402: Bug - Fixed error where MS SQL Server could not delete custom fields
  • 2406: Bug - Fixed addition error on response usage report
  • 2412: Bug - Fixed error where filters listed above the inbox could show the wrong count
  • 2416: Bug - Permission groups without spam access could still see spam controls in some places
  • 2449: Bug - Fixed issue where automation rule could improperly reassign a request from an out of office user
  • 2450: Bug - Knowledge tag cloud search wouldn't show all results
  • 2476: Bug - Fixed time tracker report error
  • 2488: Bug - When adding a category custom fields now default to unchecked
  • 2498: Bug - Tag search when no forums exist caused an error on SQL Server
  • 2518: Bug - IE8 javascript errors
  • 2521: Bug - Inactive responses returned in response search on request screen

39. Version 3.1.0

HelpSpot 3.1.0

3.1.0 is the first production ready release of the version 3 series. See what's new in V3.

HelpSpot V3 and 3.1.0 in particular contain important new security features and enhancements. All users are encouraged to upgrade.

  • 2195: Feature - New password reset system for improved password security along with other password improvements
  • 2170: Feature - Added the ability to group requests by category reporting tags in requests over time report
  • 2183: Feature - Added next/back to closed requests
  • 2331: Feature - Added report for response usage
  • 2135: Feature - Added report for knowledge book helpfulness
  • 2188: Bug - Responses more than one folder deep would not appear in some permission setups
  • 2189: Bug - Added TO to LiveLookup address book search
  • 2191: Bug - Fixed various issues with IE7
  • 2206: Bug - Option to set custom field order was not visible
  • 2213: Bug - Improved pie chart colors on Todayboard
  • 2223: Bug - A trigger which checked a mailbox value caused an error
  • 2251: Bug - Improved public/private/external note visual indicators
  • 2277: Bug - A trigger could cause a PHP error on the portal in some cases
  • 2278: Bug - Re-attachments fail to be emailed
  • 2329: Bug - Knowledge tag cloud did not display on homepage under SQL Server
  • 2358: Bug - Fixed issue where printing pages did not use print stylesheet
  • 1635: Bug - Fixed issue where two triggers could conflict
  • 1807: Bug - Custom stylesheet now referenced in HTML emails
  • 2073: Bug - IE9 fixed report hovers
  • 2081: Bug - Made billable checkbox label clickable
  • 2086: Bug - Filter count didn't show in title when 0
  • 2087: Bug - Closed requests didn't display custom field information
  • 2088: Bug - Fixed installer to check for PHP equal to 5.3.0 rather than greater than 5.3.0
  • 2095: Bug - Fixed the display of several reports under Microsoft SQL Server.
  • 2098: Bug - Private books would show "link to" when they should not
  • 2100: Bug - File attachments were not accepted correctly via the API
  • 2106: Bug - Modal confirm notifications now defaulted for faster acceptance
  • 2113: Bug - RSS filters would not display complete content
  • 2115: Bug - Adding time tracker time on a new request left the date at January 1 instead of today
  • 2118: Bug - Secondary portals could not show helpful pages on homepage from more than one book
  • 2120: Bug - Restored ability to see Time Tracker entries on closed requests
  • 2141: Bug - Request history would be truncated in wrong place

40. Version 3.0.8 Beta

3.0.8 Changes

  • 1993: Feature - New reports: customer activity, response usage
  • 2019: Feature - Added "logged in user" as an option for assignment chain filters
  • 2031: Feature - Added billable checkbox to time tracker
  • 1906: Feature - Anonymous error submission system (setting in admin-settings-system)
  • 2032: Bug - Updated various wording
  • 2054: Bug - Files could not be deleted from KB's
  • 2063: Bug - Fixed issue where resized images could fail to be deleted and use disk space
  • 1902: Bug - Added check to protect system if new files are uploaded but installer.php is not run
  • 1905: Bug - Fixed various SQL Server errors
  • 2020: Bug - Changed calendar layout to be Sunday - Saturday
  • 2021: Bug - Fixed Windows installer which could fail to build scheduled tasks on Win 2003
  • 2028: Bug - Not all custom predefined list fields would display in Request Over Time report grouping option
  • 2030: Bug - Filter custom field columns that should show 0 would display blank instead
  • 2002: Bug - Added "serious mode" setting allowing phrases and other fun things to be disabled
  • 2001: Bug - Adjusted inbox zero phrases to only display sometimes to increase randomness
  • 2003: Bug - Removed the ability for extra emails on the TO line to be automatically converted to CC's (this caused to many issues with looping/self notifying)
  • 2018: Bug - Fixed/disabled WYSIWYG on iPad/iPad2
  • 1926: Bug - Date/Datetime custom fields did not work on portal
  • 1931: Bug - The Windows installer upgrading a V3 installation to a newer V3 installation could break fastcgi
  • 1933: Bug - Portal popup did not work in IE
  • 1934: Bug - Full text search failed on MS SQL
  • 1946: Bug - CSV exporting was not working for filters
  • 1951: Bug - Fixed ordering of filters in the Workspace
  • 1954: Bug - When a request email fails the staffer is returned back to the request screen to review
  • 1956: Bug - Don't allow creation of reminders in the past
  • 1959: Bug - private.request.get now marks external notes as such via a new tag that's returned in the note history items
  • 1960: Bug - Improved usability of public/private/external selector
  • 1961: Bug - Improved usability of Timezone selector box
  • 1962: Bug - Fixed default workspace setting
  • 1984: Bug - Improved request history load speed when first opening a request
  • 1991: Bug - Fixed some date/time formatting in reports
  • 1992: Bug - Several security related fixes and enhancements

41. Version 3.0.7 Beta

3.0.7 Changes

  • 1886: Feature - Added a new api call: private.request.subscriptions() to retrieve a users subscriptions (accepts xPerson via GET)
  • 1868: Bug - More than 5 API calls per minute under a single account would fail
  • 1888: Bug - Fixed problem with error due to unset timezone
  • 1892: Bug - Forum topics could fail to be created on SQL Server due to topic string length
  • 1893: Bug - Javascript reference error on login screen

42. Version 3.0.6 Beta

3.0.6 Changes

  • 1846: Feature - Live Lookup can now accept a label="" attribute on tags to set a custom title
  • 1849: Bug - Knowledge books could fail to insert an image path
  • 1850: Bug - PHP defaulting to output compression could cause CSS display errors
  • 1761: Bug - Calendar fields can now be updated and also reset to empty
  • 1841: Bug - Users could select themselves to forward to when out of office
  • 1842: Bug - Reporting tags could fail to be set by triggers and other automation
  • 1844: Bug - Time tracker didn't display on new request screen

43. Version 3.0.5 Beta

3.0.5 Changes

  • 1788: Feature - New preference to move to next request in a filter/queue on close
  • 1820: Feature - Inbox Zero "enhancements" (inspired by HS customer http://figure53.com)
  • 1830: Feature - Modified login system to only allow 5 attempts per minute per account
  • 1783: Feature - Added option to show results by hours & minutes in first response speed report
  • 1790: Bug - Made further adjustments for Google Pagespeed
  • 1803: Bug - Fixed counts in mobile UI
  • 1804: Bug - Fixed sidebar search for customer ID
  • 1805: Bug - SMTP error text showed in wrong location
  • 1806: Bug - Deleting spam in the forums would only delete one spam item at a time
  • 1810: Bug - Fixed re-attaching of attachments from history
  • 1811: Bug - Windows wouldn't list categories in custom fields
  • 1813: Bug - Changed permission groups to remove unnecessary permissions
  • 1817: Bug - Moved timetracker inline on the request screen from the left nav
  • 1821: Bug - Fixed bug where mailboxes using SSL based SMTP overrides (aka gmail) could not send email
  • 1822: Bug - Fixed bugs with special characters in reports
  • 1823: Bug - Fixed file downloads on KB pages in admin
  • 1824: Bug - IE CSS portal template would not be served for grey and blue portal themes
  • 1828: Bug - Added check for source file permissions that are too open
  • 1834: Bug - Todayboard categories chart only counted open requests instead of all
  • 1836: Bug - Batch responding now warns if closing without setting status
  • 1837: Bug - Modified HTML to allow browser autocomplete on custom fields
  • 1666: Bug - Adjusted Live Lookup results display
  • 1713: Bug - Fixed overlay min width
  • 1729: Bug - getHelpfulPages template call did not work correctly in secondary portals
  • 1758: Bug - Reporting tags now stay in place when selected rather than resorting to the top
  • 1768: Bug - Global setting to prevent batch closing caused reassignment batch button to break
  • 1769: Bug - Contact via trigger option would failed
  • 1771: Bug - Fixed various IE javascript errors
  • 1778: Bug - Fixed IE9 bug where javascript was broken when in IE7/8 compatibility mode
  • 1781: Bug - Fixed CSS when in maintenance mode
  • 1785: Bug - Fixed IE8 but where portals would not show in admin drop down list
  • 1786: Bug - Fixed UI so that it's possible to subscribe to a request that already has subscribers

44. Version 3.0.4 Beta

3.0.4 Changes

  • 1734: Feature - Added support for both displaying and inserting images inline in HTML emails
  • 1756: Feature - Added a spam whitelist and blacklist
  • 1751: Bug - Letter case of a mailbox reply to could cause it to CC itself on requests
  • 1752: Bug - Widget success page could fail to load
  • 1665: Bug - Next/Back buttons did not work in the Inbox view
  • 1669: Bug - On MySQL merges could fail
  • 1673: Bug - Response search on request screen javascript error
  • 1674: Bug - Added today and same day last week request count totals on Todayboard
  • 1677: Bug - Improved CSS/JS caching. Added compatibility fix for Google Pagespeed
  • 1678: Bug - Forward command failed to re-attach attachments
  • 1684: Bug - Adjusted time element of calendars to change in 1 minute increments
  • 1685: Bug - Admins now have access to edit any knowledge book settings
  • 1687: Bug - Improved IMAP error logging
  • 1689: Bug - Keyboard shortcut details link failed in Chrome
  • 1691: Bug - Staff search did not search inactive users
  • 1692: Bug - LDAP connection test could report "Error: Success"
  • 1693: Bug - Restored missing image edit.gif
  • 1696: Bug - Batch update and closed failed to close requests
  • 1697: Bug - Improved display of CC/BCC email addresses on request screen
  • 1698: Bug - Custom theme JS embedded with wrong link type
  • 1699: Bug - Stopped the encoders from encoding the /custom_pages example script
  • 1704: Bug - Forum main page now includes user icons for faster identification
  • 1705: Bug - Fixed Live Lookup calls from the address book
  • 1709: Bug - Some links in the KB breadcrumb trail were broken
  • 1714: Bug - Fixed spelling errors
  • 1716: Bug - Removed unneeded language file strings (removed hundreds of old v2 strings)
  • 1717: Bug - Widget could submit tags in note body
  • 1720: Bug - Prevent auto refresh of workspace from leaving blank grid
  • 1725: Bug - Removed the open password option from login page
  • 1729: Bug - getHelpfulPages template call did not work correctly in secondary portals
  • 1730: Bug - Adding a note to another staffers request could cause an empty message body error

45. Version 3.0.3 Beta

3.0.3 Changes

  • 1644: Feature - Added ability to link to chapters from KB popup
  • 1658: Feature - Added ability to save changes to an existing saved report
  • 1664: Bug - Long reporting tags would break tag display
  • 1643: Bug - In some cases the reminders UI would render incorrectly making it impossible to delete reminders.
  • 1645: Bug - FireFox had some excess space at the top of the request screen
  • 1646: Bug - When creating a response the custom field tab could cause errors if the installation has no custom fields
  • 1648: Bug - Updating personal preferences could cause signatures to lose leading line breaks
  • 1650: Bug - Fixed a Postgres specific database error
  • 1651: Bug - Applying a response without a category would unset any currently set category (and hide assignment, tags, etc)
  • 1652: Bug - WYSIWYG on installations with MBString could show odd characters
  • 1653: Bug - When viewing a request the last viewed filter is now correctly highlighted
  • 1655: Bug - imezone may not be set in the installer in some cases

46. Version 3.0.2 Beta

3.0.2: Bugs

  • 1636: Bug - Removed @ check in mailbox passwords
  • 1637: Bug - Live refresh not populating counts/grid correctly
  • 1638: Bug - Reply Above not inserted correctly in auto replies
  • 1639: Bug - Installation failed on MySQL 5.5+
  • 1640: Bug - WYSIWYG could fail to load in some cases
  • 1642: Bug - Dates in reminders could not be set properly

47. Version 3.0.1 Beta

For more information and screenshots of new features visit our What's New page.

3.0.1: Feature Highlights

  • All new design, rebuilt from the ground up to be instantly familiar yet remarkable.
  • New and redesigned reports
  • Todayboard, our new dashboard giving you insights into what's going on today in the system.
  • Stream View. Peek into requests in any filter without excessive clicks and loading.
  • Triggers are a new way to automate HelpSpot in real time.
  • Knowledge Tags, tag your books and forum topics for easier searching and reference.
  • Clean printing gives you clean printed output from any page in the system.
  • Admin themes. Create custom themes for the admin and even hook in custom javascript.
  • Portal themes. 2 new great portal themes to use right out of the box.
  • Integrated "reply above" for emails reduces database size by 50% and in many cases more
  • Improved performance, including faster filters, faster page rending, better caching and more

48. Version 3.0.1 - Template Changes

This page describes the changes to each HelpSpot portal template. If you have an HTML editor available like Dreamweaver or BBEdit it is probably more efficient to simple use the diff tools to compare your edited documents (/custom_templates) with the new templates (/helpspot/templates/). If those tools are not available, the listings below will allow you to manually change the templates.

These changes are only needed if you have customized your portal and specifically customized the files listed below. If not, you do not need to make any adjustments.

Your portal will not work correctly until these changes have been made.

Note: If you're upgrading from versions prior to 2.6.0 (2.4.2,2.1.1,2.1.0) you will also need to apply the previous template changes as well.

These templates have changed in version 3:

  • css.tpl.php
  • forums.posts.tpl.php
  • forums.topics.tpl.php
  • header.tpl.php
  • home.tpl.php
  • index.tpl.php
  • js.tpl.php
  • kb.page.tpl.php
  • request.check.tpl.php
  • search.tpl.php
  • searchbox.tpl.php

css.tpl.php

Modified line 16, changed URL. Line should be:

header('Content-type: text/css'); header('Content-Disposition: inline; filename="style.css"'); ?> /* Import styles for calendar used in date/datetime custom fields */
@import "<?php echo $this->cf_primaryurl ?>/static_<?php echo $this->cf_version ?>/js/jscal2/css/jscal2.css";

Add to end of file:

.calendar_input{
	padding-right: 10px;
	padding-top: 5px;
	padding-bottom: 5px;
	position: relative;
	text-align:	bottom;
	cursor: pointer;
	padding-left: 34px;
	border: 1px solid #BBBBBB;
}

.calendar_btn{
	position: absolute;
	top: 1px;
	left: 2px;
	height: 24px;
	width: 24px;
	background: transparent url(<?php echo $this->cf_primaryurl ?>/portal/images/calendar.png) no-repeat left top;
}

.tag-block-home{
	
}

.tag-block-page{
	margin: 0px;
	padding-left: 42px;
}

.tag-block a{
	display: inline-block;
	height: 26px;
	line-height: 26px;
}

.tag-sep{
	font-size: 11px;
	color: #ccc;
}

.tag-table{
    font-size: 13px;
    width: 100%;
    margin: 15px 0 20px 0;
 	border-bottom: 1px solid #DADADA;
}

.tag-table td { 
	padding: 8px; /* not for grey design */		
}

.tag-header{
	margin-bottom: 30px;
}

#helpspot-link{
	font-size: 12px;
}

footer.tpl.php

Replace line 25 through end of file. Previously line 25 started with a <strong> tag. Should now be:

</div> <!-- End of footer div -->
</div> <!-- End of container div -->

<div id="helpspot-link">
	<?php
	/*
	You may remove this link, however we would be very appreciative if you didn't! Helping spread the word about HelpSpot
	creates a stronger community and a better product for all our customers. 
	Sincerely, 
	
	Ian Landsman 
	President, UserScape
	ian@userscape.com
	*/
	?>
	
	<strong><a href="http://www.helpspot.com">Help Desk Software</a> by HelpSpot</strong>
</div>
</body>
</html>

forums.posts.tpl.php

Add at line 61:

<?php if($this->splugin('Forums_PostTags','count',$this->get_id)): ?>
	<fieldset class="fieldset">
		<legend><b><?php echo lg_portal_tags ?></b></legend>
		<div class="tag-block tag-block-page">
			<?php foreach($this->splugin('Forums_PostTags','getTags',$this->get_id) AS $tags): ?>
				<a href="index.php?pg=tag.search&id=<?php echo $tags['xTag'] ?>">
					<?php echo $tags['sTag'] ?>
				</a> <span class="tag-sep"> / </span>
			<?php endforeach; ?>
		</div>
	</fieldset>
<br />
<?php endif; ?>

<?php if(!$this->helper->isTopicClosed($this->topic,$this->forum)): ?> <form action="index.php?pg=forums.posts&id=<?php echo $this->get_id ?>" method="post">

header.tpl.php

Replaced line 9 (meta robots tag) with:

<meta name="description" content="<?php echo $this->hd_name ?> - help desk and customer service portal" />
<?php if($this->get_page == 'request.check'): ?>
	<meta name="robots" content="noindex, nofollow">
<?php else: ?>
	<meta name="robots" content="index, follow">
<?php endif; ?>

<title><?php echo $this->pg_title ?></title>

Modified line 18, changed URL. Line should be:

<!--stylesheets-->
<link rel="stylesheet" type="text/css"  href="<?php echo $this->cf_url ?>/index.php?pg=<?php echo $this->hd_theme ?>" media="screen, projection" />

Modified & Added at line 18, changed URL & added IE stylesheet. Line should be:

<!--stylesheets-->
<link rel="stylesheet" type="text/css" href="<?php echo $this->cf_url ?>/index.php?pg=<?php echo $this->hd_theme ?>" media="screen, projection" />
<!--[if lt IE 8]>
	<link rel="stylesheet" type="text/css" href="<?php echo $this->cf_url ?>/index.php?pg=<?php echo $this->hd_theme_ie ?>" />
<![endif]-->

Modified line 23, added class attribute. Line should be:

</head>
<body onload="<?php echo $this->pg_onload ?>" class="page-<?php echo $this->get_page_css_class ?>">

home.tpl.php

Added at line 30:

><?php endif; ?>
<?php $this->helper->reset_altrow(); ?>

<?php if($this->splugin('Tags','count') > 0): //Only show tags if there are any ?>
	<table width="555" cellspacing="0" class="forumtable tag-cloud-homepage">
	<tr>
		<td>
			<h2><?php echo lg_portal_tags ?></h2>	<br />
		</td>
	</tr>
	<tr>
		<td class="tag-cloud-td">
			<div class="tag-block tag-block-home">
			<?php foreach($this->splugin('Tags','getCloud') AS $tag): ?>
				<a href="index.php?pg=tag.search&id=<?php echo $tag['xTag'] ?>"  style="font-size:<?php echo $tag['font-size'] ?>%;"><?php echo $tag['sTag'] ?></a> <span class="tag-sep"> / </span> 
			<?php endforeach; ?>
			</div>
		</td>
	</tr>
	</table>
<?php endif; ?>

<?php if($this->splugin('Forums_LatestTopics','count') > 0): //Only show most recent forum posts if there are any ?>

Modified line 44 added class name. Line should be:

<td align="right" class="forum-name">

Added at line 71:

<?php endif; ?>
<?php $this->helper->reset_altrow(); ?>

<?php if($this->splugin('KB_HelpfulPages','count') > 0): //Only show most helpful pages if there are any ?>

index.tpl.php

Added at line 24:

case "css": include $this->loadTemplate('css.tpl.php'); break;
case "css.grey":
	include $this->loadTemplate('css.grey.tpl.php');
	break;
case "css.blue":
	include $this->loadTemplate('css.blue.tpl.php');
	break;		
case "ie.css":
	include $this->loadTemplate('ie.css.tpl.php');
	break;
case "ie.css.grey":
	include $this->loadTemplate('ie.css.grey.tpl.php');
	break;
case "ie.css.blue":
	include $this->loadTemplate('ie.css.blue.tpl.php');
	break;

Added at line 77:

case "search": include $this->loadTemplate('search.tpl.php'); break;
case "tag.search":
	include $this->loadTemplate('tag.search.tpl.php');
	break;	

js.tpl.php

Replace the document.write at line 24 with:

// jscalendar/calendar-setup.js (used for date custom fields)
document.write('<script type="text/javascript" src="<?php echo $this->cf_primaryurl ?>/static_<?php echo $this->cf_version ?>/js/hs-js-combined-portal.php"></script>');

kb.page.tpl.php

Added at line 30:

<p> <?php echo $this->page['tPage'] ?> </p>

<?php if($this->splugin('KB_PageTags','count',$this->get_id)): ?>
	<fieldset class="fieldset">
		<legend><b><?php echo lg_portal_tags ?></b></legend>
		<div class="tag-block tag-block-page">
			<?php foreach($this->splugin('KB_PageTags','getTags',$this->get_id) AS $tags): ?>
				<a href="index.php?pg=tag.search&id=<?php echo $tags['xTag'] ?>">
					<?php echo $tags['sTag'] ?>
				</a> <span class="tag-sep"> / </span>
			<?php endforeach; ?>
		</div>
	</fieldset>
<br />
<?php endif; ?>

Modified line 37 changed variable. Line should be:

<?php foreach($this->splugin('KB_PageDownloads','getDownloads',$this->get_id) AS $download): ?>
	<li><?php echo $this->helper->mimeimg($download['sFilename']) ?> <a href="index.php?pg=file&from=2&id=<?php echo $download['xDocumentId'] ?>"><?php echo $download['sFilename'] ?></a>
<?php endforeach; ?>

request.check.tpl.php

Modified line 169 added ID. Line should be:

	<input type="text" name="id" value="" size="20" maxlength="100" tabindex="100" />
	<input type="submit" name="submit" id="accesskey-btn" value="<?php echo lg_portal_check ?>" tabindex="101" />
</p>

Added at line 197:

<?php if(isset($_GET['reset_password'])): ?>
<script type="text/javascript">
document.observe("dom:loaded", function(){
	var page_href = location.href + " ";
	if(page_href.search(/password/i) > 0){
		$("feedback_box").show();
		$("feedback_box").addClassName("feedback_box_positive");
		$("feedback_box").update("<?php echo htmlentities(lg_portal_password_reset) ?>");
	}
});
</script>
<?php endif; ?>
	
<?php include $this->loadTemplate('footer.tpl.php'); ?>

search.tpl.php

Added at line 19:

<?php include $this->loadTemplate('searchbox.tpl.php'); ?>

<?php if($this->splugin('Tags','searchCount',$this->get_q)): ?>
	<fieldset class="fieldset">
		<legend><b><?php echo lg_portal_searchtags ?></b></legend>
		<div class="tag-block tag-block-page">
			<?php foreach($this->splugin('Tags','searchTags',$this->get_q) AS $tags): ?>
				<a href="index.php?pg=tag.search&id=<?php echo $tags['xTag'] ?>">
					<?php echo $tags['sTag'] ?>
				</a> <span class="tag-sep"> / </span>
			<?php endforeach; ?>
		</div>
	</fieldset>
<br />
<?php endif; ?>

searchbox.tpl.php

Modified line 6 added ID. Line should be:

<p align="center">
	<input type="text" name="q" id="q" value="<?php echo $this->get_q ?>"> 

49. Version 2.7.2

2.7.2: Features and Bugs

  • 1423: Feature - Added support for line breaks in widget text
  • 1457: Feature - Added xPortal ID option to create.request and private.create.request
  • 1459: Feature - Added mailbox account name placeholder for last, first
  • 1468: Feature - Upgraded TinyMCE (wysiwyg editor) to 3.3.8
  • 1474: Feature - Replaced the last customer email tag with last customer note (your templates will automatically be updated). This now replies with the last note of any type not just emails, so portal updates, API generated updates, etc.
  • 1479: Feature - Added reportingTags parameter to private.request.search
  • 1484: Feature - Added 2 indexes to HS_Request to improve speed on certain filter conditions
  • 1478: Bug - On Windows the Black Box Username field could default to a blank space instead of empty
  • 1470: Bug - Prevented an unneeded update query in the Workspace
  • 1465: Bug - UTF8 control characters in an email could break API XML
  • 1467: Bug - Updating global email templates could overwrite custom mailbox templates
  • 1448: Bug - Numerci and Decimal custom fields did not accept 0 on the portal form
  • 1451: Bug - KB Pages with only table tags would have
    added to them
  • 1452: Bug - Required checkbox fields now checked via javascript as other required fields are
  • 1453: Bug - Auto response email template could not correctly display CSS
  • 1455: Bug - Could not download a report as CSV where open/closed was set to closed
  • 1336: Bug - Push requests could not be logged when using Postgres DB
  • 1337: Bug - Postgres DB installations wouldn't list request history on portal when using customer ID display option
  • 1342: Bug - Drill down lists could not be edited if they contained certain special characters
  • 1348: Bug - Speed to first response report can sometimes count merged requests as negative values
  • 1349: Bug - The email_staff parameter in private.request.create did not work as expected
  • 1359: Bug - Batch request could fail on pasted text with bad characters

50. Version 2.7.1

2.7.1: Features and Bugs

  • 1386: Feature - Improved filter caching for faster results especially in large installations.
  • 1386: Change - Removed filter cache time setting, still available as a hidden setting.
  • 1394: Feature - Improved search tab UI. Enter starts search, last search remembered for configurable period of time in hidden settings (defaults to 20 minutes)
  • 1409: Feature - Added exclusive public history notes email tag (will show all public notes in the request besides the current one being sent) to compliment "inclusive" one
  • 1398: Bug - API private.request.addTimeEvent allowed adding time events to non-existent request ID's
  • 1387: Bug - Address Book A-Z navigation could break under some conditions.
  • 1342: Bug - Drill down lists could fail to be editable.
  • 1348: Bug - Improved the speed to first response reports handling of merged requests.
  • 1349: Bug - email_staff API parameter did not email staff members indicated.
  • 1372: Bug - Speed to first response report had problems when downloading as a CSV.
  • 1417: Bug - Subject lines that end in \ break the javascript on the request page
  • 1420: Bug - calendar date selection could fail in advanced search

51. Version 2.7.0

For screenshots of several new features visit our What's New page.

2.7.0: Feature Highlights

  • 108: Feature - Global BCC option, so all public note emails (optionally all outbound email) can be BCC'd to a specified address.
  • 1128: Feature - New advanced search interface with optional filter creation
  • 1108: Feature - New report: Speed to first response
  • 1139: Feature - New tab widget allows a question/feedback form to easily be added to any webpage or site
  • 1240: Feature - Added email tag which will insert the complete public history of a request
  • 1297: Feature - Added ability to re-attach an attachment in the request history
  • 604: Feature - Added a simple address book for commonly used email addresses. Integrated with Live Lookup for global address book functionality.
  • 1310: Feature - Added assignment chain management. It's now possible to search/filter the full history of all users who have ever been assigned a request (works going forward after upgrade).

2.7.0: Features and Bugs

  • 121: Feature - When doing a batch response any people currently CC'd will be CC'd on the batch reply
  • 1074: Feature - Improved image caching
  • 1123: Feature - Framed portal pages would work inconsistently in some IE versions
  • 1124: Feature - Added US Cellular and Telstra to SMS list
  • 1126: Feature - Responses are no longer required to have a note
  • 1131: Feature - Responses can now set "send from" and "TO"
  • 1109: Feature - Filter/Report exporting now done in CSV for wider compatibility
  • 1157: Feature - Improved request history search speed
  • 1145: Feature - API method private.request.search can now search on xPersonAssignedTo
  • 1187: Feature - "Currently Viewing" notification on request screen now less obtrusive, continually viewable and updates in real time
  • 1208: Feature - Live Lookup now passes the request ID in it's call
  • 1221: Feature - Added ability to set the contact type via the API creation methods
  • 1251: Feature - Added button to clear error table
  • 1252: Feature - Added check for shell_exec when using command line Live Lookup
  • 1194: Feature - Added ability to repair MySQL tables from the system information screen
  • 1296: Feature - Each request history item now has a "forward" command which will quote the note, set the subject, and re-attach any files in the note
  • 503: Bug - Changed wysiwyg to use raw encoding to true characters are stored in database
  • 1080: Bug - HTML tags not stripped from RSS titles
  • 1088: Bug - Removed inactive users from time tracker selection list
  • 1092: Bug - Fixed bug where IE7 users could sometimes not take an urgent request from the Inbox
  • 1101: Bug - Numeric custom fields would log changes from/to nothing
  • 1104: Bug - When uploading multiple attachments via the api, ones beyond the first would not upload correctly
  • 1159: Bug - Added logic to prevent workspace from stretching on long strings of characters
  • 1163: Bug - Fixed email_staff option in API which would not email selected staff
  • 1166: Bug - An apostrophe as the leading character of a customer name would cause the request not to update
  • 1170: Bug - Improved email validation
  • 1171: Bug - Portal black box now creates accounts for unknown but valid users as the default system does
  • 1175: Bug - When using the option to write attachments to disk the process would sometimes failover to DB when it shouldn't
  • 1142: Bug - Removed encoded HTML characters from text staff notification emails
  • 1143: Bug - Drill down custom field data was not available in API results
  • 1119: Bug - Using make note public on an HTML email could break the layout of the request.
  • 1113: Bug - The request push details link did not work on closed requests
  • 1114: Bug - Responses would be erased in some browsers if enter was hit directly after insertion
  • 1276: Bug - Prevent email ID prefix from containing anything but letters
  • 1286: Bug - View request link in emails could have wrong URL
  • 1292: Bug - Email table of results rule action in some cases may not remember the correct person to email
  • 1243: Bug - Increased size of the sReplyName field
  • 1257: Bug - Fixed wrong path to attachment images in secondary portals
  • 1262: Bug - Clarified notes on MSSQL wild card searches
  • 1263: Bug - Private api method private.request.create could not add reporting tags
  • 1223: Bug - Mail rules would not always match subject lines properly if they were encoded
  • 1229: Bug - Remove currently out of office users from list of those who can be set as a person to forward to while out of office.
  • 1231: Bug - "additional" hidden portal form field would not submit text in some configurations
  • 1237: Bug - Added check to ensure at least 1 staff member is added to a category
  • 1211: Bug - The date opened placeholder did not show the correct date, it showed the current date.
  • 1213: Bug - Command clicking a request ID would not open it in a new window
  • 1190: Bug - Long lists of reporting tags would sometimes fail to reorder correctly
  • 1146: Bug - Print view shows custom fields which are not part of the requests currently selected category.
  • 1148: Bug - Fixed issue with special characters in drill down fields
  • 1152: Bug - Add check to make sure the SMS field is filled in if checking off SMS notification options
  • 1156: Bug - Installs with many custom fields could not fully use Live Lookup due to the use of GET to transmit the information, switched to POST
  • 1321: Bug - Private api method private.request.getCategories returned all reporting tags for each category
  • 1314: Bug - Clicking update and close in Google Chrome Mac crashes if status is not already selected
  • 1315: Bug - Secondary portal forums send emails from the default system account instead of the secondary portals selected account.
  • 1304: Bug - IE could receive a blocking javascript error on Rules pages

52. Version 2.6.3

  • 1024: Feature - Installer.php now does additional checks for proper database permissions and errors during upgrades
  • 1025: Feature - kb.getBookTOC and kb.getPage now return information on related pages.
  • 1033: Feature - Installer.php now automatically puts the system in maintenance mode when doing an upgrade (after upgrade button pushed) and turns off maintenance mode when complete
  • 1050: Feature - The email tag ##forward:true## is now accepted in the body of the message as well as the subject line
  • 1052: Feature - The request history option menu now stays open longer
  • 1058: Feature - Added a button to clear stuck emails allowing the system to retry downloading them
  • 1060: Feature - Added cHD_TAKEIT_DOCHECK hidden setting to allow Take It button to bypass assigned to check and directly assign to clicker
  • 1013: Bug - New Level 2 users could be created and defaulted to a filter they didn't have access to in some configurations
  • 1014: Bug - IE sometimes shows browser security warning on admin page
  • 1015: Bug - In some cases Windows Installer did not correctly set the tmp directory to writable causing email attachments to fail
  • 1020: Bug - IE could show an "out of memory" browser error on preferences page
  • 1021: Bug - Closed requests had a javascript error in IE
  • 1022: Bug - private.request.get now returns the merged request if the request has been merged
  • 1032: Bug - HTML H2 tags did not display correctly in preview mode
  • 1036: Bug - Force table locking in MySQL when doing merges to prevent a situation where both requests in a merge if called simultaneously to merge into each other could be deleted
  • 1038: Bug - Closed requests showed request history based on "notes" preference so would show notes only if that preference was set. Now shows all history items regardless of setting.
  • 1039: Bug - Drill down data in filter grid did not display properly in all cases
  • 1044: Bug - Windows installer could fail to install the Zend Optimizer for new installations in some cases
  • 1053: Bug - Malformed email can cause only the first line or two of an email to be displayed
  • 1055: Bug - Fixed rare bug where if the database has an error two new requests could be merged into one
  • 1056: Bug - Fixed issues with custom field creation when database user does not have alter permissions in MySQL

53. Version 2.6.2

  • 1011: Bug - "Customer will not be emailed" message and note draft saving may not function properly on the request screen. "Customer will not be emailed" may fail to correctly switch to "Customer will be emailed" when appropriate causing confusion to help desk staff. 
    This bug only affects HelpSpot version 2.6.1.

54. Version 2.6.1

  • 968: Feature - Added hidden setting to disable auto linking of shortcuts (r: f: k:) in note field
  • 973: Feature - Hidden setting to set a maximum image size to attempt to thumbnail in the request history
  • 981: Feature - Option to open request history search results in a new window
  • 984: Feature - Added a reporting tags column for filters
  • 990: Feature - Phone numbers in the iPhone UI are now clickable in the customer information area
  • 957: Bug - Merging generates an email to user doing the merge even if it's same person
  • 970: Bug - Clicking update request now auto submits time if time clock is running
  • 974: Bug - Installations running over SSL can show insecure items error when accessing request page
  • 975: Bug - Formatted text box and plain text note box would not auto resize
  • 982: Bug - Spellchecking with the wysiwyg enabled did not work
  • 991: Bug - iPhone UI is now faster due to removal of transitions
  • 992: Bug - iPhone UI now correctly links to knowledge book pages
  • 993: Bug - Editing an automation rule can cause an "operation aborted" error in IE
  • 999: Bug - Workspace quick menu sometimes would remain stuck on "loading..." while trying to view request details
  • 1000: Bug - Fix improperly decoded attachment extensions
  • 1001: Bug - Setting a note to public via a response and attempting to set the subject line and CC fails
  • 1002: Bug - Certain filter conditions if used on their own may incorrectly return all requests if no requests match the condition

55. Version 2.6.0

For screenshots of several new features visit our What's New page.

2.6.0: Feature Highlights

  • 56: Feature - Smart assignment. When re-assigning a request to a category the staffer is part of the assigned to box will default to the staffer rather than the default user.
  • 384: Feature - Multilevel response grouping
  • 417: Feature - Live request access status. Staff are warned when entering a request another user is viewing or editing.
  • 428: Feature - Request histories can now display a full history, just notes, just public notes, or files. The setting is saved until it is changed by the staffer (setting is unique to each user)
  • 607: Feature - Significant filter speed improvements. Especially for reporting tags and full text searches on the MySQL database
  • 633: Feature - Integrated iPhone interface
  • 768: Feature - Filter view request quick menu for viewing request history from the Workspace
  • 753: Feature - Added indicator to visually confirm when an email will be sent to a customer on the request screen
  • 787: Feature - Specific column widths can now be specified in filters
  • 823: Feature - Added support for reCAPTCHA as a captcha type in the portal
  • 869: Feature - Per mailbox public and external note email templates for easy support of different mailbox domains.
  • 871: Feature - Filter counts are now cached for 5 minutes by default (setting in Admin->Settings->System). Caching dramatically reduces the number of queries per page in filter heavy installations.
  • 928: Feature - Multi-portal support. Create unlimited portals for different websites all managed by one HelpSpot instance.

2.6.0: Features and Bugs

  • 164: Feature - Option to quote all public history
  • 566: Feature - Forwarded email parsing now requires the subject line to contain a special command: ##forward:true##
  • 568: Feature - Added "van:" as another "from" to search for in email forward parser
  • 585: Feature - Option to show the SQL of a filter on the filter creation/edit screen
  • 615: Feature - Default the create filter batch option to unchecked
  • 628: Feature - API: allow override of fNoteIsHTML
  • 665: Feature - Request Push API: Assigned user and logged in user information sent. Live Lookup API: logged in user information sent with api call.
  • 668: Feature - Mailbox option to use a staff member name in the from emails of public notes instead of generic mailbox name
  • 645: Feature - Pass fUserType value in Live Lookup API so results returned can be tailored to user level
  • 678: Feature - Added notification suppression option to automation rules
  • 679: Feature - Added email template placeholders for opened date and current time
  • 687: Feature - Move to inbox option for automation rules
  • 700: Feature - Added setting to turn off auto reply on portal form requests
  • 701: Feature - New filter column which displays who's currently viewing/editing a request
  • 716: Feature - Filter "take it" column now works like the built in inbox "take it" column
  • 722: Feature - Add an "is not spam" action to mail rules
  • 727: Feature - Upgraded wysiwyg to latest version
  • 728: Feature - Show count of currently open requests for a customer on the request screen
  • 732: Feature - Added ability to merge a request from the history tab
  • 734: Feature - Added logged in user placeholders
  • 741: Feature - Automation rule option to only run rule if it's directly called, not when tasks2.php is called without an ID (as normal)
  • 758: Feature - New API method of private.request.merge
  • 760: Feature - Added option to group merge from filters
  • 766: Feature - Save As option for responses and filters to quickly base a new response/filter off of an existing one
  • 767: Feature - Links in the request history to external sites now open in a window without leaving the request screen
  • 779: Feature - Menu option to link directly to a specific request history note
  • 781: Feature - API: private.request.search now accepts date parameters
  • 785: Feature - Added "active" status to "change status" drop down in filters
  • 786: Feature - Filters now have the option for grouped and/or conditions
  • 796: Feature - Option to convert a request history item into a new request
  • 812: Feature - Added a Request Push API action to automation rules
  • 817: Feature - Added hidden config.php setting which allows SSL MySQL connections
  • 819: Feature - When clicking "update and close" with the status still "active" a quick popup will appear allowing a status selection without the need to scroll.
  • 864: Feature - Added Getting Started menu
  • 897: Feature - Significant improvements in client CPU and Memory utilization in all browsers
  • 902: Feature - Added xPersonOpenedBy to private.request.create
  • 931: Feature - Email table of results will no longer send an email if no requests match the rule
  • 933: Feature - Added ability to move chapters between books
  • 828: Bug - Adding a mailbox incorrectly showed an "edited" message
  • 821: Bug - Flash movies uploaded into the knowledge books may not display correctly for visitors using Flash 10
  • 806: Bug - Editing a KB name or description causes order to be set to 0
  • 808: Bug - Remove formatted text (Markdown) escape characters from text versions of emails
  • 809: Bug - Leave attached .eml files as attachments instead of parsing them as part of the mail body
  • 792: Bug - Add tag button in Safari submits form when it should not
  • 783: Bug - Portal requests show a RE in excel download of filters when they should not
  • 747: Bug - Line breaks are now stripped from drill down option lists
  • 748: Bug - The batch request form no longer forces required custom fields to be changed
  • 750: Bug - Spaces at the end of an email address cause emails to fail
  • 752: Bug - tasks2.php no longer outputs any text
  • 739: Bug - Creating a request with no note causes odd character dump in request history
  • 713: Bug - Private API returns a basic auth header in addition to the xml failure notice
  • 714: Bug - Formatted text content now used directly for text part of emails
  • 723: Bug - Internet Explorer would append responses to top of screen instead of the note box in some instances
  • 724: Bug - A login box appears in the draft save area of the request screen if the user is logged out while working a request
  • 703: Bug - Mail rule headers now default to "contain" instead of "is"
  • 706: Bug - Search fields now trim whitespace
  • 711: Bug - Safari could not set public api return values in settings
  • 680: Bug - When choosing a relative comparison operator in an automation rule the time field would not hide
  • 647: Bug - kb.getToc now wraps pages with a pages tag for easier parsing (existing code that uses this method may need updating)
  • 669: Bug - Multi-word searching in Postgres would not return results
  • 671: Bug - Improperly formatted email messages caused attachments to not be imported properly
  • 677: Bug - On some configurations files with no mimetypes would not be saved to the database
  • 635: Bug - Custom field dates in automation rules show timestamp
  • 639: Bug - private.request.search does not return tnote
  • 629: Bug - Subject line shows on non-email created requests
  • 631: Bug - Black Box Portal authentication may not work in some cases
  • 618: Bug - Umlaut in subject line forces requests to always be created, never appended to existing
  • 619: Bug - Original Note tag will send back a private note on a manually entered request with the first note as a private note
  • 623: Bug - Files could not be uploaded via request.update method
  • 624: Bug - Group files in request.get into a tag for easier parsing
  • 627: Bug - Certain emails become stuck due to spam check
  • 586: Bug - Change filter condition so that both checked and unchecked can be found
  • 600: Bug - Apostrophe in knowledge book page title makes them not insertable into note box
  • 582: Bug - Reporting tags don't show when editing a response on IE
  • 584: Bug - Emails with multiple CC's can stretch page
  • 567: Bug - First result of Live Lookup result with multiple entries sometimes not shown
  • 173: Bug - Space character can get through on a CC and breaks javascript
  • 564: Bug - Email template tags don't insert in FireFox 3
  • 878: Bug - Borders added to images in the knowledge books would not be displayed
  • 879: Bug - Login check did not work for new request screen
  • 939: Bug - Downloads over SSL on request check page fail to IE
  • 955: Bug - Request Push to SQL Server 2008 fails when Push() does not return a value

56. Version 2.6.0 - Template Changes

This page describes the changes to each HelpSpot portal template. If you have an HTML editor available like Dreamweaver or BBEdit it is probably more efficient to simple use the diff tools to compare your edited documents (/custom_templates) with the new templates (/helpspot/templates/). If those tools are not available, the listings below will allow you to manually change the templates.

These changes are only needed if you have customized your portal and specifically customized the files listed below. If not, you do not need to make any adjustments.

Your portal will not work correctly until these changes have been made.

Note: If you're upgrading from versions prior to 2.4.2 (2.1.1,2.1.0) you will also need to apply the template changes here.

These templates have changed in version 2.6:

  • css.tpl.php
  • email.tpl.php
  • forums.posts.tpl.php
  • forums.topics.tpl.php
  • js.tpl.php
  • request.tpl.php

css.tpl.php

Modified line 16, changed URL. Line should be:

header('Content-type: text/css');
header('Content-Disposition: inline; filename="style.css"');
?>
/* Import styles for calendar used in date/datetime custom fields */
@import "<?php echo $this->cf_primaryurl ?>/js/jscalendar/skins/aqua/theme.css";

Modified line 226, changed URL. Line should be:

.navBar a:link.navOn, .navBar a:visited.navOn, .navBar a:hover.navOn
{
	font-weight: bold;
	padding: 0 0 6px 10px;
	text-decoration: none;
	color: #39399c;
	background: url(<?php echo $this->cf_primaryurl ?>/portal/images/blue-tri.gif) no-repeat left top;
}

Modified line 270, changed URL. Line should be:

.subnavBar a:link.navOff, .subnavBar a:visited.navOff
{
	font-weight: normal;
	padding: 0 0 6px 10px; 
	text-decoration: none;
	color: #3163ce;
	background: url(<?php echo $this->cf_primaryurl ?>/portal/images/blue-dot.gif) no-repeat left top;
}

Modified line 279, changed URL. Line should be:

.subnavBar a:hover.navOff
{
	font-weight: normal;
	padding: 0 0 6px 10px; 
	text-decoration: underline;
	color: #39399c;
	background: url(<?php echo $this->cf_primaryurl ?>/portal/images/blue-dot.gif) no-repeat left top;
}

Modified line 288, changed URL. Line should be:

.subnavBar a:link.navOn, .subnavBar a:visited.navOn, .subnavBar a:hover.navOn
{
	font-weight: bold;
	padding: 0 0 6px 10px; 
	text-decoration: none;
	color: #39399c;
	background: url(<?php echo $this->cf_primaryurl ?>/portal/images/blue-tri.gif) no-repeat left top;
}

email.tpl.php

Replaced lines 45-52 for new captcha include, should now be:

//Captcha form protection. You can turn this on and off via a setting in Admin->Settings->System Security. It's enabled by default 
//This text captcha should be sufficient for most automated spam. If someone has modified a robot to target your site specifically 
//then obfuscating the word via javascript or using an image may improve results ?>
<?php include $this->loadTemplate('captcha.tpl.php'); ?>

<div class="formbuttondiv">

forums.posts.tpl.php

Replaced lines 89-96 for new captcha include, should now be:

		//Captcha form protection. You can turn this on and off via a setting in Admin->Settings->System Security. It's enabled by default 
		//This text captcha should be sufficient for most automated spam. If someone has modified a robot to target your site specifically 
		//then obfuscating the word via javascript or using an image may improve results ?>
		<?php include $this->loadTemplate('captcha.tpl.php'); ?>

		<p>
			<input type="checkbox" name="fEmailUpdate" value="1" /> <?php echo lg_portal_emailupdate ?>
		</p>

forums.topics.tpl.php

Modified line 29, changed URL. Line should be:

		<?php if($topic['fSticky']): ?>
			<img src="<?php echo $this->cf_primaryurl ?>/images/sticky.gif" align="center" alt="<?php echo lg_portal_sticky ?>" height="16" width="16" />
		<?php endif; ?>

Modified line 54, changed URL. Line should be:

 	<?php if($this->get_start == 0 && $this->hd_forumFeedsEnabled): ?>
 	| <a href="index.php?pg=forums.feed&id=<?php echo $this->get_id ?>"><img src="<?php echo $this->cf_primaryurl ?>/portal/images/rss.gif" alt="" align="center" border="0" /></a>
 	<?php endif; ?>

Replaced lines 92-99 for new captcha include, should now be:

		//Captcha form protection. You can turn this on and off via a setting in Admin->Settings->System Security. It's enabled by default 
		//This text captcha should be sufficient for most automated spam. If someone has modified a robot to target your site specifically 
		//then obfuscating the word via javascript or using an image may improve results ?>
		<?php include $this->loadTemplate('captcha.tpl.php'); ?>

		<p>
			<input type="checkbox" name="fEmailUpdate" value="1" /> <?php echo lg_portal_emailupdate ?>
		</p>

js.tpl.php

Modified line 24, changed URL. Line should be:

// jscalendar/lang/calendar-en.js (used for date custom fields)
// jscalendar/calendar-setup.js (used for date custom fields)
document.write('<script type="text/javascript" src="<?php echo $this->cf_primaryurl ?>/js/c_portaljs_<?php echo $this->cf_version ?>.php"></script>');

request.tpl.php

Modified line 128, change P to a DIV tag. Line should be:

	<div id="<?php echo $fieldID ?>_wrapper" style="<?php echo $visible ?>"><label for="<?php echo $fieldID ?>" class="datalabel<?php echo $requiredClass ?>"><?php echo $field['fieldName'] ?>:</label><br />
		<?php echo $this->helper->showError($fieldID,'<br />') ?>

Modified line 157, change P to a DIV tag. Line should be:

		<?php endif; ?>
	</div>
<?php endforeach; ?>

Modified line 182, added label to simple portal textarea. Line should be:

<?php elseif($this->hd_portalFormFormat == 0): ?>

	<p><label for="simple" class="datalabel"><?php echo lg_portal_req_simple ?>:</label><br />
	<?php echo $this->helper->showError('simple','<br />') ?>
		<textarea name="simple" cols="50" rows="10" style="width:100%;"><?php echo $this->request_simple ?></textarea>
	</p>

Replaced lines 202-209 for new captcha include, should now be:

//Captcha form protection. You can turn this on and off via a setting in Admin->Settings->System Security. It's enabled by default 
//This text captcha should be sufficient for most automated spam. If someone has modified a robot to target your site specifically 
//then obfuscating the word via javascript or using an image may improve results ?>
<?php include $this->loadTemplate('captcha.tpl.php'); ?>

</div>

57. Version 2.4.7

  • 20: Feature - Added setting to turn off spam filtering or to check for spam, but not to train
  • 535: Feature - Attempt to determine proper customer information from an email forwarded into HelpSpot
  • 537: Feature - Improved data compression and cleaning for installations with Tidy
  • 523: Feature - Added URL parameter of ?clearcache which will force the cache system to clear
  • 518: Feature - Added option to save attachments to the file system rather than in the database
  • 520: Bug - Static file caching now stores both a text and gzip version of the files
  • 525: Bug - Fixed API bug where attachments would not attach with private.request.update and private.request.create
  • 533: Bug - When using IIS with SSL some browsers could not download file attachments in the portal
  • 534: Bug - Added a check in the installer to determine if HelpSpot was unzipped properly
  • 542: Bug - Fix email template issue with some templates being blank when upgrading from 1.5.5 to 2.4.x
  • 546: Bug - Changed wording for default mailbox in send from drop down to be more clear
  • 547: Bug - Date custom fields may be off by 1 day on older dates before 1990
  • 552: Bug - Images in knowledge books didn't shown when the domain uses a port other than 80
  • 555: Bug - Hidden email blocks do not work in the portal
  • 497: Bug - Added save draft option for text mode
  • 499: Bug - Added extra checks for empty emails after emails are cleaned. If empty an alternate escaped version is used if possible
  • 502: Bug - Fixed type error in installer.php
  • 504: Bug - Fixed link to documentation on black box setup
  • 512: Bug - Fixed wrapping of customer/history search tabs on 800x600 resolution browsers
  • 513: Bug - wysiwyg incorrectly created inner page anchor tags
  • 514: Bug - Removed xMailboxToSendFrom from customer.getRequests API method
  • 515: Bug - Spam requests are no longer counted in the workload report
  • 516: Bug - Editing preferences causing default workspace to be reseet
  • 554: Bug - Auto refresh causes browser title to be undefined after a refresh in a custom filter

58. Version 2.4.2

2.4.2: Features and Bugs

  • 488: Feature - Added setting for default request history search type
  • 490: Feature - Request history search request ID link is now a standard A tag so it can be opened in a new window/tab by right clicking
  • 492: Bug - RE: is now shown in the email subject line below the note box and it's addition is logged
  • 494: Bug - Custom field values were not being sent to the Live Lookup URL
  • 495: Bug - Ajax custom field would not populate with data after an option was selected
  • 496: Bug - Reminder confirmation window now fits text
  • 473: Bug - Graph showed error in 80/20 report when no reporting tags were found
  • 475: Bug - Escaped version of HTML email is used if purification strips all text.
  • 476: Bug - Added ability to save draft in formatted text mode
  • 477: Bug - Urgent requests did not have the red header as it should be
  • 482: Bug - Javascript caching would not work on PHP 4
  • 483: Bug - Assign the "send from" mailbox as requests enter the system to prevent continuous logging of notes about send from changing
  • 485: Bug - Reminder dialog shows garbled text on PHP 4
  • 486: Bug - Restore draft options doesn't show newest saved drafts until a page refresh. Options are now updated in real time.

 

2.4.0: Feature Highlights

  • 221: Feature - Added a simple portal login that allows customers to see their request history in the request check area. The login only applies to request check, the rest of the portal remains completely open. Access keys are also still in use and remain a viable way to check on the history of a request.
  • 201: Feature - Added grouping ability to filters
  • 211: Feature - Automatic saving of note drafts on request page every 20 seconds. The user may also force a save
  • 181: Feature - When the PHP PECL Mailparse extension is available HelpSpot will use it. This provides up to a 70% improvement in memory usage while importing emails
  • 351: Feature - New round robin auto assignment option for even distribution of requests across staff
  • 129: Feature - Added a Maintenance mode which takes HelpSpot offline. Mail importing will stop, no requests will be accepted via the portal or API
  • 333: Feature - Added checks for stuck emails and when possible import around the stuck email as well as notify admins that an email is stuck.
  • 140: Feature - Added loop protection for new emails. By default more than 10 emails from the same address within one hour will result in no more auto response emails being sent to the address in order to break the loop
  • 177: Feature - Added the ability to set Inbox as the category default
  • 418: Feature - Dramatic speed improvements for filters, especially on large databases (special thanks to Catalyst for their time and assistance on this)
  • 183: Feature - WYSIWYG now supports Safari Browser

 

2.4.0: Other Features and Bug Fixes

  • 284: Feature - Add ability to do secure SMTP connects for outbound email
  • 289: Feature - Added IS/IS NOT filter criteria for predefined custom fields in filters
  • 291: Feature - Added email forgot password option for staff
  • 292: Feature - Added API method for returning requests by a customers portal login email/password
  • 236: Feature - Improved customer history search. Added new search types
  • 244: Feature - Added report for response usage
  • 260: Feature - Added request open/closed placeholder
  • 306: Feature - Allow per mailbox SMTP settings
  • 272: Feature - Added private note and external note to change note types in responses
  • 329: Feature - Added support for multiple Live Lookup endpoints. Allowing Live Lookup calls to multiple URL's
  • 338: Feature - Hide private kb's and global responses when in limited access mode for guests
  • 341: Feature - Added email header information when using the request history quote feature on an email
  • 345: Feature - Added API method for searching time events
  • 347: Feature - Added ability to remove a request from a batch while on the batch screen
  • 348: Feature - Added ability to change status from the quick action menu (workspace)
  • 350: Feature - List the TO in the public note request history
  • 356: Feature - Added ability to set the note body on the request page by passing tBody in via the URL
  • 363: Feature - Added closed after and closed before date options to filters
  • 371: Feature - Modified private.request.create and private.request.update API methods to allow for using importing operations (allow setting of creation date)
  • 429: Feature - Improved javascript and CSS compression and caching
  • 446: Feature - Add more relative date options, past 7/14/30/90/365 days
  • 80: Feature - Added KB helpful/not helpful API methods
  • 111: Feature - Remember "send from" when changed while updating a request
  • 116: Feature - Added option in Windows Installer to use an existing MySQL database if available
  • 114: Feature - Edits to the public note subject line are now logged and saved
  • 154: Feature - New "staff initiated" contacted via type
  • 169: Feature - Added captcha to email post form
  • 175: Feature - Added 60 and 90 day options to remove from trash setting
  • 187: Feature - Added an initial request placeholder
  • 206: Feature - Added keyboard shortcut for create request and ID search box
  • 213: Feature - Added ability to set reporting tags from a response
  • 214: Feature - Added ability to set the BCC from a response
  • 229: Feature - Added ability to add a private note from mail and automation rules
  • 231: Feature - Added more search criteria to the private.request.search API method: open/closed/custom fields/status/category
  • 197: Feature - Added most used menu to response menu
  • 301: Bug - Honor Reply To email/name if available
  • 331: Bug - Show all categories in report drop downs
  • 308: Bug - Request history text sometimes squished on history search
  • 311: Bug - Fixed issue where HTML emails would sometimes be empty after cleaning
  • 315: Bug - When doing an update and close if the email fails the staff are not notified.
  • 322: Bug - private.request.create does not attach files on create
  • 262: Bug &nbsp; shown on data searches in search tab
  • 263: Bug - Default customfield date/times to today
  • 264: Bug - Fix limited access mode for L2 so that only their categories can be seen in a filter
  • 259: Bug - Using ##accesskey## in responses does not insert the access key
  • 238: Bug - No longer build tNote index when using Postgres
  • 298: Bug - Enforce limited access rules on request page
  • 279: Bug - Set default date on calendars to date selected
  • 283: Bug - Changing preferences resets customized columns
  • 439: Bug - Can't export excel on any pages other than the first page of filter results
  • 440: Bug - filters: last public update by doesn't work as expected
  • 416: Bug - Don't allow public note cc/bcc to carry over into external notes
  • 352: Bug - On the portal make sure kb/forum search is not shown if neither is public
  • 354: Bug - Tidy on PHP5 broken on Jan 2008 Tidy build
  • 349: Bug - KB pages with double quotes in title can't be inserted on request page (or forums)
  • 342: Bug - Improve character set parsing of emails
  • 339: Bug - Response breaks if custom field is to be set and has been deleted
  • 334: Bug - remove initial request note from "subject line" options in email templates
  • 335: Bug - Special characters break the outbound text version of HTML emails
  • 337: Bug - Filter counts don't update on auto refresh
  • 198: Bug - Append response menu goes past bottom of screen
  • 222: Bug - Aspell doesn't work on Windows with wysiwyg when there's a space in the file path
  • 223: Bug - Some characters display incorrectly in IE7 due to wrong encoding header
  • 224: Bug - Improve Postgres memory use on large attachment inserts
  • 225: Bug - Adding columns can sometimes add another empty column in safari
  • 215: Bug - Quoting text only returns first line in some installations
  • 203: Bug - Don't turn mailto: urls in emails into absolute url links
  • 185: Bug - HTML entities show in Excel export
  • 178: Bug - Formatted text headers in responses don't work after level 1 header in wysiwyg
  • 179: Bug - Portal template editor broken on some IE7 builds
  • 156: Bug - Fixed issue with drill down custom fields on IIS
  • 161: Bug - Live Lookup overwrites fields that are not returned
  • 165: Bug - Tidy on PHP4 returns 1 instead of note text
  • 166: Bug - Added AT&T to SMS list
  • 167: Bug - Confirm that new licenses cannot be uploaded if they have less users than are currently active in the installation
  • 151: Bug - private.request.getCategories returns only categories marked as public
  • 152: Bug - Strip form tags from any HTML emails
  • 146: Bug - Trim excess characters in new predefined list items
  • 115: Bug - Add option which allows you to turn on Gecko spellchecking for wysiwyg
  • 141: Bug - Loop protection for within a request to prevent overload. Only unique emails will be imported, identical duplicates will be ignored
  • 131: Bug - Long custom fields create horizontal scroll
  • 132: Bug - Special characters in drill down
  • 133: Bug - Add ability to select which website to install to on IIS7 when using Windows Installer
  • 135: Bug - Installer dies when trying to reach a remote database it can't reach
  • 118: Bug - White space not held in text signatures box
  • 112: Bug - External notes should not be allowed to be sent without a TO
  • 15: Bug - When system is set to send text, but receive is set to display HTML, notifications contain HTML
  • 22: Bug - List of staff in reminders box shows random characters and/or wrong person included
  • 78: Bug - Absolute URL's for KB images
  • 105: Bug - Windows Desktop Installer should check if PHP is already installed and not continue if it is

59. Version 2.4.2 - Template Changes

This page describes the changes to each HelpSpot portal template. If you have an HTML editor available like Dreamweaver or BBEdit it is probably more efficient to simple use the diff tools to compare your edited documents (/custom_templates) with the new templates (/helpspot/templates/). If those tools are not available, the listings below will allow you to manually change the templates.

These changes are only needed if you have customized your portal and specifically customized the files listed below. If not, you do not need to make any adjustments.

Your portal will not work correctly until these changes have been made.

Note: If you're upgrading from version 1.x you will also need to apply the template changes here.

These templates have changed in version 2.4:

  • css.tpl.php
  • email.tpl.php
  • index.tpl.php
  • js.tpl.php
  • navigation.tpl.php
  • request.check.tpl.php
  • request.tpl.php
  • searchbox.tpl.php

css.tpl.php

New lines starting at 502:

pre{ font: 100% courier,monospace; border: 1px solid #ccc; overflow: auto; overflow-x: scroll; width: 90%; padding: 1em 1em 1em 1em; background: #fff7f0; color: #000 }
.initsubject{ color: #7F7F7F; } .request_summary{ display: block; overflow: hidden; height: 14px; } .feedback_box_error{ border: 1px solid red; padding: 10px; color: red; font-weight: bold; } .feedback_box_positive{ border: 1px solid green; padding: 10px; color: green; font-weight: bold; } .calendar_date_table{ padding-left: 0px; margin-left: 0px; margin-top: 2px; margin-bottom: 0px; padding-bottom: 0px; } .calendar_date{ text-align: bottom; border: 1px solid #666666; background-color: #fff; padding: 2px; } .calendar_date_holder{ color: #666666; cursor: pointer; } .sending_note{ color: red; }

email.tpl.php

Modified line 20, change form URL. Line should be:

<form action="index.php?pg=email&id=<?php echo $this->get_id ?>" method="POST">

New lines starting at 41:

<p><label for="youremail" class="datalabel"><?php echo lg_portal_youremail ?></label><br> <input type="text" name="youremail" size="40" maxlength="250" value="<?php echo $this->helper->visitor['email'] ?>" /> </p>
<?php //Captcha form protection. You can turn this on and off via a setting in Admin->Settings->System Security. It's enabled by default //This text captcha should be sufficient for most automated spam. If someone has modified a robot to target your site specifically //then obfuscating the word via javascript or using an image may improve results ?> <?php if($this->hd_useCaptcha == 1): ?> <p><label for="captcha" class="datalabel required"><?php echo lg_portal_captcha ?> - </label><b class="captcha_label"><?php echo $_SESSION['portal_captcha'] ?></b><br /> <?php echo $this->helper->showError('captcha','<br />') ?> <input type="text" name="captcha" size="20" maxlength="250" value="" /> </p> <?php endif; ?>
<div class="formbuttondiv">

index.tpl.php

New lines starting at 11:

case "request.check":
// If a visitor is logged in already send them to their history if($this->splugin('Request_Check','isLoggedIn') && empty($this->get_id)){ $this->helper->redirect($this->cf_url.'/index.php?pg=request.history'); }
include $this->loadTemplate('request.check.tpl.php'); break;

New lines starting at 18:

break;
case "request.history": include $this->loadTemplate('request.history.tpl.php'); break;
case "css":

New lines starting at 71:

		
break;
case "maintenance": include $this->loadTemplate('maintenance.tpl.php'); break;
default:

js.tpl.php

Modified line 12, added text to header. Line should be:

header('Content-type: text/javascript; charset=utf-8');
header('Content-Disposition: inline; filename="js.js"');

New lines starting at 58 (bottom of file):

}
//Function that resets a portal login password function ChangePortalLoginPassword(){ //Find the new password they've set var password_new = $F('new_password'); //Find the password confirmation they've set var password_confirm = $F('new_password_confirm'); //Check if the password and the password confirm field match and that the password is not empty. if(password_new != password_confirm || password_new.empty()){ //Popup an alert to notify the user that the passwords must match show_feedback("<?php echo lg_portal_req_passworderror ?>","error"); }else{ //Everything is OK so send the new password to the server new Ajax.Request("index.php?pg=password.change", { method: "post", parameters: {password: password_new}, onSuccess: function(transport) { show_feedback("<?php echo lg_portal_req_passwordsaved ?>","success"); //Hide the password box and clear the form fields $("change_password_box").hide(); $("new_password").value = ""; $("new_password_confirm").value = ""; }, onFailure: function(transport){ show_feedback("<?php echo lg_portal_req_passwordposterror ?>","error"); } }); } } //Function that sends the retrieve password email function RetrievePortalLoginPassword(){ //If there's no email in the box show feedback that an email needs to be entered if($F("login_email").empty()){ show_feedback("<?php echo lg_portal_req_emailempty ?>","error"); return; }else{ //Change link text to loading $("retrievePortalPasswordLink").update('<span class="sending_note"><?php echo lg_portal_req_sending ?></span>'); //An email is available so send the password email new Ajax.Request("index.php?pg=password.retrieve", { method: "post", parameters: {login_email: $F("login_email")}, onSuccess: function(transport) { show_feedback("<?php echo lg_portal_req_passwordsent ?>","success"); }, onFailure: function(transport){ show_feedback("<?php echo lg_portal_req_emailerror ?>","error"); }, onComplete: function(){ //Remove sending text $("retrievePortalPasswordLink").update(); } }); } } //Function to create a feedback box at the top of the right column. function show_feedback(message,type){ //Style the feedback box as appropriate for each type of feedback if(type == "error"){ $("feedback_box").addClassName("feedback_box_error"); }else{ //By default shows positive feedback $("feedback_box").addClassName("feedback_box_positive"); } //Show the box $("feedback_box").show(); //Insert message into the feedback box $("feedback_box").update(message); }

navigation.tpl.php

New lines starting at 46 (bottom of file):

<div id="content2col">
<!-- Feedback box. Hidden by default and called from Javascript functions to provide user feedback --> <div id="feedback_box" style="display:none;"></div>

request.check.tpl.php

New lines starting at 11:

	
<h1><?php echo lg_portal_accessidheader ?> : <?php echo $this->get_id ?></h1>
<?php include $this->loadTemplate('loginbar.tpl.php'); ?>
<br />

Modified lines starting at 26. Replace the entire block below with the one after:

Old Code:

<?php /* Because the updates are only protected by the access key this code hides the request information after the request has been closed for X days. This keeps people from submitting information about a new request into an old one and also prevents search engines from getting this private information if the URL is accidentally published. You may change the time after the request is closed through the last variable below. Other valid examples are: '2 week', '1 month', '15 day'. Empty will turn off access as soon as the request is closed '' Leaving some time is also good because if the customers issue wasn't in fact solved then it gives them time to provide more information. In that case HelpSpot will reopen the request back to the original person assigned rather than the customer submitting a new request about an existing issue and the back and forth that results from that scenario. */ ?> <?php if($this->splugin('Request_Check','isClosed',$this->get_id,'2 Day')): ?>

New Code:

		<?php 
		/* This code hides the 
			request information after the request has been closed for X days. This keeps
			people from submitting information about a new request into an old one and also 
			prevents search engines from getting this private information if the URL is accidentally 
			published. You may change the time after the request is closed through the last variable below.
			Other valid examples are: '2 week', '1 month', '15 day'. Empty will turn off access as soon as the request is closed ''
			
			Leaving some time is also good because if the customers issue wasn't in fact solved then it gives them time to 
			provide more information. In that case HelpSpot will reopen the request back to the original person assigned 
			rather than the customer submitting a new request about an existing issue and the back and forth that results
			from that scenario.
			
			Note that as of version 2.4 this line also checks to see if the customer is logged in. If they are they are allowed 
			to view the request even if the time specified below has passed.
		*/ ?>
		<?php if($this->splugin('Request_Check','isClosed',$this->get_id,'2 Day') && !$this->splugin('Request_Check','isLoggedIn')): ?>

Modified line 43. Replace the entire line with the one after:

Old Code:

			
<p><a href="index.php?pg=request"><?php echo lg_portal_closedsubmitnew ?></a></p>

New Code:

			<p>
				<a href="index.php?pg=request.check"><?php echo lg_portal_closedlogin ?></a>
				<?php echo lg_portal_closedor ?>
				<a href="index.php?pg=request"><?php echo lg_portal_closedsubmitnew ?></a>
			</p>

New lines starting at 119:

<?php endforeach; ?>
<?php //Don't show update box for requests closed longer than 2 days ?> <?php if(!$this->splugin('Request_Check','isClosed',$this->get_id,'2 Day')): ?>
<p><label for="update" class="datalabel"><?php echo lg_portal_req_update ?>:</label><br />

New lines starting around 134:

<div class="formbuttondiv"> <input type="submit" name="submit" value="<?php echo lg_portal_req_updaterequest ?>" /> </div>
<?php endif; ?>
<?php endif; ?> <?php else: ?>

Modified line 149. Replace the entire block below with the one after:

Old Code:

<?php else: ?> <form action="index.php?pg=request.check" method="get"> <input type="hidden" name="pg" value="request.check" /> <p><?php echo $this->helper->showError('id','<br />') ?> <b><?php echo lg_portal_req_enterkey ?>:</b> <input type="text" name="id" value="" size="20" maxlength="100" /> <input type="submit" name="submit" value="<?php echo lg_portal_check ?>" /> </p> </form> <?php endif; ?>
<?php include $this->loadTemplate('footer.tpl.php'); ?>

New Code:

<?php else: ?>

	<form action="index.php?pg=request.check" method="get">
		<input type="hidden" name="pg" value="request.check" />
		<p><?php echo $this->helper->showError('id','<br />') ?>
			<b><?php echo lg_portal_req_enterkey ?>:</b><br /><br />
			<input type="text" name="id" value="" size="20" maxlength="100" tabindex="100" />
			<input type="submit" name="submit" value="<?php echo lg_portal_check ?>" tabindex="101" />
		</p>
	</form>
	
	<hr width="80%" />
	
	<form action="index.php?pg=login" method="post">
		<p><b><?php echo lg_portal_req_login ?>:</b></p>
		
		<p><label for="login_email" class="datalabel"><?php echo ($this->hd_requestCheckAuthType == "internal" ? lg_portal_req_loginemail : lg_portal_req_loginusername) ?>:</label><br />
			<?php echo $this->helper->showError('login_email','<br />') ?>
			<input type="text" name="login_email" id="login_email" size="40" maxlength="100" tabindex="102" value="<?php echo $this->get_login_email ?>" autocomplete="off" /><br />
			<?php if($this->hd_requestCheckAuthType == "internal"): ?>
			<?php //only show this password retrieval link if we're using internal authentication on the portal ?>
				<span id="retrievePortalPasswordLink">(<a href="#" onclick="RetrievePortalLoginPassword();return false;"><?php echo lg_portal_req_emailpassword ?></a>)</span>
			<?php endif; ?>
		</p>		

		<p><label for="login_password" class="datalabel"><?php echo lg_portal_req_loginpassword ?>:</label><br />
			<input type="password" name="login_password" id="login_password" size="40" maxlength="100" tabindex="103" value="" autocomplete="off" />
		</p>
		
		<p>
			<input type="submit" name="submit" value="<?php echo lg_portal_req_loginbutton ?>" tabindex="104" />
		</p>
	</form>
	
<?php endif; ?>
	
<?php include $this->loadTemplate('footer.tpl.php'); ?>

request.tpl.php

Modified line 206, change input size. Line should be:

	
<p><label for="captcha" class="datalabel required"><?php echo lg_portal_captcha ?> - </label><b class="captcha_label"><?php echo $_SESSION['portal_captcha'] ?></b><br /> <?php echo $this->helper->showError('captcha','<br />') ?>
<input type="text" name="captcha" size="15" maxlength="250" value="" />
</p>

searchbox.tpl.php

Modified entire file. Replace all lines in searchbox.tpl.php with:

<?php if($this->splugin('Forums_Forums','count') || $this->splugin('KB_Books','count')): ?>
	<form action="index.php" method="get">
	<input type="hidden" name="pg" value="search">
	<div class="">
		<p align="center">
			<input type="text" name="q" size="40" style="width:60%;" value="<?php echo $this->get_q ?>"> 
			<select name="area" id="area" style="width: 25%;">				
				<?php if($this->splugin('KB_Books','count')): ?>
					<option value="kb" <?php if($this->get_area == 'kb') echo 'selected' ?>><?php echo lg_portal_searchkb ?></option>
				<?php endif; ?>
				<?php if($this->splugin('Forums_Forums','count')): ?>
					<option value="forum" <?php if($this->get_area == 'forum') echo 'selected' ?>><?php echo lg_portal_searchforum ?></option>
				<?php endif; ?>
			</select>	
			<input type="submit" name="submit" value="<?php echo lg_portal_search ?>">
		</p>
	</div>
	</form>
<?php endif; ?>

60. Version 2.1.1

  • 19: Feature - System preference to show linked images in HTML emails
  • 64: Feature - Set new installations to have IP/Time portal validation off by default
  • 98: Feature - Improved speed of filters which use date/time ranges
  • 99: Bug - Display count in filters could not be removed
  • 69: Bug - Special characters in Live Lookup or request history searches break search results
  • 74: Bug - Request ticker doesn't properly show HTML emails
  • 79: Bug - Attachments hard to click when horiz scroll in place on request history
  • 82: Bug - Add close option to request history box
  • 91: Bug - Attachments with no file extensions are not downloadable
  • 6: Bug - Image tags not removed from modal box display of initial requests
  • 8: Bug - Wrong URL for request check when using notify feature
  • 9: Bug - No text version sent with HTML emails of staff notifications
  • 10: Bug - Spellchecker not enabled in Forums
  • 11: Bug - HTML rendering bug for emails from Outlook using Word for editor
  • 16: Bug - Merging request with itself doesn't provide proper error
  • 21: Bug - White space trimmed from signature when in text email mode
  • 22: Bug - List of staff in reminders box shows random characters and/or wrong person included
  • 27: Bug - Upgrade link in admin should point to installation upgrade page not zip and tar files
  • 28: Bug - Force reminders to be sent via email even if notification is off
  • 40: Bug - Force MySQL to not use strict mode
  • 42: Bug - Request ID placeholder not replaced correctly in update notes
  • 43: Bug - Wysiwyg spellchecking doesn't work on Windows
  • 51: Bug - Improperly formated email FROM not parsed correctly
  • 54: Bug - Badly formatted HTML emails cause email system to get stuck
  • 55: Bug - Allowing Gecko spellcheck option in wysiwyg breaks spellchecker on some Windows servers. Gecko spellcheck option turned off
  • 57: Bug - Admin page doesn't load if bad query returned for stats
  • 58: Bug - Set spellchecker to use upload_tmp_dir instead of system temp dir when possible
  • 63: Bug - Trash deleted even when set to never delete

61. Version 2.1.0

Primary Changes

  • Significant speed improvements in the Workspace for all filters
  • Batch reply to multiple requests at once
  • Automation rules can mark items as not urgent
  • Email subject lines are now templated and can contiain placeholders
  • Test mailbox connection button on mailbox page to allow for easy testing
  • 6 new reports
  • Portal template editing from within HelpSpot in Admin->Tools
  • Hide number of requests history notes to user configurable amount
  • Request merging
  • User preference for returning to request page or workspace after closing request
  • Ability to email results of an automation rule
  • Automation option to email an arbitrary email address
  • Automation option to send SMS
  • Improved reminders interface
  • Added view source option to emails in request history
  • If zlib is available Javascript will be compressed for increased speed
  • Moderators may now post to closed forums, effectively allowing moderator posting only on selected forums.
  • 6 New custom fields: Ajax select, decimal, drill down, regex match, date, and date time
  • Expanded placeholders throughout system
  • Fast navigation menu for request page
  • Custom where clause filter
  • Added latest note column
  • Limit number of emails imported per tasks.php run
  • Email request ID prefix to allow inter-HelpSpot installation communication via email
  • Live Lookup auto run option
  • Live Lookup now sends and sets custom fields
  • Automation rules now log notes correctly
  • Status id's over 10 save in filters
  • Last update filter times now filter correctly
  • Subject line width fixed
  • Portal file downloads on Windows/SQL Server fixed
  • Removed unneeded settings for load limit and RSS short description

62. Version 2 - Template Changes

This page describes the changes to each HelpSpot portal template. If you have an HTML editor available like Dreamweaver or BBEdit it is probably more efficient to simple use the diff tools to compare your edited documents (/custom_templates) with the new templates (/helpspot/templates/). If those tools are not available, the listings below will allow you to manually change the templates.

These changes are only needed if you have customized your portal and specifically customized the files listed below. If not, you do not need to make any adjustments.

Note: Your portal will not work correctly until these changes have been made.

These templates have changed in version 2:

  • css.tpl.php
  • forums.posts.tpl.php
  • forums.topics.tpl.php
  • header.tpl.php
  • index.tpl.php
  • request.tpl.php
  • request.check.tpl.php

css.tpl.php

New line starting at 15:


header('Content-type: text/css');
header('Content-Disposition: inline; filename="style.css"');
?>
/* Import styles for calendar used in date/datetime custom fields */
@import "js/jscalendar/skins/aqua/theme.css";


body
{

New line starting at 438:


}

.captcha_label{
	color:				#000;
	font-size:			14px;
	border: 			1px solid red;
	padding:			3px 10px 3px 10px;	
}


.forumoption{

Remove line 41 in h2 class:

margin-bottom: -10px;

Remove line 60 in h4 class:

margin-bottom: -10px;

Remove line 138 in #content2col class delete the /20px:

font: 12px/20px Arial, Helvetica, sans-serif;

forums.posts.tpl.php

New line starting at 85:

<p><label for="sURL" class="datalabel"><?php echo lg_portal_posterurl ?>:</label><br /> <input type="text" name="sURL" size="40" maxlength="250" value="<?php echo $this->helper->visitor['url'] ?>" /> </p>
<?php //Captcha form protection. You can turn this on and off via a setting in Admin->Settings->System Security. It's enabled by default //This text captcha should be sufficient for most automated spam. If someone has modified a robot to target your site specifically //then obfuscating the word via javascript or using an image may improve results ?> <?php if($this->hd_useCaptcha == 1): ?> <p><label for="captcha" class="datalabel required"><?php echo lg_portal_captcha ?> - </label><b class="captcha_label"><?php echo $_SESSION['portal_captcha'] ?></b><br /> <?php echo $this->helper->showError('captcha','<br />') ?> <input type="text" name="captcha" size="20" maxlength="250" value="" /> </p> <?php endif; ?>

forums.topics.tpl.php

New line starting at 15:

<p><label for="sURL" class="datalabel"><?php echo lg_portal_posterurl ?>:</label><br /> <input type="text" name="sURL" size="40" maxlength="250" value="<?php echo $this->helper->visitor['url'] ?>" /> </p>
<?php //Captcha form protection. You can turn this on and off via a setting in Admin->Settings->System Security. It's enabled by default //This text captcha should be sufficient for most automated spam. If someone has modified a robot to target your site specifically //then obfuscating the word via javascript or using an image may improve results ?> <?php if($this->hd_useCaptcha == 1): ?> <p><label for="captcha" class="datalabel required"><?php echo lg_portal_captcha ?> - </label><b class="captcha_label"><?php echo $_SESSION['portal_captcha'] ?></b><br /> <?php echo $this->helper->showError('captcha','<br />') ?> <input type="text" name="captcha" size="20" maxlength="250" value="" /> </p> <?php endif; ?>

header.tpl.php

New lines starting at 19:



<link rel="stylesheet" type="text/css"  href="<?php echo $this->cf_url ?>/index.php?pg=kb.wysiwyg" media="screen, projection" />

<!--javascript-->
<script type="text/javascript" src="<?php echo $this->cf_url ?>/index.php?pg=js"></script>

</head>

Modified line starting at 19 (line 23 after above edit), replace <body> with:

<body onload="<?php echo $this->pg_onload ?>">

index.tpl.php

New lines starting at 16:


	case "css":
		include $this->loadTemplate('css.tpl.php');
		break;	
	case "js":
		include $this->loadTemplate('js.tpl.php');
		break;				
	case "kb":
		include $this->loadTemplate('kb.tpl.php');
		break;

request.tpl.php

New lines starting at 22:


$this->assign('pg_title',lg_portal_request);

//Set onload
$this->assign('pg_onload', "ShowCategoryCustomFields();");

include $this->loadTemplate('header.tpl.php');

Modify line 106 (109 after above change), replace <select name="xCategory"> with:

<select name="xCategory" id="xCategory" onchange="ShowCategoryCustomFields();">

New lines starting at 123 (126 after above changes):

<?php $fieldID 		 = 'Custom'.$field['fieldID']; //Set the field ID for use below ?>
<?php $visible = $field['isAlwaysVisible'] ? '' : 'display:none;'; //Set if the custom field is visible by default ?>

Modify line at 124 (128 after above changes), replace <p> with the code below. Be sure to leave the rest of the line the same from the <label> tag on.

<p id="<?php echo $fieldID ?>_wrapper" style="<?php echo $visible ?>"><label for="<?php echo $fieldID ?>" class="datalabel<?php echo $requiredClass ?>"><?php echo $field['fieldName'] ?>:</label><br />

New lines starting at 142 (146 after above changes):


		<?php elseif($field['fieldType'] == 'numtext'): ?>
			<input name="<?php echo $fieldID ?>" type="text" size="10" maxlength="10" value="<?php echo $this->$fieldID ?>">
		<?php elseif($field['fieldType'] == 'drilldown'): ?>	
			<?php echo $this->helper->getDrillDownField($field,' '); ?>
		<?php elseif($field['fieldType'] == 'decimal'): ?>	
			<input name="<?php echo $fieldID ?>" type="text" size="10" maxlength="10" value="<?php echo $this->$fieldID ?>">
		<?php elseif($field['fieldType'] == 'regex'): ?>
			<?php echo $this->helper->getRegexField($field); ?>
		<?php elseif($field['fieldType'] == 'date'): ?>	
			<?php echo $this->helper->getDateField($field); ?>
		<?php elseif($field['fieldType'] == 'datetime'): ?>	
			<?php echo $this->helper->getDateTimeField($field); ?>
		<?php endif; ?>

New lines starting at 198:

<?php endif; ?>

<?php 
//Captcha form protection. You can turn this on and off via a setting in Admin->Settings->System Security. It's enabled by default 
//This text captcha should be sufficient for most automated spam. If someone has modified a robot to target your site specifically 
//then obfuscating the word via javascript or using an image may improve results ?>
<?php if($this->hd_useCaptcha == 1): ?>

	<p><label for="captcha" class="datalabel required"><?php echo lg_portal_captcha ?> - </label><b class="captcha_label"><?php echo $_SESSION['portal_captcha'] ?></b><br />
		<?php echo $this->helper->showError('captcha','<br />') ?>
		<input type="text" name="captcha" size="20" maxlength="250" value="" />
	</p>
	
<?php endif; ?>

</div> <div class="formbuttondiv">

request.check.tpl.php

Modified lines starting at 72. Replace the entire block below with the one after:

<?php //Output public custom fields. ?> <?php foreach($this->splugin('CustomFields','getPublicCustomFields') AS $field): ?> <?php $fieldID = 'Custom'.$field['fieldID']; //Set the field ID for use below ?> <b><?php echo $field['fieldName'] ?>:</b> <?php if($field['fieldType'] == 'checkbox'): ?> <?php echo ($request[$fieldID] == 1 ? lg_portal_checkboxchecked : lg_portal_checkboxempty) ?><br /> <?php else: ?> <?php echo (empty($request[$fieldID]) ? ' - ' : $request[$fieldID]) ?><br /> <?php endif; ?> <?php endforeach; ?> <br />

New code:

	<?php //Output public custom fields. ?>
	<?php foreach($this->splugin('CustomFields','getPublicCustomFields') AS $field): ?>
		
		<?php $fieldID = 'Custom'.$field['fieldID']; //Set the field ID for use below ?>
		<?php $visible = $field['isAlwaysVisible'] ? '' : 'display:none;'; //Set if the custom field is visible by default ?>
		
		<div id="<?php echo $fieldID ?>_wrapper" style="<?php echo $visible ?>">
		<b><?php echo $field['fieldName'] ?>:</b> 
			
			<?php if($field['fieldType'] == 'checkbox'): ?>
				<?php echo ($request[$fieldID] == 1 ? lg_portal_checkboxchecked : lg_portal_checkboxempty) ?>
			<?php elseif($field['fieldType'] == 'drilldown'): ?>
				<?php echo $this->helper->showDrillDownField($request[$fieldID]); ?>
			<?php elseif($field['fieldType'] == 'date'): ?>	
				<?php echo $this->helper->shortDateFormat($request[$fieldID]) ?>
			<?php elseif($field['fieldType'] == 'datetime'): ?>
				<?php echo $this->helper->longDateFormat($request[$fieldID]) ?>
			<?php else: ?>
				<?php echo (empty($request[$fieldID]) ? ' - ' : $request[$fieldID]) ?>
			<?php endif; ?>
		</div>
		
	<?php endforeach; ?>			
	<!-- You must uncomment this line if you want to show custom fields -->
	<script type="text/javascript" language="JavaScript">ShowCategoryCustomFields(<?php echo $request['xCategory'] ?>);</script>
	<br />	

63. Version 1.5.5

New Features

  • Option in each request history log item to show it as text holding the line break formatting
  • Added fax as an option for contacted via
  • Queues in mobile interface now show first line of request
  • Added request ID filter condition
  • Personal photo's now limited to 50K to prevent users from uploading large files
  • Added relative to last update filter condition
  • Tasks.php now tries to prevent auto-replies to undeliverable messages

Bug Fixes

  • Fixed bug with closed requests not being correctly reopened and instead opening a new request
  • Fixed bug in Live Lookup which prevented multiple results from being displayed
  • Fixed session logout bug with some versions of MySQL
  • Removed trashed items from being counted in request drop down list
  • Removed trashed items from being counted in reports
  • Don't allow reactivation of staff when no license slots are available
  • Fixed path to upgrade links
  • When entering print view in a queue sort order is preserved
  • Fixed broken images
  • Fixed Safari bug with drag/drop
  • Spam count in forums now shows correct amount
  • Javascript bug in spam delete when submitting
  • Fixed PHP4 bug with deleting portal spam
  • Fixed calendar time issue when creating reminders in the PM
  • No longer need to display "last update" columns to sort by them
  • Javascript bug in IE when doing history search
  • Improved error message on index.php before installation
  • Deleting a staffer with active requests and will now ignore any auto-assignments on categories they are in
  • Time tracker box now observes preference setting when creating a new request

64. Version 1.5.1

Bug Fixes

  • Fixed major bug where some Windows installations would not be able to access admin.php
  • Fixed Live Lookup toggle error.
  • Fixed category list in filters when in limited access mode.

65. Version 1.5.0

New Features

  • Filters are totally redesigned with dozens of new options and combinations. In addition, the new interface makes it much easier to see what conditions are defined. Viewable columns are now sortable, OR filtering, and much more.
  • 3 tier SPAM filtration added to portal forms.
  • Significant speed enhancements to batch operations in the queue's.
  • My Queue now shows if a request has been replied to. This column can also be added to filters.
  • Prepared responses are now group-able.
  • Request notes can now be sent to external emails. For instance to ask for input from a vendor.
  • The portal now accepts file uploads in the request submission form as well as displays them on the request check page.
  • Requests can now be moved to the "trash". Trashed requests will be automatically deleted after 30 days (or less if configured to do so by the administrator)
  • Age limits for re-opening requests. Emails for a request older than this limit will be turned into new requests.
  • The request note text area now auto resizes as you type.
  • Forum posts can now be spellchecked and can insert prepared responses and knowledge book links.
  • Improved calendar selector for dates.
  • After closing a request the user is now returned to the last queue they were in rather than to the closed request.
  • Added 'Mark as spam' as option for mail rules.
  • Improved caching mechanism for Internet Explorer speeds up page loading and fixes issues with old cache pages being shown when they shouldn't be.
  • Live Lookup can now be called via HTTP POST.
  • Added several new conditions to Automation.
  • The Time Tracker is now available on new requests before submitting the request.
  • Audio files are now embedded into the request history allowing one click playing.
  • Support for MySQL 5
  • Support for Microsoft SQL Server 2005
  • Support for the PHP MySQLi interface.
  • Support for IE7
  • RSS feeds now use HTTP basic authentication for more secure access.
  • Reordering of workspace columns, filter columns, and custom field lists now draggable for easy reordering.
  • Filters now paginate when they hit the single page limit.
  • Ability to run individual instances of tasks.php and tasks2.php for each mailbox/automation rule.
  • Tasks.php debugging now shows more detail and speeds.
  • The CC field can now be set from a prepared response.
  • Time reports can now be filtered by all other request criteria like categories and status.
  • Optimized email SPAM filter resulting in dramatically faster checking and learning.
  • Status, category, and custom fields can now be set by passing values into the request page via GET.

Bug Fixes

  • Fixed international character issues in time tracker and Live Refresh.
  • Fixed time comparison conditions in Automation.
  • Filtering on contacted via now works correctly.
  • Assigned to Inbox is now remembered correctly in filters.
  • Fixed error created in error log when using Live Refresh and the queue being called had 0 requests in it.
  • Email notifications no longer sent when an email is detected to be SPAM.
  • Fixed image rendering bug in knowledge book WYSIWYG editor.
  • Fixed cookies so 2 different installations can safely share the same domain in different folders.
  • Fixed bug on MS SQL Server where custom fields using predefined lists would leave a change note when they shouldn't.
  • CSS change so that request notes which have strings more than 400px wide no longer pull interface to the right.
  • User passwords now hidden from administrators.
  • Limited access mode no longer shows unassigned categories in queue batch operation list.
  • Printer friendly portal pages now correctly format HTML.
  • Fixed Live Lookup link when customer ID was not numeric.
  • Fixed bug in admin settings when trying to use Black Box auth before setting usernames.
  • Added check for a new customer trying to upload a license with less named users than exist in their trial installation.

66. Version 1.5.0 - Template Changes

This page describes the changes to each HelpSpot portal template. If you have an HTML editor available like Dreamweaver or BBEdit it is probably more effecient to simple use the diff tools to compare your edited documents (/custom_templates) with the new templates (/helpspot/templates/). If those tools are not available, the listings below will allow you to manually change the templates.

These changes are only needed if you have customized your portal and specifically customized the files listed below. If not, you do not need to make any adjustments.

Note: Your portal will not work correctly until these changes have been made.

These templates have changed in version 1.5.0:

  • css.tpl.php
  • forums.posts.tpl.php
  • forums.topics.tpl.php
  • index.tpl.php
  • request.check.tpl.php
  • request.tpl.php

css.tpl.php

New line starting after 484:

pre{
font: 100% courier,monospace;
border: 1px solid #ccc;
overflow: auto;
overflow-x: scroll;
width: 90%;
padding: 1em 1em 1em 1em;
background: #fff7f0;
color: #000
}

forums.posts.tpl.php

New lines starting after line 92, just before the close form tag </form>

	
<!-- START: SPAM Protection DO NOT REMOVE -->
<?php echo $this->helper->getSPAMCheckFields() ?>
<!-- END: SPAM Protection DO NOT REMOVE -->

forums.topics.tpl.php

New lines starting after line 95, just before the close form tag </form>

	
<!-- START: SPAM Protection DO NOT REMOVE -->
<?php echo $this->helper->getSPAMCheckFields() ?>
<!-- END: SPAM Protection DO NOT REMOVE -->

index.tpl.php

New lines after line 56

case "moderated":
include $this->loadTemplate('moderated.tpl.php');
break;

request.check.tpl.php

Edit line 20. It should now be:

<form action="index.php?pg=request.check" method="post" enctype="multipart/form-data">

New lines after line 115

<?php //File uploads. You can turn this on and off via a setting in Admin->Settings->Portal. It's disabled by default ?>
<?php if($this->hd_allowFileAttachments == 1): ?>

<p><label for="doc[]" class="datalabel"><?php echo lg_portal_req_file_upload ?>:</label><br />
<?php //TIP: You can have multiple file uploads by adding more lines identical to the one below. ?>
<input type="file" name="doc[]" size="40">
</p>

<?php endif; ?>

request.tpl.php

Edit line 33. It should now be:

<form action="index.php?pg=request" method="post" enctype="multipart/form-data">

Replace line 146 with:

<?php //portalFormFormat 1 is the complex 3 question display. 2 is the simple single textarea. 
//1 is the default. If you'd like to just use the simple textarea you can switch the setting in Admin->Settings->Portal

if($this->hd_portalFormFormat == 1): ?>

New lines after original line 169 (after above modification it's around 172)

<?php //File uploads. You can turn this on and off via a setting in Admin->Settings->Portal. It's disabled by default ?>
<?php if($this->hd_allowFileAttachments == 1): ?>

<p><label for="doc[]" class="datalabel"><?php echo lg_portal_req_file_upload ?>:</label><br />
<?php //TIP: You can have multiple file uploads by adding more lines identical to the one below. ?>
<input type="file" name="doc[]" size="40">
</p>

<?php endif; ?>

New lines after line 175 (after above modification it's around 188), just before the close form tag </form>

<!-- START: SPAM Protection DO NOT REMOVE --> <?php echo $this->helper->getSPAMCheckFields() ?> <!-- END: SPAM Protection DO NOT REMOVE -->  

67. Version 1.3.1

New Features

  • Binary searching enabled in SQL Server and MySQL for phrase searching
  • Live Lookup now AJAX enhanced, embedded in the page
  • Request page history search now AJAX enhanced, embedded in the page
  • Customer information can now be inserted from a request page history search
  • You can now add the 'Take It' button to filters. Note that it does not prevent others from taking the request as the Inbox does.
  • Make public button returned to request history and now logs when the public/unpublic state is changed and who did so
  • Mail rules can now assign to the inbox
  • Using SMTP authentication is now optional when using an SMTP server for email
  • Note attachments now visible in the portal
  • Last update/customer update/public update/time/public count fields now sortable
  • Each knowledge book now has a printer friendly version of the entire book
  • Live Refresh feature can optionally refresh your queue/filter without reloading the page or losing your checked requests
  • Email accounts now have loop protection so that HelpSpot and an email autoresponder don't send emails to each other indefinitely creating numerous new requests.
  • Subject lines of outbound emails now contain only the request ID and not the full access key

Bug Fixes

  • Live Lookup now works correctly from the command line
  • Tasks.php memory performance improved
  • Existing responses can now be selected properly when using SQL Server
  • Spellchecker now works when PHP short tags disabled
  • Knowledge book searches no longer show HTML in the portal
  • Postgres didn't correctly add time tracking in filter column
  • Don't show make public/private in closed requests
  • Apostrophe in Live Lookup request no longer breaks 'insert' button
  • Extra brackets/quotes removed from CC box on public notes
  • Request history quoting now works with accented characters
  • Emails from the same account but different capitalization now correctly displayed as public
  • Request page javascript checks now work correctly in IE
  • Tasks.php now runs correctly from the command line with IP security enabled
  • Mbstring functions now used if available before Iconv
  • Placeholders used in request notes now replaced before storing in database so that they do not change when a request is reassigned
  • Fix WYSIWYG error when using zlib compression
  • Internal change to allow easier use of CGI wrappers

68. Version 1.2.0

Major New Features

  • Automation rules for escalation, reassignment and more
  • Mail rules for routing email and instant responses
  • Automatic assignment now controlled on the category level
  • Time tracking
  • Export filters to Excel
  • Predefined responses can now set several request fields as once
  • Quote request history notes
  • Configurable session timeouts

Other New Features

  • New filter columns last update, last customer update, public note count
  • Excess whitespace now removed from Microsoft Outlook emails
  • Improved email parser and handling of nested multipart mime messages
  • Show sent subject in request history
  • Out of office can now be reassigned to Inbox
  • Out of office shown on request page assignment drop down
  • Forums now show if a poster is subscribed via email
  • Personal preference added for defaulting notes to public
  • Personal preference added for embedding images
  • Personal preference added for knowledge book wysiwyg
  • All emails in the "To" header of an email are now shown
  • New filter option for open less than X hours
  • Forum RSS feeds now have pubdate item
  • Embedded images now show file names
  • Open a knowledge book page from the request page
  • Filter option to make RSS feeds customer friendly (no private notes)
  • Added week interval to reports
  • Added quick time selection to reports
  • New parser tag to allow staff assignment
  • Added the ability to batch assign to Inbox
  • Ability to limit the calling of tasks.php and tasks2.php to certain IP's

Bug Fixes

  • Improved email validation
  • Knowledge book pages in related pages popup now numbered correctly
  • Tab order on request page fixed
  • Date in before/after filter field can now be changed
  • Emails with only attachments now show in history correctly
  • Public requests that didn't send an email no longer store an email subject
  • Request ID search box fixed in FireFox 1.5+
  • Keyboard shortcuts no longer interfere with request ID search
  • Email found to be SPAM by email parser now has assigned user reset

69. Version 1.1.3

Bug Fixes

  • Critial: Email with very long "from" addresses (usually SPAM) can break the email parser and cause excess rows to be inserted in the request history database table. While a rare occurrence updating is strongly recommended.
  • SPAM filter efficiency bugs fixed.
  • Databases now protected from overly long strings in customer information

70. Version 1.1.2

New Features

  • Added debugging mode to tasks.php (enable in Admin->Settings)
  • Mobile version now has titles on each page
  • Mobile version now does not embed images in requests
  • Added ability to cancel file uploads
  • Added ability to pass initial customer data into create request screen via GET
  • When CCing others on a note the CC's are stored and displayed in the request history

Bug Fixes

  • Fixed problem with request page when IMAP extension not installed
  • Fixed blank page error on closed requests when running PHP 5.1.2 on Windows with IIS
  • HelpSpot now recognizes pjpeg
  • Attached images now save with correct file names to desktop
  • Append response now uses new menu in place of select list which caused the window to strech
  • Back arrow now does not return to queue when on request page and using keyboard shortcuts
  • Required numeric fields now accept 0
  • Green tab was stretched too far when uploading files
  • Fixed error with newest posts RSS feed
  • Fixed checkbox image when showing a custom field checkbox in a filter
  • Request ticker no longer shows both open and closed requests. Now only open.

71. Version 1.10

New Features

  • Integrated spellchecking
  • Dedicated mobile access version (requires HTML capable mobile browser)
  • Keyboard shortcuts in workspace
  • Ability to set default workspace
  • Auto shrink attach images for display in request history
  • New admin page layout
  • Enhanced Live Lookup layout
  • Urgent emails now marked as urgent when imported
  • Other people CC'd on emails are now visible
  • External emails may be CC'd on a request
  • Ability to make an assigned request back to unread
  • Improved request creation layout
  • Insert a link to a knowledge book page in a request
  • View latest forum posts in addition to topics
  • Limited access mode for Guest and Level 2 staffers. Allows use of those types for customer access by hiding other customers information.
  • Added portal template options to show custom fields on request check page.

Bug Fixes

  • Fixed character set issues in email names
  • Fixed character set issues with display of special characters, default character set now ISO-8859-1
  • SQL Server now defaults to AND searching
  • Spam requests marked as closed from request screen no longer train twice
  • In portal replaced incorrect maxsize HTML elements
  • Fixed reporting bug in reporting tags drill down
  • Upgraded WYSIWYG editor to eliminate IE bugs

72. Version 1.03

New Features

  • Add link to release notes on the admin homepage
  • Check for new HelpSpot version every 5 days upon administrator login
  • Provide option to strip HTML from requests or just escape HTML, allow exceptions to stripping
  • Underline "time since" in request history to make date more obvious to rollover
  • Added more tags to email parser including category and custom fields
  • Show category ID's and custom field ID's in their respective admin pages
  • Allow creation of multiple portal request submit forms and correctly handle redirects
  • Allow override and submission of 'simple' request submission textarea even when details form is in use in settings
  • Add assigned staff member placeholders for use in predefined requests

Bug Fixes

  • Fixed "misbehaving headers" error when running on Windows as a CGI
  • Increased DB error checking in installer.php
  • Incorrect PHP version checking in installer.php
  • Email subjects initiated from the create request screen were not maintained in future correspondence
  • When emails are received with attachments, but no text body the attachments were not shown
  • Changed wording in installer to 'installation time zone'
  • Lowered tasks.php timeout to prevent scripts from hanging
  • Removed unneeded javascript from installer.php
  • Corrected portal navigation highlighting when using custom templates
  • HTML not stripped from update emails correctly
  • Javascript popup alert when sending email fails on create a request page, now works correctly
  • When customizing columns the date closed would incorrectly show 12/31/1969
  • CC to other staff with no note caused blank page to appear
  • Custom fields admin page redesigned slightly to make examples more clear