Started work on subdirectory support

This commit is contained in:
Dan Brown 2016-08-13 17:56:20 +01:00
parent b157a9927a
commit baa260a03d
7 changed files with 32 additions and 21 deletions

View File

@ -11,7 +11,7 @@ class Book extends Entity
*/ */
public function getUrl() public function getUrl()
{ {
return '/books/' . $this->slug; return baseUrl('/books/' . $this->slug);
} }
/* /*

View File

@ -30,7 +30,7 @@ class Chapter extends Entity
public function getUrl() public function getUrl()
{ {
$bookSlug = $this->getAttribute('bookSlug') ? $this->getAttribute('bookSlug') : $this->book->slug; $bookSlug = $this->getAttribute('bookSlug') ? $this->getAttribute('bookSlug') : $this->book->slug;
return '/books/' . $bookSlug. '/chapter/' . $this->slug; return baseUrl('/books/' . $bookSlug. '/chapter/' . $this->slug);
} }
/** /**

View File

@ -63,7 +63,7 @@ class Page extends Entity
$bookSlug = $this->getAttribute('bookSlug') ? $this->getAttribute('bookSlug') : $this->book->slug; $bookSlug = $this->getAttribute('bookSlug') ? $this->getAttribute('bookSlug') : $this->book->slug;
$midText = $this->draft ? '/draft/' : '/page/'; $midText = $this->draft ? '/draft/' : '/page/';
$idComponent = $this->draft ? $this->id : $this->slug; $idComponent = $this->draft ? $this->id : $this->slug;
return '/books/' . $bookSlug . $midText . $idComponent; return baseUrl('/books/' . $bookSlug . $midText . $idComponent);
} }
/** /**

View File

@ -138,8 +138,8 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
*/ */
public function getAvatar($size = 50) public function getAvatar($size = 50)
{ {
if ($this->image_id === 0 || $this->image_id === '0' || $this->image_id === null) return '/user_avatar.png'; if ($this->image_id === 0 || $this->image_id === '0' || $this->image_id === null) return baseUrl('/user_avatar.png');
return $this->avatar->getThumb($size, $size, false); return baseUrl($this->avatar->getThumb($size, $size, false));
} }
/** /**
@ -157,7 +157,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
*/ */
public function getEditUrl() public function getEditUrl()
{ {
return '/settings/users/' . $this->id; return baseUrl('/settings/users/' . $this->id);
} }
/** /**

View File

@ -20,11 +20,11 @@ if (!function_exists('versioned_asset')) {
} }
if (isset($manifest[$file])) { if (isset($manifest[$file])) {
return '/' . $manifest[$file]; return baseUrl($manifest[$file]);
} }
if (file_exists(public_path($file))) { if (file_exists(public_path($file))) {
return '/' . $file; return baseUrl($file);
} }
throw new InvalidArgumentException("File {$file} not defined in asset manifest."); throw new InvalidArgumentException("File {$file} not defined in asset manifest.");
@ -62,6 +62,17 @@ function setting($key, $default = false)
return $settingService->get($key, $default); return $settingService->get($key, $default);
} }
/**
* Helper to create url's relative to the applications root path.
* @param $path
* @return string
*/
function baseUrl($path)
{
$path = trim($path, '/');
return rtrim(config('app.url'), '/') . '/' . $path;
}
/** /**
* Generate a url with multiple parameters for sorting purposes. * Generate a url with multiple parameters for sorting purposes.
* Works out the logic to set the correct sorting direction * Works out the logic to set the correct sorting direction

View File

@ -31,7 +31,7 @@ return [
| |
*/ */
'url' => env('APP_URL', 'http://localhost'), 'url' => env('APP_URL', '') === 'http://bookstack.dev' ? '' : env('APP_URL', ''),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------

View File

@ -11,11 +11,11 @@
<!-- Styles and Fonts --> <!-- Styles and Fonts -->
<link rel="stylesheet" href="{{ versioned_asset('css/styles.css') }}"> <link rel="stylesheet" href="{{ versioned_asset('css/styles.css') }}">
<link rel="stylesheet" media="print" href="{{ versioned_asset('css/print-styles.css') }}"> <link rel="stylesheet" media="print" href="{{ versioned_asset('css/print-styles.css') }}">
<link rel="stylesheet" href="/libs/material-design-iconic-font/css/material-design-iconic-font.min.css"> <link rel="stylesheet" href="{{ baseUrl('/libs/material-design-iconic-font/css/material-design-iconic-font.min.css') }}">
<!-- Scripts --> <!-- Scripts -->
<script src="/libs/jquery/jquery.min.js?version=2.1.4"></script> <script src="{{ baseUrl('/libs/jquery/jquery.min.js?version=2.1.4') }}"></script>
<script src="/libs/jquery/jquery-ui.min.js?version=1.11.4"></script> <script src="{{ baseUrl('/libs/jquery/jquery-ui.min.js?version=1.11.4') }}"></script>
@yield('head') @yield('head')
@ -34,15 +34,15 @@
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-lg-4 col-sm-4" ng-non-bindable> <div class="col-lg-4 col-sm-4" ng-non-bindable>
<a href="/" class="logo"> <a href="{{ baseUrl('/') }}" class="logo">
@if(setting('app-logo', '') !== 'none') @if(setting('app-logo', '') !== 'none')
<img class="logo-image" src="{{ setting('app-logo', '') === '' ? '/logo.png' : setting('app-logo', '') }}" alt="Logo"> <img class="logo-image" src="{{ setting('app-logo', '') === '' ? baseUrl('/logo.png') : baseUrl(setting('app-logo', '')) }}" alt="Logo">
@endif @endif
<span class="logo-text">{{ setting('app-name', 'BookStack') }}</span> <span class="logo-text">{{ setting('app-name', 'BookStack') }}</span>
</a> </a>
</div> </div>
<div class="col-lg-4 col-sm-3 text-center"> <div class="col-lg-4 col-sm-3 text-center">
<form action="/search/all" method="GET" class="search-box"> <form action="{{ baseUrl('/search/all') }}" method="GET" class="search-box">
<input id="header-search-box-input" type="text" name="term" tabindex="2" value="{{ isset($searchTerm) ? $searchTerm : '' }}"> <input id="header-search-box-input" type="text" name="term" tabindex="2" value="{{ isset($searchTerm) ? $searchTerm : '' }}">
<button id="header-search-box-button" type="submit" class="text-button"><i class="zmdi zmdi-search"></i></button> <button id="header-search-box-button" type="submit" class="text-button"><i class="zmdi zmdi-search"></i></button>
</form> </form>
@ -50,12 +50,12 @@
<div class="col-lg-4 col-sm-5"> <div class="col-lg-4 col-sm-5">
<div class="float right"> <div class="float right">
<div class="links text-center"> <div class="links text-center">
<a href="/books"><i class="zmdi zmdi-book"></i>Books</a> <a href="{{ baseUrl('/books') }}"><i class="zmdi zmdi-book"></i>Books</a>
@if(isset($currentUser) && userCan('settings-manage')) @if(isset($currentUser) && userCan('settings-manage'))
<a href="/settings"><i class="zmdi zmdi-settings"></i>Settings</a> <a href="{{ baseUrl('/settings') }}"><i class="zmdi zmdi-settings"></i>Settings</a>
@endif @endif
@if(!isset($signedIn) || !$signedIn) @if(!isset($signedIn) || !$signedIn)
<a href="/login"><i class="zmdi zmdi-sign-in"></i>Sign In</a> <a href="{{ baseUrl('/login') }}"><i class="zmdi zmdi-sign-in"></i>Sign In</a>
@endif @endif
</div> </div>
@if(isset($signedIn) && $signedIn) @if(isset($signedIn) && $signedIn)
@ -66,13 +66,13 @@
</span> </span>
<ul> <ul>
<li> <li>
<a href="/user/{{$currentUser->id}}" class="text-primary"><i class="zmdi zmdi-account zmdi-hc-fw zmdi-hc-lg"></i>View Profile</a> <a href="{{ baseUrl("/user/{$currentUser->id}") }}" class="text-primary"><i class="zmdi zmdi-account zmdi-hc-fw zmdi-hc-lg"></i>View Profile</a>
</li> </li>
<li> <li>
<a href="/settings/users/{{$currentUser->id}}" class="text-primary"><i class="zmdi zmdi-edit zmdi-hc-fw zmdi-hc-lg"></i>Edit Profile</a> <a href="{{ baseUrl("/settings/users/{$currentUser->id}") }}" class="text-primary"><i class="zmdi zmdi-edit zmdi-hc-fw zmdi-hc-lg"></i>Edit Profile</a>
</li> </li>
<li> <li>
<a href="/logout" class="text-neg"><i class="zmdi zmdi-run zmdi-hc-fw zmdi-hc-lg"></i>Logout</a> <a href="{{ baseUrl('/logout') }}" class="text-neg"><i class="zmdi zmdi-run zmdi-hc-fw zmdi-hc-lg"></i>Logout</a>
</li> </li>
</ul> </ul>
</div> </div>