From e058a475f9425d70d4956c9b3a150e0bcd0752be Mon Sep 17 00:00:00 2001 From: Quitta Date: Sun, 11 Aug 2013 03:55:07 +0200 Subject: [PATCH] basis seems to run in terminal, however mail() doesn't work yet --HG-- branch : quitta-gsoc-2013 --- .../ams_lib/autoload/mail_handler.php | 30 +++++++++-------- .../ryzom_ams/ams_lib/cron/mail_cron.php | 7 ++++ .../server/ryzom_ams/ams_lib/libinclude.php | 6 +++- .../server/ryzom_ams/www/html/sql/install.php | 31 ++++++++++++++++++ .../ryzom_ams/www/html/sql/ticketsql.sql | 31 ++++++++++++++++++ .../www/html/sql/ticketsystemmodel.mwb | Bin 16223 -> 16265 bytes 6 files changed, 91 insertions(+), 14 deletions(-) create mode 100644 code/ryzom/tools/server/ryzom_ams/ams_lib/cron/mail_cron.php 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 59daad5c1..67a90114b 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 @@ -4,13 +4,13 @@ class Mail_Handler{ private $db; - function mail_fork() { + public function mail_fork() { /*global $db; $db = NULL; $pid = pcntl_fork(); oms_db_connect(); return $pid;*/ - $this->db = new DBLayer("lib"); + //Start a new thread and return the thread id! $pid = pcntl_fork(); return $pid; @@ -45,14 +45,14 @@ class Mail_Handler{ $user = new Ticket_User(); $user->load_With_TUserId($id); $webUser = new WebUsers($user->getExternId()); - return $webUsers->getEmail(); + return $webUser->getEmail(); } function get_username_from_id($id){ $user = new Ticket_User(); $user->load_With_TUserId($id); $webUser = new WebUsers($user->getExternId()); - return $webUsers->getUsername(); + return $webUser->getUsername(); } @@ -67,7 +67,7 @@ class Mail_Handler{ - function mail_cron() { + function cron() { global $cfg; $inbox_username = $cfg['mail']['username']; $inbox_password = $cfg['mail']['password']; @@ -79,7 +79,7 @@ class Mail_Handler{ echo("mail cron\n"); //creates child process - $pid = mail_fork(); + $pid = self::mail_fork(); $pidfile = '/tmp/ams_cron_email_pid'; //INFO: if $pid = @@ -92,10 +92,12 @@ class Mail_Handler{ // We're the parent process, do nothing! } else { + //make db connection here because the children have to make the connection. + $this->db = new DBLayer("lib"); //if $pidfile doesn't exist yet, then start sending the mails that are in the db. if(!file_exists($pidfile)) { - + //create the file and write the child processes id in it! $pid = getmypid(); $file = fopen($pidfile, 'w'); @@ -107,24 +109,26 @@ class Mail_Handler{ $statement = $this->db->executeWithoutParams("select * from email where Status = 'NEW' or Status = 'FAILED'"); $emails = $statement->fetchAll(); - foreach($emails as $email) { - $message_id = new_message_id(); + $message_id = self::new_message_id(); //if recipient isn't given, then use the email of the id_user instead! echo("Emailing {$email['Recipient']}\n"); if(!$email['Recipient']) { - $email['Recipient'] = get_email_by_user_id($email['UserId']); + $email['Recipient'] = self::get_email_by_user_id($email['UserId']); } //create sending email adres based on the $sender id if($email['Sender']) { - $username = get_username_from_id($email['Sender']); + $username = self::get_username_from_id($email['Sender']); $from = "$username <$username@$inbox_host>"; } else { $from = $oms_reply_to; } $headers = "From: $from\r\n" . "Message-ID: " . $message_id; - + print("recip: " . $email['Recipient']); + print("subj: " .$email['Subject']); + print("body: " . $email['Body']); + print("headers: " . $headers); if(mail($email['Recipient'], $email['Subject'], $email['Body'], $headers)) { $status = "DELIVERED"; echo("Emailed {$email['Recipient']}\n"); @@ -178,7 +182,7 @@ class Mail_Handler{ global $cfg; global $ams_mail_count; $ams_mail_count = ($ams_mail_count == '') ? 1 : $ams_mail_count + 1; - return ""; + return ""; } diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/cron/mail_cron.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/cron/mail_cron.php new file mode 100644 index 000000000..9d669e866 --- /dev/null +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/cron/mail_cron.php @@ -0,0 +1,7 @@ +cron(); \ No newline at end of file diff --git a/code/ryzom/tools/server/ryzom_ams/ams_lib/libinclude.php b/code/ryzom/tools/server/ryzom_ams/ams_lib/libinclude.php index 0d8606488..e5deb6030 100644 --- a/code/ryzom/tools/server/ryzom_ams/ams_lib/libinclude.php +++ b/code/ryzom/tools/server/ryzom_ams/ams_lib/libinclude.php @@ -3,6 +3,10 @@ // Base include file for library functions for AMS // *********************************************** function __autoload( $className ){ - require_once 'autoload/' . strtolower ( $className ) . '.php'; + if(file_exists( '/home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/ams_lib/autoload/' . strtolower ( $className ) . '.php')){ + require_once 'autoload/' . strtolower ( $className ) . '.php'; + } + if($className == "WebUsers") + require_once '/home/daan/ryzom/ryzomcore/code/ryzom/tools/server/ryzom_ams/www/html/autoload/' . strtolower ( $className ) . '.php'; } 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 317f22f06..80d7f79d8 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 @@ -335,6 +335,37 @@ ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; + + + -- ----------------------------------------------------- + -- Table `" . $cfg['db']['lib']['name'] ."`.`email` + -- ----------------------------------------------------- + DROP TABLE IF EXISTS `" . $cfg['db']['lib']['name'] ."`.`email` ; + + CREATE TABLE IF NOT EXISTS `" . $cfg['db']['lib']['name'] ."`.`email` ( + `MailId` INT NOT NULL AUTO_INCREMENT , + `Recipient` VARCHAR(50) NULL , + `Subject` VARCHAR(60) NULL , + `Body` VARCHAR(400) NULL , + `Status` VARCHAR(45) NULL , + `Attempts` VARCHAR(45) NULL DEFAULT 0 , + `Sender` INT(10) UNSIGNED NOT NULL , + `UserId` INT(10) UNSIGNED NOT NULL , + `MessageId` VARCHAR(45) NOT NULL , + PRIMARY KEY (`MailId`) , + INDEX `fk_email_ticket_user1` (`Sender` ASC) , + INDEX `fk_email_ticket_user2` (`UserId` ASC) , + CONSTRAINT `fk_email_ticket_user1` + FOREIGN KEY (`Sender` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`TUserId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_email_ticket_user2` + FOREIGN KEY (`UserId` ) + REFERENCES `" . $cfg['db']['lib']['name'] ."`.`ticket_user` (`TUserId` ) + ON DELETE NO ACTION + 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 e65c48928..4e8369fbe 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 @@ -293,6 +293,37 @@ CREATE TABLE IF NOT EXISTS `mydb`.`forwarded` ( ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `mydb`.`email` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `mydb`.`email` ; + +CREATE TABLE IF NOT EXISTS `mydb`.`email` ( + `MailId` INT NOT NULL AUTO_INCREMENT , + `Recipient` VARCHAR(50) NULL , + `Subject` VARCHAR(60) NULL , + `Body` VARCHAR(400) NULL , + `Status` VARCHAR(45) NULL , + `Attempts` VARCHAR(45) NULL DEFAULT 0 , + `Sender` INT(10) UNSIGNED NOT NULL , + `UserId` INT(10) UNSIGNED NOT NULL , + `MessageId` VARCHAR(45) NOT NULL , + PRIMARY KEY (`MailId`) , + INDEX `fk_email_ticket_user1` (`Sender` ASC) , + INDEX `fk_email_ticket_user2` (`UserId` ASC) , + CONSTRAINT `fk_email_ticket_user1` + FOREIGN KEY (`Sender` ) + REFERENCES `mydb`.`ticket_user` (`TUserId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_email_ticket_user2` + FOREIGN KEY (`UserId` ) + REFERENCES `mydb`.`ticket_user` (`TUserId` ) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; 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 d5cfd3c7797d9584ad4d38b234955398f2c0423b..19bb4b86a0eb7dd63c2078e0e428a87000d568c3 100644 GIT binary patch delta 14218 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 GlK&qgj>lR6