$postHtml, 'metadata' => $metadata ]]; } $allBounties = Post::find(ROOT_DIR . '/posts/bounty'); $allCategories = ['' => ''] + Post::collectMetadata($allBounties, 'category'); $allStatuses = ['' => ''] + array_merge(Post::collectMetadata($allBounties, 'status'), ['complete' => 'unavailable']); $selectedStatus = Request::getParam('status', 'available'); $selectedCategory = Request::getParam('category'); $filters = array_filter([ 'category' => $selectedCategory && isset($allCategories[$selectedCategory]) ? $selectedCategory : null, 'status' => $selectedStatus && isset($allStatuses[$selectedStatus]) ? $selectedStatus : null ]); $bounties = $filters ? Post::filter($allBounties, $filters) : $allBounties; uasort($bounties, function($postA, $postB) { $metadataA = $postA->getMetadata(); $metadataB = $postB->getMetadata(); $awardA = strpos('-', $metadataA['award']) !== false ? rtrim(explode('-', $metadataA['award'])[0], '+') : $metadataA['award']; $awardB = strpos('-', $metadataB['award']) !== false ? rtrim(explode('-', $metadataB['award'])[0], '+') : $metadataB['award']; if ($awardA != $awardB) { return $awardA > $awardB ? -1 : 1; } return $metadataA['title'] < $metadataB['title'] ? -1 : 1; }); return ['bounty/list', [ 'bounties' => $bounties, 'categories' => $allCategories, 'statuses' => $allStatuses, 'selectedCategory' => $selectedCategory, 'selectedStatus' => $selectedStatus ]]; } }