/**
  * 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;
 }