@@ -60,18 +60,22 @@ public function findById($listId)
6060 }
6161
6262 /**
63- * Subscribe a Subscriber to a list
63+ * core function to put (add or edit) subscriber to a list
6464 * @param string $listId
6565 * @param Subscriber $subscriber
66+ * @param string $status
6667 * @return array
6768 */
68- public function subscribe ($ listId , Subscriber $ subscriber )
69+ protected function putSubscriberInList ($ listId , Subscriber $ subscriber, $ status )
6970 {
71+ if (!in_array ($ status , ['subscribed ' , 'unsubscribed ' , 'cleaned ' , 'pending ' , 'transactional ' ])){
72+ throw new \RuntimeException ('$status must be one of these values: subscribed, unsubscribed, cleaned, pending, transactional ' );
73+ }
7074 $ subscriberHash = $ this ->mailchimp ->subscriberHash ($ subscriber ->getEmail ());
7175 $ result = $ this ->mailchimp ->put ("lists/ $ listId/members/ $ subscriberHash " ,
7276 array_merge (
7377 $ subscriber ->formatMailChimp (),
74- ['status ' => ' subscribed ' ]
78+ ['status ' => $ status ]
7579 )
7680 );
7781
@@ -82,6 +86,57 @@ public function subscribe($listId, Subscriber $subscriber)
8286 return $ result ;
8387 }
8488
89+ /**
90+ * Subscribe a Subscriber to a list
91+ * @param string $listId
92+ * @param Subscriber $subscriber
93+ * @return array
94+ */
95+ public function subscribe ($ listId , Subscriber $ subscriber )
96+ {
97+ return $ this ->putSubscriberInList ($ listId , $ subscriber , 'subscribed ' );
98+ }
99+
100+ /**
101+ * Subscribe a Subscriber to a list
102+ * @param string $listId
103+ * @param Subscriber $subscriber
104+ */
105+ public function unsubscribe ($ listId , Subscriber $ subscriber )
106+ {
107+ return $ this ->putSubscriberInList ($ listId , $ subscriber , 'unsubscribed ' );
108+ }
109+
110+ /**
111+ * Clean a Subscriber to a list
112+ * @param string $listId
113+ * @param Subscriber $subscriber
114+ */
115+ public function clean ($ listId , Subscriber $ subscriber )
116+ {
117+ return $ this ->putSubscriberInList ($ listId , $ subscriber , 'cleaned ' );
118+ }
119+
120+ /**
121+ * Add/set pending a Subscriber to a list
122+ * @param string $listId
123+ * @param Subscriber $subscriber
124+ */
125+ public function pending ($ listId , Subscriber $ subscriber )
126+ {
127+ return $ this ->putSubscriberInList ($ listId , $ subscriber , 'pending ' );
128+ }
129+
130+ /**
131+ * set transactional a Subscriber to a list
132+ * @param string $listId
133+ * @param Subscriber $subscriber
134+ */
135+ public function transactional ($ listId , Subscriber $ subscriber )
136+ {
137+ return $ this ->putSubscriberInList ($ listId , $ subscriber , 'transactional ' );
138+ }
139+
85140 /**
86141 * Update a Subscriber to a list
87142 * http://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/#edit-patch_lists_list_id_members_subscriber_hash
@@ -156,25 +211,6 @@ public function changeEmailAddress($listId, Subscriber $newSubscriber, $oldEmail
156211 return $ result ;
157212 }
158213
159- /**
160- * Subscribe a Subscriber to a list
161- * @param string $listId
162- * @param Subscriber $subscriber
163- */
164- public function unsubscribe ($ listId , Subscriber $ subscriber )
165- {
166- $ subscriberHash = $ this ->mailchimp ->subscriberHash ($ subscriber ->getEmail ());
167- $ result = $ this ->mailchimp ->patch ("lists/ $ listId/members/ $ subscriberHash " , [
168- 'status ' => 'unsubscribed '
169- ]);
170-
171- if (!$ this ->mailchimp ->success ()) {
172- throw new \RuntimeException ($ this ->mailchimp ->getLastError ());
173- }
174-
175- return $ result ;
176- }
177-
178214 /**
179215 * Delete a Subscriber to a list
180216 * @param string $listId
0 commit comments