Add docblocks to ContentAPI and handleGuide
This commit is contained in:
@@ -540,6 +540,7 @@ class CodePressCMS {
|
||||
* Parse Markdown content to HTML using League CommonMark
|
||||
*
|
||||
* @param string $content Raw Markdown content
|
||||
* @param string $actualFilePath Path to the source file (used for display name fallback)
|
||||
* @return array Parsed content with title and body
|
||||
*/
|
||||
public function parseMarkdown($content, $actualFilePath = '') {
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Content API for PHP content files
|
||||
*
|
||||
* Provides a safe, read-only interface for PHP content files to access
|
||||
* CMS data (pages, menu, config, navigation, translations, search).
|
||||
* Only instantiated inside parsePHP() — never exposed via URL.
|
||||
*/
|
||||
class ContentAPI
|
||||
{
|
||||
private CodePressCMS $cms;
|
||||
@@ -9,11 +16,22 @@ class ContentAPI
|
||||
$this->cms = $cms;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all pages as a flat array of path => title pairs
|
||||
*
|
||||
* @return array Associative array like ['index' => 'Home', 'over-ons' => 'Over ons']
|
||||
*/
|
||||
public function getAllPages(): array
|
||||
{
|
||||
return $this->cms->getAllPageTitles();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a single page by path, including title, content, layout, and metadata
|
||||
*
|
||||
* @param string $path Page path without extension (e.g. 'over-ons' or 'blog/post-1')
|
||||
* @return array|null Page data or null if not found
|
||||
*/
|
||||
public function getPage(string $path): ?array
|
||||
{
|
||||
$contentDir = $this->cms->config['content_dir'];
|
||||
@@ -60,11 +78,23 @@ class ContentAPI
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the navigation menu structure
|
||||
*
|
||||
* @return array Hierarchical menu array with 'title', 'path', 'children', 'active' keys
|
||||
*/
|
||||
public function getMenu(): array
|
||||
{
|
||||
return $this->cms->getMenu();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a config value using dot notation
|
||||
*
|
||||
* @param string $key Config key, e.g. 'site_title' or 'features.search'
|
||||
* @param mixed $default Default value if key is not found
|
||||
* @return mixed Config value or default
|
||||
*/
|
||||
public function getConfig(string $key, $default = null)
|
||||
{
|
||||
$keys = explode('.', $key);
|
||||
@@ -80,11 +110,24 @@ class ContentAPI
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current language code (e.g. 'nl' or 'en')
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getCurrentLanguage(): string
|
||||
{
|
||||
return $this->cms->currentLanguage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a URL for a page, optionally with a specific language and extra params
|
||||
*
|
||||
* @param string $page Page path (default 'index')
|
||||
* @param string|null $lang Language code (defaults to current language)
|
||||
* @param array $params Additional query parameters
|
||||
* @return string URL string starting with '?'
|
||||
*/
|
||||
public function buildUrl(string $page = 'index', ?string $lang = null, array $params = []): string
|
||||
{
|
||||
$lang = $lang ?? $this->getCurrentLanguage();
|
||||
@@ -95,6 +138,12 @@ class ContentAPI
|
||||
return '?' . $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a page exists at the given path
|
||||
*
|
||||
* @param string $path Page path without extension
|
||||
* @return bool
|
||||
*/
|
||||
public function pageExists(string $path): bool
|
||||
{
|
||||
$contentDir = $this->cms->config['content_dir'];
|
||||
@@ -106,17 +155,32 @@ class ContentAPI
|
||||
|| file_exists($basePath . '.html');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the title of the currently viewed page
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getCurrentPageTitle(): string
|
||||
{
|
||||
$page = $this->cms->getPage();
|
||||
return $page['title'] ?? '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the path of the currently viewed page
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getCurrentPagePath(): string
|
||||
{
|
||||
return $_GET['page'] ?? $this->cms->config['default_page'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the current page is the homepage
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isHomepage(): bool
|
||||
{
|
||||
$defaultPage = $this->cms->config['default_page'] ?? 'index';
|
||||
@@ -124,21 +188,42 @@ class ContentAPI
|
||||
return $currentPage === $defaultPage;
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate a language key using the current language
|
||||
*
|
||||
* @param string $key Language key
|
||||
* @return string Translated text
|
||||
*/
|
||||
public function t(string $key): string
|
||||
{
|
||||
return $this->cms->t($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the site title from config
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getSiteTitle(): string
|
||||
{
|
||||
return $this->cms->config['site_title'] ?? 'CodePress';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all available language codes
|
||||
*
|
||||
* @return array Language codes like ['nl', 'en']
|
||||
*/
|
||||
public function getAvailableLanguages(): array
|
||||
{
|
||||
return $this->cms->getAvailableLanguages();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get search results for the current search query
|
||||
*
|
||||
* @return array Search results, or empty array if not searching
|
||||
*/
|
||||
public function getSearchResults(): array
|
||||
{
|
||||
if (isset($_GET['search'])) {
|
||||
@@ -147,6 +232,11 @@ class ContentAPI
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a search is currently active
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isSearching(): bool
|
||||
{
|
||||
return isset($_GET['search']);
|
||||
|
||||
Reference in New Issue
Block a user