Mattflaschen has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/249044

Change subject: Implement AbstractCollection::newFromRevisionId
......................................................................

Implement AbstractCollection::newFromRevisionId

This will be useful when troubleshooting things in a shell, and anyway,
it already says it's implemented. :)

Change-Id: I2bd9eaefe012f41bf74d1f403c356db3d573b64c
---
M includes/Collection/AbstractCollection.php
M includes/Collection/HeaderCollection.php
M includes/Collection/LocalCacheAbstractCollection.php
M includes/Collection/PostCollection.php
M includes/Collection/PostSummaryCollection.php
5 files changed, 38 insertions(+), 18 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Flow 
refs/changes/44/249044/1

diff --git a/includes/Collection/AbstractCollection.php 
b/includes/Collection/AbstractCollection.php
index f69b32a..4948ef9 100644
--- a/includes/Collection/AbstractCollection.php
+++ b/includes/Collection/AbstractCollection.php
@@ -6,6 +6,7 @@
 use Flow\Data\ManagerGroup;
 use Flow\Data\ObjectManager;
 use Flow\Exception\InvalidDataException;
+use Flow\Exception\FlowException;
 use Flow\Model\AbstractRevision;
 use Flow\Model\UUID;
 use Flow\Model\Workflow;
@@ -37,7 +38,7 @@
         *
         * @return string
         */
-       abstract public function getRevisionClass();
+       abstract public static function getRevisionClass();
 
        /**
         * Returns the id of the workflow this collection is associated with.
@@ -67,13 +68,32 @@
        }
 
        /**
-        * Instantiate a new object based on its id.
+        * Instantiate a new object based on its type id
+        * (post ID, header ID, etc.)
         *
         * @param UUID $uuid
         * @return AbstractCollection
         */
        public static function newFromId( UUID $uuid ) {
                return new static( $uuid );
+       }
+
+       /**
+        * Instantiate a new collection based on a revision ID
+        *
+        * @param UUID $revId Revision ID
+        * @return AbstractCollection
+        */
+       public static function newFromRevisionId( UUID $revId ) {
+               $revisions = static::getStorage()->find(
+                       array( 'rev_id' => $revId )
+               );
+
+               if ( !$revisions ) {
+                       throw new InvalidDataException( 'Revisions for ' . 
$revId->getAlphadecimal() . ' could not be found', 'invalid-revision-id' );
+               }
+
+               return static::newFromRevision( $revisions[0] );
        }
 
        /**
@@ -97,9 +117,9 @@
         * @param string|null $class Storage class - defaults to 
getRevisionClass()
         * @return ObjectManager
         */
-       public function getStorage( $class = null ) {
+       public static function getStorage( $class = null ) {
                if ( !$class ) {
-                       $class = $this->getRevisionClass();
+                       $class = static::getRevisionClass();
                }
 
                /** @var ManagerGroup $storage */
@@ -116,13 +136,13 @@
        public function getAllRevisions() {
                if ( !$this->revisions ) {
                        /** @var AbstractRevision[] $revisions */
-                       $revisions = $this->getStorage()->find(
+                       $revisions = self::getStorage()->find(
                                array( 'rev_type_id' => $this->uuid ),
                                array( 'sort' => 'rev_id', 'order' => 'DESC' )
                        );
 
                        if ( !$revisions ) {
-                               throw new InvalidDataException( 'Revisions for 
' . $this->uuid->getAlphadecimal() . ' could not be found', 
'invalid-revision-id' );
+                               throw new InvalidDataException( 'Revisions for 
' . $this->uuid->getAlphadecimal() . ' could not be found', 'invalid-type-id' );
                        }
 
                        foreach ( $revisions as $revision ) {
@@ -137,7 +157,7 @@
         * Returns the revision with the given id.
         *
         * @param UUID $uuid
-        * @return AbstractRevision|null null if there is no such revision
+        * @return AbstractRevision|null null if there is no such revision in 
the collection
         */
        public function getRevision( UUID $uuid ) {
                // make sure all revisions have been loaded
@@ -227,7 +247,7 @@
                if ( !$this->workflow ) {
                        $uuid = $this->getWorkflowId();
 
-                       $this->workflow = $this->getStorage( 
'Flow\\Model\\Workflow' )->get( $uuid );
+                       $this->workflow = self::getStorage( 
'Flow\\Model\\Workflow' )->get( $uuid );
                        if ( !$this->workflow ) {
                                throw new InvalidDataException( 'Invalid 
workflow: ' . $uuid->getAlphadecimal(), 'invalid-workflow' );
                        }
@@ -237,6 +257,6 @@
        }
 
        public function getBoardWorkflow() {
-               return $this->getStorage( 'Flow\\Model\\Workflow' )->get( 
$this->getBoardWorkflowId() );
+               return self::getStorage( 'Flow\\Model\\Workflow' )->get( 
$this->getBoardWorkflowId() );
        }
 }
diff --git a/includes/Collection/HeaderCollection.php 
b/includes/Collection/HeaderCollection.php
index 3f4eefa..592ec9b 100644
--- a/includes/Collection/HeaderCollection.php
+++ b/includes/Collection/HeaderCollection.php
@@ -3,7 +3,7 @@
 namespace Flow\Collection;
 
 class HeaderCollection extends LocalCacheAbstractCollection {
-       public function getRevisionClass() {
+       public static function getRevisionClass() {
                return 'Flow\\Model\\Header';
        }
 
diff --git a/includes/Collection/LocalCacheAbstractCollection.php 
b/includes/Collection/LocalCacheAbstractCollection.php
index 4d958c7..46f274d 100644
--- a/includes/Collection/LocalCacheAbstractCollection.php
+++ b/includes/Collection/LocalCacheAbstractCollection.php
@@ -64,8 +64,8 @@
                        $previousId = $oldest->getPrevRevisionId();
 
                        // check if it's in local storage already
-                       if ( $previousId && $this->getStorage()->got( 
$previousId ) ) {
-                               $revision = $this->getStorage()->get( 
$previousId );
+                       if ( $previousId && self::getStorage()->got( 
$previousId ) ) {
+                               $revision = self::getStorage()->get( 
$previousId );
 
                                // add this revision to revisions array
                                
$this->revisions[$previousId->getAlphadecimal()] = $revision;
@@ -104,11 +104,11 @@
                $attributes = array( 'rev_type_id' => $this->uuid );
                $options = array( 'sort' => 'rev_id', 'limit' => 1, 'order' => 
'DESC' );
 
-               if ( $this->getStorage()->found( $attributes, $options ) ) {
+               if ( self::getStorage()->found( $attributes, $options ) ) {
                        // if last revision is already known in local cache, 
fetch it
-                       $revision = $this->getStorage()->find( $attributes, 
$options );
+                       $revision = self::getStorage()->find( $attributes, 
$options );
                        if ( !$revision ) {
-                               throw new InvalidDataException( 'Last revision 
for ' . $this->uuid->getAlphadecimal() . ' could not be found', 
'invalid-revision-id' );
+                               throw new InvalidDataException( 'Last revision 
for ' . $this->uuid->getAlphadecimal() . ' could not be found', 
'invalid-type-id' );
                        }
                        $revision = reset( $revision );
                        
$this->revisions[$revision->getRevisionId()->getAlphadecimal()] = $revision;
diff --git a/includes/Collection/PostCollection.php 
b/includes/Collection/PostCollection.php
index cd2b405..ee9993d 100644
--- a/includes/Collection/PostCollection.php
+++ b/includes/Collection/PostCollection.php
@@ -13,7 +13,7 @@
         */
        protected $rootId;
 
-       public function getRevisionClass() {
+       public static function getRevisionClass() {
                return 'Flow\\Model\\PostRevision';
        }
 
@@ -37,7 +37,7 @@
         * @throws InvalidDataException
         */
        public function getBoardWorkflowId() {
-               $found = $this->getStorage( 'Flow\\Model\\TopicListEntry' 
)->find(
+               $found = self::getStorage( 'Flow\\Model\\TopicListEntry' 
)->find(
                        // uses flow_topic_list:topic index, for topic->board 
lookups
                        array( 'topic_id' => $this->getWorkflowId() )
                );
diff --git a/includes/Collection/PostSummaryCollection.php 
b/includes/Collection/PostSummaryCollection.php
index 02275c7..4286f8a 100644
--- a/includes/Collection/PostSummaryCollection.php
+++ b/includes/Collection/PostSummaryCollection.php
@@ -11,7 +11,7 @@
         */
        protected $rootId;
 
-       public function getRevisionClass() {
+       public static function getRevisionClass() {
                return 'Flow\\Model\\PostSummary';
        }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/249044
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2bd9eaefe012f41bf74d1f403c356db3d573b64c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Flow
Gerrit-Branch: master
Gerrit-Owner: Mattflaschen <mflasc...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to