Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Зуев Егор
/
wiki.dev
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
Authored by
Dan Brown
2015-11-26 23:45:04 +0000
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Commit
22f8a408fa127818856f2e071c5e83a43ab672c0
22f8a408
1 parent
3825ea8c
Added indexes, Reduced queries on pages
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
319 additions
and
48 deletions
.gitignore
app/Book.php
app/Chapter.php
app/Http/Controllers/BookController.php
app/Http/Controllers/ChapterController.php
app/Http/Controllers/PageController.php
app/Page.php
app/Repos/BookRepo.php
app/User.php
composer.json
composer.lock
config/app.php
database/factories/ModelFactory.php
database/migrations/2015_11_26_221857_add_entity_indexes.php
database/seeds/DummyContentSeeder.php
resources/views/books/show.blade.php
resources/views/chapters/show.blade.php
resources/views/pages/show.blade.php
resources/views/pages/sidebar-tree-list.blade.php
.gitignore
View file @
22f8a40
...
...
@@ -11,4 +11,5 @@ Homestead.yaml
/public/bower
/public/build
/storage/images
_ide_helper.php
\ No newline at end of file
_ide_helper.php
/storage/debugbar
\ No newline at end of file
...
...
app/Book.php
View file @
22f8a40
...
...
@@ -27,16 +27,6 @@ class Book extends Entity
return
$this
->
hasMany
(
'BookStack\Chapter'
);
}
public
function
children
()
{
$pages
=
$this
->
pages
()
->
where
(
'chapter_id'
,
'='
,
0
)
->
get
();
$chapters
=
$this
->
chapters
()
->
get
();
foreach
(
$chapters
as
$chapter
)
{
$pages
->
push
(
$chapter
);
}
return
$pages
->
sortBy
(
'priority'
);
}
public
function
getExcerpt
(
$length
=
100
)
{
return
strlen
(
$this
->
description
)
>
$length
?
substr
(
$this
->
description
,
0
,
$length
-
3
)
.
'...'
:
$this
->
description
;
...
...
app/Chapter.php
View file @
22f8a40
...
...
@@ -18,7 +18,8 @@ class Chapter extends Entity
public
function
getUrl
()
{
return
'/books/'
.
$this
->
book
->
slug
.
'/chapter/'
.
$this
->
slug
;
$bookSlug
=
isset
(
$this
->
bookSlug
)
?
$this
->
bookSlug
:
$this
->
book
->
slug
;
return
'/books/'
.
$bookSlug
.
'/chapter/'
.
$this
->
slug
;
}
public
function
getExcerpt
(
$length
=
100
)
...
...
app/Http/Controllers/BookController.php
View file @
22f8a40
...
...
@@ -89,7 +89,8 @@ class BookController extends Controller
{
$book
=
$this
->
bookRepo
->
getBySlug
(
$slug
);
Views
::
add
(
$book
);
return
view
(
'books/show'
,
[
'book'
=>
$book
,
'current'
=>
$book
]);
$bookChildren
=
$this
->
bookRepo
->
getChildren
(
$book
);
return
view
(
'books/show'
,
[
'book'
=>
$book
,
'current'
=>
$book
,
'bookChildren'
=>
$bookChildren
]);
}
/**
...
...
app/Http/Controllers/ChapterController.php
View file @
22f8a40
...
...
@@ -80,8 +80,9 @@ class ChapterController extends Controller
{
$book
=
$this
->
bookRepo
->
getBySlug
(
$bookSlug
);
$chapter
=
$this
->
chapterRepo
->
getBySlug
(
$chapterSlug
,
$book
->
id
);
$sidebarTree
=
$this
->
bookRepo
->
getChildren
(
$book
);
Views
::
add
(
$chapter
);
return
view
(
'chapters/show'
,
[
'book'
=>
$book
,
'chapter'
=>
$chapter
,
'current'
=>
$chapter
]);
return
view
(
'chapters/show'
,
[
'book'
=>
$book
,
'chapter'
=>
$chapter
,
'current'
=>
$chapter
,
'sidebarTree'
=>
$sidebarTree
]);
}
/**
...
...
app/Http/Controllers/PageController.php
View file @
22f8a40
...
...
@@ -87,8 +87,9 @@ class PageController extends Controller
{
$book
=
$this
->
bookRepo
->
getBySlug
(
$bookSlug
);
$page
=
$this
->
pageRepo
->
getBySlug
(
$pageSlug
,
$book
->
id
);
$sidebarTree
=
$this
->
bookRepo
->
getChildren
(
$book
);
Views
::
add
(
$page
);
return
view
(
'pages/show'
,
[
'page'
=>
$page
,
'book'
=>
$book
,
'current'
=>
$page
]);
return
view
(
'pages/show'
,
[
'page'
=>
$page
,
'book'
=>
$book
,
'current'
=>
$page
,
'sidebarTree'
=>
$sidebarTree
]);
}
/**
...
...
app/Page.php
View file @
22f8a40
...
...
@@ -40,7 +40,9 @@ class Page extends Entity
public
function
getUrl
()
{
return
'/books/'
.
$this
->
book
->
slug
.
'/page/'
.
$this
->
slug
;
// TODO - Extract this and share with chapters
$bookSlug
=
$this
->
getAttribute
(
'bookSlug'
)
?
$this
->
getAttribute
(
'bookSlug'
)
:
$this
->
book
->
slug
;
return
'/books/'
.
$bookSlug
.
'/page/'
.
$this
->
slug
;
}
public
function
getExcerpt
(
$length
=
100
)
...
...
app/Repos/BookRepo.php
View file @
22f8a40
...
...
@@ -179,6 +179,30 @@ class BookRepo
}
/**
* Get all child objects of a book.
* Returns a sorted collection of Pages and Chapters.
* Loads the bookslug onto child elements to prevent access database access for getting the slug.
* @param Book $book
* @return mixed
*/
public
function
getChildren
(
Book
$book
)
{
$pages
=
$book
->
pages
()
->
where
(
'chapter_id'
,
'='
,
0
)
->
get
();
$chapters
=
$book
->
chapters
()
->
with
(
'pages'
)
->
get
();
$children
=
$pages
->
merge
(
$chapters
);
$bookSlug
=
$book
->
slug
;
$children
->
each
(
function
(
$child
)
use
(
$bookSlug
)
{
$child
->
setAttribute
(
'bookSlug'
,
$bookSlug
);
if
(
$child
->
isA
(
'chapter'
))
{
$child
->
pages
->
each
(
function
(
$page
)
use
(
$bookSlug
)
{
$page
->
setAttribute
(
'bookSlug'
,
$bookSlug
);
});
}
});
return
$children
->
sortBy
(
'priority'
);
}
/**
* Get books by search term.
* @param $term
* @return mixed
...
...
app/User.php
View file @
22f8a40
...
...
@@ -34,13 +34,19 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
protected
$hidden
=
[
'password'
,
'remember_token'
];
/**
* This holds the user's permissions when loaded.
* @var array
*/
protected
$permissions
;
/**
* Returns a default guest user.
*/
public
static
function
getDefault
()
{
return
new
static
([
'email'
=>
'guest'
,
'name'
=>
'Guest'
'name'
=>
'Guest'
]);
}
...
...
@@ -58,7 +64,19 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
public
function
getRoleAttribute
()
{
return
$this
->
roles
()
->
first
();
return
$this
->
roles
()
->
with
(
'permissions'
)
->
first
();
}
/**
* Loads the user's permissions from thier role.
*/
private
function
loadPermissions
()
{
if
(
isset
(
$this
->
permissions
))
return
;
$this
->
load
(
'roles.permissions'
);
$permissions
=
$this
->
roles
[
0
]
->
permissions
;
$permissionsArray
=
$permissions
->
pluck
(
'name'
)
->
all
();
$this
->
permissions
=
$permissionsArray
;
}
/**
...
...
@@ -68,14 +86,11 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
*/
public
function
can
(
$permissionName
)
{
if
(
$this
->
email
==
'guest'
)
{
if
(
$this
->
email
==
'guest'
)
{
return
false
;
}
$permissions
=
$this
->
role
->
permissions
()
->
get
();
$permissionSearch
=
$permissions
->
search
(
function
(
$item
,
$key
)
use
(
$permissionName
)
{
return
$item
->
name
==
$permissionName
;
});
return
$permissionSearch
!==
false
;
$this
->
loadPermissions
();
return
array_search
(
$permissionName
,
$this
->
permissions
)
!==
false
;
}
/**
...
...
@@ -114,7 +129,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
*/
public
function
hasSocialAccount
(
$socialDriver
=
false
)
{
if
(
$socialDriver
===
false
)
{
if
(
$socialDriver
===
false
)
{
return
$this
->
socialAccounts
()
->
count
()
>
0
;
}
...
...
composer.json
View file @
22f8a40
...
...
@@ -9,7 +9,8 @@
"laravel/framework"
:
"5.1.*"
,
"intervention/image"
:
"^2.3"
,
"barryvdh/laravel-ide-helper"
:
"^2.1"
,
"laravel/socialite"
:
"^2.0"
"laravel/socialite"
:
"^2.0"
,
"barryvdh/laravel-debugbar"
:
"^2.0"
},
"require-dev"
:
{
"fzaninotto/faker"
:
"~1.4"
,
...
...
composer.lock
View file @
22f8a40
...
...
@@ -4,9 +4,64 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
,
"This file is @generated automatically"
],
"hash"
:
"7d7e80e9f1c13417c35195f79e41c038"
,
"hash"
:
"c216d0bcb72b4f2008d7fa8067da2f77"
,
"content-hash"
:
"3c421ae5b8e5c11792249142cb96ff25"
,
"packages"
:
[
{
"name"
:
"barryvdh/laravel-debugbar"
,
"version"
:
"v2.0.6"
,
"source"
:
{
"type"
:
"git"
,
"url"
:
"https://github.com/barryvdh/laravel-debugbar.git"
,
"reference"
:
"23672cbbe78278ff1fdb258caa0b1de7b5d0bc0c"
},
"dist"
:
{
"type"
:
"zip"
,
"url"
:
"https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/23672cbbe78278ff1fdb258caa0b1de7b5d0bc0c"
,
"reference"
:
"23672cbbe78278ff1fdb258caa0b1de7b5d0bc0c"
,
"shasum"
:
""
},
"require"
:
{
"illuminate/support"
:
"~5.0.17|5.1.*"
,
"maximebf/debugbar"
:
"~1.10.2"
,
"php"
:
">=5.4.0"
,
"symfony/finder"
:
"~2.6"
},
"type"
:
"library"
,
"extra"
:
{
"branch-alias"
:
{
"dev-master"
:
"2.1-dev"
}
},
"autoload"
:
{
"psr-4"
:
{
"Barryvdh
\\
Debugbar
\\
"
:
"src/"
},
"files"
:
[
"src/helpers.php"
]
},
"notification-url"
:
"https://packagist.org/downloads/"
,
"license"
:
[
"MIT"
],
"authors"
:
[
{
"name"
:
"Barry vd. Heuvel"
,
"email"
:
"barryvdh@gmail.com"
}
],
"description"
:
"PHP Debugbar integration for Laravel"
,
"keywords"
:
[
"debug"
,
"debugbar"
,
"laravel"
,
"profiler"
,
"webprofiler"
],
"time"
:
"2015-09-09 11:39:27"
},
{
"name"
:
"barryvdh/laravel-ide-helper"
,
"version"
:
"v2.1.0"
,
"source"
:
{
...
...
@@ -1079,6 +1134,62 @@
"time"
:
"2015-08-22 09:49:14"
},
{
"name"
:
"maximebf/debugbar"
,
"version"
:
"v1.10.5"
,
"source"
:
{
"type"
:
"git"
,
"url"
:
"https://github.com/maximebf/php-debugbar.git"
,
"reference"
:
"30e53e8a28284b69dd223c9f5ee8957befd72636"
},
"dist"
:
{
"type"
:
"zip"
,
"url"
:
"https://api.github.com/repos/maximebf/php-debugbar/zipball/30e53e8a28284b69dd223c9f5ee8957befd72636"
,
"reference"
:
"30e53e8a28284b69dd223c9f5ee8957befd72636"
,
"shasum"
:
""
},
"require"
:
{
"php"
:
">=5.3.0"
,
"psr/log"
:
"~1.0"
,
"symfony/var-dumper"
:
"~2.6"
},
"require-dev"
:
{
"phpunit/phpunit"
:
"~4.0"
},
"suggest"
:
{
"kriswallsmith/assetic"
:
"The best way to manage assets"
,
"monolog/monolog"
:
"Log using Monolog"
,
"predis/predis"
:
"Redis storage"
},
"type"
:
"library"
,
"extra"
:
{
"branch-alias"
:
{
"dev-master"
:
"1.10-dev"
}
},
"autoload"
:
{
"psr-0"
:
{
"DebugBar"
:
"src/"
}
},
"notification-url"
:
"https://packagist.org/downloads/"
,
"license"
:
[
"MIT"
],
"authors"
:
[
{
"name"
:
"Maxime Bouroumeau-Fuseau"
,
"email"
:
"maxime.bouroumeau@gmail.com"
,
"homepage"
:
"http://maximebf.com"
}
],
"description"
:
"Debug bar in the browser for php application"
,
"homepage"
:
"https://github.com/maximebf/php-debugbar"
,
"keywords"
:
[
"debug"
],
"time"
:
"2015-10-19 20:35:12"
},
{
"name"
:
"monolog/monolog"
,
"version"
:
"1.16.0"
,
"source"
:
{
...
...
@@ -1556,12 +1667,12 @@
"version"
:
"v2.7.3"
,
"source"
:
{
"type"
:
"git"
,
"url"
:
"https://github.com/symfony/
ClassL
oader.git"
,
"url"
:
"https://github.com/symfony/
class-l
oader.git"
,
"reference"
:
"2fccbc544997340808801a7410cdcb96dd12edc4"
},
"dist"
:
{
"type"
:
"zip"
,
"url"
:
"https://api.github.com/repos/symfony/
ClassL
oader/zipball/2fccbc544997340808801a7410cdcb96dd12edc4"
,
"url"
:
"https://api.github.com/repos/symfony/
class-l
oader/zipball/2fccbc544997340808801a7410cdcb96dd12edc4"
,
"reference"
:
"2fccbc544997340808801a7410cdcb96dd12edc4"
,
"shasum"
:
""
},
...
...
@@ -1606,12 +1717,12 @@
"version"
:
"v2.7.3"
,
"source"
:
{
"type"
:
"git"
,
"url"
:
"https://github.com/symfony/
C
onsole.git"
,
"url"
:
"https://github.com/symfony/
c
onsole.git"
,
"reference"
:
"d6cf02fe73634c96677e428f840704bfbcaec29e"
},
"dist"
:
{
"type"
:
"zip"
,
"url"
:
"https://api.github.com/repos/symfony/
C
onsole/zipball/d6cf02fe73634c96677e428f840704bfbcaec29e"
,
"url"
:
"https://api.github.com/repos/symfony/
c
onsole/zipball/d6cf02fe73634c96677e428f840704bfbcaec29e"
,
"reference"
:
"d6cf02fe73634c96677e428f840704bfbcaec29e"
,
"shasum"
:
""
},
...
...
@@ -1663,12 +1774,12 @@
"version"
:
"v2.7.3"
,
"source"
:
{
"type"
:
"git"
,
"url"
:
"https://github.com/symfony/
CssS
elector.git"
,
"url"
:
"https://github.com/symfony/
css-s
elector.git"
,
"reference"
:
"0b5c07b516226b7dd32afbbc82fe547a469c5092"
},
"dist"
:
{
"type"
:
"zip"
,
"url"
:
"https://api.github.com/repos/symfony/
CssS
elector/zipball/0b5c07b516226b7dd32afbbc82fe547a469c5092"
,
"url"
:
"https://api.github.com/repos/symfony/
css-s
elector/zipball/0b5c07b516226b7dd32afbbc82fe547a469c5092"
,
"reference"
:
"0b5c07b516226b7dd32afbbc82fe547a469c5092"
,
"shasum"
:
""
},
...
...
@@ -1716,12 +1827,12 @@
"version"
:
"v2.7.3"
,
"source"
:
{
"type"
:
"git"
,
"url"
:
"https://github.com/symfony/
D
ebug.git"
,
"url"
:
"https://github.com/symfony/
d
ebug.git"
,
"reference"
:
"9daa1bf9f7e615fa2fba30357e479a90141222e3"
},
"dist"
:
{
"type"
:
"zip"
,
"url"
:
"https://api.github.com/repos/symfony/
D
ebug/zipball/9daa1bf9f7e615fa2fba30357e479a90141222e3"
,
"url"
:
"https://api.github.com/repos/symfony/
d
ebug/zipball/9daa1bf9f7e615fa2fba30357e479a90141222e3"
,
"reference"
:
"9daa1bf9f7e615fa2fba30357e479a90141222e3"
,
"shasum"
:
""
},
...
...
@@ -1776,12 +1887,12 @@
"version"
:
"v2.7.3"
,
"source"
:
{
"type"
:
"git"
,
"url"
:
"https://github.com/symfony/
DomC
rawler.git"
,
"url"
:
"https://github.com/symfony/
dom-c
rawler.git"
,
"reference"
:
"9dabece63182e95c42b06967a0d929a5df78bc35"
},
"dist"
:
{
"type"
:
"zip"
,
"url"
:
"https://api.github.com/repos/symfony/
DomC
rawler/zipball/9dabece63182e95c42b06967a0d929a5df78bc35"
,
"url"
:
"https://api.github.com/repos/symfony/
dom-c
rawler/zipball/9dabece63182e95c42b06967a0d929a5df78bc35"
,
"reference"
:
"9dabece63182e95c42b06967a0d929a5df78bc35"
,
"shasum"
:
""
},
...
...
@@ -1829,12 +1940,12 @@
"version"
:
"v2.7.3"
,
"source"
:
{
"type"
:
"git"
,
"url"
:
"https://github.com/symfony/
EventD
ispatcher.git"
,
"url"
:
"https://github.com/symfony/
event-d
ispatcher.git"
,
"reference"
:
"9310b5f9a87ec2ea75d20fec0b0017c77c66dac3"
},
"dist"
:
{
"type"
:
"zip"
,
"url"
:
"https://api.github.com/repos/symfony/
EventD
ispatcher/zipball/9310b5f9a87ec2ea75d20fec0b0017c77c66dac3"
,
"url"
:
"https://api.github.com/repos/symfony/
event-d
ispatcher/zipball/9310b5f9a87ec2ea75d20fec0b0017c77c66dac3"
,
"reference"
:
"9310b5f9a87ec2ea75d20fec0b0017c77c66dac3"
,
"shasum"
:
""
},
...
...
@@ -1936,12 +2047,12 @@
"version"
:
"v2.7.3"
,
"source"
:
{
"type"
:
"git"
,
"url"
:
"https://github.com/symfony/
HttpF
oundation.git"
,
"url"
:
"https://github.com/symfony/
http-f
oundation.git"
,
"reference"
:
"863af6898081b34c65d42100c370b9f3c51b70ca"
},
"dist"
:
{
"type"
:
"zip"
,
"url"
:
"https://api.github.com/repos/symfony/
HttpF
oundation/zipball/863af6898081b34c65d42100c370b9f3c51b70ca"
,
"url"
:
"https://api.github.com/repos/symfony/
http-f
oundation/zipball/863af6898081b34c65d42100c370b9f3c51b70ca"
,
"reference"
:
"863af6898081b34c65d42100c370b9f3c51b70ca"
,
"shasum"
:
""
},
...
...
@@ -1989,12 +2100,12 @@
"version"
:
"v2.7.3"
,
"source"
:
{
"type"
:
"git"
,
"url"
:
"https://github.com/symfony/
HttpK
ernel.git"
,
"url"
:
"https://github.com/symfony/
http-k
ernel.git"
,
"reference"
:
"405d3e7a59ff7a28ec469441326a0ac79065ea98"
},
"dist"
:
{
"type"
:
"zip"
,
"url"
:
"https://api.github.com/repos/symfony/
HttpK
ernel/zipball/405d3e7a59ff7a28ec469441326a0ac79065ea98"
,
"url"
:
"https://api.github.com/repos/symfony/
http-k
ernel/zipball/405d3e7a59ff7a28ec469441326a0ac79065ea98"
,
"reference"
:
"405d3e7a59ff7a28ec469441326a0ac79065ea98"
,
"shasum"
:
""
},
...
...
config/app.php
View file @
22f8a40
...
...
@@ -143,6 +143,7 @@ return [
*/
Intervention\Image\ImageServiceProvider
::
class
,
Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider
::
class
,
Barryvdh\Debugbar\ServiceProvider
::
class
,
/*
...
...
@@ -207,6 +208,7 @@ return [
*/
'ImageTool'
=>
Intervention\Image\Facades\Image
::
class
,
'Debugbar'
=>
Barryvdh\Debugbar\Facade
::
class
,
/**
* Custom
...
...
database/factories/ModelFactory.php
View file @
22f8a40
...
...
@@ -23,6 +23,7 @@ $factory->define(BookStack\User::class, function ($faker) {
$factory
->
define
(
BookStack\Book
::
class
,
function
(
$faker
)
{
return
[
'name'
=>
$faker
->
sentence
,
'slug'
=>
str_random
(
10
),
'description'
=>
$faker
->
paragraph
];
});
...
...
@@ -30,6 +31,7 @@ $factory->define(BookStack\Book::class, function ($faker) {
$factory
->
define
(
BookStack\Chapter
::
class
,
function
(
$faker
)
{
return
[
'name'
=>
$faker
->
sentence
,
'slug'
=>
str_random
(
10
),
'description'
=>
$faker
->
paragraph
];
});
...
...
@@ -37,6 +39,7 @@ $factory->define(BookStack\Chapter::class, function ($faker) {
$factory
->
define
(
BookStack\Page
::
class
,
function
(
$faker
)
{
return
[
'name'
=>
$faker
->
sentence
,
'slug'
=>
str_random
(
10
),
'html'
=>
'<p>'
.
implode
(
'</p>'
,
$faker
->
paragraphs
(
5
))
.
'</p>'
];
});
...
...
database/migrations/2015_11_26_221857_add_entity_indexes.php
0 → 100644
View file @
22f8a40
<?php
use
Illuminate\Database\Schema\Blueprint
;
use
Illuminate\Database\Migrations\Migration
;
class
AddEntityIndexes
extends
Migration
{
/**
* Run the migrations.
*
* @return void
*/
public
function
up
()
{
Schema
::
table
(
'books'
,
function
(
Blueprint
$table
)
{
$table
->
index
(
'slug'
);
$table
->
index
(
'created_by'
);
$table
->
index
(
'updated_by'
);
});
Schema
::
table
(
'pages'
,
function
(
Blueprint
$table
)
{
$table
->
index
(
'slug'
);
$table
->
index
(
'book_id'
);
$table
->
index
(
'chapter_id'
);
$table
->
index
(
'priority'
);
$table
->
index
(
'created_by'
);
$table
->
index
(
'updated_by'
);
});
Schema
::
table
(
'page_revisions'
,
function
(
Blueprint
$table
)
{
$table
->
index
(
'page_id'
);
});
Schema
::
table
(
'chapters'
,
function
(
Blueprint
$table
)
{
$table
->
index
(
'slug'
);
$table
->
index
(
'book_id'
);
$table
->
index
(
'priority'
);
$table
->
index
(
'created_by'
);
$table
->
index
(
'updated_by'
);
});
Schema
::
table
(
'activities'
,
function
(
Blueprint
$table
)
{
$table
->
index
(
'book_id'
);
$table
->
index
(
'user_id'
);
$table
->
index
(
'entity_id'
);
});
Schema
::
table
(
'views'
,
function
(
Blueprint
$table
)
{
$table
->
index
(
'user_id'
);
$table
->
index
(
'viewable_id'
);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public
function
down
()
{
Schema
::
table
(
'books'
,
function
(
Blueprint
$table
)
{
$table
->
dropIndex
(
'slug'
);
$table
->
dropIndex
(
'created_by'
);
$table
->
dropIndex
(
'updated_by'
);
});
Schema
::
table
(
'pages'
,
function
(
Blueprint
$table
)
{
$table
->
dropIndex
(
'slug'
);
$table
->
dropIndex
(
'book_id'
);
$table
->
dropIndex
(
'chapter_id'
);
$table
->
dropIndex
(
'priority'
);
$table
->
dropIndex
(
'created_by'
);
$table
->
dropIndex
(
'updated_by'
);
});
Schema
::
table
(
'page_revisions'
,
function
(
Blueprint
$table
)
{
$table
->
dropIndex
(
'page_id'
);
});
Schema
::
table
(
'chapters'
,
function
(
Blueprint
$table
)
{
$table
->
dropIndex
(
'slug'
);
$table
->
dropIndex
(
'book_id'
);
$table
->
dropIndex
(
'priority'
);
$table
->
dropIndex
(
'created_by'
);
$table
->
dropIndex
(
'updated_by'
);
});
Schema
::
table
(
'activities'
,
function
(
Blueprint
$table
)
{
$table
->
dropIndex
(
'book_id'
);
$table
->
dropIndex
(
'user_id'
);
$table
->
dropIndex
(
'entity_id'
);
});
Schema
::
table
(
'views'
,
function
(
Blueprint
$table
)
{
$table
->
dropIndex
(
'user_id'
);
$table
->
dropIndex
(
'entity_id'
);
});
}
}
database/seeds/DummyContentSeeder.php
0 → 100644
View file @
22f8a40
<?php
use
Illuminate\Database\Seeder
;
class
DummyContentSeeder
extends
Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public
function
run
()
{
$user
=
factory
(
BookStack\User
::
class
,
1
)
->
create
();
$role
=
\BookStack\Role
::
where
(
'name'
,
'='
,
'admin'
)
->
first
();
$user
->
attachRole
(
$role
);
$books
=
factory
(
BookStack\Book
::
class
,
20
)
->
create
([
'created_by'
=>
$user
->
id
,
'updated_by'
=>
$user
->
id
])
->
each
(
function
(
$book
)
use
(
$user
)
{
$chapters
=
factory
(
BookStack\Chapter
::
class
,
5
)
->
create
([
'created_by'
=>
$user
->
id
,
'updated_by'
=>
$user
->
id
])
->
each
(
function
(
$chapter
)
use
(
$user
,
$book
){
$pages
=
factory
(
\BookStack\Page
::
class
,
10
)
->
make
([
'created_by'
=>
$user
->
id
,
'updated_by'
=>
$user
->
id
,
'book_id'
=>
$book
->
id
]);
$chapter
->
pages
()
->
saveMany
(
$pages
);
});
$book
->
chapters
()
->
saveMany
(
$chapters
);
});
}
}
resources/views/books/show.blade.php
View file @
22f8a40
...
...
@@ -37,8 +37,8 @@
<div
class=
"page-list"
>
<hr>
@if(count($book
->children()
) > 0)
@foreach($book
->children()
as $childElement)
@if(count($book
Children
) > 0)
@foreach($book
Children
as $childElement)
@if($childElement->isA('chapter'))
@include('chapters/list-item', ['chapter' => $childElement])
@else
...
...
resources/views/chapters/show.blade.php
View file @
22f8a40
...
...
@@ -60,7 +60,7 @@
</p>
</div>
<div
class=
"col-md-3 col-md-offset-1"
>
@include('pages/sidebar-tree-list', ['book' => $book])
@include('pages/sidebar-tree-list', ['book' => $book
, 'sidebarTree' => $sidebarTree
])
</div>
</div>
</div>
...
...
resources/views/pages/show.blade.php
View file @
22f8a40
...
...
@@ -60,7 +60,7 @@
</div>
<div
class=
"col-md-3 print-hidden"
>
@include('pages/sidebar-tree-list', ['book' => $book])
@include('pages/sidebar-tree-list', ['book' => $book
, 'sidebarTree' => $sidebarTree
])
</div>
</div>
...
...
resources/views/pages/sidebar-tree-list.blade.php
View file @
22f8a40
...
...
@@ -3,7 +3,7 @@
<h6
class=
"text-muted"
>
Book Navigation
</h6>
<ul
class=
"sidebar-page-list menu"
>
<li
class=
"book-header"
><a
href=
"{{$book->getUrl()}}"
class=
"book {{ $current->matches($book)? 'selected' : '' }}"
><i
class=
"zmdi zmdi-book"
></i>
{{$book->name}}
</a></li>
@foreach($
book->children()
as $bookChild)
@foreach($
sidebarTree
as $bookChild)
<li
class=
"list-item-{{ $bookChild->getName() }}"
>
<a
href=
"{{$bookChild->getUrl()}}"
class=
"{{ $bookChild->getName() }} {{ $current->matches($bookChild)? 'selected' : '' }}"
>
@if($bookChild->isA('chapter'))
<i
class=
"zmdi zmdi-collection-bookmark"
></i>
@else
<i
class=
"zmdi zmdi-file-text"
></i>
@endif{{ $bookChild->name }}
...
...
Please
register
or
sign in
to post a comment