- Implemented save functionality in the judge class

- Moved the tableeditor class to accept a generic class, no longer a person
  class
- Restored the original functionality where everything is specified in the
  constructor, but added a 'class' which can be a dummy class to return to the
  original tableeditor functionality.  The tableeditor checks for
  class->tableEditorLoad() now, and if that exists it calls it.  If it doesn't
  then it calls a default Load() routine which contains the original code from
  the tableeditor.  Same with save.

Still needs work, but it's getting there.
This commit is contained in:
dave 2006-10-16 06:21:20 +00:00
parent 4a5bc27532
commit 1a2b3d7faf
2 changed files with 219 additions and 91 deletions

View File

@ -1,21 +1,33 @@
<?
class person {
var $id;
// var $fields;
function person($person_id) {
$this->id = $person_id;
function person($person_id=NULL)
{
if($person_id == NULL) {
print("Empty constructor called\n");
$this->id = FALSE;
} else {
print("ID $person_id construction called\n");
$this->id = $person_id;
}
// $this->fields = NULL;
}
};
class judge extends person {
/* Static members for the table editor */
function editor_setup($editor)
function tableEditorSetup($editor)
{
global $judges_fields;
/* Setup the table editor with the fields we want to display
* when displaying a list of judges, and also the type of each
* field where required */
@ -23,14 +35,14 @@ function editor_setup($editor)
'firstname' => 'First Name',
'lastname' => 'Last Name'
);
/* Most of these should be moved to the base class, as they
* will be the same for all person groups */
$e = array( 'firstname' => 'First Name',
'lastname' => 'Last Name',
'email' => 'Email Address',
'address' =>"Address 1",
'address2' =>"Address 2",
'address2' =>"Address 2",
'city' => 'City',
'province' => 'Province',
'postalcode' => 'Postal Code',
@ -39,7 +51,7 @@ function editor_setup($editor)
'organization' => 'Organization',
'language' => 'Language(s)',
'complete' => "Complete" );
$editor->setTable('judges');
$editor->setListFields($l);
$editor->setEditFields($e);
@ -58,13 +70,14 @@ function editor_setup($editor)
/* Functions for $this */
function judge($judge_id)
function judge($judge_id=NULL)
{
global $judges_fields;
person::person($judge_id);
// $this->fields = $judges_fields;
}
function load()
function tableEditorLoad()
{
$id = $this->id;
@ -94,8 +107,79 @@ function load()
return $j;
}
function save()
function tableEditorSave($data)
{
$judges_fields = array( 'firstname' => 'First Name',
'lastname' => 'Last Name',
'email' => 'Email Address',
'address' =>"Address 1",
'address2' =>"Address 2",
'city' => 'City',
'province' => 'Province',
'postalcode' => 'Postal Code',
'phonework' => 'Phone (Work)',
'phonecell' => 'Phone (Cell)',
'organization' => 'Organization',
'complete' => "Complete" );
$query = "";
$insert_mode = ($this->id == false) ? 1 : 0;
if($insert_mode) {
$query="INSERT INTO judges (";
//create list of fields to insert
foreach($data AS $f=>$n)
$query.="`$f`,";
//rip off the last comma
$query=substr($query,0,-1);
$query.=") VALUES (";
} else {
$query="UPDATE `judges` SET ";
}
foreach($judges_fields AS $f=>$n)
{
if($insert_mode) $field = '';
else $field = "`$f`=";
$n = $data[$f];
$query .= $field.$n.",";
}
//rip off the last comma
$query=substr($query,0,-1);
if($insertmode) {
$query.=")";
} else {
$query.=" WHERE id='{$this->id}'";
}
echo $query;
// mysql_query($query);
print("data: \n");
print_r($data);
print("-- \n");
/* judges_languages */
/* First delete all the languages, then insert the ones the judge
* has selected */
$query = "DELETE FROM judges_languages WHERE judges_id='{$this->id}'";
//mysql_query($query);
print_r($data['language']);
$keys = array_keys($data['language']);
foreach($keys as $k) {
$query = "INSERT INTO
judges_languages (judges_id,languages_lang)
VALUES ('{$this->id}','$k')";
print("$query");
// mysql_query($query);
}
}

View File

@ -72,7 +72,6 @@ if(!$icon_extension)
}
/**
* The main class
* @package tableeditor
@ -132,7 +131,7 @@ class TableEditor
* @param array $editfields
* @param array $hiddenfields
*/
function TableEditor($classname)//,$listfields,$editfields=null,$hiddenfields=null)
function TableEditor($classname,$listfields=null,$editfields=null,$hiddenfields=null)
{
//set defaults
$this->timeformat="12hrs";
@ -147,20 +146,23 @@ class TableEditor
//grab the table
$this->classname=$classname;
/* //grab the list fields
$this->listfields=$listfields;
if(method_exists($this->classname, 'tableEditorSetup')) {
call_user_func(array($this->classname, 'tableEditorSetup'), $this);
} else {
//grab the list fields
$this->listfields=$listfields;
//grab the edit fields, if there arent any, then edit==list
if($editfields)
$this->editfields=$editfields;
else
$this->editfields=$listfields;
if($hiddenfields)
$this->hiddenfields=$hiddenfields;
}
//grab the edit fields, if there arent any, then edit==list
if($editfields)
$this->editfields=$editfields;
else
$this->editfields=$listfields;
if($hiddenfields)
$this->hiddenfields=$hiddenfields;
*/
call_user_func(array($this->classname, editor_setup), $this);
}
function setListFields($f)
@ -173,6 +175,10 @@ class TableEditor
{
$this->editfields = $f;
}
function setHiddenFields($f)
{
$this->hiddenfields = $f;
}
function setTable($t)
{
$this->table = $t;
@ -395,6 +401,54 @@ class TableEditor
return array($inputtype, $inputmaxlen, $inputsize);
}
function defaultLoad()
{
$query="SELECT {$this->primaryKey}";
foreach($this->editfields AS $f=>$n)
$query.=", `$f`";
$query.=" FROM `{$this->table}`";
$query.=" WHERE {$this->primaryKey}='{$_GET['edit']}'";
if($this->DEBUG) echo $query;
$editquery=mysql_query($query);
$editdata=mysql_fetch_assoc($editquery);
return $editdata;
}
function defaultSave($insert_mode, $editdata)
{
$query = "";
if($insert_mmode) {
$query="INSERT INTO `{$this->table}` (";
//create list of fields to insert
foreach($editdata AS $f=>$n)
$query.="`$f`,";
//rip off the last comma
$query=substr($query,0,-1);
$query.=") VALUES (";
} else {
$query="UPDATE `{$this->table}` SET ";
}
foreach($this->editfields AS $f=>$n)
{
if($insert_mode) $field = '';
else $field = "`$f`=";
$query .= $field.$n.",";
}
//rip off the last comma
$query=substr($query,0,-1);
if($insertmode) {
$query.=")";
} else {
$query.=" WHERE {$this->primaryKey}='{$_POST['editsave']}'";
}
if($this->DEBUG) echo $query;
mysql_query($query);
}
function execute()
{
if($_GET['TableEditorAction']=="sort" && $_GET['sort'])
@ -417,35 +471,21 @@ class TableEditor
|| ($_POST['TableEditorAction']=="addsave") )
{
if($_POST['TableEditorAction']=="addsave") {
$query="INSERT INTO `{$this->table}` (";
//create list of fields to insert
foreach($this->editfields AS $f=>$n)
$query.="`$f`,";
if(count($this->hiddenfields)) {
foreach($this->hiddenfields AS $f=>$n) {
$query.="`$f`,";
}
}
//rip off the last comma
$query=substr($query,0,-1);
$query.=") VALUES (";
if($_POST['TableEditorAction']=="addsave") {
$data = new $this->classname();
$insert_mode = 1;
} else {
$query="UPDATE `{$this->table}` SET ";
print("Insesrt mode=0\n");
$data = new $this->classname($_POST['editsave']);
$insert_mode = 0;
}
$editdata = array();
print_r($_POST);
foreach($this->editfields AS $f=>$n)
{
if($insert_mode) {
$field = '';
} else {
$field = "`$f`=";
}
$inputtype = '';
if(isset($_POST['tableeditor_fieldtype'])) {
if(array_key_exists($f, $_POST['tableeditor_fieldtype'])) {
@ -453,44 +493,48 @@ class TableEditor
}
}
/* //figure out what kind of input this should be
$q=mysql_query("SHOW COLUMNS FROM `{$this->table}` LIKE '$f'");
$r=mysql_fetch_object($q);
*/
if($inputtype == 'date') //r->Type=="date")
{
if($_POST[$f."_year"] && $_POST[$f."_month"] && $_POST[$f."_day"])
{
$query.="${field}'".mysql_escape_string(stripslashes($_POST[$f."_year"]))."-".
mysql_escape_string(stripslashes($_POST[$f."_month"]))."-".
mysql_escape_string(stripslashes($_POST[$f."_day"]))."',";
if($_POST[$f."_year"] && $_POST[$f."_month"] && $_POST[$f."_day"]) {
$editdata[$f] = "'".mysql_escape_string(stripslashes($_POST[$f."_year"]))."-".
mysql_escape_string(stripslashes($_POST[$f."_month"]))."-".
mysql_escape_string(stripslashes($_POST[$f."_day"]))."'";
} else {
$editdata[$f] = 'NULL';
}
else
$query.="${field}null,";
}
else if($inputtype == 'time') //r->Type=="time")
{
if($_POST[$f."_hour"]!="" && $_POST[$f."_minute"]!="")
{
$query.="${field}'".mysql_escape_string(stripslashes($_POST[$f."_hour"])).":".
mysql_escape_string(stripslashes($_POST[$f."_minute"])).":00',";
if($_POST[$f."_hour"]!="" && $_POST[$f."_minute"]!="") {
$editdata[$f] = "'".mysql_escape_string(stripslashes($_POST[$f."_hour"])).":".
mysql_escape_string(stripslashes($_POST[$f."_minute"])).":00'";
} else {
$editdata[$f] = 'NULL';
}
}
else if($inputtype == 'multicheck')
{
/* This one has no direct quoted translation, hope the user specified
* a save routine to handle this */
$editdata[$f] = array();
if($_POST[$f]) {
$a = $_POST[$f];
foreach($a as $k=>$val) {
$editdata[$f][$k] = $val;
}
}
else
$query.="${field}null,";
}
else if(substr($f,0,4)=="sel_")
{
//chose the text field first, if its been filled in, otherwise, go with the select box
if($_POST[$f."_text"])
$query.="${field}'".mysql_escape_string(stripslashes($_POST[$f."_text"]))."',";
$editdata[$f] = "'".mysql_escape_string(stripslashes($_POST[$f."_text"]))."'";
else if($_POST[$f."_select"])
$query.="${field}'".mysql_escape_string(stripslashes($_POST[$f."_select"]))."',";
$editdata[$f] = "'".mysql_escape_string(stripslashes($_POST[$f."_select"]))."'";
else
{
//maybe the options were over-wridden, if so, just check the field name
$query.="${field}'".mysql_escape_string(stripslashes($_POST[$f]))."',";
$editdata[$f] = "'".mysql_escape_string(stripslashes($_POST[$f]))."'";
}
}
@ -500,9 +544,9 @@ class TableEditor
//but allow them to enter http:// or https:// themselves.
//if no protocol is given, assume http://
if(substr(strtolower($_POST[$f]),0,4)=="http")
$query.="${field}'".mysql_escape_string(stripslashes($_POST[$f]))."',";
$editdata[$f] = "'".mysql_escape_string(stripslashes($_POST[$f]))."'";
else
$query.="${field}'http://".mysql_escape_string(stripslashes($_POST[$f]))."',";
$editdata[$f] = "'http://".mysql_escape_string(stripslashes($_POST[$f]))."'";
}
else if(substr($f,0,8)=="filename" && $this->uploadPath)
@ -513,7 +557,7 @@ class TableEditor
if(file_exists($this->uploadPath."/".$_FILES[$f]['name']))
echo error(i18n("A file with that filename already exists, it will be overwritten"));
move_uploaded_file($_FILES[$f]['tmp_name'],$this->uploadPath."/".$_FILES[$f]['name']);
$query.="${field}'".mysql_escape_string(stripslashes($_FILES[$f]['name']))."',";
$editdata[$f] = "'".mysql_escape_string(stripslashes($_FILES[$f]['name']))."'";
}
else
{
@ -521,7 +565,7 @@ class TableEditor
if(is_array($_POST['clear']))
{
if(in_array($f,$_POST['clear']))
$query.="${field}NULL,";
$editdata[$f] = 'NULL';
}
}
@ -529,9 +573,9 @@ class TableEditor
else
{
if($this->fieldValidation[$f])
$query.="${field}'".mysql_escape_string(stripslashes(ereg_replace($this->fieldValidation[$f],"",$_POST[$f])))."',";
$editdata[$f] = "'".mysql_escape_string(stripslashes(ereg_replace($this->fieldValidation[$f],"",$_POST[$f])))."'";
else
$query.="${field}'".mysql_escape_string(stripslashes($_POST[$f]))."',";
$editdata[$f] = "'".mysql_escape_string(stripslashes($_POST[$f]))."'";
}
}
@ -542,26 +586,28 @@ class TableEditor
{
//well well... sometimes we want to use a function here, such as NOW(), so if thats the case then we dont want the ' ' around the value, so, lets check for NOW() and handle it differently
if(strtolower($n)=="now()")
$query.="${field}$n,";
$editdata[$f] = "$n";
else
$query.="${field}'$n',";
$editdata[$f] = "'$n'";
}
}
//rip off the last comma
$query=substr($query,0,-1);
if(method_exists($data, 'tableEditorSave')) {
$data->tableEditorSave($editdata);
} else {
$this->defaultSave($insert_mode, $editdata);
}
if($insertmode) {
$query.=")";
$text_error = "adding new";
$text_happy = "added new";
} else {
$query.=" WHERE {$this->primaryKey}='{$_POST['editsave']}'";
$text_error = "saving";
$text_happy = "saved";
}
if($this->DEBUG) echo $query;
// if($this->DEBUG) echo $query;
// mysql_query($query);
if(mysql_error())
@ -598,17 +644,14 @@ class TableEditor
echo "<h2>".i18n("Edit %1",array($this->recordType))."</h2>";
echo "<input type=\"hidden\" name=\"TableEditorAction\" value=\"editsave\">";
echo "<input type=\"hidden\" name=\"editsave\" value=\"{$_GET['edit']}\">";
$person = new $this->classname($_GET['edit']);
$e = $person->load();
/* $query="SELECT {$this->primaryKey}";
foreach($this->editfields AS $f=>$n)
$query.=", `$f`";
$query.=" FROM `{$this->table}`";
$query.=" WHERE {$this->primaryKey}='{$_GET['edit']}'";
if($this->DEBUG) echo $query;
$editquery=mysql_query($query);
$editdata=mysql_fetch_object($editquery);*/
$editdata = $e;
$data = new $this->classname($_GET['edit']);
if(method_exists($data, 'tableEditorLoad')) {
$editdata = $data->tableEditorLoad();
} else {
$editdata = $this->defaultLoad();
}
}
echo "<table class=\"tableedit\">";
@ -713,6 +756,7 @@ class TableEditor
}
echo "<input type=\"checkbox\" name=\"{$f}[$k]\" value=\"1\" $ch> {$this->fieldOptions[$f][$k]}<br>";
}
echo "<input type=\"hidden\" name=\"tableeditor_fieldtype[$f]\" value=\"multicheck\">";
break;
case "date":