Replaced Moment with Carbon #84
6 changed files with 286 additions and 0 deletions
|
@ -11,7 +11,10 @@ use App\Services\ContentService;
|
|||
use App\Services\PaginateService;
|
||||
use App\Services\ThemeService;
|
||||
use App\Services\DocService;
|
||||
use App\Services\StringService;
|
||||
use App\Services\FileUploadService;
|
||||
use App\Services\RenderService;
|
||||
use App\Services\SortingService;
|
||||
|
||||
class FipamoServiceProvider extends ServiceProvider
|
||||
{
|
||||
|
@ -52,6 +55,18 @@ class FipamoServiceProvider extends ServiceProvider
|
|||
$this->app->bind(FileUploadService::class, function ($app) {
|
||||
return new FileUploadService();
|
||||
});
|
||||
|
||||
$this->app->bind(RenderService::class, function ($app) {
|
||||
return new RenderService();
|
||||
});
|
||||
|
||||
$this->app->bind(SortingService::class, function ($app) {
|
||||
return new SortingService(
|
||||
new SettingsService(new DocService()),
|
||||
new ContentService(),
|
||||
new StringService(),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -8,6 +8,7 @@ use App\Services\ContentService;
|
|||
use App\Services\PaginateService;
|
||||
use App\Services\StringService;
|
||||
use App\Services\DocService;
|
||||
use App\Services\SortingService;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class PageRepository implements PageRepositoryInterface
|
||||
|
@ -18,6 +19,7 @@ class PageRepository implements PageRepositoryInterface
|
|||
protected $pages;
|
||||
protected $strings;
|
||||
protected $docs;
|
||||
protected $sort;
|
||||
|
||||
public function __construct(
|
||||
ContentService $contentService,
|
||||
|
@ -25,12 +27,14 @@ class PageRepository implements PageRepositoryInterface
|
|||
PaginateService $paginateService,
|
||||
StringService $stringService,
|
||||
DocService $docService,
|
||||
SortingService $sortingService,
|
||||
) {
|
||||
$this->content = $contentService;
|
||||
$this->settings = $settingsService;
|
||||
$this->paginate = $paginateService;
|
||||
$this->strings = $stringService;
|
||||
$this->docs = $docService;
|
||||
$this->sort = $sortingService;
|
||||
$this->pages = $this->content->loadAllPages();
|
||||
}
|
||||
|
||||
|
|
10
app/Services/RenderService.php
Normal file
10
app/Services/RenderService.php
Normal file
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
class RenderService
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
}
|
|
@ -31,6 +31,12 @@ class SettingsService
|
|||
return $this->settings['global'];
|
||||
}
|
||||
|
||||
public function getMenu()
|
||||
{
|
||||
$this->settings = $this->loadSettings();
|
||||
return $this->settings['menu'];
|
||||
}
|
||||
|
||||
public function getFolks()
|
||||
{
|
||||
return $this->folks;
|
||||
|
|
229
app/Services/SortingService.php
Normal file
229
app/Services/SortingService.php
Normal file
|
@ -0,0 +1,229 @@
|
|||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use function _\find;
|
||||
use function _\filter;
|
||||
|
||||
class SortingService
|
||||
{
|
||||
private $p_tags = [];
|
||||
private $p_archive = [];
|
||||
private $settings;
|
||||
private $contents;
|
||||
private $strings;
|
||||
|
||||
public function __construct(
|
||||
SettingsService $settingsService,
|
||||
ContentService $contentService,
|
||||
StringService $stringService
|
||||
) {
|
||||
$this->settings = $settingsService;
|
||||
$this->contents = $contentService;
|
||||
$this->strings = $stringService;
|
||||
}
|
||||
|
||||
public function tags()
|
||||
{
|
||||
$pages = $this->contents->loadAllPages();
|
||||
foreach ($pages as $page) {
|
||||
$temp = [];
|
||||
if (isset($page['tags'])) {
|
||||
$temp = explode(',', $page['tags']);
|
||||
foreach ($temp as $tag) {
|
||||
$label = trim($tag);
|
||||
if (!find($this->p_tags, ['tag_name' => $label])) {
|
||||
array_push($this->p_tags, [
|
||||
'tag_name' => $label,
|
||||
'slug' => $this->strings::safeString($label),
|
||||
'pages' => $this->tagPages($label, $pages),
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $this->p_tags;
|
||||
}
|
||||
|
||||
private function tagPages($tag, $pages)
|
||||
{
|
||||
$tagged = [];
|
||||
foreach ($pages as $page) {
|
||||
if (isset($page['tags'])) {
|
||||
if (strpos($page['tags'], $tag) !== false) {
|
||||
array_push($tagged, [
|
||||
'title' => $page['title'],
|
||||
'slug' => $page['slug'],
|
||||
'path' => $page['path'],
|
||||
'feature' => $page['feature'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $tagged;
|
||||
}
|
||||
|
||||
public function archive()
|
||||
{
|
||||
$pages = $this->contents->loadAllPages();
|
||||
$years = [];
|
||||
$archive = [];
|
||||
foreach ($pages as $page) {
|
||||
// $year = date("Y", date($page["rawCreated"]));
|
||||
$date = explode('/', $page['path']);
|
||||
// echo $page["title"] . " : " . $year . "\n";
|
||||
if (!find($years, ['year' => trim($date[0])])) {
|
||||
$findPages = filter($pages, ['createdYear' => trim($date[0])]);
|
||||
// var_dump($findPages);
|
||||
array_push(
|
||||
$years,
|
||||
[
|
||||
'year' => trim($date[0]),
|
||||
'count' => count($findPages),
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
foreach ($years as $year) {
|
||||
$sorted = [];
|
||||
$filtered = filter($pages, ['createdYear' => $year['year']]);
|
||||
|
||||
foreach ($filtered as $obj) {
|
||||
$month = date('m', date($obj['rawCreated']));
|
||||
if (!find($sorted, ['month' => $month])) {
|
||||
$perMonth = filter(
|
||||
$pages,
|
||||
[
|
||||
'path' => $year['year'] . '/' . $month,
|
||||
'deleted' => false,
|
||||
'published' => true,
|
||||
'layout' => 'page',
|
||||
]
|
||||
);
|
||||
array_push($sorted, [
|
||||
'month' => $month,
|
||||
'full_month' => date('F', date($obj['rawCreated'])),
|
||||
'count' => count($perMonth),
|
||||
'pages' => $perMonth,
|
||||
]);
|
||||
}
|
||||
}
|
||||
array_push($this->p_archive, [
|
||||
'year' => $year['year'],
|
||||
'year_data' => $sorted,
|
||||
]);
|
||||
}
|
||||
return $this->p_archive;
|
||||
}
|
||||
|
||||
public function page($page)
|
||||
{
|
||||
$global = $this->settings->getGlobal();
|
||||
$pageOptions = [];
|
||||
|
||||
$pageInfo = [
|
||||
'keywords' => isset($global['keywords'])
|
||||
? $global['keywords']
|
||||
: 'fipamo, blog, jamstack, php, markdown, js',
|
||||
'description' => $global['descriptions'],
|
||||
'image' => $global['base_url'] . $global['background'],
|
||||
'baseURL' => $global['base_url'],
|
||||
];
|
||||
$tags = [];
|
||||
if (isset($page['tags'])) {
|
||||
$taglist = explode(',', $page['tags']);
|
||||
foreach ($taglist as $tag) {
|
||||
$label = trim($tag);
|
||||
array_push($tags, [
|
||||
'label' => $label . ' ',
|
||||
'slug' => $this->strings->safeString($label),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
$meta = [
|
||||
'who' => $page['author'],
|
||||
'when' => $page['created'],
|
||||
'tags' => $tags,
|
||||
];
|
||||
|
||||
// if page feature isn't empty, find image from list and set it as background image
|
||||
// if it is empty, just use global background
|
||||
if ($page['feature'] != '' || $page['feature'] != null) {
|
||||
$media = explode(',', $page['feature']);
|
||||
$set = false;
|
||||
foreach ($media as $file) {
|
||||
$item = trim($file);
|
||||
$ext = pathinfo($item, PATHINFO_EXTENSION);
|
||||
|
||||
if ($ext != 'mp4' && !$set) {
|
||||
$pageInfo['image'] = $pageInfo['baseURL'] . $item;
|
||||
$set = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($page['layout'] == 'index') {
|
||||
$recent = [];
|
||||
$featured = [];
|
||||
$limit = 4;
|
||||
$pages = $this->contents->loadAllPages();
|
||||
foreach ($pages as $item) {
|
||||
if (
|
||||
!$item['deleted'] &&
|
||||
$item['published'] &&
|
||||
$item['menu'] != 'true'
|
||||
) {
|
||||
if (count($recent) < $limit) {
|
||||
array_push($recent, [
|
||||
'path' => $item['path'],
|
||||
'slug' => $item['slug'],
|
||||
'title' => $item['title'],
|
||||
'feature' => $item['feature'],
|
||||
]);
|
||||
}
|
||||
|
||||
if ($item['featured'] == true) {
|
||||
if (count($featured) < $limit) {
|
||||
array_push($featured, [
|
||||
'path' => $item['path'],
|
||||
'slug' => $item['slug'],
|
||||
'title' => $item['title'],
|
||||
'feature' => $item['feature'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$pageOptions = [
|
||||
'title' => $page['title'],
|
||||
'background' => $page['feature'],
|
||||
'content' => $page['html'], // $cleaned,
|
||||
'meta' => $meta,
|
||||
'recent' => $recent,
|
||||
'featured' => $featured,
|
||||
'info' => $pageInfo,
|
||||
'menu' => $this->settings->getMenu(),
|
||||
'dynamicRender' => $global['dynamicRender'],
|
||||
'media' => $page['media'],
|
||||
'files' => $page['docs'],
|
||||
];
|
||||
} else {
|
||||
$pageOptions = [
|
||||
'title' => $page['title'],
|
||||
'background' => $page['feature'],
|
||||
'content' => $page['html'], // $cleaned,
|
||||
'meta' => $meta,
|
||||
'info' => $pageInfo,
|
||||
'menu' => $this->settings->getMenu(),
|
||||
'dynamicRender' => $global['dynamicRender'],
|
||||
'media' => $page['media'],
|
||||
'files' => $page['docs'],
|
||||
];
|
||||
}
|
||||
var_dump($pageOptions);
|
||||
//return $pageOptions;
|
||||
}
|
||||
}
|
|
@ -26,4 +26,26 @@ class StringService
|
|||
mt_rand(0, 65535)
|
||||
);
|
||||
}
|
||||
|
||||
public static function safeString($string)
|
||||
{
|
||||
return strtolower(
|
||||
trim(
|
||||
preg_replace(
|
||||
'~[^0-9a-z]+~i',
|
||||
'_',
|
||||
html_entity_decode(
|
||||
preg_replace(
|
||||
'~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i',
|
||||
'$1',
|
||||
htmlentities($string, ENT_QUOTES, 'UTF-8')
|
||||
),
|
||||
ENT_QUOTES,
|
||||
'UTF-8'
|
||||
)
|
||||
),
|
||||
'-'
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue