1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-19 13:22:42 +01:00

Improve 404 behavior for new Diviner

Summary:
Ref T988. When the user clicks a link we haven't explicitly resolved before, we send them to the `/find/` endpoint, but currently just 404 if we can't find the relevant documentation.

Instead, display a more user-friendly error message, since we're probably going to have some of these. Also, make the page title much worse.

Test Plan: Hit a 404 via `/find/`, got a nicer page.

Reviewers: chad, btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T988

Differential Revision: https://secure.phabricator.com/D8408
This commit is contained in:
epriestley 2014-03-05 12:07:39 -08:00
parent 03abde0b25
commit feac35a0fd

View file

@ -11,6 +11,7 @@ final class DivinerFindController extends DivinerController {
$viewer = $request->getUser(); $viewer = $request->getUser();
$book_name = $request->getStr('book'); $book_name = $request->getStr('book');
$query_text = $request->getStr('name');
$book = null; $book = null;
if ($book_name) { if ($book_name) {
@ -44,22 +45,33 @@ final class DivinerFindController extends DivinerController {
$name_query->withNames( $name_query->withNames(
array( array(
$request->getStr('name'), $query_text,
// TODO: This could probably be more smartly normalized in the DB, // TODO: This could probably be more smartly normalized in the DB,
// but just fake it for now. // but just fake it for now.
phutil_utf8_strtolower($request->getStr('name')), phutil_utf8_strtolower($query_text),
)); ));
$atoms = $name_query->execute(); $atoms = $name_query->execute();
if (!$atoms) { if (!$atoms) {
$title_query = clone $query; $title_query = clone $query;
$title_query->withTitles(array($request->getStr('name'))); $title_query->withTitles(array($query_text));
$atoms = $title_query->execute(); $atoms = $title_query->execute();
} }
$not_found_uri = $this->getApplicationURI();
if (!$atoms) { if (!$atoms) {
return new Aphront404Response(); $dialog = id(new AphrontDialogView())
->setUser($viewer)
->setTitle(pht('Documentation Not Found'))
->appendChild(
pht(
'Unable to find the specified documentation. You may have '.
'followed a bad or outdated link.'))
->addCancelButton($not_found_uri, pht('Read More Documentation'));
return id(new AphrontDialogResponse())->setDialog($dialog);
} }
if (count($atoms) == 1 && $request->getBool('jump')) { if (count($atoms) == 1 && $request->getBool('jump')) {
@ -72,7 +84,7 @@ final class DivinerFindController extends DivinerController {
return $this->buildApplicationPage( return $this->buildApplicationPage(
$list, $list,
array( array(
'title' => 'derp', 'title' => array(pht('Find'), pht('"%s"', $query_text)),
'device' => true, 'device' => true,
)); ));
} }