This repository has been archived on 2022-02-10. You can view files and clone it, but cannot push or open issues or pull requests.
rangitaki/res/php/ArticleGenerator.php
2016-04-17 17:00:18 +02:00

310 lines
11 KiB
PHP

<?php
/**
* PHP Version 7
*
* Since there is no initialize function, I recommend to use the short access syntay
*
* @category Articles
* @package RangitakiPHP
* @author mmk2410 <marcelmichaelkapfer@yahoo.co.nz>
* @license MIT License
* @link http://marcel-kapfer.de/rangitaki
*
* Rangitaki Project
*
* The MIT License
*
* Copyright 2015 mmk2410.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/**
* The article generator class is a collection of functions for generating the
* article of markdown
*
* Since there is no initialize function, I recommend to use the short access syntay
*
* @category Articles
* @package RangitakiPHP
* @author mmk2410 <marcelmichaelkapfer@yahoo.co.nz>
* @license MIT License
* @link http://marcel-kapfer.de/rangitaki
*/
class ArticleGenerator
{
/**
* A function to create one new article
*
* @param string $directory The directory where the article files are stored
* @param string $articlefile The name of the article file
* @param string $blog The name of the current blog
*
* @return Null
*/
function newArticle($directory, $articlefile, $blog)
{
$article = file_get_contents($directory . $articlefile); // get the file
echo "<section class='card'>";
if (substr($article, 0, 6) == "%TITLE") { // if a title is in the first line
$title = substr($article, 8, strpos($article, "\n") - 8); // get this title
if ($blog == "") { // if one main blog
$link = "./?article=" . substr($articlefile, 0, -3); // create link to article
} else { // if not on main blog
$link = "./?blog=$blog&article=" . substr($articlefile, 0, -3); // create link to article at specific blog
}
echo "<a href='$link' class='headline'>$title</a>"; // print link (as a headline)
$article = substr($article, strpos($article, "\n") + 1); // remove title tag from $article (the variable, not the document)
}
if (substr($article, 0, 5) == "%DATE") { // if now a date is in the first line
$date = substr($article, 7, strpos($article, "\n") - 7); // get this date
echo "<span class='date'>$date</span>"; // print the date
$article = substr($article, strpos($article, "\n") + 1); // remove this line
}
if (substr($article, 0, 7) == "%AUTHOR") { // if a author is now in the first line
$author = substr($article, 9, strpos($article, "\n") - 9); // get the author
$article = substr($article, strpos($article, "\n") + 1); // remove the line
}
if (substr($article, 0, 5) == "%TAGS") { // if tags are now at the beginning
$tags = substr($article, 7, strpos($article, "\n") - 7); // get tags
$tags = explode(", ", $tags); // split them into an array
$article = substr($article, strpos($article, "\n") + 1); // remove this line
}
echo "<div class='articletext'>";
echo Parsedown::instance()
->setBreaksEnabled(true)
->text($article); // print now the article text as html
echo "</div>";
if (isset($author)) {
echo "<span class='author'>$author</span>"; // print the author
}
if (isset($tags)) {
foreach ($tags as $tag) {
$blogurl = filter_input(INPUT_GET, "blog");
if ($blogurl == "") { // on main blog. no ?blog=
echo "<a class='tag' href='./?tag=$tag'>$tag</a> ";
} else { // not on main blog
echo "<a class='tag' href='./?blog=$blog&tag=$tag'>$tag</a> ";
}
}
}
echo "</section>" . "\n";
}
/**
* A function to get an articles tags as an array
*
* @param string $directory The directory where the article files are stored
* @param string $articlefile The name of the article file
* @return array
*/
static function getTags($directory, $articlefile)
{
$article = file_get_contents($directory . $articlefile); // get the article
if (substr($article, 0, 6) == "%TITLE") { // detect and remove the title
$article = substr($article, strpos($article, "\n") + 1);
}
if (substr($article, 0, 5) == "%DATE") { // detect and remove the title
$article = substr($article, strpos($article, "\n") + 1);
}
if (substr($article, 0, 7) == "%AUTHOR") { // detect and remove the title
$article = substr($article, strpos($article, "\n") + 1);
}
if (substr($article, 0, 5) == "%TAGS") { // detect the tags
$tags = substr($article, 7, strpos($article, "\n") - 7); // get the tags
$tags = explode(", ", $tags); // split them into an array
}
return $tags; // remove that array
}
/**
* A function to get an article title as a string
*
* @param string $directory The directory where the article files are stored
* @param string $articlefile The name of the article file
* @return string
*/
static function getTitle($directory, $articlefile)
{
$article = file_get_contents($directory . $articlefile); // get the article
if (substr($article, 0, 6) == "%TITLE") { // detect and remove the title
$title = substr($article, 8, strpos($article, "\n") - 8); // get this title
return $title; // remove that array
}
}
/**
* A function to get the date of an article
*
* @param $directory The directory where the article is stored
* @param $articlefile The name of the article file
* @return string
*/
static function getDate($directory, $articlefile)
{
$article = file_get_contents($directory . $articlefile);
if (substr($article, 0, 6) == "%TITLE") { // detect and remove the title
$article = substr($article, strpos($article, "\n") + 1);
}
if (substr($article, 0, 5) == "%DATE") { // detect and remove the title
$date = substr($article, 7, strpos($article, "\n") - 7);
return $date;
}
}
/**
* A function to get a short summary of a text
*
* @param $directory The directory where the article is stored
* @param $articlefile The name of the article file
*
* @return string
*/
static function getSummary($directory, $articlefile)
{
$text = getText($directory, $articlefile);
$pos = stripos($text, ".");
if ($pos) {
$offset = $pos + 1;
$pos = stripos($text, ".", $offset);
$summary = substr($text, 0, $pos) . ".";
return $summary;
} else {
return $text;
}
}
/**
* A function to get the author of an article
*
* @param $directory The directory where the article is stored
* @param $articlefile The name of the article file
* @return string
*/
static function getAuthor($directory, $articlefile)
{
$article = file_get_contents($directory . $articlefile);
if (substr($article, 0, 6) == "%TITLE") { // detect and remove the title
$article = substr($article, strpos($article, "\n") + 1);
}
if (substr($article, 0, 5) == "%DATE") { // detect and remove the title
$article = substr($article, strpos($article, "\n") + 1);
}
if (substr($article, 0, 7) == "%AUTHOR") { // detect and remove the title
$author = substr($article, 9, strpos($article, "\n") - 9);
return $author;
}
}
/**
* A function to get the text of an article
*
* @param $directory The directory where the article is stored
* @param $articlefile The name of the article file
* @return string
*/
static function getText($directory, $articlefile)
{
$article = file_get_contents($directory . $articlefile);
if (substr($article, 0, 6) == "%TITLE") { // detect and remove the title
$article = substr($article, strpos($article, "\n") + 1);
}
if (substr($article, 0, 5) == "%DATE") { // detect and remove the title
$article = substr($article, strpos($article, "\n") + 1);
}
if (substr($article, 0, 7) == "%AUTHOR") { // detect and remove the title
$article = substr($article, strpos($article, "\n") + 1);
}
if (substr($article, 0, 5) == "%TAGS") { // detect the tags
$article = substr($article, strpos($article, "\n") + 1); // remove the tags
}
return $article;
}
/**
* A function to get a array of the article
*
* @param $directory The directory where the article is stored
* @param $articlefile The name of the article file
* @return string
*/
public function getArray($directory, $articlefile)
{
$article = file_get_contents($directory . $articlefile);
if (substr($article, 0, 6) == "%TITLE") { // get and remove the title
$title = substr($article, 8, strpos($article, "\n") - 8);
$article = substr($article, strpos($article, "\n") + 1);
}
if (substr($article, 0, 5) == "%DATE") { // get and remove the title
$date = substr($article, 7, strpos($article, "\n") - 7);
$article = substr($article, strpos($article, "\n") + 1);
}
if (substr($article, 0, 7) == "%AUTHOR") { // get and remove the title
$author = substr($article, 9, strpos($article, "\n") - 9);
$article = substr($article, strpos($article, "\n") + 1);
}
if (substr($article, 0, 5) == "%TAGS") { // get and remove the tags
$tags = substr($article, 7, strpos($article, "\n") - 7); // get the tags
$tags = explode(", ", $tags); // split them into an array
$article = substr($article, strpos($article, "\n") + 1);
}
$data = array(
"title" => $title,
"date" => $date,
"author" => $author,
"tags" => $tags,
"text" => $article
);
return $data;
}
}