osticket
// Instructions:
// 1) In osTicket, define all reps that are defined in eTicket as staff. Use the same userid.
// 2) Make sure all the categories defined in eTicket have an equivalent topic in osTicket
// 3) Change the connection information for the databases appropriately in this script.
//
//
// 1) En osTicket, definir todas las repeticiones que se definen en eTicket como personal. Utilice el mismo ID de usuario.
// 2) Asegúrese de que todas las categorías definidas en el boleto electrónico tienen un tema equivalente en osTicket
// 3) Cambie la información de conexión de las bases de datos adecuada en este script.
//
//
//
// Caveats: Attachments are not transferred.
// This is tested with osTicket release 1.8 and eTicket 1.7.3
// Use this at your own risk
// open databases
$eticketDB=mysql_connect('localhost','root','test');
$osticketDB=mysql_connect('localhost','root','test',true);
//mysql_select_db('eticket',$eticketDB);//local
mysql_select_db('e_helpdesk',$eticketDB);//copia producción
mysql_select_db('osticket',$osticketDB);
$MigrateTickets = new MgrateTickets();
// form_id for for issue summary
$form_id_issue=5; // not sure this would change, but it could.
// create a staff_id (osticket) to rep_id (eticket) equivalence based on user names
$repStaff=array(); // set up array so that $repStaff[eticketrep]=osticket_staff
$sql="SELECT * FROM ticket_reps";
$rs=mysql_query($sql,$eticketDB);
while ($row=mysql_fetch_array($rs,MYSQL_ASSOC)) {
$username=$row['username'];
$eticketRep=$row['ID'];
$sql="SELECT staff_id FROM ost_staff WHERE username='$username'";
$rs2=mysql_query($sql,$osticketDB);
if (mysql_num_rows($rs2)==0) {
die("Unable to find $username in osticket staff with $sql");
}
$staffRow=mysql_fetch_array($rs2,MYSQL_ASSOC);
$staff_id=$staffRow['staff_id'];
$repStaff[$eticketRep]=$staff_id;
}
// create a category->help topic equivalence
$catTopic=array();
$sql="SELECT * FROM ticket_categories";
$rs=mysql_query($sql,$eticketDB);
while ($row=mysql_fetch_array($rs,MYSQL_ASSOC)) {
$catname=$row['name'];
$catID=$row['ID'];
$sql="SELECT topic_id FROM ost_help_topic WHERE topic LIKE '$catname'";
$rs2=mysql_query($sql,$osticketDB);
if (mysql_num_rows($rs2)==0) {
die("Unable to find $catname in osticket staff");
}
$topicRow=mysql_fetch_array($rs2,MYSQL_ASSOC);
$topic_id=$topicRow['topic_id'];
$catTopic[$catID]=$topic_id;
}
$eticketCount=0;
$sql="SELECT * FROM tickets";
$rs=mysql_query($sql,$eticketDB);
while ($row=mysql_fetch_array($rs,MYSQL_ASSOC)) {
$subject = $row['subject'];
$username=$row['name'];
$email=$row['email'];
$phone=$row['phone'];
$priority_id =$row['priority'];
// get osticket user number based on email
$sql="SELECT * from ost_user_email WHERE address='$email'";
$rs2=mysql_query($sql,$osticketDB);
if (mysql_num_rows($rs2)) { // we found the guy
$userRow=mysql_fetch_array($rs2,MYSQL_ASSOC);
$user_id=$userRow['user_id'];
$email_id=$userRow['id'];
}
else { // let's add him
$sql="INSERT INTO ost_user_email VALUES (NULL,0,'$email')";
mysql_query($sql,$osticketDB);
$email_id=mysql_insert_id();
$username=mysql_real_escape_string($username);
$sql="INSERT INTO ost_user VALUES (NULL,$email_id,'$username',CURDATE(),CURDATE())";
mysql_query($sql,$osticketDB);
$user_id=mysql_insert_id();
$sql="UPDATE ost_user_email SET user_id=$user_id WHERE id=$email_id";
mysql_query($sql,$osticketDB);
}
// assignments
$ticketID=$row['ID']; // reuse etickets random number.
if (isset($catTopic[$row['cat']])) $topic_id=$catTopic[$row['cat']];
else $topic_id=0; // if not found, use 0
if (isset($repStaff[$row['rep']])) $staff_id=$repStaff[$row['rep']];
else $staff_id=0; // if not found use 0
switch ($row['status']) {
case 'new':
$status='open';
$isanswered=0;
$closed='NULL';
break;
case 'closed':
$status='closed';
$isanswered=1;
break;
case 'awaitingcustomer':
$status='open';
$isanswered=1;
$closed='NULL';
break;
case 'onhold':
$status='open';
$isanswered=1;
$closed='NULL';
break;
case 'onhold':
$status='custreplied';
$status='open';
$isanswered=1;
$closed='NULL';
break;
default:
;
} // switch
$created=$row['timestamp'];
$subject=mysql_real_escape_string($row['subject']);
$sql="select * from ost_ticket where number = $ticketID";
$result=mysql_query($sql,$osticketDB);
$arrResult = mysql_fetch_array($result,MYSQL_ASSOC);
if(!$arrResult){
$sql="INSERT INTO ost_ticket (ticket_id,number,user_id,user_email_id,dept_id,sla_id,topic_id,staff_id,team_id,ip_address,status,
source,isoverdue,isanswered,duedate,reopened,created,updated)
VALUES (NULL,$ticketID,$user_id,$email_id,2,1,$topic_id,$staff_id,0,'127.0.0.1','$status',
'Other',0,$isanswered,NULL,NULL,'$created','0000-00-00')";
$result=mysql_query($sql,$osticketDB);
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $sql;
die($message);
}
switch ($priority_id) {
case '1':
$priority = 'Low';
break;
case '2':
$priority = 'Normal';
break;
case '3':
$priority = 'High';
break;
}
//add subjetc
$ticket_id=mysql_insert_id($osticketDB);
$sql="INSERT INTO ost_ticket__cdata(ticket_id,subject,priority,priority_id)
VALUES($ticket_id,'$subject','$priority',$priority_id)";
$result=mysql_query($sql,$osticketDB);
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $sql;
die($message);
}
//--------------start collect all de thread
$sql="select a.ID, a.ticket, a.message, a.headers, a.timestamp, b.email from ticket_messages a
join tickets b on a.ticket = b.ID where ticket = $ticketID order by a.timestamp asc";
$queryMessages = mysql_query($sql,$eticketDB);
while($arrayMessages=mysql_fetch_array($queryMessages,MYSQL_ASSOC)){
//consult to get user id
$user = $MigrateTickets->datasuser($arrayMessages['email'],$osticketDB);
$userId = $user["user_id"];
$ticketId = $arrayMessages['ID'];
$numberTicket = $arrayMessages['ticket'];
$Message = $arrayMessages['message'];
$body=mysql_real_escape_string($Message);
$timestampMsg = $arrayMessages['timestamp'];
$tIp = $MigrateTickets->getip($numberTicket,$eticketDB);
//add mesajes
$sql="INSERT INTO ost_ticket_thread (id,pid,ticket_id,staff_id,user_id,thread_type,poster,source,title,body,ip_address,created,updated)
VALUES (0, 0, $ticket_id, 0, $userId, 'M', '','','','$body','$tIp','$timestampMsg','0000-00-00')";
mysql_query($sql,$osticketDB);
}
$sql="select * from ticket_answers
where ticket = $ticketID order by timestamp asc";
$queryAnswers = mysql_query($sql,$eticketDB);
while($arrysAnswers=mysql_fetch_array($queryAnswers,MYSQL_ASSOC)){
$ticketId = $arrysAnswers['ID'];
$numberTicket = $arrysAnswers['ticket'];
$repId = $arrysAnswers['rep'];
$Message = $arrysAnswers['message'];
$body=mysql_real_escape_string($Message);
$timestampMsg = $arrysAnswers['timestamp'];
//
$pid = $MigrateTickets->getpid($arrysAnswers['reference'],$eticketDB,$osticketDB);
//add mesajes
$sql="INSERT INTO ost_ticket_thread (id,pid,ticket_id,staff_id,user_id,thread_type,poster,source,title,body,ip_address,created,updated)
VALUES (0, $pid, $ticket_id, $repId, 0, 'R', '','','','$body','127.0.0.1','$timestampMsg','0000-00-00')";
mysql_query($sql,$osticketDB);
}
//-------------------end collect all de thread
//$ticket_id=mysql_insert_id($osticketDB);
// add issue summary
mysql_query("INSERT INTO ost_form_entry VALUES (NULL,2,$ticket_id,'T',1,'$created','$created')"); // get form entry
$form_entry=mysql_insert_id($osticketDB);
mysql_query("INSERT INTO ost_form_entry_values VALUES ($form_entry,$form_id_issue,'$subject',NULL)");
echo "
ticket $ticket_id for $ticketID created";
if ($status=='closed') {
if (empty($timestamp)) {
$result=mysql_query("UPDATE ost_ticket SET closed = '$created' WHERE ticket_id='$ticket_id'",$osticketDB);
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $sql;
die($message);
}
}
else {
$result=mysql_query("UPDATE ost_ticket SET closed = '$timestamp' WHERE ticket_id='$ticket_id'",$osticketDB);
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $sql;
die($message);
}
}
}
if (!empty($timestamp) && $thread_type=='R') mysql_query("UPDATE ost_titcket SET lastresponse = '$timestamp',updated='$timestamp' WHERE ticket_id='$ticket_id'",$osticketDB);
$eticketCount++;
}
}
//$ressArtt = $MigrateTickets->migrateAttachments($eticketDB,$osticketDB);
echo "
$eticketCount tickets converted";
class MgrateTickets{
/**
* Return data fron an user whit his email registered.
*/
public function datasuser($mail,$osticketDB){
$sql="select * from ost_user_email where address ='$mail'";
$query = mysql_query($sql,$osticketDB);
$resDatos=mysql_fetch_array($query,MYSQL_ASSOC);
return $resDatos;
}
/**
* Return the pid from a answer before to insert.
*/
public function getpid($ticketId, $eticketDB,$osticketDB){
//locate the reference of this answer from ticket_messages
$result=mysql_query("select * from ticket_messages where ID = $ticketId",$eticketDB);
$arrysAnswer=mysql_fetch_array($result,MYSQL_ASSOC);
$created = $arrysAnswer['timestamp'];
//locate the ID parent
$result=mysql_query("select id from ost_ticket_thread where created = '$created'",$osticketDB);
$pid=mysql_fetch_array($result,MYSQL_ASSOC);
return $pid['id'];
}
public function getip($numberTicket,$eticketDB){
$result=mysql_query("select * from tickets where ID = $numberTicket",$eticketDB);
$arrysAnswer=mysql_fetch_array($result,MYSQL_ASSOC);
return $tIp = $arrysAnswer['ip'];
}
public function migrateAttachments($eticketDB,$osticketDB){
$resEtickets = mysql_query("select * from ticket_attachments",$eticketDB);
while($arryresAttachs=mysql_fetch_array($resEtickets,MYSQL_ASSOC)){
$ticketNumber = $arryresAttachs['ticket'];
$refTicket = $arryresAttachs['ref'];
$fileName = $arryresAttachs['filename'];
$type = $arryresAttachs['type'];
if($type == 'q'){
}
$resAtt=mysql_query("select * from eticket.ticket_attachments where ticket = $ticketNumber",$eticketDB);
$arryresAtt=mysql_fetch_array($resAtt,MYSQL_ASSOC);
$resMesgs=mysql_query("select * from ticket_messages where ticket = $ticketNumber",$eticketDB);
$arryresMesgs=mysql_fetch_array($resMesgs,MYSQL_ASSOC);
$resAns=mysql_query("select * from ticket_answers where ticket = $ticketNumber",$eticketDB);
$arryresAns=mysql_fetch_array($resAns,MYSQL_ASSOC);
}
return true;
}
}
?>