26 use Wikimedia\ScopedCallback;
61 if ( !defined(
'MW_PHPUNIT_TEST' ) ) {
63 'Cannot override ' . __CLASS__ .
'default instance in operation.'
67 MediaWikiServices::getInstance()->redefineService(
69 function () use ( $store ) {
74 return new ScopedCallback(
function () {
75 MediaWikiServices::getInstance()->resetServiceForTesting(
'PageProps' );
83 return MediaWikiServices::getInstance()->getPageProps();
104 if ( $this->cache->getMaxSize() < $size ) {
105 $this->cache->setMaxSize( $size );
128 if ( is_array( $propertyNames ) ) {
131 $propertyNames = [ $propertyNames ];
138 foreach ( $goodIDs as $pageID ) {
139 foreach ( $propertyNames as $propertyName ) {
141 if ( $propertyValue ===
false ) {
142 $queryIDs[] = $pageID;
144 } elseif ( $gotArray ) {
145 $values[$pageID][$propertyName] = $propertyValue;
147 $values[$pageID] = $propertyValue;
154 $result =
$dbr->select(
162 'pp_page' => $queryIDs,
163 'pp_propname' => $propertyNames
168 foreach ( $result as $row ) {
169 $pageID = $row->pp_page;
170 $propertyName = $row->pp_propname;
171 $propertyValue = $row->pp_value;
172 $this->cache->setField( $pageID, $propertyName, $propertyValue );
174 $values[$pageID][$propertyName] = $propertyValue;
176 $values[$pageID] = $propertyValue;
201 foreach ( $goodIDs as $pageID ) {
203 if ( $pageProperties ===
false ) {
204 $queryIDs[] = $pageID;
206 $values[$pageID] = $pageProperties;
210 if ( $queryIDs != [] ) {
212 $result =
$dbr->select(
220 'pp_page' => $queryIDs,
226 $pageProperties = [];
227 foreach ( $result as $row ) {
228 $pageID = $row->pp_page;
229 if ( $currentPageID != $pageID ) {
230 if ( $pageProperties ) {
233 $values[$currentPageID] = $pageProperties;
235 $currentPageID = $pageID;
236 $pageProperties = [];
238 $pageProperties[$row->pp_propname] = $row->pp_value;
240 if ( $pageProperties != [] ) {
242 $values[$pageID] = $pageProperties;
255 if ( is_iterable( $titles ) ) {
256 $this->linkBatchFactory->newLinkBatch( $titles )->execute();
258 foreach ( $titles as
$title ) {
259 $pageID =
$title->getArticleID();
265 $pageID = $titles->getArticleID();
281 if ( $this->cache->hasField( $pageID, $propertyName, self::CACHE_TTL ) ) {
282 return $this->cache->getField( $pageID, $propertyName );
284 if ( $this->cache->hasField( 0, $pageID, self::CACHE_TTL ) ) {
285 $pageProperties = $this->cache->getField( 0, $pageID );
286 if ( isset( $pageProperties[$propertyName] ) ) {
287 return $pageProperties[$propertyName];
300 if ( $this->cache->hasField( 0, $pageID, self::CACHE_TTL ) ) {
301 return $this->cache->getField( 0, $pageID );
313 $this->cache->clear( $pageID );
314 $this->cache->setField( 0, $pageID, $pageProperties );