diff --git a/app/Http/Controllers/API/SettingsAPIController.php b/app/Http/Controllers/API/SettingsAPIController.php
index 442dafd..d366b3b 100644
--- a/app/Http/Controllers/API/SettingsAPIController.php
+++ b/app/Http/Controllers/API/SettingsAPIController.php
@@ -30,4 +30,11 @@ class SettingsAPIController extends Controller
$result = $this->settings->sync($body);
return response()->json($result)->header('Content-Type', 'application/json');
}
+
+ public function navSync(Request $request)
+ {
+ $body = json_decode($request->getContent());
+ $result = $this->settings->navSync($body);
+ return response()->json($result)->header('Content-Type', 'application/json');
+ }
}
diff --git a/app/Http/Controllers/Dash/IndexController.php b/app/Http/Controllers/Dash/IndexController.php
index 83e27f1..09563ca 100644
--- a/app/Http/Controllers/Dash/IndexController.php
+++ b/app/Http/Controllers/Dash/IndexController.php
@@ -84,6 +84,11 @@ class IndexController extends Controller
]);
}
+ public function navigation()
+ {
+ return view('back.navigation', $this->sort->navigation());
+ }
+
public function settings()
{
return view('back.settings', $this->sort->settings());
diff --git a/app/Providers/FipamoServiceProvider.php b/app/Providers/FipamoServiceProvider.php
index c241733..dece52e 100644
--- a/app/Providers/FipamoServiceProvider.php
+++ b/app/Providers/FipamoServiceProvider.php
@@ -26,11 +26,11 @@ class FipamoServiceProvider extends ServiceProvider
{
//services
$this->app->bind(SettingsService::class, function ($app) {
- return new SettingsService(new DocService());
+ return new SettingsService(new DocService(), new ContentService());
});
$this->app->bind(AuthService::class, function ($app) {
- return new AuthService(new SettingsService(new DocService()));
+ return new AuthService(new SettingsService(new DocService(), new ContentService()));
});
$this->app->bind(ContentService::class, function ($app) {
@@ -38,7 +38,7 @@ class FipamoServiceProvider extends ServiceProvider
});
$this->app->bind(ThemeService::class, function ($app) {
- return new ThemeService(new SettingsService(new DocService()));
+ return new ThemeService(new SettingsService(new DocService(), new ContentService()));
});
$this->app->bind(PaginateService::class, function ($app) {
@@ -60,29 +60,29 @@ class FipamoServiceProvider extends ServiceProvider
$this->app->bind(RenderService::class, function ($app) {
return new RenderService(
new SortingService(
- new SettingsService(new DocService()),
+ new SettingsService(new DocService(), new ContentService()),
new ContentService(),
new StringService(),
- new ThemeService(new SettingsService(new DocService()))
+ new ThemeService(new SettingsService(new DocService(), new ContentService()))
),
- new SettingsService(new DocService()),
+ new SettingsService(new DocService(), new ContentService()),
new ContentService(),
);
});
$this->app->bind(SortingService::class, function ($app) {
return new SortingService(
- new SettingsService(new DocService()),
+ new SettingsService(new DocService(), new ContentService()),
new ContentService(),
new StringService(),
- new ThemeService(new SettingsService(new DocService()))
+ new ThemeService(new SettingsService(new DocService(), new ContentService()))
);
});
$this->app->bind(AssetService::class, function ($app) {
return new AssetService(
new ThemeService(
- new SettingsService(new DocService())
+ new SettingsService(new DocService(), new ContentService())
)
);
});
diff --git a/app/Repositories/PageRepository.php b/app/Repositories/PageRepository.php
index cf71f32..a7678f9 100644
--- a/app/Repositories/PageRepository.php
+++ b/app/Repositories/PageRepository.php
@@ -67,7 +67,6 @@ class PageRepository implements PageRepositoryInterface
public function update($page)
{
return $this->editPage($page, $this->pages->where('uuid', $page->uuid)->first(), 'update');
- //hande result of page update
}
public function getGroup($num, $limit, $sort = "all")
@@ -137,7 +136,7 @@ class PageRepository implements PageRepositoryInterface
//upadte settings if needed
$body->path = $path;
- //Settings::updateMenu($body);
+ $this->settings->updateMenu($body);
//Settings::updateTags();
// if new page added, update current index in Settings file
if ($task == 'create') {
diff --git a/app/Services/SettingsService.php b/app/Services/SettingsService.php
index 4e5e475..ad9f13f 100644
--- a/app/Services/SettingsService.php
+++ b/app/Services/SettingsService.php
@@ -2,18 +2,24 @@
namespace App\Services;
+use Carbon\Carbon;
+
+use function _\find;
+
class SettingsService
{
protected $settings;
protected $folks;
protected $tags;
protected $docs;
+ protected $contents;
- public function __construct(DocService $docService)
+ public function __construct(DocService $docService, ContentService $contentService)
{
- $this->folks = json_decode(file_get_contents(env('FOLKS_PATH')), true);
- $this->tags = json_decode(file_get_contents(env('TAGS_PATH')), true);
- $this->docs = $docService;
+ $this->folks = json_decode(file_get_contents(env('FOLKS_PATH')), true);
+ $this->tags = json_decode(file_get_contents(env('TAGS_PATH')), true);
+ $this->docs = $docService;
+ $this->contents = $contentService;
}
protected function loadSettings()
@@ -68,6 +74,29 @@ class SettingsService
$this->docs->writeSettings($this->settings);
}
+ public function updateMenu($body)
+ {
+ $settings = $this->loadSettings();
+ //$menu = $settings["menu"];
+ $item = [
+ 'title' => $body->title,
+ 'id' => $body->id,
+ 'uuid' => $body->uuid,
+ 'slug' => $body->slug,
+ 'path' => $body->path,
+ ];
+ if ($body->menu == 'true') {
+ if (!find($settings['menu'], ['uuid' => $item['uuid']])) {
+ array_push($settings['menu'], $item);
+ }
+ } else {
+ if (find($settings['menu'], ['uuid' => $item['uuid']])) {
+ pull($settings['menu'], $item);
+ }
+ }
+ $this->docs->writeSettings($settings);
+ }
+
public function sync($data)
{
//dd($data->global->renderOnSave);
@@ -91,4 +120,75 @@ class SettingsService
return $this->docs->writeSettings($settings);
}
+
+ public function navSync($data)
+ {
+ $settings = $this->loadSettings();
+ $pages = $this->contents->loadAllPages();
+ $remove = $data->remove;
+ $result = [];
+ //if remove contains id, find nav item page and set menu to false
+ if ($remove != null || $remove != '') {
+ $page = $pages->where('uuid', $remove)->first();
+ $page['menu'] = 'false';
+ $page['published']
+ ? ($page['published'] = 'true')
+ : ($page['published'] = 'false');
+ $page['featured']
+ ? ($page['featured'] = 'true')
+ : ($page['featured'] = 'false');
+ $page['deleted']
+ ? ($page['deleted'] = 'true')
+ : ($page['deleted'] = 'false');
+ $updated = Carbon::now();
+ $created = new Carbon($page['rawCreated']);
+ $page['created'] = $created->format("Y-m-d\TH:i:sP");
+ $page['updated'] = $updated->format("Y-m-d\TH:i:sP");
+
+ if ($page['layout'] == 'index') {
+ $writePath = '../content/pages/start/index.md';
+ } else {
+ $writePath = '../content/pages/' . $page['path'] . '/' . $page['slug'] . '.md';
+ }
+ try {
+ $object = (object) $page;
+ $object->imageList = $page['feature'];
+ $object->fileList = $page['files'];
+ $this->docs::writePages('write', $page['path'], $writePath, $this->docs::objectToMD($object));
+ } catch (\Exception $e) {
+ $result = [
+ 'message' => 'Page Was Not Updated. Be cool ',
+ 'type' => 'pageUpdateError',
+ 'error' => $e->getMessage(),
+ ];
+ return $result;
+ }
+ }
+
+ $settings['menu'] = [];
+ $items = $data->menu;
+ foreach ($items as $item) {
+ array_push($settings['menu'], [
+ 'title' => $item->title,
+ 'id' => $item->id,
+ 'uuid' => $item->uuid,
+ 'slug' => $item->slug,
+ 'path' => $item->path,
+ ]);
+ }
+ try {
+ $this->docs->writeSettings($settings);
+ $result = [
+ 'message' => 'Navigation updated. Very slick!',
+ 'type' => 'menuUpdated',
+ ];
+ } catch (\Exception $e) {
+ $result = [
+ 'message' => 'Navigation Update Error. It\'ll be ok!',
+ 'type' => 'menuUpdateError',
+ ];
+ };
+
+ return $result;
+ }
}
diff --git a/app/Services/SortingService.php b/app/Services/SortingService.php
index 80cb885..c9116b0 100644
--- a/app/Services/SortingService.php
+++ b/app/Services/SortingService.php
@@ -251,6 +251,17 @@ class SortingService
return $pageOptions;
}
+ public function navigation()
+ {
+ $pageOptions = [
+ 'title' => 'Edit Navigation',
+ 'status' => session('member') != '' ? true : false,
+ 'menu' => $this->settings->getMenu(),
+ ];
+
+ return $pageOptions;
+ }
+
public function settings()
{
$global = $this->settings->getGlobal();
diff --git a/public/assets/css/dash/icons.css b/public/assets/css/dash/icons.css
index 7e497c3..b29409b 100644
--- a/public/assets/css/dash/icons.css
+++ b/public/assets/css/dash/icons.css
@@ -7,6 +7,12 @@ svg[role="icon"] {
color: var(--secondary);
}
+svg#move-menu-item {
+ fill: var(--secondary-highlight);
+ top: 8px;
+ position: relative;
+}
+
button[data-render="true"] {
background: var(--primary);
}
diff --git a/public/assets/css/dash/navigation.css b/public/assets/css/dash/navigation.css
index 48d513d..d256d68 100644
--- a/public/assets/css/dash/navigation.css
+++ b/public/assets/css/dash/navigation.css
@@ -7,7 +7,7 @@ article[role="navigation"] {
article[role="navigation"] > section > div.nav-item {
display: block;
width: 98%;
- background: var(--white);
+ background: var(--secondary);
border-radius: 3px;
color: var(--secondary-highlight);
margin: 0 0 10px;
diff --git a/public/assets/scripts/dash/app/EditNav.js b/public/assets/scripts/dash/app/EditNav.js
new file mode 100644
index 0000000..c205ffc
--- /dev/null
+++ b/public/assets/scripts/dash/app/EditNav.js
@@ -0,0 +1,9 @@
+import Nav from './controllers/NavIndex.js';
+
+document.addEventListener(
+ 'DOMContentLoaded',
+ function () {
+ new Nav();
+ },
+ false
+);
diff --git a/public/assets/scripts/dash/app/controllers/NavIndex.js b/public/assets/scripts/dash/app/controllers/NavIndex.js
index 9ce29b1..6872fef 100644
--- a/public/assets/scripts/dash/app/controllers/NavIndex.js
+++ b/public/assets/scripts/dash/app/controllers/NavIndex.js
@@ -1,8 +1,8 @@
-import FipamoAdminAPI, { TASK_SYNC_NAV } from '../../libraries/FipamoAdminAPI';
-import NavActions from '../actions/NavActions';
-import * as DataEvent from '../events/DataEvent';
-import Notifications from '../ui/Notifications';
-import Sortable from 'sortablejs';
+import FipamoAdminAPI, { TASK_SYNC_NAV } from '../../libraries/FipamoAdminAPI.js';
+import NavActions from '../actions/NavActions.js';
+import * as DataEvent from '../events/DataEvent.js';
+import Notifications from '../ui/Notifications.js';
+import Sortable from '../vendor/sortable.core.esm.js';
const notify = new Notifications();
export default class NavIndex {
@@ -49,6 +49,7 @@ export default class NavIndex {
switch (e.target.id) {
case 'remove-item':
id = e.target.getAttribute('data-id');
+ console.log('object', e);
new NavActions().removeItem(id);
new NavActions().syncMenu().then(data => {
data.remove = e.target.getAttribute('data-uuid');
@@ -59,7 +60,7 @@ export default class NavIndex {
if (r.type == DataEvent.MENU_UPDATED) {
notify.alert(r.message, true);
} else {
- notify.alert(r.message, true);
+ notify.alert(r.message, false);
}
});
});
diff --git a/resources/views/back/navigation.blade.php b/resources/views/back/navigation.blade.php
new file mode 100644
index 0000000..7dda6a4
--- /dev/null
+++ b/resources/views/back/navigation.blade.php
@@ -0,0 +1,33 @@
+@extends('frame')
+
+@section('title', 'The Dash | Edit Navigation')
+
+@section('main-content')
+
+
+ @foreach($menu as $item)
+
+
+
+
+
+
+
+
+ @endforeach
+
+
+@endsection
+@section('scripting')
+
+ @endsection
diff --git a/routes/api.php b/routes/api.php
index dcc79b9..a7330fe 100644
--- a/routes/api.php
+++ b/routes/api.php
@@ -27,3 +27,4 @@ Route::post("/v1/files", [FileUploadAPIController::class, 'upload']);
//settings
Route::put("/v1/settings/publish", [SettingsAPIController::class, 'publish']);
Route::put("/v1/settings/sync", [SettingsAPIController::class, 'sync']);
+Route::put("/v1/settings/nav-sync", [SettingsAPIController::class, 'navSync']);
diff --git a/routes/web.php b/routes/web.php
index 3e5dfdd..7ec017d 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -31,6 +31,7 @@ Route::group(['prefix' => 'dashboard', 'middleware' => 'member.check'], function
Route::get("/pages/{pageFilter?}/{pageNum?}", [IndexController::class, 'book']);
Route::get("/page/{mode}/{uuid}", [IndexController::class, 'page']);
Route::get("/settings", [IndexController::class, 'settings']);
+ Route::get("/navigation", [IndexController::class, 'navigation']);
Route::get("/logout", [AuthController::class, 'exit']);
});