<?php

require_once ('libphp-phpmailer/PHPMailerAutoload.php');

class Mail extends Vn\Lib\Method
{
	function run ($db)
	{
		$db->selectDb ('vn2008');
		$db->query ('START TRANSACTION');

		$conf = $db->getRow (
			'SELECT host, port, secure, sender, sender_name, user, password
				FROM hedera.mail_config'
		);
		$res = $db->query (
			'SELECT * FROM mail WHERE sent = 0 ORDER BY DATE_ODBC DESC
				LIMIT 20 FOR UPDATE');

		$count = 0;

		while ($row = $res->fetch_assoc ())
		{
			$sent = 1;
			$status = 'OK';

			try {
				//if (!preg_match ('/^[\w\._%-]+@[\w\.-]+\.[A-Za-z]{2,4}$/', $row['to']))
				//	throw new Exception ('Destination mail has invalid sintax');

				$mail = new PHPMailer ();
				$mail->isSMTP ();
				$mail->Host = $conf['host'];

				if (!empty ($conf['user']))
				{
					$mail->SMTPAuth = TRUE;
					$mail->Username = $conf['user'];
					$mail->Password = base64_decode ($conf['password']);
				}
				else
					$mail->SMTPAuth = FALSE;

				if ($conf['secure'])
				{
					$mail->SMTPSecure = 'ssl';
					$mail->Port = 465;
				}

				$mail->setFrom ($conf['sender'], $conf['sender_name']);
				$mail->AddReplyTo ($row['reply_to'], 'Att. Cliente');

				if (strpos ($row['to'], ','))
					$mailList = explode (',', $row['to']);
				else
					$mailList = explode (';', $row['to']);
						
				foreach ($mailList as $mailTo)
					$mail->AddAddress ($mailTo);

				$mail->Subject = $row['subject'];
				$mail->Body = ' '. $row['text'];
				$mail->CharSet = 'UTF-8';

				if (!empty ($row['path']))
				{
					$attachment = '/mnt/cluster/pdfs/'. $row['path'];

					if (file_exists ($attachment))
						$mail->AddAttachment ($attachment, '');
					else
						throw new Exception ("Attachment file could not be found: $attachment");
				}

				if (!$mail->Send ())
					throw new Exception ('Send error: '.$mail->ErrorInfo);
					
				$count++;
			}
			catch (Exception $e)
			{
				$sent = 2;
				$status = $e->getMessage ();
			}

			$db->query ('UPDATE mail SET sent = #, error = # WHERE id = #',
				[$sent, $status, $row['id']]);
		}

		$db->query ('COMMIT');
		echo "Total $count mails sent\n";
	}
}