generator-folklore 3.0.3 → 3.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/lib/generators/app/index.js +3 -51
  2. package/lib/generators/babel/index.js +28 -101
  3. package/lib/generators/babel/templates/config.js +16 -0
  4. package/lib/generators/browserslist/index.js +4 -9
  5. package/lib/generators/build/index.js +40 -29
  6. package/lib/generators/cli/index.js +92 -0
  7. package/lib/generators/cli/templates/cli.js +22 -0
  8. package/lib/generators/cli/templates/commands/default.js +16 -0
  9. package/lib/generators/docs/index.js +1 -2
  10. package/lib/generators/editorconfig/index.js +12 -22
  11. package/lib/generators/eslint/index.js +12 -13
  12. package/lib/generators/{html → html-project}/index.js +60 -73
  13. package/lib/generators/{html → html-project}/templates/folklore.png +0 -0
  14. package/lib/generators/{html → html-project}/templates/gitignore +0 -0
  15. package/lib/generators/{html → html-project}/templates/index.html.ejs +4 -1
  16. package/lib/generators/intl/index.js +93 -0
  17. package/lib/generators/laravel/index.js +5 -5
  18. package/lib/generators/laravel-mediatheque/index.js +133 -0
  19. package/lib/generators/laravel-mediatheque/templates/app/Models/Media.php +9 -0
  20. package/lib/generators/laravel-mediatheque/templates/app/Models/MediaFile.php +9 -0
  21. package/lib/generators/laravel-panneau/index.js +49 -28
  22. package/lib/generators/laravel-panneau/templates/app/Contracts/Repositories/Pages.php +19 -0
  23. package/lib/generators/laravel-panneau/templates/app/Contracts/Resources/Blocks/Text.php +10 -0
  24. package/lib/generators/laravel-panneau/templates/app/Contracts/Resources/Page.php +10 -0
  25. package/lib/generators/laravel-panneau/templates/app/Contracts/Resources/Pages/Home.php +9 -0
  26. package/lib/generators/laravel-panneau/templates/app/Http/Resources/BlockResource.php +37 -0
  27. package/lib/generators/laravel-panneau/templates/app/Http/Resources/BlocksCollection.php +8 -0
  28. package/lib/generators/laravel-panneau/templates/app/Http/Resources/PageResource.php +47 -0
  29. package/lib/generators/laravel-panneau/templates/app/Http/Resources/PagesCollection.php +10 -0
  30. package/lib/generators/laravel-panneau/templates/app/Models/Block.php +3 -13
  31. package/lib/generators/laravel-panneau/templates/app/Models/Page.php +3 -60
  32. package/lib/generators/laravel-panneau/templates/app/Panneau/Composers/AppComposer.php +50 -0
  33. package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/Block.php +22 -0
  34. package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/Blocks.php +87 -0
  35. package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/Page.php +51 -0
  36. package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/PageSlug.php +34 -0
  37. package/lib/generators/laravel-panneau/templates/app/Panneau/Fields/PageSlugLocalized.php +18 -0
  38. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Controllers/AccountController.php +41 -0
  39. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Controllers/Controller.php +19 -0
  40. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Controllers/HomeController.php +16 -0
  41. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Controllers/PagesController.php +24 -0
  42. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Controllers/UploadController.php +27 -0
  43. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Controllers/UsersController.php +32 -0
  44. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Requests/AccountUpdateRequest.php +29 -0
  45. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Requests/UploadRequest.php +29 -0
  46. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Resources/BlockResource.php +39 -0
  47. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Resources/BlocksCollection.php +8 -0
  48. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Resources/PageResource.php +56 -0
  49. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Resources/PagesCollection.php +10 -0
  50. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Resources/UserResource.php +24 -0
  51. package/lib/generators/laravel-panneau/templates/app/Panneau/PanneauServiceProvider.php +48 -0
  52. package/lib/generators/laravel-panneau/templates/app/Panneau/Policies/PanneauPolicy.php +32 -0
  53. package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Blocks/BlockWithBlocks.php +110 -0
  54. package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Blocks/TextBlock.php +27 -0
  55. package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Blocks.php +42 -0
  56. package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Pages/Page.php +28 -0
  57. package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Pages.php +92 -0
  58. package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Users.php +57 -0
  59. package/lib/generators/laravel-panneau/templates/app/Repositories/Pages.php +42 -0
  60. package/lib/generators/laravel-panneau/templates/app/Resources/Blocks/TextBlock.php +14 -0
  61. package/lib/generators/laravel-panneau/templates/app/Resources/Page.php +10 -0
  62. package/lib/generators/laravel-panneau/templates/app/Resources/Pages/HomePage.php +10 -0
  63. package/lib/generators/laravel-panneau/templates/app.blade.php +8 -0
  64. package/lib/generators/laravel-panneau/templates/index.js +32 -0
  65. package/lib/generators/laravel-panneau/templates/lang/en/panneau.php +62 -0
  66. package/lib/generators/laravel-panneau/templates/lang/fr/panneau.php +62 -0
  67. package/lib/generators/laravel-panneau/templates/layout.blade.php +17 -48
  68. package/lib/generators/laravel-panneau/templates/resources/assets/js/components/Panneau.jsx +68 -0
  69. package/lib/generators/{js/templates/src/lib/.gitkeep → laravel-panneau/templates/resources/assets/js/components/panneau/fields/PageSlug.jsx} +0 -0
  70. package/lib/generators/laravel-panneau/templates/resources/assets/js/components/panneau/fields/PageSlugLocalized.jsx +43 -0
  71. package/lib/generators/laravel-panneau/templates/resources/assets/js/components/panneau/fields/index.js +2 -0
  72. package/lib/generators/laravel-panneau/templates/resources/assets/styles/panneau.scss +2 -0
  73. package/lib/generators/laravel-panneau/templates/routes.php +30 -0
  74. package/lib/generators/laravel-project/index.js +504 -0
  75. package/lib/generators/laravel-project/templates/env +41 -0
  76. package/lib/generators/laravel-project/templates/laravel/app/Composers/AppComposer.php +48 -0
  77. package/lib/generators/laravel-project/templates/laravel/app/Composers/IntlComposer.php +10 -0
  78. package/lib/generators/laravel-project/templates/laravel/app/Composers/MetaComposer.php +48 -0
  79. package/lib/generators/laravel-project/templates/laravel/app/Composers/RoutesComposer.php +19 -0
  80. package/lib/generators/laravel-project/templates/laravel/app/Contracts/Resources/User.php +10 -0
  81. package/lib/generators/laravel-project/templates/laravel/app/Http/Controllers/HomeController.php +18 -0
  82. package/lib/generators/laravel-project/templates/laravel/app/Http/Middleware/TrustProxies.php +28 -0
  83. package/lib/generators/laravel-project/templates/laravel/app/Http/Resources/UserResource.php +21 -0
  84. package/lib/generators/laravel-project/templates/laravel/app/Models/User.php +50 -0
  85. package/lib/generators/laravel-project/templates/laravel/app/Providers/AppServiceProvider.php +45 -0
  86. package/lib/generators/laravel-project/templates/laravel/app/Providers/RouteServiceProvider.php +64 -0
  87. package/lib/generators/laravel-project/templates/laravel/app/Providers/ViewServiceProvider.php +33 -0
  88. package/lib/generators/laravel-project/templates/laravel/app/Repositories/Users.php +36 -0
  89. package/lib/generators/laravel-project/templates/laravel/app/Resources/User.php +11 -0
  90. package/lib/generators/laravel-project/templates/laravel/config/app.php +216 -0
  91. package/lib/generators/laravel-project/templates/laravel/config/auth.php +116 -0
  92. package/lib/generators/laravel-project/templates/laravel/config/services.php +39 -0
  93. package/lib/generators/laravel-project/templates/laravel/lang/en/content.php +5 -0
  94. package/lib/generators/laravel-project/templates/laravel/lang/en/errors.php +17 -0
  95. package/lib/generators/laravel-project/templates/laravel/lang/en/meta.php +11 -0
  96. package/lib/generators/laravel-project/templates/laravel/lang/en/routes.php +4 -0
  97. package/lib/generators/laravel-project/templates/laravel/lang/fr/auth.php +19 -0
  98. package/lib/generators/laravel-project/templates/laravel/lang/fr/content.php +5 -0
  99. package/lib/generators/laravel-project/templates/laravel/lang/fr/errors.php +17 -0
  100. package/lib/generators/laravel-project/templates/laravel/lang/fr/meta.php +11 -0
  101. package/lib/generators/laravel-project/templates/laravel/lang/fr/pagination.php +19 -0
  102. package/lib/generators/laravel-project/templates/laravel/lang/fr/passwords.php +22 -0
  103. package/lib/generators/laravel-project/templates/laravel/lang/fr/routes.php +12 -0
  104. package/lib/generators/laravel-project/templates/laravel/lang/fr/validation.php +146 -0
  105. package/lib/generators/{js/templates/styles → laravel-project/templates/laravel/resources/assets/fonts}/.gitkeep +0 -0
  106. package/lib/generators/{laravel-panneau/templates/app/Schemas/Fields → laravel-project/templates/laravel/resources/assets/img}/.gitkeep +0 -0
  107. package/lib/generators/laravel-project/templates/laravel/resources/assets/img/folklore.png +0 -0
  108. package/lib/generators/laravel-project/templates/laravel/resources/views/analytics/body.blade.php +3 -0
  109. package/lib/generators/laravel-project/templates/laravel/resources/views/analytics/gpt.blade.php +16 -0
  110. package/lib/generators/laravel-project/templates/laravel/resources/views/analytics/head.blade.php +1 -0
  111. package/lib/generators/laravel-project/templates/laravel/resources/views/app.blade.php +8 -0
  112. package/lib/generators/laravel-project/templates/laravel/resources/views/errors/401.blade.php +8 -0
  113. package/lib/generators/laravel-project/templates/laravel/resources/views/errors/403.blade.php +8 -0
  114. package/lib/generators/laravel-project/templates/laravel/resources/views/errors/404.blade.php +8 -0
  115. package/lib/generators/laravel-project/templates/laravel/resources/views/errors/500.blade.php +8 -0
  116. package/lib/generators/laravel-project/templates/laravel/resources/views/layout.blade.php +33 -0
  117. package/lib/generators/laravel-project/templates/laravel/resources/views/meta/all.blade.php +4 -0
  118. package/lib/generators/laravel-project/templates/laravel/resources/views/meta/base.blade.php +11 -0
  119. package/lib/generators/laravel-project/templates/laravel/resources/views/meta/facebook.blade.php +4 -0
  120. package/lib/generators/laravel-project/templates/laravel/resources/views/meta/opengraph.blade.php +9 -0
  121. package/lib/generators/laravel-project/templates/laravel/resources/views/meta/twitter.blade.php +5 -0
  122. package/lib/generators/laravel-project/templates/laravel/routes/web.php +12 -0
  123. package/lib/generators/lerna-package/index.js +1 -3
  124. package/lib/generators/lerna-repository/index.js +1 -3
  125. package/lib/generators/node-project/index.js +164 -0
  126. package/lib/generators/node-project/templates/index.js +0 -0
  127. package/lib/generators/npm-package/index.js +3 -5
  128. package/lib/generators/prettier/index.js +19 -6
  129. package/lib/generators/prettier/templates/prettierrc.json +3 -1
  130. package/lib/generators/{js → react-app}/index.js +22 -52
  131. package/lib/generators/{js → react-app}/templates/_package.json +0 -0
  132. package/lib/generators/react-app/templates/index.js +23 -0
  133. package/lib/generators/react-app/templates/src/components/App.jsx +46 -0
  134. package/lib/generators/react-app/templates/src/components/Container.jsx +40 -0
  135. package/lib/generators/{js → react-app}/templates/src/components/buttons/Button.jsx +4 -18
  136. package/lib/generators/react-app/templates/src/components/layouts/Main.jsx +27 -0
  137. package/lib/generators/react-app/templates/src/components/menus/Menu.jsx +62 -0
  138. package/lib/generators/{js → react-app}/templates/src/components/pages/Error.jsx +10 -14
  139. package/lib/generators/react-app/templates/src/components/pages/Home.jsx +32 -0
  140. package/lib/generators/{js → react-app}/templates/src/components/partials/PageMeta.jsx +11 -11
  141. package/lib/generators/{js → react-app}/templates/src/contexts/KeysContext.jsx +0 -0
  142. package/lib/generators/react-app/templates/src/lib/.gitkeep +0 -0
  143. package/lib/generators/{js → react-app}/templates/src/lib/PropTypes.js +0 -0
  144. package/lib/generators/{js → react-app}/templates/src/lib/utils.js +0 -0
  145. package/lib/generators/react-app/templates/src/polyfills/index.js +6 -0
  146. package/lib/generators/react-app/templates/src/polyfills/intl-en.js +2 -0
  147. package/lib/generators/react-app/templates/src/polyfills/intl-fr.js +2 -0
  148. package/lib/generators/react-app/templates/src/polyfills/should.js +14 -0
  149. package/lib/generators/react-app/templates/styles/.gitkeep +0 -0
  150. package/lib/generators/{js/templates/styles/buttons/button.scss → react-app/templates/styles/buttons/button.module.scss} +1 -0
  151. package/lib/generators/{js/templates/styles/layouts/main.scss → react-app/templates/styles/layouts/main.module.scss} +0 -0
  152. package/lib/generators/{js/templates/styles/menus/menu.scss → react-app/templates/styles/menus/menu.module.scss} +0 -0
  153. package/lib/generators/{js/templates/styles/pages/error.scss → react-app/templates/styles/pages/error.module.scss} +0 -0
  154. package/lib/generators/{js/templates/styles/pages/home.scss → react-app/templates/styles/pages/home.module.scss} +0 -0
  155. package/lib/generators/rollup/index.js +54 -0
  156. package/lib/generators/rollup/templates/config.js +50 -0
  157. package/lib/generators/scss/index.js +3 -16
  158. package/lib/generators/scss/templates/{main.scss → styles.scss} +0 -0
  159. package/lib/generators/server/index.js +81 -0
  160. package/lib/generators/server/templates/server.js +59 -0
  161. package/lib/generators/storybook/index.js +1 -7
  162. package/lib/generators/stylelint/index.js +13 -14
  163. package/lib/lib/generator.js +9 -0
  164. package/lib/lib/utils.js +17 -0
  165. package/package.json +2 -2
  166. package/lib/generators/babel/templates/babel-preset-react.js +0 -7
  167. package/lib/generators/babel/templates/babel-preset.js +0 -57
  168. package/lib/generators/babel/templates/babelrc +0 -5
  169. package/lib/generators/babel/templates/utils/processScss.js +0 -10
  170. package/lib/generators/babel/templates/utils/transformRequireIgnore.js +0 -80
  171. package/lib/generators/html/templates/index.js +0 -9
  172. package/lib/generators/html/templates/root.js +0 -23
  173. package/lib/generators/html/templates/utils.js +0 -7
  174. package/lib/generators/js/templates/browserslistrc +0 -9
  175. package/lib/generators/js/templates/config.js +0 -33
  176. package/lib/generators/js/templates/index.js +0 -41
  177. package/lib/generators/js/templates/src/actions/LayoutActions.js +0 -12
  178. package/lib/generators/js/templates/src/actions/SiteActions.js +0 -22
  179. package/lib/generators/js/templates/src/components/App.jsx +0 -52
  180. package/lib/generators/js/templates/src/components/Root.jsx +0 -70
  181. package/lib/generators/js/templates/src/components/layouts/Main.jsx +0 -52
  182. package/lib/generators/js/templates/src/components/menus/Menu.jsx +0 -60
  183. package/lib/generators/js/templates/src/components/messages/Success.jsx +0 -36
  184. package/lib/generators/js/templates/src/components/pages/Home.jsx +0 -32
  185. package/lib/generators/js/templates/src/components/partials/Label.jsx +0 -32
  186. package/lib/generators/js/templates/src/reducers/LayoutReducer.js +0 -32
  187. package/lib/generators/js/templates/src/reducers/SiteReducer.js +0 -36
  188. package/lib/generators/js/templates/src/reducers/index.js +0 -7
  189. package/lib/generators/js/templates/src/vendor/polyfills/intl-en.js +0 -2
  190. package/lib/generators/js/templates/src/vendor/polyfills/intl-fr.js +0 -2
  191. package/lib/generators/laravel-panneau/templates/_composer.json +0 -6
  192. package/lib/generators/laravel-panneau/templates/_package.json +0 -11
  193. package/lib/generators/laravel-panneau/templates/app/Http/Controllers/Panneau/HomeController.php +0 -14
  194. package/lib/generators/laravel-panneau/templates/app/Http/Controllers/Panneau/PagesController.php +0 -11
  195. package/lib/generators/laravel-panneau/templates/app/Models/Mediatheque/File.php +0 -13
  196. package/lib/generators/laravel-panneau/templates/app/Models/Mediatheque/Picture.php +0 -13
  197. package/lib/generators/laravel-panneau/templates/app/Models/Mediatheque/Video.php +0 -34
  198. package/lib/generators/laravel-panneau/templates/app/Providers/PanneauServiceProvider.php +0 -23
  199. package/lib/generators/laravel-panneau/templates/app/Reducers/SlugExtractReducer.php +0 -18
  200. package/lib/generators/laravel-panneau/templates/app/Resources/Pages.php +0 -54
  201. package/lib/generators/laravel-panneau/templates/app/Schemas/Blocks/Base.php +0 -22
  202. package/lib/generators/laravel-panneau/templates/app/Schemas/Bubbles/Base.php +0 -22
  203. package/lib/generators/laravel-panneau/templates/app/Schemas/Pages/Base.php +0 -36
  204. package/lib/generators/laravel-panneau/templates/resources/lang/en/panneau.php +0 -12
  205. package/lib/generators/laravel-panneau/templates/resources/lang/fr/panneau.php +0 -12
@@ -0,0 +1,29 @@
1
+ <?php
2
+
3
+ namespace App\Panneau\Http\Requests;
4
+
5
+ use Illuminate\Foundation\Http\FormRequest;
6
+
7
+ class UploadRequest extends FormRequest
8
+ {
9
+ /**
10
+ * Determine if the user is authorized to make this request.
11
+ *
12
+ * @return bool
13
+ */
14
+ public function authorize()
15
+ {
16
+ $user = $this->user();
17
+ return !is_null($user);
18
+ }
19
+
20
+ /**
21
+ * Get the validation rules that apply to the request.
22
+ *
23
+ * @return array
24
+ */
25
+ public function rules()
26
+ {
27
+ return [];
28
+ }
29
+ }
@@ -0,0 +1,39 @@
1
+ <?php
2
+
3
+ namespace App\Panneau\Http\Resources;
4
+
5
+ use Illuminate\Http\Resources\Json\JsonResource;
6
+ use App\Contracts\Resources\HasBlocks;
7
+ use Folklore\Http\Resources\LocalizedResource;
8
+ use App\Contracts\Resources\Blocks\Text as TextBlock;
9
+
10
+ class BlockResource extends JsonResource
11
+ {
12
+ /**
13
+ * Transform the resource into an array.
14
+ *
15
+ * @param \Illuminate\Http\Request $request
16
+ * @return array
17
+ */
18
+ public function toArray($request)
19
+ {
20
+ $type = $this->type();
21
+
22
+ return [
23
+ 'id' => $this->id(),
24
+ 'type' => $type,
25
+ 'blocks' => $this->when($this->resource instanceof HasBlocks, function () {
26
+ $blocks = $this->blocks();
27
+ return !is_null($blocks) ? new BlocksCollection($blocks) : [];
28
+ }),
29
+
30
+ $this->mergeWhen($this->resource instanceof TextBlock, function () {
31
+ return [
32
+ 'body' => new LocalizedResource(function ($locale) {
33
+ return $this->body($locale);
34
+ }),
35
+ ];
36
+ }),
37
+ ];
38
+ }
39
+ }
@@ -0,0 +1,8 @@
1
+ <?php
2
+
3
+ namespace App\Panneau\Http\Resources;
4
+
5
+ class BlocksCollection extends Collection
6
+ {
7
+ public $collects = BlockResource::class;
8
+ }
@@ -0,0 +1,56 @@
1
+ <?php
2
+
3
+ namespace App\Panneau\Http\Resources;
4
+
5
+ use Illuminate\Http\Resources\Json\JsonResource;
6
+ use App\Http\Resources\Medias\ImageResource;
7
+ use App\Contracts\Resources\Page;
8
+ use App\Contracts\Resources\HasBlocks;
9
+ use Folklore\Http\Resources\LocalizedResource;
10
+ use App\Contracts\Resources\Pages\Home as HomePage;
11
+
12
+ class PageResource extends JsonResource
13
+ {
14
+ /**
15
+ * Transform the resource into an array.
16
+ *
17
+ * @param \Illuminate\Http\Request $request
18
+ * @return array
19
+ */
20
+ public function toArray($request)
21
+ {
22
+ $locale = $request->locale();
23
+ $isPanneauIndex = $request->isPanneauIndex();
24
+
25
+ return [
26
+ 'id' => $this->id(),
27
+ 'type' => $this->type(),
28
+ 'published' => $this->published(),
29
+ 'title' => new LocalizedResource(function ($locale) {
30
+ return $this->title($locale);
31
+ }),
32
+ 'description' => new LocalizedResource(function ($locale) {
33
+ return $this->description($locale);
34
+ }),
35
+ 'slug' => new LocalizedResource(function ($locale) {
36
+ return $this->slug($locale);
37
+ }),
38
+ 'image' => !is_null($image) ? new ImageResource($image) : null,
39
+ 'parent' =>
40
+ !is_null($parent) && $parent instanceof Page
41
+ ? new ParentPageResource($parent)
42
+ : null,
43
+
44
+ $this->mergeWhen($this->resource instanceof HasBlocks, function () {
45
+ $blocks = $this->blocks();
46
+ return [
47
+ 'blocks' => !is_null($blocks) ? new BlocksCollection($blocks) : [],
48
+ ];
49
+ }),
50
+
51
+ $this->mergeWhen($this->resource instanceof HomePage, function () {
52
+ return [];
53
+ }),
54
+ ];
55
+ }
56
+ }
@@ -0,0 +1,10 @@
1
+ <?php
2
+
3
+ namespace App\Panneau\Http\Resources;
4
+
5
+ use Folklore\Http\Resources\Collection;
6
+
7
+ class PagesCollection extends Collection
8
+ {
9
+ public $collects = PageResource::class;
10
+ }
@@ -0,0 +1,24 @@
1
+ <?php
2
+
3
+ namespace App\Panneau\Http\Resources;
4
+
5
+ use Illuminate\Http\Resources\Json\JsonResource;
6
+
7
+ class UserResource extends JsonResource
8
+ {
9
+ /**
10
+ * Transform the resource into an array.
11
+ *
12
+ * @param \Illuminate\Http\Request $request
13
+ * @return array
14
+ */
15
+ public function toArray($request)
16
+ {
17
+ return [
18
+ 'id' => $this->id(),
19
+ 'name' => $this->name(),
20
+ 'email' => $this->email(),
21
+ 'role' => $this->role(),
22
+ ];
23
+ }
24
+ }
@@ -0,0 +1,48 @@
1
+ <?php
2
+
3
+ namespace App\Panneau;
4
+
5
+ use Illuminate\Support\ServiceProvider as BaseServiceProvider;
6
+ use Illuminate\Contracts\View\Factory as ViewFactory;
7
+ use Illuminate\Support\Facades\Gate;
8
+ use Panneau\Support\LocalizedField;
9
+ use Panneau\Support\Facade as Panneau;
10
+
11
+ class PanneauServiceProvider extends BaseServiceProvider
12
+ {
13
+ /**
14
+ * Register any application services.
15
+ *
16
+ * @return void
17
+ */
18
+ public function register()
19
+ {
20
+ Gate::policy(\Panneau\Panneau::class, \App\Panneau\Policies\PanneauPolicy::class);
21
+ }
22
+
23
+ /**
24
+ * Bootstrap any application services.
25
+ *
26
+ * @return void
27
+ */
28
+ public function boot()
29
+ {
30
+ LocalizedField::setLocalesResolver(function () {
31
+ return config('locale.locales');
32
+ });
33
+
34
+ $this->bootViews();
35
+ }
36
+
37
+ protected function bootViews()
38
+ {
39
+ $view = $this->app[ViewFactory::class];
40
+
41
+ // Panneau
42
+ $view->composer('panneau::app', \App\Panneau\Composers\AppComposer::class);
43
+
44
+ Panneau::serving(function () use ($view) {
45
+ $view->composer('errors::*', \App\Panneau\Composers\AppComposer::class);
46
+ });
47
+ }
48
+ }
@@ -0,0 +1,32 @@
1
+ <?php
2
+
3
+ namespace App\Panneau\Policies;
4
+
5
+ use Illuminate\Auth\Access\HandlesAuthorization;
6
+ use App\Contracts\Resources\User;
7
+
8
+ class PanneauPolicy
9
+ {
10
+ use HandlesAuthorization;
11
+
12
+ /**
13
+ * Create a new policy instance.
14
+ *
15
+ * @return void
16
+ */
17
+ public function __construct()
18
+ {
19
+ //
20
+ }
21
+
22
+ /**
23
+ * Determine if panneau can be viewed by the user.
24
+ *
25
+ * @param \App\User $user
26
+ * @return bool
27
+ */
28
+ public function view(User $user)
29
+ {
30
+ return $user->role() === 'admin';
31
+ }
32
+ }
@@ -0,0 +1,110 @@
1
+ <?php
2
+
3
+ namespace App\Panneau\Resources\Blocks;
4
+
5
+ use Panneau\Contracts\ResourceType;
6
+ use Panneau\Contracts\Repository;
7
+ use Panneau\Contracts\Resource;
8
+ use Panneau\Contracts\ResourceItem;
9
+ use App\Panneau\Fields\Blocks;
10
+ use JsonSerializable;
11
+ use Illuminate\Contracts\Support\Arrayable;
12
+ use Illuminate\Contracts\Support\Jsonable;
13
+
14
+ class BlockWithBlocks implements ResourceType, Arrayable, Jsonable
15
+ {
16
+ protected $type;
17
+
18
+ protected $depth;
19
+
20
+ public function __construct(ResourceType $type, $depth)
21
+ {
22
+ $this->type = $type;
23
+ $this->depth = $depth;
24
+ }
25
+
26
+ public function currentDepth(): int
27
+ {
28
+ return $this->depth;
29
+ }
30
+
31
+ public function id(): string
32
+ {
33
+ return $this->type->id();
34
+ }
35
+
36
+ public function name(): string
37
+ {
38
+ return $this->type->name();
39
+ }
40
+
41
+ public function fields(): array
42
+ {
43
+ return collect($this->type->fields())
44
+ ->map(function ($field) {
45
+ return $field instanceof Blocks ? $field->currentDepth($this->depth) : $field;
46
+ })
47
+ ->toArray();
48
+ }
49
+
50
+ public function resource(): Resource
51
+ {
52
+ return $this->type->resource();
53
+ }
54
+
55
+ public function settings(): ?array
56
+ {
57
+ return $this->type->settings();
58
+ }
59
+
60
+ public function makeRepository(): ?Repository
61
+ {
62
+ return $this->type->makeRepository();
63
+ }
64
+
65
+ public function makeJsonResource(ResourceItem $item): ?JsonSerializable
66
+ {
67
+ return $this->type->makeJsonResource($item);
68
+ }
69
+
70
+ public function makeJsonCollection($resources): ?JsonSerializable
71
+ {
72
+ return $this->type->makeJsonCollection($resources);
73
+ }
74
+
75
+ public function toArray()
76
+ {
77
+ $id = $this->id();
78
+ $data = [
79
+ 'id' => $this->id(),
80
+ 'name' => $this->name(),
81
+ 'fields' => collect($this->resource()->fields())
82
+ ->filter(function ($field) use ($id) {
83
+ $excepTypes = $field->exceptTypes();
84
+ $onlyTypes = $field->onlyTypes();
85
+ return (is_null($excepTypes) || !in_array($id, $excepTypes)) &&
86
+ (is_null($onlyTypes) || in_array($id, $onlyTypes));
87
+ })
88
+ ->merge($this->fields())
89
+ ->values()
90
+ ->toArray(),
91
+ ];
92
+
93
+ $settings = $this->settings();
94
+ if (isset($settings)) {
95
+ $data['settings'] = $settings;
96
+ }
97
+
98
+ return $data;
99
+ }
100
+
101
+ public function jsonSerialize()
102
+ {
103
+ return $this->type->jsonSerialize();
104
+ }
105
+
106
+ public function toJson($options = 0)
107
+ {
108
+ return $this->type->toJson($options);
109
+ }
110
+ }
@@ -0,0 +1,27 @@
1
+ <?php
2
+
3
+ namespace App\Panneau\Resources\Blocks;
4
+
5
+ use Panneau\Support\ResourceType;
6
+ use Panneau\Fields\HtmlLocalized;
7
+
8
+ class TextBlock extends ResourceType
9
+ {
10
+ public function id(): string
11
+ {
12
+ return 'text';
13
+ }
14
+
15
+ public function name(): string
16
+ {
17
+ return trans('panneau.blocks_text');
18
+ }
19
+
20
+ public function fields(): array
21
+ {
22
+ return [
23
+ HtmlLocalized::make('body')
24
+ ->withTransLabel('panneau.fields.body'),
25
+ ];
26
+ }
27
+ }
@@ -0,0 +1,42 @@
1
+ <?php
2
+
3
+ namespace App\Panneau\Resources;
4
+
5
+ use Panneau\Support\Resource;
6
+
7
+ class Blocks extends Resource
8
+ {
9
+ public static $repository = \App\Contracts\Repositories\Blocks::class;
10
+
11
+ public static $jsonResource = \App\Panneau\Http\Resources\BlockResource::class;
12
+
13
+ public static $jsonCollection = \App\Panneau\Http\Resources\BlocksCollection::class;
14
+
15
+ public static $settings = [
16
+ 'hideInNavbar' => true,
17
+ ];
18
+
19
+ public static $types = [\App\Panneau\Resources\Blocks\TextBlock::class];
20
+
21
+ public function name(): string
22
+ {
23
+ return trans('panneau.blocks.name');
24
+ }
25
+
26
+ public function index(): ?array
27
+ {
28
+ return [
29
+ 'columns' => [
30
+ [
31
+ 'id' => 'type',
32
+ 'label' => 'Type',
33
+ ],
34
+ ],
35
+ ];
36
+ }
37
+
38
+ public function fields(): array
39
+ {
40
+ return [];
41
+ }
42
+ }
@@ -0,0 +1,28 @@
1
+ <?php
2
+
3
+ namespace App\Panneau\Resources\Pages;
4
+
5
+ use Panneau\Support\ResourceType;
6
+ use App\Panneau\Fields\Blocks;
7
+ use App\Panneau\Fields\Page as PageField;
8
+
9
+ class Page extends ResourceType
10
+ {
11
+ public function id(): string
12
+ {
13
+ return 'page';
14
+ }
15
+
16
+ public function name(): string
17
+ {
18
+ return trans('panneau.pages_page');
19
+ }
20
+
21
+ public function fields(): array
22
+ {
23
+ return [
24
+ PageField::make('parent')->withTransLabel('panneau.fields.parent'),
25
+ Blocks::make('blocks')->withTransLabel('panneau.fields.blocks'),
26
+ ];
27
+ }
28
+ }
@@ -0,0 +1,92 @@
1
+ <?php
2
+ namespace App\Panneau\Resources;
3
+
4
+ use App\Panneau\Fields\ImageLocalized;
5
+ use App\Panneau\Fields\PageSlugLocalized;
6
+ use Panneau\Fields\TextLocalized;
7
+ use Panneau\Fields\Toggle;
8
+ use Panneau\Support\Resource;
9
+
10
+ class Pages extends Resource
11
+ {
12
+ public static $repository = \App\Contracts\Repositories\Pages::class;
13
+
14
+ public static $controller = \App\Panneau\Http\Controllers\PagesController::class;
15
+
16
+ public static $jsonResource = \App\Panneau\Http\Resources\PageResource::class;
17
+
18
+ public static $jsonCollection = \App\Panneau\Http\Resources\PagesCollection::class;
19
+
20
+ public static $types = [\App\Panneau\Resources\Pages\Page::class];
21
+
22
+ public static $settings = [
23
+ 'hideInNavbar' => false,
24
+ 'indexIsPaginated' => true,
25
+ 'canCreate' => true,
26
+ ];
27
+
28
+ public function name(): string
29
+ {
30
+ return trans('panneau.pages.name');
31
+ }
32
+
33
+ public function index(): ?array
34
+ {
35
+ return [
36
+ 'columns' => [
37
+ [
38
+ 'label' => trans('panneau.columns.title'),
39
+ 'component' => 'text-localized',
40
+ 'path' => 'title',
41
+ ],
42
+ [
43
+ 'id' => 'type',
44
+ 'label' => 'Type',
45
+ 'component' => 'label',
46
+ 'labels' => $this->getTypes()->mapWithKeys(function ($type) {
47
+ return [
48
+ $type->id() => $type->name(),
49
+ ];
50
+ }),
51
+ ],
52
+ [
53
+ 'id' => 'parent',
54
+ 'label' => trans('panneau.columns.parent_page'),
55
+ 'path' => 'parent.title.fr',
56
+ ],
57
+ 'published',
58
+ [
59
+ 'id' => 'actions',
60
+ 'actions' => ['show', 'edit', 'delete'],
61
+ ],
62
+ ],
63
+ 'filters' => [
64
+ [
65
+ 'name' => 'search',
66
+ 'component' => 'search',
67
+ 'placeholder' => trans('panneau.filters.search'),
68
+ ],
69
+ ],
70
+ ];
71
+ }
72
+
73
+ public function fields(): array
74
+ {
75
+ return [
76
+ Toggle::make('published')
77
+ ->withTransLabel('panneau.fields.published')
78
+ ->hideInForm(),
79
+ TextLocalized::make('title')->withTransLabel('panneau.fields.title'),
80
+ PageSlugLocalized::make('slug')
81
+ ->isDisabled()
82
+ ->withTransLabel('panneau.fields.url'),
83
+ TextLocalized::make('description')
84
+ ->isRequired()
85
+ ->isTextarea()
86
+ ->withTransLabel('panneau.fields.description_short'),
87
+ ImageLocalized::make('image')
88
+ ->withTransLabel('panneau.fields.image')
89
+ ->withButton(),
90
+ ];
91
+ }
92
+ }
@@ -0,0 +1,57 @@
1
+ <?php
2
+
3
+ namespace App\Panneau\Resources;
4
+
5
+ use Panneau\Support\Resource;
6
+ use Panneau\Fields\Text;
7
+ use Panneau\Fields\Email;
8
+ use Panneau\Fields\Password;
9
+ use Panneau\Fields\Select;
10
+
11
+ class Users extends Resource
12
+ {
13
+ public static $repository = \App\Contracts\Repositories\Users::class;
14
+
15
+ public static $controller = \App\Panneau\Http\Controllers\UsersController::class;
16
+
17
+ public static $jsonResource = \App\Panneau\Http\Resources\UserResource::class;
18
+
19
+ public static $jsonCollection = \App\Panneau\Http\Resources\UsersCollection::class;
20
+
21
+ public static $settings = [
22
+ 'hideInNavbar' => false,
23
+ 'indexIsPaginated' => true,
24
+ 'canCreate' => true,
25
+ ];
26
+
27
+ public function name(): string
28
+ {
29
+ return trans('panneau.users.name');
30
+ }
31
+
32
+ public function index(): ?array
33
+ {
34
+ return [
35
+ 'columns' => ['name', 'email', 'role'],
36
+ ];
37
+ }
38
+
39
+ public function fields(): array
40
+ {
41
+ return [
42
+ Text::make('name')->withTransLabel('panneau.fields.name'),
43
+ Email::make('email')->withTransLabel('panneau.fields.email'),
44
+ Password::make('password')->withTransLabel('panneau.fields.password'),
45
+ Select::make('role')
46
+ ->withTransLabel('panneau.fields.role')
47
+ ->withOptions([
48
+ [
49
+ 'value' => 'admin',
50
+ 'label' => trans('panneau.roles.admin'),
51
+ ],
52
+ ])
53
+ ->withoutReset()
54
+ ->withDefaultValue('guest'),
55
+ ];
56
+ }
57
+ }
@@ -0,0 +1,42 @@
1
+ <?php
2
+
3
+ namespace App\Repositories;
4
+
5
+ use Folklore\Repositories\Pages as BasePages;
6
+ use App\Contracts\Repositories\Pages as PagesContract;
7
+ use Folklore\Models\Page as PageBaseModel;
8
+ use App\Models\Page as PageModel;
9
+ use App\Contracts\Resources\Page as PageContract;
10
+
11
+ class Pages extends BasePages implements PagesContract
12
+ {
13
+ protected function newModel(): PageBaseModel
14
+ {
15
+ return new PageModel();
16
+ }
17
+
18
+ public function findById(string $id): ?PageContract
19
+ {
20
+ return parent::findById($id);
21
+ }
22
+
23
+ public function findByHandle(string $handle): ?PageContract
24
+ {
25
+ return parent::findByHandle($handle);
26
+ }
27
+
28
+ public function findBySlug(string $slug, string $locale = null): ?PageContract
29
+ {
30
+ return parent::findBySlug($slug, $locale);
31
+ }
32
+
33
+ public function create(array $data): PageContract
34
+ {
35
+ return parent::create($data);
36
+ }
37
+
38
+ public function update(string $id, array $data): ?PageContract
39
+ {
40
+ return parent::update($id, $data);
41
+ }
42
+ }
@@ -0,0 +1,14 @@
1
+ <?php
2
+
3
+ namespace App\Resources\Pages;
4
+
5
+ use Folklore\Resources\Block;
6
+ use App\Contracts\Resources\Blocks\Text as TextBlockContract;
7
+
8
+ class TextBlock extends Block implements TextBlockContract
9
+ {
10
+ public function body(string $locale): ?string
11
+ {
12
+ return data_get($this->data, 'body.' . $locale);
13
+ }
14
+ }
@@ -0,0 +1,10 @@
1
+ <?php
2
+
3
+ namespace App\Resources;
4
+
5
+ use Folklore\Resources\Page as BasePage;
6
+
7
+ class Page extends BasePage
8
+ {
9
+
10
+ }
@@ -0,0 +1,10 @@
1
+ <?php
2
+
3
+ namespace App\Resources\Pages;
4
+
5
+ use App\Resources\Page;
6
+ use App\Contracts\Resources\Pages\Home as HomePageContract;
7
+
8
+ class HomePage extends Page implements HomePageContract
9
+ {
10
+ }