<?php

/******************************************************************************/

// load the config and prepare to process
include('load_process_emails.php');

/* begin */
$state = 'LOAD_EMAILS';
while ($state <> 'END') {
    if (isset($GLOBALS['logger'])) {
        $GLOBALS['logger']->write('STATE:' . $state, 'INFO');
    }
    switch ($state) {
		
	/**********************************************************************/
    /*                          LOAD_EMAILS 							  */
    /* List the records to proceed       									  */
    /**********************************************************************/
    case 'LOAD_EMAILS' :
		$query = "SELECT * FROM " . EMAILS_TABLE
			. " WHERE email_status = 'W' and send_date is NULL";
		Bt_doQuery($GLOBALS['db'], $query);
		$totalEmailsToProcess = $GLOBALS['db']->nb_result();
		$currentEmail = 0;
		if ($totalEmailsToProcess === 0) {
			Bt_exitBatch(0, 'No e-mails to process');
        }
		$GLOBALS['logger']->write($totalEmailsToProcess . ' e-mails to proceed.', 'INFO');
		$GLOBALS['emails'] = array();
		while ($emailRecordset = $GLOBALS['db']->fetch_object()) {
			$GLOBALS['emails'][] = $emailRecordset;
		}
		$state = 'SEND_AN_EMAIL';
    break;
		
	/**********************************************************************/
    /*                          SEND_AN_EMAIL	 		          	          */
    /* Load parameters and send an e-mail                                    */
    /**********************************************************************/
    case 'SEND_AN_EMAIL' :
		if($currentEmail < $totalEmailsToProcess) {
			$email = $GLOBALS['emails'][$currentEmail];
			$GLOBALS['mailer'] = new htmlMimeMail();
            if($mailerParams->smtp_auth === "true") $smtp_auth = true;
			$GLOBALS['mailer']->setSMTPParams(
				$host = (string)$mailerParams->smtp_host, 
				$port = (string)$mailerParams->smtp_port,
				$helo = (string)$mailerParams->domains,
				$auth = $smtp_auth,
				$user = (string)$mailerParams->smtp_user,
				$pass = (string)$mailerParams->smtp_password
				);
		//Composing email	
			//--> Set from
			$userInfo = $users->get_user($email->user_id);
						$GLOBALS['logger']->write("Sending e-mail from : " 
				. '"' . $userInfo['firstname'].' ' .$userInfo['lastname'] 
				. '" <'.$userInfo['mail'].'>', 'INFO');
				
			$GLOBALS['mailer']->setFrom('"'.$userInfo['firstname'].' '
				. $userInfo['lastname'].' ('.$userInfo['mail'].')" <'.$user.'> ');

			//
			$GLOBALS['logger']->write("Sending e-mail to : " . $email->to_list, 'INFO');
			if (!empty($email->cc_list))$GLOBALS['logger']->write("Copy e-mail to : " . $email->cc_list, 'INFO');
			if (!empty($email->cci_list))$GLOBALS['logger']->write("Copy invisible e-mail to : " . $email->cci_list, 'INFO');
			
			//--> Set the return path
			$GLOBALS['mailer']->setReturnPath($userInfo['mail']);
			//--> To
			$to = array();
			$to = explode(',', $email->to_list);
			//--> Cc
			if (!empty($email->cc_list)) {
				$GLOBALS['mailer']->setCc($email->cc_list);
			}
			//--> Cci
			if (!empty($email->cci_list)) {
				$GLOBALS['mailer']->setBcc($email->cci_list);
			}
			//--> Set subject
			$GLOBALS['logger']->write("Subject : " . $email->email_object, 'INFO');
			$GLOBALS['mailer']->setSubject($email->email_object);
			//--> Set body: Is Html/raw text ?
			if ($email->is_html == 'Y') {
				$body = str_replace('###', ';', $email->email_body);
				$body = str_replace('___', '--', $body);
				$GLOBALS['mailer']->setHtml($body);
			} else {
				$GLOBALS['mailer']->setText($email->email_body);
			}
			//--> Set charset
			$GLOBALS['mailer']->setTextCharset($GLOBALS['charset']);
			$GLOBALS['mailer']->setHtmlCharset($GLOBALS['charset']);
			$GLOBALS['mailer']->setHeadCharset($GLOBALS['charset']);
			
			//--> Set attachments
				//Res master
				if ($email->is_res_master_attached == 'Y') {
					$GLOBALS['logger']->write("Set attachment on res master : " . $email->res_id, 'INFO');

					//Get file from docserver
					$resFile = $sendmail_tools->getResource($GLOBALS['collections'], $email->coll_id, $email->res_id);
					//Get file content
					if(is_file($resFile['file_path'])) {
						//Filename
						$resFilename = $sendmail_tools->createFilename($resFile['label'], $resFile['ext']);
						$GLOBALS['logger']->write("Set attachment filename : " . $resFilename, 'INFO');

						//File content
						$file_content = $GLOBALS['mailer']->getFile($resFile['file_path']);
						//Add file
						$GLOBALS['mailer']->addAttachment($file_content, $resFilename, $resFile['mime_type']); 
					}
				}
				
				//Res attachment
				if (!empty($email->res_attachment_id_list)) {
                    $attachments = explode(',', $email->res_attachment_id_list);
					foreach($attachments as $attachment_id) {
						$GLOBALS['logger']->write("Set attachment on res attachment : " . $attachment_id, 'INFO');
						$attachmentFile = $sendmail_tools->getAttachment(
								$email->coll_id, 
								$email->res_id,
								$attachment_id
							);
						if(is_file($attachmentFile['file_path'])) {
							//Filename
							$attachmentFilename = $sendmail_tools->createFilename($attachmentFile['label'], $attachmentFile['ext']);
							$GLOBALS['logger']->write("Set attachment filename : " . $attachmentFilename, 'INFO');

							//File content
							$file_content = $GLOBALS['mailer']->getFile($attachmentFile['file_path']);
							//Add file
							$GLOBALS['mailer']->addAttachment($file_content, $attachmentFilename, $attachmentFile['mime_type']); 
						}
					}
                }
				
				//Notes
				if (!empty($email->note_id_list)) {
					$notes = explode(',', $email->note_id_list);
					$noteFile = $sendmail_tools->createNotesFile($email->coll_id, $email->res_id, $notes);
					if(is_file($noteFile['file_path'])) {
						//File content
						$file_content = $GLOBALS['mailer']->getFile($noteFile['file_path']);
						//Add file
						$GLOBALS['mailer']->addAttachment($file_content, $noteFile['filename'], $noteFile['mime_type']); 
					}
				}
			
			//Now send the mail
			$return = $GLOBALS['mailer']->send($to, (string)$mailerParams->type);
			
			if($return || $return == 0) {
				$exec_result = 'S';
			} else {
				$GLOBALS['logger']->write("Errors when sending message through SMTP :" 
					. implode(', ', $GLOBALS['mailer']->errors), 'ERROR');
				$exec_result = 'E';
			}
			//Update emails table
			$query = "UPDATE " . EMAILS_TABLE 
				. " SET send_date = " . $GLOBALS['db']->current_datetime()
				. ", email_status = '".$exec_result."' "
				. " WHERE email_id = ".$email->email_id;
			$GLOBALS['db']->connect();
			Bt_doQuery($GLOBALS['db'], $query);
			$currentEmail++;
			$state = 'SEND_AN_EMAIL';
		} else {
			$state = 'END';
		}
        break;
	}
}

$GLOBALS['logger']->write('End of process', 'INFO');
Bt_logInDataBase(
    $totalEmailsToProcess, 0, 'process without error'
);
$GLOBALS['db']->disconnect();
//unlink($GLOBALS['lckFile']);
exit($GLOBALS['exitCode']);
?>