Skip to content

Commit e27da6c

Browse files
authored
Enable save() method for User and enable SMS manipulation (#17)
1 parent 2f310dc commit e27da6c

File tree

3 files changed

+119
-0
lines changed

3 files changed

+119
-0
lines changed

spec/Users/UserSpec.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,28 @@ public function it_has_requests()
7171
{
7272
$this->requests->shouldHaveType(Requests::class);
7373
}
74+
75+
public function it_has_sms()
76+
{
77+
$this->getSmsNumber()->shouldBe('87654321');
78+
}
79+
80+
public function it_can_change_sms()
81+
{
82+
$this->setSmsNumber('12345678')->shouldBeCalled();
83+
$this->getSmsNumber()->shouldBe('12345678');
84+
}
85+
86+
public function it_can_add_sms()
87+
{
88+
$this->setSmsNumber('9999999')->shouldBeCalled();
89+
$this->getSmsNumber()->shouldBe('9999999');
90+
}
91+
92+
public function it_can_remove_sms()
93+
{
94+
$this->unsetSmsNumber()->shouldBeCalled();
95+
$this->getSmsNumber()->shouldBe(null);
96+
}
97+
7498
}

spec/data/user_response.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,18 @@
6565
"preferred": true,
6666
"preferred_sms": false,
6767
"segment_type": "Internal"
68+
},
69+
{
70+
"phone_number": "87654321",
71+
"phone_type": [
72+
{
73+
"desc": "Mobile",
74+
"value": "mobile"
75+
}
76+
],
77+
"preferred": false,
78+
"preferred_sms": true,
79+
"segment_type": "Internal"
6880
}
6981
]
7082
},

src/Users/User.php

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,89 @@ public function getIdentifiers()
8383
return $this->init()->_identifiers;
8484
}
8585

86+
/**
87+
* Get the user's preferred SMS number.
88+
*
89+
* @return string|null
90+
*/
91+
public function getSmsNumber()
92+
{
93+
$this->init();
94+
if ($this->data->contact_info->phone) {
95+
foreach ($this->data->contact_info->phone as $phone) {
96+
if ($phone->preferred_sms) {
97+
return $phone->phone_number;
98+
}
99+
}
100+
}
101+
return null;
102+
}
103+
104+
/**
105+
* Remove the preferred SMS flag from any number.
106+
*/
107+
public function unsetSmsNumber()
108+
{
109+
$this->init();
110+
if ($this->data->contact_info->phone) {
111+
foreach ($this->data->contact_info->phone as $phone) {
112+
if ($phone->preferred_sms) {
113+
$phone->preferred_sms = false;
114+
}
115+
}
116+
}
117+
}
118+
119+
/**
120+
* Set the user's preferred SMS number, creating a new internal mobile number if needed
121+
* @param $number string The SMS-capable mobile phone number
122+
*/
123+
public function setSmsNumber($number)
124+
{
125+
$currentNumber = $this->getSmsNumber();
126+
if ($number === $currentNumber) {
127+
return;
128+
}
129+
$this->unsetSmsNumber();
130+
$updated = false;
131+
if ($this->data->contact_info->phone) {
132+
foreach ($this->data->contact_info->phone as $phone) {
133+
if ($phone->phone_number === $number) {
134+
$phone->preferred_sms = true;
135+
}
136+
}
137+
}
138+
if (!$updated) {
139+
$this->addSmsNumber($number);
140+
}
141+
}
142+
143+
/**
144+
* Add the user's preferred SMS number as a new internal mobile number.
145+
* @param $number string The SMS-capable mobile phone number
146+
*/
147+
public function addSmsNumber($number)
148+
{
149+
$currentNumber = $this->getSmsNumber();
150+
if ($currentNumber) {
151+
$this->unsetSmsNumber();
152+
}
153+
$phones = json_decode(json_encode($this->data->contact_info->phone), true);
154+
$phones[] = json_decode('{"phone_number":'.json_encode($number).',"preferred":false,"preferred_sms":true,"segment_type":"Internal","phone_type":[{"value":"mobile","desc":"Mobile"}]}', true);
155+
$this->data->contact_info->phone = json_decode(json_encode($phones));
156+
}
157+
158+
/**
159+
* Save the user
160+
*
161+
* @return string The API response body
162+
*/
163+
public function save()
164+
{
165+
$this->init();
166+
return $this->client->put($this->url(), json_encode($this->jsonSerialize()));
167+
}
168+
86169
/**
87170
* Check if we have the full representation of our data object.
88171
*

0 commit comments

Comments
 (0)