public function testGetModelType() { $person_configuration = ['$email' => '*****@*****.**', '$first_name' => 'nothing']; $this->assertSame('person', ModelFactory::getModelType($person_configuration + ['object' => 'person'])); $this->assertSame('person', ModelFactory::getModelType($person_configuration, 'person')); $this->assertSame('', ModelFactory::getModelType([])); }
public function assertModelMatchesConfiguration(ModelInterface $model, $configuration = array()) { if (empty($configuration)) { $configuration = $this->configuration; } $this->assertSame($this->configuration['object'], $model->objectType); $this->assertSame($this->configuration['id'], $model->id); $this->assertSame($this->configuration['name'], $model->name); $this->assertSame($this->configuration['subject'], $model->subject); $this->assertSame($this->configuration['from_email'], $model->fromEmail); $this->assertSame($this->configuration['from_name'], $model->fromName); $template = ModelFactory::create($this->configuration['template']); $this->assertEquals($template, $model->template); $this->assertSame($this->configuration['status'], $model->status); $this->assertSame($this->configuration['status_id'], $model->statusId); $this->assertSame($this->configuration['status_label'], $model->statusLabel); $this->assertSame($this->configuration['sent_at'], $model->sentAt); $this->assertSame($this->configuration['send_time'], $model->sendTime); $created = new \DateTime($this->configuration['created']); $this->assertEquals($created, $model->created); $updated = new \DateTime($this->configuration['updated']); $this->assertEquals($updated, $model->updated); $this->assertEquals($this->configuration['num_recipients'], $model->numRecipients); $this->assertEquals($this->configuration['is_segmented'], $model->isSegmented); $this->assertEquals($this->configuration['campaign_type'], $model->campaignType); $lists = []; foreach ($configuration['lists'] as $list) { $lists[] = ModelFactory::create($list); } $this->assertEquals($lists, $model->lists); }
/** * Register our model factory creation from JSON with the container. */ protected function registerModelFactoryCreateFromJson(Container $container) { $self = $this; $container['model.factory.json'] = $container->factory(function ($c) use($self) { $json = $c['model.factory.json.params']['json']; $type = $c['model.factory.json.params']['type']; $model = ModelFactory::createFromJson($json, $type); $self->registerModelFactoryDefaultParams($c); return $model; }); }
/** * Create a new campaign. * * @param array $configuration * An array of configuration parameters for the new campaign. * * Allowed elements: * * list_id: string * The ID of the List object you will send this campaign to. * * template_id: string * The ID of the Email Template object that will be the content of this * campaign. Note the Email Template is copied when creating this * campaign, so future changes to that Email Template will not alter the * content of this campaign. * * from_email: string * The email address your email will be sent from and will be used in the * reply-to header.from_namestringThe name or label associated with the * email address you're sending from. * * subject: string * * name (optional): string * A name for this campaign. If not specified, this will default to the * subject of the campaign. * * use_smart_sending (optional): boolean * If set, limits the number of emails sent to an individual within a * short period. If not specified, defaults to True. * * add_google_analytics (optional): boolean * If specified, adds Google Analytics tracking tags to links. If not * specified, defaults to False. * * @return CampaignModel * The newly created campaign object. */ public function createCampaign($configuration) { $response = $this->api->request('POST', $this->getResourcePath('campaigns'), $configuration); return ModelFactory::createFromJson($response->getBody()->getContents(), 'campaign'); }
/** * Add a person to an existing List. * * @param ListModel $list * The ListModel for which to add the person. * @param PersonModel $person * The PersonModel of the person to add to a List. * @param bool $confirm_opt_in * Default to TRUE. Determines if the person should be asked to confirm * subscribing to list. When TRUE the person will recieve an email with a * confirmation link before zhe is added to the list. Otherwise, when FALSE * the person is automatically added to the list. * * @return PersonListModel * The PersonList wrapper provided by the Klaviyo API. */ public function addPersonToList(ListModel $list, PersonModel $person, $confirm_opt_in = TRUE) { $options = ['email' => $person->email, 'properties' => json_encode($person), 'confirm_optin' => $confirm_opt_in ? 'true' : 'false']; $response = $this->api->request('POST', $this->getResourcePath("list/{$list->id}/members"), $options); return ModelFactory::createFromJson($response->getBody()->getContents(), 'person_list'); }
/** * Update the specified template. * * @param TemplateModel $template * The template object to update. * * @return TemplateModel * The updated template object. */ public function updateTemplate(TemplateModel $template) { $options = ['name' => $template->name, 'html' => $template->html->saveHtml()]; $response = $this->api->request('PUT', $this->getResourcePath("email-template/{$template->id}"), $options); return ModelFactory::createFromJson($response->getBody()->getContents(), 'email-template'); }
/** * Retrieve a specific page from Klaviyo. * * @param int $page * The page number to retrieve. * @param int $count * The number of items per page. * * @return array * An array of information that represents a page. */ public function getPage($resource, $page = 0, $count = 50, $query_parameters = []) { $options = ['query' => ['page' => $page, 'count' => $count] + $query_parameters]; $response = $this->getApi()->request('GET', $resource, $options); return ModelFactory::create(json_decode($response->getBody()->getContents(), TRUE), 'page'); }