diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mail_handler.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mail_handler.php index 19869abde..ff629e9ee 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mail_handler.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/mail_handler.php @@ -42,7 +42,7 @@ class Mail_Handler{ } - public static function send_mail($recipient, $subject, $body, $ticket_id = 0, $from = 1) { + public static function send_mail($recipient, $subject, $body, $ticket_id = 0, $from = NULL) { if(is_numeric($recipient)) { $id_user = $recipient; $recipient = NULL; @@ -134,6 +134,7 @@ class Mail_Handler{ // Check mail $sGroups = Support_Group::getGroups(); $defaultGroup = new Support_Group(); + $defaultGroup->setSGroupId(0); $defaultGroup->setGroupEmail($default_groupemail); $defaultGroup->setIMAP_MailServer($cfg['mail']['default_mailserver']); $defaultGroup->setIMAP_Username($cfg['mail']['default_username']); @@ -148,7 +149,7 @@ class Mail_Handler{ for ($i = 1; $i <= $message_count; ++$i) { //return task ID - self::incoming_mail_handler($mbox, $i); + self::incoming_mail_handler($mbox, $i,$group); $tid = 1; //self::ams_create_email($from, $subject, $txt, $html, $to, $from); if($tid) { @@ -182,19 +183,36 @@ class Mail_Handler{ function get_ticket_id_from_subject($subject){ $startpos = strpos($subject, "[Ticket #"); - $tempString = substr($subject, $startpos+9); - $endpos = strpos($tempString, "]"); - $ticket_id = substr($tempString, 0, $endpos); + if($startpos){ + $tempString = substr($subject, $startpos+9); + $endpos = strpos($tempString, "]"); + if($endpos){ + $ticket_id = substr($tempString, 0, $endpos); + }else{ + $ticket_id = 0; + } + }else{ + $ticket_id = 0; + } return $ticket_id; } - function incoming_mail_handler($mbox,$i){ + function incoming_mail_handler($mbox,$i,$group){ $header = imap_header($mbox, $i); $subject = self::decode_utf8($header->subject); + $entire_email = imap_fetchheader($mbox, $i) . imap_body($mbox, $i); + $subject = self::decode_utf8($header->subject); + $to = $header->to[0]->mailbox; + $from = $header->from[0]->mailbox . '@' . $header->from[0]->host; + $txt = self::get_part($mbox, $i, "TEXT/PLAIN"); + //$html = self::get_part($mbox, $i, "TEXT/HTML"); - print_r($header); + //get the id out of the email address of the person sending the email. + if($from !== NULL && !is_numeric($from)){ + $from = Ticket_User::get_id_from_email($from); + } //get ticket_id out of the message-id or else out of the subject line $ticket_id = 0; @@ -209,16 +227,9 @@ class Mail_Handler{ $ticket_id = self::get_ticket_id_from_subject($subject); } - //if ticket id is found + //if ticket id is found, that means it is a reply on an existing ticket if($ticket_id){ - $entire_email = imap_fetchheader($mbox, $i) . imap_body($mbox, $i); - $subject = self::decode_utf8($header->subject); - $to = $header->to[0]->mailbox; - $from = $header->from[0]->mailbox . '@' . $header->from[0]->host; - $txt = self::get_part($mbox, $i, "TEXT/PLAIN"); - //$html = self::get_part($mbox, $i, "TEXT/HTML"); - //use the line ---------- Ticket # to make a distincton between the old message and the reply $endpos = strpos($txt, ">---------- Ticket #"); if($endpos){ @@ -230,18 +241,32 @@ class Mail_Handler{ } } + //if email is sent from an existing email address in the db (else it will give an error while loading the user object) + if($from != "FALSE"){ + $user = new Ticket_User(); + $user->load_With_TUserId($from); + $ticket = new Ticket(); + $ticket->load_With_TId($ticket_id); + + //if user has access to it! + if((Ticket_User::isMod($user) or ($ticket->getAuthor() == $user->getTUserId())) and $txt != ""){ + Ticket::createReply($txt, $user->getTUserId(), $ticket->getTId(), 0); + } + } - //get the id out of the email address of the person sending the email. - if($from !== NULL && !is_numeric($from)) $from = Ticket_User::get_id_from_email($from); + }else{ - $user = new Ticket_User(); - $user->load_With_TUserId($from); - $ticket = new Ticket(); - $ticket->load_With_TId($ticket_id); + //if ticket_id isn't found, create a new ticket! - //if user has access to it! - if((Ticket_User::isMod($user) or ($ticket->getAuthor() == $user->getTUserId())) and $txt != ""){ - Ticket::createReply($txt, $user->getTUserId(), $ticket->getTId(), 0); + //if an existing email address mailed the ticket + if($from != "FALSE"){ + + $newTicketId = Ticket::create_Ticket($subject, $txt,1, $from, $from); + + //if not default group, then forward it! + if($group->getSGroupId()){ + Ticket::forwardTicket(0, $newTicketId, $group->getSGroupId()); + } } } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php index a9bceacd3..cba0d1211 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket.php @@ -197,12 +197,15 @@ class Ticket{ public static function forwardTicket($user_id, $ticket_id, $group_id){ if(self::ticketExists($ticket_id)){ if(isset($group_id) && $group_id != ""){ - //unassign the ticket incase the ticket is assined to yourself - self::unAssignTicket($user_id, $ticket_id); //forward the ticket $returnvalue = Forwarded::forwardTicket($group_id, $ticket_id); - //make a log entry of this action - Ticket_Log::createLogEntry( $ticket_id, $user_id, 8, $group_id); + + if($user_id != 0){ + //unassign the ticket incase the ticket is assined to yourself + self::unAssignTicket($user_id, $ticket_id); + //make a log entry of this action + Ticket_Log::createLogEntry( $ticket_id, $user_id, 8, $group_id); + } return $returnvalue; }else{ return "INVALID_SGROUP"; diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php index fe3529925..6772dd216 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/ticket_user.php @@ -98,8 +98,12 @@ class Ticket_User{ public static function get_id_from_email($email){ $webUserId = WebUsers::getIdFromEmail($email); - $user = Ticket_User::constr_ExternId($webUserId); - return $user->getTUserId(); + if($webUserId != "FALSE"){ + $user = Ticket_User::constr_ExternId($webUserId); + return $user->getTUserId(); + }else{ + return "FALSE"; + } } diff --git a/code/ryzom/tools/server/ryzom_ams/www/config.php b/code/ryzom/tools/server/ryzom_ams/www/config.php index 13e6e37bb..8cac58fe0 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/config.php +++ b/code/ryzom/tools/server/ryzom_ams/www/config.php @@ -46,6 +46,7 @@ $cfg['mail']['default_groupemail'] = 'support@ryzomcore.com'; $cfg['mail']['default_groupname'] = 'Ryzomcore Support'; $cfg['mail']['default_username'] = 'amsryzom@gmail.com'; $cfg['mail']['default_password'] = 'lol123bol'; +$cfg['mail']['host'] = "ryzomcore.com"; //----------------------------------------------------------------------------------------- // If true= the server will add automatically unknown user in the database diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/autoload/webusers.php b/code/ryzom/tools/server/ryzom_ams/www/html/autoload/webusers.php index 014864e2a..58856a5ce 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/autoload/webusers.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/autoload/webusers.php @@ -81,7 +81,11 @@ class WebUsers extends Users{ $dbw = new DBLayer("web"); $statement = $dbw->execute("SELECT * FROM ams_user WHERE Email=:email", array('email' => $email)); $row = $statement->fetch(); - return $row['UId']; + if($row !== "FALSE"){ + return $row['UId']; + }else{ + return "FALSE"; + } } public function getUId(){ diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php index acfdb3987..c593ec4ad 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php +++ b/code/ryzom/tools/server/ryzom_ams/www/html/sql/install.php @@ -273,7 +273,7 @@ ON UPDATE NO ACTION) ENGINE = InnoDB; - INSERT IGNORE INTO `" . $cfg['db']['lib']['name'] ."`.`ticket_category` (`Name`) VALUES ('Hacking'),('Ingame-Bug'),('Website-Bug'),('Installation'); + INSERT IGNORE INTO `" . $cfg['db']['lib']['name'] ."`.`ticket_category` (`Name`) VALUES ('Uncategorized'),('Hacking'),('Ingame-Bug'),('Website-Bug'),('Installation'); @@ -374,7 +374,7 @@ CONSTRAINT `fk_email_support_group1` FOREIGN KEY (`Sender` ) REFERENCES `" . $cfg['db']['lib']['name'] ."`.`support_group` (`SGroupId` ) - ON DELETE NO ACTION + ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql index 66059fa8d..eb95f792b 100644 --- a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql +++ b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsql.sql @@ -310,7 +310,7 @@ CREATE TABLE IF NOT EXISTS `mydb`.`email` ( `Status` VARCHAR(45) NULL , `Attempts` VARCHAR(45) NULL DEFAULT 0 , `UserId` INT(10) UNSIGNED NOT NULL , - `MessageId` VARCHAR(45) NOT NULL , + `MessageId` VARCHAR(45) NULL , `TicketId` INT UNSIGNED NOT NULL , `Sender` INT(10) UNSIGNED NULL , PRIMARY KEY (`MailId`) , @@ -330,7 +330,7 @@ CREATE TABLE IF NOT EXISTS `mydb`.`email` ( CONSTRAINT `fk_email_support_group1` FOREIGN KEY (`Sender` ) REFERENCES `mydb`.`support_group` (`SGroupId` ) - ON DELETE NO ACTION + ON DELETE CASCADE ON UPDATE NO ACTION) ENGINE = InnoDB; diff --git a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb index 47b014bc9..4e9f85fa4 100644 Binary files a/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb and b/code/ryzom/tools/server/ryzom_ams/www/html/sql/ticketsystemmodel.mwb differ