diff --git a/core/lib/Drupal/Core/TempStore/SessionTempStore.php b/core/lib/Drupal/Core/TempStore/SessionTempStore.php new file mode 100644 index 0000000..297c4da --- /dev/null +++ b/core/lib/Drupal/Core/TempStore/SessionTempStore.php @@ -0,0 +1,41 @@ +subsystem = $subsystem; + $this->sid = isset($sid) ? $sid : session_id(); + } + + /** + * Overrides TempStoreBase::getLockOwner(). + */ + public function getLockOwner($key, $exclude_owner = FALSE) { + $lock_owner = db_query('SELECT s.uid, t.updated FROM {temp_store} t INNER JOIN {sessions} s ON t.sid = s.sid WHERE t.subsystem = :subsystem AND t.temp_key = :temp_key ORDER BY t.updated ASC', array( + ':subsystem' => $this->subsystem, + ':temp_key' => $key, + ))->fetchObject(); + + // If the current user owns the lock and is excluded, report that the object + // is not locked. + if ($exclude_owner && isset($lock_owner->uid) && $lock_owner->uid == $GLOBALS['user']->uid) { + return; + } + + return $lock_owner; + } + +} diff --git a/core/lib/Drupal/Core/TempStore/SessionlessTempStore.php b/core/lib/Drupal/Core/TempStore/SpecialTempStore.php similarity index 79% rename from core/lib/Drupal/Core/TempStore/SessionlessTempStore.php rename to core/lib/Drupal/Core/TempStore/SpecialTempStore.php index 22dc8a2..a49281d 100644 --- a/core/lib/Drupal/Core/TempStore/SessionlessTempStore.php +++ b/core/lib/Drupal/Core/TempStore/SpecialTempStore.php @@ -2,7 +2,7 @@ /** * @file - * Definition of Drupal\Core\TempStore\SessionlessTempStore. + * Definition of Drupal\Core\TempStore\SpecialTempStore. */ namespace Drupal\Core\TempStore; @@ -10,10 +10,10 @@ namespace Drupal\Core\TempStore; /** * A temporary storage area not linked to the current session of the user. */ -class SessionlessTempStore extends TempStore { +class SpecialTempStore extends TempStoreBase { /** - * Overrides TempStore::__construct(). + * Overrides TempStoreBase::__construct(). * * Since session IDs are not used, an exception is thrown if no identifier is * provided. @@ -28,7 +28,7 @@ class SessionlessTempStore extends TempStore { } /** - * Overrides TempStore::getLockOwner(). + * Overrides TempStoreBase::getLockOwner(). * * Ignore the session table completely. */ @@ -38,4 +38,5 @@ class SessionlessTempStore extends TempStore { ':temp_key' => $key, ))->fetchField(); } + } diff --git a/core/lib/Drupal/Core/TempStore/TempStore.php b/core/lib/Drupal/Core/TempStore/TempStoreBase.php similarity index 85% rename from core/lib/Drupal/Core/TempStore/TempStore.php rename to core/lib/Drupal/Core/TempStore/TempStoreBase.php index 049d2d8..4637831 100644 --- a/core/lib/Drupal/Core/TempStore/TempStore.php +++ b/core/lib/Drupal/Core/TempStore/TempStoreBase.php @@ -2,7 +2,7 @@ /** * @file - * Definition of Drupal\Core\TempStore\TempStore. + * Definition of Drupal\Core\TempStore\TempStoreBase. */ namespace Drupal\Core\TempStore; @@ -16,9 +16,8 @@ namespace Drupal\Core\TempStore; * * It is primarily used to handle in-progress edits on complicated objects * in order to provide state to an ordinarily stateless HTTP transaction. - * */ -class TempStore { +abstract class TempStoreBase { /** * The subsystem or module that owns this TempStore. @@ -54,14 +53,13 @@ class TempStore { */ function __construct($subsystem, $sid = NULL) { $this->subsystem = $subsystem; - $this->sid = isset($sid) ? $sid : session_id(); } /** * Fetches the data from the store. * * @param string $key - * The key to the stored object. See TempStore::set() for details. + * The key to the stored object. See TempStoreBase::set() for details. * * @return object * The stored data. @@ -126,8 +124,8 @@ class TempStore { * Removes one or more objects from this store for this session. * * @param string|array $key - * The key to the stored object, or an array of keys. See - * TempStore::set() for details. + * The key to the stored object, or an array of keys. See + * TempStoreBase::set() for details. */ function delete($key) { $this->deleteRecords($key); @@ -137,8 +135,8 @@ class TempStore { * Removes one or more objects from this store for all sessions. * * @param string|array $key - * The key to the stored object, or an array of keys. See - * TempStore::set() for details. + * The key to the stored object, or an array of keys. See + * TempStoreBase::set() for details. */ function deleteAll($key) { $this->deleteRecords($key, TRUE); @@ -149,7 +147,7 @@ class TempStore { * * @param string|array $key * The key to the stored object, or an array of keys. See - * TempStore::set() for details. + * TempStoreBase::set() for details. * @param bool $all * Whether to delete all records for this key (TRUE) or just the current * owner's (FALSE). Defaults to FALSE. @@ -175,7 +173,7 @@ class TempStore { * Determines if the object is in use by another store for locking purposes. * * @param string $key - * The key to the stored object. See TempStore::set() for details. + * The key to the stored object. See TempStoreBase::set() for details. * @param bool $exclude_owner * (optional) Whether or not to disregard the current user when determining * the lock owner. Defaults to FALSE. @@ -184,18 +182,7 @@ class TempStore { * An object with the user ID and updated date if found, otherwise NULL. */ public function getLockOwner($key, $exclude_owner = FALSE) { - $lock_owner = db_query('SELECT s.uid, t.updated FROM {temp_store} t INNER JOIN {sessions} s ON t.sid = s.sid WHERE t.subsystem = :subsystem AND t.temp_key = :temp_key ORDER BY t.updated ASC', array( - ':subsystem' => $this->subsystem, - ':temp_key' => $key, - ))->fetchObject(); - - // If the current user owns the lock and is excluded, report that the object - // is not locked. - if ($exclude_owner && isset($lock_owner->uid) && $lock_owner->uid == $GLOBALS['user']->uid) { - return; - } - - return $lock_owner; + return; } /** @@ -206,7 +193,7 @@ class TempStore { * 'form', 'views', etc. * @param array $keys * An array of keys of stored objects. See - * TempStore::set() for details. + * TempStoreBase::set() for details. */ public static function testStoredObjects($subsystem, $keys) { return db_query("SELECT t.temp_key, s.uid, t.updated FROM {temp_store} t INNER JOIN {sessions} s ON t.sid = s.sid WHERE t.subsystem = :subsystem AND t.temp_key IN (:keys) ORDER BY t.updated ASC", array(':subsystem' => $subsystem, ':temp_keys' => $keys)) @@ -220,7 +207,7 @@ class TempStore { * The module or subsystem. Possible values might include 'entity', * 'form', 'views', etc. * @param array $key - * The key to the stored object. See TempStore::set() for details. + * The key to the stored object. See TempStoreBase::set() for details. */ public static function clearAll($subsystem, $key) { $query = db_delete('temp_store') @@ -249,4 +236,5 @@ class TempStore { ->condition('updated', REQUEST_TIME - $age, '<') ->execute(); } + } diff --git a/core/modules/system/lib/Drupal/system/Tests/TempStore/TempStoreTest.php b/core/modules/system/lib/Drupal/system/Tests/TempStore/TempStoreTest.php index 34af396..47ab4fe 100644 --- a/core/modules/system/lib/Drupal/system/Tests/TempStore/TempStoreTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/TempStore/TempStoreTest.php @@ -8,13 +8,13 @@ namespace Drupal\system\Tests\TempStore; use Drupal\simpletest\WebTestBase; -use Drupal\Core\TempStore\TempStore; +use Drupal\Core\TempStore\SessionTempStore; use stdClass; /** * Tests the TempStore subsystem. * - * @see Drupal\Core\TempStore\Tempstore. + * @see Drupal\Core\TempStore\TempStoreBase. */ class TempStoreTest extends WebTestBase { /** @@ -66,7 +66,7 @@ class TempStoreTest extends WebTestBase { public function testApi() { $this->drupalLogin($this->actingUser); $subsystem = $this->randomName(); - $temp_store = new TempStore($subsystem, $this->session_id); + $temp_store = new SessionTempStore($subsystem, $this->session_id); // An empty storage should return nothing. $this->assertFalse($temp_store->get($this->randomName())); @@ -112,19 +112,19 @@ class TempStoreTest extends WebTestBase { ->condition('temp_key', $key) ->execute(); } - TempStore::clearOldObjects(7 * 86400); + SessionTempStore::clearOldObjects(7 * 86400); $this->assertFalse($temp_store->get($old_key)); $this->assertTrue($temp_store->get($new_key)); // Test the getLockOwner method. - $tempStore_one = new TempStore($subsystem, $this->session_id); + $tempStore_one = new SessionTempStore($subsystem, $this->session_id); // Allow two users to be logged in at once. $this->curlClose(); $this->loggedInUser = FALSE; $this->drupalLogin($this->anotherUser); - $tempStore_two = new TempStore($subsystem, $this->session_id); + $tempStore_two = new SessionTempStore($subsystem, $this->session_id); $key_user_one = $this->randomName(); $key_user_two = $this->randomName();