Login   Register  
PHP Classes
elePHPant
Icontem

File: class_config.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Mark Kintigh  >  Dynamic Configuration  >  class_config.php  >  Download  
File: class_config.php
Role: Example script
Content type: text/plain
Description: Interface used to directly edit the configuration table's values
Class: Dynamic Configuration
Store and retrieve configuration values in MySQL
Author: By
Last change:
Date: 2010-08-05 06:13
Size: 18,454 bytes
 

Contents

Class file image Download
<?php
//////////////////////////////////////////////////////////////////////////////////////////
//
// Start a new session
//
//////////////////////////////////////////////////////////////////////////////////////////
   define("MAX_LOGIN_TRIES",3);
   session_start();
//////////////////////////////////////////////////////////////////////////////////////////
//
// Define everyting needed to connect to the database
//
//////////////////////////////////////////////////////////////////////////////////////////
   define("MYSQL_HOST","");
   define("MYSQL_USER", "");
   define("MYSQL_PASSWORD", "");
   define("MYSQL_DATABASE","");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Site Configuration</title>
<style type="text/css">
   body {
      font-family: Verdana, Arial, Helvetica, sans-serif;
      font-size: 12px;
      background-color: #110011;
      color: #FFFFFF;
   }
   a {
      color: #FFFF00;
      text-decoration: none;
   }
   a:link {
      color: #FFFF00;
      text-decoration: none;
   }
   a:visited {
      color: #FFFF00;
      text-decoration: none;
   }
   a:hover {
      color: #00FFFF;
      text-decoration: none;
   }
   .buttons {
      color: #000000;
      background-color: #999999;
   }
   .title1 {
      font-family: Verdana, Arial, Helvetica, sans-serif;
      font-size: 16px;
      font-weight: bold;
   }
   .menubar {
      font-family: Verdana, Arial, Helvetica, sans-serif;
      font-size: 10px;
      border-width: thin;
      border-style: solid;
      border-top-color: #AA00AA;
      border-left-color: #AA00AA;
      border-right-color:#660066;
      border-bottom-color: #660066;
      background-color: #330033;
      width: 98%;
      }
   .hover {
      color: #FFFF00;
      background-color: #660000;
      }
   .normal {
      color: #FFFFFF;
      background-color: #330033;
      }
   .summary_grid {
      width: 98%;
      border-style: none;
   }
   .summary_grid_title {
      color: #FFFFFF;
      font-size: 12px;
      font-weight: bold;
      font-style: italic;
   }
   .summary_grid_cell {
      border-bottom-style: solid;
      border-bottom-width: thin;
      border-bottom-color: #990099;
   }
   .information {
      color: #00FFFF;
      font-style: italic;
   }
</style>
<script type="text/javascript">
   //
   // Reload the page with the given parameters instead of the current ones
   //
   function reloadme() {
      document.location.replace("<?php echo $_SERVER['PHP_SELF']; ?>");
   }
   //
   // Reload the page with the given parameters instead of the current ones
   //
   function reloadmewith(params) {
      document.location.replace("<?php echo $_SERVER['PHP_SELF']; ?>?" + params);
   }
   //
   // Submit the form
   //
   function submitform() {
      document.userform.submit();
   }
   //
   // Change the value of the userform field "action" to the given value and submit
   // the form
   //
   function changeactionandsubmit(newaction) {
      document.userform.action.value = newaction;
      document.userform.submit();
   }
   //
   // Toggle a check box value
   //
   function togglecheckbox(boxName) {
      document.userform.elements[boxName].checked =
         !document.userform.elements[boxName].checked;
   }
   //
   // Sets the given userform's field to the given value
   //
   function setformvalue(name, value, caseSensitive) {
      var oList = document.userform.elements[name];
      var sTestValue = (caseSensitive ? value : value.toLowerCase());
      var sListValue;
      // Ok, it's not a SELECT so just try to set the.value property
      if(oList.type!="select-one") {
         oList.value = value;
         return;
      }
      for (var i = 0; i < oList.options.length; i++)
      {
         sListValue = (caseSensitive ? oList.options[i].text :
         // Change text to value if you wish to compare by value of listbox.
         oList.options[i].text.toLowerCase());
         if (sListValue == sTestValue) {
            oList.selectedIndex = i;
            break;
         }
      }
   }
   //
   // Confirm the request to reset the form before actually resetting it
   //
   function confirmreset() {
      if(confirm("Are you sure you want to reset the values on this form?\n" +
         "ALL CHANGES WILL BE LOST!"))
         document.userform.reset();
   }
   //
   // Sorts a given SELECT list
   //
   function sortlist($id) {
      var list = document.getElementById($id);
      if(!list) return;
      var tmp = new Array();
      var len = list.options.length;
      if(len<1) return;
      for(i=0; i<len; i++) {
         tmp[i] = new Array(list.options[i].text.toLowerCase(),
            new Object(list.options[i]));
      }
      tmp.sort();
      list.options.length = 0;
      for(i=0; i<len; i++) {
         list.appendChild(tmp[i][1]);
      }
      list.selectedIndex = 0;
   }
</script>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>"  method="post"
   enctype="application/x-www-form-urlencoded" name="userform">
<span class="title1">Site Configuration</span><br /><br />
<?php
/*****************************************************************************************
**
** Load the base configuration file and attempt to open a link to the mySQL server
**
*****************************************************************************************/
include_once("class_mysql.php");
$myconfig = new mySQL_Config();
$myconfig->setConnection(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE);

/*****************************************************************************************
**
** Process the $_REQUEST['action'] values
**
*****************************************************************************************/
if(isset($_SESSION['loggedin'])) {
   basic_menu();
   if(isset($_REQUEST['action'])) {
      switch(strtolower(trim($_REQUEST['action']))) {
         case "logout":
            //
            // Logging out, so destroy the session and reload this page with the
            // login prompt
            //
            session_unset();
            echo "<script>\nreloadme();</script>";
            break;
         case "edit":
            //
            // If a value is set then draw the view / edit page; otherwise, draw
            // the summary grid
            //
            if(isset($_REQUEST['value'])) {
               draw_edit_form($_REQUEST['value']);
            } else {
               draw_grid();
            }
            break;
         case "kill":
            //
            // If a value is set then draw the confirm kill page; otherwise, draw
            // the summary grid
            //
            if(isset($_REQUEST['value'])) {
               draw_confirm_kill($_REQUEST['value']);
            } else {
               draw_grid();
            }
            break;
         case "confirm_kill":
            //
            // The user confirmed the removal of the setting, so remove it
            //
            if(isset($_REQUEST['value'])) {
               $myconfig->config_remove($_REQUEST['value']);
            }
            draw_grid();
            break;
         case "save":
            //
            // Call the validation routine before saving the value
            //
            $oldname = isset($_REQUEST['name']) ?
               trim($_REQUEST['name']) : "";
            $name = isset($_REQUEST['cfg_setting']) ?
               trim($_REQUEST['cfg_setting']) : "";
            $value = isset($_REQUEST['cfg_value']) ?
               trim($_REQUEST['cfg_value']) : "";
            validate_settings($oldname, $name, $value);
            break;
         case "new":
            //
            // Request for a new setting; the edit function allows for handling
            // of both editing and new records, it just depends on what is sent
            //
            draw_edit_form();
            break;
         default:
            draw_grid();
            break;
      }
   } else {
      draw_grid();
   }
} else {
   if(isset($_REQUEST['action'])) {
      switch(strtolower(trim($_REQUEST['action']))) {
         case "login":
            echo "Processing login...<br>";
            if(strcmp(trim(strtolower($_REQUEST['uid'])),strtolower(MYSQL_USER))==0 &&
               strcmp(trim(),trim())==0) {
               $_SESSION['loggedin'] = true;
               echo "<script>\nreloadme();</script>";
            } else {
               login_screen();
            }
            break;
      }
   } else {
      login_screen();
   }
}

//////////////////////////////////////////////////////////////////////////////////////////
function login_screen() {
   if(isset($_SESSION['login_tries'])) {
      if($_SESSION['login_tries']>MAX_LOGIN_TRIES) {
         echo "<font color=\"#FF0000\">Maximum attempts to login has been reached"
            . "</font><br>";
         return;
      } else {
         $_SESSION['login_tries'] = $_SESSION['login_tries'] + 1;
         echo "<font color=\"#FF0000\">Invalid login attempt</font><br>";
      }
   } else {
      $_SESSION['login_tries'] = 1;
   }
?>
   Please log in using the account and password used to connect to mySQL:<br />
   <br />
    <input type="hidden" name="action" value="login" />
   <table>
      <tr>
         <td align="right">User name:</td>
            <td><input type="text" name="uid" value="" size="30" /></td>
        </tr>
      <tr>
         <td align="right">Password:</td>
            <td><input type="password" name="pwd" value="" size="30" /></td>
        </tr>
        <tr>
         <td>&nbsp;</td>
         <td>
               <input type="submit" value="Login" class="buttons" />
                &nbsp;&nbsp;
                <input type="reset" class="buttons" />
            </td>
        </tr>
    </table>
<?php
}

//////////////////////////////////////////////////////////////////////////////////////////
function basic_menu() {
   global $myconfig;

   echo "<table align=\"center\" cellpadding=\"2\" class=\"menubar\"><tr>\n";
   if($myconfig->mysql_config_allow_new) {
      draw_table_link($_SERVER['PHP_SELF'] . "?action=new","New", 1, 0, 45, "center");
   }
   draw_table_link($_SERVER['PHP_SELF'],"Refresh", 1, 0, 60, "center");
   echo "\t<td>&nbsp;</td>\n";
   draw_table_link($_SERVER['PHP_SELF'] . "?action=logout","Logout", 1, 0, 55,
      "center");
   echo "</tr></table>\n";
}

//////////////////////////////////////////////////////////////////////////////////////////
function edit_menu() {
   echo "<table align=\"center\" cellpadding=\"2\" class=\"menubar\"><tr>\n";
   draw_table_jslink("changeactionandsubmit('save');", "Save", 0, 45, "center");
   draw_table_jslink("confirmreset();", "Reset", 0, 50, "center");
   draw_table_link($_SERVER['PHP_SELF'],"Cancel", 1, 0, 60, "center");
   echo "\t<td>&nbsp;</td>\n";
   echo "</tr></table>\n";
}

//////////////////////////////////////////////////////////////////////////////////////////
function draw_grid() {
   global $myconfig;

   $data = $myconfig->config_get_names();
   echo "<br />\n"
      . "<table align=\"center\" cellpadding=\"2\" class=\"summary_grid\">\n"
      . "<tr>"
         . "<td width=\"30\">&nbsp;</td>"
         . "<td width=\"30\">&nbsp;</td>"
         . "<td class=\"summary_grid_title\">Configuration / Setting Names</td>"
      . "</tr>\n";
   for($x=0; $x<$data['count']; $x++) {
      echo "<tr><td align=\"center\" class=\"summary_grid_cell\">"
         . "<a href=\"" . $_SERVER['PHP_SELF'] . "?action=edit&value={$data[$x]}\">"
         . "View</a></td><td align=\"center\" class=\"summary_grid_cell\">"
         . "<a href=\"" . $_SERVER['PHP_SELF'] . "?action=kill&value={$data[$x]}\">"
         ."Kill</a></td><td class=\"summary_grid_cell\">{$data[$x]}</td></tr>\n";
   }
   echo "</table>\n";
}

//////////////////////////////////////////////////////////////////////////////////////////
function draw_edit_form($name="") {
   global $myconfig;

   if(strlen(trim($name))>0) {
      //
      // If there is a name given, look up its value
      //
      $local['cfg_setting'] = trim($name);
      $local['cfg_value'] = $myconfig->config_get(trim($name));
   } else {
      //
      // Set temporary values to blank
      //
      $local['cfg_setting'] = "";
      $local['cfg_value'] = "";
   }
   //
   // Draw the form
   //
   edit_menu();
   ?>
    <br />
    <input type="hidden" name="action" value="" />
    <input type="hidden" name="name" value="<?php echo $name; ?>" />
    <table>
      <tr>
            <td align="right">Setting:</td>
            <td><input type="text" name="cfg_setting" maxlength="128" size="79" value="<?php
            echo $myconfig->FixQuotes($local['cfg_setting'], true);
            ?>" /></td>
        </tr>
      <tr>
            <td align="right" valign="top">Value:</td>
            <td><textarea name="cfg_value" rows="10" cols="60"><?php
            echo $myconfig->FixQuotes($local['cfg_value'], true);
            ?></textarea></td>
        </tr>
    </table>
    <?php
}

//////////////////////////////////////////////////////////////////////////////////////////
function draw_confirm_kill($name) {
   //
   // Ask the user to confirm the removal of the setting
   //
   ?><br />
   Are you sure you want to remove "<span class="information"><?php
      echo $name; ?></span>"?<br />
   <br />
    <input type="hidden" name="action" value="" />
    <input type="hidden" name="value" value="<?php echo $name; ?>" />
    <input type="button" value="Yes" class="buttons"
      onclick="changeactionandsubmit('confirm_kill')" />
    &nbsp;&nbsp;
    <input type="button" value="No" class="buttons"
      onclick="document.location.replace('<?php echo $_SERVER['PHP_SELF'] ?>')" />
   <?php
}

//////////////////////////////////////////////////////////////////////////////////////////
function validate_settings($oldname, $name, $value) {
   global $myconfig;

   //
   // Make sure there is a name given
   //
   if(strlen(trim($name))<1) {
      echo "<br />You did not provide a setting name."
         . "<br /><br />"
         . "<a href=\"#\" onclick=\"history.go(-1);\">Back to form</a> or "
         . "<a href=\"" . $_SERVER['PHP_SELF'] . "\">continue</a>";
      return;
   }
   //
   // Check to see if the old name and new names match
   //
   if(strcmp(strtolower($oldname),strtolower($name))!=0) {
      //
      // They do not, so make sure the new name does not exist
      //
      if($myconfig->config_exists($name)) {
         //
         // The name already exists, so display an error message with two links (one
         // to return to the editing form, the other to continue back to the list)
         //
         echo "<br />I cannot rename this value from <span class=\"information\">"
            . "$oldname</span> to <span class=\"information\">$name</span> because "
            . "there is already a setting with the new name in the system."
            . "<br /><br />"
            . "<a href=\"#\" onclick=\"history.go(-1);\">Back to form</a> or "
            . "<a href=\"" . $_SERVER['PHP_SELF'] . "\">continue</a>";
         return;
      } else {
         //
         // Remove the setting with the old name
         //
         $myconfig->config_remove($oldname);
      }
   }
   //
   // Add or update the setting
   //
   $myconfig->config_set($name, $value);
   //
   // Draw the grid
   //
   draw_grid();
}

//////////////////////////////////////////////////////////////////////////////////////////
function draw_table_link($link, $text, $replacePage=0, $newRow=0, $width=0, $align="") {
  //
  // This function will draw a new TD in a table (already started) that
  // will act as a link and will change the cell's style class when the
  // user hovers / exits the cell.
  //
  // Optional -- replace the current page or act as a normal link
  // Optional -- write this as a row by itself
  // Optional -- width of the cell
  // Optional -- alignment of the contents
  //
  if ($newRow) echo "<tr>\n";
  echo "\t<td class=\"normal\" "
    . "onMouseOver=\"this.className='hover'\" "
    . "onMouseOut=\"this.className='normal'\" ";
  if($width>0) echo "width=\"$width\" ";
  if(strlen($align)>0) echo "align=\"$align\" ";
  if($replacePage) {
    echo "onClick=\"document.location.replace('$link');\">";
  } else {
    echo "onClick=\"document.location = '$link';\">";
  }
  echo $text . "</td>\n";
  if ($newRow) echo "</tr>\n";
}

//////////////////////////////////////////////////////////////////////////////////////////
function draw_table_jslink($jslink, $text, $newRow=0, $width=0, $align="") {
  //
  // This function will draw a new TD in a table (already started) that
  // will act as a link that calls a javascript function and will
  // change the cell's style class when the user hovers / exits the
  // cell.
  //
  // Optional -- replace the current page or act as a normal link
  // Optional -- width of the cell
  // Optional -- alignment of the contents
  //
  if ($newRow) echo "<tr>\n";
  echo "\t<td class=\"normal\" "
    . "onMouseOver=\"this.className='hover'\" "
    . "onMouseOut=\"this.className='normal'\" ";
  if($width>0) echo "width=\"$width\" ";
  if(strlen($align)>0) echo "align=\"$align\" ";
  echo "onClick=\"$jslink\">$text</td>\n";
  if ($newRow) echo "</tr>\n";
}

/*****************************************************************************************
**
** Close the SQL connection
**
*****************************************************************************************/
$myconfig->close();
?>
</form>
</body>
</html>