New help thing.

This commit is contained in:
James Cole
2016-10-23 17:33:53 +02:00
parent 19e9f382e4
commit 48b0620629
5 changed files with 49 additions and 67 deletions

View File

@@ -26,47 +26,39 @@ class Help implements HelpInterface
{ {
/** /**
* * @param string $route
* @param string $key * @param string $language
* *
* @return string * @return string
*/ */
public function getFromCache(string $key): string public function getFromCache(string $route, string $language): string
{ {
return Cache::get($key); return Cache::get('help.' . $route . '.' . $language);
} }
/** /**
* @param string $language * @param string $language
* @param string $route * @param string $route
* *
* @return array * @return string
*/ */
public function getFromGithub(string $language, string $route): array public function getFromGithub(string $language, string $route): string
{ {
$uri = sprintf('https://raw.githubusercontent.com/JC5/firefly-iii-help/master/%s/%s.md', $language, $route); $uri = sprintf('https://raw.githubusercontent.com/firefly-iii/help/master/%s/%s.md', $language, $route);
$routeIndex = str_replace('.', '-', $route); $content = '<p>' . strval(trans('firefly.route_has_no_help')) . '</p>';
$title = trans('help.' . $routeIndex); $result = Requests::get($uri);
$content = [
'text' => '<p>' . strval(trans('firefly.route_has_no_help')) . '</p>',
'title' => $title,
];
$result = Requests::get($uri);
if ($result->status_code === 200) { if ($result->status_code === 200) {
$content['text'] = $result->body; $content = $result->body;
} }
if (strlen(trim($content['text'])) == 0) { if (strlen(trim($content)) == 0) {
$content['text'] = '<p>' . strval(trans('firefly.route_has_no_help')) . '</p>'; $content = '<p>' . strval(trans('firefly.route_has_no_help')) . '</p>';
} }
$converter = new CommonMarkConverter(); $converter = new CommonMarkConverter();
$content['text'] = $converter->convertToHtml($content['text']); $content = $converter->convertToHtml($content);
return $content; return $content;
@@ -84,27 +76,26 @@ class Help implements HelpInterface
} }
/** /**
*
* @param string $route * @param string $route
* @param string $language
* *
* @return bool * @return bool
*/ */
public function inCache(string $route):bool public function inCache(string $route, string $language):bool
{ {
return Cache::has('help.' . $route . '.title') && Cache::has('help.' . $route . '.text'); return Cache::has('help.' . $route . '.' . $language);
} }
/** /**
* *
* @param string $route * @param string $route
* @param string $language * @param string $language
* @param array $content * @param string $content
* *
* @internal param $title * @internal param $title
*/ */
public function putInCache(string $route, string $language, array $content) public function putInCache(string $route, string $language, string $content)
{ {
Cache::put('help.' . $route . '.text.' . $language, $content['text'], 10080); // a week. Cache::put('help.' . $route . '.' . $language, $content, 10080); // a week.
Cache::put('help.' . $route . '.title.' . $language, $content['title'], 10080);
} }
} }

View File

@@ -21,19 +21,20 @@ interface HelpInterface
{ {
/** /**
* @param string $key * @param string $route
* @param string $language
* *
* @return string * @return string
*/ */
public function getFromCache(string $key): string; public function getFromCache(string $route, string $language): string;
/** /**
* @param string $language * @param string $language
* @param string $route * @param string $route
* *
* @return array * @return string
*/ */
public function getFromGithub(string $language, string $route):array; public function getFromGithub(string $language, string $route):string;
/** /**
* @param string $route * @param string $route
@@ -44,15 +45,16 @@ interface HelpInterface
/** /**
* @param string $route * @param string $route
* @param string $language
* *
* @return bool * @return bool
*/ */
public function inCache(string $route): bool; public function inCache(string $route, string $language ): bool;
/** /**
* @param string $route * @param string $route
* @param string $language * @param string $language
* @param array $content * @param string $content
*/ */
public function putInCache(string $route, string $language, array $content); public function putInCache(string $route, string $language, string $content);
} }

View File

@@ -41,11 +41,9 @@ class HelpController extends Controller
*/ */
public function show(HelpInterface $help, string $route) public function show(HelpInterface $help, string $route)
{ {
$language = Preferences::get('language', config('firefly.default_language', 'en_US'))->data; $language = Preferences::get('language', config('firefly.default_language', 'en_US'))->data;
$content = [ $content = '<p>' . strval(trans('firefly.route_has_no_help')) . '</p>';
'text' => '<p>' . strval(trans('firefly.route_has_no_help')) . '</p>',
'title' => 'Help',
];
if (!$help->hasRoute($route)) { if (!$help->hasRoute($route)) {
Log::error('No such route: ' . $route); Log::error('No such route: ' . $route);
@@ -53,11 +51,9 @@ class HelpController extends Controller
return Response::json($content); return Response::json($content);
} }
if ($help->inCache($route)) { if ($help->inCache($route, $language)) {
$content = [ $content = $help->getFromCache($route, $language);
'text' => $help->getFromCache('help.' . $route . '.text.' . $language), Log::debug('Help text was in cache.');
'title' => $help->getFromCache('help.' . $route . '.title.' . $language),
];
return Response::json($content); return Response::json($content);
} }

View File

@@ -164,36 +164,29 @@ class HomeController extends Controller
public function routes() public function routes()
{ {
// these routes are not relevant for the help pages: // these routes are not relevant for the help pages:
$ignore = [ $ignore = ['login', 'registe', 'logout', 'two-fac', 'lost-two', 'confirm', 'resend', 'do_confirm', 'testFla', 'json.', 'piggy-banks.add',
'piggy-banks.remove', 'preferences.', 'rules.rule.up', 'rules.rule.down', 'rules.rule-group.up', 'rules.rule-group.down', 'popup.report',
'admin.users.domains.block-','import.json','help.'
]; ];
$routes = Route::getRoutes(); $routes = Route::getRoutes();
echo '<pre>';
/** @var \Illuminate\Routing\Route $route */ /** @var \Illuminate\Routing\Route $route */
foreach ($routes as $route) { foreach ($routes as $route) {
$name = $route->getName(); $name = $route->getName();
$methods = $route->getMethods(); $methods = $route->getMethods();
$search = [
'{account}', '{what}', '{rule}', '{tj}', '{category}', '{budget}', '{code}', '{date}', '{attachment}', '{bill}', '{limitrepetition}',
'{currency}', '{jobKey}', '{piggyBank}', '{ruleGroup}', '{rule}', '{route}', '{unfinishedJournal}',
'{reportType}', '{start_date}', '{end_date}', '{accountList}', '{tag}', '{journalList}',
]; if (!is_null($name) && strlen($name) > 0 && in_array('GET', $methods) && !$this->startsWithAny($ignore, $name)) {
$replace = [1, 'asset', 1, 1, 1, 1, 'abc', '2016-01-01', 1, 1, 1, 1, 1, 1, 1, 1, 'index', 1, echo sprintf('touch %s.md', $name)."\n";
'default', '20160101', '20160131', '1,2', 1, '1,2',
];
if (count($search) != count($replace)) {
echo 'count';
exit;
}
$url = str_replace($search, $replace, $route->getUri());
if (!is_null($name) && in_array('GET', $methods) && !$this->startsWithAny($ignore, $name)) {
echo '<a href="/' . $url . '" title="' . $name . '">' . $name . '</a><br>' . "\n";
} }
} }
echo '</pre>';
return '<hr>'; echo '<hr />';
return '&nbsp;';
} }
/** /**

View File

@@ -16,12 +16,12 @@ function showHelp(e) {
$('#helpTitle').html('Please hold...'); $('#helpTitle').html('Please hold...');
$('#helpModal').modal('show'); $('#helpModal').modal('show');
$('#helpTitle').html('Help for this page');
$.getJSON('help/' + encodeURI(route)).done(function (data) { $.getJSON('help/' + encodeURI(route)).done(function (data) {
$('#helpBody').html(data.text); $('#helpBody').html(data);
$('#helpTitle').html(data.title);
}).fail(function () { }).fail(function () {
$('#helpBody').html('<p class="text-danger">No help text could be found.</p>'); $('#helpBody').html('<p class="text-danger">No help text could be found.</p>');
$('#helpTitle').html('Sorry...'); $('#helpTitle').html('Apologies');
}); });
return false; return false;
} }