+ return $pages;
+ }
+
+ private function getPagesFromNamespace( $nsindex ) {
+ global $wgContLang;
+
+ $dbr = wfGetDB( DB_SLAVE );
+ $res = $dbr->select( 'page', array('page_namespace', 'page_title'),
+ array('page_namespace' => $nsindex),
+ __METHOD__, array('LIMIT' => '5000') );
+
+ $pages = array();
+ while ( $row = $dbr->fetchObject( $res ) ) {
+ $n = $row->page_title;
+ if ($row->page_namespace) {
+ $ns = $wgContLang->getNsText( $row->page_namespace );
+ $n = $ns . ':' . $n;
+ }
+
+ $pages[] = $n;
+ }
+ $dbr->freeResult($res);
+
+ return $pages;
+ }
+
+ /**
+ * Expand a list of pages to include templates used in those pages.
+ * @param $inputPages array, list of titles to look up
+ * @param $pageSet array, associative array indexed by titles for output
+ * @return array associative array index by titles
+ */
+ private function getTemplates( $inputPages, $pageSet ) {
+ return $this->getLinks( $inputPages, $pageSet,
+ 'templatelinks',
+ array( 'tl_namespace AS namespace', 'tl_title AS title' ),
+ array( 'page_id=tl_from' ) );
+ }
+
+ /**
+ * Validate link depth setting, if available.
+ */
+ private function validateLinkDepth( $depth ) {
+ global $wgExportMaxLinkDepth, $wgExportMaxLinkDepthLimit;
+ if( $depth < 0 ) {
+ return 0;
+ }
+ if ( !$this->userCanOverrideExportDepth() ) {
+ if( $depth > $wgExportMaxLinkDepth ) {
+ return $wgExportMaxLinkDepth;
+ }
+ }
+ /*
+ * There's a HARD CODED limit of 5 levels of recursion here to prevent a
+ * crazy-big export from being done by someone setting the depth
+ * number too high. In other words, last resort safety net.
+ */
+ return intval( min( $depth, 5 ) );
+ }
+
+ /** Expand a list of pages to include pages linked to from that page. */
+ private function getPageLinks( $inputPages, $pageSet, $depth ) {
+ for( $depth=$depth; $depth>0; --$depth ) {
+ $pageSet = $this->getLinks( $inputPages, $pageSet, 'pagelinks',
+ array( 'pl_namespace AS namespace', 'pl_title AS title' ),
+ array( 'page_id=pl_from' ) );
+ $inputPages = array_keys( $pageSet );
+ }
+ return $pageSet;
+ }
+
+ /**
+ * Expand a list of pages to include images used in those pages.
+ * @param $inputPages array, list of titles to look up
+ * @param $pageSet array, associative array indexed by titles for output
+ * @return array associative array index by titles
+ */
+ private function getImages( $inputPages, $pageSet ) {
+ return $this->getLinks( $inputPages, $pageSet,
+ 'imagelinks',
+ array( NS_FILE . ' AS namespace', 'il_to AS title' ),
+ array( 'page_id=il_from' ) );
+ }
+
+ /**
+ * Expand a list of pages to include items used in those pages.
+ * @private
+ */
+ private function getLinks( $inputPages, $pageSet, $table, $fields, $join ) {
+ $dbr = wfGetDB( DB_SLAVE );
+ foreach( $inputPages as $page ) {
+ $title = Title::newFromText( $page );
+ if( $title ) {
+ $pageSet[$title->getPrefixedText()] = true;
+ /// @todo Fixme: May or may not be more efficient to batch these
+ /// by namespace when given multiple input pages.
+ $result = $dbr->select(
+ array( 'page', $table ),
+ $fields,
+ array_merge( $join,
+ array(
+ 'page_namespace' => $title->getNamespace(),
+ 'page_title' => $title->getDBkey() ) ),
+ __METHOD__ );
+ foreach( $result as $row ) {
+ $template = Title::makeTitle( $row->namespace, $row->title );
+ $pageSet[$template->getPrefixedText()] = true;
+ }
+ }
+ }
+ return $pageSet;