446 lines
11 KiB
PHP
446 lines
11 KiB
PHP
<?php
|
|
|
|
class Theme
|
|
{
|
|
|
|
public static function socialNetworks()
|
|
{
|
|
global $site;
|
|
$socialNetworks = array();
|
|
|
|
foreach ($GLOBALS['SOCIAL_NETWORKS'] as $key => $label) {
|
|
if ($site->getSocialNetwork($label) != "") {
|
|
$socialNetworks[Text::cleanUrl($label)] = $label;
|
|
}
|
|
}
|
|
return $socialNetworks;
|
|
}
|
|
|
|
public static function socialNetworkEmoji($socialNetwork) {
|
|
return $GLOBALS['SOCIAL_NETWORKS_EMOJI'][Text::cleanUrl($socialNetwork)];
|
|
}
|
|
|
|
public static function listSiteSocials($list = true, $emoji = false) {
|
|
global $site;
|
|
$socialList = Theme::socialNetworks();
|
|
|
|
$socialString = ($list == true) ? "<ul class='social-networks'>" : "";
|
|
foreach ($socialList as $key => $name) {
|
|
$social = new Social($name, $site->getSocialNetwork($name));
|
|
$socialString .= (($list == true) ? "<li class='social'>" : "");
|
|
$socialString = $socialString . $social->getLink($emoji);
|
|
$socialString .= (($list == true) ? "</li>" : "");
|
|
}
|
|
|
|
$socialString .= (($list == true) ? "</ul>" : "");
|
|
return $socialString;
|
|
}
|
|
|
|
public static function title()
|
|
{
|
|
global $site;
|
|
return $site->title();
|
|
}
|
|
|
|
public static function description()
|
|
{
|
|
global $site;
|
|
return $site->description();
|
|
}
|
|
|
|
public static function slogan()
|
|
{
|
|
global $site;
|
|
return $site->slogan();
|
|
}
|
|
|
|
public static function footer()
|
|
{
|
|
global $site;
|
|
return $site->footer();
|
|
}
|
|
|
|
public static function lang()
|
|
{
|
|
global $language;
|
|
return $language->currentLanguageShortVersion();
|
|
}
|
|
|
|
public static function rssUrl()
|
|
{
|
|
if (pluginActivated('pluginRSS')) {
|
|
return DOMAIN_BASE . 'rss.xml';
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function sitemapUrl()
|
|
{
|
|
if (pluginActivated('pluginSitemap')) {
|
|
return DOMAIN_BASE . 'sitemap.xml';
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Returns the absolute URL of the site
|
|
// Ex. https://example.com the method returns https://example.com/
|
|
// Ex. https://example.com/koblog/ the method returns https://example.com/koblog/
|
|
public static function siteUrl()
|
|
{
|
|
return DOMAIN_BASE;
|
|
}
|
|
|
|
// Returns the absolute URL of admin panel
|
|
// Ex. https://example.com/admin/ the method returns https://example.com/admin/
|
|
// Ex. https://example.com/koblog/admin/ the method returns https://example.com/koblog/admin/
|
|
public static function adminUrl()
|
|
{
|
|
return DOMAIN_ADMIN;
|
|
}
|
|
|
|
public static function locationTitle()
|
|
{
|
|
global $url;
|
|
global $site;
|
|
global $tags;
|
|
global $archives;
|
|
global $authors;
|
|
global $categories;
|
|
global $WHERE_AM_I;
|
|
global $page;
|
|
global $L;
|
|
|
|
if ($WHERE_AM_I == 'page') {
|
|
return $page->title();
|
|
} elseif ($WHERE_AM_I == 'tag') {
|
|
try {
|
|
$tagKey = $url->slug();
|
|
$tag = new Tag($tagKey);
|
|
return $tag->name();
|
|
} catch (Exception $e) {
|
|
// Tag doesn't exist
|
|
}
|
|
} elseif ($WHERE_AM_I == 'category') {
|
|
try {
|
|
$categoryKey = $url->slug();
|
|
$category = new Category($categoryKey);
|
|
return $category->name();
|
|
} catch (Exception $e) {
|
|
// Category doesn't exist
|
|
}
|
|
} elseif ($WHERE_AM_I == 'archive') {
|
|
try {
|
|
$archiveKey = $url->slug();
|
|
return Date::prettyArchiveDate($archiveKey);
|
|
} catch (Exception $e) {
|
|
// Archive doesn't exist
|
|
}
|
|
} elseif ($WHERE_AM_I == 'author') {
|
|
try {
|
|
$authorKey = $url->slug();
|
|
$user = new User($authorKey);
|
|
return $user->displayName();
|
|
} catch (Exception $e) {
|
|
// Author doesn't exist
|
|
}
|
|
} elseif ($WHERE_AM_I == 'home') {
|
|
return $L->get("Latest articles");
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public static function locationDescription()
|
|
{
|
|
global $url;
|
|
global $site;
|
|
global $tags;
|
|
global $archives;
|
|
global $authors;
|
|
global $categories;
|
|
global $WHERE_AM_I;
|
|
global $page;
|
|
global $L;
|
|
|
|
if ($WHERE_AM_I == 'page') {
|
|
return $page->description();
|
|
} elseif ($WHERE_AM_I == 'tag') {
|
|
try {
|
|
$tagKey = $url->slug();
|
|
$tag = new Tag($tagKey);
|
|
return $L->get('all-post-tags') . " \"" . $tag->name() . "\"";
|
|
} catch (Exception $e) {
|
|
// Tag doesn't exist
|
|
}
|
|
} elseif ($WHERE_AM_I == 'category') {
|
|
try {
|
|
$categoryKey = $url->slug();
|
|
$category = new Category($categoryKey);
|
|
return $category->description();
|
|
} catch (Exception $e) {
|
|
// Category doesn't exist
|
|
}
|
|
} elseif ($WHERE_AM_I == 'archive') {
|
|
try {
|
|
$archiveKey = $url->slug();
|
|
return $L->get('all-post-archive') . " " . Date::prettyArchiveDate($archiveKey);
|
|
} catch (Exception $e) {
|
|
// Archive doesn't exist
|
|
}
|
|
} elseif ($WHERE_AM_I == 'author') {
|
|
try {
|
|
$authorKey = $url->slug();
|
|
$user = new User($authorKey);
|
|
return $L->get('all-post-author') . " " . $user->displayName();
|
|
} catch (Exception $e) {
|
|
// Author doesn't exist
|
|
}
|
|
} elseif ($WHERE_AM_I == 'home') {
|
|
return $L->get("all-post");
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public static function metaTags($tag)
|
|
{
|
|
if ($tag == 'title') {
|
|
return self::metaTagTitle();
|
|
} elseif ($tag == 'description') {
|
|
return self::metaTagDescription();
|
|
}
|
|
}
|
|
|
|
public static function metaTagTitle()
|
|
{
|
|
global $url;
|
|
global $site;
|
|
global $tags;
|
|
global $archives;
|
|
global $authors;
|
|
global $categories;
|
|
global $WHERE_AM_I;
|
|
global $page;
|
|
|
|
if ($WHERE_AM_I == 'page') {
|
|
$format = $site->titleFormatPages();
|
|
$format = Text::replace('{{page-title}}', $page->title(), $format);
|
|
$format = Text::replace('{{page-description}}', $page->description(), $format);
|
|
} elseif ($WHERE_AM_I == 'tag') {
|
|
try {
|
|
$tagKey = $url->slug();
|
|
$tag = new Tag($tagKey);
|
|
$format = $site->titleFormatTag();
|
|
$format = Text::replace('{{tag-name}}', $tag->name(), $format);
|
|
} catch (Exception $e) {
|
|
// Tag doesn't exist
|
|
}
|
|
} elseif ($WHERE_AM_I == 'category') {
|
|
try {
|
|
$categoryKey = $url->slug();
|
|
$category = new Category($categoryKey);
|
|
$format = $site->titleFormatCategory();
|
|
$format = Text::replace('{{category-name}}', $category->name(), $format);
|
|
} catch (Exception $e) {
|
|
// Category doesn't exist
|
|
}
|
|
} elseif ($WHERE_AM_I == 'archive') {
|
|
try {
|
|
$archiveKey = $url->slug();
|
|
$format = $site->titleFormatArchive();
|
|
$format = Text::replace('{{archive-name}}', Date::prettyArchiveDate($archiveKey), $format);
|
|
} catch (Exception $e) {
|
|
// Archive doesn't exist
|
|
}
|
|
} elseif ($WHERE_AM_I == 'author') {
|
|
try {
|
|
$authorKey = $url->slug();
|
|
$user = new User($authorKey);
|
|
$format = $site->titleFormatAuthor();
|
|
$format = Text::replace('{{author-name}}', $user->displayName(), $format);
|
|
} catch (Exception $e) {
|
|
// Author doesn't exist
|
|
}
|
|
} else {
|
|
$format = $site->titleFormatHomepage();
|
|
}
|
|
|
|
$format = Text::replace('{{site-title}}', $site->title(), $format);
|
|
$format = Text::replace('{{site-slogan}}', $site->slogan(), $format);
|
|
$format = Text::replace('{{site-description}}', $site->description(), $format);
|
|
|
|
return '<title>' . $format . '</title>' . PHP_EOL;
|
|
}
|
|
|
|
public static function metaTagDescription()
|
|
{
|
|
global $site;
|
|
global $WHERE_AM_I;
|
|
global $page;
|
|
global $url;
|
|
|
|
$description = $site->description();
|
|
|
|
if ($WHERE_AM_I == 'page') {
|
|
$description = $page->description();
|
|
} elseif ($WHERE_AM_I == 'category') {
|
|
try {
|
|
$categoryKey = $url->slug();
|
|
$category = new Category($categoryKey);
|
|
$description = $category->description();
|
|
} catch (Exception $e) {
|
|
// description from the site
|
|
}
|
|
}
|
|
|
|
return '<meta name="description" content="' . $description . '">' . PHP_EOL;
|
|
}
|
|
|
|
// DEPRECATED v3.0.0
|
|
// Return the metatag <title> with a predefine structure
|
|
public static function headTitle()
|
|
{
|
|
return self::metaTagTitle();
|
|
}
|
|
|
|
// DEPRECATED v3.0.0
|
|
// Return the metatag <decription> with a predefine structure
|
|
public static function headDescription()
|
|
{
|
|
return self::metaTagDescription();
|
|
}
|
|
|
|
public static function charset($charset)
|
|
{
|
|
return '<meta charset="' . $charset . '">' . PHP_EOL;
|
|
}
|
|
|
|
public static function viewport($content)
|
|
{
|
|
return '<meta name="viewport" content="' . $content . '">' . PHP_EOL;
|
|
}
|
|
|
|
public static function src($file, $base = DOMAIN_THEME)
|
|
{
|
|
return $base . $file;
|
|
}
|
|
|
|
public static function css($files, $base = DOMAIN_THEME)
|
|
{
|
|
if (!is_array($files)) {
|
|
$files = array($files);
|
|
}
|
|
|
|
$links = '';
|
|
foreach ($files as $file) {
|
|
$links .= '<link rel="stylesheet" type="text/css" href="' . $base . $file . '?version=' . KOBLOG_VERSION . '">' . PHP_EOL;
|
|
}
|
|
|
|
return $links;
|
|
}
|
|
|
|
public static function javascript($files, $base = DOMAIN_THEME, $attributes = '')
|
|
{
|
|
if (!is_array($files)) {
|
|
$files = array($files);
|
|
}
|
|
|
|
$scripts = '';
|
|
foreach ($files as $file) {
|
|
$scripts .= '<script ' . $attributes . ' src="' . $base . $file . '?version=' . KOBLOG_VERSION . '"></script>' . PHP_EOL;
|
|
}
|
|
|
|
return $scripts;
|
|
}
|
|
|
|
public static function js($files, $base = DOMAIN_THEME, $attributes = '')
|
|
{
|
|
return self::javascript($files, $base, $attributes);
|
|
}
|
|
|
|
public static function plugins($type, $args = array())
|
|
{
|
|
global $plugins;
|
|
foreach ($plugins[$type] as $plugin) {
|
|
echo call_user_func_array(array($plugin, $type), $args);
|
|
}
|
|
}
|
|
|
|
public static function favicon($file = 'favicon.png', $typeIcon = 'image/png')
|
|
{
|
|
$favicon = MediaHelper::getFavicon();
|
|
if ($favicon == null) {
|
|
return "";
|
|
}
|
|
return '<link rel="icon" href="' . $favicon->permalink() . '" type="image/png">' . PHP_EOL;
|
|
}
|
|
|
|
public static function keywords($keywords)
|
|
{
|
|
if (is_array($keywords)) {
|
|
$keywords = implode(',', $keywords);
|
|
}
|
|
return '<meta name="keywords" content="' . $keywords . '">' . PHP_EOL;
|
|
}
|
|
|
|
public static function jquery()
|
|
{
|
|
return '<script src="' . DOMAIN_CORE_JS . 'jquery.min.js?version=' . KOBLOG_VERSION . '"></script>' . PHP_EOL;
|
|
}
|
|
|
|
public static function jsBootstrap($attributes = '')
|
|
{
|
|
return '<script ' . $attributes . ' src="' . DOMAIN_CORE_VENDORS . 'bootstrap5/js/bootstrap.bundle.min.js?version=' . KOBLOG_VERSION . '"></script>' . PHP_EOL;
|
|
}
|
|
|
|
public static function cssBootstrap()
|
|
{
|
|
return '<link rel="stylesheet" type="text/css" href="' . DOMAIN_CORE_VENDORS . 'bootstrap5/css/bootstrap.min.css?version=' . KOBLOG_VERSION . '">' . PHP_EOL;
|
|
}
|
|
|
|
public static function cssBootstrapIcons()
|
|
{
|
|
// https://icons.getbootstrap.com/
|
|
return '<link rel="stylesheet" type="text/css" href="' . DOMAIN_CORE_CSS . 'bootstrap-icons/bootstrap-icons.css?version=' . KOBLOG_VERSION . '">' . PHP_EOL;
|
|
}
|
|
|
|
public static function cssFontAwesome()
|
|
{
|
|
//$FONTAWESOME = '<link rel="stylesheet" type="text/css" href="' . DOMAIN_CORE_VENDORS . 'fontawesome6/css/fontawesome.min.css?version=' . KOBLOG_VERSION . '">' . PHP_EOL;
|
|
$FONTAWESOME = '<link rel="stylesheet" type="text/css" href="' . DOMAIN_CORE_VENDORS . 'fontawesome6/css/all.min.css?version=' . KOBLOG_VERSION . '">' . PHP_EOL;
|
|
return $FONTAWESOME;
|
|
}
|
|
|
|
public static function jsSortable($attributes = '')
|
|
{
|
|
// https://github.com/psfpro/bootstrap-html5sortable
|
|
return '<script ' . $attributes . ' src="' . DOMAIN_CORE_JS . 'jquery.sortable.min.js?version=' . KOBLOG_VERSION . '"></script>' . PHP_EOL;
|
|
}
|
|
|
|
public static function supports($featureToCheck, $verifySidebar = true)
|
|
{
|
|
global $site;
|
|
global $themes;
|
|
$themeName = $site->theme();
|
|
|
|
if (isset($themes)) {
|
|
foreach ($themes as $theme) {
|
|
if ($theme['dirname'] == $site->theme()) {
|
|
if (isset($theme['supports'])) {
|
|
foreach ($theme['supports'] as $feature) {
|
|
if ($featureToCheck == $feature) {
|
|
return true;
|
|
}
|
|
if ($verifySidebar && $feature == "sidebar") {
|
|
// TODO: add check to see if a plugin support it in the sidebar
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
}
|