# createsend-php history

## v6.1.1 - 6th May, 2020

* Add PHP 7.4 Support

## v6.1.0 - 3rd September, 2019

* Added support for the Journeys API (https://www.campaignmonitor.com/api/journeys/)

## v6.0.0 - 23 May, 2018

* Upgrades to Createsend API v3.2 which includes new breaking changes
* Breaking: 'Consent to track' field is now mandatory for sending smart and classic transactionl emails
* Breaking: 'Consent to track' field is now mandatory when adding or updating subscribers
* Optional 'Include tracking preference' field when retrieving lists of subscribers

## v5.1.3 - 15th May, 2017

* Changed local API timeout from 10 sec to 20 sec

## v5.1.2 - 15th May, 2017

* Added support for Behavioral Event data

## v5.0.2 - 18 July, 2016

* Prevent definition re-declarations

## v5.0.1 - 14 December, 2015

* Changed the fatal error thrown when unable to communicate with the API into a catchable Exception

## v5.0.0 - 8 December, 2015

* Added PHP7 support

## v4.1.1 - 9 September, 2015

* Fixed the transactional smart email call for get_list() so it now passes the client id

## v4.1.0 - 5 August, 2014

* Added support for Transactional Email

## v4.0.2 - 29 October, 2014

* Updated constant definitions so PHP Notices aren't raised

## v4.0.1 - 30 May, 2014

* Updated the class_exists check to no longer call __autoload

## v4.0.0 - 6 Feb, 2014

* Updated to v3.1 API
* Added support for new segments structure
  * Segment now includes a new `RuleGroups` member, instead of a `Rules` member.

	    So for example, when you _previously_ would have created a segment like so:

	    ```php
		$result = $wrap->create('Segments List ID', array(
			'Title' => 'Segment Title',
			'Rules' => array(
				array(
					'Subject' => 'EmailAddress',
					'Clauses' => array(
						'CONTAINS example.com'
					)
				) ,
				array(
					'Subject' => '[customfield]',
					'Clauses' => array(
						'PROVIDED',
						'EQUALS 1'
					)
				)
			)
		));
	    ```

	    You would _now_ do this:

	    ```php
		$result = $wrap->create('Segments List ID', array(
			'Title' => 'Segment Title',
			'RuleGroups' => array(
				array(
					'Rules' => array(
						array(
							'RuleType' => 'EmailAddress',
							'Clause' => 'CONTAINS example.com'
						)
					)
				) ,
				array(
					'Rules' => array(
						array(
							'RuleType' => '[customfield]',
							'Clause' => 'PROVIDED'
						) ,
						array(
							'RuleType' => '[customfield]',
							'Clause' => 'EQUALS 1'
						)
					)
				)
			)
		));
    ```

  * The Add Rule call is now Add Rule Group, taking a `ruleGroup` argument instead of a `rule` argument.

    ```php
    function CS_REST_Segments->add_rulegroup($rulegroup)
    ```

    So for example, when you _previously_ would have added a rule like so:

    ```php
    $wrap = new CS_REST_Segments('Segment ID', $auth);
	$result = $wrap->add_rule(array(
	    'Subject' => 'EmailAddress',
	    'Clauses' => array('CONTAINS example.com')
	));
    ```

    You would _now_ do this:

    ```php
	$wrap = new CS_REST_Segments('Segment ID', $auth);
	$result = $wrap->add_rulegroup(array(
	    'Rules' => array(
	        array(
	            'RuleType' => 'EmailAddress',
	            'Clause' => 'CONTAINS example.com'
	        )
	    )
	));
    ```
* Removed the get_apikey method to promote usage of oAuth authentication

## v3.1.3 - 10 Dec, 2013

* Fixed a notice that was raised when unscheduling a campaign.

## v3.1.2 - 28 Oct, 2013

* Only set the ```CURLOPT_CAINFO``` option if not already set globally via the ini system.

## v3.1.1 - 3 Oct, 2013

* Made it harder to accidentally email your subscribers when using the example code

## v3.1.0 - 15 Apr, 2013

* Added support for [single sign on](http://www.campaignmonitor.com/api/account/#single_sign_on) which allows initiation of external login sessions to Campaign Monitor.

## v3.0.0 - 25 Mar, 2013

* Added support for authenticating using OAuth. See the [README](README.md#authenticating) for full usage instructions.
  * This introduces some changes to how you authenticate using this library. You now authenticate by passing an `$auth` array as the first argument when creating instances of any classes which inherit from the `CS_REST_Wrapper_Base` class.

      So in existing code, when you _previously_ would have authenticated using an API key as follows:

      ```php
      $wrap = new CS_REST_General('Your API Key');
      $result = $wrap->get_clients();
      ```

      If you want to authenticate using an API key, you should _now_ do this:

      ```php
      $wrap = new CS_REST_General(array('api_key' => 'Your API Key'));
      $result = $wrap->get_clients();
      ```

## v2.5.2 - 19 Dec, 2012

* Removed simpletest source files, and added simpletest as a dev dependency.
* Fixed autoloading with composer, so that only necessary classes are loaded.

## v2.5.1 - 14 Dec, 2012

* Use CURLOPT_TIMEOUT and CURLOPT_CONNECTTIMEOUT constants instead of
CURLOPT_TIMEOUT_MS and CURLOPT_CONNECTTIMEOUT_MS.
* Added autoloading support when using Composer (PHP dependency management).

## v2.5.0 - 11 Dec, 2012

* Added support for including from name, from email, and reply to email in
drafts, scheduled, and sent campaigns.
* Added support for campaign text version urls.
* Added support for transferring credits to/from a client.
* Added support for getting account billing details as well as client credits.
* Made all date fields optional when getting paged results.

## v2.4.0 - 5 Nov, 2012

* Added CS_REST_Campaigns.get_email_client_usage().
* Added support for ReadsEmailWith field on subscriber objects.
* Added support for retrieving unconfirmed subscribers for a list.
* Added support for suppressing email addresses.
* Added support for retrieving spam complaints for a campaign, as well as
adding SpamComplaints field to campaign summary output.
* Added VisibleInPreferenceCenter field to custom field output.
* Added support for setting preference center visibility when creating custom
fields.
* Added the ability to update a custom field name and preference visibility.
* Added documentation explaining that TextUrl is now optional when creating a
campaign.

## v2.3.2 - 23 Oct, 2012

* Fixed timeout issue by setting CS_REST_SOCKET_TIMEOUT to 10 seconds.

## v2.3.1 - 19 Oct, 2012

* Fixed #13. Load services_json.php only if Services_JSON class doesn't already
exist.
* Fixed issue with curl calls hangs hanging on proxy failure.

## v2.3.0 - 10 Oct, 2012

* Added support for creating campaigns from templates.
* Added support for unsuppressing an email address.

## 1.1.3 - 26 Sep, 2012

* Backported fix to use Mozilla certificate bundle, as per
http://curl.haxx.se/docs/caextract.html

## v2.2.0 - 17 Sep, 2012

* Added WorldviewURL field to campaign summary response.
* Added Latitude, Longitude, City, Region, CountryCode, and CountryName
fields to campaign opens and clicks responses.

## 2.1.1 - 11 Sep, 2012

* Added 'Contributing' section to README.
* Used the Mozilla certificate bundle, as per
http://curl.haxx.se/docs/caextract.html
* Bumping to 2.1.1

## v2.1.0 - 30 Aug, 2012

* Added support for basic / unlimited pricing.

## v2.0.0 - 23 Aug, 2012

* Removing deprecated method CS_REST_Clients.set_access().
* Removed traces of calling the API in a deprecated manner.

## v1.2.0 - 22 Aug, 2012

* Added support for UnsubscribeSetting field when creating, updating and
getting list details.
* Added support for AddUnsubscribesToSuppList and ScrubActiveWithSuppList
fields when updating a list.
* Added support for finding all client lists to which a subscriber with a
specific email address belongs.

## v1.1.2 - 23 Jul, 2012

* Added support for specifying whether subscription-based autoresponders
should be restarted when adding or updating subscribers.

## v1.1.1 - 16 Jul, 2012

* Added Travis CI support.

## v1.1.0 - 11 Jul, 2012

* Added support for team management.

## 1.0.14 - 18 Mar, 2012

* Added support for new API methods.
* Fixed subscriber import sample.

## 1.0.12 - 12 Sep, 2011

* Fixed response handling code so that it can deal with HTTP responses
beginning with "HTTP/1.1 Continue".

## 1.0.11 - 25 Aug, 2011

* Fixed socket issue by added Connection:Close header for raw socket
transport.

## 1.0.10 - 12 Jul, 2011

* Fixed #5. Updated recursive check_encoding call.
* Fixed #7. Modified template create/update to not require screenshot URL.

## 1.0.9 - 18 Jun, 2011

* Fixed #4. Removed static function calls.

## 1.0.8 - 6 Jun, 2011

* Initial release which supports current Campaign Monitor API.
