initial import
This commit is contained in:
commit
87ceb2a0dd
31
COPYING
Normal file
31
COPYING
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
PurpleInk v0.1-ALPHA
|
||||||
|
|
||||||
|
Copyright (c) 2011, Dan Ponte
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the author nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software
|
||||||
|
without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
76
DB
Normal file
76
DB
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
Master database layout:
|
||||||
|
|
||||||
|
collection sites
|
||||||
|
{
|
||||||
|
{
|
||||||
|
_id: sitename,
|
||||||
|
dbname: (string),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Site database layout:
|
||||||
|
|
||||||
|
collection settings
|
||||||
|
{
|
||||||
|
{
|
||||||
|
_id: (string)property_name,
|
||||||
|
value: object
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
collection users
|
||||||
|
{
|
||||||
|
{
|
||||||
|
_id: (string)Username,
|
||||||
|
passwd: (md5)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
collection templates
|
||||||
|
{
|
||||||
|
{
|
||||||
|
_id: (MongoID),
|
||||||
|
name: (string),
|
||||||
|
theme: (string),
|
||||||
|
type: (int) enum { page, include, iter },
|
||||||
|
notes: (text),
|
||||||
|
body: (Twig code)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
collection versions
|
||||||
|
{
|
||||||
|
{
|
||||||
|
_id: (MongoID),
|
||||||
|
page: (MongoID)pages._id,
|
||||||
|
version: (int), /* yes, it's a copy of body.version. we know. */
|
||||||
|
body: embed pages.body
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
collection pages
|
||||||
|
{
|
||||||
|
{
|
||||||
|
_id: (MongoID),
|
||||||
|
parent: ObjectID,
|
||||||
|
path: (string),
|
||||||
|
template: (string)templatename,
|
||||||
|
order: (int),
|
||||||
|
display: (bool),
|
||||||
|
disable: (bool),
|
||||||
|
access: { /* possibly not implemented */
|
||||||
|
owner: users._id,
|
||||||
|
read_acl: { /* user's _ids, or '@group' */ },
|
||||||
|
write_acl: { /* same as read_acl */ },
|
||||||
|
},
|
||||||
|
body: {
|
||||||
|
title: (string),
|
||||||
|
author: users._id,
|
||||||
|
content: (text),
|
||||||
|
version: (int),
|
||||||
|
uattr: /* user defined attributes */ {
|
||||||
|
blahblahblah: blah
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
README
Normal file
2
README
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
purpleInk. (C)2011 Dan Ponte.
|
||||||
|
This is a CMS written in PHP that uses MongoDB. It also uses Twig as its templating engine.
|
59
index.php
Normal file
59
index.php
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* PurpleInk - index.php - main index file
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011, Dan Ponte
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of the author nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
$st_time = microtime(true);
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
include 'src/purpleink.php';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
$pink = new PurpleInk('theamigan');
|
||||||
|
|
||||||
|
$pink->rend(isset($_REQUEST['path']) ? $_REQUEST['path'] : '/');
|
||||||
|
} catch(Exception $e) {
|
||||||
|
echo '<pre>';
|
||||||
|
die(print_r($e, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
$e_time = microtime(true);
|
||||||
|
|
||||||
|
$runtime = $e_time - $st_time;
|
||||||
|
|
||||||
|
header('X-RunTime: ' . round($runtime, 7) . 's');
|
||||||
|
ob_end_flush();
|
||||||
|
|
||||||
|
?>
|
10
src/adm.php
Normal file
10
src/adm.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once 'purpleink.php';
|
||||||
|
require_once 'c.AdminView.php';
|
||||||
|
|
||||||
|
|
||||||
|
$pink = new PurpleInk('theamigan');
|
||||||
|
$a = new AdminView;
|
||||||
|
$a->outputTreeUL();
|
||||||
|
?>
|
65
src/c.AdminView.php
Normal file
65
src/c.AdminView.php
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* PurpleInk - c.AdminView.php - admin view
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011, Dan Ponte
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of the author nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
Class AdminView
|
||||||
|
{
|
||||||
|
private $DB;
|
||||||
|
private $tree;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->DB = DBConnectorFactory::create();
|
||||||
|
$this->tree = TreeGrove::create();
|
||||||
|
$this->tree->makeTree();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private function ulRec($t)
|
||||||
|
{
|
||||||
|
echo "<ul class='treetop'> p='" . $t->tree->path . "'\n";
|
||||||
|
foreach($t->tree->children as $i) {
|
||||||
|
echo "<li>\n";
|
||||||
|
$this->ulRec($i);
|
||||||
|
echo "</li>\n";
|
||||||
|
}
|
||||||
|
echo "</ul>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function outputTreeUL()
|
||||||
|
{
|
||||||
|
$this->ulRec($this->tree);
|
||||||
|
}
|
||||||
|
}
|
118
src/c.DB.php
Normal file
118
src/c.DB.php
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* PurpleInk - c.DB.php - database interface
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011, Dan Ponte
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of the author nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
interface iDBConnector
|
||||||
|
{
|
||||||
|
public function selectSite($siteID);
|
||||||
|
public function getPageByPath($path);
|
||||||
|
public function getTplByName($name);
|
||||||
|
public function getPagesByParent($id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class DBConnector implements iDBConnector
|
||||||
|
{
|
||||||
|
private $m; /* MongoDB handle */
|
||||||
|
private $master, $site; /* Databases */
|
||||||
|
private $useMaster;
|
||||||
|
private $siteSelected, $mast_db_name;
|
||||||
|
private $cSettings, $cUsers, $cTemplates, $cVersions, $cPages; /* site collections */
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$this->m = new Mongo;
|
||||||
|
} catch (MongoConnectionException $e) {
|
||||||
|
die('Error connecting to DB');
|
||||||
|
}
|
||||||
|
$this->mast_db_name = Config::get('mast_db_name');
|
||||||
|
$mast_db_name = $this->mast_db_name;
|
||||||
|
$this->master = $this->m->$mast_db_name;
|
||||||
|
$this->siteSelected = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function selectSite($siteID)
|
||||||
|
{
|
||||||
|
$site = $this->master->sites->findOne(array('_id' => $siteID));
|
||||||
|
if(count($site) === 0) {
|
||||||
|
throw new Exception('No such site');
|
||||||
|
}
|
||||||
|
$site = $site['dbname'];
|
||||||
|
$site = $this->m->$site;
|
||||||
|
$this->site = $site;
|
||||||
|
$this->siteSelected = true;
|
||||||
|
$this->cSettings = $this->site->settings;
|
||||||
|
$this->cUsers = $this->site->users;
|
||||||
|
$this->cTemplates = $this->site->templates;
|
||||||
|
$this->cVersions = $this->site->versions;
|
||||||
|
$this->cPages = $this->site->pages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTplByName($name)
|
||||||
|
{
|
||||||
|
$rt = $this->cTemplates->findOne(array('name' => $name));
|
||||||
|
return $rt['body'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPageByPath($path)
|
||||||
|
{
|
||||||
|
if(!$this->siteSelected) {
|
||||||
|
throw new Exception('No site selected');
|
||||||
|
}
|
||||||
|
|
||||||
|
return ar2ob($this->cPages->findOne(array('path' => $path)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPagesByParent($parent)
|
||||||
|
{
|
||||||
|
return $this->cPages->find(array('parent' => new MongoID($parent)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class DBConnectorFactory
|
||||||
|
{
|
||||||
|
private static $_inst;
|
||||||
|
|
||||||
|
public static function create()
|
||||||
|
{
|
||||||
|
if(!isset(self::$_inst)) {
|
||||||
|
self::$_inst = new DBConnector;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$_inst;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
65
src/c.Page.php
Normal file
65
src/c.Page.php
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* PurpleInk - c.Page.php - Page class
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011, Dan Ponte
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of the author nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
class Page
|
||||||
|
{
|
||||||
|
private $DB;
|
||||||
|
private $body;
|
||||||
|
private $templ;
|
||||||
|
private $T;
|
||||||
|
|
||||||
|
public function __construct($path, Twig_Environment $twig = NULL)
|
||||||
|
{
|
||||||
|
$this->DB = DBConnectorFactory::create();
|
||||||
|
if(is_string($path)) {
|
||||||
|
$pd = $this->DB->getPageByPath($path);
|
||||||
|
} else {
|
||||||
|
$pd = $path; /* load directly from object */
|
||||||
|
}
|
||||||
|
$this->body = $pd->body;
|
||||||
|
if($twig === NULL) {
|
||||||
|
$twig = TwigFact::create();
|
||||||
|
}
|
||||||
|
$this->T = $twig;
|
||||||
|
$this->templ = $pd->template;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
echo $this->T->render($this->templ, array('Page' => $this->body));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
114
src/c.PurpleInk.php
Normal file
114
src/c.PurpleInk.php
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* PurpleInk - c.PurpleInk.php - main PurpleInk class
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011, Dan Ponte
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of the author nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
require_once 'c.DB.php';
|
||||||
|
require_once 'c.Page.php';
|
||||||
|
require_once 'c.Tree.php';
|
||||||
|
|
||||||
|
class Twig_Loader_PurpleInk implements Twig_LoaderInterface
|
||||||
|
{
|
||||||
|
private $DB;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->DB = DBConnectorFactory::create();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSource($name)
|
||||||
|
{
|
||||||
|
return $this->DB->getTplByName($name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCacheKey($name)
|
||||||
|
{
|
||||||
|
return $name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isFresh($name, $time)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class TwigFact
|
||||||
|
{
|
||||||
|
static public $_inst;
|
||||||
|
static public $_twl;
|
||||||
|
|
||||||
|
static public function create()
|
||||||
|
{
|
||||||
|
if(!isset(self::$_inst)) {
|
||||||
|
self::$_twl = new Twig_Loader_PurpleInk;
|
||||||
|
self::$_inst = new Twig_Environment(self::$_twl, array(
|
||||||
|
));
|
||||||
|
}
|
||||||
|
return self::$_inst;
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function getTwl()
|
||||||
|
{
|
||||||
|
if(!isset(self::$_twl)) {
|
||||||
|
self::create();
|
||||||
|
}
|
||||||
|
return self::$_twl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class PurpleInk
|
||||||
|
{
|
||||||
|
protected $DB;
|
||||||
|
protected $twLoad;
|
||||||
|
protected $T;
|
||||||
|
|
||||||
|
function __construct($site)
|
||||||
|
{
|
||||||
|
$this->DB = DBConnectorFactory::create();
|
||||||
|
$this->DB->selectSite($site);
|
||||||
|
$this->T = TwigFact::create();
|
||||||
|
$this->twLoad = TwigFact::getTwl();
|
||||||
|
}
|
||||||
|
|
||||||
|
function rend($path)
|
||||||
|
{
|
||||||
|
$page = new Page($path, $this->T);
|
||||||
|
$tr = TreeGrove::create();
|
||||||
|
$tr->makeTree();
|
||||||
|
$page->render();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
93
src/c.Tree.php
Normal file
93
src/c.Tree.php
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* PurpleInk - c.Tree.php - tree
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011, Dan Ponte
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of the author nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
Class Tree
|
||||||
|
{
|
||||||
|
private $DB;
|
||||||
|
public $tree;
|
||||||
|
private $byPath, $byID;
|
||||||
|
|
||||||
|
public function recTree($id, &$tree)
|
||||||
|
{
|
||||||
|
$this->byPath[$tree->path] = &$tree;
|
||||||
|
$this->byID[$id] = &$tree;
|
||||||
|
$pwp = $this->DB->getPagesByParent($id);
|
||||||
|
if($pwp->count() > 0) {
|
||||||
|
foreach($pwp as $c) {
|
||||||
|
$id = (string)$c['_id'];
|
||||||
|
$tree->children[$id] = new Page(ar2ob($c));
|
||||||
|
$node = &$tree->children[$id];
|
||||||
|
$node->parent = &$tree;
|
||||||
|
$node->path = $c['path'];
|
||||||
|
$this->recTree($id, $node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function makeTree()
|
||||||
|
{
|
||||||
|
$pgs = $this->DB->getPageByPath('/');
|
||||||
|
$this->tree = (Object) array(
|
||||||
|
'path' => '/',
|
||||||
|
'id' => (string)$pgs->_id,
|
||||||
|
'children' => array()
|
||||||
|
);
|
||||||
|
$this->recTree((string)$pgs->_id, $this->tree);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->DB = DBConnectorFactory::create();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class TreeGrove
|
||||||
|
{
|
||||||
|
private static $_inst;
|
||||||
|
|
||||||
|
public static function create()
|
||||||
|
{
|
||||||
|
if(!isset(self::$_inst)) {
|
||||||
|
self::$_inst = new Tree;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self::$_inst;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
60
src/purpleink.php
Normal file
60
src/purpleink.php
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* PurpleInk - purpleink.php - main PurpleInk include and configuration
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011, Dan Ponte
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of the author nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Config
|
||||||
|
{
|
||||||
|
static private $config;
|
||||||
|
|
||||||
|
static public function setvars()
|
||||||
|
{
|
||||||
|
self::$config = Array(
|
||||||
|
'mast_db_name' => 'purp_master'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function get($t)
|
||||||
|
{
|
||||||
|
return self::$config[$t];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Config::setvars();
|
||||||
|
|
||||||
|
require_once 'Twig/Autoloader.php';
|
||||||
|
Twig_Autoloader::register();
|
||||||
|
|
||||||
|
require_once 'util.php';
|
||||||
|
|
||||||
|
require_once 'c.PurpleInk.php';
|
61
src/util.php
Normal file
61
src/util.php
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* PurpleInk - util - util functions
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011, Dan Ponte
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of the author nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||||
|
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function cbReduceNotArray($a, $b)
|
||||||
|
{
|
||||||
|
return ($b === $a ? $a + 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isVect($arr)
|
||||||
|
{
|
||||||
|
return (0 !== array_reduce(array_keys($arr), 'cbReduceNotArray', 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
function ar2ob($ar)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
$o = new stdClass;
|
||||||
|
foreach($ar as $k => $v) {
|
||||||
|
if(is_array($v) && !isVect($v)) {
|
||||||
|
$o->$k = ar2ob($v);
|
||||||
|
} else {
|
||||||
|
$o->$k = $v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $o;
|
||||||
|
*/
|
||||||
|
return (Object)$ar;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user