@@ -75,34 +75,22 @@ public function isLoggedIn(): bool {
7575 * @param string $cpr
7676 * The users personal security number.
7777 *
78- * @return \Drupal\os2forms_fbs_handler\Client\Model\Patron |null
79- * NULL if not else the Patron .
78+ * @return string |null
79+ * NULL if not else the PatronId .
8080 *
8181 * @throws \GuzzleHttp\Exception\GuzzleException
8282 * @throws \JsonException
8383 */
84- public function doUserExists (string $ cpr ): ?Patron {
84+ public function authenticatePatron (string $ cpr ): ?string {
8585 // Check if session has been created with FBS and if not creates it.
8686 if (!$ this ->isLoggedIn ()) {
8787 $ this ->login ();
8888 }
8989
90- // Try pre-authenticate the user/parent .
91- $ json = $ this ->request ('/external/{agency_id}/patrons/preauthenticated/v9 ' , $ cpr );
90+ // Authenticate the patron .
91+ $ json = $ this ->request ('/external/{agency_id}/patrons/preauthenticated/v10 ' , $ cpr );
9292 if ($ json ->authenticateStatus === $ this ::AUTHENTICATE_STATUS_VALID ) {
93- return new Patron (
94- $ json ->patron ->patronId ,
95- (bool ) $ json ->patron ->receiveSms ,
96- (bool ) $ json ->patron ->receivePostalMail ,
97- $ json ->patron ->notificationProtocols ,
98- $ json ->patron ->phoneNumber ,
99- is_null ($ json ->patron ->onHold ) ? $ json ->patron ->onHold : (array ) $ json ->patron ->onHold ,
100- $ json ->patron ->preferredLanguage ,
101- (bool ) $ json ->patron ->guardianVisibility ,
102- $ json ->patron ->emailAddress ,
103- (bool ) $ json ->patron ->receiveEmail ,
104- $ json ->patron ->preferredPickupBranch
105- );
93+ return $ json ->patronId ;
10694 }
10795
10896 return NULL ;
@@ -123,17 +111,60 @@ public function doUserExists(string $cpr): ?Patron {
123111 * @throws \JsonException
124112 */
125113 public function createPatronWithGuardian (Patron $ patron , Guardian $ guardian ) {
126- $ uri = '/external/{agency_id}/patrons/withGuardian/v1 ' ;
114+ $ uri = '/external/{agency_id}/patrons/withGuardian/v4 ' ;
127115 $ payload = [
128- 'cprNumber ' => $ patron ->cpr ,
116+ 'personId ' => $ patron ->personId ,
129117 'pincode ' => $ patron ->pincode ,
130118 'preferredPickupBranch ' => $ patron ->preferredPickupBranch ,
131119 'name ' => 'Unknown Name ' ,
132- 'email ' => $ patron ->emailAddress ,
120+ 'emailAddresses ' => $ patron ->emailAddresses ,
133121 'guardian ' => $ guardian ->toArray (),
134122 ];
135123
136- return $ this ->request ($ uri , $ payload ,);
124+ return $ this ->request ($ uri , $ payload );
125+ }
126+
127+ /**
128+ * Get patron information.
129+ *
130+ * @param string $patronId
131+ * The patron to update.
132+ *
133+ * @return \Drupal\os2forms_fbs_handler\Client\Model\Patron
134+ * Patron object
135+ *
136+ * @throws \GuzzleHttp\Exception\GuzzleException
137+ * @throws \JsonException
138+ */
139+ public function getPatron (string $ patronId ): ?Patron {
140+ $ uri = '/external/{agency_id}/patrons/ ' . $ patronId . '/v4 ' ;
141+
142+ $ json = $ this ->request ($ uri , [], RequestMethodInterface::METHOD_GET );
143+
144+ if ($ json ->authenticateStatus === "VALID " ) {
145+ return new Patron (
146+ $ json ->patron ->patronId ,
147+ (bool ) $ json ->patron ->receiveSms ,
148+ (bool ) $ json ->patron ->receivePostalMail ,
149+ $ json ->patron ->notificationProtocols ,
150+ $ json ->patron ->phoneNumber ,
151+ is_null ($ json ->patron ->onHold ) ? $ json ->patron ->onHold : (array ) $ json ->patron ->onHold ,
152+ $ json ->patron ->preferredLanguage ,
153+ (bool ) $ json ->patron ->guardianVisibility ,
154+ $ json ->patron ->defaultInterestPeriod ,
155+ (bool ) $ json ->patron ->resident ,
156+ [
157+ [
158+ 'emailAddress ' => $ json ->patron ->emailAddress ,
159+ 'receiveNotification ' => $ json ->patron ->receiveEmail ,
160+ ],
161+ ],
162+ (bool ) $ json ->patron ->receiveEmail ,
163+ $ json ->patron ->preferredPickupBranch
164+ );
165+ }
166+
167+ return NULL ;
137168 }
138169
139170 /**
@@ -149,19 +180,27 @@ public function createPatronWithGuardian(Patron $patron, Guardian $guardian) {
149180 * @throws \JsonException
150181 */
151182 public function updatePatron (Patron $ patron ): bool {
152- $ uri = '/external/{agency_id}/patrons/ ' . $ patron ->patronId . '/v6 ' ;
183+ $ uri = '/external/{agency_id}/patrons/ ' . $ patron ->patronId . '/v8 ' ;
153184 $ payload = [
154- 'patronid ' => $ patron ->patronId ,
155- 'patron ' => $ patron ->toArray (),
185+ 'patron ' => [
186+ 'preferredPickupBranch ' => $ patron ->preferredPickupBranch ,
187+ 'emailAddresses ' => $ patron ->emailAddresses ,
188+ 'guardianVisibility ' => $ patron ->guardianVisibility ,
189+ 'receivePostalMail ' => $ patron ->receiveEmail ,
190+ 'phoneNumbers ' => [
191+ [
192+ 'receiveNotification ' => TRUE ,
193+ 'phoneNumber ' => $ patron ->phoneNumber ,
194+ ],
195+ ],
196+ ],
156197 'pincodeChange ' => [
157198 'pincode ' => $ patron ->pincode ,
158- 'libraryCardNumber ' => $ patron ->cpr ,
199+ 'libraryCardNumber ' => $ patron ->personId ,
159200 ],
160201 ];
161202
162- $ json = $ this ->request ($ uri , $ payload , Request::METHOD_PUT );
163-
164- return $ json ->authenticateStatus === $ this ::AUTHENTICATE_STATUS_VALID ;
203+ return $ this ->request ($ uri , $ payload , RequestMethodInterface::METHOD_PUT );
165204 }
166205
167206 /**
@@ -179,7 +218,7 @@ public function updatePatron(Patron $patron): bool {
179218 * @throws \JsonException
180219 */
181220 public function createGuardian (Patron $ patron , Guardian $ guardian ): int {
182- $ uri = '/external/{agency_id}/patrons/withGuardian/v1 ' ;
221+ $ uri = '/external/{agency_id}/patrons/withGuardian/v2 ' ;
183222 $ payload = [
184223 'patronId ' => $ patron ->patronId ,
185224 'guardian ' => $ guardian ->toArray (),
@@ -199,7 +238,7 @@ public function createGuardian(Patron $patron, Guardian $guardian): int {
199238 * The type of request to send (Default: POST).
200239 *
201240 * @return mixed
202- * Json response from FBS.
241+ * Json response from FBS or TRUE on updatePatron response .
203242 *
204243 * @throws \GuzzleHttp\Exception\GuzzleException
205244 * @throws \JsonException
@@ -230,6 +269,10 @@ private function request(string $uri, array|string $data, string $method = Reque
230269
231270 $ response = $ this ->client ->request ($ method , $ url , $ options );
232271
272+ if ($ response ->getStatusCode () === 204 ) {
273+ return TRUE ;
274+ }
275+
233276 return json_decode ($ response ->getBody (), FALSE , 512 , JSON_THROW_ON_ERROR );
234277 }
235278
0 commit comments