From 23952788931f93d35b173566abdaa7b641d23c8d Mon Sep 17 00:00:00 2001 From: ro Date: Sun, 3 Mar 2024 17:49:05 -0600 Subject: [PATCH] added content collector and pagination plugged in the dash index template which required grabbing markdown pages and converting them to data the system can use and then pagination that is used to sort content into pages start page now switches from login screen to index based on session, but that might be changes so it's a bit more clean to work with middleware --- app/Http/Controllers/DashController.php | 33 +- app/Providers/FipamoServiceProvider.php | 10 + app/Services/ContentService.php | 195 +++++++++ app/Services/PaginateService.php | 90 ++++ composer.json | 7 +- composer.lock | 409 +++++++++++++++--- resources/views/back/start.blade.php | 1 + resources/views/includes/index.blade.php | 37 ++ .../views/includes/recent-meta.blade.php | 46 ++ 9 files changed, 736 insertions(+), 92 deletions(-) create mode 100644 app/Services/ContentService.php create mode 100644 app/Services/PaginateService.php create mode 100644 resources/views/includes/index.blade.php create mode 100644 resources/views/includes/recent-meta.blade.php diff --git a/app/Http/Controllers/DashController.php b/app/Http/Controllers/DashController.php index 82188fa..f248dc8 100644 --- a/app/Http/Controllers/DashController.php +++ b/app/Http/Controllers/DashController.php @@ -2,43 +2,38 @@ namespace App\Http\Controllers; +use Illuminate\Http\Request; use App\Services\SettingsService; use App\Services\AuthService; -use Illuminate\Http\Request; +use App\Services\PaginateService; class DashController extends Controller { - protected $files = []; protected $settings; - protected $auth; + protected $pages; public function __construct( SettingsService $settingsService, - AuthService $authService + AuthService $authService, + PaginateService $paginateService, ) { - $this->read(env('PAGES_PATH')); $this->settings = $settingsService; $this->auth = $authService; + $this->pages = $paginateService; } public function start(Request $request) { + $status = session('handle') !== null ? true : false; + $result = []; + if ($status) { + $result = $this->pages->getPage(1, 4); + //var_dump($result['pages'][1]['media'][0]['type']); + } return view('back.start', [ - "status" => (session('handle') !== null ? true : false), + "status" => $status, + "result" => $result, "title" => "Fipamo Dash" ]); } - - public function read($folder) - { - $folders = glob("$folder/*", GLOB_ONLYDIR); - foreach ($folders as $folder) { - //$this->files[] = $folder . "/"; - $this->read($folder); - } - $files = array_filter(glob("$folder/*md"), 'is_file'); - foreach ($files as $file) { - $this->files[] = $file; - } - } } diff --git a/app/Providers/FipamoServiceProvider.php b/app/Providers/FipamoServiceProvider.php index 84f7141..41880fe 100644 --- a/app/Providers/FipamoServiceProvider.php +++ b/app/Providers/FipamoServiceProvider.php @@ -5,6 +5,8 @@ namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Services\SettingsService; use App\Services\AuthService; +use App\Services\ContentService; +use App\Services\PaginateService; class FipamoServiceProvider extends ServiceProvider { @@ -20,6 +22,14 @@ class FipamoServiceProvider extends ServiceProvider $this->app->bind(AuthService::class, function ($app) { return new AuthService(new SettingsService()); }); + + $this->app->bind(ContentService::class, function ($app) { + return new ContentService(); + }); + + $this->app->bind(PaginateService::class, function ($app) { + return new PaginateService(new ContentService()); + }); } /** diff --git a/app/Services/ContentService.php b/app/Services/ContentService.php new file mode 100644 index 0000000..c4be81b --- /dev/null +++ b/app/Services/ContentService.php @@ -0,0 +1,195 @@ +loadPages(env('PAGES_PATH')); + } + + public function loadPages($folder) + { + $folders = glob("$folder/*", GLOB_ONLYDIR); + foreach ($folders as $folder) { + //$this->files[] = $folder . "/"; + $this->loadPages($folder); + } + $files = array_filter(glob("$folder/*md"), 'is_file'); + foreach ($files as $file) { + $this->files[] = $file; + } + } + + public function loadAllPages() + { + $environment = new Environment($this->config); + $environment->addExtension(new CommonMarkCoreExtension()); + + // Add the extension + $environment->addExtension(new FrontMatterExtension()); + + //Add Strikethrough rendering + $environment->addExtension(new StrikethroughExtension()); + + //add attributes to elements in markdown + $environment->addExtension(new AttributesExtension()); + + //add table rendering + $environment->addExtension(new TableExtension()); + + // Instantiate the converter engine and start converting some Markdown! + $converter = new MarkdownConverter($environment); + + $contents = []; + foreach ($this->files as $file) { + //get meta and html from file + $result = $converter->convertToHtml(file_get_contents($file)); + $meta = []; + if ($result instanceof RenderedContentWithFrontMatter) { + $meta = $result->getFrontMatter(); + } + + //get raw markdown from file + $frontMatterExtension = new FrontMatterExtension(); + $parsed = $frontMatterExtension + ->getFrontMatterParser() + ->parse(file_get_contents($file)); + + //never trust the front end. clean it up + //add what sanitizer extensions we need manually + $builder = new SanitizerBuilder(); + $builder->registerExtension(new BasicExtension()); + $builder->registerExtension(new IframeExtension()); + $builder->registerExtension(new ListExtension()); + //just add it straight because classname is already in use + $builder->registerExtension(new \HtmlSanitizer\Extension\Table\TableExtension()); + + //relative-a and relative-image + $builder->registerExtension( + new \HtmlSanitizer\Extension\Relative\A\AExtension() + ); + $builder->registerExtension( + new \HtmlSanitizer\Extension\Relative\Image\ImageExtension() + ); + + $detergent = [ + 'extensions' => ['basic', 'list', 'relative-a', 'relative-image', 'iframe', 'table'], + 'tags' => [ + 'div' => [ + 'allowed_attributes' => ['class', 'title', 'id', 'style'], + ], + 'img' => [ + 'allowed_attributes' => ['src', 'alt', 'title', 'class'], + ], + 'iframe' => [ + 'allowed_attributes' => ['height', 'width', 'title', 'src'], + ], + ], + ]; + + $sanitizer = $builder->build($detergent); + $scrubbed = $sanitizer->sanitize($result->getContent()); + if (isset($meta['feature'])) { + $featureList = explode(',', $meta['feature']); + } else { + $featureList = ""; + } + + $docs = ''; + if (isset($meta['files'])) { + $fileList = explode(',', $meta['files']); + $docs = $meta['files']; + } else { + $fileList = []; + $docs = ''; + } + + $media = []; + $files = []; + if ($featureList != '') { + foreach ($featureList as $file) { + $item = trim($file); + $ext = pathinfo($item, PATHINFO_EXTENSION); + if ($item != null || $item != '') { + array_push($media, ['file' => $item, 'type' => trim($ext)]); + } + } + } + + if ($fileList != "") { + foreach ($fileList as $file) { + $item = trim($file); + $ext = pathinfo($item, PATHINFO_EXTENSION); + if ($item != null || $item != '') { + array_push($files, ['file' => $item, 'type' => trim($ext)]); + } + } + } + + //sort attributes into page object + $page = [ + 'id' => $meta['id'], + 'uuid' => $meta['uuid'], + 'title' => $meta['title'], + 'feature' => $meta['feature'], + 'files' => $docs, + 'path' => $meta['path'], + 'layout' => $meta['layout'], + 'tags' => $meta['tags'], + 'author' => $meta['author'], + 'created' => date('Y M D d', $meta['created']), + 'updated' => date('Y M D d', $meta['updated']), + 'rawCreated' => $meta['created'], + 'rawUpdated' => $meta['updated'], + 'createdYear' => date('Y', $meta['created']), + 'createdMonth' => date('m', $meta['created']), + 'deleted' => $meta['deleted'], + 'menu' => $meta['menu'], + 'featured' => $meta['featured'], + 'published' => $meta['published'], + 'slug' => $meta['slug'], + 'filePath' => $file, + 'content' => $parsed->getContent(), + 'html' => $scrubbed, + 'media' => $media, + 'docs' => $files + ]; + //checks for duplicates + $uuid = $meta['uuid']; + $found = current( + array_filter($contents, function ($item) use ($uuid) { + return isset($item['uuid']) && $uuid == $item['uuid']; + }) + ); + + // if uuid is not present, add it + if (!$found) { + array_push($contents, $page); + } + } + $collection = collect($contents); + $sorted = $collection->sortBy([ + ['id', 'desc'], + ]); + $sorted->values()->all(); + return $sorted; + } +} diff --git a/app/Services/PaginateService.php b/app/Services/PaginateService.php new file mode 100644 index 0000000..509fa2f --- /dev/null +++ b/app/Services/PaginateService.php @@ -0,0 +1,90 @@ +content = $contentService; + } + + public function getPage(int $page, int $limit, string $sort = null) + { + $content = $this->content->loadAllPages(); + + $published = filter($content, function ($item) { + return $item['published'] == true && $item['deleted'] == false; + }); + $deleted = filter($content, function ($item) { + return $item['deleted'] == true; + }); + + // $all = $content; + $all = filter($content, function ($item) { + return $item['deleted'] == false; + }); + $filter = isset($sort) ? $sort : 'all'; + switch ($filter) { + case 'published': + $filtered = $published; + break; + case 'deleted': + $filtered = $deleted; + break; + default: + $filtered = $all; + break; + } + $numOfPages = ceil(count($filtered) / ($limit + 1)); + $folder = []; + + if (count($filtered) != 0) { + if (count($filtered) < $limit) { + $limit = count($filtered) - 1; + } + $range = $page * $limit - $limit; + + if ($range != 0) { + $range = $range + 1; + } + for ($i = 0; $i <= $limit; ++$i) { + if (isset($filtered[$i + $range])) { + array_push($folder, $filtered[$i + $range]); + } else { + // chill out + } + } + } + + $prev = $page - 1; + if ($prev <= 0) { + $prev = $numOfPages; + } + + $next = $page + 1; + if ($next > $numOfPages) { + $next = 1; + } + + return [ + 'pages' => $folder, + 'numOfPages' => $numOfPages, + 'entryCount' => count($filtered), + 'paginate' => [ + 'sort' => $sort, + 'nextPage' => $next, + 'prevPage' => $prev, + ], + 'stats' => [ + 'all' => count($all), + 'published' => count($published), + 'deleted' => count($deleted), + ], + ]; + } +} diff --git a/composer.json b/composer.json index 0b818f6..9fce414 100644 --- a/composer.json +++ b/composer.json @@ -21,7 +21,12 @@ "laravel/framework": "^10.10", "laravel/sanctum": "^3.3", "laravel/tinker": "^2.8", - "lodash-php/lodash-php": "^0.09.0" + "league/commonmark": "^2.4", + "lodash-php/lodash-php": "^0.09.0", + "mnapoli/front-yaml": "^2.0", + "olegatro/html-sanitizer-relative": "^1.0", + "symfony/yaml": "^7.0", + "tgalopin/html-sanitizer": "^1.5" }, "require-dev": { "fakerphp/faker": "^1.9.1", diff --git a/composer.lock b/composer.lock index 2935b71..266019f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7d751338a52e6d29523f9e2e76fc0397", + "content-hash": "35ea09eaea488e5d0e0c4a22059c367c", "packages": [ { "name": "brick/math", @@ -1894,6 +1894,76 @@ ], "time": "2024-01-28T23:22:08+00:00" }, + { + "name": "league/uri-parser", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-parser.git", + "reference": "671548427e4c932352d9b9279fdfa345bf63fa00" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-parser/zipball/671548427e4c932352d9b9279fdfa345bf63fa00", + "reference": "671548427e4c932352d9b9279fdfa345bf63fa00", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "phpstan/phpstan": "^0.9.2", + "phpstan/phpstan-phpunit": "^0.9.4", + "phpstan/phpstan-strict-rules": "^0.9.0", + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-intl": "Allow parsing RFC3987 compliant hosts", + "league/uri-schemes": "Allow validating and normalizing URI parsing results" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "League\\Uri\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "userland URI parser RFC 3986 compliant", + "homepage": "https://github.com/thephpleague/uri-parser", + "keywords": [ + "parse_url", + "parser", + "rfc3986", + "rfc3987", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/thephpleague/uri-parser/issues", + "source": "https://github.com/thephpleague/uri-parser/tree/master" + }, + "abandoned": true, + "time": "2018-11-22T07:55:51+00:00" + }, { "name": "lodash-php/lodash-php", "version": "0.09", @@ -1951,6 +2021,110 @@ }, "time": "2024-02-01T07:59:55+00:00" }, + { + "name": "masterminds/html5", + "version": "2.8.1", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf", + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.8.1" + }, + "time": "2023-05-10T11:58:31+00:00" + }, + { + "name": "mnapoli/front-yaml", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/mnapoli/FrontYAML.git", + "reference": "d42d84159f3725d50f7bda953ed90185b3c41cc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mnapoli/FrontYAML/zipball/d42d84159f3725d50f7bda953ed90185b3c41cc4", + "reference": "d42d84159f3725d50f7bda953ed90185b3c41cc4", + "shasum": "" + }, + "require": { + "league/commonmark": "^2.0", + "php": "^7.4|^8.0", + "symfony/yaml": "^4.0|^5.0|^6.0|^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Mni\\FrontYAML\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "support": { + "source": "https://github.com/mnapoli/FrontYAML/tree/2.0.3" + }, + "time": "2024-02-07T14:42:22+00:00" + }, { "name": "monolog/monolog", "version": "3.5.0", @@ -2451,6 +2625,48 @@ ], "time": "2023-02-08T01:06:31+00:00" }, + { + "name": "olegatro/html-sanitizer-relative", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/olegatro/html-sanitizer-relative.git", + "reference": "1a4d4683c0c162653da6dcfe6050476dd8bfc026" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/olegatro/html-sanitizer-relative/zipball/1a4d4683c0c162653da6dcfe6050476dd8bfc026", + "reference": "1a4d4683c0c162653da6dcfe6050476dd8bfc026", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=7.1", + "tgalopin/html-sanitizer": "^1.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "HtmlSanitizer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oleg Scherbakov", + "email": "shcherbakov.oleg88@gmail.com" + } + ], + "description": "Extension for html-sanitizer library by allowing relative urls in the A and Image tags", + "support": { + "issues": "https://github.com/olegatro/html-sanitizer-relative/issues", + "source": "https://github.com/olegatro/html-sanitizer-relative/tree/1.0.0" + }, + "time": "2021-02-05T13:39:44+00:00" + }, { "name": "phpoption/phpoption", "version": "1.9.2", @@ -5917,6 +6133,126 @@ ], "time": "2024-02-15T11:23:52+00:00" }, + { + "name": "symfony/yaml", + "version": "v7.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "2d4fca631c00700597e9442a0b2451ce234513d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/2d4fca631c00700597e9442a0b2451ce234513d3", + "reference": "2d4fca631c00700597e9442a0b2451ce234513d3", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T15:02:46+00:00" + }, + { + "name": "tgalopin/html-sanitizer", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/tgalopin/html-sanitizer.git", + "reference": "5d02dcb6f2ea4f505731eac440798caa1b3b0913" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tgalopin/html-sanitizer/zipball/5d02dcb6f2ea4f505731eac440798caa1b3b0913", + "reference": "5d02dcb6f2ea4f505731eac440798caa1b3b0913", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "league/uri-parser": "^1.4.1", + "masterminds/html5": "^2.4", + "php": ">=7.1", + "psr/log": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.4", + "symfony/var-dumper": "^4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "HtmlSanitizer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Titouan Galopin", + "email": "galopintitouan@gmail.com" + } + ], + "description": "Sanitize untrustworthy HTML user input", + "support": { + "issues": "https://github.com/tgalopin/html-sanitizer/issues", + "source": "https://github.com/tgalopin/html-sanitizer/tree/1.5.0" + }, + "abandoned": "symfony/html-sanitizer", + "time": "2021-09-14T08:27:50+00:00" + }, { "name": "tijsverkoyen/css-to-inline-styles", "version": "v2.2.7", @@ -8208,77 +8544,6 @@ ], "time": "2024-02-09T16:08:40+00:00" }, - { - "name": "symfony/yaml", - "version": "v7.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "2d4fca631c00700597e9442a0b2451ce234513d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/2d4fca631c00700597e9442a0b2451ce234513d3", - "reference": "2d4fca631c00700597e9442a0b2451ce234513d3", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v7.0.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-23T15:02:46+00:00" - }, { "name": "theseer/tokenizer", "version": "1.2.2", diff --git a/resources/views/back/start.blade.php b/resources/views/back/start.blade.php index b554012..d28f800 100644 --- a/resources/views/back/start.blade.php +++ b/resources/views/back/start.blade.php @@ -4,6 +4,7 @@ @section('main-content') @if($status) + @include('includes.index') @else @include('forms.login') @endif diff --git a/resources/views/includes/index.blade.php b/resources/views/includes/index.blade.php new file mode 100644 index 0000000..a015918 --- /dev/null +++ b/resources/views/includes/index.blade.php @@ -0,0 +1,37 @@ +
+
+

Recent

+
+
+
+
+ @if($result['entryCount'] != 0) + @foreach($result['pages'] as $page) + @php + $type = ''; + $file = ''; + if(isset($page['media'][0]['type'])) + { + $type = $page['media'][0]['type']; + } + if(isset($page['media'][0]['file'])) + { + $file = $page['media'][0]['file']; + } + @endphp + @if($type =='mp4') + + @include('includes.recent-meta') + + + @else + + @include('includes.recent-meta') + + @endif + @endforeach + @endif +
diff --git a/resources/views/includes/recent-meta.blade.php b/resources/views/includes/recent-meta.blade.php new file mode 100644 index 0000000..3b9b58f --- /dev/null +++ b/resources/views/includes/recent-meta.blade.php @@ -0,0 +1,46 @@ +@php + +if($page['menu'] == 'true') +{ + $menu = 'true'; +}else{ + $menu = 'false'; +} + +if($page['published'] == 'true') +{ + $published = 'true'; +}else{ + $published = 'false'; +} + +if($page['featured'] == 'true') +{ + $featured = 'true'; +}else{ + $featured = 'false'; +} + +@endphp + +