MediaWiki REL1_33
LinkBatch.php
Go to the documentation of this file.
1<?php
27
34class LinkBatch {
38 public $data = [];
39
43 protected $caller;
44
48 public function __construct( $arr = [] ) {
49 foreach ( $arr as $item ) {
50 $this->addObj( $item );
51 }
52 }
53
62 public function setCaller( $caller ) {
63 $this->caller = $caller;
64
65 return $this;
66 }
67
71 public function addObj( $linkTarget ) {
72 if ( is_object( $linkTarget ) ) {
73 $this->add( $linkTarget->getNamespace(), $linkTarget->getDBkey() );
74 } else {
75 wfDebug( "Warning: LinkBatch::addObj got invalid LinkTarget object\n" );
76 }
77 }
78
83 public function add( $ns, $dbkey ) {
84 if ( $ns < 0 || $dbkey === '' ) {
85 return; // T137083
86 }
87 if ( !array_key_exists( $ns, $this->data ) ) {
88 $this->data[$ns] = [];
89 }
90
91 $this->data[$ns][strtr( $dbkey, ' ', '_' )] = 1;
92 }
93
100 public function setArray( $array ) {
101 $this->data = $array;
102 }
103
109 public function isEmpty() {
110 return $this->getSize() == 0;
111 }
112
118 public function getSize() {
119 return count( $this->data );
120 }
121
127 public function execute() {
128 $linkCache = MediaWikiServices::getInstance()->getLinkCache();
129
130 return $this->executeInto( $linkCache );
131 }
132
140 protected function executeInto( &$cache ) {
141 $res = $this->doQuery();
142 $this->doGenderQuery();
143 $ids = $this->addResultToCache( $cache, $res );
144
145 return $ids;
146 }
147
158 public function addResultToCache( $cache, $res ) {
159 if ( !$res ) {
160 return [];
161 }
162
163 $titleFormatter = MediaWikiServices::getInstance()->getTitleFormatter();
164 // For each returned entry, add it to the list of good links, and remove it from $remaining
165
166 $ids = [];
167 $remaining = $this->data;
168 foreach ( $res as $row ) {
169 $title = new TitleValue( (int)$row->page_namespace, $row->page_title );
170 $cache->addGoodLinkObjFromRow( $title, $row );
171 $pdbk = $titleFormatter->getPrefixedDBkey( $title );
172 $ids[$pdbk] = $row->page_id;
173 unset( $remaining[$row->page_namespace][$row->page_title] );
174 }
175
176 // The remaining links in $data are bad links, register them as such
177 foreach ( $remaining as $ns => $dbkeys ) {
178 foreach ( $dbkeys as $dbkey => $unused ) {
179 $title = new TitleValue( (int)$ns, (string)$dbkey );
180 $cache->addBadLinkObj( $title );
181 $pdbk = $titleFormatter->getPrefixedDBkey( $title );
182 $ids[$pdbk] = 0;
183 }
184 }
185
186 return $ids;
187 }
188
193 public function doQuery() {
194 if ( $this->isEmpty() ) {
195 return false;
196 }
197
198 // This is similar to LinkHolderArray::replaceInternal
200 $table = 'page';
201 $fields = array_merge(
202 LinkCache::getSelectFields(),
203 [ 'page_namespace', 'page_title' ]
204 );
205
206 $conds = $this->constructSet( 'page', $dbr );
207
208 // Do query
210 if ( strval( $this->caller ) !== '' ) {
211 $caller .= " (for {$this->caller})";
212 }
213 $res = $dbr->select( $table, $fields, $conds, $caller );
214
215 return $res;
216 }
217
223 public function doGenderQuery() {
224 if ( $this->isEmpty() ) {
225 return false;
226 }
227 $services = MediaWikiServices::getInstance();
228
229 if ( !$services->getContentLanguage()->needsGenderDistinction() ) {
230 return false;
231 }
232
233 $genderCache = $services->getGenderCache();
234 $genderCache->doLinkBatch( $this->data, $this->caller );
235
236 return true;
237 }
238
246 public function constructSet( $prefix, $db ) {
247 return $db->makeWhereFrom2d( $this->data, "{$prefix}_namespace", "{$prefix}_title" );
248 }
249}
and that you know you can do these things To protect your we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights These restrictions translate to certain responsibilities for you if you distribute copies of the or if you modify it For if you distribute copies of such a whether gratis or for a you must give the recipients all the rights that you have You must make sure that receive or can get the source code And you must show them these terms so they know their rights We protect your rights with two and(2) offer you this license which gives you legal permission to copy
wfDebug( $text, $dest='all', array $context=[])
Sends a line to the debug log if enabled or, optionally, to a comment in output.
wfGetDB( $db, $groups=[], $wiki=false)
Get a Database object.
Class representing a list of titles The execute() method checks them all for existence and adds them ...
Definition LinkBatch.php:34
doGenderQuery()
Do (and cache) {{GENDER:...}} information for userpages in this LinkBatch.
add( $ns, $dbkey)
Definition LinkBatch.php:83
$data
2-d array, first index namespace, second index dbkey, value arbitrary
Definition LinkBatch.php:38
getSize()
Returns the size of the batch.
__construct( $arr=[])
Definition LinkBatch.php:48
addResultToCache( $cache, $res)
Add a ResultWrapper containing IDs and titles to a LinkCache object.
$caller
For debugging which method is using this class.
Definition LinkBatch.php:43
isEmpty()
Returns true if no pages have been added, false otherwise.
setCaller( $caller)
Use ->setCaller( METHOD ) to indicate which code is using this class.
Definition LinkBatch.php:62
constructSet( $prefix, $db)
Construct a WHERE clause which will match all the given titles.
execute()
Do the query and add the results to the LinkCache object.
setArray( $array)
Set the link list to a given 2-d array First key is the namespace, second is the DB key,...
executeInto(&$cache)
Do the query and add the results to a given LinkCache object Return an array mapping PDBK to ID.
addObj( $linkTarget)
Definition LinkBatch.php:71
doQuery()
Perform the existence test query, return a ResultWrapper with page_id fields.
MediaWikiServices is the service locator for the application scope of MediaWiki.
Represents a page (or page fragment) title within MediaWiki.
Result wrapper for grabbing data queried from an IDatabase object.
$res
Definition database.txt:21
An extension or a local will often add custom code to the function with or without a global variable For someone wanting email notification when an article is shown may add
Definition hooks.txt:56
static configuration should be added through ResourceLoaderGetConfigVars instead can be used to get the real title e g db for database replication lag or jobqueue for job queue size converted to pseudo seconds It is possible to add more fields and they will be returned to the user in the API response after the basic globals have been set but before ordinary actions take place or wrap services the preferred way to define a new service is the $wgServiceWiringFiles array $services
Definition hooks.txt:2290
Basic database interface for live and lazy-loaded relation database handles.
Definition IDatabase.php:38
$cache
Definition mcc.php:33
const DB_REPLICA
Definition defines.php:25