public function processRequest() { $request = $this->getRequest(); $user = $request->getUser(); $applications = PhabricatorApplication::getAllInstalledApplications(); foreach ($applications as $key => $application) { if (!$application->shouldAppearInLaunchView()) { unset($applications[$key]); } } $groups = PhabricatorApplication::getApplicationGroups(); $applications = msort($applications, 'getApplicationOrder'); $applications = mgroup($applications, 'getApplicationGroup'); $applications = array_select_keys($applications, array_keys($groups)); $view = array(); foreach ($applications as $group => $application_list) { $status = array(); foreach ($application_list as $key => $application) { $status[$key] = $application->loadStatus($user); } $views = array(); foreach ($application_list as $key => $application) { $views[] = id(new PhabricatorApplicationLaunchView())->setApplication($application)->setApplicationStatus(idx($status, $key, array()))->setUser($user); } $view[] = id(new PhabricatorHeaderView())->setHeader($groups[$group]); $view[] = phutil_render_tag('div', array('class' => 'phabricator-application-list'), id(new AphrontNullView())->appendChild($views)->render()); } return $this->buildApplicationPage($view, array('title' => 'Applications', 'device' => true)); }
protected function renderResultList(array $all_applications, PhabricatorSavedQuery $query, array $handle) { assert_instances_of($all_applications, 'PhabricatorApplication'); $all_applications = msort($all_applications, 'getName'); if ($query->getQueryKey() == 'launcher') { $groups = mgroup($all_applications, 'getApplicationGroup'); } else { $groups = array($all_applications); } $group_names = PhabricatorApplication::getApplicationGroups(); $groups = array_select_keys($groups, array_keys($group_names)) + $groups; $results = array(); foreach ($groups as $group => $applications) { if (count($groups) > 1) { $results[] = phutil_tag('h1', array('class' => 'launcher-header'), idx($group_names, $group, $group)); } $list = new PHUIObjectItemListView(); $list->addClass('phui-object-item-launcher-list'); foreach ($applications as $application) { $icon = $application->getIconName(); if (!$icon) { $icon = 'application'; } // TODO: This sheet doesn't work the same way other sheets do so it // ends up with the wrong classes if we try to use PHUIIconView. This // is probably all changing in the redesign anyway. $icon_view = javelin_tag('span', array('class' => 'phui-icon-view ' . 'sprite-apps-large apps-' . $icon . '-dark-large', 'aural' => false), ''); $description = phutil_tag('div', array('style' => 'white-space: nowrap; ' . 'overflow: hidden; ' . 'text-overflow: ellipsis;'), $application->getShortDescription()); $item = id(new PHUIObjectItemView())->setHeader($application->getName())->setImageIcon($icon_view)->addAttribute($description)->addAction(id(new PHUIListItemView())->setName(pht('Help/Options'))->setIcon('fa-cog')->setHref('/applications/view/' . get_class($application) . '/')); if ($application->getBaseURI()) { $item->setHref($application->getBaseURI()); } if (!$application->isInstalled()) { $item->addIcon('fa-times', pht('Uninstalled')); } if ($application->isBeta()) { $item->addIcon('fa-star-half-o grey', pht('Beta')); } if (!$application->isFirstParty()) { $item->addIcon('fa-puzzle-piece', pht('Extension')); } $list->addItem($item); } $results[] = $list; } return $results; }
protected function renderResultList(array $all_applications, PhabricatorSavedQuery $query, array $handle) { assert_instances_of($all_applications, 'PhabricatorApplication'); $all_applications = msort($all_applications, 'getName'); if ($query->getQueryKey() == 'launcher') { $groups = mgroup($all_applications, 'getApplicationGroup'); } else { $groups = array($all_applications); } $group_names = PhabricatorApplication::getApplicationGroups(); $groups = array_select_keys($groups, array_keys($group_names)) + $groups; $results = array(); foreach ($groups as $group => $applications) { if (count($groups) > 1) { $results[] = phutil_tag('h1', array('class' => 'phui-object-item-list-header'), idx($group_names, $group, $group)); } $list = new PHUIObjectItemListView(); foreach ($applications as $application) { $icon = $application->getFontIcon(); if (!$icon) { $icon = 'application'; } // TODO: This sheet doesn't work the same way other sheets do so it // ends up with the wrong classes if we try to use PHUIIconView. This // is probably all changing in the redesign anyway. $icon_view = javelin_tag('span', array('class' => 'phui-icon-view phui-font-fa ' . $icon, 'aural' => false), ''); $description = $application->getShortDescription(); $configure = id(new PHUIButtonView())->setTag('a')->setHref('/applications/view/' . get_class($application) . '/')->setText(pht('Configure'))->setColor(PHUIButtonView::GREY); $name = $application->getName(); if ($application->isPrototype()) { $name = $name . ' ' . pht('(Prototype)'); } $item = id(new PHUIObjectItemView())->setHeader($name)->setImageIcon($icon_view)->setSubhead($description)->setLaunchButton($configure); if ($application->getBaseURI() && $application->isInstalled()) { $item->setHref($application->getBaseURI()); } if (!$application->isInstalled()) { $item->addAttribute(pht('Uninstalled')); $item->setDisabled(true); } if (!$application->isFirstParty()) { $item->addAttribute(pht('Extension')); } $list->addItem($item); } $results[] = $list; } $result = new PhabricatorApplicationSearchResultView(); $result->setContent($results); return $result; }
protected function renderResultList(array $all_applications, PhabricatorSavedQuery $query, array $handle) { assert_instances_of($all_applications, 'PhabricatorApplication'); $all_applications = msort($all_applications, 'getName'); if ($query->getQueryKey() == 'launcher') { $groups = mgroup($all_applications, 'getApplicationGroup'); } else { $groups = array($all_applications); } $group_names = PhabricatorApplication::getApplicationGroups(); $groups = array_select_keys($groups, array_keys($group_names)) + $groups; $results = array(); foreach ($groups as $group => $applications) { if (count($groups) > 1) { $results[] = phutil_tag('h1', array('class' => 'phui-object-item-list-header'), idx($group_names, $group, $group)); } $list = new PHUIObjectItemListView(); foreach ($applications as $application) { $icon = $application->getIcon(); if (!$icon) { $icon = 'application'; } $description = $application->getShortDescription(); $configure = id(new PHUIButtonView())->setTag('a')->setHref('/applications/view/' . get_class($application) . '/')->setText(pht('Configure'))->setColor(PHUIButtonView::GREY); $name = $application->getName(); if ($application->isPrototype()) { $name = $name . ' ' . pht('(Prototype)'); } $item = id(new PHUIObjectItemView())->setHeader($name)->setImageIcon($icon)->setSubhead($description)->setLaunchButton($configure); if ($application->getBaseURI() && $application->isInstalled()) { $item->setHref($application->getBaseURI()); } if (!$application->isInstalled()) { $item->addAttribute(pht('Uninstalled')); $item->setDisabled(true); } if (!$application->isFirstParty()) { $item->addAttribute(pht('Extension')); } $list->addItem($item); } $results[] = $list; } $result = new PhabricatorApplicationSearchResultView(); $result->setContent($results); return $result; }