Age | Commit message (Collapse) | Author | Files | Lines |
|
Remove the configuration option "POST.FEED_GUID" that contained the name
of the columns from the database which were passed to the SHA1 function
for generating the pseudo GUID for the items in the RSS feed.
|
|
Escape possible percent characters ("%") in the URL params for sprintf.
Otherwise the pagination template breaks if URL params which contain a
percent sign are merged into the pagination URL.
|
|
|
|
This commit implements a new feature called *content functions* that is
similar but much more powerful than the already existing *content tags*
which you may have already used (`{POST[1]}`, for example).
You now can also add your own *content functions* to do some interesting
things like embedding a YouTube video or other things to prevent typing
repetitive lines of text or code in your entities content.
Read the corresponding wiki page to learn more about this:
https://github.com/Nerdmind/Blog/wiki/Content-functions
|
|
|
|
Classes:
* Parsers\ArgumentParser
* Parsers\EmoticonParser
* Parsers\MarkdownParser
Interfaces:
* Parsers\ParserInterface
|
|
This commit adds the configuration option "WRAP_EMOTICONS" to supersede
the configuration options "(CATEGORY|PAGE|POST|USER).EMOTICONS".
If the value of "WRAP_EMOTICONS" evaluates to TRUE, the emoticons found
in the content of an item will be wrapped into a "<span>" element which
gives the user a description of the emoticon in the "title" attribute.
|
|
Make the function parseUnicodeEmoticons significantly faster by using
a single regex operation to match and process all unicode emoticons.
|
|
This commit drops support for parsing plain text ASCII emoticons like
":)" or ":P" to its unicode equivalent. Please use unicode emoticons
directly (like those already proposed in the admin form templates).
|
|
|
|
|
|
Fix a bug which was introduced with the commit mentioned below that
prevented the "$ITEM['BODY']['TEXT']()" function from returning the
pre-parsed body of the item, because the variable was not in scope.
See: bf57f3dcba5864b63882c273d25403c28637eeab
|
|
This commit removes the pages from the RSS feed. I decided so because a
page is a "timeless" object intended for things like the imprint, about
page, privacy policy and similar stuff. It also makes things easier.
The new primary feed URL is "/feed/" and shows only posts. The page feed
("/feed/page/") has been removed and will throw a 404 Not Found error.
The visitors who already subscribed to the old post feed ("/feed/post/")
are automatically 301-redirected to the new location ("/feed/").
The following system language variables have been removed:
* feed_name_items
* feed_name_pages
* feed_name_posts
The following configuration options have been removed:
* PAGE.FEED_SIZE
* PAGE.FEED_SORT
* PAGE.FEED_GUID
Furthermore, the template file "feed/item_post.php" has been renamed to
"feed/item.php" since there is now only one type of feed item. If the
system cannot find the "feed/item.php", it tries "feed/item_post.php"
instead (for backward compatibility with older themes).
|
|
This commit adds and uses the new function createPaginationTemplate to
create the generic pagination template for various entity lists.
This function replaces the many old confusing functions:
* generateNaviTemplate
* generatePageNaviTemplate
* generatePostNaviTemplate
* generateUserNaviTemplate
* generateCategoryNaviTemplate
* generateCategoryPostNaviTemplate
|
|
Add and use the function generateCategoryPostNaviTemplate to build the
pagination template for posts in a category. This fixes a mistake.
TODO: Get rid of that confusing function mess!
|
|
This commit implements a new category system to categorize posts. Each
category can have an unlimited number of nested children categories. A
single post don't necessarily need to be in a category, but it can.
Each category can have a full content body like posts or pages, so you
have enough space to describe the content of your categories.
Please note that you need to have at least the following MySQL/MariaDB
versions to use the category system, because it uses "WITH RECURSIVE"
database queries, the so-called "Common-Table-Expressions (CTE)".
MariaDB: 10.2.2
MySQL: 8.0
See: https://mariadb.com/kb/en/with/
See: https://dev.mysql.com/doc/refman/8.0/en/with.html
|
|
|
|
This commit adds new Repository and Entity classes which are better
abstracted from the rest of the application. They dont know anymore
about configuration options or how to parse to HTML because this is
not the job for the ORM but for other parts of the application.
The previous commits were a preparation for this big change.
An entity now represents just a single record from a specific table
of the database – nothing more. The repositories job is it to fetch
or update records of the database and instantiate the entities.
Another problem that was solved is the high amount of database queries
that was needed before. For example, on the blogs home page first were
all 10 latest post IDs fetched from the database and then another query
was executed with "WHERE id = :id" for *each* single post?! ...
This problem is solved with the new repository classes; they now use a
single query to fetch and build the entities of the 10 latest posts.
This change also solves the problem with database queries spread across
the application and limits the exzessive use of try/catch blocks which
were used before. The new classes make the whole code much cleaner. :)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This commit replaces all calls to "$Item->getURL()" with calls to the
previously added "getEntityURL" method of the "Application" class.
|
|
This commit removes the "getRandomValue" function. In addition, the
Application class now calls PHPs "random_bytes" function directly.
|
|
Remove the unnecessary PHP closing tags and ensure that *all* text files ending with a LF character.
|
|
This commit changes the parseDatetime() function to use strftime() with locale support to replace the day-and-month name related parts within the format string. The strftime() function uses the locale defined by the LC_TIME or LC_ALL environment variable which can be set with PHPs own setlocale() function within the configuration.php.
|
|
|
|
This function wraps all the UTF-8 encoded emoticons (from "getUnicodeEmoticons") found in $string into a "span" element with a "title" attribute, which will contain the emoticon explanation text.
|
|
This function returns an associative array with the UTF-8 encoded emoticon character as key and the corresponding explanation text as value.
|
|
If the first word from $string was longer than $length characters, then the regular expression had not truncated the string at all (for example, a string with a total length of 2000 characters was displayed without any cut, but with the $replace string at the end).
This bug has been reported by Markus Hackspacher (https://github.com/MarkusHackspacher).
|
|
addition, the $replace parameter is now an empty string by default.
|
|
whitespace between the truncated text and the $replace string ("[…]") if the truncated text from the regular expression had contained whitespace at the end (before it was concatenated with $replace). This issue has been fixed by passing the truncated text directly after truncation to the "trim" function (before the truncated text is concatenated with $replace). In addition, the now unnecessary "trim" call within the "excerpt" function has been removed.
|
|
name was misleading because the function did not generate a complete URL, but only a partial string (the slug) for the final URL. By the way, some improvements were made to the code.
|
|
previous commits result in version 2.2 [changed template parameters]:
+ Implemented [core]: A new method called "getAll" has been added to the "Attribute" class which now returns all attributes as key->value array. The first parameter can be an array with attribute names which shall be excluded from returning.
+ Optimization [core]: The function "generateItemData" has been renamed to "generateItemTemplateData" and has been restructured to use the new implemented method "getAll" from the "Attribute" class.
+ Optimization [core]: The function "generateNaviTemplate" has been added and the functions "generatePageNaviTemplate", "generatePostNaviTemplate" and "generateUserNaviTemplate" have been restructured to make use of the new "generateNaviTemplate" function to reduce duplicate code.
+ Optimization [core]: Several files within the admin directory has been optimized to use the new "getAll" method of the "Attribute" class.
+ Optimization [core]: Several code optimizations have been made to the "HTTP" class.
+ Optimization [admin template]: All occurences of $PAGE['ID'], $POST['ID'] and $USER['ID'] have been replaced with $PAGE['ATTR']['ID'], $POST['ATTR']['ID'] and $USER['ATTR']['ID'] to make it more consistent. You now have to use ['ATTR']['ID'] instead of ['ID'] in your templates to get the ID of an item!
Template upgrade to version 2.2 (only for customized templates):
SEARCH: ['ID']
REPLACE: ['ATTR']['ID']
|
|
|
|
template parameters "$ITEM['BODY']['TEXT']" and "$ITEM['BODY']['HTML']" are now no longer strings but closures (anonymous functions). This means that the underlying logic, which parses the content or converts it into Markdown, is not executed until one of these parameters is really needed and called in the template (which maybe significantly increases the response time on a long list of items which not use one of those two parameters).
This means that within templates you now have to call these parameters in the following way (note the brackets at the end, which represent a function call):
<?=$ITEM['BODY']['TEXT']()?>
<?=$ITEM['BODY']['HTML']()?>
In the background, the anonymous functions are called and executes $Item->getBody() and $Item->getHTML() only when needed. Previously, $Item->getBody() and $Item->getHTML() were basically executed and the parsed content was passed to the template, regardless of whether these parameters are required in the template or not!
|
|
|
|
|
|
previous commits result in version 2.0 (database update required):
+ Implemented [core]: A new database field has been added to all tables to define optional "arguments" for a page, post or user through the content editor. These arguments will be parsed into key->value pairs and can be used within templates to do something special. Please read the wiki of this repository for further information about this new feature.
+ Bugfix [core]: The function "makeSlugURL" had not convert uppercase umlauts to lowercase because "strtolower" was used instead of the multibyte equivalent "mb_strtolower".
+ Optimization [core]: The first regular expression within the function "makeSlugURL" has been optimized (checking for uppercase characters at this point is unnecessary because $string is only lowercase).
+ Optimization [all templates]: Markup for the pagination.php has been simplified (a little bit).
+ Optimization [admin template]: The javascript for the arrow key navigation has been outsourced to the main.js file.
+ Optimization [admin template]: The javascript file will now be included with the "defer" attribute.
+ Optimization [standard template]: Some language variables have been changed.
Database update to version 2.0 (no existing data will be lost or changed):
ALTER TABLE `page` ADD `argv` VARCHAR(100) NULL DEFAULT NULL AFTER `body`;
ALTER TABLE `post` ADD `argv` VARCHAR(100) NULL DEFAULT NULL AFTER `body`;
ALTER TABLE `user` ADD `argv` VARCHAR(100) NULL DEFAULT NULL AFTER `body`;
|
|
function was added to perform this task.
|
|
previous commits result in version 1.1:
+ The rules for the Apache and nginx configuration have been changed and redirects now all requests to the index.php.
+ A router class has been added which now handles all requests that arrives at the application on the index.php.
+ Short-hand functions "PAGE", "POST" and "USER" for use in templates added to get specific item data by ID.
+ More language variables have been added to the core language.
|
|
|