ok, so every time i work on this I understand a bit more about osticket. this is a complex program for a newbie!! I love it!!
Anyway, I have found that when I created the 'update2' section in class.ticket.php (mentioned, however not expanded upon earlier) I removed a bit that wasn't supposed to come out in an attempt to get more than ' ' in my database. well it worked, kinda. I got 'clist' instead. just figured this out, so now i'm back to ' '. Heres the code if it helps anyone:
function update($var,&$errors) {
global $cfg,$thisuser;
$fields=array();
$fields = array('type'=>'string', 'required'=>1, 'error'=>'Name required');
$fields = array('type'=>'email', 'required'=>0, 'error'=>'Email is required');
$fields = array('type'=>'string', 'required'=>0, 'error'=>'Business Name required'); //added field
$fields = array('type'=>'text', 'required'=>0, 'error'=>'Valid address required'); //added field
$fields = array('type'=>'text', 'required'=>0, 'error'=>'Valid city required'); //added field
$fields = array('type'=>'text', 'required'=>0, 'error'=>'Valid state required'); //added field
$fields = array('type'=>'text', 'required'=>0, 'error'=>'Valid zip code required'); //added field
$fields = array('type'=>'text', 'required'=>0, 'error'=>'Please enter machine Brand'); //added field
$fields = array('type'=>'text', 'required'=>0, 'error'=>'Please enter machine model'); //added field
$fields = array('type'=>'text', 'required'=>0, 'error'=>'Please enter machine Serial #'); //added field
$fields = array('type'=>'text', 'required'=>0, 'error'=>'Please enter your Operating System'); //added field
$fields = array('type'=>'text', 'required'=>0, 'error'=>'Enter your password'); //added field
$fields = array('type'=>'text', 'required'=>0, 'error'=>'sign your name'); //added field
$fields = array('type'=>'text', 'required'=>0, 'error'=>'Reason for the update required');
$fields = array('type'=>'string', 'required'=>1, 'error'=>'Subject required');
$fields = array('type'=>'int', 'required'=>0, 'error'=>'Invalid Selection');
$fields = array('type'=>'int', 'required'=>0, 'error'=>'Invalid Priority');
$fields = array('type'=>'phone', 'required'=>1, 'error'=>'Valid phone # required');
$fields = array('type'=>'date', 'required'=>0, 'error'=>'Invalid date - must be MM/DD/YY');
$params = new Validator($fields);
if(!$params->validate($var)){
$errors=array_merge($errors,$params->errors());
}
if($var){
if($this->isClosed())
$errors='Duedate can NOT be set on a closed ticket';
elseif(!$var || strpos($var,':')===false)
$errors='Select time';
elseif(strtotime($var.' '.$var)===false)
$errors='Invalid duedate';
elseif(strtotime($var.' '.$var)<=time())
$errors='Due date must be in the future';
}
//Make sure phone extension is valid
if($var ) {
if(!is_numeric($var) && !$errors)
$errors='Invalid phone ext.';
elseif(!$var) //make sure they just didn't enter ext without phone #
$errors='Phone number required';
}
$cleartopic=false;
$topicDesc='';
if($var && ($topic= new Topic($var)) && $topic->getId()) {
$topicDesc=$topic->getName();
}elseif(!$var && $this->getTopicId()){
$topicDesc='';
$cleartopic=true;
}
if(!$errors){
$sql='UPDATE '.TICKET_TABLE.' SET updated=NOW() '.
',email='.db_input($var).
',name='.db_input(Format:($var)).
',bname='.db_input(Format:($var)). //added field
',address='.db_input($var). //added field
',city='.db_input($var). //added field
',state='.db_input($var). //added field
',zip='.db_input($var). //added field
',make='.db_input($var). //added field
',model='.db_input($var). //added field
',serial='.db_input($var). //added field
',OS='.db_input($var). //added field
',pass='.db_input($var). //added field
',sig='.db_input($var). //added field
',subject='.db_input(Format:($var)).
',phone="'.db_input($var,false).'"'.
',phone_ext='.db_input($var?$var).
',priority_id='.db_input($var).
',topic_id='.db_input($var).
',duedate='.($var?db_input(date('Y-m-d G',Misc:($var.' '.$var))):'NULL');
if($var) { //We are setting new duedate...
$sql.=',isoverdue=0';
}
if($topicDesc || $cleartopic) { //we're overwriting previous topic.
$sql.=',helptopic='.db_input($topicDesc);
}
$sql.=' WHERE ticket_id='.db_input($this->getId());
//echo $sql;
if(db_query($sql)){
//$this->postNote('Ticket Updated',$var);
$this->reload();
return true;
}
}
return false;
}
function update2($var,&$errors) {
global $cfg,$thisuser;
$fields=array();
$fields = array('type'=>'text', 'required'=>0, 'error'=>'enter a number'); //added field
$fields = array('type'=>'text', 'required'=>0, 'error'=>'check a box'); //added field
$params = new Validator($fields);
if(!$params->validate($var)){
$errors=array_merge($errors,$params->errors());
}
$cleartopic=false;
$topicDesc='';
if($var && ($topic= new Topic($var)) && $topic->getId()) {
$topicDesc=$topic->getName();
}elseif(!$var && $this->getTopicId()){
$topicDesc='';
$cleartopic=true;
}
if(!$errors){
$sql='UPDATE '.TICKET_TABLE.' SET updated=NOW() '.
',malinfect='.db_input($var). //added field
',clist='.db_input($var); //added field
if($topicDesc || $cleartopic) { //we're overwriting previous topic.
$sql.=',helptopic='.db_input($topicDesc);
}
$sql.=' WHERE ticket_id='.db_input($this->getId());
//echo $sql;
if(db_query($sql)){
//$this->postNote('Ticket Updated',$var);
$this->reload();
return true;
}
}
return false;
}
I also included the original "update" function for reference (complete with all the other fields i have added successfully!)
I think this kinda points to my problem though... I think somewhere in osticket it is stripping stuff from the string before it hits the database. I understand there is a good reason for this behavior (sql injection attacks) but I gotta get around it.
So perhaps someone has had a similar problem of getting data to the database and they would share a work around? It would be greatly appreciated.
Also i searched before, and at least one other person wanted to do something similar. So if anything in here can help the community, i'm all about it! might try to make this a bit more reader friendly after I figure it out...