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 935 times via Git panel.

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