Admin Manual

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

1. Installation

1.1. Requirements

Language

HelpSpot requires PHP 5.3+. The free ionCube Loader or Zend Guard Loader is required.

* Note, Windows users our installer installs all required components for you.

Operating System

HelpSpot has been tested with:

  • Linux
  • Unix
  • Windows 2003
  • Windows 2008
  • Windows 2008R2
  • Windows 2012

Database

  • Microsoft SQL Server 2005 / 2008 / 2012
  • MySQL 5+
  • PostgreSQL 9

Email Servers and Services

HelpSpot supports any email server or service that supports IMAP or POP including but not limited to:

  • Microsoft Exchange
  • Gmail
  • Live.com
  • Office365.com
  • Rackspace.com
  • any other IMAP or POP mail server

Mobile Access

Requires an HTML compliant mobile browser.

1.2. Installing HelpSpot

Completing the HelpSpot installation shouldn't take more than 15 minutes. Before starting, make sure you download HelpSpot and have your customer ID and license file available.

Note, if you are using the HelpSpot Windows Installer you can proceed to directly running the installer and following the on screen instructions. All steps below will be completed for you automatically by the installer.

Some Windows servers do not come with IIS enabled. You can find information about adding IIS on Windows Server here.

1. Install the IonCube Loader

If on a shared hosting server IonCube will most likely already be installed. However, contact your hosting provider to verify or run the test file as outlined below. If you host your server, you may need to install the loader.

You can check to verify IonCube is installed by creating a test php file on your server with the following lines in it:

<?php
phpinfo();
?>

In the browser, go to the test page and you should see reference to IonCube PHP Loader in the first blue box you see on the page. It should look something like the image below.

If it's not installed you should install IonCube now. To do so:

2. Create your database

The HelpSpot installer will not create your database. This must be done prior to moving on to the installer. Make sure to note the database name, username, password, and database host (often localhost) for the database.

Make sure the database user has the proper permissions to create tables within the database.

Microsoft SQL Server 2005 note: Be sure to check "Use full text indexing" when creating the database

3. Upload to the server

FTP or SFTP the HelpSpot archive file (helpspot.tar.gz or helpspot.zip) to your server. Once there, decompress the archive file, on *nix machines the following command should work: tar -xzvf helpspot.tar.gz . If you're on a Windows machine extract the archive with WinZip or a similar program. Move the files to the web root you intend to use for HelpSpot.

Note: you may install HelpSpot at the root of a domain (support.example.com) or in a folder below the root (i.e. www.example.com/myproduct/support/)

4. Configuration file

In the base directory of your installation you'll find a file called config-empty.php. Open this file and fill in the required database and host variables:

  • cDBTYPE - This should be one of the following: mysql, mssql, postgres_helpspot
  • cDBHOSTNAME - The host domain/IP of the database (ex: db1.myco.com, localhost)
  • cDBUSERNAME - Database username
  • cDBPASSWORD - Database users password
  • cDBNAME - Name of the database
  • cHOST - The full URL to your HelpSpot installation with no trailing slash. (ex: http://www.myco.com/support, http://help.myco.com)

After the details are filled in you must rename the file config.php before continuing.

Microsoft SQL Server note: The database user must be a SQL Server user and must use SQL authentication

5. Run the installer script

The installer script is located in the root of your HelpSpot directory (support.myco.com/installer.php). Run the installer via your browser and follow the instructions on screen. Delete the installer script when installation is complete.

Note that there are still more steps below

Common issues to be aware of:

  • You get a message about IonCube. This means the IonCube loader is not installed. Follow the directions above.
  • MSSQL requires the new SQLSRV driver from Microsoft. It's available here: MS SQLSRV PHP Module
  • On Windows you may need to uncomment the appropriate lines in your PHP.ini file to enable the extensions for MS SQL, GD, IMAP. These lines should be in your ini file without the leading semicolon similar to this:
    extension=php_imap.dll
    extension=php_gd2.dll
    extension=php_sqlsrv.dll
    

    All 3 extensions are included with the latest version of PHP from php.net. You will need to restart your web server after making the PHP.ini changes.
  • You get a blank white screen in the installer. This is usually because the HelpSpot PHP files do not have proper execute permissions. It may also be because you are running a version of PHP too old for HelpSpot. It's required that you run at least PHP 5.3.0. 

5.a Microsoft SQL Server

If you're using SQL Server you need to manually create your full text indexes. Please follow these instructions for creating the indexes.

MS SQL Server 2005

6. Final Step - Automation

After successfully running the installer your HelpSpot installation is ready for use. However, to integrate with your email accounts, perform automation rules, and use reminders you'll need to setup two scheduled tasks to run the scripts below. Both scripts are located in the root of your HelpSpot installation (i.e. support.example.com/tasks.php).

File Description Run It
tasks.php   Email integration, trash removal, and reminders   Every 1-5 minutes
tasks2.php   Automation rules   Once a day (more if needed)

Linux/Unix systems should setup a cron job and Windows users can setup a scheduled task (see vbs script link below). If you are unsure how to setup the scheduling, please check with your system administrator as this varies from system to system.

It's recommended that you limit the IP's which can call these scripts. This can be done in Admin->Settings->System.

It's also useful to note that the scripts can be run via your browser by going to the URL above if you need to manually check it or if your hosting company runs scheduled tasks via HTTP. When you go there via your browser you should only see a blank white page, this is intentional.

1.3. Upgrading

1. Backup

It's strongly recommended that you backup your HelpSpot database and files before upgrading. It's especially important to backup files if you have customized your templates or edited the language file.

The installer will make database changes during an upgrade. If something goes wrong the only way to roll back the changes is if you have an up to date backup.

If you have modified your language file you will need to reapply those changes to the new version of the file. It's recommended that you use a program like Dreamweaver or BBEdit which can determine the differences between the two files for you

HelpSpot Windows Installer Users:
Proceed directly to running the installer and follow the on screen instructions. All steps below will be completed for you automatically by the installer. The Windows installer may only be used to upgrade if it was used for the original installation.

When moving from V2 to V3 please note:
  • SQL Server 2005 is now the minimum supported version
  • If your Live Lookup files are in the root HelpSpot folder they may be moved to a backup. You'll need to place them in /custom_code instead and update your LiveLookup path in setttings.
  • If you've set your attachments to save to disk and put that path in the HelpSpot folder structure that will likely be broken. You should move the folder to someplace outside of the website and HelpSpot roots and change the setting in Admin->Settings->System.

 

Manual Installation Notes for V2 to V3
  • PHP 5.3+ is required
  • IonCube Loader 4+ (recommended, download) OR Zend Guard Loader (formerly Zend Optimizer)

1.B Language Pack

The language pack format has changed for version 3. If you use a custom language pack you'll want to download and update your language pack before upgrading HelpSpot.

2. Upgrading Files

After downloading the new version of HelpSpot, move the files to your server and unpack the tar.gz or zip file in a temporary location. Copy the new files over the old HelpSpot files, overwriting them.

Note: The HelpSpot files are binary and your FTP program will most likely upload them as text unless you tell it to use binary mode. This is why it's recommended to move the compressed file (tar.gz/zip) directly to the server first which will avoid any problems. After uploading if you get a file corrupted or Fatal error in your browser at the installer then the files have been uploaded as text instead of binary.

3. Upgrade Database

Go to the installer.php file in your browser. The file is located in the base directory of the HelpSpot installation. This file upgrades your database to the latest HelpSpot version. The installer.php upgrade page looks like this:

After the upgrade script is finished delete the installer.php file

The upgrade is now complete. Take a few moments to go through your installation and confirm it is running correctly.

1.4. Clean Upgrade

Sometimes it may be desirable to perform a "clean" upgrade where you delete all the files in your original HelpSpot directory. Since all of your data is stored in the database this is a relatively easy operation to perform. This page describes the files which need to be saved and replaced if you want to perform a clean upgrade. Please backup your existing directory before trying this procedure.

Save these files:

  • config.php
  • All files in the custom_templates/ folder
  • All files in the custom_code/ folder
  • If you've customized anything in your language file you need to save that as well (helpspot/lang/)
  • If you're saving attachments to disk, be sure the attachment directory is not within the HelpSpot folder structure (which is should not be)

You may now delete the original HelpSpot installation directory. Unpack the new HelpSpot upgrade and place it where you like. To complete the upgrade replace the files saved above then run installer.php in your browser and finish out the normal upgrade procedure.

1.5. Creating the Microsoft SQL Server 2005 Full Text Index

HelpSpot requires full text indexes on 3 different tables. This guide will show you how to add these indexes through SQL Server Management Studio. The tables and fields are as follows:

  • HS_Forums_Posts on field tPost (we'll use this as our example)
  • HS_KB_Pages on field tPage
  • HS_Request_History on field tNote

This example will go through adding the full text index on HS_Forums_Posts. You can then repeat these steps for the other two tables.

1. Open SQL Server Management Studio and connect to the database where you have installed HelpSpot. Navigate to the tables:

 

2. Right click on the HS_Forums_Posts table and select "Define Full-Text Index...":

 

3. The wizard will open, click next:

 

4. When asked to pick the unique index the default is correct:

 

5. Select the field to full text index, tPost for this table

 

6. Leave "Automatically" for track changes, click next

 

7. If you don't have a full text catalog already you'll need to create a new one:

 

8. Leave the "define population schedules" step empty, click next:

 

9. Click "finished" and you're done adding the full text index for this table.

 

Remember to perform these same steps on the other two tables. After you have completed these steps HelpSpot will be ready for use.

If you had already started using HelpSpot before performing these steps you should run the "full population" as well. That can be done by right clicking on the table, scrollig over full text index and selecting "start full population"

1.6. Spellchecking - Installation and Activation

Note: in many cases you will have the best spellchecking experience by using an in browser spellchecker. FireFox and Safari have spellcheckers built in. IE users can download free spellcheckers here:
IE 7 & IE 8 or IE 6

Overview

HelpSpot's spellchecking functionality requires the open source Aspell library to be installed on your server. The procedure below outlines the common installation procedures for Linux/Unix and Windows. If you're having trouble or have a non-standard server configuration you should read the Aspell installation documentation.

Note: Spellchecking does not require the PHP pspell module.

Windows Installation

  1. Download the Windows installer
  2. Run the installer, follow the on screen instructions
  3. It's recommended that you keep the default installation location (C:\Program Files\Aspell)
  4. Aspell is now installed, however, you still need to install a dictionary
Dictionary Installation
  1. Dictionaries are available lower down on the same download page as above. Download the ones you'd like to install
  2. Run the installer for each dictionary
  3. It's recommended that you leave the default dictionary location
Command Line Permissions

On some installations it may be necessary to change the permissions on the command line tool to allow the web server user to run command line programs. This can normally be accomplished with this command issued from the command prompt:

cacls c:\windows\system32\cmd.exe /E /G WEBSERVERUSERNAME:F

Be sure to replace WEBSERVERUSERNAME with your actual user name (ex: IUSR_ADMIN2003).

Also note, that this may open up additional security holes on your server.

Your aspell library should now be ready for use with HelpSpots spellchecker

Linux/Unix Installation

  1. Download the latest version of Aspell located under "quick links"
  2. Extract the Tar.Gz file to a temporary folder (command tar -xzvf FILENAME)
  3. Enter the Aspell folder and enter the command: ./configure && make
  4. After it finishes enter: make install
  5. Aspell is now installed, however, you still need to install a dictionary
Dictionary Installation
  1. Download a dictionary from the dictionary FTP site: ftp://ftp.gnu.org/gnu/aspell/dict. Note that if you've installed the 6 series of Aspell you need to use a compatible 6 series dictionary.
  2. Unpack the dictionary in a temporary folder
  3. Enter the folder and enter: ./configure
  4. After it's finished enter: make
  5. Finally enter: make install

Your aspell library should now be ready for use with HelpSpots spellchecker

Installing Aspell after HelpSpot is already installed

If you're installing Aspell after installing HelpSpot or if the installer didn't recognize the location of your Aspell installation you can tell HelpSpot where to find Aspell. Go to Admin->Settings->Spellchecking. The first field asks for the location of your Aspell library. You should enter something like this:

Linux/Unix: /usr/bin/aspell
Windows: C:\Program Files\Aspell\bin\aspell.exe

After entering the location submit the form (ignoring the second field for now). When the page comes back up, if you've correctly entered the location of Aspell the second field should now be a drop down list of all available dictionaries. Select the one you'd like to use, submit the form and spellchecking will be enabled.

1.7. VBS Script for Automated Calling of tasks.php and tasks2.php

Some customers have reported problems using Internet Explorer and Windows Scheduled Tasks when calling tasks.php in very short timespans. A customer provided this VBS script as a better solution to calling the tasks.php script.

Place the file (available below) on your server. Change the variables inside the file, primarily the HTTP path to your HelpSpot tasks.php file (ex: http://helpdesk.myco.com/tasks.php). Near the bottom you'll also need to change the from/to email addresses if you want to receive notification when the script fails. Then create a scheduled task as normal to call the vbs script.

Since this file uses Windows libraries and not Internet Explorer to make the HTTP call it is much more reliable.

Tip: To set a scheduled task to run every minute do the following:

  1. Set the task to run daily
  2. At the end of the wizard, select the "Open Advanced properties for this task when I click finish"
  3. Go to the schedule tab and click the advanced button
  4. Check the "Repeat task" box and have the task repeat every minute.
  5. Set the "Until duration" to 23hrs and 59 minutes
Note: This same file can be used for tasks2.php as well, just adjust the URL in the vbs file to point to tasks2.php

1.8. Guides to Installing PHP for the First Time

NOTE: You should only be doing a manual installation of PHP on Windows if you are running Windows 2000 server. Windows 2003 Server or newer should use our Windows Installer which will fully configure the server for you.

The page links out to several good articles on how to install PHP in various configurations and using various platforms and web servers. Other customers have successfully used these sites to get going with PHP

http://www.troywolf.com/articles/wamp_howto.htm
Apache / MySQL / PHP in a Windows environment

http://wiki.ehow.com/Installing-Php-5-for-Iis-6-on--Windows-Xp-and-2003
IIS 6 on Windows 2003

http://www.peterguy.com/php/install_iis6.html
Another guide on IIS 6 on Windows 2003

http://blogs.iis.net/bills/archive/2006/09/19/How-to-install-PHP-on-IIS7-_2800_RC1_2900_.aspx
Installing PHP on IIS 7 (rc1)

Prebundled Installers

Below are some packages which will install Apache and/or PHP. HelpSpot has not been tested with these specific packages, but since they install the standard PHP builds they should work.

http://phplens.com/phpeverywhere/node/view/12
PHP 4.3.10 installer by John Lim. Installs PHP into IIS or Apache.

http://www.apachefriends.org/en/xampp-windows.html
XAMPP - Installs a full WAMP stack of Apache, PHP and MySQL and even has it's own control panel.

http://www.mamp.info/en/home.php
MAMP - Apache/MySQL/PHP for Apple OS X

1.9. Moving HelpSpot to a Secondary IIS Website

The PDF below provides information on how to move HelpSpot to a secondary IIS website. The instructions are based on having used the HelpSpot Windows Installer for the initial HelpSpot installation.

The document was graciously created by Tim Bosinius of TGE.

2. System Administration

2.1. 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.

2.2. Black Box Authentication (staff 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.

2.3. Black Box Authentication (staff 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.

2.4. 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;
    }
 
}

2.5. Tasks.php Explained

What does tasks.php do?

The tasks.php script has 3 main functions in HelpSpot:

  1. Check email accounts and convert emails into requests
  2. Send out reminders
  3. Delete requests marked as trash

Running tasks.php on a regular basis is critical to using HelpSpot. Major functionality will not work properly without this script running.

Where is it located?

The tasks.php file is in the root HelpSpot folder. The same one which contains admin.php and index.php.

How often should tasks.php run?

Every 1-5 minutes, however every 1-2 is recommended.

How do I run the script?

On Linux/Unix the script should be run via Cron. On Windows Scheduled Tasks should be used. Windows users note that if you've installed using our Windows Installer a scheduled task has already been setup for you.

Configuration for Windows:
Remember that if you've used the HelpSpot Windows Installer this has already been done for you. You only need to setup Scheduled Tasks if you're manually installing HelpSpot on Windows.

See: VBS script for automated calling of tasks.php

Configuration for Linux/Unix/OSX:
tasks.php can be called directly through PHP on the command line or via an HTTP call. Several examples are below, but be sure to replace the generic paths with the ones for your installation:

Direct command line method for every minute (preferred):

* * * * * /usr/bin/php /path/to/helpspot/tasks.php

Using HTTP with curl:

* * * * * curl http://www.domain.com/tasks.php

Tips and Tricks

Direct access
You can manually run the tasks.php file in your browser to force it to pull in email (and it's other actions). This is often useful for testing purposes. Just visit the script in your browser at http://www.domain.com/tasks.php. Note that it is normal for the output to be a blank white screen.

Tasks.php debugging
If you're having problems with an email account it can be useful to turn on tasks.php debugging in Admin->Settings->Email Integration. Once this is on if you visit the tasks.php file in your browser (as described above) you'll see debugging output. It's often useful to do "view source" in your browser to see the output in a nicer format.

Additional security
If you want to prevent people from outside being able to access tasks.php via HTTP you can set the IP's that are allowed to call it in Admin->Settings->System.

Check just one mailbox
Normally each time tasks.php is run it checks all mailboxes you've configured in Admin->Mailboxes. If you'd like to run mailboxes on their own checking schedules though it's possible to have HelpSpot only check one mailbox when tasks.php is run. To do so you need to pass in the ID of the mailbox which you can find in Admin->Mailboxes.

If you were using the HTTP method you would change the URL to:

http://www.domain.com/tasks.php?id=4

If you were using the command line method you would do this:

* * * * * /usr/bin/php /path/to/helpspot/tasks.php --id=4

2.6. Tasks2.php Explained

What does tasks2.php do?

The tasks2.php script has one primary function, it executes the automation rules defined in Admin->Tools->Automation Rules.

Each time tasks2.php runs all Automation Rules are run.

What are Automation Rules?

Automation rules allow you to define a set of conditions and when a request or requests meet those conditions to perform one or more actions on the matching requests.

Where is it located?

The tasks2.php file is in the root HelpSpot folder. The same one which contains admin.php and index.php.

How often should tasks2.php run?

In a new installation once a day is usually sufficient. More advanced automation rules may need to run more often. It's also possible to run a rule on it's own time schedule as described below.

How do I run the script?

On Linux/Unix the script should be run via Cron. On Windows Scheduled Tasks should be used. Windows users note that if you've installed using our Windows Installer a scheduled task has already been setup for you.

Configuration for Windows:
Remember that if you've used the HelpSpot Windows Installer this has already been done for you. You only need to setup Scheduled Tasks if you're manually installing HelpSpot on Windows.

See: VBS script for automated calling of tasks2.php

Configuration for Linux/Unix/OSX:
tasks2.php can be called directly through PHP on the command line or via an HTTP call. Several examples are below, but be sure to replace the generic paths with the ones for your installation:

Direct command line method for every minute (preferred):

* * * * * /usr/bin/php /path/to/helpspot/tasks2.php

Using HTTP with curl:

* * * * * curl http://www.domain.com/tasks2.php

Run an Automation Rule on it's own schedule

In some cases you may want to run a rule more often then the default tasks2.php schedule.

For example, a rule which escalates a request if it's been unanswered for more than 4 hours. In this case you would need to run the rule every few minutes to escalate the requests as soon as they turn 4 hours old.

To run just one rule via tasks2.php you need to know the rules ID. You can find the ID for an automation rule in Admin->Tools->Automation Rules

If you were using the HTTP method you would change the URL to:

http://www.domain.com/tasks2.php?id=3

If you were using the command line method you would do this:

* * * * * /usr/bin/php /path/to/helpspot/tasks2.php --id=3

2.7. Improving Email Importing Memory Efficiency with PHP Mailparse

As of HelpSpot version 2.4.2 HelpSpot will use the PHP Mailparse PECL extension if available to improve the memory usage when importing email. Using the Mailparse extension can improve memory usage by as much as 70% during email imports and also improves import speed.

Instructions on using Mailparse can be found here: http://us.php.net/manual/en/mailparse.installation.php

On Windows it will generally be as simple as downloading the compiled dll and adding the extension in php.ini. On Linux/Unix you'll likely need to recompile PHP to add the extension. Information on PECL extension installation is here: http://php.net/manual/en/install.pecl.php

2.8. 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:

 

2.9. 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.

  • 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)
  • Put the old system in maintenance mode (Admin->Settings) to prevent any requests being created in there via email or portal form.
  • Copy the HelpSpot files to the new server, be sure to move in a binary safe manner
  • On the new server edit config.php in the root HelpSpot folder to be sure it includes the proper database connection information and correct cHOST URL for the new location
  • On the new server setup the tasks scripts: tasks.php and tasks2.php
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.
  • 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.

 

 

3. Customizing HelpSpot

3.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.

Template Path

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

css.tpl.php CSS styles used in the portal. Add or edit as needed.

email.tpl.php Page to email a forum poster

footer.tpl.php This file closes the 'container' DIV tag and also the HTML footer elements.

forums.tpl.php List of available public forums

forums.feed.tpl.php RSS feed for the forums

forums.posts.tpl.php Page that displays forum posts for a thread

forums.topics.tpl.php Page that lists forum topics

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 orgnaizations standard header to this file is enough to provide a consistent feel across the sites.

home.tpl.php The portals homepage

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.tpl.php List of available public knowledge books

kb.book.tpl.php A 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

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

moderated.tpl.php Page shown to the user when a form posting is thought to be SPAM

navigation.tpl.php Contains the left side HelpSpot specific navigation. The navigation is a simple bulleted list, however main site navigation elements can be added to this list as well.

request.tpl.php The submit a request form

request.check.tpl.php Page where customers check their requests

request.history.tpl.php List of requests visitors see when logged into the portal

search.tpl.php Search results page

searchbox.tpl.php HTML for search box used across all portal pages

3.2. Admin Themes

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
});

3.3. 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.

3.4. 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

3.5. 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.

3.6. 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:

---

* * *

- - - -

3.7. 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

4. Automation Rules

4.1. Overview

Automation Rules (Admin->Tools->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?
  • Which actions and/or conditions must be set to prevent the same requests from being matched?
  • How frequently should this rule run?

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

4.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 truely meet the business need.

4.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 rememember: 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.

A complete list of actions, with descriptions is provided below.

Action Definition
Set Category/Staffer Change Category and Assignment
Set Custom Fields Upon Selection, all custom fields will be shown so values can be set. This will overwrite existing values. Custom fields left blank will retain any value already set in request.
Set Status Change status
Mark as Urgent/Mark as Not Urgent Flag request as urgent or not urgent
Move to Inbox Change assignment to inbox. Category is not impacted.
Add Private Note Create private note to be logged in the history of each request.
Close Request Closes request
Open Request Reopens request
Send Email Notification Create message to be sent to selected users primary email.
Send SMS Notification Create SMS message to be sent to selected users SMS-enabled device.
Send to External Email Address Create email message to be sent to designated recipient.
Email Customer Create message for the customer.
Email Table of Results A grid of requests meeting conditions is emailed to selected user.

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.

4.4. Preventing Reoccurring Matches

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.


4.5. Scheduling Rules

The running of Automation Rules is based on the tasks2.php file, which is called by HelpSpot once per day. For most rules this is sufficient, however there maybe rules that require more frequent running. For example, rules that look for age of request as a condition would require more frequent running, say every minute or so.

Frequency of running can be set for individual rules. This configuration is describe in the tasks2.php page linked below.

4.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.

 

5. Secondary Portals

5.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.

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.

 

5.2. 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. 

5.3. 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.

5.4. 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. Ignore the installation instructions except for Step 1, you do not need to create any files or directories
  3. From Step 1 copy the contents of that into the primary HelpSpot config.php in the root HelpSpot folder. The text from Step 1 should entirely replace the contents of the original config.php file.

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

5.5. 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.

6. HelpSpot Hacks

6.1. Converting Attachments from Database Storage to File System

By default HelpSpot saves all request file attachments in the database. This makes for easy backups and on most installations does not need to be changed. 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

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. If you'd like to convert these old attachments 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.

6.2. 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.

 

6.3. phpBB2 Forums to HelpSpot Forums

This script will convert your existing phpBB2 installation (on MySQL) to a SQL file which can be run against your HelpSpot database. After doing so your forums will be available within HelpSpot. Note that BBCode is not supported by HelpSpot and is removed.

Instructions

  1. Download the phpbb_to_helpspot.php file linked at the bottom of this page
  2. Upload the file to the root of your phpBB installation. This is the directory with the phpBB config.php file.
  3. Make sure that directory is writable by PHP. If that's not possible, create a file in that directory called phpbb_to_helpspot.sql and make sure that is writable by the web server.
  4. On the command line change to the phpBB directory: cd /path/to/phpbb
  5. Run the script from the command line. Usually something like this: /usr/local/bin/php -f phpbb_to_helpspot.php
  6. After the script has completed you can import the SQL file into your HelpSpot database either via the MySQL command line tool or via phpMyAdmin.

Notes

There are some structural differences between HelpSpot and phpBB which will require you to perform some minor tweaking after import.

  1. The initial system user is added as the default moderator to all forums. You'll want to change that to the appropriate users.
  2. HelpSpot does not have forum categories so all forums will be together.
  3. The script makes all forums public by default. If some of your forums should be private you'll need to change that in modify forums.

6.4. vBulletin Forums to HelpSpot Forums

The script below was contributed by http://www.formspring.com/. The script will output a SQL file from a vBulletin installation in a format that can be imported into a HelpSpot database.

Note, the script does not handle attachments and bbcode will be removed (as it's not supported by HelpSpot).

6.5. 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

  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

6.6. 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);

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.

Troubleshooting Guides

1. Incompatibility Between Zend Optimizer and PHP 5.2.10 & 5.3

UPDATE 8/27/09

Zend has released updates to Zend Optimizer for Linux, FreeBSD and OSX. These are available now from our downloads page and should work as expected with these new PHP versions. Windows and the other Unix builds should be out fairly soon, we'll update the downloads on our installation page and update here when they're available.

2.2. Installing HelpSpot

Issue History

Recently the PHP group released PHP 5.2.10 and 5.3. These releases are currently (as of 8/03/09) incompatible with the latest Zend Optimizer release. Zend is aware of this issue and is actively working on a update to fix the incompatibility. 

The primary symptom of this issue is HelpSpot (or any other Zend encoded PHP file) returning blank white pages after the PHP upgrade/installation.

This issue does not affect users of our Windows Installer as it does not ship with either of those PHP releases. Additionally, most Linux package managers do not yet provide these versions from their standard repositories.

If you have upgraded your server to one of these releases the only current solution is to roll back your PHP to 5.2.9 or earlier until an updated Zend Optimizer is available.

2. 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 here: http://support.microsoft.com/kb/265808

That will allow a direct connection to that alias from the HelpSpot Windows installer.

Full Text Search Returns No Results

Make sure the full text indexes are created as described here:  http://helpspot.com/helpdesk/index.php?pg=kb.page&id=142

If they are make sure the full text service is running. In services it's called: "SQL Full-text Filter Daemon Launcher"

Before starting it make sure in properties it's set to start automatically and that under "log on" it's using the local system user. Save any changes and start/restart the service. You may also need to go into the full text indexes and run a full population and/or apply tracked changes.

Connection Troubles

  • 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.

    Related forum post: Unable to connect to the database

    PHP.net: Information on the PHP MSSQL extension, lots of good tips in the user comments

  • 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.

  • 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 cDBHOSTNAME in config.php 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 adding a comma and the port number to the cDBHOSTNAME variable like this: "db.mycompany.com,1433"

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

  • 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.

3. 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.

4. 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.

5. 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

6. 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

7. Postgres

Request Notes not saved or trouble with UTF characters

Newer versions of PG default to having their client connection as UTF8. HelpSpot runs as a latin based application and transmits data as Latin1. If you're unable to change the client connection of your PG server then adding the line below into your HelpSpot language file (/helpspot/lang/) should force the proper connection type:

pg_set_client_encoding($GLOBALS['DB']->_connectionID,'LATIN1');

8. 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. 

9. Running Zend Optimizer on OSX

Description:

The Zend Optimizer does not run on OSX when Apache is running in 64 bit mode as it does by default.

Applies To:

OSX servers

HelpSpot versions:

All

Fix:

The following commands will strip Apache of it's 64 bit modules and allow the system to run in 32 bit mode.

cd /usr/sbin

cp httpd httpd.backup

sudo lipo httpd -thin i386 -output httpd

sudo ./apachectl restart

10. Installing the Zend Optimizer in Plesk

Install the Zend Optimizer by running the command line Zend Optimizer installer.

At the end of the installer, do not restart Apache yet, since all sites will be unavailable until the settings have been modified.

Next, open "/etc/php.d/ioncube-loader.ini" and comment out the line that looks like this:
"zend_extension=/usr/lib/php/modules//php_ioncube_loader_lin_5.1.so"
use the standard pound (#) sign to do this. Copy this line because you'll need to add it in the php.ini.

Next, open "/etc/php.ini" (which at this point is actually located at "/usr/local/Zend/etc/php.ini", relocated by the Zend installer) and go down to just before the [Zend] block. Add the copied zend extension to right above the [Zend] block. It should look similar to this:

zend_extension=/usr/lib/php/modules//php_ioncube_loader_lin_5.1.so
[Zend]
zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-3.2.6
zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-3.2.6
zend_optimizer.version=3.2.6
zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so
zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so

After making these modifications, you can restart Apache (typically by using /etc/init.d/httpd on plesk).

You can verify everything is working initially by doing php-v and then try loading one of the web sites hosting on the server.

Patches

1. 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/

2. 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/

3. 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/

4. 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/

5. 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/

6. 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/

7. 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/

8. 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/

9. 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

 

10. 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. 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:

2. 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

3. 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

4. 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

5. 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

6. 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.

7. 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

8. 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

9. 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

10. 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

11. 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

12. 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

13. 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

14. 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

15. 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

16. 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

17. 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

18. 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

19. 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

20. 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

21. 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

22. 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

23. 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

24. 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 ?>"> 

25. 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

26. 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

27. 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

28. 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

29. 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.

30. 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

31. 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

32. 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>

33. 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

34. 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

35. 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; ?>

36. 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

37. 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

38. 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 />	

39. 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

40. 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.

41. 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.

42. 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 -->  

43. 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

44. 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

45. 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

46. 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.

47. 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

48. 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

Search Knowledge Books and Forums