/** * @return string */ function getText() { $fname = 'HistoryBlobStub::getText'; if (isset(self::$blobCache[$this->mOldId])) { $obj = self::$blobCache[$this->mOldId]; } else { $dbr = wfGetDB(DB_SLAVE); $row = $dbr->selectRow('text', array('old_flags', 'old_text'), array('old_id' => $this->mOldId)); 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] == '') { wfProfileOut($fname); return false; } $row->old_text = ExternalStore::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 = unserialize(gzinflate($row->old_text)); } else { $obj = unserialize($row->old_text); } if (!is_object($obj)) { // Correct for old double-serialization bug. $obj = unserialize($obj); } if (!is_object($obj)) { return false; } // Save this item for reference; if pulling many // items in a row we'll likely use it again. $obj->uncompress(); self::$blobCache = array($this->mOldId => $obj); } return $obj->getItem($this->mHash); }