Code:<?php // Licence : GPL
/**
* Guiki as PHP-Nuke module
* A simple php wiki in one-page and a crossplatform WYSIWYG editor
*
*/
if (!eregi("modules.php", $_SERVER['PHP_SELF'])) {
die ("You can't access this file directly...");
}
require_once("mainfile.php");
$module_name = basename(dirname(__FILE__));
$index = 1;
//get_lang($module_name); // no languages yet
$pagetitle = "$module_name";
global $prefix;
$prefix_guiki = $prefix."_guiki";
include("modules/$module_name/config.php"); // Get user set variables
$TPLT["EDIT"] = "$TEMPLATE/edit.html"; // Set edit template
$TPLT["SHOW"] = "$TEMPLATE/show.html"; // Set show template
$TPLT["SEARCH"] = "$TEMPLATE/show.html"; // Set search template
$TPLT["INDEX"] = "$TEMPLATE/show.html"; // Set index template
$CONTENT = $HTTP_POST_VARS["CONTENT"]; // Get content from edit page
$SEARCH = $HTTP_POST_VARS["SEARCH"]; // Get search term
$MODE = $HTTP_GET_VARS["MODE"]; // Get mode
$DOCPOST = $HTTP_POST_VARS["docpost"]; // Testing out new editor delete me
$PAGE = $HTTP_GET_VARS["PAGE"]; // Get page name
$CONTENT = preg_replace("/<\?/","",$CONTENT); // No PHP uploads
$SEARCH = checkVars($SEARCH); // No special chars
$PAGE = checkVars($PAGE); // No special chars
$MODE = checkVars($MODE); // No special chars
if (! $MODE) {$MODE = "SHOW";} // Set default mode
if (! $PAGE) {$PAGE = $HOME;} // Set default page
//include("header.php");
// override head for MODE=EDIT
function head() {
global $slogan, $sitename, $banners, $nukeurl, $Version_Num, $artpage, $topic, $hlpfile, $user, $hr, $theme, $cookie, $bgcolor1, $bgcolor2, $bgcolor3, $bgcolor4, $textcolor1, $textcolor2, $forumpage, $adminpage, $userpage, $pagetitle;
global $MODE, $PAGE, $TEMPLATE;
$ThemeSel = get_theme();
include("themes/$ThemeSel/theme.php");
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
echo "<html>\n";
echo "<head>\n";
echo "<title>$sitename: $pagetitle - $MODE Page $PAGE</title>\n";
include("includes/meta.php");
include("includes/javascript.php");
if (file_exists("themes/$ThemeSel/images/favicon.ico")) {
echo "<link REL=\"shortcut icon\" HREF=\"themes/$ThemeSel/images/favicon.ico\" TYPE=\"image/x-icon\">\n";
}
echo "<LINK REL=\"StyleSheet\" HREF=\"themes/$ThemeSel/style/style.css\" TYPE=\"text/css\">\n\n\n";
include("includes/my_header.php");
echo "\n\n\n</head>\n\n";
themeheader();
}
online();
head();
include("includes/counter.php");
global $home;
if ($home == 1) {
message_box();
blocks(Center);
}
title("$sitename: $pagetitle - $MODE Page $PAGE");
if( $CONTENT ) // Check to see it there is content
if (validate($USER,$PASS)) // Make sure they are logged in
savePage($PAGE,$CONTENT); // Save the data to the database
if( $DOCPOST ) // Check to see it there is content
if (validate($USER,$PASS)) // Make sure they are logged in
savePage($PAGE,$DOCPOST); // Save the data to the database
if (! page_exists($PAGE)) // Check if $PAGE is in database
if ($MODE != "INDEX"&&$MODE != "SEARCH")// Make sure they are not searching or indexing
$MODE = "EDIT"; // Go into edit mode
if ($MODE == "EDIT"||$MODE == "DELETE") // If $MODE is edit or delete
if (! validate($USER,$PASS)) // Challenge for user and password
$MODE = "SHOW"; // Change to show if they dont know login
if ($MODE == "DELETE"){ // If mode is delete (AUTH done above)
deletepage($PAGE); // Delete the page
$PAGE = "$HOME"; // Set $PAGE to default
$MODE = "SHOW"; // Set $MODE to show
}
OpenTable();
template($MODE,$PAGE,$DATA,$TPLT[$MODE],$SEARCH); // Make replacements
CloseTable();
include("footer.php");
//die();
/*
** FUNCTIONS
*/
function template($MODE,$PAGE,$DATA,$TEMPLATE,$SEARCH){
$OUTPUT = implode( "", file($TEMPLATE) );
if (page_exists($PAGE)){
$CONTENT = stripslashes(getpage($PAGE));
$MODIFIED = "Last Modified at ".date("H:i:s F d Y",pagemtime($PAGE));
}
if ($MODE == "SEARCH")
$CONTENT = findPage($SEARCH);
if ($MODE == "INDEX")
$CONTENT = indexPage();
$OUTPUT = str_replace("<!--MODIFIED-->" ,$MODIFIED ,$OUTPUT);
$OUTPUT = str_replace("<!--REVERT-->" ,showRevertLink() ,$OUTPUT);
$OUTPUT = str_replace("<!--CANCEL-->" ,showCancelLink() ,$OUTPUT);
$OUTPUT = str_replace("<!--EDIT-->" ,showEditLink() ,$OUTPUT);
$OUTPUT = str_replace("<!--INDEX-->" ,showIndexLink() ,$OUTPUT);
$OUTPUT = str_replace("<!--DELETE-->" ,showDeleteLink() ,$OUTPUT);
$OUTPUT = str_replace("<!--PAGE-->" ,$PAGE ,$OUTPUT);
$OUTPUT = str_replace("<!--CONTENT-->" ,$CONTENT ,$OUTPUT);
$OUTPUT = str_replace("<!--TEMPLATE-->" ,dirname($TEMPLATE) ,$OUTPUT);
if ($MODE == "SHOW")
//$OUTPUT = preg_replace("/a href=/i","a target='_blank' href="),$OUTPUT); // now working popup all external links
$OUTPUT = preg_replace("/\[\[(.*?)\]\]/",writeLink("\\1"),$OUTPUT);
writeHeaders();
echo $OUTPUT;
}
function checkVars($DATA){
return preg_replace("/[\`|\.|\\|\/|<\?]/","",$DATA);
}
function findPage($SEARCH) {
$output = "<ul>\n";
foreach (getDataFiles() as $page) {
if (!preg_match("/.gif|.jpg|.png/i",$page)){
$current = getpage($page);
if (preg_match("/$SEARCH/i",$current) )
$output .= "<li>".writeLink($page)."</li>\n";
}
}
$output .= "</ul>\n";
return $output;
}
function validate($user,$pass){
if ($USEAUTH and !is_user($user)) {
if ($_SERVER['PHP_AUTH_USER'] == $user)
if ($_SERVER['PHP_AUTH_PW'] == $pass)
return true;
header('WWW-Authenticate: Basic realm="Guiki"');
header('HTTP/1.0 401 Unauthorized');
return false;
} else {
return true;
}
}
function showCancelLink(){
global $module_name;
return "<a href=\"modules.php?name=$module_name&MODE=SHOW&PAGE=<!--PAGE-->\">Cancel</a>";
}
function showRevertLink(){
global $module_name;
return "<a href=\"modules.php?name=$module_name&MODE=EDIT&PAGE=<!--PAGE-->\">Revert</font>";
}
function showDeleteLink(){
global $module_name;
return "<a href=\"modules.php?name=$module_name&MODE=DELETE&PAGE=<!--PAGE-->\"><font color='red'>Delete</font></a>";
}
function showEditLink(){
global $module_name;
return "<a href=\"modules.php?name=$module_name&MODE=EDIT&PAGE=<!--PAGE-->\">Edit</a>";
}
function showIndexLink(){
global $module_name;
return "<a href=\"modules.php?name=$module_name&MODE=INDEX&PAGE=Index\">Index</a>";
}
function savePage($PAGE,$CONTENT) {
global $db, $prefix_guiki;
$PAGE = addslashes($PAGE);
$CONTENT = addslashes($CONTENT);
if(page_exists($PAGE)){
$db->sql_query("UPDATE $prefix_guiki SET content = '$CONTENT' WHERE page = '$PAGE'");
}else{
$db->sql_query("INSERT INTO $prefix_guiki VALUES('$PAGE','$CONTENT',0)");
}
//Update time
$time=time();
$db->sql_query("UPDATE $prefix_guiki SET modtime = $time WHERE page = '$PAGE'");
}
function writeHeaders() {
header ("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
}
function writeLink($PAGE) {
global $module_name;
if ( preg_match("/.gif|.jpg|.png/i",$PAGE)){ //not working mat
return "<img src=\"modules/$module_name/data/$PAGE\">"; //data is hardcoded this is BAD
} else {
return "<a href=\"modules.php?name=$module_name&MODE=SHOW&PAGE=$PAGE\">$PAGE</a>";
}
}
function getDataFiles() {
global $db, $prefix_guiki;
$pagelist = $db->sql_query("SELECT page FROM $prefix_guiki ORDER BY page");
//Convert to array
while( $pagename = $db->sql_fetchrow($pagelist)){
$allpages[] = $pagename['page'];
}
return $allpages;
}
function getpage($PAGE){
global $db, $prefix_guiki;
$PAGE = addslashes($PAGE);
$sqlrow = $db->sql_fetchrow($db->sql_query("SELECT content from $prefix_guiki WHERE page = '$PAGE'"));
return $sqlrow['content'];
}
function page_exists($PAGE){
global $db, $prefix_guiki;
$PAGE = addslashes($PAGE);
return $db->sql_numrows($db->sql_query("SELECT page from $prefix_guiki WHERE page = '$PAGE'"));
}
function deletepage($PAGE){
global $db, $prefix_guiki;
$PAGE = addslashes($PAGE);
return $db->sql_query("DELETE FROM $prefix_guiki WHERE page = '$PAGE'");
}
function pagemtime($PAGE){
global $db, $prefix_guiki;
$PAGE = addslashes($PAGE);
$sqlrow = $db->sql_fetchrow($db->sql_query("SELECT modtime from $prefix_guiki WHERE page = '$PAGE'"));
return $sqlrow['modtime'];
}
function indexpage(){
global $db, $prefix_guiki;
$output = "<ul>\n";
foreach(getDataFiles() as $page){
$output .= "<li>".writeLink($page)."</li>\n";
}
$output .= "</ul>\n";
return $output;
}
// Local Variables:
// mode: php
// tab-width: 8
// c-basic-offset: 4
// c-hanging-comment-ender-p: nil
// indent-tabs-mode: nil
// End:
?>
|