From 794d14f8921d8cd77cc9a8774e794ea3afd01f46 Mon Sep 17 00:00:00 2001
From: garvinhicking <garvinhicking>
Date: Sun, 18 Jun 2006 19:44:27 +0000
Subject: [PATCH] Add PHP engine, for Davey.

---
 docs/NEWS                                   |   6 +
 include/functions_smarty.inc.php            | 102 +++++-----
 include/template_api.inc.php                | 177 +++++++++++++++++
 templates/default-php/commentform.tpl       |  60 ++++++
 templates/default-php/commentpopup.tpl      |  61 ++++++
 templates/default-php/comments.tpl          |  37 ++++
 templates/default-php/content.tpl           |  22 +++
 templates/default-php/entries.tpl           | 198 ++++++++++++++++++++
 templates/default-php/entries_archives.tpl  |  20 ++
 templates/default-php/entries_summary.tpl   |  15 ++
 templates/default-php/feed_0.91.tpl         |  26 +++
 templates/default-php/feed_1.0.tpl          |  59 ++++++
 templates/default-php/feed_2.0.tpl          |  53 ++++++
 templates/default-php/feed_atom0.3.tpl      |  56 ++++++
 templates/default-php/feed_atom1.0.tpl      |  59 ++++++
 templates/default-php/feed_opml1.0.tpl      |  16 ++
 templates/default-php/index.tpl             |  48 +++++
 templates/default-php/info.txt              |   4 +
 templates/default-php/plugin_calendar.tpl   |  33 ++++
 templates/default-php/plugin_categories.tpl |  31 +++
 templates/default-php/preview.png           | Bin 0 -> 13606 bytes
 templates/default-php/preview_iframe.tpl    |  24 +++
 templates/default-php/sidebar.tpl           |  12 ++
 templates/default-php/template.inc.php      |   7 +
 templates/default-php/trackbacks.tpl        |  17 ++
 25 files changed, 1097 insertions(+), 46 deletions(-)
 create mode 100644 include/template_api.inc.php
 create mode 100644 templates/default-php/commentform.tpl
 create mode 100644 templates/default-php/commentpopup.tpl
 create mode 100644 templates/default-php/comments.tpl
 create mode 100644 templates/default-php/content.tpl
 create mode 100644 templates/default-php/entries.tpl
 create mode 100644 templates/default-php/entries_archives.tpl
 create mode 100644 templates/default-php/entries_summary.tpl
 create mode 100644 templates/default-php/feed_0.91.tpl
 create mode 100644 templates/default-php/feed_1.0.tpl
 create mode 100644 templates/default-php/feed_2.0.tpl
 create mode 100644 templates/default-php/feed_atom0.3.tpl
 create mode 100644 templates/default-php/feed_atom1.0.tpl
 create mode 100644 templates/default-php/feed_opml1.0.tpl
 create mode 100644 templates/default-php/index.tpl
 create mode 100644 templates/default-php/info.txt
 create mode 100644 templates/default-php/plugin_calendar.tpl
 create mode 100644 templates/default-php/plugin_categories.tpl
 create mode 100644 templates/default-php/preview.png
 create mode 100644 templates/default-php/preview_iframe.tpl
 create mode 100644 templates/default-php/sidebar.tpl
 create mode 100644 templates/default-php/template.inc.php
 create mode 100644 templates/default-php/trackbacks.tpl

diff --git a/docs/NEWS b/docs/NEWS
index f038da4..5182ff6 100644
--- a/docs/NEWS
+++ b/docs/NEWS
@@ -3,6 +3,12 @@
 Version 1.1-alpha7()
 ------------------------------------------------------------------------
 
+    * Added experimental PHP-engine templating support, bypassing
+      Smarty. Work in progress, mostly proof-of-concept. Might
+      be changed completely. Read instructions in the 
+      include/template_api.inc.php file. Dedicated to Davey. ;)
+      (garvinhicking)
+
     * Support to crop images from within the media database. Pick a
       picture in the MDB, go to the property section of that image
       and click on the "EDIT" link. (garvinhicking)
diff --git a/include/functions_smarty.inc.php b/include/functions_smarty.inc.php
index 54db6ee..5a58ade 100644
--- a/include/functions_smarty.inc.php
+++ b/include/functions_smarty.inc.php
@@ -616,53 +616,63 @@ function serendipity_smarty_init($vars = array()) {
     global $serendipity, $template_config;
 
     if (!isset($serendipity['smarty'])) {
-        @define('SMARTY_DIR', S9Y_PEAR_PATH . 'Smarty/libs/');
-        if (!class_exists('Smarty')) {
-            require SMARTY_DIR . 'Smarty.class.php';
-        }
-        $serendipity['smarty'] = new Smarty;
-        if ($serendipity['production'] === 'debug') {
-            $serendipity['smarty']->force_compile   = true;
-            $serendipity['smarty']->debugging       = true;
-        }
-        $serendipity['smarty']->template_dir  = array(
-        	$serendipity['serendipityPath'] . $serendipity['templatePath'] . $serendipity['template'],
-        	$serendipity['serendipityPath'] . $serendipity['templatePath'] . 'default'
-        );
-        $serendipity['smarty']->compile_dir   = $serendipity['serendipityPath'] . PATH_SMARTY_COMPILE;
-
-        if (!is_dir($serendipity['smarty']->compile_dir) || !is_writable($serendipity['smarty']->compile_dir)) {
-            serendipity_die(sprintf(DIRECTORY_WRITE_ERROR, $serendipity['smarty']->compile_dir));
+        $template_dir = $serendipity['serendipityPath'] . $serendipity['templatePath'] . $serendipity['template'];
+        if (!defined('IN_serendipity_admin') && file_exists($template_dir . '/template.inc.php')) {
+            // If this file exists, a custom template engine will be loaded.
+            // Beware: Smarty is used in the Admin backend, despite of this.
+            include $template_dir . '/template.inc.php';
+        } else {
+            // Default Smarty Engine will be used
+
+            @define('SMARTY_DIR', S9Y_PEAR_PATH . 'Smarty/libs/');
+            if (!class_exists('Smarty')) {
+                require SMARTY_DIR . 'Smarty.class.php';
+            }
+            $serendipity['smarty'] = new Smarty;
+            if ($serendipity['production'] === 'debug') {
+                $serendipity['smarty']->force_compile   = true;
+                $serendipity['smarty']->debugging       = true;
+            }
+
+            $serendipity['smarty']->template_dir  = array(
+            	$template_dir,
+            	$serendipity['serendipityPath'] . $serendipity['templatePath'] . 'default'
+            );
+            $serendipity['smarty']->compile_dir   = $serendipity['serendipityPath'] . PATH_SMARTY_COMPILE;
+
+            if (!is_dir($serendipity['smarty']->compile_dir) || !is_writable($serendipity['smarty']->compile_dir)) {
+                serendipity_die(sprintf(DIRECTORY_WRITE_ERROR, $serendipity['smarty']->compile_dir));
+            }
+
+            $serendipity['smarty']->config_dir    = $template_dir;
+            $serendipity['smarty']->secure_dir    = array($serendipity['serendipityPath'] . $serendipity['templatePath']);
+            $serendipity['smarty']->security_settings['MODIFIER_FUNCS']  = array('sprintf', 'sizeof', 'count', 'rand', 'print_r', 'str_repeat');
+            $serendipity['smarty']->security_settings['ALLOW_CONSTANTS'] = true;
+            $serendipity['smarty']->security      = true;
+            $serendipity['smarty']->use_sub_dirs  = false;
+            $serendipity['smarty']->compile_check = true;
+            $serendipity['smarty']->compile_id    = &$serendipity['template'];
+
+            $serendipity['smarty']->register_modifier('makeFilename', 'serendipity_makeFilename');
+            $serendipity['smarty']->register_modifier('xhtml_target', 'serendipity_xhtml_target');
+            $serendipity['smarty']->register_modifier('emptyPrefix', 'serendipity_emptyPrefix');
+            $serendipity['smarty']->register_modifier('formatTime', 'serendipity_smarty_formatTime');
+            $serendipity['smarty']->register_modifier('serendipity_utf8_encode', 'serendipity_utf8_encode');
+            $serendipity['smarty']->register_modifier('ifRemember', 'serendipity_ifRemember');
+
+            $serendipity['smarty']->register_function('serendipity_printSidebar', 'serendipity_smarty_printSidebar');
+            $serendipity['smarty']->register_function('serendipity_hookPlugin', 'serendipity_smarty_hookPlugin');
+            $serendipity['smarty']->register_function('serendipity_showPlugin', 'serendipity_smarty_showPlugin');
+            $serendipity['smarty']->register_function('serendipity_getFile', 'serendipity_smarty_getFile');
+            $serendipity['smarty']->register_function('serendipity_printComments', 'serendipity_smarty_printComments');
+            $serendipity['smarty']->register_function('serendipity_printTrackbacks', 'serendipity_smarty_printTrackbacks');
+            $serendipity['smarty']->register_function('serendipity_rss_getguid', 'serendipity_smarty_rss_getguid');
+            $serendipity['smarty']->register_function('serendipity_fetchPrintEntries', 'serendipity_smarty_fetchPrintEntries');
+            $serendipity['smarty']->register_function('serendipity_getTotalCount', 'serendipity_smarty_getTotalCount');
+            $serendipity['smarty']->register_function('pickKey', 'serendipity_smarty_pickKey');
+
+            $serendipity['smarty']->register_prefilter('serendipity_replaceSmartyVars');
         }
-
-        $serendipity['smarty']->config_dir    = &$serendipity['smarty']->template_dir[0];
-        $serendipity['smarty']->secure_dir    = array($serendipity['serendipityPath'] . $serendipity['templatePath']);
-        $serendipity['smarty']->security_settings['MODIFIER_FUNCS']  = array('sprintf', 'sizeof', 'count', 'rand', 'print_r', 'str_repeat');
-        $serendipity['smarty']->security_settings['ALLOW_CONSTANTS'] = true;
-        $serendipity['smarty']->security      = true;
-        $serendipity['smarty']->use_sub_dirs  = false;
-        $serendipity['smarty']->compile_check = true;
-        $serendipity['smarty']->compile_id    = &$serendipity['template'];
-
-        $serendipity['smarty']->register_modifier('makeFilename', 'serendipity_makeFilename');
-        $serendipity['smarty']->register_modifier('xhtml_target', 'serendipity_xhtml_target');
-        $serendipity['smarty']->register_modifier('emptyPrefix', 'serendipity_emptyPrefix');
-        $serendipity['smarty']->register_modifier('formatTime', 'serendipity_smarty_formatTime');
-        $serendipity['smarty']->register_modifier('serendipity_utf8_encode', 'serendipity_utf8_encode');
-        $serendipity['smarty']->register_modifier('ifRemember', 'serendipity_ifRemember');
-
-        $serendipity['smarty']->register_function('serendipity_printSidebar', 'serendipity_smarty_printSidebar');
-        $serendipity['smarty']->register_function('serendipity_hookPlugin', 'serendipity_smarty_hookPlugin');
-        $serendipity['smarty']->register_function('serendipity_showPlugin', 'serendipity_smarty_showPlugin');
-        $serendipity['smarty']->register_function('serendipity_getFile', 'serendipity_smarty_getFile');
-        $serendipity['smarty']->register_function('serendipity_printComments', 'serendipity_smarty_printComments');
-        $serendipity['smarty']->register_function('serendipity_printTrackbacks', 'serendipity_smarty_printTrackbacks');
-        $serendipity['smarty']->register_function('serendipity_rss_getguid', 'serendipity_smarty_rss_getguid');
-        $serendipity['smarty']->register_function('serendipity_fetchPrintEntries', 'serendipity_smarty_fetchPrintEntries');
-        $serendipity['smarty']->register_function('serendipity_getTotalCount', 'serendipity_smarty_getTotalCount');
-        $serendipity['smarty']->register_function('pickKey', 'serendipity_smarty_pickKey');
-
-        $serendipity['smarty']->register_prefilter('serendipity_replaceSmartyVars');
     }
 
     if (!isset($serendipity['smarty_raw_mode'])) {
diff --git a/include/template_api.inc.php b/include/template_api.inc.php
new file mode 100644
index 0000000..50ab843
--- /dev/null
+++ b/include/template_api.inc.php
@@ -0,0 +1,177 @@
+<?php # $Id: plugin_api.inc.php 1228 2006-06-01 11:18:53Z garvinhicking $
+# Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)
+# All rights reserved.  See LICENSE file for licensing details
+
+/*
+ *@author Garvin Hicking
+ *@state EXPERIMENTAL
+
+ This file provides a basic Smarty emulating layer
+ You can use different template engines than the default Smarty one
+ by putting a "template.inc.php" file into your template directory.
+ It should look something like this:
+
+ <?php
+ include_once S9Y_INCLUDE_PATH . 'include/template_api.inc.php';
+ $GLOBALS['template'] = new serendipity_smarty_emulator();
+ $GLOBALS['serendipity']['smarty'] =& $GLOBALS['template'];
+ ?>
+
+ You could of course also use inherited different template classes. It is important
+ that your own template object contains method declarations like the class below
+ for full interoperability to Serendipity templates. It is important that
+ you assign a reference copy of your template object to the $serendipity['smarty']
+ object for backwards compatibility.
+
+ All variables that are assigned from this class to your templates/.php files
+ will be put into $GLOBALS['tpl'].
+
+ Since the scope of includes can vary, you'll need to use $GLOBALS['tpl'] instead
+ of just $tpl in some cases. Thus it's recommended to always use the $GLOBALS['tpl']
+ way. Also it's safer to use $GLOBALS['serendipity'] / $GLOBALS['template'] in most
+ cases because of the same reason.
+
+ Instead of Smarty $CONST.xxx constants you can use the usual 'xxx' constant access
+ method by PHP.
+
+ You can use any Smarty template file to construct your custom PHP template. You
+ just need to do this:
+
+  - Replace '{$variable}' calls with '<?= $GLOBALS['tpl']['variable'] ?>'.
+
+  - Replace '{$variable|XXX}' smarty modifiers with corresponding PHP code, like:
+    '<?= substr($GLOBALS['tpl']['XXX'], 0, 25) ?>'
+     would correspond with
+    '{$variable|truncate:'...':25}'
+  - Replace '{if CONDITION} ... {/if}' checks with '<?php if (CONDITION): ?> ... <?php endif; ?>'
+
+  - Replace '{foreach} ... {/foreach}' calls correspondingly.
+
+  - Replace '{smartycommand param1=x param2=x}' function calls with
+    '<?php $GLOBALS['template']->call('smartycommand', array('param1' => 'x', 'param2' => 'x')); ?>' ones
+
+  - NOTA BENE: Be aware that many smarty function calls are just wrappers to Serendipity API
+    calls. To save grandma's performance pennies you should search the original Serendipity API
+    function before calling them with the $GLOBALS['template']->call() wrapper! This costs dearly.
+
+ The Serendipity Admin backend will still make use of Smarty. It rocks.
+
+ Know your PHP before you think about using this. :-)
+*/
+
+class serendipity_smarty_emulator {
+    var $compile_dir = '/tmp'; // Not used
+    var $security_settings = array(); // Not used
+
+/**
+ * Assign one or multiple template variable
+ * @TODO: Why can't this function accept references. This sucks.
+ *
+ * @param   mixed       Either a variable name, or an array of variables
+ * @param   mixed       Either null or the variable content.
+ * @access public
+ * @return null
+ */
+    function assign($tpl_var, $value = null) {
+        if (is_array($tpl_var)) {
+            foreach ($tpl_var as $key => $val) {
+                if ($key != '') {
+                    $GLOBALS['tpl'][$key] = $tpl_var[$key];
+                }
+            }
+        } else {
+            $GLOBALS['tpl'][$tpl_var] = $value;
+        }
+
+        return true;
+    }
+
+/**
+ * Helper function to call a 'serendipity_smarty_xx' function with less parameters.
+ *
+ * @param   string      Function name to call.
+ * @param   array       Array of parameters
+ * @access public
+ * @return  string      Output
+ */
+    function call($funcname, $params) {
+        if (function_exists('serendipity_smarty_' . $funcname)) {
+            return call_user_func('serendipity_smarty_' . $funcname, $params, $this);
+        } elseif (function_exists('serendipity_' . $funcname)) {
+            return call_user_func('serendipity_' . $funcname, $params, $this);
+        } elseif (function_exists($funcname)) {
+            return call_user_func($funcname, $params, $this);
+        } else {
+            return "ERROR: " . htmlspecialchars($funcname) . " NOT FOUND.<br />\n";
+        }
+    }
+
+/**
+ * Outputs a smarty template.
+ *
+ * @param   string      Full path to template file
+ * @access public
+ * @return boolean
+ */
+    function display($resource_name) {
+        return include $resource_name;
+    }
+
+/**
+ * Triggers a template error
+ *
+ * @param   string      Error message
+ * @access public
+ * @return null
+ */
+    function trigger_error($txt) {
+        echo '<b>SMARTY EMULATOR ERROR: ' . $txt;
+    }
+
+/**
+ * Echoes a default value. Append multiple values and will output the first non empty value.
+ *
+ * @param   mixed    The value to emit.
+ * @access public
+ * @return null
+ */
+    function getdefault() {
+        $vars = func_get_args();
+        foreach($vars as $title) {
+            if (!empty($GLOBALS['tpl'][$title])) {
+                return $GLOBALS['tpl'][$title];
+            }
+        }
+
+        return false;
+    }
+
+/**
+ * Parses a template file into another.
+ *
+ * @param   string      The path to the resource name (prefixed with 'file:' usually)
+ * @param   string      The Cache ID (not used)
+ * @param   string      The Compile ID (not used)
+ * @param   boolean     Output data (true) or return it (false)?
+ * @access public
+ * @return null
+ */
+    function &fetch($resource_name, $cache_id = null, $compile_id = null, $display = false) {
+        $resource_name = str_replace('file:', '', $resource_name);
+
+        if (!$display) {
+            ob_start();
+        }
+
+        include $resource_name;
+
+        if (!$display) {
+            $out = ob_get_contents();
+            ob_end_clean();
+            return $out;
+        } else {
+            return true;
+        }
+    }
+}
+
diff --git a/templates/default-php/commentform.tpl b/templates/default-php/commentform.tpl
new file mode 100644
index 0000000..f014fe6
--- /dev/null
+++ b/templates/default-php/commentform.tpl
@@ -0,0 +1,60 @@
+<div id="serendipityCommentFormC" class="serendipityCommentForm">
+    <div id="serendipity_replyform_0"></div>
+    <a id="serendipity_CommentForm"></a>
+    <form id="serendipity_comment" action="<?= $GLOBALS['tpl']['commentform_action'] ?>#feedback" method="post">
+    <div><input type="hidden" name="serendipity[entry_id]" value="<?= $GLOBALS['tpl']['commentform_id'] ?>" /></div>
+    <table border="0" width="100%" cellpadding="3">
+        <tr>
+            <td class="serendipity_commentsLabel"><label for="serendipity_commentform_name"><?= NAME ?></label></td>
+            <td class="serendipity_commentsValue"><input type="text" id="serendipity_commentform_name" name="serendipity[name]" value="<?= $GLOBALS['tpl']['commentform_name'] ?>" size="30" /></td>
+        </tr>
+
+        <tr>
+            <td class="serendipity_commentsLabel"><label for="serendipity_commentform_email"><?= EMAIL ?></label></td>
+            <td class="serendipity_commentsValue"><input type="text" id="serendipity_commentform_email" name="serendipity[email]" value="<?= $GLOBALS['tpl']['commentform_email'] ?>" /></td>
+        </tr>
+
+        <tr>
+            <td class="serendipity_commentsLabel"><label for="serendipity_commentform_url"><?= HOMEPAGE ?></label></td>
+            <td class="serendipity_commentsValue"><input type="text" id="serendipity_commentform_url" name="serendipity[url]" value="<?= $GLOBALS['tpl']['commentform_url'] ?>" /></td>
+        </tr>
+
+        <tr>
+            <td class="serendipity_commentsLabel"><label for="serendipity_replyTo"><?= IN_REPLY_TO ?></label></td>
+            <td class="serendipity_commentsValue"><?= $GLOBALS['tpl']['commentform_replyTo'] ?></td>
+        </tr>
+
+        <tr>
+            <td class="serendipity_commentsLabel"><label for="serendipity_commentform_comment"><?= COMMENT ?></label></td>
+            <td class="serendipity_commentsValue">
+                <textarea rows="10" cols="40" id="serendipity_commentform_comment" name="serendipity[comment]"><?= $GLOBALS['tpl']['commentform_data'] ?></textarea><br />
+                {serendipity_hookPlugin hook="frontend_comment" data=$commentform_entry}
+            </td>
+        </tr>
+
+{if $is_commentform_showToolbar}
+        <tr>
+            <td>&#160;</td>
+            <td class="serendipity_commentsLabel">
+                <input id="checkbox_remember" type="checkbox" name="serendipity[remember]" <?= $GLOBALS['tpl']['commentform_remember'] ?> /><label for="checkbox_remember"><?= REMEMBER_INFO ?></label>
+    {if $is_allowSubscriptions}
+                <br />
+                <input id="checkbox_subscribe" type="checkbox" name="serendipity[subscribe]" <?= $GLOBALS['tpl']['commentform_subscribe'] ?> /><label for="checkbox_subscribe"><?= SUBSCRIBE_TO_THIS_ENTRY ?></label>
+    <?php endif; ?>
+            </td>
+       </tr>
+<?php endif; ?>
+
+{if $is_moderate_comments}
+       <tr>
+            <td class="serendipity_commentsValue serendipity_msg_important" colspan="2"><?= COMMENTS_WILL_BE_MODERATED ?></td>
+       </tr>
+<?php endif; ?>
+
+       <tr>
+            <td>&#160;</td>
+            <td><input type="submit" name="serendipity[submit]" value="<?= SUBMIT_COMMENT ?>" /> <input type="submit" id="serendipity_preview" name="serendipity[preview]" value="<?= PREVIEW ?>" /></td>
+        </tr>
+    </table>
+    </form>
+</div>
diff --git a/templates/default-php/commentpopup.tpl b/templates/default-php/commentpopup.tpl
new file mode 100644
index 0000000..fec9ad5
--- /dev/null
+++ b/templates/default-php/commentpopup.tpl
@@ -0,0 +1,61 @@
+{if $is_xhtml}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+           "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php else: ?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+           "http://www.w3.org/TR/html4/loose.dtd">
+<?php endif; ?>
+
+<html>
+<head>
+    <title>{$head_title|@default:$blogTitle} {if $head_subtitle} - <?= $GLOBALS['tpl']['head_subtitle'] ?><?php endif; ?></title>
+    <meta http-equiv="Content-Type" content="text/html; charset=<?= $GLOBALS['tpl']['head_charset'] ?>" />
+    <meta name="Powered-By" content="Serendipity v.<?= $GLOBALS['tpl']['head_version'] ?>" />
+    <link rel="stylesheet" type="text/css" href="<?= $GLOBALS['tpl']['serendipityHTTPPath'] ?>serendipity.css.php" />
+    <link rel="alternate"  type="application/rss+xml" title="<?= $GLOBALS['tpl']['blogTitle'] ?> RSS feed" href="<?= $GLOBALS['tpl']['serendipityBaseURL'] ?><?= $GLOBALS['tpl']['serendipityRewritePrefix'] ?>feeds/index.rss2" />
+    <link rel="alternate"  type="application/x.atom+xml"  title="<?= $GLOBALS['tpl']['blogTitle'] ?> Atom feed"  href="<?= $GLOBALS['tpl']['serendipityBaseURL'] ?><?= $GLOBALS['tpl']['serendipityRewritePrefix'] ?>feeds/atom.xml" />
+</head>
+
+<body class="s9y_wrap" id="serendipity_comment_page">
+
+{if $is_comment_added}
+
+    <div class="popup_comments_message popup_comments_message_added"><?= COMMENT_ADDED ?><?= $GLOBALS['tpl']['comment_string']['0'] ?><a href="<?= $GLOBALS['tpl']['comment_url'] ?>"><?= $GLOBALS['tpl']['comment_string']['1'] ?></a><?= $GLOBALS['tpl']['comment_string']['2'] ?><a href="#" onclick="self.close()"><?= $GLOBALS['tpl']['comment_string']['3'] ?></a><?= $GLOBALS['tpl']['comment_string']['4'] ?></div>
+
+{elseif $is_comment_notadded}
+
+    <div class="popup_comments_message popup_comments_message_notadded"><?= COMMENT_NOT_ADDED ?><?= $GLOBALS['tpl']['comment_string']['0'] ?><a href="<?= $GLOBALS['tpl']['comment_url'] ?>"><?= $GLOBALS['tpl']['comment_string']['1'] ?></a><?= $GLOBALS['tpl']['comment_string']['2'] ?><a href="#" onclick="self.close()"><?= $GLOBALS['tpl']['comment_string']['3'] ?></a><?= $GLOBALS['tpl']['comment_string']['4'] ?></div>
+
+{elseif $is_comment_empty}
+
+    <div class="popup_comments_message popup_comments_message_empty"><?= $GLOBALS['tpl']['comment_string']['0'] ?><a href="#" onclick="history.go(-1)"><?= $GLOBALS['tpl']['comment_string']['1'] ?></a></div>
+
+{elseif $is_showtrackbacks}
+
+    <div class="serendipity_commentsTitle"><?= TRACKBACKS ?></div>
+    <dl>
+        <dt><strong><?= TRACKBACK_SPECIFIC ?>:</strong></dt>
+        <dd><a rel="nofollow" href="<?= $GLOBALS['tpl']['comment_url'] ?>"><?= $GLOBALS['tpl']['comment_url'] ?></a></dd>
+
+        <dt><strong><?= DIRECT_LINK ?>:</strong></dt>
+        <dd><a href="<?= $GLOBALS['tpl']['comment_entryurl'] ?>"><?= $GLOBALS['tpl']['comment_entryurl'] ?></a></dd>
+    </dl>
+
+    {serendipity_printTrackbacks entry=$entry_id}
+
+{elseif $is_showcomments}
+
+    <div class="serendipity_commentsTitle"><?= COMMENTS ?></div>
+
+    {serendipity_printComments entry=$entry_id}
+    {if $is_comment_allowed}
+        <div class="serendipity_commentsTitle"><?= ADD_COMMENT ?></div>
+        <?= $GLOBALS['tpl']['COMMENTFORM'] ?>
+    <?php else: ?>
+        <div class="serendipity_center serendipity_msg_important"><?= COMMENTS_CLOSED ?></div>
+    <?php endif; ?>
+
+<?php endif; ?>
+
+</body>
+</html>
diff --git a/templates/default-php/comments.tpl b/templates/default-php/comments.tpl
new file mode 100644
index 0000000..f48518d
--- /dev/null
+++ b/templates/default-php/comments.tpl
@@ -0,0 +1,37 @@
+{foreach from=$comments item=comment name="comments"}
+    <a id="c<?= $comment['id'] ?>"></a>
+    <div id="serendipity_comment_<?= $comment['id'] ?>" class="serendipity_comment serendipity_comment_author_{$comment.author|@makeFilename} {if $entry.author == $comment.author}serendipity_comment_author_self<?php endif; ?>{cycle values="comment_oddbox, comment_evenbox"}" style="padding-left: <?= $comment['depth']*20 ?>px">
+        <div class="serendipity_commentBody">
+        {if $comment.body == 'COMMENT_DELETED'}
+            <?= COMMENT_IS_DELETED ?>
+        <?php else: ?>
+            <?= $comment['body'] ?>
+        <?php endif; ?>
+        </div>
+        <div class="serendipity_comment_source">
+            <a class="comment_source_trace" href="#c<?= $comment['id'] ?>">#<?= $comment['trace'] ?></a>
+            <span class="comment_source_author">
+            {if $comment.email}
+                <a href="mailto:<?= $comment['email'] ?>">{$comment.author|@default:$CONST.ANONYMOUS}</a>
+            <?php else: ?>
+                {$comment.author|@default:$CONST.ANONYMOUS}
+            <?php endif; ?>
+            </span>
+            {if $comment.url}
+                (<a class="comment_source_url" href="<?= $comment['url'] ?>" title="{$comment.url|@escape}"><?= HOMEPAGE ?></a>)
+            <?php endif; ?>
+            <?= ON ?>
+            <span class="comment_source_date">{$comment.timestamp|@formatTime:$CONST.DATE_FORMAT_SHORT}</span>
+
+            {if $entry.is_entry_owner}
+                (<a class="comment_source_ownerlink" href="<?= $comment['link_delete'] ?>" onclick="return confirm('<?= COMMENT_DELETE_CONFIRM|@sprintf:$comment.id:$comment.author ?>');"><?= DELETE ?></a>)
+            <?php endif; ?>
+            {if $entry.allow_comments AND $comment.body != 'COMMENT_DELETED'}
+                (<a class="comment_reply" href="#serendipity_CommentForm" id="serendipity_reply_<?= $comment['id'] ?>" onclick="document.getElementById('serendipity_replyTo').value='<?= $comment['id'] ?>'; <?= $GLOBALS['tpl']['comment_onchange'] ?>"><?= REPLY ?></a>)
+                <div id="serendipity_replyform_<?= $comment['id'] ?>"></div>
+            <?php endif; ?>
+        </div>
+    </div>
+{foreachelse}
+    <div class="serendipity_center nocomments"><?= NO_COMMENTS ?></div>
+<?php endforeach; ?>
diff --git a/templates/default-php/content.tpl b/templates/default-php/content.tpl
new file mode 100644
index 0000000..4fb9585
--- /dev/null
+++ b/templates/default-php/content.tpl
@@ -0,0 +1,22 @@
+<!-- CONTENT START -->
+
+<?php if ($GLOBALS['tpl']['searchresult_tooShort']): ?>
+    <h3 class="serendipity_date"><?= QUICKSEARCH ?></h3>
+	<div class="serendipity_search serendipity_search_tooshort"><?= $GLOBALS['tpl']['content_message']; ?></div>
+<?php elseif ($GLOBALS['tpl']['searchresult_error']): ?>
+    <h3 class="serendipity_date"><?= QUICKSEARCH ?></h3>
+	<div class="serendipity_search serendipity_search_error"><?= $GLOBALS['tpl']['content_message']; ?></div>
+<?php elseif ($GLOBALS['tpl']['searchresult_noEntries']): ?>
+    <h3 class="serendipity_date"><?= QUICKSEARCH ?></h3>
+	<div class="serendipity_search serendipity_search_noentries"><?= $GLOBALS['tpl']['content_message']; ?></div>
+<?php elseif ($GLOBALS['tpl']['searchresult_results']): ?>
+    <h3 class="serendipity_date"><?= QUICKSEARCH ?></h3>
+	<div class="serendipity_search serendipity_search_results"><?= $GLOBALS['tpl']['content_message']; ?></div>
+<?php else: ?>
+	<div class="serendipity_content_message"><?= $GLOBALS['tpl']['content_message']; ?></div>
+<?php endif; ?>
+
+<?= $GLOBALS['tpl']['ENTRIES']; ?>
+<?= $GLOBALS['tpl']['ARCHIVES']; ?>
+
+<!-- CONTENT END -->
diff --git a/templates/default-php/entries.tpl b/templates/default-php/entries.tpl
new file mode 100644
index 0000000..e7da546
--- /dev/null
+++ b/templates/default-php/entries.tpl
@@ -0,0 +1,198 @@
+<!-- ENTRIES START -->
+    <?php serendipity_plugin_api::hook_event('entries_header', $GLOBALS['tpl']['entry_id']); ?>
+
+    <?php if (count($GLOBALS['tpl']['entries']) < 1): ?>
+        <?= NO_ENTRIES_TO_PRINT ?>
+    <?php endif; ?>
+
+    <?php foreach($GLOBALS['tpl']['entries'] AS $dategroup): ?>
+    <div class="serendipity_Entry_Date">
+        <?php if ($dategroup['is_sticky']): ?>
+        <h3 class="serendipity_date"><?= STICKY_POSTINGS ?></h3>
+        <?php else: ?>
+        <h3 class="serendipity_date"><?= serendipity_formatTime(DATE_FORMAT_ENTRY, $dategroup['date']); ?></h3>
+        <?php endif; ?>
+
+        <?php foreach($dategroup['entries'] AS $entry): ?>
+        <h4 class="serendipity_title"><a href="<?= $entry['link'] ?>"><?= $entry['title'] ?></a></h4>
+
+        <div class="serendipity_entry serendipity_entry_author_<?= serendipity_makeFilename($entry['author']); ?> <?php if ($entry['is_entry_owner']): ?>serendipity_entry_author_self<?php endif; ?>">
+            <?php if ($entry['categories']): ?>
+            <span class="serendipity_entryIcon">
+            <?php foreach($entry['categories'] AS $entry_category): ?>
+                <?php if ($entry_category.category_icon): ?>
+                    <a href="<?= $entry_category['category_link'] ?>"><img class="serendipity_entryIcon" title="<?= htmlspecialchars($entry_category['category_name']) ?> <?= $entry_category['category_description'] ?>" alt="<?= htmlspecialchars($entry_category['category_name']) ?>" src="<?= $entry_category['category_icon'] ?>" /></a>
+                <?php endif; ?>
+            <?php endforeach; ?>
+            </span>
+            <?php endif; ?>
+
+            <div class="serendipity_entry_body">
+                <?= $entry['body'] ?>
+            </div>
+
+            <?php if ($entry['is_extended']): ?>
+            <div class="serendipity_entry_extended"><a id="extended"></a><?= $entry['extended'] ?></div>
+            <?php endif; ?>
+
+            <?php if ($entry['has_extended'] AND !$GLOBALS['tpl']['is_single_entry'] AND !$entry['is_extended']): ?>
+            <br /><a href="<?= $entry['link'] ?>#extended"><?php printf(VIEW_EXTENDED_ENTRY, $entry['title']) ?></a><br /><br />
+            <?php endif; ?>
+
+            <div class='serendipity_entryFooter'>
+                <?= POSTED_BY ?> <a href="<?= $entry['link_author'] ?>"><?= $entry['author'] ?></a>
+                <?php if ($entry['categories']): ?>
+                   <?= IN ?> <?php foreach($entry['categories'] AS $entry_category): ?><a href="<?= $entry_category['category_link'] ?>"><?= htmlspecialchars($entry_category['category_name']); ?></a>, <?php endforeach; ?>
+                <?php endif; ?>
+
+                <?php if ($dategroup['is_sticky']): ?>
+                    <?= ON ?>
+                <?php else: ?>
+                    <?= AT ?>
+                <?php endif; ?> <a href="<?= $entry['link'] ?>"><?php if ($dategroup['is_sticky']): ?><?= serendipity_formatTime(DATE_FORMAT_ENTRY, $entry['timestamp']); ?> <?php endif; ?><?= serendipity_formatTime('%H:%M', $entry['timestamp']); ?></a>
+
+                <?php if ($entry['has_comments']): ?>
+                    <?php if ($GLOBALS['tpl']['use_popups']): ?>
+                        | <a href="<?= $entry['link_popup_comments'] ?>" onclick="window.open(this.href, 'comments', 'width=480,height=480,scrollbars=yes'); return false;"><?= $entry['label_comments'] ?> (<?= $entry['comments'] ?>)</a>
+                    <?php else: ?>
+                        | <a href="<?= $entry['link'] ?>#comments"><?= $entry['label_comments'] ?> (<?= $entry['comments'] ?>)</a>
+                    <?php endif; ?>
+                <?php endif; ?>
+
+                <?php if ($entry['has_trackbacks']): ?>
+                    <?php if ($GLOBALS['tpl']['use_popups']): ?>
+                        | <a href="<?= $entry['link_popup_trackbacks'] ?>" onclick="window.open(this.href, 'comments', 'width=480,height=480,scrollbars=yes'); return false;"><?= $entry['label_trackbacks'] ?> (<?= $entry['trackbacks'] ?>)</a>
+                    <?php else: ?>
+                        | <a href="<?= $entry['link'] ?>#trackbacks"><?= $entry['label_trackbacks'] ?> (<?= $entry['trackbacks'] ?>)</a>
+                    <?php endif; ?>
+                <?php endif; ?>
+
+                <?php if ($entry['is_entry_owner'] AND !$GLOBALS['tpl']['is_preview']): ?>
+                        | <a href="<?= $entry['link_edit'] ?>"><?= EDIT_ENTRY; ?></a>
+                <?php endif; ?>
+
+                <?= $entry['add_footer'] ?>
+            </div>
+        </div>
+        <!--
+        <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+                 xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
+                 xmlns:dc="http://purl.org/dc/elements/1.1/">
+        <rdf:Description
+                 rdf:about="<?= $entry['link_rdf'] ?>"
+                 trackback:ping="<?= $entry['link_trackback'] ?>"
+                 dc:title="<?= $GLOBALS['template']->getdefault($entry['title_rdf'], $entry['title']) ?>"
+                 dc:identifier="<?= $entry['rdf_ident'] ?>" />
+        </rdf:RDF>
+        -->
+        <?= $entry['plugin_display_dat'] ?>
+
+        <?php if ($GLOBALS['tpl']['is_single_entry'] AND !$GLOBALS['tpl']['use_popups'] AND !$GLOBALS['tpl']['is_preview']): ?>
+            <?php if (defined('DATA_UNSUBSCRIBED')): ?>
+                <br /><div class="serendipity_center serendipity_msg_notice"><? printf(DATA_UNSUBSCRIBED, UNSUBSCRIBE_OK) ?></div><br />
+            <?php endif; ?>
+
+            <?php if (defined('DATA_TRACKBACK_DELETED')): ?>
+                <br /><div class="serendipity_center serendipity_msg_notice"><? printf(DATA_TRACKBACK_DELETED, TRACKBACK_DELETED) ?></div><br />
+            <?php endif; ?>
+
+            <?php if (defined('DATA_TRACKBACK_APPROVED')): ?>
+                <br /><div class="serendipity_center serendipity_msg_notice"><? printf(DATA_TRACKBACK_APPROVED, TRACKBACK_APPROVED) ?></div><br />
+            <?php endif; ?>
+
+            <?php if (defined('DATA_COMMENT_DELETED')): ?>
+                <br /><div class="serendipity_center serendipity_msg_notice"><? printf(DATA_COMMENT_DELETED, COMMENT_DELETED) ?></div><br />
+            <?php endif; ?>
+
+            <?php if (defined('DATA_COMMENT_APPROVED')): ?>
+                <br /><div class="serendipity_center serendipity_msg_notice"><? printf(DATA_COMMENT_APPROVED, COMMENT_APPROVED) ?></div><br />
+            <?php endif; ?>
+
+            <div class="serendipity_comments serendipity_section_trackbacks">
+                <br />
+                <a id="trackbacks"></a>
+                <div class="serendipity_commentsTitle"><?= TRACKBACKS ?></div>
+                    <div class="serendipity_center">
+                        <a rel="nofollow" style="font-weight: normal" href="<?= $entry['link_trackback'] ?>" onclick="alert('<?= htmlspecialchars(TRACKBACK_SPECIFIC_ON_CLICK) ?>'); return false;" title="<?= htmlspecialchars(TRACKBACK_SPECIFIC_ON_CLICK) ?>"><?= TRACKBACK_SPECIFIC; ?></a>
+                    </div>
+                    <br />
+                        <?php echo serendipity_printTrackbacks(serendipity_fetchTrackbacks($entry['id'])) ?>
+            </div>
+        <?php endif; ?>
+
+        <?php if ($GLOBALS['tpl']['is_single_entry'] AND !$GLOBALS['tpl']['is_preview']): ?>
+            <div class="serendipity_comments serendipity_section_comments">
+                <br />
+                <a id="comments"></a>
+                <div class="serendipity_commentsTitle"><?= COMMENTS; ?></div>
+                <div class="serendipity_center"><?= DISPLAY_COMMENTS_AS; ?>
+                <?php if ($entry['viewmode'] == VIEWMODE_LINEAR): ?>
+                    (<?= COMMENTS_VIEWMODE_LINEAR; ?> | <a href="<?= $entry['link_viewmode_threaded'] ?>#comments" rel="nofollow"><?= COMMENTS_VIEWMODE_THREADED; ?></a>)
+                <?php else: ?>
+                    (<a rel="nofollow" href="<?= $entry['link_viewmode_linear'] ?>#comments"><?= COMMENTS_VIEWMODE_LINEAR; ?></a> | <?= COMMENTS_VIEWMODE_THREADED; ?>)
+                <?php endif; ?>
+                </div>
+                <br />
+                    <?php $GLOBALS['template']->call('printComments', array('entry' => $entry['id'], 'mode' => $entry['viewmode'])); ?>
+
+                <?php if ($entry['is_entry_owner']): ?>
+                    <?php if ($entry['allow_comments']): ?>
+                    <div class="serendipity_center">(<a href="<?= $entry['link_deny_comments'] ?>"><?= COMMENTS_DISABLE ?></a>)</div>
+                    <?php else: ?>
+                    <div class="serendipity_center">(<a href="<?= $entry['link_allow_comments'] ?>"><?= COMMENTS_ENABLE ?></a>)</div>
+                    <?php endif; ?>
+                <?php endif; ?>
+                <a id="feedback"></a>
+
+                <?php foreach($GLOBALS['tpl']['comments_messagestack'] AS $message): ?>
+                <div class="serendipity_center serendipity_msg_important"><?= $GLOBALS['tpl']['message'] ?></div>
+                <?php endforeach; ?>
+
+                <?php if ($GLOBALS['tpl']['is_comment_added']): ?>
+
+                <br />
+                <div class="serendipity_center serendipity_msg_notice"><?= COMMENT_ADDED; ?></div>
+
+                <?php elseif ($GLOBALS['tpl']['is_comment_moderate']): ?>
+
+                <br />
+                <div class="serendipity_center serendipity_msg_notice"><?= COMMENT_ADDED; ?><br /><?= THIS_COMMENT_NEEDS_REVIEW ?></div>
+
+                <?php elseif ($entry['allow_comments']): ?>
+
+                <br />
+                <div class="serendipity_center serendipity_msg_important"><?= COMMENTS_CLOSED; ?></div>
+
+                <?php else: ?>
+
+                <br />
+                <div class="serendipity_section_commentform">
+	                <div class="serendipity_commentsTitle"><?= ADD_COMMENT; ?></div>
+	                <?= $GLOBALS['tpl']['COMMENTFORM']; ?>
+				</div>
+
+                <?php endif; ?>
+            </div>
+        <?php endif; ?>
+
+        <?= $entry['backend_preview'] ?>
+        <?php endforeach; ?>
+    </div>
+    <?php endforeach; ?>
+
+    <div class='serendipity_entryFooter' style="text-align: center">
+    <?php if ($GLOBALS['tpl']['footer_prev_page']): ?>
+        <a href="<?= $GLOBALS['tpl']['footer_prev_page'] ?>">&laquo; <?= PREVIOUS_PAGE; ?></a>&#160;&#160;
+    <?php endif; ?>
+
+    <?php if ($GLOBALS['tpl']['footer_info']): ?>
+        (<?= $GLOBALS['tpl']['footer_info'] ?>)
+    <?php endif; ?>
+
+    <?php if ($GLOBALS['tpl']['footer_next_page']): ?>
+        <a href="<?= $GLOBALS['tpl']['footer_next_page'] ?>">&raquo; <?= NEXT_PAGE; ?></a>
+    <?php endif; ?>
+
+    <?php serendipity_plugin_api::hook_event('entries_footer', $GLOBALS['template']); ?>
+    </div>
+<!-- ENTRIES END -->
diff --git a/templates/default-php/entries_archives.tpl b/templates/default-php/entries_archives.tpl
new file mode 100644
index 0000000..f2aaaca
--- /dev/null
+++ b/templates/default-php/entries_archives.tpl
@@ -0,0 +1,20 @@
+{serendipity_hookPlugin hook="entries_header"}
+<h3 class="serendipity_date"><?= ARCHIVES ?></h3>
+{foreach from=$archives item="archive"}
+<table id="archives_listing" cellspacing="4" cellpadding="4" border="0">
+    <tr class="archives_header">
+        <td class="archives_header" colspan="4"><h2><?= $archive['year'] ?></h2></td>
+    </tr>
+    {foreach from=$archive.months item="month"}
+    <tr class="archives_row">
+        <td class="archives_graph" width="100"><img src="{serendipity_getFile file="img/graph_bar_horisontal.png"}" height="10" width="{math width=100 equation="count * width / max" count=$month.entry_count max=$max_entries format="%d"}" style="border: 1px solid #000000"></td>
+        <td class="archives_date">{$month.date|@formatTime:"%B"}</td>
+        <td class="archives_count"><?= $month['entry_count'] ?> <?= ENTRIES ?></td>
+        <td class="archives_count_link">({if $month.entry_count}<a href="<?= $month['link'] ?>"><?php endif; ?><?= VIEW_FULL ?>{if $month.entry_count}</a><?php endif; ?>)</td>
+        <td class="archives_link">({if $month.entry_count}<a href="<?= $month['link_summary'] ?>"><?php endif; ?><?= VIEW_TOPICS ?>{if $month.entry_count}</a><?php endif; ?>)</td>
+    </tr>
+    <?php endforeach; ?>
+</table>
+<?php endforeach; ?>
+<div class="serendipity_pageFooter" style="text-align: center">
+{serendipity_hookPlugin hook="entries_footer"}</div>
diff --git a/templates/default-php/entries_summary.tpl b/templates/default-php/entries_summary.tpl
new file mode 100644
index 0000000..584c47f
--- /dev/null
+++ b/templates/default-php/entries_summary.tpl
@@ -0,0 +1,15 @@
+{serendipity_hookPlugin hook="entries_header"}
+<div class='serendipity_date'><?= TOPICS_OF ?> {$dateRange.0|@formatTime:"%B, %Y"}</div>
+
+<div class="serendipity_entry">
+    <ul>
+    {foreach from=$entries item="entries"}
+        {foreach from=$entries.entries item="entry"}
+            <li><a href="<?= $entry['link'] ?>"><?= $entry['title'] ?></a>
+                <div class="summary_posted_by"><?= POSTED_BY ?> <span class="posted_by_author"><?= $entry['author'] ?></span> <?= ON ?> <span class="posted_by_date">{$entry.timestamp|@formatTime:DATE_FORMAT_ENTRY}</span></div></li>
+        <?php endforeach; ?>
+    <?php endforeach; ?>
+    </ul>
+</div>
+<div class='serendipity_entryFooter' style="text-align: center">
+{serendipity_hookPlugin hook="entries_footer"}</div>
diff --git a/templates/default-php/feed_0.91.tpl b/templates/default-php/feed_0.91.tpl
new file mode 100644
index 0000000..91f1ddb
--- /dev/null
+++ b/templates/default-php/feed_0.91.tpl
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" ?>
+
+<rss version="0.91" <?= $GLOBALS['tpl']['namespace_display_dat'] ?>>
+<channel>
+<title><?= $GLOBALS['tpl']['metadata']['title'] ?></title>
+<link><?= $GLOBALS['tpl']['metadata']['link'] ?></link>
+<description><?= $GLOBALS['tpl']['metadata']['description'] ?></description>
+<language><?= $GLOBALS['tpl']['metadata']['language'] ?></language>
+<?= $GLOBALS['tpl']['metadata']['additional_fields']['image'] ?>
+
+{foreach from=$entries item="entry"}
+<item>
+    <title><?= $entry['feed_title'] ?></title>
+    <link><?= $entry['feed_entryLink'] ?></link>
+
+{if !empty($entry.body)}
+    <description>
+        {$entry.feed_body|@escape} {$entry.feed_ext|@escape}
+    </description>
+{/if}
+</item>
+{/foreach}
+
+</channel>
+</rss>
+
diff --git a/templates/default-php/feed_1.0.tpl b/templates/default-php/feed_1.0.tpl
new file mode 100644
index 0000000..aa217e1
--- /dev/null
+++ b/templates/default-php/feed_1.0.tpl
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8" ?>
+
+<rdf:RDF <?= $GLOBALS['tpl']['namespace_display_dat'] ?>
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:admin="http://webns.net/mvcb/"
+   xmlns:content="http://purl.org/rss/1.0/modules/content/"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
+   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
+   xmlns="http://my.netscape.com/rdf/simple/0.9/">
+<channel>
+    <title><?= $GLOBALS['tpl']['metadata']['title'] ?></title>
+    <link><?= $GLOBALS['tpl']['metadata']['link'] ?></link>
+    <description><?= $GLOBALS['tpl']['metadata']['description'] ?></description>
+    <dc:language><?= $GLOBALS['tpl']['metadata']['language'] ?></dc:language>
+{if $metadata.showMail}
+    <admin:errorReportsTo rdf:resource="mailto:<?= $GLOBALS['tpl']['metadata']['email'] ?>" />
+{/if}
+
+    <?= $GLOBALS['tpl']['metadata']['additional_fields']['image_rss10_channel'] ?>
+
+    <items>
+      <rdf:Seq>
+{foreach from=$entries item="entry"}
+        <rdf:li resource="{serendipity_rss_getguid entry=$entry is_comments=$is_comments}" />
+{/foreach}
+      </rdf:Seq>
+    </items>
+</channel>
+
+<?= $GLOBALS['tpl']['metadata']['additional_fields']['image_rss10_rdf'] ?>
+<?= $GLOBALS['tpl']['once_display_dat'] ?>
+
+{foreach from=$entries item="entry"}
+<item rdf:about="<?= $entry['feed_guid'] ?>">
+    <title><?= $entry['feed_title'] ?></title>
+    <link><?= $entry['feed_entryLink'] ?></link>
+{if !empty($entry.body)}
+    <description>
+    {$entry.feed_body|@escape} {$entry.feed_ext|@escape}
+    </description>
+{/if}
+
+    <dc:publisher><?= $entry['feed_blogTitle'] ?></dc:publisher>
+    <dc:creator><?= $entry['feed_email'] ?> (<?= $entry['feed_author'] ?>)</dc:creator>
+    <dc:subject>
+    {foreach from=$entry.categories item="cat"}<?= $cat['feed_category_name'] ?>, {/foreach}</dc:subject>
+    <dc:date><?= $entry['feed_timestamp'] ?></dc:date>
+    <wfw:comment><?= $GLOBALS['tpl']['serendipityBaseURL'] ?>wfwcomment.php?cid=<?= $entry['feed_id'] ?></wfw:comment>
+{if !$is_comments}
+        <slash:comments><?= $entry['comments'] ?></slash:comments>
+        <wfw:commentRss><?= $GLOBALS['tpl']['serendipityBaseURL'] ?>rss.php?version=<?= $GLOBALS['tpl']['metadata']['version'] ?>&amp;type=comments&amp;cid=<?= $entry['feed_id'] ?></wfw:commentRss>
+{/if}
+    <?= $entry['per_entry_display_dat'] ?>
+</item>
+{/foreach}
+
+</rdf:RDF>
+
diff --git a/templates/default-php/feed_2.0.tpl b/templates/default-php/feed_2.0.tpl
new file mode 100644
index 0000000..6631b87
--- /dev/null
+++ b/templates/default-php/feed_2.0.tpl
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8" ?>
+
+<rss version="2.0" 
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:admin="http://webns.net/mvcb/"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
+   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
+   xmlns:content="http://purl.org/rss/1.0/modules/content/"
+   {$namespace_display_dat}>
+<channel>
+    <title>{$metadata.title}</title>
+    <link>{$metadata.link}</link>
+    <description>{$metadata.description}</description>
+    <dc:language>{$metadata.language}</dc:language>
+{if $metadata.showMail}
+    <admin:errorReportsTo rdf:resource="mailto:{$metadata.email}" />
+{/if}
+    <generator>Serendipity {$serendipityVersion} - http://www.s9y.org/</generator>
+    {$metadata.additional_fields.channel}
+    {$metadata.additional_fields.image}
+
+{foreach from=$entries item="entry"}
+<item>
+    <title>{$entry.feed_title}</title>
+    <link>{$entry.feed_entryLink}</link>
+    {foreach from=$entry.categories item="cat"}
+        <category>{$cat.feed_category_name}</category>
+    {/foreach}
+
+    <comments>{$entry.feed_entryLink}#comments</comments>
+    <wfw:comment>{$serendipityBaseURL}wfwcomment.php?cid={$entry.feed_id}</wfw:comment>
+
+{if !$is_comments}
+    <slash:comments>{$entry.comments}</slash:comments>
+    <wfw:commentRss>{$serendipityBaseURL}rss.php?version={$metadata.version}&amp;type=comments&amp;cid={$entry.feed_id}</wfw:commentRss>
+{/if}    
+
+    <author>{$entry.feed_email} ({$entry.feed_author})</author>
+{if !empty($entry.body)}
+    <content:encoded>
+    {$entry.feed_body|@escape} {$entry.feed_ext|@escape}
+    </content:encoded>
+{/if}
+
+    <pubDate>{$entry.feed_timestamp_r}</pubDate>
+    <guid isPermaLink="false">{$entry.feed_guid}</guid>
+    {$entry.per_entry_display_dat}
+</item>
+{/foreach}
+
+</channel>
+</rss>
diff --git a/templates/default-php/feed_atom0.3.tpl b/templates/default-php/feed_atom0.3.tpl
new file mode 100644
index 0000000..9c873b5
--- /dev/null
+++ b/templates/default-php/feed_atom0.3.tpl
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<?xml-stylesheet href="{serendipity_getFile file='atom.css'}" type="text/css" ?>
+
+<feed version="0.3" {$namespace_display_dat}
+   xmlns="http://purl.org/atom/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:admin="http://webns.net/mvcb/"
+   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
+   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
+    <link href="{$serendipityBaseURL}rss.php?version=atom0.3" rel="service.feed" title="{$metadata.title}" type="application/x.atom+xml" />
+    <link href="{$serendipityBaseURL}"                        rel="alternate"    title="{$metadata.title}" type="text/html" />
+    <link href="{$serendipityBaseURL}rss.php?version=2.0"     rel="alternate"    title="{$metadata.title}" type="application/rss+xml" />
+    <title mode="escaped" type="text/html">{$metadata.title}</title>
+    <tagline mode="escaped" type="text/html">{$metadata.description}</tagline>
+    <id>{$metadata.link}</id>
+    <modified>{$last_modified}</modified>
+    <generator url="http://www.s9y.org/" version="{$serendipityVersion}">Serendipity {$serendipityVersion} - http://www.s9y.org/</generator>
+    <dc:language>{$metadata.language}</dc:language>
+{if $metadata.showMail}
+    <admin:errorReportsTo rdf:resource="mailto:{$metadata.email}" />
+{/if}
+    <info mode="xml" type="text/html">
+        <div xmlns="http://www.w3.org/1999/xhtml">You are viewing an ATOM formatted XML site feed. Usually this file is inteded to be viewed in an aggregator or syndication software. If you want to know more about ATOM, please visist <a href="http://atomenabled.org/">Atomenabled.org</a></div>
+    </info>
+
+{foreach from=$entries item="entry"}
+    <entry>
+        <link href="{$entry.feed_entryLink}" rel="alternate" title="{$entry.feed_title}" type="text/html" />
+        <author>
+            <name>{$entry.feed_author}</name>
+            <email>{$entry.feed_email}</email>
+        </author>
+    
+        <issued>{$entry.feed_timestamp}</issued>
+        <created>{$entry.feed_timestamp}</created>
+        <modified>{$entry.feed_last_modified}</modified>
+        <wfw:comment>{$serendipityBaseURL}wfwcomment.php?cid={$entry.feed_id}</wfw:comment>
+{if !$is_comments}
+        <slash:comments>{$entry.comments}</slash:comments>
+        <wfw:commentRss>{$serendipityBaseURL}rss.php?version={$metadata.version}&amp;type=comments&amp;cid={$entry.feed_id}</wfw:commentRss>
+{/if}    
+        <id>{$entry.feed_guid}</id>
+        <title mode="escaped" type="text/html">{$entry.feed_title}</title>
+{if !empty($entry.body)}
+        <content type="application/xhtml+xml" xml:base="{$serendipityBaseURL}">
+            <div xmlns="http://www.w3.org/1999/xhtml">
+                {$entry.feed_body} {$entry.feed_ext}
+            </div>
+        </content>
+{/if}
+
+        {$entry.per_entry_display_dat}
+    </entry>
+{/foreach}
+</feed>
\ No newline at end of file
diff --git a/templates/default-php/feed_atom1.0.tpl b/templates/default-php/feed_atom1.0.tpl
new file mode 100644
index 0000000..5106bb8
--- /dev/null
+++ b/templates/default-php/feed_atom1.0.tpl
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<?xml-stylesheet href="{serendipity_getFile file='atom.css'}" type="text/css" ?>
+
+<feed {$namespace_display_dat}
+   xmlns="http://www.w3.org/2005/Atom"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:admin="http://webns.net/mvcb/"
+   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
+   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
+    <link href="{$self_url}" rel="self" title="{$metadata.title}" type="application/atom+xml" />
+    <link href="{$serendipityBaseURL}"                        rel="alternate"    title="{$metadata.title}" type="text/html" />
+    <link href="{$serendipityBaseURL}rss.php?version=2.0"     rel="alternate"    title="{$metadata.title}" type="application/rss+xml" />
+    <title type="html">{$metadata.title}</title>
+    <subtitle type="html">{$metadata.description}</subtitle>
+    {$metadata.additional_fields.image_atom10}
+    <id>{$metadata.link}</id>
+    <updated>{$last_modified}</updated>
+    <generator uri="http://www.s9y.org/" version="{$serendipityVersion}">Serendipity {$serendipityVersion} - http://www.s9y.org/</generator>
+    <dc:language>{$metadata.language}</dc:language>
+{if $metadata.showMail}
+    <admin:errorReportsTo rdf:resource="mailto:{$metadata.email}" />
+{/if}
+
+{foreach from=$entries item="entry"}
+    <entry>
+        <link href="{$entry.feed_entryLink}" rel="alternate" title="{$entry.feed_title}" />
+        <author>
+            <name>{$entry.feed_author}</name>
+            <email>{$entry.feed_email}</email>
+        </author>
+    
+        <published>{$entry.feed_timestamp}</published>
+        <updated>{$entry.feed_last_modified}</updated>
+        <wfw:comment>{$serendipityBaseURL}wfwcomment.php?cid={$entry.feed_id}</wfw:comment>
+    
+{if !$is_comments}
+        <slash:comments>{$entry.comments}</slash:comments>
+        <wfw:commentRss>{$serendipityBaseURL}rss.php?version={$metadata.version}&amp;type=comments&amp;cid={$entry.feed_id}</wfw:commentRss>
+{/if}
+    
+    {foreach from=$entry.categories item="cat"}
+        <category scheme="{$cat.categoryURL}" label="{$cat.feed_category_name}" term="{$cat.feed_category_name}" />
+    {/foreach}
+
+        <id>{$entry.feed_guid}</id>
+        <title type="html">{$entry.feed_title}</title>
+{if !empty($entry.body)}
+        <content type="xhtml" xml:base="{$serendipityBaseURL}">
+            <div xmlns="http://www.w3.org/1999/xhtml">
+                {$entry.feed_body} {$entry.feed_ext}
+            </div>
+        </content>
+{/if}
+        {$entry.per_entry_display_dat}
+    </entry>
+{/foreach}
+
+</feed>
\ No newline at end of file
diff --git a/templates/default-php/feed_opml1.0.tpl b/templates/default-php/feed_opml1.0.tpl
new file mode 100644
index 0000000..3d3b2d4
--- /dev/null
+++ b/templates/default-php/feed_opml1.0.tpl
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" ?>
+
+<opml version="{$metadata.version}" {$namespace_display_dat}>
+<head>
+    <title>{$metadata.title}</title>
+    <dateModified>{$last_modified}</dateModified>
+    <ownerName>Serendipity {$serendipityVersion} - http://www.s9y.org/</ownerName>
+</head>
+<body>
+
+{foreach from=$entries item="entry"}
+    <outline text="{$entry.feed_title}" type="url" htmlUrl="{$entry.feed_entryLink}" urlHTTP="{$entry.feed_entryLink}" />
+{/foreach}
+
+</body>
+</opml>
\ No newline at end of file
diff --git a/templates/default-php/index.tpl b/templates/default-php/index.tpl
new file mode 100644
index 0000000..1450cbf
--- /dev/null
+++ b/templates/default-php/index.tpl
@@ -0,0 +1,48 @@
+<?php if ($GLOBALS['tpl']['is_embedded'] != true): ?>
+<html>
+<head>
+    <title><?= $GLOBALS['template']->getdefault('head_title', 'blogTitle'); ?> - <?= $GLOBALS['template']->getdefault('head_subtitle', 'blogDescription'); ?></title>
+    <meta http-equiv="Content-Type" content="text/html; charset=<?= $GLOBALS['tpl']['head_charset']; ?>" />
+    <meta name="Powered-By" content="Serendipity v.<?= $GLOBALS['tpl']['head_version']; ?>" />
+    <link rel="stylesheet" type="text/css" href="<?= $GLOBALS['tpl']['head_link_stylesheet']; ?>" />
+    <link rel="alternate"  type="application/rss+xml" title="<?= $GLOBALS['tpl']['blogTitle']; ?> RSS feed" href="<?= $GLOBALS['tpl']['serendipityBaseURL']; ?><?= $GLOBALS['tpl']['serendipityRewritePrefix']; ?>feeds/index.rss2" />
+    <link rel="alternate"  type="application/x.atom+xml"  title="<?= $GLOBALS['tpl']['blogTitle']; ?> Atom feed"  href="<?= $GLOBALS['tpl']['serendipityBaseURL']; ?><?= $GLOBALS['tpl']['serendipityRewritePrefix']; ?>feeds/atom.xml" />
+<?php if ($GLOBALS['tpl']['entry_id']): ?>
+    <link rel="pingback" href="<?= $GLOBALS['tpl']['serendipityBaseURL']; ?>comment.php?type=pingback&amp;entry_id=<?= $GLOBALS['tpl']['entry_id']; ?>" />
+<?php endif; ?>
+
+<?php serendipity_plugin_api::hook_event('frontend_header', $GLOBALS['template']); ?>
+</head>
+
+<body>
+<?php else: ?>
+<?php serendipity_plugin_api::hook_event('frontend_header', $GLOBALS['template']); ?>
+<?php endif; ?>
+
+<?php if ($GLOBALS['tpl']['is_raw_mode'] != true): ?>
+<div id="serendipity_banner">
+    <h1><a class="homelink1" href="<?= $GLOBALS['tpl']['serendipityBaseURL']; ?>"><?= $GLOBALS['template']->getdefault('head_title', 'blogTitle'); ?></a></h1>
+    <h2><a class="homelink2" href="<?= $GLOBALS['tpl']['serendipityBaseURL']; ?>"><?= $GLOBALS['template']->getdefault('head_subtitle', 'blogDescription'); ?></a></h2>
+</div>
+
+<table id="mainpane">
+    <tr>
+<?php if ($GLOBALS['tpl']['leftSidebarElements'] > 0): ?>
+        <td id="serendipityLeftSideBar" valign="top"><?php echo serendipity_plugin_api::generate_plugins('left'); ?></td>
+<?php endif; ?>
+        <td id="content" valign="top"><?= $GLOBALS['tpl']['CONTENT']; ?></td>
+<?php if ($GLOBALS['tpl']['rightSidebarElements'] > 0): ?>
+        <td id="serendipityRightSideBar" valign="top"><?php echo serendipity_plugin_api::generate_plugins('right'); ?></td>
+<?php endif; ?>
+    </tr>
+</table>
+<?php endif; ?>
+
+<?= $GLOBALS['tpl']['raw_data']; ?>
+<?php serendipity_plugin_api::hook_event('frontend_footer', $GLOBALS['template']); ?>
+
+<?php if ($GLOBALS['tpl']['is_embedded'] != true): ?>
+</body>
+</html>
+<?php endif; ?>
+
diff --git a/templates/default-php/info.txt b/templates/default-php/info.txt
new file mode 100644
index 0000000..3e924fd
--- /dev/null
+++ b/templates/default-php/info.txt
@@ -0,0 +1,4 @@
+Name: PHP Engine. EXPERIMENTAL. (Developers only)
+Author: Garvin Hicking
+Date: 06.06.2006
+Require Serendipity: 1.1
diff --git a/templates/default-php/plugin_calendar.tpl b/templates/default-php/plugin_calendar.tpl
new file mode 100644
index 0000000..35274b5
--- /dev/null
+++ b/templates/default-php/plugin_calendar.tpl
@@ -0,0 +1,33 @@
+<table style="width: 100%" cellspacing="0" cellpadding="0" class="serendipity_calendar">
+    <tr>
+        <td class="serendipity_calendarHeader">
+<?php if ($GLOBALS['tpl']['plugin_calendar_head']['minScroll'] <= $GLOBALS['tpl']['plugin_calendar_head']['month_date']): ?>
+            <a title="<?= BACK ?>" href="<?= $GLOBALS['tpl']['plugin_calendar_head']['uri_previous'] ?>"><img alt="<?= BACK ?>" src="<?php echo serendipity_getTemplateFile('img/back.png'); ?>" width="16" height="12" style="border: 0px" /></a>
+<?php endif; ?>
+        </td>
+
+        <td colspan="5" class="serendipity_calendarHeader" style="text-align: center; vertical-align: bottom">
+            <b><a style="white-space: nowrap" href="<?= $GLOBALS['tpl']['plugin_calendar_head']['uri_month'] ?>"><?= serendipity_formatTime("%B '%y", $GLOBALS['tpl']['plugin_calendar_head']['month_date']); ?></a></b>
+        </td>
+
+        <td class="serendipity_calendarHeader" style="text-align: right">
+<?php if ($GLOBALS['tpl']['plugin_calendar_head']['maxScroll'] >= $GLOBALS['tpl']['plugin_calendar_head']['month_date']): ?>
+            <a title="<?= FORWARD ?>" href="<?= $GLOBALS['tpl']['plugin_calendar_head']['uri_next'] ?>"><img alt="<?= FORWARD ?>" src="<?php echo serendipity_getTemplateFile('img/forward.png'); ?>" width="16" height="12" style="border: 0px" /></a>
+<?php endif; ?>
+        </td>
+    </tr>
+
+    <tr>
+    <?php foreach($GLOBALS['tpl']['plugin_calendar_dow'] AS $dow): ?>
+        <td scope="col" abbr="<?= serendipity_formatTime('%A', $dow['date']); ?>" title="<?= serendipity_formatTime('%A', $dow['date']); ?>" class="serendipity_weekDayName" align="center"><?= serendipity_formatTime('%a', $dow['date']); ?></td>
+    <?php endforeach; ?>
+    </tr>
+
+    <?php foreach($GLOBALS['tpl']['plugin_calendar_weeks'] AS $week): ?>
+        <tr class="serendipity_calendar">
+        <?php foreach($week['days'] AS $day): ?>
+            <td class="serendipity_calendarDay <?= $day['classes'] ?>"<?php if (isset($day['properties']['Title'])): ?> title="<?= $day['properties']['Title'] ?>"<?php endif; ?>><?php if (isset($day['properties']['Active']) AND $day['properties']['Active']): ?><a href="<?= $day['properties']['Link'] ?>"><?php endif; ?><?= $day['name']; ?><?php if (isset($day['properties']['Active']) AND $day['properties']['Active']): ?></a><?php endif; ?></td>
+        <?php endforeach; ?>
+        </tr>
+    <?php endforeach; ?>
+</table>
diff --git a/templates/default-php/plugin_categories.tpl b/templates/default-php/plugin_categories.tpl
new file mode 100644
index 0000000..99ca06e
--- /dev/null
+++ b/templates/default-php/plugin_categories.tpl
@@ -0,0 +1,31 @@
+{if $is_form}
+<form id="serendipity_category_form" action="<?= $GLOBALS['tpl']['form_url'] ?>" method="post">
+    <div id="serendipity_category_form_content">
+<?php endif; ?>
+
+    <ul id="serendipity_categories_list" style="list-style: none; margin: 0px; padding: 0px">
+{foreach from=$categories item="plugin_category"}
+        <li style="display: block;">
+        {if $is_form}
+            <input style="width: 15px" type="checkbox" name="serendipity[multiCat][]" value="<?= $plugin_category['categoryid'] ?>" />
+        <?php endif; ?>
+
+        {if !empty($category_image)}
+            <a class="serendipity_xml_icon" href="<?= $plugin_category['feedCategoryURL'] ?>"><img src="<?= $GLOBALS['tpl']['category_image'] ?>" alt="XML" style="border: 0px" /></a>
+        <?php endif; ?>
+
+            <a href="<?= $plugin_category['categoryURL'] ?>" title="{$plugin_category.category_description|escape}" style="padding-left: <?= $plugin_category['paddingPx'] ?>px">{$plugin_category.category_name|escape}</a>
+        </li>
+<?php endforeach; ?>
+    </ul>
+
+{if $is_form}
+    <div class="category_submit"><input type="submit" name="serendipity[isMultiCat]" value="<?= GO ?>" /></div>
+<?php endif; ?>
+
+    <div class="category_link_all"><a href="<?= $GLOBALS['tpl']['form_url'] ?>" title="<?= ALL_CATEGORIES ?>"><?= ALL_CATEGORIES ?></a></div>
+
+{if $is_form}
+    </div>
+</form>
+<?php endif; ?>
diff --git a/templates/default-php/preview.png b/templates/default-php/preview.png
new file mode 100644
index 0000000000000000000000000000000000000000..4bad5ac86e9463c290d74ba058ef86798ebcccbd
GIT binary patch
literal 13606
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

literal 0
HcmV?d00001

diff --git a/templates/default-php/preview_iframe.tpl b/templates/default-php/preview_iframe.tpl
new file mode 100644
index 0000000..c9761d5
--- /dev/null
+++ b/templates/default-php/preview_iframe.tpl
@@ -0,0 +1,24 @@
+    <head>
+        <title><?= SERENDIPITY_ADMIN_SUITE ?></title>
+        <meta http-equiv="Content-Type" content="text/html; charset=<?= $GLOBALS['tpl']['head_charset'] ?>" />
+        <meta name="Powered-By" content="Serendipity v.<?= $GLOBALS['tpl']['head_version'] ?>" />
+        <link rel="stylesheet" type="text/css" href="<?= $GLOBALS['tpl']['head_link_stylesheet'] ?>" />
+        <script type="text/javascript">
+           window.onload = function() {ldelim}
+             parent.document.getElementById('serendipity_iframe').style.height = document.getElementById('mainpane').offsetHeight
+                                                                               + parseInt(document.getElementById('mainpane').style.marginTop)
+                                                                               + parseInt(document.getElementById('mainpane').style.marginBottom)
+                                                                               + 'px';
+             parent.document.getElementById('serendipity_iframe').scrolling    = 'no';
+             parent.document.getElementById('serendipity_iframe').style.border = 0;
+           {rdelim}
+        </script>
+    </head>
+
+    <body style="padding: 0px; margin: 0px;">
+        <div id="mainpane" style="padding: 0px; margin: 5px auto 5px auto; width: 98%;">
+            <div id="content" style="padding: 5px; margin: 0px;">
+            <?= $GLOBALS['tpl']['preview'] ?>
+            </div>
+        </div>
+    </body>
diff --git a/templates/default-php/sidebar.tpl b/templates/default-php/sidebar.tpl
new file mode 100644
index 0000000..33e02e1
--- /dev/null
+++ b/templates/default-php/sidebar.tpl
@@ -0,0 +1,12 @@
+<?php if ($GLOBALS['tpl']['is_raw_mode']): ?>
+<div id="serendipity<?= $GLOBALS['tpl']['pluginside'] ?>SideBar">
+<?php endif; ?>
+<?php foreach($GLOBALS['tpl']['plugindata'] AS $item): ?>
+    <div class="serendipitySideBarItem container_<?= $item['class'] ?>">
+        <?php if ($item.title != ''): ?><h3 class="serendipitySideBarTitle <?= $item['class'] ?>"><?= $item['title'] ?></h3><?php endif; ?>
+        <div class="serendipitySideBarContent"><?= $item['content'] ?></div>
+    </div>
+<?php endforeach; ?>
+<?php if ($GLOBALS['tpl']['is_raw_mode']): ?>
+</div>
+<?php endif; ?>
diff --git a/templates/default-php/template.inc.php b/templates/default-php/template.inc.php
new file mode 100644
index 0000000..1ca9224
--- /dev/null
+++ b/templates/default-php/template.inc.php
@@ -0,0 +1,7 @@
+<?php 
+// THIS FILE IS WORK-IN-PROGRESS. Mostly proof-of-code.
+// Proceed at your own risk. Read the "template_api.inc.php
+// instructions.
+include_once S9Y_INCLUDE_PATH . 'include/template_api.inc.php'; 
+$GLOBALS['template'] = new serendipity_smarty_emulator(); 
+$GLOBALS['serendipity']['smarty'] =& $GLOBALS['template'];
diff --git a/templates/default-php/trackbacks.tpl b/templates/default-php/trackbacks.tpl
new file mode 100644
index 0000000..4fdbd9e
--- /dev/null
+++ b/templates/default-php/trackbacks.tpl
@@ -0,0 +1,17 @@
+{foreach from=$trackbacks item=trackback}
+    <div class="serendipity_comment">
+        <div class="serendipity_commentBody">
+            <a href="{$trackback.url|@strip_tags}" {'blank'|@xhtml_target}><?= $trackback['title'] ?></a><br />
+            {$trackback.body|@strip_tags|@escape:all}
+        </div>
+        <div class="serendipity_comment_source">
+            <b>Weblog:</b> {$trackback.author|@default:$CONST.ANONYMOUS}<br />
+            <b><?= TRACKED ?>:</b> {$trackback.timestamp|@formatTime:'%b %d, %H:%M'}
+        {if $entry.is_entry_owner}
+            (<a href="<?= $GLOBALS['tpl']['serendipityBaseURL'] ?>comment.php?serendipity[delete]=<?= $trackback['id'] ?>&amp;serendipity[entry]=<?= $trackback['entry_id'] ?>&amp;serendipity[type]=trackbacks"><?= DELETE ?></a>)
+        <?php endif; ?>
+        </div>
+    </div>
+{foreachelse}
+    <div class="serendipity_center"><?= NO_TRACKBACKS ?></div>
+<?php endforeach; ?>
-- 
2.39.5