From 1a2b3d7faffb68085edfd5567d99be361c1a3a24 Mon Sep 17 00:00:00 2001 From: dave Date: Mon, 16 Oct 2006 06:21:20 +0000 Subject: [PATCH] - 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. --- judge.class.php | 104 +++++++++++++++++++-- tableeditor.class.php | 206 +++++++++++++++++++++++++----------------- 2 files changed, 219 insertions(+), 91 deletions(-) diff --git a/judge.class.php b/judge.class.php index b3fdb0e..c8a1d27 100644 --- a/judge.class.php +++ b/judge.class.php @@ -1,21 +1,33 @@ 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); + + } + } diff --git a/tableeditor.class.php b/tableeditor.class.php index f23be62..590a64b 100644 --- a/tableeditor.class.php +++ b/tableeditor.class.php @@ -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 "

".i18n("Edit %1",array($this->recordType))."

"; echo ""; echo ""; - $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 ""; @@ -713,6 +756,7 @@ class TableEditor } echo " {$this->fieldOptions[$f][$k]}
"; } + echo ""; break; case "date":