/** * Generate UserPageCollectionsList from api result * @param User $user collection list owner (currently ignored) * @param boolean [$includePrivate] if the list should show private collections or not * @param string|boolean [$memberTitle] title of member to check for * @param array [$params] generate collection list with additional api parameters * @param string [$mode] listing mode (public/private/review) * @param integer [$limit] of number of collections to show * @return models\CollectionsList List of collections. */ public static function newFromApi($user = null, $includePrivate = false, $memberTitle = false, $params = array(), $mode = null, $limit = 50) { $collectionsList = new CollectionsList($user, $includePrivate); $query = array_merge($params, array('action' => 'query', 'list' => 'lists', 'lstprop' => 'label|description|public|image|count|updated|owner', 'lstlimit' => $limit, 'continue' => '')); if ($memberTitle) { $query['lsttitle'] = $memberTitle; } if ($user) { $query['lstowner'] = $user->getName(); } if ($mode) { $query['lstmode'] = $mode === 'review' ? $mode : "all{$mode}"; } else { $mode = ''; } $api = new ApiMain(new FauxRequest($query)); $api->execute(); $data = $api->getResult()->getResultData(null, array('Strip' => 'all')); if (isset($data['query']['lists'])) { $lists = $data['query']['lists']; foreach ($lists as $list) { $public = $list['perm'] === 'public'; if ($public || $includePrivate) { $image = isset($list['image']) ? wfFindFile($list['image']) : false; $info = new models\CollectionInfo($list['id'], User::newFromName($list['owner']), $list['label'], $list['description'], $public, $image); $info->setCount($list['count']); $info->setUpdated($list['updated']); if ($list['perm'] === 'hidden') { $info->setHidden(); } if ($memberTitle) { $info->setMember($memberTitle, $list['title']); } $collectionsList->add($info); } } } if (isset($data['continue'])) { $collectionsList->setContinueQueryString($data['continue'], $mode); } return $collectionsList; }