Skip to content

Commit 1aae98f

Browse files
author
Caleb Fidecaro
committed
Making ParseUser and ParseRole subclassable
1 parent a192709 commit 1aae98f

File tree

3 files changed

+46
-11
lines changed

3 files changed

+46
-11
lines changed

src/Parse/ParseClient.php

+8-2
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,14 @@ final class ParseClient
7777
*/
7878
public static function initialize($app_id, $rest_key, $master_key, $enableCurlExceptions = true)
7979
{
80-
ParseUser::registerSubclass();
81-
ParseRole::registerSubclass();
80+
if (! ParseObject::hasRegisteredSubclass('_User')) {
81+
ParseUser::registerSubclass();
82+
}
83+
84+
if (! ParseObject::hasRegisteredSubclass('_Role')) {
85+
ParseRole::registerSubclass();
86+
}
87+
8288
ParseInstallation::registerSubclass();
8389
ParseSession::registerSubclass();
8490
self::$applicationId = $app_id;

src/Parse/ParseObject.php

+29
Original file line numberDiff line numberDiff line change
@@ -1224,6 +1224,35 @@ public static function _unregisterSubclass()
12241224
unset(self::$registeredSubclasses[$subclass]);
12251225
}
12261226

1227+
/**
1228+
* Check whether there is a subclass registered for a given parse class
1229+
*
1230+
* @param $parseClassName
1231+
*
1232+
* @return bool
1233+
*/
1234+
public static function hasRegisteredSubclass($parseClassName)
1235+
{
1236+
return array_key_exists($parseClassName, self::$registeredSubclasses);
1237+
}
1238+
1239+
/**
1240+
* Get the registered subclass for a Parse class, or a generic ParseObject
1241+
* if no subclass is registered.
1242+
*
1243+
* @param $parseClassName
1244+
*
1245+
* @return ParseObject
1246+
*/
1247+
public static function getRegisteredSubclass($parseClassName)
1248+
{
1249+
if (self::hasRegisteredSubclass($parseClassName)) {
1250+
return self::$registeredSubclasses[$parseClassName];
1251+
}
1252+
1253+
return new static($parseClassName);
1254+
}
1255+
12271256
/**
12281257
* Creates a ParseQuery for the subclass of ParseObject.
12291258
* Cannot be called on the base class ParseObject.

src/Parse/ParseUser.php

+9-9
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class ParseUser extends ParseObject
1616
*
1717
* @var ParseUser
1818
*/
19-
private static $currentUser = null;
19+
protected static $currentUser = null;
2020

2121
/**
2222
* The sessionToken for an authenticated user.
@@ -137,7 +137,7 @@ public static function logIn($username, $password)
137137
}
138138
$data = ["username" => $username, "password" => $password];
139139
$result = ParseClient::_request("GET", "/1/login", "", $data);
140-
$user = new ParseUser();
140+
$user = new static();
141141
$user->_mergeAfterFetch($result);
142142
$user->handleSaveResult(true);
143143
ParseClient::getStorage()->set("user", $user);
@@ -156,7 +156,7 @@ public static function logIn($username, $password)
156156
public static function become($sessionToken)
157157
{
158158
$result = ParseClient::_request('GET', '/1/users/me', $sessionToken);
159-
$user = new ParseUser();
159+
$user = new static();
160160
$user->_mergeAfterFetch($result);
161161
$user->handleSaveResult(true);
162162
ParseClient::getStorage()->set("user", $user);
@@ -173,7 +173,7 @@ public static function become($sessionToken)
173173
*/
174174
public static function logOut()
175175
{
176-
$user = ParseUser::getCurrentUser();
176+
$user = static::getCurrentUser();
177177
if ($user) {
178178
try {
179179
ParseClient::_request('POST', '/1/logout', $user->getSessionToken());
@@ -192,7 +192,7 @@ public static function logOut()
192192
*
193193
* @return null
194194
*/
195-
private function handleSaveResult($makeCurrent = false)
195+
protected function handleSaveResult($makeCurrent = false)
196196
{
197197
if (isset($this->serverData['password'])) {
198198
unset($this->serverData['password']);
@@ -227,7 +227,7 @@ public static function getCurrentUser()
227227
return $userData;
228228
}
229229
if (isset($userData["id"]) && isset($userData["_sessionToken"])) {
230-
$user = ParseUser::create("_User", $userData["id"]);
230+
$user = static::create("_User", $userData["id"]);
231231
unset($userData["id"]);
232232
$user->_sessionToken = $userData["_sessionToken"];
233233
unset($userData["_sessionToken"]);
@@ -251,7 +251,7 @@ public static function getCurrentUser()
251251
protected static function saveCurrentUser()
252252
{
253253
$storage = ParseClient::getStorage();
254-
$storage->set('user', ParseUser::getCurrentUser());
254+
$storage->set('user', static::getCurrentUser());
255255
}
256256

257257
/**
@@ -271,8 +271,8 @@ public function getSessionToken()
271271
*/
272272
public function isCurrent()
273273
{
274-
if (ParseUser::getCurrentUser() && $this->getObjectId()) {
275-
if ($this->getObjectId() == ParseUser::getCurrentUser()->getObjectId()) {
274+
if (static::getCurrentUser() && $this->getObjectId()) {
275+
if ($this->getObjectId() == static::getCurrentUser()->getObjectId()) {
276276
return true;
277277
}
278278
}

0 commit comments

Comments
 (0)