/**
  * Initialize all query page objects
  */
 function __construct()
 {
     parent::__construct();
     foreach (QueryPage::getPages() as $page) {
         $class = $page[0];
         if (!in_array($class, $this->manualTest)) {
             $this->queryPages[$class] = new $class();
         }
     }
 }
 public function __construct(ApiQuery $query, $moduleName)
 {
     parent::__construct($query, $moduleName, 'qp');
     // Build mapping from special page names to QueryPage classes
     $uselessQueryPages = $this->getConfig()->get('APIUselessQueryPages');
     $this->qpMap = array();
     foreach (QueryPage::getPages() as $page) {
         if (!in_array($page[1], $uselessQueryPages)) {
             $this->qpMap[$page[1]] = $page[0];
         }
     }
 }
 public function execute()
 {
     global $wgQueryCacheLimit, $wgDisableQueryPageUpdate;
     $dbw = $this->getDB(DB_MASTER);
     $this->doSpecialPageCacheUpdates($dbw);
     foreach (QueryPage::getPages() as $page) {
         list($class, $special) = $page;
         $limit = isset($page[2]) ? $page[2] : null;
         # --list : just show the name of pages
         if ($this->hasOption('list')) {
             $this->output("{$special} [QueryPage]\n");
             continue;
         }
         if (!$this->hasOption('override') && $wgDisableQueryPageUpdate && in_array($special, $wgDisableQueryPageUpdate)) {
             $this->output(sprintf("%-30s [QueryPage] disabled\n", $special));
             continue;
         }
         $specialObj = SpecialPageFactory::getPage($special);
         if (!$specialObj) {
             $this->output("No such special page: {$special}\n");
             exit;
         }
         if ($specialObj instanceof QueryPage) {
             $queryPage = $specialObj;
         } else {
             $class = get_class($specialObj);
             $this->error("{$class} is not an instance of QueryPage.\n", 1);
             die;
         }
         if (!$this->hasOption('only') || $this->getOption('only') == $queryPage->getName()) {
             $this->output(sprintf('%-30s [QueryPage] ', $special));
             if ($queryPage->isExpensive()) {
                 $t1 = microtime(true);
                 # Do the query
                 $num = $queryPage->recache($limit === null ? $wgQueryCacheLimit : $limit);
                 $t2 = microtime(true);
                 if ($num === false) {
                     $this->output("FAILED: database error\n");
                 } else {
                     $this->output("got {$num} rows in ");
                     $elapsed = $t2 - $t1;
                     $hours = intval($elapsed / 3600);
                     $minutes = intval($elapsed % 3600 / 60);
                     $seconds = $elapsed - $hours * 3600 - $minutes * 60;
                     if ($hours) {
                         $this->output($hours . 'h ');
                     }
                     if ($minutes) {
                         $this->output($minutes . 'm ');
                     }
                     $this->output(sprintf("%.2fs\n", $seconds));
                 }
                 # Reopen any connections that have closed
                 if (!wfGetLB()->pingAll()) {
                     $this->output("\n");
                     do {
                         $this->error("Connection failed, reconnecting in 10 seconds...");
                         sleep(10);
                     } while (!wfGetLB()->pingAll());
                     $this->output("Reconnected\n\n");
                 }
                 # Wait for the slave to catch up
                 wfWaitForSlaves();
             } else {
                 $this->output("cheap, skipped\n");
             }
             if ($this->hasOption('only')) {
                 break;
             }
         }
     }
 }