09 Wiki Mod

Started by Mindless, July 26, 2012, 10:14:13 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Hyperion (noobKID)

Thanks alot.
working smoothly ;)...

Mindless

Credits to the original coder Paaskehare
Xhtml valid

Think i checked the security over fairly but doesnt mean i havint missed anything so please ensure you check yourself before using it.

Code (sql) Select
CREATE TABLE `wiki` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(100) character set latin1 NOT NULL,
  `body` longtext character set latin1,
  `userid` int(10) unsigned default '0',
  `time` int(11) NOT NULL,
  `lastedit` int(10) unsigned default NULL,
  `lastedituser` int(10) unsigned default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Code (sql) Select
INSERT INTO `wiki` VALUES (1, 'index', '[align=center][size=6]Welcome to the [b]Wiki[/b][/size][/align]', 0, 1228076412, 1281610709, 1);

Save and upload and link wiki.php :

<?php
require_once("include/bittorrent.php");
require_once(
"include/user_functions.php");
require_once(
"include/html_functions.php");
require_once(
"include/bbcode_functions.php");
dbconn();
loggedinorreturn();

$lang array_mergeload_language('global') );

$HTMLOUT="";

global 
$CURUSER;

function 
newmsg($heading ''$text ''$div 'success'$htmlstrip false)
{
    if (
$htmlstrip) {
        
$heading htmlspecialchars(trim($heading));
        
$text htmlspecialchars(trim($text));
    }
    
$htmlout='';
    
$htmlout.="<table class=\"main\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td class=\"embedded\">\n";
    
$htmlout.="<div class=\"$div\">" . ($heading "<b>$heading</b><br />" "") . "$text</div></td></tr></table>\n";
    return 
$htmlout;
}

function 
newerr($heading ''$text ''$die true$div 'error'$htmlstrip false)
{
    
$htmlout='';
    
$htmlout.= newmsg($heading$text$div$htmlstrip);
    print 
stdhead() .$htmlout stdfoot();
    if (
$die)
    die;
}

function 
datetimetransform($input// OUTPUTS SERVERTIME REPLACE THIS FUNCTION IF YOU HAVE USER DEFINED TIMEZONES
{
    
$todayh getdate($input);

    if (
$todayh["seconds"] < 10) {
        
$todayh["seconds"] = "0" $todayh["seconds"] . "";
    }
    if (
$todayh["minutes"] < 10) {
        
$todayh["minutes"] = "0" $todayh["minutes"] . "";
    }
    if (
$todayh["hours"] < 10) {
        
$todayh["hours"] = "0" $todayh["hours"] . "";
    }
    if (
$todayh["mday"] < 10) {
        
$todayh["mday"] = "0" $todayh["mday"] . "";
    }
    if (
$todayh["mon"] < 10) {
        
$todayh["mon"] = "0" $todayh["mon"] . "";
    }
    
$sec $todayh['seconds'];
    
$min $todayh['minutes'];
    
$hours $todayh['hours'];
    
$d $todayh['mday'];
    
$m $todayh['mon'];
    
$y $todayh['year'];

    
$input "$d-$m-$y $hours:$min:$sec";
    return 
$input;
}

function 
navmenu()
{
    
$ret '<div id="wiki-navigation" align="center"><div><a href="wiki.php">Index</a> - <a href="wiki.php?action=add">Add</a></div><div align="right"><form action="wiki.php" method="post">';
    
$ret .= "\n" '<a href="wiki.php?action=sort&amp;letter=a">A</a>';
    for(
$i 0;$i 25;$i++) {
        
$ret .= "\n- " '<a href="wiki.php?action=sort&amp;letter=' chr($i 98) . '">' chr($i 66) . '</a>';
    }
    
$ret .= "\n" '<input type="text" name="article" /> <input type="submit" value="Search" name="wiki" /></form></div></div>';
    return 
$ret;
}

function 
articlereplace($input)
{
    
$input str_replace(" ""+"$input);
    return 
$input;
}

function 
wikisearch($input)
{
    return 
str_replace(array("%""_"), array("\\%""\\_"), mysql_real_escape_string($input));
}

function 
wikireplace($input)
{
    return 
preg_replace(array('/\[\[(.+?)\]\]/i''/\=\=\ (.+?)\ \=\=/i'), array('<a href="wiki.php?action=article&name=$1">$1</a>''<div id="$1" style="border-bottom: 1px solid grey; font-weight: bold; width: 100%; font-size: 14px;">$1</div>'), $input);
}

function 
wikimenu()
{
    
$res2 mysql_query("SELECT name FROM wiki ORDER BY id DESC LIMIT 1");
    
$latest mysql_fetch_assoc($res2);
    
$latestarticle articlereplace($latest["name"]);
    
$ret "<div id=\"wiki-content-right\">
<div id=\"details\">
<ul>
<li><b>Permissions:</b></li></ul>
Read: User<br />
Write: User<br />
Edit: Moderator


<ul><li><b>Latest Article:</b></li></ul>
<a href=\"wiki.php?action=article&amp;name=
$latestarticle\">".htmlspecialchars($latest['name'])."</a>


<ul><li><b>Version:</b> 0.01B</li></ul>
<ul><li><b>Author:</b> <a href=\"http://paaskehare.dk\" target=\"_blank\">Paaskehare</a></li>
</ul>
</div>
</div>
"
;
    return 
$ret;
}

if (
$_SERVER["REQUEST_METHOD"] == "POST") {
    if (isset(
$_POST["article-add"])) {
        
$name sqlesc($_POST["article-name"]);
        
$body sqlesc($_POST["article-body"]);
        
mysql_query("INSERT INTO `wiki` ( `name` , `body` , `userid`, `time` )
VALUES (
$name$body, '" $CURUSER["id"] . "', '" TIME_NOW "')") or sqlerr(__FILE____LINE__);
        
$HTMLOUT .="<meta http-equiv=\"refresh\" content=\"0; url=wiki.php?action=article&name=" $_POST["article-name"] . "\">";
    }
    if (isset(
$_POST["article-edit"])) {
        
$id $_POST["article-id"];
        
$name sqlesc($_POST["article-name"]);
        
$body sqlesc($_POST["article-body"]);
        
mysql_query("UPDATE wiki SET name = $name, body = $body, lastedit = '" TIME_NOW "', lastedituser = '" $CURUSER["id"] . "' WHERE id = $id");
        
$HTMLOUT .="<meta http-equiv=\"refresh\" content=\"0; url=wiki.php?action=article&name=" $_POST["article-name"] . "\">";
    }
    if (isset(
$_POST["wiki"])) {
        
$wikisearch articlereplace($_POST["article"]);
        
$HTMLOUT .="<meta http-equiv=\"refresh\" content=\"0; url=wiki.php?action=article&name=$wikisearch\">";
    }
}

$HTMLOUT .= begin_main_frame();

if (isset(
$_GET["action"])) {
    
$action htmlspecialchars($_GET["action"]);
    if (isset(
$_GET["name"])) {
        
$mode "name";
        
$name htmlspecialchars($_GET["name"]);
    }
    if (isset(
$_GET["id"])) {
        
$mode "id";
        
$id htmlspecialchars($_GET["id"]);
        if (!
is_valid_id($id))
        die();
        }
    
if (isset(
$_GET["letter"]))
        
$letter htmlspecialchars($_GET["letter"]);
    
// IF NOTHING IS SET, SHOW INDEX
} else {
    
$action "article";
    
$mode "name";
    
$name "index";
}

if (
$action == "article") {
    
$res mysql_query("SELECT * FROM wiki WHERE $mode = '" . ($mode == "name" "$name"$id") . "'");
    if (
mysql_num_rows($res) == 1) {
        
$HTMLOUT .= navmenu();
        
$edit='';
        
$HTMLOUT .="<div id=\"wiki-container\">
  <div id=\"wiki-row\">"
;
        while (
$wiki mysql_fetch_array($res)) {
            if (
$wiki['lastedit']) {
                
$check mysql_query("SELECT username FROM users WHERE id = $wiki[lastedituser]");
                
$checkit mysql_fetch_assoc($check);
                
$edit "<i>Last Updated by: <a href=\"userdetails.php?id=$wiki[userid]\">$checkit[username]</a> - " datetimetransform($wiki['lastedit']) . "</i>";
            }
            
$check mysql_query("SELECT username FROM users WHERE id = $wiki[userid]");
            
$author mysql_fetch_assoc($check);
            
$HTMLOUT .="
<div id=\"wiki-content-left\" align=\"right\">
<div id=\"name\"><b><a href=\"wiki.php?action=article&amp;name=
$wiki[name]\">$wiki[name]</a></b></div>
<div id=\"content\">" 
. ($wiki['userid'] > "<font style=\"color: grey; font-size: 9px;\"><i>Article added by <a href=\"userdetails.php?id=$wiki[userid]\"><b>$author[username]</b></a></i></font><br /><br />" "") . wikireplace(format_comment($wiki["body"])) . "";
            
$HTMLOUT .="<div align=\"right\">" . ($edit "<font style=\"color: grey; font-size: 9px;\">$edit</font>" "") . ($CURUSER['class'] >= UC_MODERATOR || $CURUSER["id"] == $wiki["userid"] ? " - <a href=\"wiki.php?action=edit&amp;id=$wiki[id]\">Edit</a>" "") . "</div>";
            
$HTMLOUT .="</div></div>";
        }

        
$HTMLOUT .= wikimenu();

        
$HTMLOUT .="</div>";
        
$HTMLOUT .="</div>";
    } else {
        
$search mysql_query("SELECT * FROM wiki WHERE name LIKE '%" wikisearch($name) . "%'");
        if (
mysql_num_rows($search) > 0) {
            
$HTMLOUT .="Search results for: <b>".htmlspecialchars($name)."</b>";
            while (
$wiki mysql_fetch_array($search)) {
                if (
$wiki["userid"] !== 0)
                    
$wikiname mysql_fetch_assoc(mysql_query("SELECT username FROM users WHERE id = $wiki[userid]"));
                
$HTMLOUT .="
<div class=\"wiki-search\">
<b><a href=\"wiki.php?action=article&amp;name=" 
articlereplace($wiki["name"]) . "\">$wiki[name]</a></b> Added by: <a href=\"userdetails.php?id=$wiki[userid]\">$wikiname[username]</a></div>";
            }
        } else {
            
$HTMLOUT .= newerr("Error""No article found.");
        }
    }
}
$wiki=0;
if (
$action == "add") {
    
$HTMLOUT .= navmenu();
     
    
$HTMLOUT .="<div id=\"wiki-container\">
  <div id=\"wiki-row\">"
;
     
$HTMLOUT .="
<div id=\"wiki-content-left\" align=\"right\">
<form method=\"post\" action=\"wiki.php\">
<div><input type=\"text\" name=\"article-name\" id=\"name\" /></div>
<div id=\"content-add\"><textarea name=\"article-body\" rows=\"70\" cols=\"10\" id=\"body\">
$wiki[body]</textarea>
<div align=\"center\"><input type=\"submit\" name=\"article-add\" value=\"OK\" /></div>
</div></form></div>"
;

    
$HTMLOUT .= wikimenu();

    
$HTMLOUT .="</div>";
    
$HTMLOUT .="</div>";
}

if (
$action == "edit") {
    
$res mysql_query("SELECT * FROM wiki WHERE id = $id");
    
$rescheck mysql_query("SELECT userid FROM wiki WHERE id = $id");

    
$wikicheck mysql_fetch_assoc($rescheck);
    if ((
$CURUSER['class'] >= UC_MODERATOR) OR ($CURUSER["id"] == $wikicheck["userid"])) {
        
$HTMLOUT .= navmenu();

        
$HTMLOUT .="<div id=\"wiki-container\">
  <div id=\"wiki-row\">"
;
        while (
$wiki mysql_fetch_array($res)) {
           
$HTMLOUT .= "
<div id=\"wiki-content-left\" align=\"right\">
<form method=\"post\" action=\"wiki.php\">
<div><input type=\"hidden\" name=\"article-id\" value=\"
$wiki[id]\" />
<input type=\"text\" name=\"article-name\" id=\"name\" value=\"
$wiki[name]\" /></div>
<div id=\"content-add\"><table width=\"100%\" style=\"height: 100%;\" id=\"wikiedit\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td><textarea name=\"article-body\" rows=\"70\" cols=\"10\" id=\"body\">
$wiki[body]</textarea>
<div align=\"center\"><input type=\"submit\" name=\"article-edit\" value=\"Edit\" /></div></td></tr></table>"
;
           
$HTMLOUT .="</div></form></div>";
        }

        
$HTMLOUT .= wikimenu();

        
$HTMLOUT .="</div>";
        
$HTMLOUT .="</div>";
    } else
        
$HTMLOUT .= newerr("Error""Access Denied");
}

if (
$action == "sort") {
    
$sortres mysql_query("SELECT * FROM wiki WHERE name LIKE '$letter%' ORDER BY name");
    if (
mysql_num_rows($sortres) > 0) {
        
$HTMLOUT .= navmenu();
        
$HTMLOUT .="Articles starting with the letter <b>".htmlspecialchars($letter)."</b>";
        while (
$wiki mysql_fetch_array($sortres)) {
            if (
$wiki["userid"] !== 0)
                
$wikiname mysql_fetch_assoc(mysql_query("SELECT username FROM users WHERE id = $wiki[userid]"));
           
$HTMLOUT .= "
<div class=\"wiki-search\">
<b><a href=\"wiki.php?action=article&amp;name=" 
articlereplace($wiki["name"]) . "\">$wiki[name]</a></b> Added by: <a href=\"userdetails.php?id=$wiki[userid]\">$wikiname[username]</a></div>";
        }
    } else {
        
$HTMLOUT .= navmenu();
        
$HTMLOUT .= newerr("Error""No articles starting with letter <b>$letter</b> found.");
    }
}
$HTMLOUT .= end_main_frame();
print 
stdhead('Site Wiki') . $HTMLOUT stdfoot();
?>


Add to css files :

div#wiki-container {
display: table;
width: 100%;
}

div#wiki-row {
display: table-row;
}

div#wiki-navigation {
margin: 2px;
padding: 2px;
border: 0px solid #e2e2e2;
background-color: #3a3a3a;
}

div#wiki-content-left div#content-add {
text-align: center;
}

div#wiki-content-left textarea#body {
width: 90%;
height: 300px;
}

div#wiki-content-left {
display: table-cell;
}

div#wiki-content-right {
display: table-cell;
width: 250px;
padding-left: 10px;
}

div#wiki-content-left div#name, div#content, div#content-add {
margin: 2px;
padding: 2px;
border: 0px solid #e2e2e2;
background-color: #3a3a3a;
}

div#wiki-content-left div#name {
width: 80%;
text-align: center;
font-size: 18px;
}

div#wiki-content-left div#content, div#content-add {
width: 80%;
text-align: left;
}

div#wiki-content-right div#search, div#details {
margin: 2px;
padding: 2px;
border: 0px solid #e2e2e2;
background-color: #3a3a3a;
}

div#wiki-content-right div#search, div#details {
width: 250px;
}

div.wiki-search {
margin: 2px;
padding: 2px;
border: 0px solid #e2e2e2;
background-color: #3a3a3a;
}