Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4121590
HistoryBlobStub.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
HistoryBlobStub.php
View Options
<?php
/**
* Efficient concatenated text storage.
*
* @license GPL-2.0-or-later
* @file
*/
use
MediaWiki\MediaWikiServices
;
/**
* Pointer object for an item within a CGZ blob stored in the text table.
*
* WARNING: Objects of this class are serialized and permanently stored in the DB.
* Do not change the name or visibility of any property!
*
* Note: the property visibility was changed in 2020 from public to protected.
* This may cause problems in future.
*/
class
HistoryBlobStub
{
/**
* @var array One-step cache variable to hold base blobs; operations that
* pull multiple revisions may often pull multiple times from the same
* blob. By keeping the last-used one open, we avoid redundant
* unserialization and decompression overhead.
*/
protected
static
$blobCache
=
[];
/** @var int */
protected
$mOldId
;
/** @var string */
protected
$mHash
;
/** @var string */
protected
$mRef
;
/**
* @param string $hash The content hash of the text
* @param int $oldid The old_id for the CGZ object
*/
public
function
__construct
(
$hash
=
''
,
$oldid
=
0
)
{
$this
->
mHash
=
$hash
;
}
/**
* Sets the location (old_id) of the main object to which this object
* points
* @param int $id
*/
public
function
setLocation
(
$id
)
{
$this
->
mOldId
=
$id
;
}
/**
* Gets the location of the main object
* @return int
*/
public
function
getLocation
()
{
return
$this
->
mOldId
;
}
/**
* Sets the location (old_id) of the referring object
* @param string $id
*/
public
function
setReferrer
(
$id
)
{
$this
->
mRef
=
$id
;
}
/**
* Gets the location of the referring object
* @return string
*/
public
function
getReferrer
()
{
return
$this
->
mRef
;
}
/**
* @return string|false
*/
public
function
getText
()
{
if
(
isset
(
self
::
$blobCache
[
$this
->
mOldId
]
)
)
{
$obj
=
self
::
$blobCache
[
$this
->
mOldId
];
}
else
{
$dbr
=
MediaWikiServices
::
getInstance
()->
getConnectionProvider
()->
getReplicaDatabase
();
$row
=
$dbr
->
newSelectQueryBuilder
()
->
select
(
[
'old_flags'
,
'old_text'
]
)
->
from
(
'text'
)
->
where
(
[
'old_id'
=>
$this
->
mOldId
]
)
->
caller
(
__METHOD__
)->
fetchRow
();
if
(
!
$row
)
{
return
false
;
}
$flags
=
explode
(
','
,
$row
->
old_flags
);
if
(
in_array
(
'external'
,
$flags
)
)
{
$url
=
$row
->
old_text
;
$parts
=
explode
(
'://'
,
$url
,
2
);
if
(
!
isset
(
$parts
[
1
]
)
||
$parts
[
1
]
==
''
)
{
return
false
;
}
$row
->
old_text
=
MediaWikiServices
::
getInstance
()
->
getExternalStoreAccess
()
->
fetchFromURL
(
$url
);
}
if
(
!
in_array
(
'object'
,
$flags
)
)
{
return
false
;
}
if
(
in_array
(
'gzip'
,
$flags
)
)
{
// This shouldn't happen, but a bug in the compress script
// may at times gzip-compress a HistoryBlob object row.
$obj
=
HistoryBlobUtils
::
unserialize
(
gzinflate
(
$row
->
old_text
),
true
);
}
else
{
$obj
=
HistoryBlobUtils
::
unserialize
(
$row
->
old_text
,
true
);
}
// Save this item for reference; if pulling many
// items in a row we'll likely use it again.
self
::
$blobCache
=
[
$this
->
mOldId
=>
$obj
];
}
if
(
method_exists
(
$obj
,
'getItem'
)
)
{
return
$obj
->
getItem
(
$this
->
mHash
);
}
return
false
;
}
/**
* Get the content hash
*
* @return string
*/
public
function
getHash
()
{
return
$this
->
mHash
;
}
}
// Blobs generated by MediaWiki < 1.5 on PHP 4 were serialized with the
// class name coerced to lowercase. We can improve efficiency by adding
// autoload entries for the lowercase variants of these classes (T166759).
// The code below is never executed, but it is picked up by the AutoloadGenerator
// parser, which scans for class_alias() calls.
/*
class_alias( HistoryBlobStub::class, 'historyblobstub' );
*/
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Wed, Aug 19, 04:49 (17 h, 11 m ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
9c/b7/16b4d8e85f9faf048fbc4d1e06e4
Default Alt Text
HistoryBlobStub.php (3 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment