Profile
MAJ is an Open Source, PHP-based content management system (CMS) that can be deployed as a blog, bulletin or message board, Internet forum, and wiki. It is extensible via PHP panels and is HTML5 and CSS3 ready.
Git
This commit has been accessed 882 times via Git panel.

commit 3a601d6a71cb21aa8709feb2ee478092f7a58ddf
tree 69952975ef73711368a68556683efd219c3fe808
parent 9f377372890d1c5edfdfc88b069b73938ba6ab3d
author Engels Antonio <engels@majcms.org> 1277314205 +0800
committer Engels Antonio <engels@majcms.org> 1277314205 +0800

    maj-1.0-20081214-bb.zip

diff --git a/edit.php b/edit.php
index 444eb49..7caf5ca 100644
--- a/edit.php
+++ b/edit.php
@@ -884,11 +884,7 @@ if (isset($_FILES['file_input']) and !empty($_FILES['file_input'])) {
        }
 }
 
-$title_get_content = ucfirst($_POST['title_input']);
-$title_get_content = str_replace('<','&lt;',$title_get_content);
-$title_get_content = str_replace('>','&gt;',$title_get_content);
-
-if (file_exists("data/wiki.txt") and (($title_get_content != file_get_contents("data/items/{$_REQUEST['entry']}/title.txt")) or ($body_write_content != file_get_contents("data/items/{$_REQUEST['entry']}/body.txt")))) {
+if (file_exists("data/wiki.txt")) {
 
        if (!file_exists("data/items/{$_REQUEST['entry']}/wiki")) {
                mkdir("data/items/{$_REQUEST['entry']}/wiki");
@@ -911,14 +907,16 @@ if (file_exists("data/wiki.txt") and (($title_get_content != file_get_contents("
                mkdir("data/items/{$_REQUEST['entry']}/wiki/delta/$ddate");
        }
 
+       $new_body = fopen("data/items/{$_REQUEST['entry']}/wiki/delta/$ddate/body.txt","w");
+       fwrite($new_body,$body_write_content);
+       fclose($new_body);
 
-       $new = fopen("data/items/{$_REQUEST['entry']}/wiki/delta/$ddate/body.txt","w");
-       fwrite($new,$body_write_content);
-       fclose($new);
+       $new_title = fopen("data/items/{$_REQUEST['entry']}/wiki/delta/$ddate/title.txt","w");
+       fwrite($new_title,$title_write_content);
+       fclose($new_title);
 
        copy("data/items/{$_REQUEST['entry']}/body.txt","data/items/{$_REQUEST['entry']}/wiki/delta/$ddate/prev.txt");
        copy("data/items/{$_REQUEST['entry']}/date.txt","data/items/{$_REQUEST['entry']}/wiki/delta/$ddate/date.txt");
-       copy("data/items/{$_REQUEST['entry']}/title.txt","data/items/{$_REQUEST['entry']}/wiki/delta/$ddate/title.txt");
 
        if (file_exists("data/items/{$_REQUEST['entry']}/contrib.txt")) {
                copy("data/items/{$_REQUEST['entry']}/contrib.txt","data/items/{$_REQUEST['entry']}/wiki/delta/$ddate/contrib.txt");
diff --git a/rel.txt b/rel.txt
index eac09b3..ba2040b 100644
--- a/rel.txt
+++ b/rel.txt
@@ -1 +1 @@
-20081207
\ No newline at end of file
+20081214
\ No newline at end of file
diff --git a/wiki.php b/wiki.php
index 5fcbc71..aa6e506 100644
--- a/wiki.php
+++ b/wiki.php
@@ -1,95 +1,88 @@
 <?php
-
-session_start();
-
-header("Cache-control: private");
-
-error_reporting(E_ERROR);
-
-if (isset($_SESSION['logged_in']) and ($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT'])) {
-       header("Location: login.php");
-}
-
-if (get_magic_quotes_gpc()) {
-       function stripslashes_array($data) {
-               if (is_array($data)) {
-                       foreach ($data as $key => $value) {
-                               $data[$key] = stripslashes_array($value);
+       session_start();
+       header("Cache-control: private");
+       error_reporting(E_ERROR);
+       if (isset($_SESSION['logged_in']) and ($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']))
+       {
+               header("Location: login.php");
+       }
+       if (get_magic_quotes_gpc())
+       {
+               function stripslashes_array($data)
+               {
+                       if (is_array($data))
+                       {
+                               foreach ($data as $key => $value)
+                               {
+                                       $data[$key] = stripslashes_array($value);
+                               }
+                               return $data;
+                       }
+                       else
+                       {
+                               return stripslashes($data);
                        }
-                       return $data;
                }
-               else {
-                       return stripslashes($data);
+               $_REQUEST = stripslashes_array($_REQUEST);
+       }
+       $login_username = file_get_contents("data/username.txt");
+       if (!isset($_REQUEST['entry']))
+       {
+               exit();
+       }
+       if (!file_exists("data/items/{$_REQUEST['entry']}"))
+       {
+               exit();
+       }
+       if (!isset($_SESSION['logged_in']))
+       {
+               exit();
+       }
+       $do = 0;
+       if ($_SESSION['logged_in'] == $login_username)
+       {
+               $do = 1;
+       }
+       if (file_exists("data/members/active/{$_SESSION['logged_in']}/rw.txt") and file_exists("data/wiki.txt") and (file_exists("data/items/{$_REQUEST['entry']}/edit.txt") or (file_get_contents("data/items/{$_REQUEST['entry']}/author.txt") == $_SESSION['logged_in'])))
+       {
+               $do = 1;
+       }
+       if ($do == 0)
+       {
+               exit();
+       }
+       function rmdirr($recurse_dirname)
+       {
+               if (!file_exists($recurse_dirname))
+               {
+                       return false;
                }
+               if (is_file($recurse_dirname))
+               {
+                       return unlink($recurse_dirname);
+               }
+               $recurse_dir = dir($recurse_dirname);
+               while (false !== $recurse_entry = $recurse_dir->read())
+               {
+                       if ($recurse_entry == '.' || $recurse_entry == '..')
+                       {
+                               continue;
+                       }
+                       rmdirr("$recurse_dirname/$recurse_entry");
+               }
+               $recurse_dir->close();
+               return rmdir($recurse_dirname);
+       }
+       function entry2date($f_entry)
+       {
+               $f_entry_year = substr($f_entry, 0, 4);
+               $f_entry_month = substr($f_entry, 4, 2);
+               $f_entry_day = substr($f_entry, 6, 2);
+               $f_entry_hour = substr($f_entry, 8, 2);
+               $f_entry_min = substr($f_entry, 10, 2);
+               $f_entry_sec = substr($f_entry, 12, 2);
+               echo date("l, M j, Y, g:i A", mktime($f_entry_hour, $f_entry_min, $f_entry_sec, $f_entry_month, $f_entry_day, $f_entry_year));
        }
-       $_REQUEST = stripslashes_array($_REQUEST);
-}
-
-$login_username = file_get_contents("data/username.txt");
-
-if (!isset($_REQUEST['entry'])) {
-       exit();
-}
-
-if (!file_exists("data/items/{$_REQUEST['entry']}")) {
-       exit();
-}
-
-if (!isset($_SESSION['logged_in'])) {
-       exit();
-}
-
-$do = 0;
-
-if ($_SESSION['logged_in'] == $login_username) {
-       $do = 1;
-}
-
-
-if (file_exists("data/members/active/{$_SESSION['logged_in']}/rw.txt") and file_exists("data/wiki.txt") and (file_exists("data/items/{$_REQUEST['entry']}/edit.txt") or (file_get_contents("data/items/{$_REQUEST['entry']}/author.txt") == $_SESSION['logged_in']))) {
-       $do = 1;
-}
-
-if ($do == 0) {
-       exit();
-}
-
-function rmdirr($recurse_dirname) {
-
-    if (!file_exists($recurse_dirname)) {
-        return false;
-    }
-
-    if (is_file($recurse_dirname)) {
-        return unlink($recurse_dirname);
-    }
-
-    $recurse_dir = dir($recurse_dirname);
-    while (false !== $recurse_entry = $recurse_dir->read()) {
-
-        if ($recurse_entry == '.' || $recurse_entry == '..') {
-            continue;
-        }
-
-        rmdirr("$recurse_dirname/$recurse_entry");
-    }
-
-    $recurse_dir->close();
-    return rmdir($recurse_dirname);
-}
-
-function entry2date($f_entry) {
-
-       $f_entry_year = substr($f_entry,0,4);
-       $f_entry_month = substr($f_entry,4,2);
-       $f_entry_day = substr($f_entry,6,2);
-       $f_entry_hour = substr($f_entry,8,2);
-       $f_entry_min = substr($f_entry,10,2);
-       $f_entry_sec = substr($f_entry,12,2);
-
-       echo date("l, M j, Y, g:i A",mktime($f_entry_hour,$f_entry_min,$f_entry_sec,$f_entry_month,$f_entry_day,$f_entry_year));
-}
-
 ?>
 
 <title>Wiki</title>
@@ -223,102 +216,122 @@ del {
 </style>
 
 <?php
-
-$entry = $_REQUEST['entry'];
-
-if (isset($_REQUEST['del']) and !empty($_REQUEST['del']) and file_exists("data/items/$entry/wiki/delta/{$_REQUEST['del']}") and ($_SESSION['logged_in'] == file_get_contents("data/username.txt"))) {
-       rmdirr("data/items/$entry/wiki/delta/{$_REQUEST['del']}");
-}
-
-if (file_exists("data/items/$entry/wiki/delta")) {
-
-       if ($dh_delta = opendir("data/items/$entry/wiki/delta")) {
-
-               while (($entry_delta = readdir($dh_delta)) !== false) {
-
-                       if ($entry_delta != "." && $entry_delta != "..") {
-                               $show_delta[] = $entry_delta;
+       $entry = $_REQUEST['entry'];
+       if (isset($_REQUEST['del']) and !empty($_REQUEST['del']) and file_exists("data/items/$entry/wiki/delta/{$_REQUEST['del']}") and ($_SESSION['logged_in'] == file_get_contents("data/username.txt")))
+       {
+               rmdirr("data/items/$entry/wiki/delta/{$_REQUEST['del']}");
+       }
+       if (isset($_REQUEST['restore']) and !empty($_REQUEST['restore']) and file_exists("data/items/$entry/wiki/delta/{$_REQUEST['restore']}"))
+       {
+               if (file_exists("data/offset.txt"))
+               {
+                       $offset = file_get_contents("data/offset.txt");
+               }
+               else
+               {
+                       $offset = 0;
+               }
+               $ddate = date("YmdHis", time() + $offset);
+               if (!file_exists("data/items/$entry/wiki/delta/$ddate"))
+               {
+                       mkdir("data/items/$entry/wiki/delta/$ddate");
+                       copy("data/items/$entry/title.txt","data/items/$entry/wiki/delta/$ddate/title.txt");
+                       copy("data/items/$entry/body.txt","data/items/$entry/wiki/delta/$ddate/prev.txt");
+                       copy("data/items/$entry/wiki/delta/{$_REQUEST['restore']}/title.txt","data/items/$entry/title.txt");
+                       copy("data/items/$entry/wiki/delta/{$_REQUEST['restore']}/body.txt","data/items/$entry/body.txt");
+                       copy("data/items/$entry/body.txt","data/items/$entry/wiki/delta/$ddate/body.txt");
+                       if (file_exists("data/items/$entry/contrib.txt"))
+                       {
+                               copy("data/items/$entry/contrib.txt","data/items/$entry/wiki/delta/$ddate/contrib.txt");
                        }
+                       $editor_file = fopen("data/items/$entry/wiki/delta/$ddate/editor.txt","w");
+                       fwrite($editor_file,$_SESSION['logged_in']);
+                       fclose($editor_file);
                }
-               closedir($dh_delta);
        }
-       rsort($show_delta);
-       reset($show_delta);
-       $count_delta = count($show_delta);
-
-       if ($count_delta > 0) {
-
-               foreach ($show_delta as $item) {
-
-                       $title = file_get_contents("data/items/$entry/wiki/delta/$item/title.txt");
-                       $body = file_get_contents("data/items/$entry/wiki/delta/$item/body.txt");
-                       $author = file_get_contents("data/items/$entry/author.txt");
-                       $editor = file_get_contents("data/items/$entry/wiki/delta/$item/editor.txt");
-      
-                       $prev = file_get_contents("data/items/$entry/wiki/delta/$item/prev.txt");
-                       $prev = str_replace("<br />","<br>",$prev);
-                       $prev = str_replace("\n"," ",$prev);
-                       $prev = str_replace("\r"," ",$prev);
-                       $prev = preg_replace("/<img[^>]+src[\s='\"]+([^\"'>\s]+)[^>]*>/is","[\\1]",$prev);
-                       $prev = htmlentities($prev,ENT_QUOTES);
-
-                       $body = str_replace("<br />","<br>",$body);
-                       $body = str_replace("\n"," ",$body);
-                       $body = str_replace("\r"," ",$body);
-                       $body = preg_replace("/<img[^>]+src[\s='\"]+([^\"'>\s]+)[^>]*>/is","[\\1]",$body);
-                       $body = htmlentities($body,ENT_QUOTES);
-                      
-                       $prev_array = explode(" ",$prev);
-                       $body_array = explode(" ",$body);
-
-                       if (count($prev_array) <= count($body_array)) {
-                               $elements = count($body_array);
-                       }
-                       else {
-                               $elements = count($prev_array);
+       if (file_exists("data/items/$entry/wiki/delta"))
+       {
+               if ($dh_delta = opendir("data/items/$entry/wiki/delta"))
+               {
+                       while (($entry_delta = readdir($dh_delta)) !== false)
+                       {
+                               if ($entry_delta != "." && $entry_delta != "..")
+                               {
+                                       $show_delta[] = $entry_delta;
+                               }
                        }
-
-                       $count = "0";
-
-                       $elements = $elements - 1;
-
-                       $diff = "";
-
-                       while ($count <= $elements) {
-
-                               if ($prev_array[$count] == $body_array[$count]) {
-                                       $diff .= $prev_array[$count] . " ";
+                       closedir($dh_delta);
+               }
+               rsort($show_delta);
+               reset($show_delta);
+               $count_delta = count($show_delta);
+               if ($count_delta > 0)
+               {
+                       foreach ($show_delta as $item)
+                       {
+                               $title = file_get_contents("data/items/$entry/wiki/delta/$item/title.txt");
+                               $body = file_get_contents("data/items/$entry/wiki/delta/$item/body.txt");
+                               $author = file_get_contents("data/items/$entry/author.txt");
+                               $editor = file_get_contents("data/items/$entry/wiki/delta/$item/editor.txt");
+                               $prev = file_get_contents("data/items/$entry/wiki/delta/$item/prev.txt");
+                               $prev = str_replace("<br />", "<br>", $prev);
+                               $prev = str_replace("\n", " ", $prev);
+                               $prev = str_replace("\r", " ", $prev);
+                               $prev = preg_replace("/<img[^>]+src[\s='\"]+([^\"'>\s]+)[^>]*>/is", "[\\1]", $prev);
+                               $prev = htmlentities($prev, ENT_QUOTES);
+                               $body = str_replace("<br />", "<br>", $body);
+                               $body = str_replace("\n", " ", $body);
+                               $body = str_replace("\r", " ", $body);
+                               $body = preg_replace("/<img[^>]+src[\s='\"]+([^\"'>\s]+)[^>]*>/is", "[\\1]", $body);
+                               $body = htmlentities($body, ENT_QUOTES);
+                               $prev_array = explode(" ", $prev);
+                               $body_array = explode(" ", $body);
+                               if (count($prev_array) <= count($body_array))
+                               {
+                                       $elements = count($body_array);
                                }
-                               else {
-                                       $diff .= "<del>" . $prev_array[$count] . "</del> <ins>" . $body_array[$count] . " </ins> ";
+                               else
+                               {
+                                       $elements = count($prev_array);
                                }
-
-                               $count = $count + 1;
-                       }
-
-                       $diff = str_replace("&lt;br&gt;","<br>",$diff);        
-                       $diff = trim($diff);
-
-                       echo "<p><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"#CCCCCC\"><tr><td width=\"525\">";
-                       echo "<div id=\"panel_title\">$title";
-
-                       if ($_SESSION['logged_in'] == file_get_contents("data/username.txt")) {
-                               echo "<a href=\"wiki.php?entry=$entry&del=$item\"><img src=\"images/widget.del.png\" border=\"0\" width=\"11\" height=\"11\" align=\"right\" alt=\"delete\"></a>";
+                               $count = "0";
+                               $elements = $elements - 1;
+                               $diff = "";
+                               while ($count <= $elements)
+                               {
+                                       if ($prev_array[$count] == $body_array[$count])
+                                       {
+                                               $diff .= $prev_array[$count] . " ";
+                                       }
+                                       else
+                                       {
+                                               $diff .= "<del>" . $prev_array[$count] . "</del> <ins>" . $body_array[$count] . " </ins> ";
+                                       }
+                                       $count = $count + 1;
+                               }
+                               $diff = str_replace("&lt;br&gt;", "<br>", $diff);
+                               $diff = trim($diff);
+                               echo "<p><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"#CCCCCC\"><tr><td width=\"525\">";
+                               echo "<div id=\"panel_title\">$title";
+                               if ($_SESSION['logged_in'] == file_get_contents("data/username.txt"))
+                               {
+                                       echo "<a href=\"wiki.php?entry=$entry&del=$item\"><img src=\"images/widget.del.png\" border=\"0\" width=\"11\" height=\"11\" align=\"right\" alt=\"delete\"></a>";
+                               }
+                               echo "<a href=\"wiki.php?entry=$entry&restore=$item\"><img src=\"images/widget.back.png\" border=\"0\" width=\"11\" height=\"11\" align=\"right\" alt=\"restore\"></a>";
+                               echo "</div><div id=\"panel_body\"><font style=\"font-size: 10px; color: #999999;\">$author - ";
+                               entry2date($entry);
+                               echo "<br><br></font>$diff</div>";
+                               echo "<div id=\"panel_footer\">Edited by $editor last ";
+                               entry2date($item);
+                               echo "</div></td></tr></table></p>";
+                               unset($diff);
+                               unset($body);
+                               unset($prev);
                        }
-
-                       echo "<img src=\"images/widget.back.png\" border=\"0\" width=\"11\" height=\"11\" align=\"right\" alt=\"restore\">";
-                       echo "</div><div id=\"panel_body\"><font style=\"font-size: 10px; color: #999999;\">$author - ";
-                       entry2date($entry);
-                       echo "<br><br></font>$diff</div>";
-                       echo "<div id=\"panel_footer\">Edited by $editor last ";
-                       entry2date($item);
-                       echo "</div></td></tr></table></p>";
-
-                       unset($diff);
-                       unset($body);
-                       unset($prev);
+               }
+               else
+               {
+                       header("Location: index.php?entry=$entry");
                }
        }
-}
-
 ?>
 
Credits
Sunday, Sep 18, 2005, 12:00 AM (Revision 11 - Thursday, Jul 14, 2011, 7:30 PM)
Open Source enables software developers to stand on the shoulders of giants instead of reinventing the wheel, so to speak. Kudos and many thanks to the folks who made their work freely available for reuse in MAJ.

read more
Bugs and Exploits
Friday, Aug 26, 2005, 12:00 AM (Revision 23 - Wednesday, May 29, 2013, 5:25 AM)
Although MAJ started as a family project, care has been taken to make it as "safe" as possible. With more people now working on MAJ, bugs and exploitable code may sometimes slip in. We invite you to poke around and see if you can find any. Generally, there are two things you can do when you find a MAJ or PHP-related bug or exploit:

1. Take advantage of it. But hey, what's so exciting about messing up someone's blog? Ho-hum, right?
2. Report it here so that we can work on a fix and make MAJ better.

read more
Search
Download
MAJ 2.0
75 files
32980 downloads
MAJ 1.0
26 files
13132 downloads
MAJ 0.14
45 files
35010 downloads