Skip to content

Commit 0031424

Browse files
author
Caleb Fidecaro
committed
Making ParseUser and ParseRole subclassable
1 parent b738bc4 commit 0031424

File tree

3 files changed

+47
-12
lines changed

3 files changed

+47
-12
lines changed

src/Parse/ParseClient.php

+8-2
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,14 @@ final class ParseClient
6767
*/
6868
public static function initialize($app_id, $rest_key, $master_key, $enableCurlExceptions = true)
6969
{
70-
ParseUser::registerSubclass();
71-
ParseRole::registerSubclass();
70+
if (! ParseObject::hasRegisteredSubclass('_User')) {
71+
ParseUser::registerSubclass();
72+
}
73+
74+
if (! ParseObject::hasRegisteredSubclass('_Role')) {
75+
ParseRole::registerSubclass();
76+
}
77+
7278
ParseInstallation::registerSubclass();
7379
ParseSession::registerSubclass();
7480
self::$applicationId = $app_id;

src/Parse/ParseObject.php

+29
Original file line numberDiff line numberDiff line change
@@ -1196,6 +1196,35 @@ public static function _unregisterSubclass()
11961196
unset(self::$registeredSubclasses[$subclass]);
11971197
}
11981198

1199+
/**
1200+
* Check whether there is a subclass registered for a given parse class
1201+
*
1202+
* @param $parseClassName
1203+
*
1204+
* @return bool
1205+
*/
1206+
public static function hasRegisteredSubclass($parseClassName)
1207+
{
1208+
return array_key_exists($parseClassName, self::$registeredSubclasses);
1209+
}
1210+
1211+
/**
1212+
* Get the registered subclass for a Parse class, or a generic ParseObject
1213+
* if no subclass is registered.
1214+
*
1215+
* @param $parseClassName
1216+
*
1217+
* @return ParseObject
1218+
*/
1219+
public static function getRegisteredSubclass($parseClassName)
1220+
{
1221+
if (self::hasRegisteredSubclass($parseClassName)) {
1222+
return self::$registeredSubclasses[$parseClassName];
1223+
}
1224+
1225+
return new static($parseClassName);
1226+
}
1227+
11991228
/**
12001229
* Creates a ParseQuery for the subclass of ParseObject.
12011230
* Cannot be called on the base class ParseObject.

src/Parse/ParseUser.php

+10-10
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class ParseUser extends ParseObject
1414
/**
1515
* @var ParseUser The currently logged-in user.
1616
*/
17-
private static $currentUser = null;
17+
protected static $currentUser = null;
1818

1919
/**
2020
* @var string The sessionToken for an authenticated user.
@@ -90,7 +90,7 @@ public function isAuthenticated()
9090
/**
9191
* Signs up the current user, or throw if invalid.
9292
* This will create a new ParseUser on the server, and also persist the
93-
* session so that you can access the user using ParseUser::getCurrentUser();.
93+
* session so that you can access the user using static::getCurrentUser();.
9494
*/
9595
public function signUp()
9696
{
@@ -133,7 +133,7 @@ public static function logIn($username, $password)
133133
}
134134
$data = ["username" => $username, "password" => $password];
135135
$result = ParseClient::_request("GET", "/1/login", "", $data);
136-
$user = new ParseUser();
136+
$user = new static();
137137
$user->_mergeAfterFetch($result);
138138
$user->handleSaveResult(true);
139139
ParseClient::getStorage()->set("user", $user);
@@ -152,7 +152,7 @@ public static function logIn($username, $password)
152152
public static function become($sessionToken)
153153
{
154154
$result = ParseClient::_request('GET', '/1/users/me', $sessionToken);
155-
$user = new ParseUser();
155+
$user = new static();
156156
$user->_mergeAfterFetch($result);
157157
$user->handleSaveResult(true);
158158
ParseClient::getStorage()->set("user", $user);
@@ -169,7 +169,7 @@ public static function become($sessionToken)
169169
*/
170170
public static function logOut()
171171
{
172-
$user = ParseUser::getCurrentUser();
172+
$user = static::getCurrentUser();
173173
if ($user) {
174174
try {
175175
ParseClient::_request('POST', '/1/logout', $user->getSessionToken());
@@ -188,7 +188,7 @@ public static function logOut()
188188
*
189189
* @return null
190190
*/
191-
private function handleSaveResult($makeCurrent = false)
191+
public function handleSaveResult($makeCurrent = false)
192192
{
193193
if (isset($this->serverData['password'])) {
194194
unset($this->serverData['password']);
@@ -223,7 +223,7 @@ public static function getCurrentUser()
223223
return $userData;
224224
}
225225
if (isset($userData["id"]) && isset($userData["_sessionToken"])) {
226-
$user = ParseUser::create("_User", $userData["id"]);
226+
$user = static::create("_User", $userData["id"]);
227227
unset($userData["id"]);
228228
$user->_sessionToken = $userData["_sessionToken"];
229229
unset($userData["_sessionToken"]);
@@ -247,7 +247,7 @@ public static function getCurrentUser()
247247
protected static function saveCurrentUser()
248248
{
249249
$storage = ParseClient::getStorage();
250-
$storage->set('user', ParseUser::getCurrentUser());
250+
$storage->set('user', static::getCurrentUser());
251251
}
252252

253253
/**
@@ -267,8 +267,8 @@ public function getSessionToken()
267267
*/
268268
public function isCurrent()
269269
{
270-
if (ParseUser::getCurrentUser() && $this->getObjectId()) {
271-
if ($this->getObjectId() == ParseUser::getCurrentUser()->getObjectId()) {
270+
if (static::getCurrentUser() && $this->getObjectId()) {
271+
if ($this->getObjectId() == static::getCurrentUser()->getObjectId()) {
272272
return true;
273273
}
274274
}

0 commit comments

Comments
 (0)