MediaWiki  master
HistoryBlobStub.php
Go to the documentation of this file.
1 <?php
24 
35  protected static $blobCache = [];
36 
38  public $mOldId;
39 
41  public $mHash;
42 
44  public $mRef;
45 
50  function __construct( $hash = '', $oldid = 0 ) {
51  $this->mHash = $hash;
52  }
53 
59  function setLocation( $id ) {
60  $this->mOldId = $id;
61  }
62 
67  function setReferrer( $id ) {
68  $this->mRef = $id;
69  }
70 
75  function getReferrer() {
76  return $this->mRef;
77  }
78 
82  function getText() {
83  if ( isset( self::$blobCache[$this->mOldId] ) ) {
84  $obj = self::$blobCache[$this->mOldId];
85  } else {
86  $dbr = wfGetDB( DB_REPLICA );
87  $row = $dbr->selectRow(
88  'text',
89  [ 'old_flags', 'old_text' ],
90  [ 'old_id' => $this->mOldId ]
91  );
92 
93  if ( !$row ) {
94  return false;
95  }
96 
97  $flags = explode( ',', $row->old_flags );
98  if ( in_array( 'external', $flags ) ) {
99  $url = $row->old_text;
100  $parts = explode( '://', $url, 2 );
101  if ( !isset( $parts[1] ) || $parts[1] == '' ) {
102  return false;
103  }
104  $row->old_text = MediaWikiServices::getInstance()
105  ->getExternalStoreAccess()
106  ->fetchFromURL( $url );
107  }
108 
109  if ( !in_array( 'object', $flags ) ) {
110  return false;
111  }
112 
113  if ( in_array( 'gzip', $flags ) ) {
114  // This shouldn't happen, but a bug in the compress script
115  // may at times gzip-compress a HistoryBlob object row.
116  $obj = unserialize( gzinflate( $row->old_text ) );
117  } else {
118  $obj = unserialize( $row->old_text );
119  }
120 
121  if ( !is_object( $obj ) ) {
122  // Correct for old double-serialization bug.
123  $obj = unserialize( $obj );
124  }
125 
126  // Save this item for reference; if pulling many
127  // items in a row we'll likely use it again.
128  $obj->uncompress();
129  self::$blobCache = [ $this->mOldId => $obj ];
130  }
131 
132  return $obj->getItem( $this->mHash );
133  }
134 
140  function getHash() {
141  return $this->mHash;
142  }
143 }
144 
145 // phpcs:ignore Generic.CodeAnalysis.UnconditionalIfStatement.Found
146 if ( false ) {
147  // Blobs generated by MediaWiki < 1.5 on PHP 4 were serialized with the
148  // class name coerced to lowercase. We can improve efficiency by adding
149  // autoload entries for the lowercase variants of these classes (T166759).
150  // The code below is never executed, but it is picked up by the AutoloadGenerator
151  // parser, which scans for class_alias() calls.
152  class_alias( HistoryBlobStub::class, 'historyblobstub' );
153 }
wfGetDB( $db, $groups=[], $wiki=false)
Get a Database object.
Pointer object for an item within a CGZ blob stored in the text table.
setLocation( $id)
Sets the location (old_id) of the main object to which this object points.
unserialize( $serialized)
setReferrer( $id)
Sets the location (old_id) of the referring object.
__construct( $hash='', $oldid=0)
getHash()
Get the content hash.
static array $blobCache
One-step cache variable to hold base blobs; operations that pull multiple revisions may often pull mu...
const DB_REPLICA
Definition: defines.php:25
getReferrer()
Gets the location of the referring object.