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 blob has been accessed 654 times via Git panel.

  1. <?php
  2.         session_start();
  3.         header("Cache-control: private");
  4.         error_reporting(E_ERROR);
  5.         if (isset($_SESSION['logged_in']) and ($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']))
  6.         {
  7.                 header("Location: login.php");
  8.         }
  9.         if (get_magic_quotes_gpc())
  10.         {
  11.                 function stripslashes_array($data)
  12.                 {
  13.                         if (is_array($data))
  14.                         {
  15.                                 foreach ($data as $key => $value)
  16.                                 {
  17.                                         $data[$key] = stripslashes_array($value);
  18.                                 }
  19.                                 return $data;
  20.                         }
  21.                         else
  22.                         {
  23.                                 return stripslashes($data);
  24.                         }
  25.                 }
  26.                 $_REQUEST = stripslashes_array($_REQUEST);
  27.         }
  28.         $login_username = file_get_contents("data/username.txt");
  29.         if (!isset($_REQUEST['entry']))
  30.         {
  31.                 exit();
  32.         }
  33.         if (!file_exists("data/items/{$_REQUEST['entry']}"))
  34.         {
  35.                 exit();
  36.         }
  37.         if (!isset($_SESSION['logged_in']))
  38.         {
  39.                 exit();
  40.         }
  41.         $do = 0;
  42.         if ($_SESSION['logged_in'] == $login_username)
  43.         {
  44.                 $do = 1;
  45.         }
  46.         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'])))
  47.         {
  48.                 $do = 1;
  49.         }
  50.         if ($do == 0)
  51.         {
  52.                 exit();
  53.         }
  54.         function rmdirr($recurse_dirname)
  55.         {
  56.                 if (!file_exists($recurse_dirname))
  57.                 {
  58.                         return false;
  59.                 }
  60.                 if (is_file($recurse_dirname))
  61.                 {
  62.                         return unlink($recurse_dirname);
  63.                 }
  64.                 $recurse_dir = dir($recurse_dirname);
  65.                 while (false !== $recurse_entry = $recurse_dir->read())
  66.                 {
  67.                         if ($recurse_entry == '.' || $recurse_entry == '..')
  68.                         {
  69.                                 continue;
  70.                         }
  71.                         rmdirr("$recurse_dirname/$recurse_entry");
  72.                 }
  73.                 $recurse_dir->close();
  74.                 return rmdir($recurse_dirname);
  75.         }
  76.         function entry2date($f_entry)
  77.         {
  78.                 $f_entry_year = substr($f_entry, 0, 4);
  79.                 $f_entry_month = substr($f_entry, 4, 2);
  80.                 $f_entry_day = substr($f_entry, 6, 2);
  81.                 $f_entry_hour = substr($f_entry, 8, 2);
  82.                 $f_entry_min = substr($f_entry, 10, 2);
  83.                 $f_entry_sec = substr($f_entry, 12, 2);
  84.                 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));
  85.         }
  86. ?>
  87.  
  88. <title>Wiki</title>
  89.  
  90. <style>
  91.  
  92. body {
  93.         color: #666666;
  94.         margin: 10px;
  95.         padding: 0px;
  96.         text-align: left;
  97.         font-family: <?php
  98.                                 if (file_exists("data/fonts/body.txt")) {
  99.                                         $font_body = file_get_contents("data/fonts/body.txt");
  100.                                         echo "{$font_body},";
  101.                                 }
  102.         ?> arial, helvetica, sans-serif;
  103.         background-color: #ffffff;
  104. }
  105.  
  106. p, td {
  107.         font-size: 11px;
  108. }
  109.  
  110. a {
  111.         font-weight: bold;
  112.         text-decoration: none;
  113. }
  114.  
  115. a:link, a:visited {
  116.         color: #666666;
  117. }
  118.  
  119. a:hover {
  120.         color: #336699;
  121. }
  122.  
  123. a:active {
  124.         color: #336699;
  125. }
  126.  
  127. .input_title {  
  128.         color: #666666;
  129.         background: #ffffff;
  130.         border: #999999 solid 1px;
  131.         width: 525px;
  132.         font-family: <?php
  133.                                 if (file_exists("data/fonts/panel-title.txt")) {
  134.                                         $font_panel_title = file_get_contents("data/fonts/panel-title.txt");
  135.                                         echo "{$font_panel_title},";
  136.                                 }
  137.         ?> arial, helvetica, sans-serif;
  138.         font-size: 11px;
  139.         font-weight: bold
  140. }
  141.  
  142. .input_body {  
  143.         color: #666666;
  144.         background: #ffffff;
  145.         border: #999999 solid 1px;
  146.         width: 525px;
  147.         font-family: <?php
  148.                                 if (file_exists("data/fonts/panel-body.txt")) {
  149.                                         $font_panel_body = file_get_contents("data/fonts/panel-body.txt");
  150.                                         echo "{$font_panel_body},";
  151.                                 }
  152.         ?> arial, helvetica, sans-serif;
  153.         font-size: 11px
  154. }
  155.  
  156. #panel_title {
  157.         font-family: <?php
  158.                                 if (file_exists("data/fonts/panel-title.txt")) {
  159.                                         $font_panel_title = file_get_contents("data/fonts/panel-title.txt");
  160.                                         echo "{$font_panel_title},";
  161.                                 }
  162.         ?> arial, helvetica, sans-serif;
  163.         font-size: 12px;
  164.         font-weight: bold;
  165.         color: #666666;
  166.         padding: 5px 5px 5px 5px;
  167.         background-color: #ffffff;
  168.         margin: 0px;
  169.         border-color: #CCCCCC;
  170.         border-width: 1px 1px 0px 1px;
  171.         border-style: solid solid none solid;
  172. }
  173.  
  174. #panel_body {
  175.         font-family: <?php
  176.                                 if (file_exists("data/fonts/panel-body.txt")) {
  177.                                         $font_panel_body = file_get_contents("data/fonts/panel-body.txt");
  178.                                         echo "{$font_panel_body},";
  179.                                 }
  180.         ?> arial, helvetica, sans-serif;
  181.         font-size: 11px;
  182.         color: #666666;
  183.         padding: 5px 5px 5px 5px;
  184.         background-color: #ffffff;
  185.         margin: 0px;
  186.         border-color: #CCCCCC;
  187.         border-width: 1px 1px 1px 1px;
  188.         border-style: solid solid solid solid;
  189. }
  190.  
  191. #panel_footer {
  192.         font-family: <?php
  193.                                 if (file_exists("data/fonts/panel-footer.txt")) {
  194.                                         $font_panel_footer = file_get_contents("data/fonts/panel-footer.txt");
  195.                                         echo "{$font_panel_footer},";
  196.                                 }
  197.         ?> arial, helvetica, sans-serif;
  198.         font-size: 10px;
  199.         color: #999999;
  200.         padding: 5px 5px 5px 5px;
  201.         background-color: #ffffff;
  202.         margin: 0px;
  203.         border-color: #CCCCCC;
  204.         border-width: 0px 1px 1px 1px;
  205.         border-style: none solid solid solid;
  206. }
  207.  
  208. ins {
  209.         background-color: #ccffcc;
  210. }
  211.  
  212. del {
  213.         background-color: #ffbbbb;
  214. }
  215.  
  216. </style>
  217.  
  218. <?php
  219.         $entry = $_REQUEST['entry'];
  220.         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")))
  221.         {
  222.                 rmdirr("data/items/$entry/wiki/delta/{$_REQUEST['del']}");
  223.         }
  224.         if (isset($_REQUEST['restore']) and !empty($_REQUEST['restore']) and file_exists("data/items/$entry/wiki/delta/{$_REQUEST['restore']}"))
  225.         {
  226.                 if (file_exists("data/offset.txt"))
  227.                 {
  228.                         $offset = file_get_contents("data/offset.txt");
  229.                 }
  230.                 else
  231.                 {
  232.                         $offset = 0;
  233.                 }
  234.                 $ddate = date("YmdHis", time() + $offset);
  235.                 if (!file_exists("data/items/$entry/wiki/delta/$ddate"))
  236.                 {
  237.                         mkdir("data/items/$entry/wiki/delta/$ddate");
  238.                         copy("data/items/$entry/title.txt","data/items/$entry/wiki/delta/$ddate/title.txt");
  239.                         copy("data/items/$entry/body.txt","data/items/$entry/wiki/delta/$ddate/prev.txt");
  240.                         copy("data/items/$entry/wiki/delta/{$_REQUEST['restore']}/title.txt","data/items/$entry/title.txt");
  241.                         copy("data/items/$entry/wiki/delta/{$_REQUEST['restore']}/body.txt","data/items/$entry/body.txt");
  242.                         copy("data/items/$entry/body.txt","data/items/$entry/wiki/delta/$ddate/body.txt");
  243.                         if (file_exists("data/items/$entry/contrib.txt"))
  244.                         {
  245.                                 copy("data/items/$entry/contrib.txt","data/items/$entry/wiki/delta/$ddate/contrib.txt");
  246.                         }
  247.                         $editor_file = fopen("data/items/$entry/wiki/delta/$ddate/editor.txt","w");
  248.                         fwrite($editor_file,$_SESSION['logged_in']);
  249.                         fclose($editor_file);
  250.                 }
  251.         }
  252.         if (file_exists("data/items/$entry/wiki/delta"))
  253.         {
  254.                 if ($dh_delta = opendir("data/items/$entry/wiki/delta"))
  255.                 {
  256.                         while (($entry_delta = readdir($dh_delta)) !== false)
  257.                         {
  258.                                 if ($entry_delta != "." && $entry_delta != "..")
  259.                                 {
  260.                                         $show_delta[] = $entry_delta;
  261.                                 }
  262.                         }
  263.                         closedir($dh_delta);
  264.                 }
  265.                 rsort($show_delta);
  266.                 reset($show_delta);
  267.                 $count_delta = count($show_delta);
  268.                 if ($count_delta > 0)
  269.                 {
  270.                         foreach ($show_delta as $item)
  271.                         {
  272.                                 $title = file_get_contents("data/items/$entry/wiki/delta/$item/title.txt");
  273.                                 $body = file_get_contents("data/items/$entry/wiki/delta/$item/body.txt");
  274.                                 $author = file_get_contents("data/items/$entry/author.txt");
  275.                                 $editor = file_get_contents("data/items/$entry/wiki/delta/$item/editor.txt");
  276.                                 $prev = file_get_contents("data/items/$entry/wiki/delta/$item/prev.txt");
  277.                                 $prev = str_replace("<br />", "<br>", $prev);
  278.                                 $prev = str_replace("\n", " ", $prev);
  279.                                 $prev = str_replace("\r", " ", $prev);
  280.                                 $prev = preg_replace("/<img[^>]+src[\s='\"]+([^\"'>\s]+)[^>]*>/is", "[\\1]", $prev);
  281.                                 $prev = htmlentities($prev, ENT_QUOTES);
  282.                                 $body = str_replace("<br />", "<br>", $body);
  283.                                 $body = str_replace("\n", " ", $body);
  284.                                 $body = str_replace("\r", " ", $body);
  285.                                 $body = preg_replace("/<img[^>]+src[\s='\"]+([^\"'>\s]+)[^>]*>/is", "[\\1]", $body);
  286.                                 $body = htmlentities($body, ENT_QUOTES);
  287.                                 $prev_array = explode(" ", $prev);
  288.                                 $body_array = explode(" ", $body);
  289.                                 if (count($prev_array) <= count($body_array))
  290.                                 {
  291.                                         $elements = count($body_array);
  292.                                 }
  293.                                 else
  294.                                 {
  295.                                         $elements = count($prev_array);
  296.                                 }
  297.                                 $count = "0";
  298.                                 $elements = $elements - 1;
  299.                                 $diff = "";
  300.                                 while ($count <= $elements)
  301.                                 {
  302.                                         if ($prev_array[$count] == $body_array[$count])
  303.                                         {
  304.                                                 $diff .= $prev_array[$count] . " ";
  305.                                         }
  306.                                         else
  307.                                         {
  308.                                                 $diff .= "<del>" . $prev_array[$count] . "</del> <ins>" . $body_array[$count] . " </ins> ";
  309.                                         }
  310.                                         $count = $count + 1;
  311.                                 }
  312.                                 $diff = str_replace("&lt;br&gt;", "<br>", $diff);
  313.                                 $diff = trim($diff);
  314.                                 echo "<p><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"#CCCCCC\"><tr><td width=\"525\">";
  315.                                 echo "<div id=\"panel_title\">$title";
  316.                                 if ($_SESSION['logged_in'] == file_get_contents("data/username.txt"))
  317.                                 {
  318.                                         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>";
  319.                                 }
  320.                                 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>";
  321.                                 echo "<a href=\"index.php?entry=$entry\"><img src=\"images/widget.orig.png\" border=\"0\" width=\"11\" height=\"11\" align=\"right\" alt=\"home\"></a>";
  322.                                 echo "</div><div id=\"panel_body\"><font style=\"font-size: 10px; color: #999999;\">$author - ";
  323.                                 entry2date($entry);
  324.                                 echo "<br><br></font>$diff</div>";
  325.                                 echo "<div id=\"panel_footer\">Edited by $editor last ";
  326.                                 entry2date($item);
  327.                                 echo "</div></td></tr></table></p>";
  328.                                 unset($diff);
  329.                                 unset($body);
  330.                                 unset($prev);
  331.                         }
  332.                 }
  333.                 else
  334.                 {
  335.                         header("Location: index.php?entry=$entry");
  336.                 }
  337.         }
  338. ?>
  339.  
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
35387 downloads
MAJ 1.0
26 files
14152 downloads
MAJ 0.14
45 files
36716 downloads