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

  1. <?php
  2.  
  3.  
  4. header("Cache-control: private");
  5.  
  6. error_reporting(E_ERROR);
  7.  
  8. require("core.php");
  9.  
  10. if (isset($_SESSION['logged_in']) and ($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT'])) {
  11.         header("Location: login.php");
  12. }
  13.  
  14. $login_username = file_get_contents("data/username.txt");
  15.  
  16. if (!isset($_SESSION['logged_in']) or ($_SESSION['logged_in'] != $login_username)) {
  17.         exit();
  18. }
  19.  
  20. if (file_exists("data/items")) {
  21.  
  22.         if ($dh_cat_txt = opendir("data/items")) {
  23.  
  24.                 while (($entry_cat_txt = readdir($dh_cat_txt)) !== false) {
  25.  
  26.                         if ($entry_cat_txt != "." && $entry_cat_txt != "..") {
  27.  
  28.                                 if (file_exists("data/items/$entry_cat_txt/category.txt")) {
  29.  
  30.                                         $category_txt = file_get_contents("data/items/$entry_cat_txt/category.txt");
  31.                                         $category_txt = strtolower($category_txt);
  32.                                         $category_txt = str_replace(" ","_",$category_txt);
  33.                                         $category_txt = trim($category_txt);
  34.  
  35.                                         if (!file_exists("data/items/$entry_cat_txt/categories")) {
  36.                                                 mkdir("data/items/$entry_cat_txt/categories");
  37.                                         }
  38.  
  39.                                         if (!file_exists("data/items/$entry_cat_txt/categories/$category_txt")) {
  40.                                                 mkdir("data/items/$entry_cat_txt/categories/$category_txt");
  41.                                         }
  42.  
  43.                                         unlink("data/items/$entry_cat_txt/category.txt");
  44.                                 }
  45.                         }
  46.                 }
  47.                 closedir($dh_cat_txt);
  48.         }
  49. }
  50.  
  51. if (isset($_POST['new_id']) and !empty($_POST['new_id'])) {
  52.  
  53.         if (!file_exists("data/categories")) {
  54.                 mkdir("data/categories");
  55.         }
  56.  
  57.         $new_id = trim(strip_tags(strtolower(str_replace(" ", "_", $_POST['new_id']))));
  58.  
  59.         if (!file_exists("data/categories/$new_id")) {
  60.                 mkdir("data/categories/$new_id");
  61.         }
  62.  
  63.         if (isset($_POST['new_title']) and !empty($_POST['new_title'])) {
  64.                 $new_title = ucfirst(strip_tags(trim($_POST['new_title'])));
  65.                 $open_title_file = fopen("data/categories/$new_id/title.txt","w");
  66.                 fwrite($open_title_file,$new_title);
  67.                 fclose($open_title_file);
  68.         }
  69. }
  70.  
  71. if (isset($_POST['cat_del']) and !empty($_POST['cat_del']) and ($_POST['cat_del'] == "on")) {
  72.  
  73.         rmdirr("data/categories/{$_POST['cat_id']}");
  74.  
  75.         if (file_exists("data/items")) {
  76.        
  77.                 if ($dh_cat_del = opendir("data/items")) {
  78.        
  79.                         while (($entry_cat_del = readdir($dh_cat_del)) !== false) {
  80.        
  81.                                 if ($entry_cat_del != "." && $entry_cat_del != "..") {
  82.        
  83.                                         if (file_exists("data/items/$entry_cat_del/categories/{$_POST['cat_id']}")) {
  84.                                                 rmdirr("data/items/$entry_cat_del/categories/{$_POST['cat_id']}");
  85.                                         }
  86.                                 }
  87.                         }
  88.                         closedir($dh_cat_del);
  89.                 }
  90.         }
  91. }
  92.  
  93. if ((!isset($_POST['cat_hide']) or !empty($_POST['cat_hide'])) and ($_POST['cat_edit'] == "on")) {
  94.         if (file_exists("data/categories/{$_POST['cat_id']}/private.txt")) {
  95.                 unlink("data/categories/{$_POST['cat_id']}/private.txt");
  96.         }
  97. }
  98.  
  99. if (isset($_POST['cat_hide']) and !empty($_POST['cat_hide']) and ($_POST['cat_hide'] == "on")) {
  100.         if (file_exists("data/categories/{$_POST['cat_id']}/members")) {
  101.                 rmdirr("data/categories/{$_POST['cat_id']}/members");
  102.         }
  103.         if (!file_exists("data/categories/{$_POST['cat_id']}/private.txt")) {
  104.                 touch("data/categories/{$_POST['cat_id']}/private.txt");
  105.         }
  106. }
  107.  
  108. if ((!isset($_POST['cat_book']) or !empty($_POST['cat_book'])) and ($_POST['cat_edit'] == "on")) {
  109.         if (file_exists("data/categories/{$_POST['cat_id']}/book.txt")) {
  110.                 unlink("data/categories/{$_POST['cat_id']}/book.txt");
  111.         }
  112. }
  113.  
  114. if (isset($_POST['cat_book']) and !empty($_POST['cat_book']) and ($_POST['cat_book'] == "on")) {
  115.         if (!file_exists("data/categories/{$_POST['cat_id']}/book.txt")) {
  116.                 touch("data/categories/{$_POST['cat_id']}/book.txt");
  117.         }
  118. }
  119.  
  120. if (isset($_POST['cat_title']) and !empty($_POST['cat_title'])) {
  121.  
  122.         $cat_title = ucfirst(strip_tags(trim($_POST['cat_title'])));
  123.  
  124.         if ($cat_title != file_get_contents("data/categories/{$_POST['cat_id']}/title.txt")) {
  125.                 $edit_title_file = fopen("data/categories/{$_POST['cat_id']}/title.txt","w");
  126.                 fwrite($edit_title_file,$cat_title);
  127.                 fclose($edit_title_file);
  128.         }
  129. }
  130.  
  131. if (empty($_POST['cat_title']) and file_exists("data/categories/{$_POST['cat_id']}/title.txt")) {
  132.         unlink("data/categories/{$_POST['cat_id']}/title.txt");
  133. }
  134.  
  135. if (isset($_POST['cat_ren']) and !empty($_POST['cat_ren'])) {
  136.  
  137.         $cat_rename = strtolower($_POST['cat_ren']);
  138.         $cat_rename = str_replace(" ","_",$cat_rename);
  139.         $cat_rename = trim($cat_rename);
  140.  
  141.         $cat_oldname = strtolower($_POST['cat_id']);
  142.         $cat_oldname = str_replace(" ","_",$cat_oldname);
  143.         $cat_oldname = trim($cat_oldname);
  144.  
  145.         if (($cat_rename != $cat_oldname) and !file_exists("data/categories/$cat_rename")) {
  146.                 rename("data/categories/$cat_oldname","data/categories/$cat_rename");
  147.         }
  148.  
  149.  
  150.         if (file_exists("data/items")) {
  151.        
  152.                 if ($dh_cat_ren = opendir("data/items")) {
  153.        
  154.                         while (($entry_cat_ren = readdir($dh_cat_ren)) !== false) {
  155.        
  156.                                 if ($entry_cat_ren != "." && $entry_cat_ren != "..") {
  157.        
  158.                                         if (file_exists("data/items/$entry_cat_ren/categories/$cat_oldname") and !file_exists("data/items/$entry_cat_ren/categories/$cat_rename")) {
  159.                                                 rename("data/items/$entry_cat_ren/categories/$cat_oldname","data/items/$entry_cat_ren/categories/$cat_rename");
  160.                                         }
  161.                                 }
  162.                         }
  163.                         closedir($dh_cat_ren);
  164.                 }
  165.         }
  166. }
  167.  
  168. ?>
  169.  
  170. <title>Categories</title>
  171.  
  172. <style>
  173.  
  174. body {
  175.         color: #666666;
  176.         margin: 10px;
  177.         padding: 0px;
  178.         text-align: left;
  179.         font-family: <?php
  180.                                 if (file_exists("data/fonts/body.txt")) {
  181.                                         $font_body = file_get_contents("data/fonts/body.txt");
  182.                                         echo "{$font_body},";
  183.                                 }
  184.         ?> arial, helvetica, sans-serif;
  185.         font-size: 11px;
  186.         background-color: #FFFFFF;
  187. }
  188.  
  189. p, td {
  190.         font-size: 11px;
  191. }
  192.  
  193. a {
  194.         font-weight: bold;
  195.         text-decoration: none;
  196. }
  197.  
  198. a:link, a:visited {
  199.         color: #666666;
  200. }
  201.  
  202. a:hover {
  203.         color: #336699;
  204. }
  205.  
  206. a:active {
  207.         color: #336699;
  208. }
  209.  
  210. .input {        
  211.         color: #666666;
  212.         background: #ffffff;
  213.         border: #999999 solid 1px;
  214.         width: 300px;
  215.         font-family: <?php
  216.                                 if (file_exists("data/fonts/input.txt")) {
  217.                                         $font_input = file_get_contents("data/fonts/input.txt");
  218.                                         echo "{$font_input},";
  219.                                 }
  220.         ?> arial, helvetica, sans-serif;
  221.         font-size: 11px;
  222. }
  223.  
  224. .id {  
  225.         color: #666666;
  226.         background: #ffffff;
  227.         border: #999999 solid 1px;
  228.         width: 150px;
  229.         font-family: <?php
  230.                                 if (file_exists("data/fonts/input.txt")) {
  231.                                         $font_input = file_get_contents("data/fonts/input.txt");
  232.                                         echo "{$font_input},";
  233.                                 }
  234.         ?> arial, helvetica, sans-serif;
  235.         font-size: 11px;
  236. }
  237.  
  238. .submit {      
  239.         color: #666666;
  240.         background: #ffffff;
  241.         border: #999999 solid 1px;
  242.         width: 100px;
  243.         font-family: <?php
  244.                                 if (file_exists("data/fonts/input.txt")) {
  245.                                         $font_input = file_get_contents("data/fonts/input.txt");
  246.                                         echo "{$font_input},";
  247.                                 }
  248.         ?> arial, helvetica, sans-serif;
  249.         font-size: 11px
  250. }
  251. </style>
  252.  
  253. <p><b>Add Category</b><br>Enter a unique category ID and optional title or description.</p>
  254.  
  255. <table border="0" cellspacing="1" cellpadding="2">
  256. <form enctype="multipart/form-data" action="cat.php" method="post">
  257. <tr><td>category id*</td><td><input type="text" class="input" name="new_id" autocomplete="off" maxlength="30"></td></tr>
  258. <tr><td>title or description</td><td><input type="text" class="input" name="new_title" autocomplete="off" maxlength="90"></td></tr>
  259. <tr><td></td><td><input type="submit" class="input" value="click here to add a new category"></td></tr>
  260. </form>
  261. <form enctype="multipart/form-data" action="index.php" method="post">
  262. <tr><td></td><td><input class="input" type="submit" value="click here to go to the index page"></td></tr>
  263. </form>
  264. </table>
  265.  
  266. <?php
  267.         if (file_exists("data/categories")) {
  268.                 if ($dh_cat = opendir("data/categories")) {
  269.                         while (($entry_cat = readdir($dh_cat)) !== false) {
  270.  
  271.                                 if ($entry_cat != "." && $entry_cat != ".." && fnmatch("*", $entry_cat)) {
  272.                                         $show_cat[] = $entry_cat;
  273.                                 }
  274.                         }
  275.                         closedir($dh_cat);
  276.                 }
  277.  
  278.                 sort($show_cat);
  279.                 reset($show_cat);
  280.                 $count_cat = count($show_cat);
  281.  
  282.                 if ($count_cat > 0) {
  283.  
  284.                         echo "<p><b>Category Management</b><br>Hiding a category will make it, and all associated entries, accessible to you only. Override per entry if needed.";
  285.  
  286.                         echo "<br>Booking a category, for lack of a better term, will unconditionally display all associated entries from oldest to newest.<br>Deleting a category will unfile all its associated entries.</p>";
  287.  
  288.                         echo "<table border=\"0\" cellspacing=\"1\" cellpadding=\"2\">";
  289.                         echo "<tr><td>category id</td><td align=\"center\">title or description</td><td align=\"center\">hide</td>";
  290.  
  291.                         echo "<td align=\"center\">book</td><td align=\"center\">delete</td><td></td></tr>";
  292.  
  293.                         foreach ($show_cat as $category) {
  294.                                 echo "<form enctype=\"multipart/form-data\" action=\"cat.php\" method=\"post\">";
  295.                                 echo "<tr><td><input type=\"text\" class=\"id\" name=\"cat_ren\" value=\"$category\" maxlength=\"30\" autocomplete=\"off\"></td>";
  296.                                 echo "<td><input type=\"text\" class=\"input\" name=\"cat_title\" value=\"";
  297.                                 readfile("data/categories/$category/title.txt");
  298.                                 echo "\" autocomplete=\"off\" maxlength=\"90\"></td>";
  299.                                 echo "<td align=\"center\"><input type=\"checkbox\" name=\"cat_hide\"";
  300.  
  301.                                 if (file_exists("data/categories/$category/private.txt")) {
  302.                                         echo " checked";
  303.                                 }
  304.  
  305.                                 echo "></td>";
  306.  
  307.                                 echo "<td align=\"center\"><input type=\"checkbox\" name=\"cat_book\"";
  308.  
  309.                                 if (file_exists("data/categories/$category/book.txt")) {
  310.                                         echo " checked";
  311.                                 }
  312.                                 echo "></td>";
  313.  
  314.                                 echo "<td align=\"center\"><input type=\"checkbox\" name=\"cat_del\"></td>";
  315.                                 echo "<td><input type=\"hidden\" name=\"cat_id\" value=\"$category\"><input type=\"hidden\" name=\"cat_edit\" value=\"on\"><input type=\"submit\" class=\"submit\" value=\"submit\"></td>";
  316.                                 echo "</tr></form>";
  317.                         }
  318.                         echo "</table>";
  319.                 }
  320.         }
  321. ?>
  322.  
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
33448 downloads
MAJ 1.0
26 files
13526 downloads
MAJ 0.14
45 files
35642 downloads