diff --git a/core/modules/user/src/TempStore.php b/core/modules/user/src/TempStore.php index 3096444bf43..da876916ec5 100644 --- a/core/modules/user/src/TempStore.php +++ b/core/modules/user/src/TempStore.php @@ -65,11 +65,8 @@ class TempStore { * By default, data is stored for one week (604800 seconds) before expiring. * * @var int - * - * @todo Currently, this property is not exposed anywhere, and so the only - * way to override it is by extending the class. */ - protected $expire = 604800; + protected $expire; /** * Constructs a new object for accessing data from a key/value store. @@ -82,11 +79,14 @@ class TempStore { * The lock object used for this data. * @param mixed $owner * The owner key to store along with the data (e.g. a user or session ID). + * @param int $expire + * The time to live for items, in seconds. */ - public function __construct(KeyValueStoreExpirableInterface $storage, LockBackendInterface $lockBackend, $owner) { + public function __construct(KeyValueStoreExpirableInterface $storage, LockBackendInterface $lockBackend, $owner, $expire = 604800) { $this->storage = $storage; $this->lockBackend = $lockBackend; $this->owner = $owner; + $this->expire = $expire; } /** diff --git a/core/modules/user/src/TempStoreFactory.php b/core/modules/user/src/TempStoreFactory.php index c93cb58ecde..70a92898e9b 100644 --- a/core/modules/user/src/TempStoreFactory.php +++ b/core/modules/user/src/TempStoreFactory.php @@ -38,6 +38,13 @@ class TempStoreFactory { */ protected $lockBackend; + /** + * The time to live for items in seconds. + * + * @var int + */ + protected $expire; + /** * Constructs a Drupal\user\TempStoreFactory object. * @@ -47,11 +54,14 @@ class TempStoreFactory { * The connection object used for this data. * @param \Drupal\Core\Lock\LockBackendInterface $lockBackend * The lock object used for this data. + * @param int $expire + * The time to live for items, in seconds. */ - function __construct(SerializationInterface $serializer, Connection $connection, LockBackendInterface $lockBackend) { + function __construct(SerializationInterface $serializer, Connection $connection, LockBackendInterface $lockBackend, $expire = 604800) { $this->serializer = $serializer; $this->connection = $connection; $this->lockBackend = $lockBackend; + $this->expire = $expire; } /** @@ -77,7 +87,7 @@ class TempStoreFactory { // Store the data for this collection in the database. $storage = new DatabaseStorageExpirable($collection, $this->serializer, $this->connection); - return new TempStore($storage, $this->lockBackend, $owner); + return new TempStore($storage, $this->lockBackend, $owner, $this->expire); } } diff --git a/core/modules/user/tests/src/TempStoreTest.php b/core/modules/user/tests/src/TempStoreTest.php index af54c81f40a..5889669cab1 100644 --- a/core/modules/user/tests/src/TempStoreTest.php +++ b/core/modules/user/tests/src/TempStoreTest.php @@ -82,7 +82,7 @@ class TempStoreTest extends UnitTestCase { $this->keyValue = $this->getMock('Drupal\Core\KeyValueStore\KeyValueStoreExpirableInterface'); $this->lock = $this->getMock('Drupal\Core\Lock\LockBackendInterface'); - $this->tempStore = new TempStore($this->keyValue, $this->lock, $this->owner); + $this->tempStore = new TempStore($this->keyValue, $this->lock, $this->owner, 604800); $this->ownObject = (object) array( 'data' => 'test_data', diff --git a/core/modules/user/user.services.yml b/core/modules/user/user.services.yml index a408fcf9778..c4e343910e7 100644 --- a/core/modules/user/user.services.yml +++ b/core/modules/user/user.services.yml @@ -54,4 +54,7 @@ services: arguments: ['@entity.manager', '@password'] user.tempstore: class: Drupal\user\TempStoreFactory - arguments: ['@serialization.phpserialize', '@database', '@lock'] + arguments: ['@serialization.phpserialize', '@database', '@lock', '%user.tempstore.expire%'] + +parameters: + user.tempstore.expire: 604800