/** * Generate a Collection from api with provided query parameters * @param Array $params to pass to api. * @param models\Collections [$collection] an existing collection to add to * @return models\Collections a collection */ private static function newFromApiParams($params, $collection = null) { $api = new ApiMain(new FauxRequest($params)); $id = isset($params['lstids']) ? $params['lstids'] : -1; try { $api->execute(); $data = $api->getResult()->getResultData(null, array('Strip' => 'all')); // When present is response we override optional parameter if (isset($data['query']['lists'])) { $lists = $data['query']['lists']; if (count($lists) === 1) { $list = $lists[0]; $image = $list['image'] ? wfFindFile($list['image']) : null; $owner = User::newFromName($list['owner']); $collection = new Collection($id, $owner, $list['label'], $list['description'], $list['perm'] === 'public', $image); if ($list['perm'] === 'hidden') { $collection->setHidden(); } } } if ($collection && isset($data['query']['pages'])) { $pages = $data['query']['pages']; foreach ($pages as $page) { $title = Title::newFromText($page['title'], $page['ns']); $pi = false; if (isset($page['pageimage'])) { $pi = wfFindFile($page['pageimage']); } $extract = ''; // See https://phabricator.wikimedia.org/T92673 if (isset($page['extract'])) { $extract = $page['extract']; if (isset($extract['*'])) { $extract = $extract['*']; } } $item = new CollectionItem($title, $pi, $extract); if (isset($page['missing'])) { $item->setMissing(true); } $collection->add($item); } } if (isset($data['continue'])) { $collection->setContinue($data['continue'], $params); } } catch (Exception $e) { // just return collection } return $collection; }