| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- <?php
- require_once dirname(__FILE__).'/class/base_classes.php';
- /**
- * Class to access a clients resources from the create send API.
- * This class includes functions to create and edit clients,
- * along with accessing lists of client specific resources e.g campaigns
- * @author tobyb
- *
- */
- class CS_REST_Clients extends CS_REST_Wrapper_Base {
- /**
- * The base route of the clients resource.
- * @var string
- * @access private
- */
- var $_clients_base_route;
- /**
- * Constructor.
- * @param $client_id string The client id to access (Ignored for create requests)
- * @param $auth_details array Authentication details to use for API calls.
- * This array must take one of the following forms:
- * If using OAuth to authenticate:
- * array(
- * 'access_token' => 'your access token',
- * 'refresh_token' => 'your refresh token')
- *
- * Or if using an API key:
- * array('api_key' => 'your api key')
- * @param $protocol string The protocol to use for requests (http|https)
- * @param $debug_level int The level of debugging required CS_REST_LOG_NONE | CS_REST_LOG_ERROR | CS_REST_LOG_WARNING | CS_REST_LOG_VERBOSE
- * @param $host string The host to send API requests to. There is no need to change this
- * @param $log CS_REST_Log The logger to use. Used for dependency injection
- * @param $serialiser The serialiser to use. Used for dependency injection
- * @param $transport The transport to use. Used for dependency injection
- * @access public
- */
- function __construct(
- $client_id,
- $auth_details,
- $protocol = 'https',
- $debug_level = CS_REST_LOG_NONE,
- $host = 'api.createsend.com',
- $log = NULL,
- $serialiser = NULL,
- $transport = NULL) {
-
- parent::__construct($auth_details, $protocol, $debug_level, $host, $log, $serialiser, $transport);
- $this->set_client_id($client_id);
- }
- /**
- * Change the client id used for calls after construction
- * @param $client_id
- * @access public
- */
- function set_client_id($client_id) {
- $this->_clients_base_route = $this->_base_route.'clients/'.$client_id.'/';
- }
- /**
- * Gets a list of sent campaigns for the current client
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be an object of the form
- * array(
- * {
- * 'WebVersionURL' => The web version url of the campaign
- * 'WebVersionTextURL' => The web version url of the text version of the campaign
- * 'CampaignID' => The id of the campaign
- * 'Subject' => The campaign subject
- * 'Name' => The name of the campaign
- * 'FromName' => The from name for the campaign
- * 'FromEmail' => The from email address for the campaign
- * 'ReplyTo' => The reply to email address for the campaign
- * 'SentDate' => The sent data of the campaign
- * 'TotalRecipients' => The number of recipients of the campaign
- * }
- * )
- */
- function get_campaigns() {
- return $this->get_request($this->_clients_base_route.'campaigns.json');
- }
- /**
- * Gets a list of scheduled campaigns for the current client
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be an object of the form
- * array(
- * {
- * 'CampaignID' => The id of the campaign
- * 'Name' => The name of the campaign
- * 'Subject' => The subject of the campaign
- * 'FromName' => The from name for the campaign
- * 'FromEmail' => The from email address for the campaign
- * 'ReplyTo' => The reply to email address for the campaign
- * 'DateCreated' => The date the campaign was created
- * 'PreviewURL' => The preview url of the campaign
- * 'PreviewTextURL' => The preview url of the text version of the campaign
- * 'DateScheduled' => The date the campaign is scheduled to be sent
- * 'ScheduledTimeZone' => The time zone in which the campaign is scheduled to be sent at 'DateScheduled'
- * }
- * )
- */
- function get_scheduled() {
- return $this->get_request($this->_clients_base_route.'scheduled.json');
- }
- /**
- * Gets a list of draft campaigns for the current client
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be an object of the form
- * array(
- * {
- * 'CampaignID' => The id of the campaign
- * 'Name' => The name of the campaign
- * 'Subject' => The subject of the campaign
- * 'FromName' => The from name for the campaign
- * 'FromEmail' => The from email address for the campaign
- * 'ReplyTo' => The reply to email address for the campaign
- * 'DateCreated' => The date the campaign was created
- * 'PreviewURL' => The preview url of the draft campaign
- * 'PreviewTextURL' => The preview url of the text version of the campaign
- * }
- * )
- */
- function get_drafts() {
- return $this->get_request($this->_clients_base_route.'drafts.json');
- }
- /**
- * Gets all subscriber lists the current client has created
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be an object of the form
- * array(
- * {
- * 'ListID' => The id of the list
- * 'Name' => The name of the list
- * }
- * )
- */
- function get_lists() {
- return $this->get_request($this->_clients_base_route.'lists.json');
- }
- /**
- * Gets the lists across a client to which a subscriber with a particular
- * email address belongs.
- * @param string $email_address Subscriber's email address.
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be an object of the form
- * array(
- * {
- * 'ListID' => The id of the list
- * 'ListName' => The name of the list
- * 'SubscriberState' => The state of the subscriber in the list
- * 'DateSubscriberAdded' => The date the subscriber was added
- * }
- * )
- */
- function get_lists_for_email($email_address) {
- return $this->get_request($this->_clients_base_route .
- 'listsforemail.json?email='.urlencode($email_address));
- }
- /**
- * Gets all list segments the current client has created
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be an object of the form
- * array(
- * {
- * 'ListID' => The id of the list owning this segment
- * 'SegmentID' => The id of this segment
- * 'Title' => The title of this segment
- * }
- * )
- */
- function get_segments() {
- return $this->get_request($this->_clients_base_route.'segments.json');
- }
- /**
- * Gets all email addresses on the current client's suppression list
- * @param int $page_number The page number to get
- * @param int $page_size The number of records per page
- * @param string $order_field The field to order the record set by ('EMAIL', 'DATE')
- * @param string $order_direction The direction to order the record set ('ASC', 'DESC')
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be an object of the form
- * {
- * 'ResultsOrderedBy' => The field the results are ordered by
- * 'OrderDirection' => The order direction
- * 'PageNumber' => The page number for the result set
- * 'PageSize' => The page size used
- * 'RecordsOnThisPage' => The number of records returned
- * 'TotalNumberOfRecords' => The total number of records available
- * 'NumberOfPages' => The total number of pages for this collection
- * 'Results' => array(
- * {
- * 'EmailAddress' => The suppressed email address
- * 'Date' => The date the email was suppressed
- * 'State' => The state of the suppressed email
- * }
- * )
- * }
- */
- function get_suppressionlist($page_number = NULL, $page_size = NULL, $order_field = NULL,
- $order_direction = NULL) {
-
- return $this->get_request_paged($this->_clients_base_route.'suppressionlist.json',
- $page_number, $page_size, $order_field, $order_direction, '?');
- }
- /**
- * Adds email addresses to a client's suppression list.
- * @param array<string> $emails The email addresses to suppress.
- * @access public
- */
- function suppress($emails) {
- $data = array('EmailAddresses' => $emails);
- return $this->post_request($this->_clients_base_route.'suppress.json', $data);
- }
- /**
- * Unsuppresses an email address by removing it from the the client's
- * suppression list.
- * @param string $email The email address to be unsuppressed
- * @access public
- */
- function unsuppress($email) {
- return $this->put_request($this->_clients_base_route.'unsuppress.json?email=' . urlencode($email), '');
- }
- /**
- * Gets all templates the current client has access to
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be an object of the form
- * array(
- * {
- * 'TemplateID' => The id of the template
- * 'Name' => The name of the template
- * 'PreviewURL' => The url to preview the template from
- * 'ScreenshotURL' => The url of the template screenshot
- * }
- * )
- */
- function get_templates() {
- return $this->get_request($this->_clients_base_route.'templates.json');
- }
- /**
- * Gets all templates the current client has access to
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be an object of the form
- * {
- * 'ApiKey' => The clients API Key, THIS IS NOT THE CLIENT ID
- * 'BasicDetails' =>
- * {
- * 'ClientID' => The id of the client
- * 'CompanyName' => The company name of the client
- * 'ContactName' => The contact name of the client
- * 'EmailAddress' => The clients contact email address
- * 'Country' => The clients country
- * 'TimeZone' => The clients timezone
- * }
- * 'BillingDetails' =>
- * If on monthly billing
- * {
- * 'CurrentTier' => The current monthly tier the client sits in
- * 'CurrentMonthlyRate' => The current pricing rate the client pays per month
- * 'MarkupPercentage' => The percentage markup applied to the base rates
- * 'Currency' => The currency paid in
- * 'ClientPays' => Whether the client pays for themselves,
- * 'MonthlyScheme' => Basic or Unlimited
- * }
- * If paying per campaign
- * {
- * 'CanPurchaseCredits' => Whether the client can purchase credits
- * 'Credits' => The number of credits belonging to the client
- * 'BaseDeliveryFee' => The base fee payable per campaign
- * 'BaseRatePerRecipient' => The base fee payable per campaign recipient
- * 'BaseDesignSpamTestRate' => The base fee payable per design and spam test
- * 'MarkupOnDelivery' => The markup applied per campaign
- * 'MarkupPerRecipient' => The markup applied per campaign recipient
- * 'MarkupOnDesignSpamTest' => The markup applied per design and spam test
- * 'Currency' => The currency fees are paid in
- * 'ClientPays' => Whether client client pays for themselves
- * }
- * }
- */
- function get() {
- return $this->get_request(trim($this->_clients_base_route, '/').'.json');
- }
- /**
- * Deletes an existing client from the system
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be empty
- */
- function delete() {
- return $this->delete_request(trim($this->_clients_base_route, '/').'.json');
- }
- /**
- * Creates a new client based on the provided information
- * @param array $client Basic information of the new client.
- * This should be an array of the form
- * array(
- * 'CompanyName' => The company name of the client
- * 'Country' => The clients country
- * 'TimeZone' => The clients timezone
- * )
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be the ID of the newly created client
- */
- function create($client) {
- if(isset($client['ContactName'])) {
- trigger_error('[DEPRECATION] Use Person->add to set name on a new person in a client. For now, we will create a default person with the name provided.', E_USER_NOTICE);
- }
- if(isset($client['EmailAddress'])) {
- trigger_error('[DEPRECATION] Use Person->add to set email on a new person in a client. For now, we will create a default person with the email provided.', E_USER_NOTICE);
- }
- return $this->post_request($this->_base_route.'clients.json', $client);
- }
- /**
- * Updates the basic information for a client
- * @param array $client_basics Basic information of the client.
- * This should be an array of the form
- * array(
- * 'CompanyName' => The company name of the client
- * 'Country' => The clients country
- * 'TimeZone' => The clients timezone
- * )
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be empty
- */
- function set_basics($client_basics) {
- if(isset($client['ContactName'])) {
- trigger_error('[DEPRECATION] Use person->update to set name on a particular person in a client. For now, we will update the default person with the name provided.', E_USER_NOTICE);
- }
- if(isset($client['EmailAddress'])) {
- trigger_error('[DEPRECATION] Use person->update to set email on a particular person in a client. For now, we will update the default person with the email address provided.', E_USER_NOTICE);
- }
- return $this->put_request($this->_clients_base_route.'setbasics.json', $client_basics);
- }
- /**
- * Updates the billing details of the current client, setting the client to the payg billing model
- * For clients not set to pay themselves then all fields below ClientPays are ignored
- * All Markup fields are optional
- * @param array $client_billing Payg billing details of the client.
- * This should be an array of the form
- * array(
- * 'Currency' => The currency fees are paid in
- * 'ClientPays' => Whether client client pays for themselves
- * 'MarkupPercentage' => Can be used to set the percentage markup for all unset fees
- * 'CanPurchaseCredits' => Whether the client can purchase credits
- * 'MarkupOnDelivery' => The markup applied per campaign
- * 'MarkupPerRecipient' => The markup applied per campaign recipient
- * 'MarkupOnDesignSpamTest' => The markup applied per design and spam test
- * )
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be empty
- */
- function set_payg_billing($client_billing) {
- return $this->put_request($this->_clients_base_route.'setpaygbilling.json', $client_billing);
- }
- /**
- * Updates the billing details of the current client, setting the client to the monthly billing model
- * For clients not set to pay themselves then the markup percentage field is ignored
- * @param array $client_billing Payg billing details of the client.
- * This should be an array of the form
- * array(
- * 'Currency' => The currency fees are paid in
- * 'ClientPays' => Whether client client pays for themselves
- * 'MarkupPercentage' => Sets the percentage markup used for all monthly tiers
- * )
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be empty
- */
- function set_monthly_billing($client_billing) {
- return $this->put_request($this->_clients_base_route.'setmonthlybilling.json', $client_billing);
- }
- /**
- * Transfer credits to or from this client.
- *
- * @param array $transfer_data Details for the credit transfer. This array
- * should be of the form:
- * array(
- * 'Credits' => An in representing the number of credits to transfer.
- * This value may be either positive if you want to allocate credits
- * from your account to the client, or negative if you want to
- * deduct credits from the client back into your account.
- * 'CanUseMyCreditsWhenTheyRunOut' => A boolean value which if set
- * to true, will allow the client to continue sending using your
- * credits or payment details once they run out of credits, and if
- * set to false, will prevent the client from using your credits to
- * continue sending until you allocate more credits to them.
- * )
- * @access public
- * @return CS_REST_Wrapper_Result A successful response will be an object
- * of the form:
- * {
- * 'AccountCredits' => Integer representing credits in your account now
- * 'ClientCredits' => Integer representing credits in this client's
- * account now
- * }
- */
- function transfer_credits($transfer_data) {
- return $this->post_request($this->_clients_base_route.'credits.json',
- $transfer_data);
- }
- /**
- * returns the people associated with this client.
- * @return CS_REST_Wrapper_Result A successful response will be an object of the form
- * array({
- * 'EmailAddress' => the email address of the person
- * 'Name' => the name of the person
- * 'AccessLevel' => the access level of the person
- * 'Status' => the status of the person
- * })
- */
- function get_people() {
- return $this->get_request($this->_clients_base_route.'people.json');
- }
-
- /**
- * retrieves the email address of the primary contact for this client
- * @return CS_REST_Wrapper_Result a successful response will be an array in the form:
- * array('EmailAddress'=> email address of primary contact)
- */
- function get_primary_contact() {
- return $this->get_request($this->_clients_base_route.'primarycontact.json');
- }
-
- /**
- * assigns the primary contact for this client to the person with the specified email address
- * @param string $emailAddress the email address of the person designated to be the primary contact
- * @return CS_REST_Wrapper_Result a successful response will be an array in the form:
- * array('EmailAddress'=> email address of primary contact)
- */
- function set_primary_contact($emailAddress) {
- return $this->put_request($this->_clients_base_route.'primarycontact.json?email=' . urlencode($emailAddress), '');
- }
- }
|