Major redesign of rendering pipeline that separates pages saved with MCE from pages saved with the plaintext editor (full description in long commit message)
- Pages are now stored with an extra metadata field called page_format which is "wikitext" or "xhtml"
- New $flags parameter + RENDER_* constants added that control RenderMan::render() behavior
- Several other changes:
* Added a sprite API for Javascript and made editor use sprites when possible
* Removed a number of config options from the default install schema, replaced with second parameter to getConfig() calls
* MessageBox in editor mostly replaced with miniPrompt
* A few bugfixes related to password changes (registration didn't even work)
* Rewrote the bitfield compression algorithm used to serialize allowed MIME types
* Fixed some typos in language files and strings
* Fixed a Text_Wiki bug in Heading parser
<?php
/*
* Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
* Version 1.1.6 (Caoineag beta 1)
* Copyright (C) 2006-2008 Dan Fuhry
*
* This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
*/
/**
* Framework for caching arbitrary data around the site.
* @package Enano
* @subpackage Core
* @author Dan Fuhry <dan@enanocms.org>
* @license GNU General Public License
*/
class CacheManager
{
/**
* Fetch a cached piece of data.
* @param string Cache ID. The timestamp is checked automatically.
*/
public function fetch($cache_id)
{
if ( !preg_match('/^[a-z0-9_]+$/', $cache_id) )
{
throw new Exception('Cache ID must be letters, numbers, and underscores.');
}
$cache_file = ENANO_ROOT . "/cache/cache_$cache_id.php";
if ( file_exists($cache_file) )
{
require($cache_file);
if ( isset($_cache_data) && isset($_cache_ttl) && isset($_cache_timestamp) )
{
$cache_expire = $_cache_timestamp + ( 60 * $_cache_ttl);
if ( $cache_expire >= time() || $_cache_ttl === -1 )
{
return $_cache_data;
}
}
}
return false;
}
/**
* Stores an array by var_export()ing it and saving it to disk.
* @param string Cache ID - human readable name for this store (letters, numbers, underscores)
* @param array Data to store
* @param int TTL for the cached array, in minutes. Defaults to 20. If set to -1, caches indefinitely.
* @return bool True on success, false on failure
*/
public function store($cache_id, $data, $ttl = 20)
{
if ( getConfig('cache_thumbs') != '1' )
{
// caching disabled
return false;
}
if ( !preg_match('/^[a-z0-9_]+$/', $cache_id) )
{
throw new Exception('Cache ID must be letters, numbers, and underscores.');
}
if ( !is_int($ttl) )
{
throw new Exception('TTL must be an integer');
}
$cache_file = ENANO_ROOT . "/cache/cache_$cache_id.php";
if ( file_exists($cache_file) )
{
@unlink($cache_file);
}
$fh = @fopen($cache_file, 'w');
if ( !$fh )
{
throw new Exception('Failed to open file for writing.');
}
$exported = Language::var_export_string($data);
$now = time();
$content = <<<EOF
<?php
/**
* Automatically generated cache file.
* Do not edit this file as it will expire and be overwritten $ttl minutes from its creation.
*/
\$_cache_ttl = $ttl;
\$_cache_timestamp = $now;
\$_cache_data = $exported;
EOF;
fwrite($fh, $content);
fclose($fh);
return true;
}
/**
* Deletes a cached item.
* @param string Cache ID.
* @return bool true on success or if item doesn't exist, false on failure
*/
public function purge($cache_id)
{
if ( !preg_match('/^[a-z0-9_]+$/', $cache_id) )
{
throw new Exception('Cache ID must be letters, numbers, and underscores.');
}
$cache_file = ENANO_ROOT . "/cache/cache_$cache_id.php";
if ( file_exists($cache_file) )
{
if ( unlink($cache_file) )
{
return true;
}
return false;
}
return true;
}
}