diff --git a/app/Http/Controllers/DashController.php b/app/Http/Controllers/DashController.php index 2b506d3..30bcea4 100644 --- a/app/Http/Controllers/DashController.php +++ b/app/Http/Controllers/DashController.php @@ -4,157 +4,71 @@ namespace App\Http\Controllers; use App\Interfaces\PageRepositoryInterface; use App\Interfaces\MemberRepositoryInterface; -use App\Services\Data\ThemeService; -use App\Services\Data\SortingService; +use App\Services\Assets\FileUploadService; +use Illuminate\Http\Request; class DashController extends Controller { protected PageRepositoryInterface $pages; protected MemberRepositoryInterface $member; - protected ThemeService $themes; - protected SortingService $sort; + protected FileUploadService $upload; public function __construct( PageRepositoryInterface $pageRepository, MemberRepositoryInterface $memberRepo, - ThemeService $themeService, - SortingService $sortingService + FileUploadService $fileUploadService, ) { $this->pages = $pageRepository; $this->member = $memberRepo; - $this->themes = $themeService; - $this->sort = $sortingService; + $this->upload = $fileUploadService; } //--- // GET //--- - public function init($second, $third, $fourth) - { - switch ($second) { - case 'settings': - return $this->settings(); - break; - case 'navigation': - return $this->navigation(); - break; - case 'pages': - ($third == null) ? $third = 'all' : $third = $third; - ($fourth == null) ? $fourth = 1 : $fourth = $fourth; - return $this->book($third, $fourth); - break; - case 'page': - return $this->page($third, $fourth); - break; - case 'logout': - return $this->logout(); - break; - default: - return $this->start(); - break; - } - } - public function start() { $result = []; + if ($this->member::status()) { $result = $this->pages->getGroup(1, 4); } - return view('back.start', [ - "status" => $this->member::status(), - "result" => $result, - "title" => "Start" - ]); - } - - public function book($pageFilter = 'all', $pageNum = 1) - { - $result = []; if ($this->member::status()) { - $result = $this->pages->getGroup($pageNum, 4, $pageFilter); - } - return view('back.book', [ - "status" => $this->member::status(), - "result" => $result, - "currentPage" => $pageNum, - "title" => "Pages" - ]); - } - - public function page($mode, $uuid) - { - $title; - $page = []; - $views = []; - $mode == 'edit' ? $page = $this->pages->getByUuid($uuid) : $page = []; - $mode == 'edit' ? $title = 'Edit Page' : $title = 'Add New'; - $mode == 'edit' ? $views = $this->themes->getCustomViews($page['layout']) : $views[] = 'page'; - - //just a patch for now to get this out of the template - if ($mode == 'edit') { - $id = $page['id']; - $uuid = $page['uuid']; - $slug = $page['slug']; - $feature = $page['feature']; - $layout = $page['layout']; - $tags = $page['tags']; - $content = $page['content']; - $date = $page['created']; - $updated = $page['updated']; - $media = $page['media']; - $files = $page['docs']; - $editTitle = $page['title']; + return view('back.start', [ + "status" => $this->member::status(), + "result" => $result, + "title" => "Start" + ]); } else { - $id = ""; - $uuid = ""; - $slug = ""; - $feature = ""; - $layout = ""; - $tags = ""; - $content = ""; - $date = ""; - $updated = ""; - $media = ""; - $files = ""; - $editTitle = ""; - }; - - return view('back.page', [ - "status" => $this->member::status(), - "mode" => $mode, - "page" => $page, - "views" => $views, - "id" => $id, - "uuid" => $uuid, - "slug" => $slug, - "feature" => $feature, - "layout" => $layout, - "tags" => $tags, - "content" => $content, - "date" => $date, - "updated" => $updated, - "media" => $media, - "files" => $files, - "title" => urldecode($title), - "editTitle" => urldecode($editTitle), - ]); - } - - public function navigation() - { - return view('back.navigation', $this->sort->navigation()); - } - - public function settings() - { - return view('back.settings', $this->sort->settings()); + return view('back.login', [ + "status" => $this->member::status(), + "title" => "Hi!" + ]); + } } //--- // POST //--- + public function uploads(Request $request) + { + $result = $result = $this->upload->handleFile($request); + //update configs for specfic uploads + switch ($request['source']) { + case 'avatar-upload': + $member = []; + $member = session('member'); + $member['avatar'] = $result['filePath']; + $member = (object) $member; + $this->member->update($member); + break; + case 'background-upload': + $this->settings->updateGlobalData('background', $result['filePath']); + break; + } + return $result; + } //--- // PUT @@ -167,7 +81,7 @@ class DashController extends Controller public function login() { if ($this->member::status()) { - return redirect('dashboard'); + return redirect('dashboard/start'); } else { return view('back.login', [ "status" => $this->member::status(), diff --git a/app/Http/Controllers/FrontController.php b/app/Http/Controllers/FrontController.php index 2deef06..d17de85 100644 --- a/app/Http/Controllers/FrontController.php +++ b/app/Http/Controllers/FrontController.php @@ -6,6 +6,9 @@ use App\Interfaces\PageRepositoryInterface; use App\Services\Assets\AssetService; use App\Services\Data\SettingsService; use App\Services\Data\SortingService; +use App\Services\Upkeep\InitService; +use App\Http\Controllers\DashController; +use Illuminate\Http\Request; use function _\find; @@ -15,52 +18,95 @@ class FrontController extends Controller protected PageRepositoryInterface $pages; protected AssetService $assets; protected SortingService $sort; + protected $init; + protected $dash; public function __construct( PageRepositoryInterface $pageRepository, SettingsService $settingsService, AssetService $assetService, SortingService $sortService, + InitService $initService, + DashController $dashController, ) { $this->pages = $pageRepository; $this->settings = $settingsService; $this->assets = $assetService; $this->sort = $sortService; + $this->init = $initService; + $this->dash = $dashController; } - //REFACTOR: there is some method overlap between index and pages, so that needs to be addressed - public function index($first = 00, $second = 00, $third = 00) + public function start($one = 00, $two = 00, $three = 00) { $global = $this->settings->getGlobal(); $currentTheme = $this->assets->getCurrentTheme(); $template; $pageData = []; $pages = $this->pages->getAll(); + //weird bug where the whole url is being passed with optional params + //for now, just split it manually and set it to the vars used + + $paths = explode('/', $one); + if (isset($paths[0])) { + $one = $paths[0]; + } + if (isset($paths[1])) { + $two = $paths[1]; + } + if (isset($paths[2])) { + $three = $paths[2]; + } + //check if configs are present if (file_exists(env('FOLKS_PATH')) && file_exists(env('SETTINGS_PATH'))) { if ($global['dynamicRender'] == 'true') { - if (is_numeric($first)) { - if ($first == 00 || !isset($first)) { - $page = $pages->where('id', 1)->first(); - $pageData = $this->sort->page($page, false); - $template = $currentTheme . '.index'; - } else { - $page = $this->pages->getBySlug($third); - $pageData = $this->sort->page($page, false); - $template = $currentTheme . '.' . $page['layout']; - } - } else { - if ($first == null || $first == '') { + if (is_numeric($one)) { + if ($one == 00 || !isset($one)) { $page = $pages->where('id', 0)->first(); $pageData = $this->sort->page($page, false); $template = $currentTheme . '.index'; } else { - $page = $this->pages->getBySlug($first); + $page = $this->pages->getBySlug($three); $pageData = $this->sort->page($page, false); $template = $currentTheme . '.' . $page['layout']; } + } else { + if ($one == null || $one == '') { + $page = $pages->where('id', 0)->first(); + $pageData = $this->sort->page($page, false); + $template = $currentTheme . '.index'; + } else { + if ($one == 'archives' || $one == 'archive' || $one == 'tags') { + $currentTheme = $this->assets->getCurrentTheme(); + switch ($one) { + case 'archive': + case 'archives': + $template = $currentTheme . '.archive'; + $pageData = $this->sort->archive(false); + break; + case 'tags': + $template = $currentTheme . '.tags'; + $tags = $this->sort->tags(false); + $tagData = find($tags['tags'], ['tag_name' => $two]); + $pageData = [ + 'theme' => $currentTheme, // for theme kit + 'title' => 'Pages Tagged as ' . $two, + 'dynamicRender' => $tags['dynamicRender'], + 'info' => $tags['info'], + 'menu' => $tags['menu'], + 'pages' => $tagData['pages'], + 'media' => $tags['media'], + ]; + break; + } + } else { + $page = $this->pages->getBySlug($one); + $pageData = $this->sort->page($page, false); + $template = $currentTheme . '.' . $page['layout']; + } + } } - return view($template, $pageData); } else { if (is_file('../public/index.html')) { @@ -74,30 +120,18 @@ class FrontController extends Controller } } - public function page($first = 00, $second = 00, $third = 00) + //setup up a new site or restore from back up + public function init($task, Request $request) { - $currentTheme = $this->assets->getCurrentTheme(); - switch ($first) { - case 'archive': - case 'archives': - $template = $currentTheme . '.archive'; - $pageData = $this->sort->archive(); + $result = []; + switch ($task) { + case 'fresh': + $result = $this->init->fresh(json_decode($request->getContent())); break; - case 'tags': - $template = $currentTheme . '.tags'; - $tags = $this->sort->tags(false); - $tagData = find($tags['tags'], ['tag_name' => $second]); - $pageData = [ - 'theme' => $currentTheme, // for theme kit - 'title' => 'Pages Tagged as ' . $second, - 'dynamicRender' => $tags['dynamicRender'], - 'info' => $tags['info'], - 'menu' => $tags['menu'], - 'pages' => $tagData['pages'], - 'media' => $tags['media'], - ]; + case 'restore': + $result = $this->init->restore($request); break; } - return view($template, $pageData); + return response()->json($result)->header('Content-Type', 'application/json'); } } diff --git a/app/Http/Controllers/PageController.php b/app/Http/Controllers/PageController.php new file mode 100644 index 0000000..b9c9735 --- /dev/null +++ b/app/Http/Controllers/PageController.php @@ -0,0 +1,147 @@ +page = $pageRepo; + $this->member = $memberRepo; + $this->themes = $themeService; + } + + //--- + // GET Actions + //--- + + public function start(string $one = 'all', string $two = '1') + { + //checks mode to see what needs to get loaded + switch ($one) { + case "edit": + case "add": + return $this->page($one, $two); + break; + + default: + return $this->book($one, $two); + break; + } + } + + private function page($mode, $uuid) + { + $title; + $page = []; + $views = []; + $mode == 'edit' ? $page = $this->page->getByUuid($uuid) : $page = []; + $mode == 'edit' ? $title = 'Edit Page' : $title = 'Add New'; + $mode == 'edit' ? $views = $this->themes->getCustomViews($page['layout']) : $views[] = 'page'; + + //just a patch for now to get this out of the template + if ($mode == 'edit') { + $id = $page['id']; + $uuid = $page['uuid']; + $slug = $page['slug']; + $feature = $page['feature']; + $layout = $page['layout']; + $tags = $page['tags']; + $content = $page['content']; + $date = $page['created']; + $updated = $page['updated']; + $media = $page['media']; + $files = $page['docs']; + $editTitle = $page['title']; + } else { + $id = ""; + $uuid = ""; + $slug = ""; + $feature = ""; + $layout = ""; + $tags = ""; + $content = ""; + $date = ""; + $updated = ""; + $media = ""; + $files = ""; + $editTitle = ""; + }; + + return view('back.page', [ + "status" => $this->member::status(), + "mode" => $mode, + "page" => $page, + "views" => $views, + "id" => $id, + "uuid" => $uuid, + "slug" => $slug, + "feature" => $feature, + "layout" => $layout, + "tags" => $tags, + "content" => $content, + "date" => $date, + "updated" => $updated, + "media" => $media, + "files" => $files, + "title" => urldecode($title), + "editTitle" => urldecode($editTitle), + ]); + } + + private function book($pageFilter, $pageNum) + { + $result = []; + if ($this->member::status()) { + $result = $this->page->getGroup($pageNum, 4, $pageFilter); + } + return view('back.book', [ + "status" => $this->member::status(), + "result" => $result, + "currentPage" => $pageNum, + "title" => "Pages" + ]); + } + + //--- + // POST Actions + //--- + public function create(Request $request) + { + $body = json_decode($request->getContent()); + $result = $this->page->create($body); + return response()->json($result)->header('Content-Type', 'application/json'); + } + + //--- + // PUT Actions + //--- + public function write(Request $request) + { + $body = json_decode($request->getContent()); + $result = $this->page->update($body); + return response()->json($result)->header('Content-Type', 'application/json'); + } + + //--- + // DELETE Actions + //--- + public function delete(Request $request) + { + $body = json_decode($request->getContent()); + $result = $this->page->delete($body); + return response()->json($result)->header('Content-Type', 'application/json'); + } +} diff --git a/app/Http/Controllers/RouteDeleteController.php b/app/Http/Controllers/RouteDeleteController.php deleted file mode 100644 index 857ad22..0000000 --- a/app/Http/Controllers/RouteDeleteController.php +++ /dev/null @@ -1,29 +0,0 @@ -page = $pageRepo; - } - - public function handleRequest(Request $request) - { - $path = explode('/', $request->path()); - switch ($path[0]) { - case 'page': - $body = json_decode($request->getContent()); - $result = $this->page->delete($body); - return response()->json($result)->header('Content-Type', 'application/json'); - break; - } - } -} diff --git a/app/Http/Controllers/RouteGetController.php b/app/Http/Controllers/RouteGetController.php deleted file mode 100644 index 0c53be9..0000000 --- a/app/Http/Controllers/RouteGetController.php +++ /dev/null @@ -1,91 +0,0 @@ -dash = $dashController; - $this->gate = $authController; - $this->theme = $themeController; - $this->front = $frontController; - $this->member = $memberRepo; - $this->settings = $settingsService; - } - - public function handleRequest($first = null, $second = null, $third = null, $fourth = null) - { - if (isset($first) && !is_numeric($first)) { - switch ($first) { - case 'dashboard': - if ($this->member::status()) { - return $this->dash->init($second, $third, $fourth); - } else { - return $this->dash->login(); - } - break; - case 'theme': - if ($this->member::status()) { - if (isset($second)) { - return $this->theme->getView($third, $fourth); - } else { - return $this->theme->start(); - } - } else { - return $this->dash->login(); - } - break; - case 'tags': - case 'archives': - return $this->front->page($first, $second, $third); - break; - case 'backup': - return $this->downloadBackup($second); - break; - default: - return $this->front->index($first, $second, $third); - break; - } - } else { - return $this->front->index($first, $second, $third); - } - } - - private function downloadBackup($type) - { - if ($this->member::status()) { - $latest = ''; - $file = ''; - if ($type == 'content-download') { - $latest = $this->settings->getGlobal()['last_content_backup']; - $file = 'backup-content-' . $latest . '.zip'; - } else { - $latest = $this->settings->getGlobal()['last_files_backup']; - $file = 'backup-files-' . $latest . '.zip'; - } - - return response()->download( - '../content/backups/' . $file, - $file, - ['Content-Type: application/zip'] - ); - } - } -} diff --git a/app/Http/Controllers/RoutePostController.php b/app/Http/Controllers/RoutePostController.php deleted file mode 100644 index ffb6b99..0000000 --- a/app/Http/Controllers/RoutePostController.php +++ /dev/null @@ -1,122 +0,0 @@ -page = $pageRepo; - $this->gate = $authController; - $this->maintenance = $maintenanceService; - $this->upload = $fileUploadService; - $this->settings = $settingsService; - $this->member = $memberRepo; - $this->init = $initService; - $this->reset = $resetService; - } - - public function handleRequest(Request $request) - { - $path = explode('/', $request->path()); - switch ($path[0]) { - case 'init': - return $this->initTask($path[1], $request); - break; - case 'login': - return $this->gate->enter($request); - break; - case 'page': - $body = json_decode($request->getContent()); - $result = $this->page->create($body); - return response()->json($result)->header('Content-Type', 'application/json'); - break; - case 'settings': - if ($path[1] == 'mailer') { - return $this->sendNotify($request); - } - break; - case 'upload': - $result = $result = $this->upload->handleFile($request); - //update configs for specfic uploads - switch ($request['source']) { - case 'avatar-upload': - $member = []; - $member = session('member'); - $member['avatar'] = $result['filePath']; - $member = (object) $member; - $this->member->update($member); - break; - case 'background-upload': - $this->settings->updateGlobalData('background', $result['filePath']); - break; - } - return $result; - break; - } - } - - private function initTask($task, $request) - { - $result = []; - switch ($task) { - case 'fresh': - $result = $this->init->fresh(json_decode($request->getContent())); - break; - case 'restore': - $result = $this->init->restore($request); - break; - case 'reset': - $result = $this->reset->site($request); - break; - } - return response()->json($result)->header('Content-Type', 'application/json'); - } - - private function sendNotify($request) - { - $result = []; - try { - Mail::to(env('ADMIN_EMAIL'))->send(new SystemEmail($request->content)); - $result = [ - 'type' => 'mail_good', - 'message' => 'Mail Sent', - ]; - } catch (TransportException $e) { - $result = [ - 'type' => 'mail_not_good', - 'message' => 'Mail Not Sent. It\'s cool. Just check mail settings in the .env', - ]; - } - - return response()->json($result)->header('Content-Type', 'application/json'); - } -} diff --git a/app/Http/Controllers/RoutePutController.php b/app/Http/Controllers/SettingsController.php similarity index 54% rename from app/Http/Controllers/RoutePutController.php rename to app/Http/Controllers/SettingsController.php index fb3a078..45f1889 100644 --- a/app/Http/Controllers/RoutePutController.php +++ b/app/Http/Controllers/SettingsController.php @@ -2,75 +2,55 @@ namespace App\Http\Controllers; -use App\Interfaces\PageRepositoryInterface; -use App\Services\Assets\AssetService; -use App\Services\Assets\RenderService; use App\Interfaces\MemberRepositoryInterface; use App\Services\Data\SettingsService; +use App\Services\Data\SortingService; +use App\Services\Assets\AssetService; +use App\Services\Assets\RenderService; use App\Services\Upkeep\MaintenanceService; +use App\Services\Upkeep\ResetService; use Illuminate\Http\Request; -class RoutePutController extends Controller +class SettingsController extends Controller { - protected $page; + protected $theme; + protected $member; + protected $settings; + protected $sort; protected $assets; protected $render; - protected $settings; - protected $member; protected $maintenance; + protected $reset; public function __construct( - PageRepositoryInterface $pageRepo, - AssetService $assetService, - RenderService $renderService, - SettingsService $settingsService, + ThemeController $themeController, MemberRepositoryInterface $memberRepo, + SettingsService $settingsService, + SortingService $sortingService, + AssetService $assetsService, + RenderService $renderService, MaintenanceService $maintenanceService, + ResetService $resetService, ) { - $this->page = $pageRepo; - $this->assets = $assetService; - $this->render = $renderService; - $this->settings = $settingsService; + $this->theme = $themeController; $this->member = $memberRepo; + $this->settings = $settingsService; + $this->sort = $sortingService; + $this->assets = $assetsService; + $this->render = $renderService; $this->maintenance = $maintenanceService; + $this->reset = $resetService; } - public function handleRequest(Request $request) + public function start() { - $path = explode('/', $request->path()); - switch ($path[0]) { - case 'page': - $body = json_decode($request->getContent()); - $result = $this->page->update($body); - return response()->json($result)->header('Content-Type', 'application/json'); - break; - case 'settings': - return $this->settingsTasks($request, $path[1]); - break; - case 'backup': - return $this->createBackup($request); - break; - } + return view('back.settings', ['settings' => $this->sort->settings(), 'nav' => $this->sort->navigation()]); } - private function createBackup($request) - { - $body = json_decode($request->getContent()); - if ($body->task == 'content_backup') { - return response()->json( - $this->maintenance->createContentBackUp() - )->header('Content-Type', 'application/json'); - } else { - return response()->json( - $this->maintenance->createFileBackUp() - )->header('Content-Type', 'application/json'); - } - } - - private function settingsTasks($request, $task) + public function tasks(Request $request) { $result = []; - switch ($task) { + switch (explode("/", $request->getURI())[5]) { case 'publish': $this->assets->moveToTheme(true); $result = $this->render->publishAll(); @@ -89,4 +69,45 @@ class RoutePutController extends Controller } return response()->json($result)->header('Content-Type', 'application/json'); } + + public function createBackup(Request $request) + { + $body = json_decode($request->getContent()); + if ($body->task == 'content_backup') { + return response()->json( + $this->maintenance->createContentBackUp() + )->header('Content-Type', 'application/json'); + } else { + return response()->json( + $this->maintenance->createFileBackUp() + )->header('Content-Type', 'application/json'); + } + } + + public function downloadBackup($type) + { + if ($this->member::status()) { + $latest = ''; + $file = ''; + if ($type == 'content-download') { + $latest = $this->settings->getGlobal()['last_content_backup']; + $file = 'backup-content-' . $latest . '.zip'; + } else { + $latest = $this->settings->getGlobal()['last_files_backup']; + $file = 'backup-files-' . $latest . '.zip'; + } + + return response()->download( + '../content/backups/' . $file, + $file, + ['Content-Type: application/zip'] + ); + } + } + + public function reset(Request $request) + { + $result = $this->reset->site($request); + return response()->json($result)->header('Content-Type', 'application/json'); + } } diff --git a/app/Http/Controllers/SystemMailController.php b/app/Http/Controllers/SystemMailController.php index ccfaeed..2ee45e9 100644 --- a/app/Http/Controllers/SystemMailController.php +++ b/app/Http/Controllers/SystemMailController.php @@ -3,6 +3,8 @@ namespace App\Http\Controllers; use Illuminate\Support\Facades\Mail; +use App\Mail\SystemEmail; +use Illuminate\Http\Request; class SystemMailController extends Controller { @@ -14,4 +16,23 @@ class SystemMailController extends Controller $message = "This is something important. Probably"; Mail::to(env('ADMIN_EMAIL'))->send(new SystemEmail($message)); } + + public function sendNotify(Request $request) + { + $result = []; + try { + Mail::to(env('ADMIN_EMAIL'))->send(new SystemEmail($request->content)); + $result = [ + 'type' => 'mail_good', + 'message' => 'Mail Sent', + ]; + } catch (TransportException $e) { + $result = [ + 'type' => 'mail_not_good', + 'message' => 'Mail Not Sent. It\'s cool. Just check mail settings in the .env', + ]; + } + + return response()->json($result)->header('Content-Type', 'application/json'); + } } diff --git a/app/Http/Controllers/ThemeController.php b/app/Http/Controllers/ThemeController.php index e70d09a..4ecb97f 100644 --- a/app/Http/Controllers/ThemeController.php +++ b/app/Http/Controllers/ThemeController.php @@ -61,7 +61,7 @@ class ThemeController extends Controller $template = $currentTheme . '.page'; //if coming from theme page, grabs id of latest page if ($id == null) { - $uuid = $this->getPageUUID(); + $page = $this->pages->getByUuid($this->getPageUUID()); } else { //get page by uuid $page = $this->pages->getByUuid($id); diff --git a/app/Http/Middleware/MemberCheck.php b/app/Http/Middleware/MemberCheck.php index c68f1f2..e993cb4 100644 --- a/app/Http/Middleware/MemberCheck.php +++ b/app/Http/Middleware/MemberCheck.php @@ -4,16 +4,16 @@ namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; -use App\Services\AuthService; +use App\Interfaces\MemberRepositoryInterface; class MemberCheck { - protected $auth; + protected MemberRepositoryInterface $member; public function __construct( - AuthService $authService, + MemberRepositoryInterface $memberRepo, ) { - $this->auth = $authService; + $this->member = $memberRepo; } /** @@ -23,7 +23,7 @@ class MemberCheck */ public function handle(Request $request, Closure $next) { - if ($this->auth::status()) { + if ($this->member::status()) { return $next($request); } else { return redirect('dashboard'); diff --git a/public/assets/css/dash/navigation.css b/public/assets/css/dash/navigation.css index de426fc..4898dfd 100644 --- a/public/assets/css/dash/navigation.css +++ b/public/assets/css/dash/navigation.css @@ -1,10 +1,8 @@ -article.navigation { - width: 100%; - max-width: 900px; - margin: 100px auto; +main > article > section.settings-tabs > section#site-menu { + padding: 10px 0; } -article.navigation > section > div.nav-item { +main > article > section.settings-tabs > section#site-menu > div.nav-item { display: block; width: 98%; background: var(--secondary); @@ -15,7 +13,7 @@ article.navigation > section > div.nav-item { cursor: move; } -article.navigation > section > div.nav-item > label { +main > article > section.settings-tabs > section#site-menu > label { display: inline-block; padding: 5px; margin: 12px 0 0 10px; @@ -23,24 +21,30 @@ article.navigation > section > div.nav-item > label { cursor: move; } -article.navigation > section > div.nav-item > div#nav-btns { +main > article > section.settings-tabs > section#site-menu > div.nav-item > div#nav-btns { float: right; padding: 5px; position: relative; } -article.navigation > section > div.nav-item > div#nav-btns button { +main + > article + > section.settings-tabs + > section#site-menu + > div.nav-item + > div#nav-btns + button { margin-left: 5px; } @media only screen and (max-width: 500px) { - article.navigation > section > div.nav-item > label { + main > article > section.settings-tabs > section#site-menu > div.nav-item > label { width: 55%; margin: 0; font-size: 0.8em; } - article.navigation > section i { + main > article > section.settings-tabs > section#site-menu > section i { font-size: 1.5em; } } diff --git a/public/assets/css/dash/settings.css b/public/assets/css/dash/settings.css index 69dedc0..35ebc8b 100644 --- a/public/assets/css/dash/settings.css +++ b/public/assets/css/dash/settings.css @@ -17,7 +17,7 @@ article[class="settings"] label { } article.settings div.tab-toolbar button { - width: 180px; + width: 120px; height: 40px; color: var(--secondary); } diff --git a/public/assets/scripts/dash/app/actions/NavActions.js b/public/assets/scripts/dash/app/actions/NavActions.js index 638e35b..484bb3f 100644 --- a/public/assets/scripts/dash/app/actions/NavActions.js +++ b/public/assets/scripts/dash/app/actions/NavActions.js @@ -8,7 +8,7 @@ export default class NavActions { //-------------------------- syncMenu() { let navData = []; - let items = document.getElementById('nav-items').children; + let items = document.getElementById('site-menu').children; for (let index = 0; index < items.length; index++) { navData.push({ title: items[index].getElementsByTagName('label')[0].innerHTML, diff --git a/public/assets/scripts/dash/app/controllers/NavIndex.js b/public/assets/scripts/dash/app/controllers/NavIndex.js index b726c1b..2e05e39 100644 --- a/public/assets/scripts/dash/app/controllers/NavIndex.js +++ b/public/assets/scripts/dash/app/controllers/NavIndex.js @@ -20,7 +20,7 @@ export default class NavIndex { start() { //grabs elements and makes them sortables let self = this; - Sortable.create(document.getElementById('nav-items'), { + Sortable.create(document.getElementById('site-menu'), { onUpdate: () => { new NavActions().syncMenu().then(data => { notify.alert('Updating Menu', null); @@ -68,7 +68,7 @@ export default class NavIndex { case 'edit-item': self.processing = false; window.location = - '/dashboard/page/edit/' + e.target.getAttribute('data-uuid'); + '/dashboard/pages/edit/' + e.target.getAttribute('data-uuid'); break; } } diff --git a/public/assets/scripts/dash/app/controllers/PageEditor.js b/public/assets/scripts/dash/app/controllers/PageEditor.js index 3a0e2ce..d333d0e 100644 --- a/public/assets/scripts/dash/app/controllers/PageEditor.js +++ b/public/assets/scripts/dash/app/controllers/PageEditor.js @@ -212,7 +212,7 @@ export default class PostEditor { notify.alert(r.message, true); } else { notify.alert(r.message, true); - window.location = '/dashboard/page/edit/' + r.id; + window.location = '/dashboard/pages/edit/' + r.id; } } }) diff --git a/public/assets/scripts/dash/libraries/ContentRequest.js b/public/assets/scripts/dash/libraries/ContentRequest.js index dba8aa8..e219015 100644 --- a/public/assets/scripts/dash/libraries/ContentRequest.js +++ b/public/assets/scripts/dash/libraries/ContentRequest.js @@ -7,17 +7,17 @@ export const REQUEST_TYPE_DELETE = 'DELETE'; export const CONTENT_TYPE_JSON = 'json'; export const CONTENT_TYPE_FORM = 'x-www-form-urlencoded'; //** ACTIONS URLS **// -export const API_NEW_PAGE = '/page/create'; -export const API_EDIT_PAGE = '/page/write'; -export const API_DELETE_PAGE = '/page/delete'; -export const API_GET_SETTINGS = '/settings/site'; -export const API_SETTINGS_SYNC = '/settings/sync'; -export const API_PUBLISH_PAGES = '/settings/publish'; -export const API_NAV_SYNC = '/settings/nav-sync'; +export const API_NEW_PAGE = '/dashboard/pages/create'; +export const API_EDIT_PAGE = '/dashboard/pages/write'; +export const API_DELETE_PAGE = '/dashboard/pages/delete'; +export const API_GET_SETTINGS = '/dashboard/settings/site'; +export const API_SETTINGS_SYNC = '/dashboard/settings/sync'; +export const API_PUBLISH_PAGES = '/dashboard/settings/publish'; +export const API_NAV_SYNC = '/dashboard/settings/nav-sync'; export const API_GET_MEMBER_INFO = '/settings/member'; export const API_REINDEX_PAGES = '/settings/reindex'; -export const API_SEND_MAIL = '/settings/mailer'; +export const API_SEND_MAIL = '/dashboard/mailer'; export const API_LOGIN = '/login'; //** ACTIONS TASKS **// diff --git a/public/assets/scripts/dash/libraries/MaintenanceRequest.js b/public/assets/scripts/dash/libraries/MaintenanceRequest.js index 11932af..2e998d7 100644 --- a/public/assets/scripts/dash/libraries/MaintenanceRequest.js +++ b/public/assets/scripts/dash/libraries/MaintenanceRequest.js @@ -9,11 +9,11 @@ export const CONTENT_TYPE_FORM = 'x-www-form-urlencoded'; //** API URLS **// export const API_INIT = '/init/fresh'; export const API_RESTORE = '/init/restore'; -export const API_RESET = '/init/reset'; -export const API_CREATE_BACKUP = '/backup/create'; -export const API_DOWNLOAD_BACKUP = '/backup/download'; -export const API_RESTORE_BACKUP = '/backup/restore'; -export const API_FILES_UPLOAD = '/upload/files'; +export const API_RESET = '/dashboard/settings/reset'; +export const API_CREATE_BACKUP = '/dashboard/settings/backup/create'; +export const API_DOWNLOAD_BACKUP = '/dashboard/settings/backup/download'; +export const API_RESTORE_BACKUP = '/dashboard/settings/backup/restore'; +export const API_FILES_UPLOAD = '/dashboard/uploads'; //export const API_RESET_PASS = '/api/v1/reset-password'; @@ -23,7 +23,7 @@ export const TASK_BACKUP_RESTORE = 'restoreBackup'; export const TASK_BACKUP_CREATE = 'createBackup'; export const TASK_GET_SECRET = 'retrieveSecret'; export const TASK_RESET_PASS = 'resetPassword'; -export const TASK_UPLOAD_FILES = 'uploadFiles'; +export const TASK_UPLOAD_FILES = '/task/uploadFiles'; //** API STATUS **// export const API_ACCESS_GOOD = 'apiUseAuthorized'; export const API_ACCESS_BAD = 'apiUseNotAuthorized'; diff --git a/resources/views/back/navigation.blade.php b/resources/views/back/navigation.blade.php deleted file mode 100644 index c48e498..0000000 --- a/resources/views/back/navigation.blade.php +++ /dev/null @@ -1,33 +0,0 @@ -@extends('frame') - -@section('title', 'The Dash | Edit Navigation') - -@section('main-content') - -@endsection -@section('scripting') - - @endsection diff --git a/resources/views/back/settings.blade.php b/resources/views/back/settings.blade.php index f8fa25d..531bc01 100644 --- a/resources/views/back/settings.blade.php +++ b/resources/views/back/settings.blade.php @@ -1,169 +1,198 @@ -@extends('frame') +@extends('frame') + -@section('title', 'The Dash | '. $title) +@section('title', 'The Dash | '. $settings['title']) -@section('main-content') -
- -
-
-
-
- -
-
-
- -
-
- - - -
-
- - -
-
- -
-
-
- - {{ $member['key'] }} + @section('main-content') +
+ +
+
+
+
+ +
+
+
+
-
- {{ $ftoken }} + + +
- -
-
-
-
-
-
- set email settings in .env file + +
-
-
-
- - - - @if(isset($apiStatus) && $apiStatus == 'true') - - @else - - @endif +
+
-
- - - - @if(isset($dynamicRenderStatus) && $dynamicRenderStatus == 'true') - +
+
+ + {{$settings['member']['key']}} +
+
+
+ {{$settings['ftoken']}} +
- @else - - - @endif
-
-
-
- - - -
+
+
+ - - @if($lastContentBackup != '') - MOST RECENT: - {{ $lastContentBackup }}
+
+
+ set email settings in .env file +
+
+
+
+ + + + @if(isset($settings['apiStatus']) && $settings['apiStatus'] == 'true') + @else - span No back ups. Frowny face. + @endif - -
-
- - - - - - @if($lastFilesBackup != '') - MOST RECENT: - {{ $lastFilesBackup }}
+
+
+ + + + @if(isset($settings['dynamicRenderStatus']) && $settings['dynamicRenderStatus'] == 'true') + + @else - span No back ups. Frowny face. + + @endif - +
-
- - - - - Deletes all content and configs CANNOT UNDO +
+
+ + + + + + @if($settings['lastContentBackup'] != '') + MOST RECENT: + {{$settings['lastContentBackup']}}
+ @else + span No back ups. Frowny face. + @endif + +
+
+ + + + + + @if($settings['lastFilesBackup'] != '') + MOST RECENT: + {{$settings['lastFilesBackup']}}
+ @else + span No back ups. Frowny face. + @endif +
+
+
+ + + + + Deletes all content and configs CANNOT UNDO +
-
-
-
- @foreach($themes as $theme) - @if($theme['name'] == $currentTheme) - - + @else + + @endif + @endforeach +
+
- -
-@endsection - @section('scripting') - - @endsection + + @endsection + @section('scripting') + + + @endsection \ No newline at end of file diff --git a/resources/views/back/start.blade.php b/resources/views/back/start.blade.php index 26a929d..bd586f9 100644 --- a/resources/views/back/start.blade.php +++ b/resources/views/back/start.blade.php @@ -1,38 +1,38 @@ -@extends('frame') +@extends('frame') @section('title', 'The Dash | Start') - @section('main-content') -
-
-

Recent

-
-
-
-
- @if($result['entryCount'] != 0) - @foreach($result['pages'] as $page) - @php + @section('main-content') +
+
+

Recent

+
+
+
+
+ @if($result['entryCount'] != 0) + @foreach($result['pages'] as $page) + @php $type = ''; $file = ''; isset($page['media'][0]['type']) ? $type = $page['media'][0]['type'] : $type = ''; isset($page['media'][0]['file']) ? $file = $page['media'][0]['file'] : $file = ''; - @endphp - @if($type =='mp4') - - @include('includes.recent-meta') - - - @else - - @include('includes.recent-meta') - - @endif - @endforeach - @endif -
+ @endphp + @if($type =='mp4') + + @include('includes.recent-meta') + + + @else + + @include('includes.recent-meta') + + @endif + @endforeach + @endif +
- @endsection + @endsection \ No newline at end of file diff --git a/resources/views/includes/nav.blade.php b/resources/views/includes/nav.blade.php index f9a0b7d..3877dea 100644 --- a/resources/views/includes/nav.blade.php +++ b/resources/views/includes/nav.blade.php @@ -8,6 +8,7 @@ @include('includes.submenu-start') @break + @case("Add New") @case("Edit Page") @include('includes.submenu-edit-page') @break @@ -17,11 +18,6 @@ - - - - - @@ -55,11 +51,6 @@ - - - - - diff --git a/resources/views/includes/options.blade.php b/resources/views/includes/options.blade.php index 0aaeb43..2ded2c9 100644 --- a/resources/views/includes/options.blade.php +++ b/resources/views/includes/options.blade.php @@ -42,7 +42,7 @@ if(isset($page['uuid'])) - - {{ $page['updated'] }} + {{$page['updated']}} -
+
@php $title = urldecode($page['title']); @endphp - {{ $title }} + {{$title}} -
- - - - + \ No newline at end of file diff --git a/resources/views/includes/submenu-start.blade.php b/resources/views/includes/submenu-start.blade.php index 5e5985e..8a45e0a 100644 --- a/resources/views/includes/submenu-start.blade.php +++ b/resources/views/includes/submenu-start.blade.php @@ -4,7 +4,7 @@
- + diff --git a/resources/views/theme/start.blade.php b/resources/views/theme/start.blade.php index 48fb74c..7fb2443 100644 --- a/resources/views/theme/start.blade.php +++ b/resources/views/theme/start.blade.php @@ -1,23 +1,23 @@ -@extends('frame') +@extends('frame') @section('title', 'The Dash | Fipamo Theme Kit') - @section('main-content') -
-
-

Templates

-

Base

-
Index
- Page
- Tags
- Archive
-

Custom

- @foreach($pages as $view) - @if($view != 'page') - {{ $view }}
- @endif - @endforeach -
-
-
- @endsection + @section('main-content') +
+
+

Templates

+

Base

+ Index
+ Page
+ Tags
+ Archive
+

Custom

+ @foreach($pages as $view) + @if($view != 'page') + {{$view}}
+ @endif + @endforeach +
+
+
+ @endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 5b165d9..c6fa6fc 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,28 +1,74 @@ controller(FrontController::class) + ->group(function () { + Route::get("/{one?}/{two?}/{three?}", 'start')->where('one', '^((?!dashboard).)*$'); + Route::post("/init/{task}", 'init'); + }); -//REFACTOR: Reorganize routes here intstead of controllers to reduce confusion -Route::get("/{first?}/{second?}/{third?}/{four?}", [RouteGetController::class, 'handleRequest']); -Route::post("/{first?}/{second?}/{third?}", [RoutePostController::class, 'handleRequest']) - ->middleware(VerifyCsrfToken::class); -Route::put("/{first?}/{second?}/{third?}", [RoutePutController::class, 'handleRequest']) - ->middleware(VerifyCsrfToken::class); -Route::delete("/{first?}/{second?}/{third?}", [RouteDeleteController::class, 'handleRequest']) - ->middleware(VerifyCsrfToken::class); +//login stuff +Route::post("/login", [AuthController::class, 'enter']); + +//Dashboard +Route::prefix('dashboard') + ->middleware('member.check') + ->controller(DashController::class) + ->group(function () { + Route::get("/", 'login')->withoutMiddleware('member.check'); + Route::get("/start", 'start'); + Route::get("/logout", 'logout'); + Route::post("/uploads", 'uploads'); + })->name('dashboard'); + +//Pages +Route::prefix('dashboard/pages') + ->middleware('member.check') + ->controller(PageController::class) + ->group(function () { + Route::get("/{pageFilter?}/{pageNum?}", 'start'); + Route::get("/{mode?}/{uuid?}", 'start'); + Route::put("/write", 'write'); + Route::post("/create", 'create'); + Route::delete("/delete", 'delete'); + }); + +//Settings +Route::prefix('dashboard/settings') + ->middleware('member.check') + ->controller(SettingsController::class) + ->group(function () { + Route::get("/", 'start'); + Route::put("/{task}", 'tasks'); + Route::put("/backup/create", 'createBackup'); + Route::get("/backup/get/{type}", 'downloadBackup'); + Route::post("/reset", 'reset'); + }); + +//mailer +Route::prefix('dashboard/mailer') + ->middleware('member.check') + ->controller(SystemMailController::class) + ->group(function () { + Route::post("/", 'sendNotify'); + }); + +//themekit +Route::prefix('dashboard/themekit') + ->middleware('member.check') + ->controller(ThemeController::class) + ->group(function () { + Route::get("/", 'start'); + Route::get("/view/{view?}/{id?}", 'getView'); + });