summaryrefslogtreecommitdiff
path: root/platform/www/lib/plugins/blog
diff options
context:
space:
mode:
Diffstat (limited to 'platform/www/lib/plugins/blog')
-rw-r--r--platform/www/lib/plugins/blog/COPYING340
-rw-r--r--platform/www/lib/plugins/blog/README10
-rw-r--r--platform/www/lib/plugins/blog/_template.txt6
-rw-r--r--platform/www/lib/plugins/blog/action.php259
-rw-r--r--platform/www/lib/plugins/blog/conf/default.php18
-rw-r--r--platform/www/lib/plugins/blog/conf/metadata.php22
-rw-r--r--platform/www/lib/plugins/blog/helper.php189
-rw-r--r--platform/www/lib/plugins/blog/lang/ar/lang.php36
-rw-r--r--platform/www/lib/plugins/blog/lang/ar/settings.php35
-rw-r--r--platform/www/lib/plugins/blog/lang/ckb/lang.php30
-rw-r--r--platform/www/lib/plugins/blog/lang/ckb/settings.php41
-rw-r--r--platform/www/lib/plugins/blog/lang/cs/lang.php25
-rw-r--r--platform/www/lib/plugins/blog/lang/cs/settings.php25
-rw-r--r--platform/www/lib/plugins/blog/lang/da/lang.php31
-rw-r--r--platform/www/lib/plugins/blog/lang/da/settings.php29
-rw-r--r--platform/www/lib/plugins/blog/lang/de-informal/lang.php31
-rw-r--r--platform/www/lib/plugins/blog/lang/de-informal/settings.php29
-rw-r--r--platform/www/lib/plugins/blog/lang/de/lang.php31
-rw-r--r--platform/www/lib/plugins/blog/lang/de/settings.php29
-rw-r--r--platform/www/lib/plugins/blog/lang/en/lang.php36
-rw-r--r--platform/www/lib/plugins/blog/lang/en/settings.php38
-rw-r--r--platform/www/lib/plugins/blog/lang/eo/lang.php31
-rw-r--r--platform/www/lib/plugins/blog/lang/eo/settings.php28
-rw-r--r--platform/www/lib/plugins/blog/lang/es/lang.php30
-rw-r--r--platform/www/lib/plugins/blog/lang/es/settings.php23
-rw-r--r--platform/www/lib/plugins/blog/lang/fa/lang.php30
-rw-r--r--platform/www/lib/plugins/blog/lang/fa/settings.php27
-rw-r--r--platform/www/lib/plugins/blog/lang/fr/lang.php32
-rw-r--r--platform/www/lib/plugins/blog/lang/fr/settings.php29
-rw-r--r--platform/www/lib/plugins/blog/lang/hu/lang.php32
-rw-r--r--platform/www/lib/plugins/blog/lang/hu/settings.php29
-rw-r--r--platform/www/lib/plugins/blog/lang/it/lang.php36
-rw-r--r--platform/www/lib/plugins/blog/lang/it/settings.php12
-rw-r--r--platform/www/lib/plugins/blog/lang/ja/lang.php30
-rw-r--r--platform/www/lib/plugins/blog/lang/ja/settings.php27
-rw-r--r--platform/www/lib/plugins/blog/lang/ko/lang.php30
-rw-r--r--platform/www/lib/plugins/blog/lang/ko/settings.php27
-rw-r--r--platform/www/lib/plugins/blog/lang/nl/lang.php31
-rw-r--r--platform/www/lib/plugins/blog/lang/nl/settings.php28
-rw-r--r--platform/www/lib/plugins/blog/lang/pl/lang.php31
-rw-r--r--platform/www/lib/plugins/blog/lang/pl/settings.php25
-rw-r--r--platform/www/lib/plugins/blog/lang/pt-br/lang.php30
-rw-r--r--platform/www/lib/plugins/blog/lang/pt-br/settings.php29
-rw-r--r--platform/www/lib/plugins/blog/lang/pt/lang.php31
-rw-r--r--platform/www/lib/plugins/blog/lang/pt/settings.php28
-rw-r--r--platform/www/lib/plugins/blog/lang/ro/lang.php32
-rw-r--r--platform/www/lib/plugins/blog/lang/ro/settings.php30
-rw-r--r--platform/www/lib/plugins/blog/lang/ru/lang.php31
-rw-r--r--platform/www/lib/plugins/blog/lang/ru/settings.php29
-rw-r--r--platform/www/lib/plugins/blog/lang/sk/lang.php34
-rw-r--r--platform/www/lib/plugins/blog/lang/sk/settings.php34
-rw-r--r--platform/www/lib/plugins/blog/lang/sl/lang.php15
-rw-r--r--platform/www/lib/plugins/blog/lang/sl/settings.php19
-rw-r--r--platform/www/lib/plugins/blog/lang/sv/lang.php32
-rw-r--r--platform/www/lib/plugins/blog/lang/sv/settings.php29
-rw-r--r--platform/www/lib/plugins/blog/lang/tr/lang.php30
-rw-r--r--platform/www/lib/plugins/blog/lang/tr/settings.php27
-rw-r--r--platform/www/lib/plugins/blog/lang/zh/lang.php36
-rw-r--r--platform/www/lib/plugins/blog/lang/zh/settings.php38
-rw-r--r--platform/www/lib/plugins/blog/manager.dat2
-rw-r--r--platform/www/lib/plugins/blog/plugin.info.txt8
-rw-r--r--platform/www/lib/plugins/blog/print.css3
-rw-r--r--platform/www/lib/plugins/blog/style.css40
-rw-r--r--platform/www/lib/plugins/blog/syntax/archive.php245
-rw-r--r--platform/www/lib/plugins/blog/syntax/autoarchive.php157
-rw-r--r--platform/www/lib/plugins/blog/syntax/blog.php213
-rw-r--r--platform/www/lib/plugins/blog/syntax/draft.php33
67 files changed, 3093 insertions, 0 deletions
diff --git a/platform/www/lib/plugins/blog/COPYING b/platform/www/lib/plugins/blog/COPYING
new file mode 100644
index 0000000..d60c31a
--- /dev/null
+++ b/platform/www/lib/plugins/blog/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/platform/www/lib/plugins/blog/README b/platform/www/lib/plugins/blog/README
new file mode 100644
index 0000000..86e31d7
--- /dev/null
+++ b/platform/www/lib/plugins/blog/README
@@ -0,0 +1,10 @@
+====== Blog Plugin for DokuWiki ======
+
+All documentation for the Blog Plugin is available online at:
+
+ * http://dokuwiki.org/plugin:blog
+
+(c) 2005 - 2007 by Esther Brunner <wikidesign@gmail.com>
+(c) 2008 - 2009 by Gina Häußge, Michael Klier <dokuwiki@chimeric.de>
+(c) 2013 by Michael Hamann <michael@content-space.de>
+See COPYING for license info.
diff --git a/platform/www/lib/plugins/blog/_template.txt b/platform/www/lib/plugins/blog/_template.txt
new file mode 100644
index 0000000..01fefa5
--- /dev/null
+++ b/platform/www/lib/plugins/blog/_template.txt
@@ -0,0 +1,6 @@
+====== @TITLE@ ======
+
+@TAG@
+
+@LINKBACK@
+@DISCUSSION@
diff --git a/platform/www/lib/plugins/blog/action.php b/platform/www/lib/plugins/blog/action.php
new file mode 100644
index 0000000..61ffd9e
--- /dev/null
+++ b/platform/www/lib/plugins/blog/action.php
@@ -0,0 +1,259 @@
+<?php
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+
+class action_plugin_blog extends DokuWiki_Action_Plugin {
+
+ /**
+ * register the eventhandlers
+ * @param Doku_Event_Handler $contr
+ */
+ function register(Doku_Event_Handler $contr) {
+ $contr->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_act_preprocess', array());
+ $contr->register_hook('FEED_ITEM_ADD', 'BEFORE', $this, 'handle_feed_item');
+ $contr->register_hook('PARSER_CACHE_USE', 'BEFORE', $this, 'handle_cache');
+ }
+
+ /**
+ * Checks if 'newentry' was given as action, if so we
+ * do handle the event our self and no further checking takes place
+ * @param Doku_Event $event
+ * @param $param
+ */
+ function handle_act_preprocess(Doku_Event $event, $param) {
+ if ($event->data != 'newentry') return; // nothing to do for us
+
+ $event->data = $this->_handle_newEntry($event);
+ }
+
+ /**
+ * Removes draft entries from feeds
+ *
+ * @param Doku_Event $event
+ * @param $param
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function handle_feed_item(Doku_Event $event, $param) {
+ global $conf;
+
+ $url = parse_url($event->data['item']->link);
+ $base_url = getBaseURL();
+
+ // determine page id by rewrite mode
+ switch($conf['userewrite']) {
+ case 0:
+ preg_match('#id=([^&]*)#', $url['query'], $match);
+ if($base_url != '/') {
+ $id = cleanID(str_replace($base_url, '', $match[1]));
+ } else {
+ $id = cleanID($match[1]);
+ }
+ break;
+
+ case 1:
+ if($base_url != '/') {
+ $id = cleanID(str_replace('/',':',str_replace($base_url, '', $url['path'])));
+ } else {
+ $id = cleanID(str_replace('/',':', $url['path']));
+ }
+ break;
+
+ case 2:
+ preg_match('#doku.php/([^&]*)#', $url['path'], $match);
+ if($base_url != '/') {
+ $id = cleanID(str_replace($base_url, '', $match[1]));
+ } else {
+ $id = cleanID($match[1]);
+ }
+ break;
+ }
+
+ // don't add drafts to the feed
+ if(p_get_metadata($id, 'type') == 'draft') {
+ $event->preventDefault();
+ return;
+ }
+ }
+
+ /**
+ * Creates a new entry page
+ *
+ * @param Doku_Event $event
+ * @return string
+ */
+ function _handle_newEntry(Doku_Event $event) {
+ global $ID, $INFO;
+
+ $ns = cleanID($_REQUEST['ns']);
+ $title = str_replace(':', '', $_REQUEST['title']);
+ $ID = $this->_newEntryID($ns, $title);
+ $INFO = pageinfo();
+
+ // check if we are allowed to create this file
+ if ($INFO['perm'] >= AUTH_CREATE) {
+
+ // prepare the new thread file with default stuff
+ if (!@file_exists($INFO['filepath'])) {
+
+ //check if locked by anyone - if not lock for my self
+ if ($INFO['locked']) return 'locked';
+ else lock($ID);
+
+ global $TEXT;
+
+ $TEXT = pageTemplate($ID);
+ if (!$TEXT) {
+ // if there is no page template, load our custom one
+ $TEXT = io_readFile(DOKU_PLUGIN.'blog/_template.txt');
+ }
+
+ $data = array('id' => $ID, 'ns' => $ns, 'title' => $_REQUEST['title']);
+ // Apply replacements regardless if they have already been applied by DokuWiki in order to
+ // make custom replacements like @TITLE@ available in standard page templates.
+ $TEXT = $this->_pageTemplate($TEXT, $data);
+
+ return 'preview';
+ } else {
+ return 'edit';
+ }
+ } else {
+ return 'show';
+ }
+ }
+
+ /**
+ * Adapted version of pageTemplate() function
+ *
+ * @param $text
+ * @param $data
+ * @return string|string[]
+ */
+ function _pageTemplate($text, $data) {
+ global $conf, $INFO;
+
+ $id = $data['id'];
+ $user = $_SERVER['REMOTE_USER'];
+
+ // standard replacements
+ $replace = array(
+ '@ID@' => $id,
+ '@NS@' => $data['ns'],
+ '@PAGE@' => strtr(noNS($id),'_',' '),
+ '@USER@' => $user,
+ '@NAME@' => $INFO['userinfo']['name'],
+ '@MAIL@' => $INFO['userinfo']['mail'],
+ '@DATE@' => strftime($conf['dformat']),
+ );
+
+ // additional replacements
+ $replace['@TITLE@'] = $data['title'];
+
+ // tag if tag plugin is available
+ if ((@file_exists(DOKU_PLUGIN.'tag/syntax/tag.php'))
+ && (!plugin_isdisabled('tag'))) {
+ $replace['@TAG@'] = "\n\n{{tag>}}";
+ } else {
+ $replace['@TAG@'] = '';
+ }
+
+ // discussion if discussion plugin is available
+ if ((@file_exists(DOKU_PLUGIN.'discussion/syntax/comments.php'))
+ && (!plugin_isdisabled('discussion'))) {
+ $replace['@DISCUSSION@'] = "~~DISCUSSION~~";
+ } else {
+ $replace['@DISCUSSION@'] = '';
+ }
+
+ // linkbacks if linkback plugin is available
+ if ((@file_exists(DOKU_PLUGIN.'linkback/syntax.php'))
+ && (!plugin_isdisabled('linkback'))) {
+ $replace['@LINKBACK@'] = "~~LINKBACK~~";
+ } else {
+ $replace['@LINKBACK@'] = '';
+ }
+
+ // do the replace
+ return str_replace(array_keys($replace), array_values($replace), $text);
+ }
+
+ /**
+ * Returns the ID of a new entry based on its namespace, title and the date prefix
+ *
+ * @param $ns
+ * @param $title
+ * @return mixed|string|string[]|null
+ *
+ * @author Michael Arlt <michael.arlt@sk-chwanstetten.de>
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+ function _newEntryID($ns, $title) {
+ $dateprefix = $this->getConf('dateprefix');
+ if (substr($dateprefix, 0, 1) == '<') {
+ // <9?%y1-%y2:%d.%m._ -> 05-06:31.08._ | 06-07:01.09._
+ list($newmonth, $dateprefix) = explode('?', substr($dateprefix, 1));
+ if (intval(strftime("%m")) < intval($newmonth)) {
+ $longyear2 = strftime("%Y");
+ $longyear1 = $longyear2 - 1;
+ } else {
+ $longyear1 = strftime("%Y");
+ $longyear2 = $longyear1 + 1;
+ }
+ $shortyear1 = substr($longyear1, 2);
+ $shortyear2 = substr($longyear2, 2);
+ $dateprefix = str_replace(
+ array('%Y1', '%Y2', '%y1', '%y2'),
+ array($longyear1, $longyear2, $shortyear1, $shortyear2),
+ $dateprefix
+ );
+ }
+ $pre = strftime($dateprefix);
+ return cleanID(($ns ? $ns.':' : '').$pre.$title);
+ }
+
+ /**
+ * Expire the renderer cache of archive pages whenever a page is updated or a comment or linkback is added
+ *
+ * @param Doku_Event $event
+ * @param $params
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ */
+ function handle_cache(Doku_Event $event, $params) {
+ global $conf;
+ /** @var cache_parser $cache */
+ $cache = $event->data;
+ if (!in_array($cache->mode, array('xhtml', 'metadata'))) return;
+ $page = $cache->page;
+
+ // try to extract the page id from the file if possible
+ if (empty($page)) {
+ if (strpos($cache->file, $conf['datadir']) === 0) {
+ $page = pathID(substr($cache->file, strlen($conf['datadir'])+1));
+ } else {
+ return;
+ }
+ }
+
+ $meta = p_get_metadata($page, 'plugin_blog');
+ if ($meta === null) return;
+
+ if (isset($meta['purgefile_cache'])) {
+ $cache->depends['files'][] = $conf['cachedir'].'/purgefile';
+ $cache->depends['files'][] = $conf['metadir'].'/_comments.changes';
+ $cache->depends['files'][] = $conf['metadir'].'/_linkbacks.changes';
+ }
+
+ // purge the cache when a page is listed that the current user can't access
+ if (isset($meta['archive_pages'])) {
+ foreach ($meta['archive_pages'] as $page) {
+ if (auth_quickaclcheck($page) < AUTH_READ) {
+ $cache->depends['purge'] = true;
+ return;
+ }
+ }
+ }
+ }
+}
diff --git a/platform/www/lib/plugins/blog/conf/default.php b/platform/www/lib/plugins/blog/conf/default.php
new file mode 100644
index 0000000..80fb610
--- /dev/null
+++ b/platform/www/lib/plugins/blog/conf/default.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Options for the Blog Plugin
+ */
+$conf['namespace'] = 'blog'; // default location for blog entries
+$conf['formposition'] = 'bottom'; // position of new entry form
+$conf['newentrytitle'] = ''; // Title text for the 'new entry' form
+$conf['dateprefix'] = ''; // prefix date to new entry IDs
+$conf['sortkey'] = 'cdate'; // sort key for blog entries
+$conf['sortorder'] = 'descending'; // ascending or descending
+
+$conf['showhistogram'] = 1; // show histogramm in archive
+$conf['max_months'] = 100; // max months to show in the histogram
+$conf['histogram_height'] = 50; // height of the histogram in pixels
+
+$conf['excluded_pages'] = '!^blog:\d{4}(:\d{2})?$!'; // regex for pages to exclude from bloglisting
+
+// vim:ts=4:sw=4:et:enc=utf-8:
diff --git a/platform/www/lib/plugins/blog/conf/metadata.php b/platform/www/lib/plugins/blog/conf/metadata.php
new file mode 100644
index 0000000..822d3c4
--- /dev/null
+++ b/platform/www/lib/plugins/blog/conf/metadata.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Metadata for configuration manager plugin
+ * Additions for the blog plugin
+ *
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+$meta['namespace'] = array('string');
+$meta['formposition'] = array('multichoice',
+ '_choices' => array('top', 'bottom', 'none'));
+$meta['newentrytitle'] = array('string');
+$meta['dateprefix'] = array('string');
+$meta['sortkey'] = array('multichoice',
+ '_choices' => array('cdate', 'mdate', 'pagename', 'id', 'title'));
+$meta['sortorder'] = array('multichoice',
+ '_choices' => array('ascending', 'descending'));
+$meta['excluded_pages'] = array('string');
+
+$meta['showhistogram'] = array('onoff');
+$meta['max_months'] = array('numeric');
+$meta['histogram_height'] = array('numeric');
+// vim:ts=4:sw=4:et:enc=utf-8:
diff --git a/platform/www/lib/plugins/blog/helper.php b/platform/www/lib/plugins/blog/helper.php
new file mode 100644
index 0000000..9dd8b9a
--- /dev/null
+++ b/platform/www/lib/plugins/blog/helper.php
@@ -0,0 +1,189 @@
+<?php
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+
+class helper_plugin_blog extends DokuWiki_Plugin {
+
+ var $sort = ''; // sort key
+
+ /**
+ * Constructor
+ */
+ function helper_plugin_blog() {
+ // load sort key from settings
+ $this->sort = $this->getConf('sortkey');
+ }
+
+ function getMethods() {
+ $result = array();
+ $result[] = array(
+ 'name' => 'getBlog',
+ 'desc' => 'returns blog entries in reverse chronological order',
+ 'params' => array(
+ 'namespace' => 'string',
+ 'number (optional)' => 'integer'),
+ 'return' => array('pages' => 'array'),
+ );
+ $result[] = array(
+ 'name' => 'getFlags',
+ 'desc' => 'get values for flags, or defaults where not supplied',
+ 'params' => array('flags' => 'array'),
+ 'return' => array('flags' => 'array'),
+ );
+ return $result;
+ }
+
+ /**
+ * Get blog entries from a given namespace
+ *
+ * @param $ns
+ * @param null $num
+ * @param null $author
+ * @return array
+ */
+ function getBlog($ns, $num = NULL, $author = NULL) {
+ // add pages in given namespace
+ $result = array();
+ global $conf;
+
+ $pages = array();
+ $unique_keys_memoize = array();
+
+ $dir = str_replace(':', '/', $ns);
+ search($pages, $conf['datadir'], 'search_pagename', array('query' => '.txt'), $dir);
+
+ foreach ($pages as $page) {
+ $id = $page['id'];
+ $file = wikiFN($id);
+
+ // do some checks first
+ if (isHiddenPage($id)) continue; // skip excluded pages
+ $excluded_pages = $this->getConf('excluded_pages');
+ if (strlen($excluded_pages) > 0 && preg_match($excluded_pages, $id)) continue;
+ if (($ns) && (strpos($id, $ns.':') !== 0)) continue; // filter namespaces
+ if (!@file_exists($file)) continue; // skip deleted
+
+ $perm = auth_quickaclcheck($id);
+ if ($perm < AUTH_READ) continue; // check ACL
+
+ // skip drafts unless for users with create priviledge
+ $meta = p_get_metadata($id, '', false);
+ $draft = ($meta['type'] == 'draft');
+ if ($draft && ($perm < AUTH_CREATE)) continue;
+
+ // filter by author
+ if ($author && ($meta['user'] != $author)) continue;
+
+ $date = $meta['date']['modified'];
+ if (!$date) $date = filemtime(wikiFN($id));
+ if ($this->sort != 'mdate') {
+ $cdate = $meta['date']['created'];
+ if (!$cdate) $cdate = filectime(wikiFN($id));
+ // prefer the date further in the past:
+ $date = min($date, $cdate);
+ }
+
+ if (isset($meta['title'])) {
+ $title = $meta['title'];
+ } else {
+ $title = $id;
+ }
+
+ // determine the sort key
+ if ($this->sort == 'id') $key = $id;
+ elseif ($this->sort == 'pagename') $key = noNS($id);
+ elseif ($this->sort == 'title') $key = $title;
+ else $key = $date;
+
+ // get a unique sortable key
+ $key = $this->_uniqueKey($key, $unique_keys_memoize);
+
+ $result[$key] = array(
+ 'id' => $id,
+ 'title' => $title,
+ 'date' => $date,
+ 'user' => $meta['creator'],
+ 'desc' => $meta['description']['abstract'],
+ 'exists' => true,
+ 'perm' => $perm,
+ 'draft' => $draft,
+ );
+ }
+
+ // finally sort by sort key
+ if ($this->getConf('sortorder') == 'ascending') ksort($result);
+ else krsort($result);
+
+ if (is_numeric($num)) $result = array_slice($result, 0, $num);
+
+ return $result;
+ }
+
+ /**
+ * Turn a list of user-supplied flags into a complete list of all flags
+ * required by the Blog plugin (not including those for the Include plugin),
+ * using global configuration options or plugin defaults where flags have
+ * not been supplied.
+ *
+ * Currently handles 'formpos' and 'newentrytitle'.
+ *
+ * @author Sam Wilson <sam@samwilson.id.au>
+ * @param array $setflags Flags that have been set by the user
+ * @return array All flags required by the Blog plugin (only)
+ */
+ function getFlags($setflags) {
+ $flags = array();
+
+ // Form Position
+ $flags['formpos'] = $this->getConf('formposition');
+ if(in_array('topform', $setflags)) {
+ $flags['formpos'] = 'top';
+ }elseif(in_array('bottomform', $setflags)) {
+ $flags['formpos'] = 'bottom';
+ }elseif(in_array('noform', $setflags)) {
+ $flags['formpos'] = 'none';
+ }
+
+ // New Entry Title
+ $newentrytitle = preg_grep('|newentrytitle=.*|', $setflags);
+ if (count($newentrytitle) > 0) {
+ $newentrytitle = array_pop(explode('=', array_pop($newentrytitle), 2));
+ if (!empty($newentrytitle)) {
+ $flags['newentrytitle'] = $newentrytitle;
+ }
+ } elseif ($conf_title = $this->getConf('newentrytitle')) {
+ $flags['newentrytitle'] = $conf_title;
+ } else {
+ $flags['newentrytitle'] = $this->getLang('newentry');
+ }
+
+ // Paging Controls
+ $flags['pagingcontrols'] = !in_array('nopagingcontrols', $setflags);
+
+ return $flags;
+ }
+
+ /**
+ * Function to create sortable, unique array keys
+ *
+ * @param $key
+ * @param $unique_keys_memoize
+ * @return string
+ *
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Ilya S. Lebedev <ilya@lebedev.net>
+ * @author Balazs Attila-Mihaly <x_at_y_or_z@yahoo.com>
+ */
+ function _uniqueKey($key, &$unique_keys_memoize){
+ //convert numeric keys to string
+ if (is_numeric($key))
+ $key = sprintf('%08x', $key);
+ if (!array_key_exists($key, $unique_keys_memoize))
+ $unique_keys_memoize[$key] = 0;
+
+ return sprintf('%s_%s', $key, $unique_keys_memoize[$key]++);
+ }
+
+}
diff --git a/platform/www/lib/plugins/blog/lang/ar/lang.php b/platform/www/lib/plugins/blog/lang/ar/lang.php
new file mode 100644
index 0000000..68c0ee7
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/ar/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Arabic language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author M. Bashir Al-Noimi <bashir.storm@gmail.com>
+ */
+
+// custom language strings for the plugin
+$lang['blog'] = 'مدوّنة';
+$lang['older'] = 'تدوينات قديمة';
+$lang['newer'] = 'تدوينات جديدة';
+$lang['newentry'] = 'إضافة تدوينة جديدة:';
+
+$lang['missing_includeplugin'] = 'إضافة "Include" يجب أن تكون منزلّة ومفعّلة لتعمل المدونّة.';
+$lang['missing_pagelistplugin'] = 'إضافة "Pagelist" يجب أن تكون منزلّة ومفعّلة لتعمل قوائم المدوّنات.';
+$lang['missing_tagplugin'] = 'إضافة "Tag" يجب أن تكون منزلّة ومفعّلة لتعمل سحابة الوسوم.';
+
+$lang['autoarchive'] = '%d مشاركة لشهر %s %s';
+$lang['month_01'] = 'كانون الثاني';
+$lang['month_02'] = 'شباط';
+$lang['month_03'] = 'آذار';
+$lang['month_04'] = 'نيسان';
+$lang['month_05'] = 'أيار';
+$lang['month_06'] = 'حزيران';
+$lang['month_07'] = 'تموز';
+$lang['month_08'] = 'آب';
+$lang['month_09'] = 'أيلول';
+$lang['month_10'] = 'تشرين الأول';
+$lang['month_11'] = 'تشرين الثاني';
+$lang['month_12'] = 'كانون الأول';
+
+$lang['entries'] = 'مُدخلات';
+$lang['entry'] = 'مُدخلة';
+$lang['archive_title'] = 'أرشيف المدوّنة';
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/platform/www/lib/plugins/blog/lang/ar/settings.php b/platform/www/lib/plugins/blog/lang/ar/settings.php
new file mode 100644
index 0000000..65e5aab
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/ar/settings.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Arabic language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author M. Bashir Al-Noimi <bashir.storm@gmail.com>
+ */
+
+// for the configuration manager
+$lang['namespace'] = 'فضاء أسماء إفتراضي للمدوّنة';
+
+$lang['formposition'] = 'موقع التدوينة الجديدة';
+$lang['formposition_o_top'] = 'أعلى';
+$lang['formposition_o_bottom'] = 'أسفل';
+
+$lang['dateprefix'] = 'بادئة التاريخ للتدوينات الجديدة';
+
+$lang['sortkey'] = 'ترتيب التدوينات حسب:';
+$lang['sortkey_o_cdate'] = 'تاريخ الإنشاء';
+$lang['sortkey_o_pagename'] = 'إسم الصفحة';
+$lang['sortkey_o_id'] = 'رقم الصفحة';
+
+$lang['sortkey_o_mdate'] = 'تاريخ التعديل';
+$lang['sortkey_o_title'] = 'العنوان';
+
+$lang['sortorder'] = 'ترتيباً';
+$lang['sortorder_o_ascending'] = 'تصاعدياً';
+$lang['sortorder_o_descending'] = 'تنازلياً';
+
+$lang['excluded_pages'] = 'استثناء صفحات معيّنة من قوائم المدوّنات (يتطلّب تعبيراً نمطيّاً RegEx)';
+
+$lang['showhistorgram'] = 'عرض الرسم البياني عند عرض الأرشيف';
+$lang['max_months'] = 'العدد الأقصى للأشهر المعروضة في الرسم البياني';
+$lang['histogram_height'] = 'طول الرسم البياني (بكسل)';
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/platform/www/lib/plugins/blog/lang/ckb/lang.php b/platform/www/lib/plugins/blog/lang/ckb/lang.php
new file mode 100644
index 0000000..7521ec6
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/ckb/lang.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author qezwan <qezwan@gmail.com>
+ */
+$lang['blog'] = 'بلۆگ';
+$lang['older'] = 'تێکردنەکانی کۆنتر';
+$lang['newer'] = 'تێکردنەکانی نوێتر';
+$lang['newentry'] = 'چوونەژوورەوەی بلۆگی نوێ:';
+$lang['missing_includeplugin'] = 'پێوەکراو دەگرێتە خۆ دەبێت دابەزێنرابێت بۆ بلۆگ بۆ کارکردن.';
+$lang['missing_pagelistplugin'] = 'پێوەکراو پێویستە بۆ لیستی ئەرشیف دابمەزرێنێت بۆ کارکردن.';
+$lang['missing_tagplugin'] = 'پێوەکراو تاگ دەبێت دابەزێنرێت بۆ بەکارهێنانی پوختەکردنی تاگ.';
+$lang['autoarchive'] = '%1$d پۆست بۆ %2$s %3$s';
+$lang['month_01'] = 'کانوونی دووەم';
+$lang['month_02'] = 'شوبات';
+$lang['month_03'] = 'ئازار';
+$lang['month_04'] = 'نیسان';
+$lang['month_05'] = 'ئایار';
+$lang['month_06'] = 'حوزەیران';
+$lang['month_07'] = 'تەممووز';
+$lang['month_08'] = 'ئاب';
+$lang['month_09'] = 'ئەیلوول';
+$lang['month_10'] = 'تشرینی یەکەم';
+$lang['month_11'] = 'تشرینی دووەم';
+$lang['month_12'] = 'کانوونی یەکەم';
+$lang['entries'] = 'تێکردنەکان';
+$lang['entry'] = 'تێکردن';
+$lang['archive_title'] = 'مێژووی بلۆگ';
diff --git a/platform/www/lib/plugins/blog/lang/ckb/settings.php b/platform/www/lib/plugins/blog/lang/ckb/settings.php
new file mode 100644
index 0000000..8a8b1c1
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/ckb/settings.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author qezwan <qezwan@gmail.com>
+ */
+$lang['namespace'] = 'بۆشایی ناوی ئاسایی بۆ بلۆگ';
+$lang['formposition'] = 'شوێنی فۆرمی چوونەناوی نوێ';
+$lang['formposition_o_top'] = 'سەرەوە';
+$lang['formposition_o_bottom'] = 'خوارەوە';
+$lang['formposition_o_none'] = 'هیچ';
+$lang['newentrytitle'] = 'ناونیشانی فۆرمی چوونەژوورەوەی نوێ';
+$lang['dateprefix'] = 'بەرواری پێشگر بۆ ئای دیی تێنووسێکی نوێ';
+$lang['sortkey'] = 'پۆلێنکردنی بڵاگ ەکان بەپێی
+';
+$lang['sortkey_o_cdate'] = 'بەرواری دروست کردن
+';
+$lang['sortkey_o_mdate'] = 'بەرواری هەموارکردن
+';
+$lang['sortkey_o_pagename'] = 'ناوی پەڕە
+';
+$lang['sortkey_o_id'] = 'ناسنامەی پەڕە
+';
+$lang['sortkey_o_title'] = 'ناونیشان
+';
+$lang['sortorder'] = 'ڕیزکردن لە ریزبەند
+';
+$lang['sortorder_o_ascending'] = 'بەرەو سەرەوە
+';
+$lang['sortorder_o_descending'] = 'descending';
+$lang['excluded_pages'] = 'دەرکردنی هەندێک لاپەڕە لە لیستی بلۆگ (دەربڕینی ئاسایی پێویستە)
+';
+$lang['showhistogram'] = 'پیشاندانی هێڵکاری لەسەر نمایشی ئەرشیف
+';
+$lang['max_months'] = 'زۆرینەی مانگ بۆ ئەوەی لە هیستوگرامەکە نیشان بدا
+
+';
+$lang['histogram_height'] = '(بەرزی هیتۆگرام (بە پیکسڵ
+
+';
diff --git a/platform/www/lib/plugins/blog/lang/cs/lang.php b/platform/www/lib/plugins/blog/lang/cs/lang.php
new file mode 100644
index 0000000..07af210
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/cs/lang.php
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Lukas Zapletal <lukas.zapletal at gmail dot com>
+ * @author Vojta Olsan <olsh0@seznam.cz>
+ */
+$lang['blog'] = 'Blog';
+$lang['older'] = 'Starší zápisky';
+$lang['newer'] = 'Novější zápisky';
+$lang['newentry'] = 'Nový zápisek:';
+$lang['month_01'] = 'leden';
+$lang['month_02'] = 'únor';
+$lang['month_03'] = 'březen';
+$lang['month_04'] = 'duben';
+$lang['month_05'] = 'květen';
+$lang['month_06'] = 'červen';
+$lang['month_07'] = 'červenec';
+$lang['month_08'] = 'srpen';
+$lang['month_09'] = 'září';
+$lang['month_10'] = 'říjen';
+$lang['month_11'] = 'listopad';
+$lang['month_12'] = 'prosinec';
+$lang['archive_title'] = 'Historie blogu';
diff --git a/platform/www/lib/plugins/blog/lang/cs/settings.php b/platform/www/lib/plugins/blog/lang/cs/settings.php
new file mode 100644
index 0000000..f27b53f
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/cs/settings.php
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Lukas Zapletal <lukas.zapletal at gmail dot com>
+ * @author Vojta Olsan <olsh0@seznam.cz>
+ */
+$lang['namespace'] = 'implicitní jmenný prostor pro blog';
+$lang['formposition'] = 'pozice pole pro zadání nového příspěvku';
+$lang['formposition_o_top'] = 'nahoře';
+$lang['formposition_o_bottom'] = 'dole';
+$lang['formposition_o_none'] = 'žádný';
+$lang['dateprefix'] = 'přidat datumový prefix novým příspěvkům';
+$lang['sortkey'] = 'razení zápisků podle';
+$lang['sortkey_o_cdate'] = 'data vytvoření';
+$lang['sortkey_o_mdate'] = 'data modifikace';
+$lang['sortkey_o_pagename'] = 'názvu stránky';
+$lang['sortkey_o_id'] = 'ID stránky';
+$lang['sortkey_o_title'] = 'název';
+$lang['sortorder'] = 'pořadí';
+$lang['sortorder_o_ascending'] = 'vzestupné';
+$lang['sortorder_o_descending'] = 'sestupné';
+$lang['max_months'] = 'Maximální počet měsíců zobrazených v histogramu';
+$lang['histogram_height'] = 'Výška histogramu (v pixelech)';
diff --git a/platform/www/lib/plugins/blog/lang/da/lang.php b/platform/www/lib/plugins/blog/lang/da/lang.php
new file mode 100644
index 0000000..c07c90e
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/da/lang.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Soren Birk <soer9648@eucl.dk>
+ */
+$lang['blog'] = 'Blog';
+$lang['older'] = 'Ældre indlæg';
+$lang['newer'] = 'Nyere indlæg';
+$lang['newentry'] = 'Nyt indlæg:';
+$lang['missing_includeplugin'] = 'Include plugin skal være installeret for at bloggen virker.';
+$lang['missing_pagelistplugin'] = 'Pagelist plugin skal være installeret for at arkivlister virker.';
+$lang['missing_tagplugin'] = 'Tag plugin skal være installeret for at benytte denne funktion.';
+$lang['autoarchive'] = '%1$d indlæg i %2$s %3$s';
+$lang['month_01'] = 'januar';
+$lang['month_02'] = 'februar';
+$lang['month_03'] = 'marts';
+$lang['month_04'] = 'april';
+$lang['month_05'] = 'maj';
+$lang['month_06'] = 'juni';
+$lang['month_07'] = 'juli';
+$lang['month_08'] = 'august';
+$lang['month_09'] = 'september';
+$lang['month_10'] = 'oktober';
+$lang['month_11'] = 'november';
+$lang['month_12'] = 'december';
+$lang['entries'] = 'indlæg';
+$lang['entry'] = 'indlæg';
+$lang['archive_title'] = 'Blog Arkiv';
diff --git a/platform/www/lib/plugins/blog/lang/da/settings.php b/platform/www/lib/plugins/blog/lang/da/settings.php
new file mode 100644
index 0000000..035964a
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/da/settings.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Kalle Sommer Nielsen <kalle@php.net>
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Soren Birk <soer9648@eucl.dk>
+ */
+$lang['namespace'] = 'standard navnerum til blog';
+$lang['formposition'] = 'position af formular til nyt indlæg';
+$lang['formposition_o_top'] = 'top';
+$lang['formposition_o_bottom'] = 'bund';
+$lang['formposition_o_none'] = 'intet';
+$lang['newentrytitle'] = 'title på den nye indlægs formular';
+$lang['dateprefix'] = 'foruddefineret dato for nye indlæg IDs';
+$lang['sortkey'] = 'sortér blog indlæg efter';
+$lang['sortkey_o_cdate'] = 'dato for oprettelse';
+$lang['sortkey_o_mdate'] = 'dato for seneste ændring';
+$lang['sortkey_o_pagename'] = 'sidenavn';
+$lang['sortkey_o_id'] = 'side id';
+$lang['sortkey_o_title'] = 'titel';
+$lang['sortorder'] = 'sorteringsrækkefølge';
+$lang['sortorder_o_ascending'] = 'stigende';
+$lang['sortorder_o_descending'] = 'faldende';
+$lang['excluded_pages'] = 'Udeluk bestemte sider fra blog listen (kræver regulært udtryk)';
+$lang['showhistogram'] = 'Vis histogram på arkiv rendering';
+$lang['max_months'] = 'Maksimum antal måneder for visning i histogram';
+$lang['histogram_height'] = 'Histogram højde (i pixel)';
diff --git a/platform/www/lib/plugins/blog/lang/de-informal/lang.php b/platform/www/lib/plugins/blog/lang/de-informal/lang.php
new file mode 100644
index 0000000..f4602ee
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/de-informal/lang.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Michael Hamann <michael@content-space.de>
+ */
+$lang['blog'] = 'Blog';
+$lang['older'] = 'Ältere Einträge';
+$lang['newer'] = 'Neuere Einträge';
+$lang['newentry'] = 'Neuer Blogeintrag:';
+$lang['missing_includeplugin'] = 'Ohne das Include Plugin funktioniert das Blog nicht.';
+$lang['missing_pagelistplugin'] = 'Ohne das Pagelist Plugin funktionieren Archivlisten nicht.';
+$lang['missing_tagplugin'] = 'Um Tag-Verfeinerungen zu verwenden, muss das Tag Plugin installiert sein.';
+$lang['autoarchive'] = '%1$d Beiträge für den %2$s %3$s';
+$lang['month_01'] = 'Januar';
+$lang['month_02'] = 'Februar';
+$lang['month_03'] = 'März';
+$lang['month_04'] = 'April';
+$lang['month_05'] = 'Mai';
+$lang['month_06'] = 'Juni';
+$lang['month_07'] = 'Juli';
+$lang['month_08'] = 'August';
+$lang['month_09'] = 'September';
+$lang['month_10'] = 'Oktober';
+$lang['month_11'] = 'November';
+$lang['month_12'] = 'Dezember';
+$lang['entries'] = 'Einträge';
+$lang['entry'] = 'Eintrag';
+$lang['archive_title'] = 'Blog-Archiv';
diff --git a/platform/www/lib/plugins/blog/lang/de-informal/settings.php b/platform/www/lib/plugins/blog/lang/de-informal/settings.php
new file mode 100644
index 0000000..c8d396a
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/de-informal/settings.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Dominik Eckelmann <deckelmann@gmail.com>
+ */
+$lang['namespace'] = 'Standard-Namensraum für Blog';
+$lang['formposition'] = 'Position des Formulars für neue Blogeinträge';
+$lang['formposition_o_top'] = 'oben';
+$lang['formposition_o_bottom'] = 'unten';
+$lang['formposition_o_none'] = 'Keine';
+$lang['newentrytitle'] = 'Titel des Formulars um neue Einträge anzulegen';
+$lang['dateprefix'] = 'Datum den IDs neuer Seiten voranstellen';
+$lang['sortkey'] = 'Blogeinträge sortieren nach:';
+$lang['sortkey_o_cdate'] = 'Erstellungsdatum';
+$lang['sortkey_o_mdate'] = 'Änderungsdatum';
+$lang['sortkey_o_pagename'] = 'Seitenname';
+$lang['sortkey_o_id'] = 'Seiten-ID';
+$lang['sortkey_o_title'] = 'Titel';
+$lang['sortorder'] = 'Sortierrichtung';
+$lang['sortorder_o_ascending'] = 'aufsteigend';
+$lang['sortorder_o_descending'] = 'absteigend';
+$lang['excluded_pages'] = 'Seiten von den Blog-Auflistungen ausschließen (regulärer Ausdruck)';
+$lang['showhistogram'] = 'Ein Histogramm auf den Archiv-Seiten anzeigen';
+$lang['max_months'] = 'Maximale Anzahl an Monaten die im Histogramm angezeigt werden sollen';
+$lang['histogram_height'] = 'Höhe des Histogramms (in Pixeln)';
diff --git a/platform/www/lib/plugins/blog/lang/de/lang.php b/platform/www/lib/plugins/blog/lang/de/lang.php
new file mode 100644
index 0000000..f4602ee
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/de/lang.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Michael Hamann <michael@content-space.de>
+ */
+$lang['blog'] = 'Blog';
+$lang['older'] = 'Ältere Einträge';
+$lang['newer'] = 'Neuere Einträge';
+$lang['newentry'] = 'Neuer Blogeintrag:';
+$lang['missing_includeplugin'] = 'Ohne das Include Plugin funktioniert das Blog nicht.';
+$lang['missing_pagelistplugin'] = 'Ohne das Pagelist Plugin funktionieren Archivlisten nicht.';
+$lang['missing_tagplugin'] = 'Um Tag-Verfeinerungen zu verwenden, muss das Tag Plugin installiert sein.';
+$lang['autoarchive'] = '%1$d Beiträge für den %2$s %3$s';
+$lang['month_01'] = 'Januar';
+$lang['month_02'] = 'Februar';
+$lang['month_03'] = 'März';
+$lang['month_04'] = 'April';
+$lang['month_05'] = 'Mai';
+$lang['month_06'] = 'Juni';
+$lang['month_07'] = 'Juli';
+$lang['month_08'] = 'August';
+$lang['month_09'] = 'September';
+$lang['month_10'] = 'Oktober';
+$lang['month_11'] = 'November';
+$lang['month_12'] = 'Dezember';
+$lang['entries'] = 'Einträge';
+$lang['entry'] = 'Eintrag';
+$lang['archive_title'] = 'Blog-Archiv';
diff --git a/platform/www/lib/plugins/blog/lang/de/settings.php b/platform/www/lib/plugins/blog/lang/de/settings.php
new file mode 100644
index 0000000..c8d396a
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/de/settings.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Dominik Eckelmann <deckelmann@gmail.com>
+ */
+$lang['namespace'] = 'Standard-Namensraum für Blog';
+$lang['formposition'] = 'Position des Formulars für neue Blogeinträge';
+$lang['formposition_o_top'] = 'oben';
+$lang['formposition_o_bottom'] = 'unten';
+$lang['formposition_o_none'] = 'Keine';
+$lang['newentrytitle'] = 'Titel des Formulars um neue Einträge anzulegen';
+$lang['dateprefix'] = 'Datum den IDs neuer Seiten voranstellen';
+$lang['sortkey'] = 'Blogeinträge sortieren nach:';
+$lang['sortkey_o_cdate'] = 'Erstellungsdatum';
+$lang['sortkey_o_mdate'] = 'Änderungsdatum';
+$lang['sortkey_o_pagename'] = 'Seitenname';
+$lang['sortkey_o_id'] = 'Seiten-ID';
+$lang['sortkey_o_title'] = 'Titel';
+$lang['sortorder'] = 'Sortierrichtung';
+$lang['sortorder_o_ascending'] = 'aufsteigend';
+$lang['sortorder_o_descending'] = 'absteigend';
+$lang['excluded_pages'] = 'Seiten von den Blog-Auflistungen ausschließen (regulärer Ausdruck)';
+$lang['showhistogram'] = 'Ein Histogramm auf den Archiv-Seiten anzeigen';
+$lang['max_months'] = 'Maximale Anzahl an Monaten die im Histogramm angezeigt werden sollen';
+$lang['histogram_height'] = 'Höhe des Histogramms (in Pixeln)';
diff --git a/platform/www/lib/plugins/blog/lang/en/lang.php b/platform/www/lib/plugins/blog/lang/en/lang.php
new file mode 100644
index 0000000..c3f63ee
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/en/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * English language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+
+// custom language strings for the plugin
+$lang['blog'] = 'Blog';
+$lang['older'] = 'Older entries';
+$lang['newer'] = 'Newer entries';
+$lang['newentry'] = 'New blog entry:';
+
+$lang['missing_includeplugin'] = 'The Include Plugin must be installed for the blog to work.';
+$lang['missing_pagelistplugin'] = 'The Pagelist Plugin must be installed for archive lists to work.';
+$lang['missing_tagplugin'] = 'The Tag Plugin must be installed to use tag refinements.';
+
+$lang['autoarchive'] = '%1$d Post(s) for %2$s %3$s';
+$lang['month_01'] = 'January';
+$lang['month_02'] = 'February';
+$lang['month_03'] = 'March';
+$lang['month_04'] = 'April';
+$lang['month_05'] = 'May';
+$lang['month_06'] = 'June';
+$lang['month_07'] = 'July';
+$lang['month_08'] = 'August';
+$lang['month_09'] = 'September';
+$lang['month_10'] = 'October';
+$lang['month_11'] = 'November';
+$lang['month_12'] = 'December';
+
+$lang['entries'] = 'entries';
+$lang['entry'] = 'entry';
+$lang['archive_title'] = 'Blog History';
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/platform/www/lib/plugins/blog/lang/en/settings.php b/platform/www/lib/plugins/blog/lang/en/settings.php
new file mode 100644
index 0000000..a112896
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/en/settings.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * English language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+
+// for the configuration manager
+$lang['namespace'] = 'default namespace for blog';
+
+$lang['formposition'] = 'position of the new entry form';
+$lang['formposition_o_top'] = 'top';
+$lang['formposition_o_bottom'] = 'bottom';
+$lang['formposition_o_none'] = 'none';
+
+$lang['newentrytitle'] = 'title of the new entry form';
+
+$lang['dateprefix'] = 'prefix date to new entry IDs';
+
+$lang['sortkey'] = 'sort blog entries by';
+$lang['sortkey_o_cdate'] = 'creation date';
+$lang['sortkey_o_mdate'] = 'modification date';
+$lang['sortkey_o_pagename'] = 'page name';
+$lang['sortkey_o_id'] = 'page ID';
+$lang['sortkey_o_title'] = 'title';
+
+$lang['sortorder'] = 'sort order';
+$lang['sortorder_o_ascending'] = 'ascending';
+$lang['sortorder_o_descending'] = 'descending';
+
+$lang['excluded_pages'] = 'exclude certain pages from blog listing (regular expression required)';
+
+$lang['showhistogram'] = 'Display histogram on archive rendering';
+$lang['max_months'] = 'Max months to show in the histogram';
+$lang['histogram_height'] = 'Height of the histogram (in pixels)';
+
+// vim:ts=4:sw=4:et:enc=utf-8:
diff --git a/platform/www/lib/plugins/blog/lang/eo/lang.php b/platform/www/lib/plugins/blog/lang/eo/lang.php
new file mode 100644
index 0000000..5af3c5d
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/eo/lang.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Piotr Hołda <holda.piotr@gmail.com>
+ * @author Robert Bogenschneider <bogi@uea.org>
+ */
+$lang['blog'] = 'Blogo';
+$lang['older'] = 'Pli malnovaj enskriboj';
+$lang['newer'] = 'Pli novaj enskriboj';
+$lang['newentry'] = 'Nova blog-enskribo:';
+$lang['missing_includeplugin'] = 'La "Include"-kromaĵo devas esti instalita por uzi la blogon.';
+$lang['missing_pagelistplugin'] = 'La "Pagelist"-kromaĵo devas esti instalita por uzi arkivlistojn.';
+$lang['missing_tagplugin'] = 'La "Tag"-kromaĵo devas esti instalita por ŝanĝi etikedojn.';
+$lang['autoarchive'] = '%1$d Enskribo(j) por %2$s %3$s';
+$lang['month_01'] = 'Januaro';
+$lang['month_02'] = 'Februaro';
+$lang['month_03'] = 'Marto';
+$lang['month_04'] = 'Aprilo';
+$lang['month_05'] = 'Majo';
+$lang['month_06'] = 'Junio';
+$lang['month_07'] = 'Julio';
+$lang['month_08'] = 'Aŭgusto';
+$lang['month_09'] = 'Septembro';
+$lang['month_10'] = 'Oktobro';
+$lang['month_11'] = 'Novembro';
+$lang['month_12'] = 'Decembro';
+$lang['entries'] = 'enskriboj';
+$lang['entry'] = 'enskribo';
+$lang['archive_title'] = 'Blog-historio';
diff --git a/platform/www/lib/plugins/blog/lang/eo/settings.php b/platform/www/lib/plugins/blog/lang/eo/settings.php
new file mode 100644
index 0000000..baee492
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/eo/settings.php
@@ -0,0 +1,28 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Piotr Hołda <holda.piotr@gmail.com>
+ * @author Robert Bogenschneider <bogi@uea.org>
+ */
+$lang['namespace'] = 'defaŭlta nomspaco por la blogo';
+$lang['formposition'] = 'pozicio de formularo de nova blog-enskribo';
+$lang['formposition_o_top'] = 'supro';
+$lang['formposition_o_bottom'] = 'malsupro';
+$lang['formposition_o_none'] = 'neniu';
+$lang['newentrytitle'] = 'Titolo de nova enmet-formularo';
+$lang['dateprefix'] = 'prefikso al novaj enskrib-ID-oj';
+$lang['sortkey'] = 'ordigi blog-enskriboj laŭ';
+$lang['sortkey_o_cdate'] = 'kreodato';
+$lang['sortkey_o_mdate'] = 'modifodato';
+$lang['sortkey_o_pagename'] = 'paĝ-nomo';
+$lang['sortkey_o_id'] = 'paĝ-identigilo';
+$lang['sortkey_o_title'] = 'titolo';
+$lang['sortorder'] = 'ordiga ordo';
+$lang['sortorder_o_ascending'] = 'kreskante';
+$lang['sortorder_o_descending'] = 'malkreskante';
+$lang['excluded_pages'] = 'ekskludi certajn paĝojn de bloglistado (per regula esprimo)';
+$lang['showhistogram'] = 'Montri histogramon de arkivado';
+$lang['max_months'] = 'Montri maksimume tiom da monatoj en la histogramo';
+$lang['histogram_height'] = 'Alteco de la histogramo (en pikseloj)';
diff --git a/platform/www/lib/plugins/blog/lang/es/lang.php b/platform/www/lib/plugins/blog/lang/es/lang.php
new file mode 100644
index 0000000..68ef65a
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/es/lang.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Herman Fabián Sandoval Manrique <hfsandovalm@emzac.com>
+ * @author r0sk <r0sk10@gmail.com>
+ */
+$lang['blog'] = 'Blog';
+$lang['older'] = 'Entradas anteriores';
+$lang['newer'] = 'Entradas nuevas';
+$lang['newentry'] = 'Nueva entrada en el blog:';
+$lang['missing_includeplugin'] = 'El plugin Include debe estar instalado para que el blog funcione.';
+$lang['missing_pagelistplugin'] = 'El plugin Pagelist debe estar instalado para que funcionen los listados de archivo.';
+$lang['missing_tagplugin'] = 'El plugin Tag debe estar instalado para que funcionen los tags.';
+$lang['month_01'] = 'Enero';
+$lang['month_02'] = 'Febrero';
+$lang['month_03'] = 'Marzo';
+$lang['month_04'] = 'Abril';
+$lang['month_05'] = 'Mayo';
+$lang['month_06'] = 'Junio';
+$lang['month_07'] = 'Julio';
+$lang['month_08'] = 'Agosto';
+$lang['month_09'] = 'Septiembre';
+$lang['month_10'] = 'Octubre';
+$lang['month_11'] = 'Noviembre';
+$lang['month_12'] = 'Diciembre';
+$lang['entries'] = 'entradas';
+$lang['entry'] = 'entrada';
+$lang['archive_title'] = 'Histórico';
diff --git a/platform/www/lib/plugins/blog/lang/es/settings.php b/platform/www/lib/plugins/blog/lang/es/settings.php
new file mode 100644
index 0000000..d86f15a
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/es/settings.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Herman Fabián Sandoval Manrique <hfsandovalm@emzac.com>
+ * @author r0sk <r0sk10@gmail.com>
+ */
+$lang['namespace'] = 'namespace predeterminado para el blog';
+$lang['formposition'] = 'posición del formulario de nueva entrada';
+$lang['formposition_o_top'] = 'arriba';
+$lang['formposition_o_bottom'] = 'abajo';
+$lang['formposition_o_none'] = 'ninguna';
+$lang['newentrytitle'] = 'título del formulario de nueva entrada';
+$lang['sortkey'] = 'ordenar entradas por';
+$lang['sortkey_o_cdate'] = 'fecha de creación';
+$lang['sortkey_o_mdate'] = 'fecha de modificación';
+$lang['sortkey_o_pagename'] = 'nombre de página';
+$lang['sortkey_o_id'] = 'ID de página';
+$lang['sortkey_o_title'] = 'título';
+$lang['sortorder'] = 'ordenamiento';
+$lang['sortorder_o_ascending'] = 'ascendente';
+$lang['sortorder_o_descending'] = 'descendente';
diff --git a/platform/www/lib/plugins/blog/lang/fa/lang.php b/platform/www/lib/plugins/blog/lang/fa/lang.php
new file mode 100644
index 0000000..ca6b600
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/fa/lang.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Sam01 <m.sajad079@gmail.com>
+ */
+$lang['blog'] = 'وبلاگ';
+$lang['older'] = 'نوشته‌های قدیمی‌تر';
+$lang['newer'] = 'نوشته‌های جدیدتر';
+$lang['newentry'] = 'ثبت وبلاگ جدید:';
+$lang['missing_includeplugin'] = 'برای کارکردن وبلاگ نیاز به نصب پلاگین است.';
+$lang['missing_pagelistplugin'] = 'پلاگینPagelist باید برای آرشیوبندی نصب شود.';
+$lang['missing_tagplugin'] = 'پلاگین برچسب باید نصب شود تا اصطلاحات آن استفاده شود.';
+$lang['autoarchive'] = '%1$d مطلب (s) برای %2$s %3$s';
+$lang['month_01'] = 'ژانویه';
+$lang['month_02'] = 'فوریه';
+$lang['month_03'] = 'مارس';
+$lang['month_04'] = 'آوریل';
+$lang['month_05'] = 'می';
+$lang['month_06'] = 'ژوئن';
+$lang['month_07'] = 'جولای';
+$lang['month_08'] = 'اوت';
+$lang['month_09'] = 'سپتامبر';
+$lang['month_10'] = 'اکتبر';
+$lang['month_11'] = 'نوامبر';
+$lang['month_12'] = 'دسامبر';
+$lang['entries'] = 'ورودی‌ها';
+$lang['entry'] = 'ورودی';
+$lang['archive_title'] = 'تاریخچه وبلاگ';
diff --git a/platform/www/lib/plugins/blog/lang/fa/settings.php b/platform/www/lib/plugins/blog/lang/fa/settings.php
new file mode 100644
index 0000000..4c72e67
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/fa/settings.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Sam01 <m.sajad079@gmail.com>
+ */
+$lang['namespace'] = 'فضای نام پیش‌فرض برای وبلاگ';
+$lang['formposition'] = 'موقعیت فرم جدید وارد شده';
+$lang['formposition_o_top'] = 'بالا';
+$lang['formposition_o_bottom'] = 'پایین';
+$lang['formposition_o_none'] = 'هیچ';
+$lang['newentrytitle'] = 'عنوان فرم جدید وارد شده';
+$lang['dateprefix'] = 'تاریخ پیشوند آیدی‌های ورودی‌های جدید';
+$lang['sortkey'] = 'مرتب سازی مطالب وبلاگ براساس';
+$lang['sortkey_o_cdate'] = 'تاریخ ایجاد';
+$lang['sortkey_o_mdate'] = 'تاریخ اصلاح';
+$lang['sortkey_o_pagename'] = 'نام صفحه';
+$lang['sortkey_o_id'] = 'آیدی صفحه';
+$lang['sortkey_o_title'] = 'عنوان';
+$lang['sortorder'] = 'مرتب سازی سفارشی';
+$lang['sortorder_o_ascending'] = 'صعودی';
+$lang['sortorder_o_descending'] = 'نزولی';
+$lang['excluded_pages'] = 'به غیر از صفحه‌های خاص از لیست وبلاگ (عبارت منظم مورد نیاز است)';
+$lang['showhistogram'] = 'نمایش بافت‌نگار در تفسیر آرشیو';
+$lang['max_months'] = 'حداکثر ماه‌ها برای نمایش بافت‌نگار';
+$lang['histogram_height'] = 'ارتفاع بافت‌نگار (به پیکسل)';
diff --git a/platform/www/lib/plugins/blog/lang/fr/lang.php b/platform/www/lib/plugins/blog/lang/fr/lang.php
new file mode 100644
index 0000000..c786d5f
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/fr/lang.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Damien Raude-Morvan <drazzib@drazzib.com>
+ * @author Stanislas Reltgen <stanislas@reltgen.net>
+ * @author Florent Chabaud <fchabaud@free.fr>
+ */
+$lang['blog'] = 'Blog';
+$lang['older'] = 'Anciens billets';
+$lang['newer'] = 'Billets récents';
+$lang['newentry'] = 'Nouveau billet :';
+$lang['missing_includeplugin'] = 'Le module "include" doit être installé pour que le module "blog" puisse fonctionner.';
+$lang['missing_pagelistplugin'] = 'Le module "pagelist" doit être installé pour que les archives puissent fonctionner.';
+$lang['missing_tagplugin'] = 'Le module "tag" doit être installé pour pouvoir en bénéficier dans le module "blog".';
+$lang['autoarchive'] = '%1$d billet(s) pour %2$s %3$s';
+$lang['month_01'] = 'janvier';
+$lang['month_02'] = 'février';
+$lang['month_03'] = 'mars';
+$lang['month_04'] = 'avril';
+$lang['month_05'] = 'mai';
+$lang['month_06'] = 'juin';
+$lang['month_07'] = 'juillet';
+$lang['month_08'] = 'août';
+$lang['month_09'] = 'septembre';
+$lang['month_10'] = 'octobre';
+$lang['month_11'] = 'novembre';
+$lang['month_12'] = 'décembre';
+$lang['entries'] = 'billets';
+$lang['entry'] = 'billet';
+$lang['archive_title'] = 'Historique du blog';
diff --git a/platform/www/lib/plugins/blog/lang/fr/settings.php b/platform/www/lib/plugins/blog/lang/fr/settings.php
new file mode 100644
index 0000000..21902e6
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/fr/settings.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Stanislas Reltgen <stanislas@reltgen.net>
+ * @author Florent Chabaud <fchabaud@free.fr>
+ * @author Nicolas Friedli <nicolas@theologique.ch>
+ */
+$lang['namespace'] = 'espace de nom par défaut pour le blog';
+$lang['formposition'] = 'position du formulaire de saisie de nouveau billet';
+$lang['formposition_o_top'] = 'haut';
+$lang['formposition_o_bottom'] = 'bas';
+$lang['formposition_o_none'] = 'aucun';
+$lang['newentrytitle'] = 'titre de la nouvelle entrée de formulaire';
+$lang['dateprefix'] = 'date préfixant les IDs des nouveaux billets';
+$lang['sortkey'] = 'trier les billets du blog par:';
+$lang['sortkey_o_cdate'] = 'date de création';
+$lang['sortkey_o_mdate'] = 'date de modification';
+$lang['sortkey_o_pagename'] = 'nom de la page';
+$lang['sortkey_o_id'] = 'ID de la page';
+$lang['sortkey_o_title'] = 'titre';
+$lang['sortorder'] = 'ordre de tri';
+$lang['sortorder_o_ascending'] = 'croissant';
+$lang['sortorder_o_descending'] = 'décroissant';
+$lang['excluded_pages'] = 'exclure certaines pages des archives du blog (expression régulière requise)';
+$lang['showhistogram'] = 'Afficher l\'histogramme du rendu des archives';
+$lang['max_months'] = 'Nombre maximal de mois à représenter dans l\'histogramme';
+$lang['histogram_height'] = 'Hauteur de l\'histogramme (en pixels)';
diff --git a/platform/www/lib/plugins/blog/lang/hu/lang.php b/platform/www/lib/plugins/blog/lang/hu/lang.php
new file mode 100644
index 0000000..85f47c4
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/hu/lang.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Norbert Csík <norbert.csik@gmail.com>
+ * @author Serenity87HUN <anikototh87@gmail.com>
+ * @author Marina Vladi <deldadam@gmail.com>
+ */
+$lang['blog'] = 'Napló';
+$lang['older'] = 'régi bejegyzések';
+$lang['newer'] = 'új bejegyzések';
+$lang['newentry'] = 'Új bejegyzés:';
+$lang['missing_includeplugin'] = 'Az \'Include Plugin\'-t telepítenünk kell a napló (blog) működéséhez.';
+$lang['missing_pagelistplugin'] = 'A \'Pagelist Plugin\'-t telepítenünk kell az archiválási listák működéséhez.';
+$lang['missing_tagplugin'] = 'A \'Tag Plugin\'-t telepítenünk kell a címkék használatához.';
+$lang['autoarchive'] = '%1$d hozzászólás ehhez: %2$s %3$s';
+$lang['month_01'] = 'Január';
+$lang['month_02'] = 'Február';
+$lang['month_03'] = 'Március';
+$lang['month_04'] = 'Április';
+$lang['month_05'] = 'Május';
+$lang['month_06'] = 'Június';
+$lang['month_07'] = 'Július';
+$lang['month_08'] = 'Augusztus';
+$lang['month_09'] = 'Szeptember';
+$lang['month_10'] = 'Október';
+$lang['month_11'] = 'November';
+$lang['month_12'] = 'December';
+$lang['entries'] = 'bejegyzés';
+$lang['entry'] = 'bejegyzés';
+$lang['archive_title'] = 'Naplótörténet';
diff --git a/platform/www/lib/plugins/blog/lang/hu/settings.php b/platform/www/lib/plugins/blog/lang/hu/settings.php
new file mode 100644
index 0000000..01a0aff
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/hu/settings.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Norbert Csík <norbert.csik@gmail.com>
+ * @author Serenity87HUN <anikototh87@gmail.com>
+ * @author Marina Vladi <deldadam@gmail.com>
+ */
+$lang['namespace'] = 'napló alapértelmezett névtere';
+$lang['formposition'] = 'új bejegyzés űrlapjának helye';
+$lang['formposition_o_top'] = 'felül';
+$lang['formposition_o_bottom'] = 'alul';
+$lang['formposition_o_none'] = 'sehol';
+$lang['newentrytitle'] = 'új bejegyzés űrlapcíme';
+$lang['dateprefix'] = 'Dátumelőtag új bejegyzések ID-jéhez';
+$lang['sortkey'] = 'naplóbejegyzések rendezése eszerint';
+$lang['sortkey_o_cdate'] = 'készítés dátuma';
+$lang['sortkey_o_mdate'] = 'módosítás dátuma';
+$lang['sortkey_o_pagename'] = 'oldalnév';
+$lang['sortkey_o_id'] = 'oldalazonosító';
+$lang['sortkey_o_title'] = 'cím';
+$lang['sortorder'] = 'rendezés iránya';
+$lang['sortorder_o_ascending'] = 'növekvő';
+$lang['sortorder_o_descending'] = 'csökkenő';
+$lang['excluded_pages'] = 'bizonyos oldalak kihagyása a blog listázása esetén (regurális kifejezés használata szükséges)';
+$lang['showhistogram'] = 'Grafikon megjelenítése archiváláskor';
+$lang['max_months'] = 'Grafikonon megjelenítendő hónapok max. száma';
+$lang['histogram_height'] = 'Grafikon magassága (pixelben)';
diff --git a/platform/www/lib/plugins/blog/lang/it/lang.php b/platform/www/lib/plugins/blog/lang/it/lang.php
new file mode 100644
index 0000000..874253c
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/it/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Italian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Niccolo Rigacci <niccolo@rigacci.org>
+ */
+
+// custom language strings for the plugin
+$lang['older'] = 'Articoli meno recenti';
+$lang['newer'] = 'Articoli più recent';
+$lang['newentry'] = 'Nuovo articolo:';
+
+$lang['missing_includeplugin'] = 'Questo blog non funziona senza il plugin Include.';
+$lang['missing_pagelistplugin'] = 'Questo blog non funziona senza il plugin Pagelist.';
+$lang['missing_tagplugin'] = 'Per utilizare i tag è ncessario installare il Plugin Tag.';
+
+$lang['autoarchive'] = '%1$d Articoli del %2$s %3$s';
+$lang['month_01'] = 'Gennaio';
+$lang['month_02'] = 'Febbraio';
+$lang['month_03'] = 'Marzo';
+$lang['month_04'] = 'Aprile';
+$lang['month_05'] = 'Maggio';
+$lang['month_06'] = 'Giugno';
+$lang['month_07'] = 'Luglio';
+$lang['month_08'] = 'Agosto';
+$lang['month_09'] = 'Settembre';
+$lang['month_10'] = 'Ottobre';
+$lang['month_11'] = 'Novembre';
+$lang['month_12'] = 'Dicembre';
+
+$lang['entries'] = 'Voci';
+$lang['entry'] = 'Voce';
+$lang['archive_title'] = 'Archivio Blog';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/platform/www/lib/plugins/blog/lang/it/settings.php b/platform/www/lib/plugins/blog/lang/it/settings.php
new file mode 100644
index 0000000..7026236
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/it/settings.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Italian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Niccolo Rigacci <niccolo@rigacci.org>
+ */
+
+// for the configuration manager
+$lang['namespace'] = 'Namespace predefinito per il blog';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/platform/www/lib/plugins/blog/lang/ja/lang.php b/platform/www/lib/plugins/blog/lang/ja/lang.php
new file mode 100644
index 0000000..51ec982
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/ja/lang.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Hideaki SAWADA <chuno@live.jp>
+ */
+$lang['blog'] = 'ブログ';
+$lang['older'] = '古い記事';
+$lang['newer'] = '新しい記事';
+$lang['newentry'] = '新しい記事の投稿:';
+$lang['missing_includeplugin'] = 'blog 構文が動くために Include プラグインが必要';
+$lang['missing_pagelistplugin'] = 'archive 構文が動くために Pagelist プラグインが必要';
+$lang['missing_tagplugin'] = 'タグ機能を使用するために Tag プラグインが必要';
+$lang['autoarchive'] = '%3$s年%2$sの%1$d記事';
+$lang['month_01'] = '01月';
+$lang['month_02'] = '02月';
+$lang['month_03'] = '03月';
+$lang['month_04'] = '04月';
+$lang['month_05'] = '05月';
+$lang['month_06'] = '06月';
+$lang['month_07'] = '07月';
+$lang['month_08'] = '08月';
+$lang['month_09'] = '09月';
+$lang['month_10'] = '10月';
+$lang['month_11'] = '11月';
+$lang['month_12'] = '12月';
+$lang['entries'] = '記事';
+$lang['entry'] = '記事';
+$lang['archive_title'] = 'ブログ履歴';
diff --git a/platform/www/lib/plugins/blog/lang/ja/settings.php b/platform/www/lib/plugins/blog/lang/ja/settings.php
new file mode 100644
index 0000000..b848358
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/ja/settings.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Hideaki SAWADA <chuno@live.jp>
+ */
+$lang['namespace'] = 'ブログ用のデフォルト名前空間';
+$lang['formposition'] = '新しい記事投稿用フォームの位置';
+$lang['formposition_o_top'] = '上部';
+$lang['formposition_o_bottom'] = '下部';
+$lang['formposition_o_none'] = '非表示';
+$lang['newentrytitle'] = '新しい記事投稿用フォームの題名';
+$lang['dateprefix'] = '新しい記事のページIDの先頭に付加する日付形式';
+$lang['sortkey'] = '記事のソート項目';
+$lang['sortkey_o_cdate'] = '作成日';
+$lang['sortkey_o_mdate'] = '変更日';
+$lang['sortkey_o_pagename'] = 'ページ名';
+$lang['sortkey_o_id'] = 'ページ ID';
+$lang['sortkey_o_title'] = 'タイトル';
+$lang['sortorder'] = 'ソート順';
+$lang['sortorder_o_ascending'] = '昇順';
+$lang['sortorder_o_descending'] = '降順';
+$lang['excluded_pages'] = '記事一覧から除外するページ(正規表現)';
+$lang['showhistogram'] = '記事一覧にヒストグラムを表示する';
+$lang['max_months'] = 'ヒストグラムに表示する最大月数';
+$lang['histogram_height'] = 'ヒストグラムの高さ(ピクセル)';
diff --git a/platform/www/lib/plugins/blog/lang/ko/lang.php b/platform/www/lib/plugins/blog/lang/ko/lang.php
new file mode 100644
index 0000000..a97d074
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/ko/lang.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Myeongjin <aranet100@gmail.com>
+ */
+$lang['blog'] = '블로그';
+$lang['older'] = '오래된 항목';
+$lang['newer'] = '새 항목';
+$lang['newentry'] = '새 블로그 항목:';
+$lang['missing_includeplugin'] = 'Include 플러그인은 블로그가 작동하기 위해 설치되어야 합니다.';
+$lang['missing_pagelistplugin'] = 'Pagelist 플러그인은 보존 목록이 작동하기 위해 설치되어야 합니다.';
+$lang['missing_tagplugin'] = 'Tag 플러그인은 태그 분류를 사용하기 위해 설치되어야 합니다.';
+$lang['autoarchive'] = '%3$s년 %2$s의 게시물 %1$d개';
+$lang['month_01'] = '1월';
+$lang['month_02'] = '2월';
+$lang['month_03'] = '3월';
+$lang['month_04'] = '4월';
+$lang['month_05'] = '5월';
+$lang['month_06'] = '6월';
+$lang['month_07'] = '7월';
+$lang['month_08'] = '8월';
+$lang['month_09'] = '9월';
+$lang['month_10'] = '10월';
+$lang['month_11'] = '11월';
+$lang['month_12'] = '12월';
+$lang['entries'] = '항목';
+$lang['entry'] = '항목';
+$lang['archive_title'] = '블로그 역사';
diff --git a/platform/www/lib/plugins/blog/lang/ko/settings.php b/platform/www/lib/plugins/blog/lang/ko/settings.php
new file mode 100644
index 0000000..fc20515
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/ko/settings.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Myeongjin <aranet100@gmail.com>
+ */
+$lang['namespace'] = '블로그에 대한 기본 이름공간';
+$lang['formposition'] = '새 항목 양식의 위치';
+$lang['formposition_o_top'] = '위';
+$lang['formposition_o_bottom'] = '아래';
+$lang['formposition_o_none'] = '없음';
+$lang['newentrytitle'] = '새 항목 양식의 제목';
+$lang['dateprefix'] = '새 항목 ID에 접두어 날짜';
+$lang['sortkey'] = '블로그 항목 순서로 정렬';
+$lang['sortkey_o_cdate'] = '만든 날짜';
+$lang['sortkey_o_mdate'] = '수정한 날짜';
+$lang['sortkey_o_pagename'] = '문서 이름';
+$lang['sortkey_o_id'] = '문서 ID';
+$lang['sortkey_o_title'] = '제목';
+$lang['sortorder'] = '정렬 순서';
+$lang['sortorder_o_ascending'] = '오름차순';
+$lang['sortorder_o_descending'] = '내림차순';
+$lang['excluded_pages'] = '블로그 목록에서 특정 문서를 제외 (정규 표현식 필요)';
+$lang['showhistogram'] = '보존 렌더링에 히스토그램 표시';
+$lang['max_months'] = '히스토그램에서 보여줄 최대 월';
+$lang['histogram_height'] = '히스토그램의 높이 (픽셀)';
diff --git a/platform/www/lib/plugins/blog/lang/nl/lang.php b/platform/www/lib/plugins/blog/lang/nl/lang.php
new file mode 100644
index 0000000..da4a889
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/nl/lang.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Gijs H. van Gemert <g.v.gemert@inter.nl.net>
+ * @author Mark Prins <mprins@users.sf.net>
+ */
+$lang['blog'] = 'Blog';
+$lang['older'] = 'Oude berichten';
+$lang['newer'] = 'Nieuwe berichten';
+$lang['newentry'] = 'Nieuw bericht:';
+$lang['missing_includeplugin'] = 'De Include Plugin dient geïnstalleerd te zijn om de blog te laten werken.';
+$lang['missing_pagelistplugin'] = 'De Pagelist Plugin dient geïnstalleerd te zijn om archief lijsten te laten werken.';
+$lang['missing_tagplugin'] = 'De Tag Plugin dient geïnstalleerd te zijn om label filters te laten werken.';
+$lang['autoarchive'] = '%1$d artikel(en) voor %2$s %3$s';
+$lang['month_01'] = 'januari';
+$lang['month_02'] = 'februari';
+$lang['month_03'] = 'maart';
+$lang['month_04'] = 'april';
+$lang['month_05'] = 'mei';
+$lang['month_06'] = 'juni';
+$lang['month_07'] = 'juli';
+$lang['month_08'] = 'augustus';
+$lang['month_09'] = 'september';
+$lang['month_10'] = 'october';
+$lang['month_11'] = 'november';
+$lang['month_12'] = 'december';
+$lang['entries'] = 'berichten';
+$lang['entry'] = 'bericht';
+$lang['archive_title'] = 'Blog geschiedenis';
diff --git a/platform/www/lib/plugins/blog/lang/nl/settings.php b/platform/www/lib/plugins/blog/lang/nl/settings.php
new file mode 100644
index 0000000..2431948
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/nl/settings.php
@@ -0,0 +1,28 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Gijs van Gemert <gijsh@sherpanet.nl>
+ * @author Mark Prins <mprins@users.sf.net>
+ */
+$lang['namespace'] = 'default namespace voor blog';
+$lang['formposition'] = 'positie van het nieuwe bericht formulier';
+$lang['formposition_o_top'] = 'boven';
+$lang['formposition_o_bottom'] = 'onder';
+$lang['formposition_o_none'] = 'geen';
+$lang['newentrytitle'] = 'titels van het nieuwe bericht formulier';
+$lang['dateprefix'] = 'datum prefix aan nieuwe bericht IDs toevoegen';
+$lang['sortkey'] = 'Sorteer blog berichten op';
+$lang['sortkey_o_cdate'] = 'aanmaak datum';
+$lang['sortkey_o_mdate'] = 'bewerkingsdatum';
+$lang['sortkey_o_pagename'] = 'pagina naam';
+$lang['sortkey_o_id'] = 'pagina ID';
+$lang['sortkey_o_title'] = 'titel';
+$lang['sortorder'] = 'sorteer volgorde';
+$lang['sortorder_o_ascending'] = 'oplopend';
+$lang['sortorder_o_descending'] = 'aflopend';
+$lang['excluded_pages'] = 'bepaalde pagina\'s uitsluiten van blog lijst (vereist reguliere expressie)';
+$lang['showhistogram'] = 'Histogram tonen in de archief weergave';
+$lang['max_months'] = 'Maximum aantal te tonen maanden in het histogram';
+$lang['histogram_height'] = 'Hoogte van het histogram (in pixels)';
diff --git a/platform/www/lib/plugins/blog/lang/pl/lang.php b/platform/www/lib/plugins/blog/lang/pl/lang.php
new file mode 100644
index 0000000..3cdbeaf
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/pl/lang.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Bartek S <sadupl@gmail.com>
+ * @author Radoslaw Gorniak
+ * @author Tomasz Dworakowski <tomaszdworakowski@gmail.com>
+ */
+$lang['blog'] = 'Blog';
+$lang['older'] = 'Wcześniejsze wpisy';
+$lang['newer'] = 'Nowsze wpisy';
+$lang['newentry'] = 'Nowy wpis';
+$lang['missing_includeplugin'] = 'Wtyczka Include musi być zainstalowana, aby blog mógł działać poprawnie.';
+$lang['missing_pagelistplugin'] = 'Wtyczka Pagelist musi być zainstalowana, aby archiwizacja mógła działać poprawnie.';
+$lang['missing_tagplugin'] = 'Wtyczka Tag Plugin musi być zainstalowana, aby móc używać tagów.';
+$lang['month_01'] = 'Styczeń';
+$lang['month_02'] = 'Luty';
+$lang['month_03'] = 'Marzec';
+$lang['month_04'] = 'Kwiecień';
+$lang['month_05'] = 'Maj';
+$lang['month_06'] = 'Czerwiec';
+$lang['month_07'] = 'Lipiec';
+$lang['month_08'] = 'Sierpień';
+$lang['month_09'] = 'Wrzesień';
+$lang['month_10'] = 'Październik';
+$lang['month_11'] = 'Listopad';
+$lang['month_12'] = 'Grudzień';
+$lang['entries'] = 'wyników';
+$lang['entry'] = 'wynik';
+$lang['archive_title'] = 'Historia bloga';
diff --git a/platform/www/lib/plugins/blog/lang/pl/settings.php b/platform/www/lib/plugins/blog/lang/pl/settings.php
new file mode 100644
index 0000000..8890afa
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/pl/settings.php
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Bartek S <sadupl@gmail.com>
+ * @author Radoslaw Gorniak
+ * @author Tomasz Dworakowski <tomaszdworakowski@gmail.com>
+ */
+$lang['namespace'] = 'Domyślna przestrzeń nazw dla bloga';
+$lang['formposition'] = 'Pozycja formularza nowy wpis';
+$lang['formposition_o_top'] = 'góra';
+$lang['formposition_o_bottom'] = 'dół';
+$lang['formposition_o_none'] = 'brak';
+$lang['dateprefix'] = 'Dołącz datę do ID nowego wpisu (ciąg formatujący datę)';
+$lang['sortkey'] = 'Sortuj wpisy używając';
+$lang['sortkey_o_cdate'] = 'daty stworzenia';
+$lang['sortkey_o_mdate'] = 'daty modifikacji';
+$lang['sortkey_o_pagename'] = 'nazwy strony';
+$lang['sortkey_o_id'] = 'ID strony';
+$lang['sortkey_o_title'] = 'tytułu';
+$lang['sortorder'] = 'Kolejność sortowania';
+$lang['sortorder_o_ascending'] = 'rosnąca';
+$lang['sortorder_o_descending'] = 'malejąca';
+$lang['max_months'] = 'Maksymalna liczba miesięcy do pokazania w histogramie';
diff --git a/platform/www/lib/plugins/blog/lang/pt-br/lang.php b/platform/www/lib/plugins/blog/lang/pt-br/lang.php
new file mode 100644
index 0000000..bd219ba
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/pt-br/lang.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Flávio Roberto Santos <flavio.barata@gmail.com>
+ * @author Samory Pereira Santos <samory.santos@gmail.com>
+ */
+$lang['blog'] = 'Blog';
+$lang['older'] = 'registros antigos';
+$lang['newer'] = 'registros mais novos';
+$lang['newentry'] = 'Novo registro do blog:';
+$lang['missing_includeplugin'] = 'O plugin Inlude deve estar instalado para que o blog funcione.';
+$lang['missing_pagelistplugin'] = 'O plugin Pagelist deve estar instalado para que a listagem de arquivo funcione,';
+$lang['missing_tagplugin'] = 'O plugin Tag deve estar instalado para usar refinamentos de etiquetagem.';
+$lang['month_01'] = 'Janeiro';
+$lang['month_02'] = 'Fevereiro';
+$lang['month_03'] = 'Março';
+$lang['month_04'] = 'Abril';
+$lang['month_05'] = 'Maio';
+$lang['month_06'] = 'Junho';
+$lang['month_07'] = 'Julho';
+$lang['month_08'] = 'Agosto';
+$lang['month_09'] = 'Setembro';
+$lang['month_10'] = 'Outubro';
+$lang['month_11'] = 'Novembro';
+$lang['month_12'] = 'Dezembro';
+$lang['entries'] = 'entradas';
+$lang['entry'] = 'entrada';
+$lang['archive_title'] = 'Histórico do Blog';
diff --git a/platform/www/lib/plugins/blog/lang/pt-br/settings.php b/platform/www/lib/plugins/blog/lang/pt-br/settings.php
new file mode 100644
index 0000000..1346c22
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/pt-br/settings.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Fabio Pereira de Sousa <fabiosousa.eti@gmail.com>
+ * @author Flávio Roberto Santos <flavio.barata@gmail.com>
+ * @author Samory Pereira Santos <samory.santos@gmail.com>
+ */
+$lang['namespace'] = 'namespace padrão para o blog';
+$lang['formposition'] = 'posição do novo formulário de inscrição';
+$lang['formposition_o_top'] = 'topo';
+$lang['formposition_o_bottom'] = 'final';
+$lang['formposition_o_none'] = 'nenhum';
+$lang['newentrytitle'] = 'título do novo formulário de inscrição';
+$lang['dateprefix'] = 'prefixo de data para novos IDs de entrada';
+$lang['sortkey'] = 'ordenar as entradas do blog por';
+$lang['sortkey_o_cdate'] = 'data de criação';
+$lang['sortkey_o_mdate'] = 'data de modificação';
+$lang['sortkey_o_pagename'] = 'nome da página';
+$lang['sortkey_o_id'] = 'ID da página';
+$lang['sortkey_o_title'] = 'título';
+$lang['sortorder'] = 'ordenação';
+$lang['sortorder_o_ascending'] = 'ascendente';
+$lang['sortorder_o_descending'] = 'descendente';
+$lang['excluded_pages'] = 'excluir determinadas páginas da listagem do blog (requer expressões regulares)';
+$lang['showhistogram'] = 'Exibir histograma na renderização de archive';
+$lang['max_months'] = 'Máximo de meses para mostrar no histograma';
+$lang['histogram_height'] = 'Altura do histograma (em pixels)';
diff --git a/platform/www/lib/plugins/blog/lang/pt/lang.php b/platform/www/lib/plugins/blog/lang/pt/lang.php
new file mode 100644
index 0000000..2816f05
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/pt/lang.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Fernando Ribeiro <pinguim.ribeiro@gmail.com>
+ */
+$lang['blog'] = 'Blog';
+$lang['older'] = 'Entradas mais antigas';
+$lang['newer'] = 'Entradas mais recentes';
+$lang['newentry'] = 'Nova entrada do blog:';
+$lang['missing_includeplugin'] = 'O Plugin Include deve estar instalado para o blog funcionar.';
+$lang['missing_pagelistplugin'] = 'O Plugin Pagelist deve estar instalado para as listas do arquivo funcionarem.';
+$lang['missing_tagplugin'] = 'O Plugin Tag deve estar instalado para as etiquetas funcionarem.';
+$lang['autoarchive'] = '%1$d Artigo(s) para %2$s %3$s';
+$lang['month_01'] = 'Janeiro';
+$lang['month_02'] = 'Fevereiro';
+$lang['month_03'] = 'Março';
+$lang['month_04'] = 'Abril';
+$lang['month_05'] = 'Maio';
+$lang['month_06'] = 'Junho';
+$lang['month_07'] = 'Julho';
+$lang['month_08'] = 'Agosto';
+$lang['month_09'] = 'Setembro';
+$lang['month_10'] = 'Outubro';
+$lang['month_11'] = 'Novembro';
+$lang['month_12'] = 'Dezembro';
+$lang['entries'] = 'entradas';
+$lang['entry'] = 'entrada';
+$lang['archive_title'] = 'Histórico do Blog';
diff --git a/platform/www/lib/plugins/blog/lang/pt/settings.php b/platform/www/lib/plugins/blog/lang/pt/settings.php
new file mode 100644
index 0000000..43720ae
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/pt/settings.php
@@ -0,0 +1,28 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Fernando Ribeiro <pinguim.ribeiro@gmail.com>
+ */
+$lang['namespace'] = 'default namespace for blog';
+$lang['formposition'] = 'posição do formulário de entrada nova';
+$lang['formposition_o_top'] = 'topo';
+$lang['formposition_o_bottom'] = 'fundo';
+$lang['formposition_o_none'] = 'nenhum';
+$lang['newentrytitle'] = 'título do formulário de entrada nova';
+$lang['dateprefix'] = 'prefixo do ID para a nova entrada';
+$lang['sortkey'] = 'ordenar entradas do blog por';
+$lang['sortkey_o_cdate'] = 'data de criação';
+$lang['sortkey_o_mdate'] = 'data de modificação';
+$lang['sortkey_o_pagename'] = 'nome da página';
+$lang['sortkey_o_id'] = 'ID da página';
+$lang['sortkey_o_title'] = 'título';
+$lang['sortorder'] = 'ordenação';
+$lang['sortorder_o_ascending'] = 'ascendente';
+$lang['sortorder_o_descending'] = 'descendente';
+$lang['excluded_pages'] = 'excluir determinadas páginas da listagem do blog (requer expressão regular)';
+$lang['showhistogram'] = 'Mostrar histograma na representação do arquivo';
+$lang['max_months'] = 'Nº máximo de meses para mostrar no histograma';
+$lang['histogram_height'] = 'Altura do histograma (em pixels)';
diff --git a/platform/www/lib/plugins/blog/lang/ro/lang.php b/platform/www/lib/plugins/blog/lang/ro/lang.php
new file mode 100644
index 0000000..5a216db
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/ro/lang.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Romanian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Florin Chitiul <florinko@gmail.com>
+ */
+// custom language strings for the plugin
+$lang['blog'] = 'Blog';
+$lang['older'] = 'Intrări vechi';
+$lang['newer'] = 'Intrări mai noi';
+$lang['newentry'] = 'Postare nouă:';
+$lang['missing_includeplugin'] = 'Plugin-ul Include trebuie să fie instalat pentru ca blogul să fie funcțional.';
+$lang['missing_pagelistplugin'] = 'The Pagelist Plugin must be installed for archive lists to work.';
+$lang['missing_tagplugin'] = 'Plugin-ul Tag trebuie să fie instalat pentru a utiliza convocări subtile tag.';
+$lang['autoarchive'] = '%1$d Post(ări) pentru %2$lea %3$lea';
+$lang['month_01'] = 'Ianuarie';
+$lang['month_02'] = 'Februarie';
+$lang['month_03'] = 'Martie';
+$lang['month_04'] = 'Aprilie';
+$lang['month_05'] = 'Mai';
+$lang['month_06'] = 'Iunie';
+$lang['month_07'] = 'Iulie';
+$lang['month_08'] = 'August';
+$lang['month_09'] = 'Septembrie';
+$lang['month_10'] = 'Octobrie';
+$lang['month_11'] = 'Noiebrie';
+$lang['month_12'] = 'Decembrie';
+$lang['entries'] = 'intrări';
+$lang['entry'] = 'intrare';
+$lang['archive_title'] = 'Istoria blogului';
diff --git a/platform/www/lib/plugins/blog/lang/ro/settings.php b/platform/www/lib/plugins/blog/lang/ro/settings.php
new file mode 100644
index 0000000..f5407dd
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/ro/settings.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Romanian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Florin Chitiul <florinko@gmail.com>
+ */
+
+// for the configuration manager
+$lang['namespace'] = 'numele implicit al blogului';
+$lang['formposition'] = 'poziția formularului de inserare nouă';
+$lang['formposition_o_top'] = 'sus';
+$lang['formposition_o_bottom'] = 'jos';
+$lang['formposition_o_none'] = 'niciuna';
+$lang['newentrytitle'] = 'titlul inserării formularului de inserare nouă';
+$lang['dateprefix'] = 'prefixul datei identității noii inserări';
+$lang['sortkey'] = 'sortează intrările blogului după data celei mai noi inserări';
+$lang['sortkey_o_cdate'] = 'data creării';
+$lang['sortkey_o_mdate'] = 'data modificării';
+$lang['sortkey_o_pagename'] = 'numele paginii';
+$lang['sortkey_o_id'] = 'ID-ul paginii';
+$lang['sortkey_o_title'] = 'titlul';
+$lang['sortorder'] = 'ordinea de sortare';
+$lang['sortorder_o_ascending'] = 'crescatoare';
+$lang['sortorder_o_descending'] = 'descrescatoare';
+$lang['excluded_pages'] = 'exclude anumite pagini de la listarea în blog (sunt necesare expresii)';
+$lang['showhistogram'] = 'Afișează histograma în redarea arhivei';
+$lang['max_months'] = 'Maximul nr. de luni afișabile în histogramă';
+$lang['histogram_height'] = 'Înălțimea histogramei (în pixeli)';
diff --git a/platform/www/lib/plugins/blog/lang/ru/lang.php b/platform/www/lib/plugins/blog/lang/ru/lang.php
new file mode 100644
index 0000000..13d6fac
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/ru/lang.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Spike <spike@foobar2000.ru>
+ * @author Aleksandr Selivanov <alexgearbox@gmail.com>
+ */
+$lang['blog'] = 'Блог';
+$lang['older'] = 'Предыдущие записи';
+$lang['newer'] = 'Новые записи';
+$lang['newentry'] = 'Новая запись:';
+$lang['missing_includeplugin'] = 'Для работы блога необходимо установить плагин Include.';
+$lang['missing_pagelistplugin'] = 'Для создания архивного списка должен быть установлен плагин Pagelist.';
+$lang['missing_tagplugin'] = 'Для использования меток должен быть установлен плагин Tag.';
+$lang['autoarchive'] = '%1$d сообщ. за %2$s %3$s';
+$lang['month_01'] = 'январь';
+$lang['month_02'] = 'февраль';
+$lang['month_03'] = 'март';
+$lang['month_04'] = 'апрель';
+$lang['month_05'] = 'май';
+$lang['month_06'] = 'июнь';
+$lang['month_07'] = 'июль';
+$lang['month_08'] = 'август';
+$lang['month_09'] = 'сентябрь';
+$lang['month_10'] = 'октябрь';
+$lang['month_11'] = 'ноябрь';
+$lang['month_12'] = 'декабрь';
+$lang['entries'] = 'записи';
+$lang['entry'] = 'запись';
+$lang['archive_title'] = 'Статистика';
diff --git a/platform/www/lib/plugins/blog/lang/ru/settings.php b/platform/www/lib/plugins/blog/lang/ru/settings.php
new file mode 100644
index 0000000..3e2c1bd
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/ru/settings.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Spike <spike@foobar2000.ru>
+ * @author Aleksandr Selivanov <alexgearbox@gmail.com>
+ * @author Aleksandr Selivanov <alexgearbox@yandex.ru>
+ */
+$lang['namespace'] = 'Пространство имён по умолчанию для блога';
+$lang['formposition'] = 'Расположить форму для новой записи:';
+$lang['formposition_o_top'] = 'вверху страницы';
+$lang['formposition_o_bottom'] = 'внизу страницы';
+$lang['formposition_o_none'] = 'скрыть';
+$lang['newentrytitle'] = 'Заголовок формы для новой записи';
+$lang['dateprefix'] = 'Префикс даты для ID новой записи';
+$lang['sortkey'] = 'Сортировать записи по:';
+$lang['sortkey_o_cdate'] = 'дате написания';
+$lang['sortkey_o_mdate'] = 'дате редактирования';
+$lang['sortkey_o_pagename'] = 'имени страницы';
+$lang['sortkey_o_id'] = 'ID страницы';
+$lang['sortkey_o_title'] = 'заголовку';
+$lang['sortorder'] = 'Направление сортировки:';
+$lang['sortorder_o_ascending'] = 'по возрастанию';
+$lang['sortorder_o_descending'] = 'по убыванию';
+$lang['excluded_pages'] = 'Исключить определённые страницы из перечня блога (задаётся регулярным выражением)';
+$lang['showhistogram'] = 'Отображать гистограмму в режиме архива';
+$lang['max_months'] = 'Максимальное количество месяцев для отображения на гистограмме';
+$lang['histogram_height'] = 'Высота гистограммы (в пикселях)';
diff --git a/platform/www/lib/plugins/blog/lang/sk/lang.php b/platform/www/lib/plugins/blog/lang/sk/lang.php
new file mode 100644
index 0000000..b1b0dcf
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/sk/lang.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Igor Korček <korcek dot igor at gmail dot com>
+ */
+
+$lang['blog'] = 'Blog';
+$lang['older'] = 'Staršie články';
+$lang['newer'] = 'Novšie články';
+$lang['newentry'] = 'Nový článok:';
+
+$lang['missing_includeplugin'] = 'Pre fungovanie pluginu je potrebné nainštalovať Include Plugin.';
+$lang['missing_pagelistplugin'] = 'Pre fungovanie archívu je potrebné nainštalovať Pagelist Plugin.';
+$lang['missing_tagplugin'] = 'Pre správne fungovanie tagov je potrebné nainštalovať Tag Plugin.';
+
+$lang['autoarchive'] = '%1$d Článok(ov) pre %2$s %3$s';
+$lang['month_01'] = 'január';
+$lang['month_02'] = 'február';
+$lang['month_03'] = 'marec';
+$lang['month_04'] = 'april';
+$lang['month_05'] = 'máj';
+$lang['month_06'] = 'jún';
+$lang['month_07'] = 'júl';
+$lang['month_08'] = 'august';
+$lang['month_09'] = 'septemeber';
+$lang['month_10'] = 'október';
+$lang['month_11'] = 'november';
+$lang['month_12'] = 'december';
+
+$lang['entries'] = 'položiek';
+$lang['entry'] = 'položka';
+$lang['archive_title'] = 'História blogu';
diff --git a/platform/www/lib/plugins/blog/lang/sk/settings.php b/platform/www/lib/plugins/blog/lang/sk/settings.php
new file mode 100644
index 0000000..bd44367
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/sk/settings.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Igor Korček <korcek dot igor at gmail dot com>
+ */
+$lang['namespace'] = 'implicitný menný priestor pre blog';
+
+$lang['formposition'] = 'pozícia poľa pre zadávanie nového príspevku';
+$lang['formposition_o_top'] = 'na vrchu';
+$lang['formposition_o_bottom'] = 'dole';
+$lang['formposition_o_none'] = 'žiadny';
+
+$lang['newentrytitle'] = 'Titulka na stránke pre nový článok';
+
+$lang['dateprefix'] = 'pridať datumový prefix novým príspevkom';
+
+$lang['sortkey'] = 'radenie článkov podľa';
+$lang['sortkey_o_cdate'] = 'dátumu vytvorenia';
+$lang['sortkey_o_mdate'] = 'dátumu úpravy';
+$lang['sortkey_o_pagename'] = 'názvu stránky';
+$lang['sortkey_o_id'] = 'ID stránky';
+$lang['sortkey_o_title'] = 'názov';
+
+$lang['sortorder'] = 'poradie';
+$lang['sortorder_o_ascending'] = 'vzostupné';
+$lang['sortorder_o_descending'] = 'zostupné';
+
+$lang['excluded_pages'] = 'vyčleniť určité stránky zo zobrazovanie v blogu (vyžaduje sa RegEx)';
+
+$lang['showhistogram'] = 'Zobraziť histogram na stránke archívu';
+$lang['max_months'] = 'Maximálny počet mesiacov zobrazených v histogramu';
+$lang['histogram_height'] = 'Výška histogramu (v pixeloch)';
diff --git a/platform/www/lib/plugins/blog/lang/sl/lang.php b/platform/www/lib/plugins/blog/lang/sl/lang.php
new file mode 100644
index 0000000..a197646
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/sl/lang.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Slovenian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Blaž Mertelj <Blaz.Mertelj@atol.si>
+ */
+
+// custom language strings for the plugin
+$lang['blog'] = 'Blog';
+$lang['older'] = 'Starejši vnosi';
+$lang['newer'] = 'Novejši vnosi';
+$lang['newentry'] = 'Nov blog vnos:';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 : \ No newline at end of file
diff --git a/platform/www/lib/plugins/blog/lang/sl/settings.php b/platform/www/lib/plugins/blog/lang/sl/settings.php
new file mode 100644
index 0000000..d4c4ffe
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/sl/settings.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Slovenian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Blaž Mertelj <Blaz.Mertelj@atol.si>
+ */
+
+// for the configuration manager
+$lang['namespace'] = 'privzeti namespace za blog';
+
+$lang['sortkey'] = 'sortiraj blog vnose po:';
+$lang['sortkey_o_cdate'] = 'ustvarjeno dne';
+$lang['sortkey_o_pagename'] = 'ime strani';
+$lang['sortkey_o_id'] = 'ID strani';
+
+$lang['dateprefix'] = 'pripeti datum pred IDje novih vnosov';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 : \ No newline at end of file
diff --git a/platform/www/lib/plugins/blog/lang/sv/lang.php b/platform/www/lib/plugins/blog/lang/sv/lang.php
new file mode 100644
index 0000000..b6a4046
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/sv/lang.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Christer Nygren <wiki@fronet.fro.se>
+ * @author Tor Härnqvist <tor.harnqvist@gmail.com>
+ * @author Tor Härnqvist <tor@harnqvist.se>
+ */
+$lang['blog'] = 'Blogg';
+$lang['older'] = 'Äldre inlägg';
+$lang['newer'] = 'Nyare inlägg';
+$lang['newentry'] = 'Nytt inlägg:';
+$lang['missing_includeplugin'] = 'Include-pluginet måste vara installerat för att bloggen ska fungera.';
+$lang['missing_pagelistplugin'] = 'Pagelist-pluginet måste vara installerat för att arkivlistningar ska fungera.';
+$lang['missing_tagplugin'] = 'Tagg-pluginet måste vara installerat för att använda tagg-funktionen.';
+$lang['autoarchive'] = '%1$d inlägg i %2$s %3$s';
+$lang['month_01'] = 'januari';
+$lang['month_02'] = 'februari';
+$lang['month_03'] = 'mars';
+$lang['month_04'] = 'april';
+$lang['month_05'] = 'maj';
+$lang['month_06'] = 'juni';
+$lang['month_07'] = 'juli';
+$lang['month_08'] = 'augusti';
+$lang['month_09'] = 'september';
+$lang['month_10'] = 'oktober';
+$lang['month_11'] = 'november';
+$lang['month_12'] = 'december';
+$lang['entries'] = 'Inlägg';
+$lang['entry'] = 'Inlägg';
+$lang['archive_title'] = 'Blogghistorik';
diff --git a/platform/www/lib/plugins/blog/lang/sv/settings.php b/platform/www/lib/plugins/blog/lang/sv/settings.php
new file mode 100644
index 0000000..34e82cc
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/sv/settings.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Christer Nygren <wiki@fronet.fro.se>
+ * @author Tor Härnqvist <tor.harnqvist@gmail.com>
+ * @author hib <hibratt@gmail.com>
+ */
+$lang['namespace'] = 'standard vy för blogg';
+$lang['formposition'] = 'nya formulärets position ';
+$lang['formposition_o_top'] = 'längst upp';
+$lang['formposition_o_bottom'] = 'längst ned';
+$lang['formposition_o_none'] = 'inget';
+$lang['newentrytitle'] = 'rubrik för nytt inläggsformulär';
+$lang['dateprefix'] = 'sätt datum före nytt inläggs-ID';
+$lang['sortkey'] = 'sortera inlägg efter:';
+$lang['sortkey_o_cdate'] = 'skapat datum';
+$lang['sortkey_o_mdate'] = 'ändringsdatum';
+$lang['sortkey_o_pagename'] = 'sidnamn';
+$lang['sortkey_o_id'] = 'sid-ID';
+$lang['sortkey_o_title'] = 'rubrik';
+$lang['sortorder'] = 'sorteringsordning';
+$lang['sortorder_o_ascending'] = 'stigande';
+$lang['sortorder_o_descending'] = 'fallande';
+$lang['excluded_pages'] = 'uteslut vissa sidor från blogglistan (regular expresstion krävs)';
+$lang['showhistogram'] = 'Visa histogram när arkivet skapas';
+$lang['max_months'] = 'Maximalt antal månader att visa i histogramet';
+$lang['histogram_height'] = 'Histogramets höjd (i pixlar)';
diff --git a/platform/www/lib/plugins/blog/lang/tr/lang.php b/platform/www/lib/plugins/blog/lang/tr/lang.php
new file mode 100644
index 0000000..592c6aa
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/tr/lang.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author İlker R. Kapaç <irifat@gmail.com>
+ */
+$lang['blog'] = 'Günce';
+$lang['older'] = 'Daha eski girdiler';
+$lang['newer'] = 'Daha yeni girdiler';
+$lang['newentry'] = 'Yeni günce oluştur:';
+$lang['missing_includeplugin'] = 'Güncenin (blog) çalışması için Include eklentisi yüklü olmalıdır.';
+$lang['missing_pagelistplugin'] = 'Arşiv listelerinin çalışması için Pagelist eklentisi yüklü olmalıdır.';
+$lang['missing_tagplugin'] = 'Etiket tanımlayabilmek için Tag eklentisi yüklü olmalıdır.';
+$lang['autoarchive'] = 'Her %2$s %3$s için %1$d Gönderi(ler)';
+$lang['month_01'] = 'Ocak';
+$lang['month_02'] = 'Şubat';
+$lang['month_03'] = 'Mart';
+$lang['month_04'] = 'Nisan';
+$lang['month_05'] = 'Mayıs';
+$lang['month_06'] = 'Haziran';
+$lang['month_07'] = 'Temmuz';
+$lang['month_08'] = 'Ağustos';
+$lang['month_09'] = 'Eylül';
+$lang['month_10'] = 'Ekim';
+$lang['month_11'] = 'Kasım';
+$lang['month_12'] = 'Aralık';
+$lang['entries'] = 'girdiler';
+$lang['entry'] = 'girdi';
+$lang['archive_title'] = 'Günce tarihçesi';
diff --git a/platform/www/lib/plugins/blog/lang/tr/settings.php b/platform/www/lib/plugins/blog/lang/tr/settings.php
new file mode 100644
index 0000000..d549800
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/tr/settings.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author İlker R. Kapaç <irifat@gmail.com>
+ */
+$lang['namespace'] = 'günce için varsayılan isimalanı';
+$lang['formposition'] = 'yeni girdi formunun konumu';
+$lang['formposition_o_top'] = 'üst';
+$lang['formposition_o_bottom'] = 'alt';
+$lang['formposition_o_none'] = 'yok';
+$lang['newentrytitle'] = 'yeni girdi formunun başlığı';
+$lang['dateprefix'] = 'yeni girdi kimliklerinde ön ek olarak kullanılacak tarih';
+$lang['sortkey'] = 'günce girdilerinin sıralanma şekli';
+$lang['sortkey_o_cdate'] = 'oluşturma tarihi';
+$lang['sortkey_o_mdate'] = 'değiştirilme tarihi';
+$lang['sortkey_o_pagename'] = 'sayfa adı';
+$lang['sortkey_o_id'] = 'sayfa kimliği';
+$lang['sortkey_o_title'] = 'başlık';
+$lang['sortorder'] = 'sıralama şekli';
+$lang['sortorder_o_ascending'] = 'artan';
+$lang['sortorder_o_descending'] = 'azalan';
+$lang['excluded_pages'] = 'bazı sayfaları günce listesinin dışında tut (kurallı tanımlama gereklidir)';
+$lang['showhistogram'] = 'Arşivi sunarken grafik göster';
+$lang['max_months'] = 'Grafikte gösterilecek en fazla ay sayısı';
+$lang['histogram_height'] = 'Grafiğin yüksekliği (piksel olarak)';
diff --git a/platform/www/lib/plugins/blog/lang/zh/lang.php b/platform/www/lib/plugins/blog/lang/zh/lang.php
new file mode 100644
index 0000000..3bbcd50
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/zh/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * English language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+
+// custom language strings for the plugin
+$lang['blog'] = '博客';
+$lang['older'] = '更早的文章';
+$lang['newer'] = '更新的文章';
+$lang['newentry'] = '新建文章:';
+
+$lang['missing_includeplugin'] = '要使用博客功能必须安装 Include 插件。';
+$lang['missing_pagelistplugin'] = '要使用存档列表功能必须安装 Pagelist 插件。';
+$lang['missing_tagplugin'] = '要使用标签 refinements 必须安装 Tag 插件。';
+
+$lang['autoarchive'] = '%3$s年%2$s有%1$d篇文章';
+$lang['month_01'] = '一月';
+$lang['month_02'] = '二月';
+$lang['month_03'] = '三月';
+$lang['month_04'] = '四月';
+$lang['month_05'] = '五月';
+$lang['month_06'] = '六月';
+$lang['month_07'] = '七月';
+$lang['month_08'] = '八月';
+$lang['month_09'] = '九月';
+$lang['month_10'] = '十月';
+$lang['month_11'] = '十一月';
+$lang['month_12'] = '十二月';
+
+$lang['entries'] = '文章';
+$lang['entry'] = '文章';
+$lang['archive_title'] = '文章历史';
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/platform/www/lib/plugins/blog/lang/zh/settings.php b/platform/www/lib/plugins/blog/lang/zh/settings.php
new file mode 100644
index 0000000..6ec12bb
--- /dev/null
+++ b/platform/www/lib/plugins/blog/lang/zh/settings.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * English language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+
+// for the configuration manager
+$lang['namespace'] = '博客默认命名空间';
+
+$lang['formposition'] = '新文章的表单位置';
+$lang['formposition_o_top'] = '顶上';
+$lang['formposition_o_bottom'] = '底下';
+$lang['formposition_o_none'] = '不显示';
+
+$lang['newentrytitle'] = '新文章表单的标题';
+
+$lang['dateprefix'] = '为新文章 ID 添加日期前缀';
+
+$lang['sortkey'] = '文章排序按';
+$lang['sortkey_o_cdate'] = '创建时间';
+$lang['sortkey_o_mdate'] = '修改时间';
+$lang['sortkey_o_pagename'] = '页面名称';
+$lang['sortkey_o_id'] = '页面 ID';
+$lang['sortkey_o_title'] = '标题';
+
+$lang['sortorder'] = '排序顺序';
+$lang['sortorder_o_ascending'] = '升序';
+$lang['sortorder_o_descending'] = '降序';
+
+$lang['excluded_pages'] = '从博客列表中排除特定的页面 (要求是正则表达式)';
+
+$lang['showhistogram'] = '在存档页面上显示直方图';
+$lang['max_months'] = '在直方图上最多显示月份数';
+$lang['histogram_height'] = '直方图的高度 (单位像素)';
+
+// vim:ts=4:sw=4:et:enc=utf-8:
diff --git a/platform/www/lib/plugins/blog/manager.dat b/platform/www/lib/plugins/blog/manager.dat
new file mode 100644
index 0000000..1eadc20
--- /dev/null
+++ b/platform/www/lib/plugins/blog/manager.dat
@@ -0,0 +1,2 @@
+downloadurl=https://github.com/dokufreaks/plugin-blog/archive/master.zip
+installed=Sat, 19 Mar 2022 15:05:39 +0000
diff --git a/platform/www/lib/plugins/blog/plugin.info.txt b/platform/www/lib/plugins/blog/plugin.info.txt
new file mode 100644
index 0000000..73bd83c
--- /dev/null
+++ b/platform/www/lib/plugins/blog/plugin.info.txt
@@ -0,0 +1,8 @@
+# General Plugin Info
+base blog
+author Michael Hamann, Michael Klier, Gina Haeussge
+email michael@content-space.de
+date 2022-02-20
+name Blog
+desc Use DokuWiki as blogging tool. (previous authors: Esther Brunner)
+url https://www.dokuwiki.org/plugin:blog
diff --git a/platform/www/lib/plugins/blog/print.css b/platform/www/lib/plugins/blog/print.css
new file mode 100644
index 0000000..d912867
--- /dev/null
+++ b/platform/www/lib/plugins/blog/print.css
@@ -0,0 +1,3 @@
+#blog__newentry_form {
+ display:none;
+} \ No newline at end of file
diff --git a/platform/www/lib/plugins/blog/style.css b/platform/www/lib/plugins/blog/style.css
new file mode 100644
index 0000000..08c0a99
--- /dev/null
+++ b/platform/www/lib/plugins/blog/style.css
@@ -0,0 +1,40 @@
+div.dokuwiki div.newentry_form {
+ text-align: center;
+ margin-bottom: 1em;
+}
+
+div.dokuwiki #blog__newentry_form input.edit {
+ width: 95%;
+}
+
+div.dokuwiki tr.draft,
+div.dokuwiki div.draft {
+ opacity: 0.5;
+}
+
+div.dokuwiki div.autoarchive_selector ul {
+ list-style-type: none;
+ clear: left;
+ margin: 0 0.5em 0 0;
+}
+
+div.dokuwiki div.autoarchive_selector ul div.li {
+ float: left;
+ margin: 0 1em 0 0;
+}
+
+div.dokuwiki div.autoarchive_selector ul ul {
+ float: left;
+ clear: none;
+}
+
+div.dokuwiki div.autoarchive_selector ul ul div.li {
+ margin: 0;
+}
+
+img.blog_archive_bar {
+ background-color: __border__;
+ width: 5px;
+ border: 0 none;
+ vertical-align: bottom;
+}
diff --git a/platform/www/lib/plugins/blog/syntax/archive.php b/platform/www/lib/plugins/blog/syntax/archive.php
new file mode 100644
index 0000000..751a4a6
--- /dev/null
+++ b/platform/www/lib/plugins/blog/syntax/archive.php
@@ -0,0 +1,245 @@
+<?php
+/**
+ * Archive Plugin: displays links to all wiki pages from a given month
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_blog_archive extends DokuWiki_Syntax_Plugin {
+
+ function getType() { return 'substition'; }
+ function getPType() { return 'block'; }
+ function getSort() { return 309; }
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('\{\{archive>.*?\}\}', $mode, 'plugin_blog_archive');
+ }
+
+ function handle($match, $state, $pos, Doku_Handler $handler) {
+ global $ID;
+
+ $match = substr($match, 10, -2); // strip {{archive> from start and }} from end
+ list($match, $flags) = explode('&', $match, 2);
+ $flags = explode('&', $flags);
+ list($match, $refine) = explode(' ', $match, 2);
+ list($ns, $rest) = explode('?', $match, 2);
+
+ $author = NULL;
+ foreach($flags as $i=>$flag) {
+ if(preg_match('/(\w+)\s*=(.+)/', $flag, $temp) == 1) {
+ if ($temp[1] == 'author') {
+ $author = trim($temp[2]);
+ unset($flags[$i]);
+ }
+ }
+ }
+
+ if (!$rest) {
+ $rest = $ns;
+ $ns = '';
+ }
+
+ if ($ns == '') $ns = cleanID($this->getConf('namespace'));
+ elseif (($ns == '*') || ($ns == ':')) $ns = '';
+ elseif ($ns == '.') $ns = getNS($ID);
+ else $ns = cleanID($ns);
+
+ // daily archive
+ if (preg_match("/\d{4}-\d{2}-\d{2}/", $rest)) {
+ list($year, $month, $day) = explode('-', $rest, 3);
+
+ $start = mktime(0, 0, 0, $month, $day, $year);
+ $end = $start + 24*60*60;
+
+ // monthly archive
+ } elseif (preg_match("/\d{4}-\d{2}/", $rest)) {
+ list($year, $month) = explode('-', $rest, 2);
+
+ // calculate start and end times
+ $nextmonth = $month + 1;
+ $year2 = $year;
+ if ($nextmonth > 12) {
+ $nextmonth = 1;
+ $year2 = $year + 1;
+ }
+
+ $start = mktime(0, 0, 0, $month, 1, $year);
+ $end = mktime(0, 0, 0, $nextmonth, 1, $year2);
+
+ // a whole year
+ } elseif (preg_match("/\d{4}/", $rest)) {
+ $start = mktime(0, 0, 0, 1, 1, $rest);
+ $end = mktime(0, 0, 0, 1, 1, $rest + 1);
+
+ // all entries from that namespace up to now
+ } elseif ($rest == '*') {
+ $start = 0;
+ $end = PHP_INT_MAX;
+
+ // unknown format
+ } else {
+ return false;
+ }
+
+ return array($ns, $start, $end, $flags, $refine, $author);
+ }
+
+ function render($mode, Doku_Renderer $renderer, $data) {
+ list($ns, $start, $end, $flags, $refine, $author) = $data;
+
+ // get the blog entries for our namespace
+ /** @var helper_plugin_blog $my */
+ if ($my = plugin_load('helper', 'blog')) $entries = $my->getBlog($ns, NULL, $author);
+ else return false;
+
+ // use tag refinements?
+ if ($refine) {
+ /** @var helper_plugin_tag $tag */
+ if (plugin_isdisabled('tag') || (!$tag = plugin_load('helper', 'tag'))) {
+ msg($this->getLang('missing_tagplugin'), -1);
+ } else {
+ $entries = $tag->tagRefine($entries, $refine);
+ }
+ }
+
+ if (!$entries) return true; // nothing to display
+
+ if ($mode == 'xhtml') {
+ if ($this->getConf('showhistogram')) {
+ $alt_list = $this->_build_alternative_list($start, $end, $entries);
+
+ // Add histogram and posts list
+ $renderer->doc .= '<div class="level1">';
+ $renderer->doc .= '<h1>' . $this->getLang('archive_title') . '</h1>';
+ $renderer->doc .= $alt_list;
+ $renderer->doc .= '</div>' . DOKU_LF;
+ } else {
+ // let Pagelist Plugin do the work for us
+ if (plugin_isdisabled('pagelist')
+ || (!$pagelist = plugin_load('helper', 'pagelist'))) {
+ msg($this->getLang('missing_pagelistplugin'), -1);
+ return false;
+ }
+ /** @var helper_plugin_pagelist $pagelist */
+ $pagelist->setFlags($flags);
+ $pagelist->startList();
+ foreach ($entries as $entry) {
+
+ // entry in the right date range?
+ if (($start > $entry['date']) || ($entry['date'] >= $end)) continue;
+
+ $pagelist->addPage($entry);
+ }
+ $renderer->doc .= $pagelist->finishList();
+ }
+ return true;
+
+ // for metadata renderer
+ } elseif ($mode == 'metadata') {
+ /** @var Doku_Renderer_metadata $renderer */
+ // use the blog plugin cache handler in order to ensure that the cache is expired whenever a page, comment
+ // or linkback is added
+ if (time() < $end) $renderer->meta['plugin_blog']['purgefile_cache'] = true;
+
+ foreach ($entries as $entry) {
+
+ // entry in the right date range?
+ if (($start > $entry['date']) || ($entry['date'] >= $end)) continue;
+
+ $renderer->meta['relation']['references'][$entry['id']] = true;
+ $renderer->meta['plugin_blog']['archive_pages'][] = $entry['id'];
+ }
+
+ return true;
+ }
+ return false;
+ }
+
+ // Generate alternative posts list
+ function _build_alternative_list($start, $end, $entries) {
+ $current_year ='';
+ $current_month ='';
+ $ul_open = false;
+
+ $histogram_count = array();
+ $histogram_higher = 0;
+
+ $list = '';
+ foreach ($entries as $entry) {
+ // entry in the right date range?
+ if (($start > $entry['date']) || ($entry['date'] >= $end)) continue;
+
+ if ($current_year != date('o',$entry['date'])) {
+ if ($ul_open) {
+ $list .= '</ul>' . DOKU_LF;
+ $ul_open = false;
+ }
+ $current_year = date('o',$entry['date']);
+ $list .= '<h2>' . $current_year . '</h2>' . DOKU_LF;
+ $current_month = '';
+ }
+ if ($current_month != date('m',$entry['date'])) {
+ if ($ul_open) {
+ $list .= '</ul>' . DOKU_LF;
+ }
+ $current_month = date('m',$entry['date']);
+ $list .= '<h3 id="m' . date('o-m',$entry['date']) . '">' . $this->getLang('month_' . $current_month) . '</h3><ul>' . DOKU_LF;
+ $ul_open = true;
+ }
+ $histogram_count[date('o-m',$entry['date'])] += 1;
+ if ($histogram_higher < $histogram_count[date('o-m',$entry['date'])]) {
+ $histogram_higher = $histogram_count[date('o-m',$entry['date'])];
+ }
+ $list .= '<li>' . date('d',$entry['date']) . ' - <a href="' . wl($entry['id']) . '" title="' . $entry['id'] . '">' . $entry['title'] . '</a></li>' . DOKU_LF;
+ }
+ $list .= '</ul>' . DOKU_LF;
+
+ $histogram = $this->_build_histogram($histogram_count, $histogram_higher);
+
+ return $histogram . $list;
+ }
+
+ // Generate histogram
+ function _build_histogram($histogram_count, $histogram_higher) {
+ if (empty($histogram_count)) return '';
+
+ $histogram = '<p>';
+ $max_months = $this->getConf('max_months');
+ $histogram_height = $this->getConf('histogram_height');
+ $histogram_count = array_reverse($histogram_count);
+ $month_count = 0;
+ foreach ($histogram_count as $key => $month_reference) {
+ // Check the max_months parameter
+ if ($month_count >= $max_months) {
+ break;
+ }
+ if ($month_reference > 0) {
+ // Height in "px"
+ $current_height = $histogram_height / $histogram_higher * $month_reference;
+ } else {
+ // Height in "px"
+ $current_height = 1;
+ }
+ // Generate the alt attribute
+ $alt = $key.': '.$month_reference.' ';
+ if ($month_reference > 1) {
+ $alt .= $this->getLang('entries');
+ } else {
+ $alt .= $this->getLang('entry');
+ }
+ $histogram .= '<a href="#m' . $key . '" title="' . $alt . '">';
+ $histogram .= '<img class="blog_archive_bar" alt="' . $alt . '" style="height: ' . $current_height . 'px;" src="'.DOKU_BASE.'lib/images/blank.gif"/></a>' . DOKU_LF;
+ $month_count += 1;
+ }
+ $histogram .= '</p>';
+
+ return $histogram;
+ }
+
+}
+// vim:ts=4:sw=4:et:enc=utf-8:
diff --git a/platform/www/lib/plugins/blog/syntax/autoarchive.php b/platform/www/lib/plugins/blog/syntax/autoarchive.php
new file mode 100644
index 0000000..34cb240
--- /dev/null
+++ b/platform/www/lib/plugins/blog/syntax/autoarchive.php
@@ -0,0 +1,157 @@
+<?php
+/**
+ * Dynamic Archive Plugin: dynamically displays
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_blog_autoarchive extends DokuWiki_Syntax_Plugin {
+
+ function getType() { return 'substition'; }
+ function getPType() { return 'block'; }
+ function getSort() { return 309; }
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('\{\{autoarchive>.*?\}\}', $mode, 'plugin_blog_autoarchive');
+ }
+
+ function handle($match, $state, $pos, Doku_Handler $handler) {
+ global $ID;
+
+ $match = substr($match, 14, -2); // strip {{autoarchive> from start and }} from end
+ list($match, $flags) = explode('?', $match, 2);
+ $flags = explode('&', $flags);
+ list($ns, $refine) = explode(' ', $match, 2);
+
+ if ($ns == '') $ns = cleanID($this->getConf('namespace'));
+ elseif (($ns == '*') || ($ns == ':')) $ns = '';
+ elseif ($ns == '.') $ns = getNS($ID);
+ else $ns = cleanID($ns);
+
+ return array($ns, $flags, $refine, $pos);
+ }
+
+ function render($mode, Doku_Renderer $renderer, $data) {
+ list($ns, $flags, $refine, $pos) = $data;
+ if ($mode != 'xhtml') return false;
+
+ // no caching for dynamic content
+ $renderer->nocache();
+
+ // get the blog entries for our namespace
+ if ($my = plugin_load('helper', 'blog')) $entries = $my->getBlog($ns);
+
+ // use tag refinements?
+ if ($refine) {
+ if (plugin_isdisabled('tag') || (!$tag = plugin_load('helper', 'tag'))) {
+ msg($this->getLang('missing_tagplugin'), -1);
+ } else {
+ $entries = $tag->tagRefine($entries, $refine);
+ }
+ }
+
+ if (!$entries) return true; // nothing to display
+
+ // what to display
+ if(preg_match('/^\d\d\d\d-\d\d$/',$_REQUEST['blogarchive'])){
+ $now = $_REQUEST['blogarchive'];
+ }else{
+ $now = strftime('%Y-%m'); // current month
+ }
+ list($y,$m) = explode('-',$now);
+
+ // display the archive overview
+ $cnt = $this->_buildTimeChooser($renderer, $entries, $now);
+
+ $renderer->header($this->_posts($cnt,$m,$y),2,$pos);
+ $renderer->section_open(2);
+
+ // let Pagelist Plugin do the work for us
+ if (plugin_isdisabled('pagelist')
+ || (!$pagelist = plugin_load('helper', 'pagelist'))) {
+ msg($this->getLang('missing_pagelistplugin'), -1);
+ return false;
+ }
+ $pagelist->setFlags($flags);
+ $pagelist->startList();
+ foreach ($entries as $entry) {
+ $date = strftime('%Y-%m',$entry['date']);
+ // entry in the right date range?
+ if($date < $now || $date > $now) continue;
+ $pagelist->addPage($entry);
+ }
+ $renderer->doc .= $pagelist->finishList();
+
+ $renderer->section_close();
+ return true;
+
+ }
+
+ /**
+ * Creates a list of monthly archive links
+ *
+ * @param object reference $R - the XHTML renderer
+ * @param array reference $entries - all entries metadata
+ * @param string $now - currently selected month ('YYYY-MM')
+ * @return int - number of posts for selected month
+ */
+ function _buildTimeChooser(&$R, &$entries, $now){
+ global $ID;
+
+ // get the months where posts exist
+ $months = array();
+ foreach($entries as $entry){
+ $y = date('Y',$entry['date']);
+ $m = date('m',$entry['date']);
+ if(isset($months[$y][$m])) {
+ $months[$y][$m]++;
+ }else{
+ $months[$y][$m] = 1;
+ }
+ }
+
+ $ret = 0;
+ // output
+ $R->doc .= '<div class="autoarchive_selector">';
+ foreach($months as $y => $mdata){
+ $R->listu_open();
+ $R->listitem_open(1);
+ $R->listcontent_open();
+ $R->doc .= $y.'<span>:</span>';
+ $R->listcontent_close();
+ ksort($mdata);
+ foreach($mdata as $m => $cnt){
+ $R->listu_open();
+ $R->listitem_open(2);
+ $R->listcontent_open();
+ if("$y-$m" == $now) $R->doc .= '<span class="cur">';
+ $R->doc .= '<a href="'.wl($ID,array('blogarchive'=>"$y-$m")).'" class="wikilink1" title="'.$this->_posts($cnt,$m,$y).'">';
+ $R->doc .= $this->getLang('month_'.$m);
+ $R->doc .= '</a>';
+ if("$y-$m" == $now){
+ $R->doc .= '</span>';
+ $ret = $cnt;
+ }
+ $R->listcontent_close();
+ $R->listitem_close();
+ $R->listu_close();
+ }
+ $R->listitem_close();
+ $R->listu_close();
+ }
+ $R->doc .='</div>';
+ return $ret;
+ }
+
+ function _posts($num,$month,$year){
+ return sprintf($this->getLang('autoarchive'),
+ $num, $this->getLang("month_$month"),
+ $year);
+ }
+}
+// vim:ts=4:sw=4:et:enc=utf-8:
diff --git a/platform/www/lib/plugins/blog/syntax/blog.php b/platform/www/lib/plugins/blog/syntax/blog.php
new file mode 100644
index 0000000..2ca56d8
--- /dev/null
+++ b/platform/www/lib/plugins/blog/syntax/blog.php
@@ -0,0 +1,213 @@
+<?php
+/**
+ * Blog Plugin: displays a number of recent entries from the blog subnamespace
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Robert Rackl <wiki@doogie.de>
+ */
+
+class syntax_plugin_blog_blog extends DokuWiki_Syntax_Plugin {
+ private $included_pages = array();
+
+ function getType() { return 'substition'; }
+ function getPType() { return 'block'; }
+ function getSort() { return 307; }
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('\{\{blog>.*?\}\}',$mode,'plugin_blog_blog');
+ }
+
+ function handle($match, $state, $pos, Doku_Handler $handler) {
+ global $ID;
+
+ $match = substr($match, 7, -2); // strip {{blog> from start and }} from end
+ list($match, $flags) = explode('&', $match, 2);
+ $flags = explode('&', $flags);
+ array_unshift($flags, 'link'); // always make the first header of a blog entry a permalink (unless nolink is set)
+ list($match, $refine) = explode(' ', $match, 2);
+ list($ns, $num) = explode('?', $match, 2);
+
+ if (!is_numeric($num)) {
+ if (is_numeric($ns)) {
+ $num = $ns;
+ $ns = '';
+ } else {
+ $num = 5;
+ }
+ }
+
+ if ($ns == '') $ns = cleanID($this->getConf('namespace'));
+ elseif (($ns == '*') || ($ns == ':')) $ns = '';
+ elseif ($ns == '.') $ns = getNS($ID);
+ else $ns = cleanID($ns);
+
+ return array($ns, $num, $flags, $refine);
+ }
+
+ function render($mode, Doku_Renderer $renderer, $data) {
+ list($ns, $num, $flags, $refine) = $data;
+
+ $first = $_REQUEST['first'];
+ if (!is_numeric($first)) $first = 0;
+
+ // get the blog entries for our namespace
+ /** @var helper_plugin_blog $my */
+ if ($my = plugin_load('helper', 'blog')) $entries = $my->getBlog($ns);
+ else return false;
+
+ // use tag refinements?
+ if ($refine) {
+ /** @var helper_plugin_tag $tag */
+ if (plugin_isdisabled('tag') || (!$tag = plugin_load('helper', 'tag'))) {
+ msg($this->getLang('missing_tagplugin'), -1);
+ } else {
+ $entries = $tag->tagRefine($entries, $refine);
+ }
+ }
+
+ // Normalise flags
+ $blog_flags = $my->getFlags($flags);
+ $formpos = $blog_flags['formpos'];
+ $newentrytitle = $blog_flags['newentrytitle'];
+ $pagingcontrols = $blog_flags['pagingcontrols'];
+
+ if ($mode == 'xhtml') {
+ // prevent caching to ensure the included pages are always fresh
+ $renderer->nocache();
+ }
+
+ if (!$entries) {
+ if ((auth_quickaclcheck($ns.':*') >= AUTH_CREATE) && ($mode == 'xhtml')) {
+ if($formpos != 'none') $renderer->doc .= $this->_newEntryForm($ns, $newentrytitle);
+ }
+ return true; // nothing to display
+ }
+
+ // slice the needed chunk of pages
+ $isMore = count($entries) > ($first + $num);
+ $entries = array_slice($entries, $first, $num);
+
+ // load the include helper plugin
+ /** @var helper_plugin_include $include */
+ if (plugin_isdisabled('include') || (!$include = plugin_load('helper', 'include'))) {
+ msg($this->getLang('missing_includeplugin'), -1);
+ return false;
+ }
+
+ // current section level
+ $clevel = 0;
+
+ $perm_create = (auth_quickaclcheck($ns.':*') >= AUTH_CREATE);
+ $include_flags = $include->get_flags($flags);
+
+ if ($mode == 'xhtml') {
+ // show new entry form
+ if ($perm_create && $formpos == 'top') {
+ $renderer->doc .= $this->_newEntryForm($ns, $newentrytitle);
+ }
+
+ // get current section level
+ preg_match_all('|<div class="level(\d)">|i', $renderer->doc, $matches, PREG_SET_ORDER);
+ $n = count($matches)-1;
+ if ($n > -1) $clevel = $matches[$n][1];
+
+ // close current section
+ if ($clevel && !$include_flags['inline']) $renderer->doc .= '</div>'.DOKU_LF;
+ $renderer->doc .= '<div class="hfeed">'.DOKU_LF;
+ }
+
+
+ // now include the blog entries
+ foreach ($entries as $entry) {
+ if ($mode == 'xhtml' || $mode == 'code') {
+ if(auth_quickaclcheck($entry['id']) >= AUTH_READ) {
+ // prevent blog include loops
+ if(!$this->included_pages[$entry['id']]) {
+ $this->included_pages[$entry['id']] = true;
+ $renderer->nest($include->_get_instructions($entry['id'], '', 'page', $clevel, $include_flags));
+ $this->included_pages[$entry['id']] = false;
+ }
+ }
+ } elseif ($mode == 'metadata') {
+ /** @var Doku_Renderer_metadata $renderer */
+ $renderer->meta['relation']['haspart'][$entry['id']] = true;
+ }
+ }
+
+ if ($mode == 'xhtml') {
+ // resume the section
+ $renderer->doc .= '</div>'.DOKU_LF;
+ if ($clevel && !$include_flags['inline']) $renderer->doc .= '<div class="level'.$clevel.'">'.DOKU_LF;
+
+ // show older / newer entries links
+ if ($pagingcontrols) $renderer->doc .= $this->_browseEntriesLinks($isMore, $first, $num);
+
+ // show new entry form
+ if ($perm_create && $formpos == 'bottom') {
+ $renderer->doc .= $this->_newEntryForm($ns, $newentrytitle);
+ }
+ }
+
+ return in_array($mode, array('xhtml', 'metadata', 'code'));
+ }
+
+ /* ---------- (X)HTML Output Functions ---------- */
+
+ /**
+ * Displays links to older newer entries of the blog namespace
+ *
+ * @param $more
+ * @param $first
+ * @param $num
+ * @return string
+ */
+ function _browseEntriesLinks($more, $first, $num) {
+ global $ID;
+
+ $ret = '';
+ $last = $first+$num;
+ if ($first > 0) {
+ $first -= $num;
+ if ($first < 0) $first = 0;
+ $ret .= '<p class="centeralign">'.DOKU_LF.'<a href="'.wl($ID, 'first='.$first).'"'.
+ ' class="wikilink1">&lt;&lt; '.$this->getLang('newer').'</a>';
+ if ($more) $ret .= ' | ';
+ else $ret .= '</p>';
+ } else if ($more) {
+ $ret .= '<p class="centeralign">'.DOKU_LF;
+ }
+ if ($more) {
+ $ret .= '<a href="'.wl($ID, 'first='.$last).'" class="wikilink1">'.
+ $this->getLang('older').' &gt;&gt;</a>'.DOKU_LF.'</p>'.DOKU_LF;
+ }
+ return $ret;
+ }
+
+ /**
+ * Displays a form to enter the title of a new entry in the blog namespace
+ * and then open that page in the edit mode
+ *
+ * @param $ns
+ * @param $newentrytitle
+ * @return string
+ */
+ function _newEntryForm($ns, $newentrytitle) {
+ global $lang;
+ global $ID;
+
+ return '<div class="newentry_form">'.DOKU_LF.
+ '<form id="blog__newentry_form" method="post" action="'.script().'" accept-charset="'.$lang['encoding'].'">'.DOKU_LF.
+ DOKU_TAB.'<fieldset>'.DOKU_LF.
+ DOKU_TAB.DOKU_TAB.'<legend>'.hsc($newentrytitle).'</legend>'.DOKU_LF.
+ DOKU_TAB.DOKU_TAB.'<input type="hidden" name="id" value="'.$ID.'" />'.DOKU_LF.
+ DOKU_TAB.DOKU_TAB.'<input type="hidden" name="do" value="newentry" />'.DOKU_LF.
+ DOKU_TAB.DOKU_TAB.'<input type="hidden" name="ns" value="'.$ns.'" />'.DOKU_LF.
+ DOKU_TAB.DOKU_TAB.'<input class="edit" type="text" name="title" id="blog__newentry_title" size="40" tabindex="1" />'.DOKU_LF.
+ DOKU_TAB.DOKU_TAB.'<input class="button" type="submit" value="'.$lang['btn_create'].'" tabindex="2" />'.DOKU_LF.
+ DOKU_TAB.'</fieldset>'.DOKU_LF.
+ '</form>'.DOKU_LF.
+ '</div>'.DOKU_LF;
+ }
+}
+// vim:ts=4:sw=4:et:enc=utf-8:
diff --git a/platform/www/lib/plugins/blog/syntax/draft.php b/platform/www/lib/plugins/blog/syntax/draft.php
new file mode 100644
index 0000000..239f0c2
--- /dev/null
+++ b/platform/www/lib/plugins/blog/syntax/draft.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Blog Plugin, draft component: marks the current page as draft
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+
+class syntax_plugin_blog_draft extends DokuWiki_Syntax_Plugin {
+
+ function getType() { return 'substition'; }
+ function getSort() { return 99; }
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('~~DRAFT~~', $mode, 'plugin_blog_draft');
+ }
+
+ function handle($match, $state, $pos, Doku_Handler $handler) {
+ return true;
+ }
+
+ /**
+ * The only thing this plugin component does is to set the metadata 'type' to 'draft'
+ */
+ function render($mode, Doku_Renderer $renderer, $data) {
+ if ($mode == 'xthml') {
+ return true; // don't output anything
+ } elseif ($mode == 'metadata') {
+ $renderer->meta['type'] = 'draft';
+ }
+ }
+}
+// vim:ts=4:sw=4:et:enc=utf-8: