forked from projects/fipamo
ro
234453b900
the back up process did not include saving document and video assets so that needed to be updated to save all of those references along with images once that was done, the restore process had to be updated to look for docs and videos and create the corresponding directories to move them too the script responsible for moving those assets was also streamlined so a seperate process was not needed for each asset type. the last update date in the settings template was displaying incorrectly, so that was fixed as well.
289 lines
10 KiB
PHP
289 lines
10 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use Carbon\Carbon;
|
|
|
|
use function _\find;
|
|
use function _\filter;
|
|
|
|
class SortingService
|
|
{
|
|
private $p_tags = [];
|
|
private $p_archive = [];
|
|
private $settings;
|
|
private $contents;
|
|
private $themes;
|
|
private $info = [];
|
|
|
|
public function __construct(
|
|
SettingsService $settingsService,
|
|
ContentService $contentService,
|
|
ThemeService $themeService,
|
|
) {
|
|
$this->settings = $settingsService;
|
|
$this->contents = $contentService;
|
|
$this->themes = $themeService;
|
|
$global = $this->settings->getGlobal();
|
|
$this->info = [
|
|
'keywords' => isset($global['keywords'])
|
|
? $global['keywords']
|
|
: 'fipamo, blog, jamstack, php, markdown, js',
|
|
'menu' => $this->settings->getMenu(),
|
|
'tags' => $this->settings->getTags(),
|
|
'description' => $global['descriptions'],
|
|
'image' => $global['base_url'] . $global['background'],
|
|
'baseURL' => $global['base_url'],
|
|
'dynamicRender' => $global['dynamicRender'],
|
|
'theme' => $global['theme'],
|
|
];
|
|
}
|
|
|
|
public function tags($debug = true)
|
|
{
|
|
$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' => safeString($label),
|
|
'pages' => $this->tagPages($label, $pages),
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$tagData = [];
|
|
|
|
$tagData = [
|
|
'debug' => $debug, // for theme kit
|
|
'tags' => $this->p_tags,
|
|
'theme' => $this->info['theme'], // for theme kit
|
|
'title' => 'Pages Tagged as Tag',
|
|
'dynamicRender' => $this->info['dynamicRender'],
|
|
'pages' => $this->settings->getTags()[3]['pages'],
|
|
'info' => $this->info,
|
|
'menu' => $this->settings->getMenu(),
|
|
'media' => [
|
|
['file' => $this->info['image'],
|
|
'type' => trim(pathinfo($this->info['image'], PATHINFO_EXTENSION))]
|
|
]
|
|
];
|
|
|
|
return $tagData;
|
|
}
|
|
|
|
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($debug = true)
|
|
{
|
|
$pages = $this->contents->loadAllPages();
|
|
$years = [];
|
|
$archive = [];
|
|
foreach ($pages as $page) {
|
|
$date = explode('/', $page['path']);
|
|
if (!find($years, ['year' => trim($date[0])])) {
|
|
$findPages = filter($pages, ['createdYear' => trim($date[0])]);
|
|
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,
|
|
]);
|
|
}
|
|
$archive_data = [];
|
|
|
|
$archiveData = [
|
|
'debug' => $debug, // for theme kit
|
|
'theme' => $this->info['theme'], // for theme kit
|
|
'title' => 'Archives',
|
|
'dynamicRender' => $this->info['dynamicRender'],
|
|
'archive' => $this->p_archive,
|
|
'info' => $this->info,
|
|
'menu' => $this->settings->getMenu(),
|
|
'media' => [
|
|
['file' => $this->info['image'],
|
|
'type' => trim(pathinfo($this->info['image'], PATHINFO_EXTENSION))]
|
|
],
|
|
];
|
|
|
|
return $archiveData;
|
|
}
|
|
|
|
public function page($page, $debug = true)
|
|
{
|
|
$pageOptions = [];
|
|
$tags = [];
|
|
if (isset($page['tags'])) {
|
|
$taglist = explode(',', $page['tags']);
|
|
foreach ($taglist as $tag) {
|
|
$label = trim($tag);
|
|
array_push($tags, [
|
|
'label' => $label . ' ',
|
|
'slug' => 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) {
|
|
$this->info['image'] = $this->info['baseURL'] . $item;
|
|
$set = true;
|
|
}
|
|
}
|
|
}
|
|
$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'],
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$pageData = [
|
|
"debug" => $debug,
|
|
"theme" => $this->info['theme'],
|
|
"status" => session('member') != null ? true : false,
|
|
"title" => $page['title'],
|
|
"meta" => $meta,
|
|
"menu" => $this->settings->getMenu(),
|
|
"info" => $this->info,
|
|
"media" => $page['media'],
|
|
"files" => $page['docs'],
|
|
"content" => $page['html'],
|
|
"recent" => $recent,
|
|
"feature" => $featured,
|
|
"tags" => $meta['tags'],
|
|
"dynamicRender" => $this->info['dynamicRender'],
|
|
];
|
|
return $pageData;
|
|
}
|
|
|
|
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();
|
|
$email = $this->settings->getEmail();
|
|
$updated = new Carbon($global['last_backup']);
|
|
$status = session('member') != '' ? true : false;
|
|
$pageOptions = [
|
|
'title' => 'Settings',
|
|
'private' => $global['private'],
|
|
'renderOnSave' => $global['renderOnSave'],
|
|
'background' => $global['background'],
|
|
'member' => session('member'),
|
|
'ftoken' => session('form_token'),
|
|
'siteTitle' => $global['title'],
|
|
'baseUrl' => $global['base_url'],
|
|
'desc' => $global['descriptions'],
|
|
'lastBackup' => $updated->format('Y F d H i s'),
|
|
'currentTheme' => $global['theme'],
|
|
'themes' => $this->themes->getThemes(),
|
|
'apiStatus' => isset($global['externalAPI']) ? $global['externalAPI'] : 'false',
|
|
'dynamicRenderStatus' => isset($global['dynamicRender']) ? $global['dynamicRender'] : 'false',
|
|
'mailOption' => $email['active'],
|
|
'mailConfig' => $email,
|
|
'status' => $status,
|
|
];
|
|
return $pageOptions;
|
|
}
|
|
}
|