#!/usr/bin/php -q
<?php
/**
 * Process incoming faxes. Store, convert and send notification emails
 */

require_once('/usr/share/ombutel/www/includes/cli.php');
require_once('send_email.php');

use ombutel\email;
use ombutel\extension;
use ombutel\fax;
use ombutel\locale;
use ombutel\tenant;
use ombutel\settings;
use ombutel\utils;

if($argc != 7) {
	die("$argv[0]: Script usage: <fax_filename> <extension> <unique_id> <fax_status> <fax_status_string> <source>\n");
}

list(, $filename, $extension, $unique_id,
		$fax_status,
		$fax_status_msg, $source) = $argv;

$fmt = 'pdf';

if(($extension = get_extension($extension)) == false) {
	die("$argv[0]: Error: no such extension exists.\n");
}

if(file_exists($filename)) {
	$destination_file = utils::buildpath([
		'/var/lib/ombutel/static',
		tenant::current()->path,
		"fax",
		md5($extension->extension_id),
		"in",
		"{$unique_id}.{$fmt}"
	]);

	if (!file_exists(dirname($destination_file))) {
		@mkdir(dirname($destination_file), 0777, true);
	}

	if ($fmt == "pdf") {
		exec("tiff2pdf -o $destination_file $filename");
		@unlink($filename);
	} else {
		rename($filename, $destination_file);
	}
} else {
	die("$argv[0]: Error: file $filename doesn't exist.\n");
}

if($extension->fax_auto_send) {
	$email=$extension->email;
	if($email !== "none") {
		$from_email = $from_name = null;
		if(($from_address = settings::get('fax', 'from_email')) != "") {
			if(preg_match('/^"(.*)" <(.*)>$/', $from_address, $match)) {
				list( ,$from_name, $from_email) = $match;
			} elseif(preg_match('/^"(.*)"$/', $from_address, $match)) {
				$from_name = $match[1];
			} elseif(preg_match('/^<(.*)>$/', $from_address, $match)) {
				$from_email = $match[1];
			}
		} elseif(($from_email = settings::get('system_misc', 'fromemail')) === "") {
			$from_email = 'no-reply@localhost.localhost';
		}
		$subject = __('fax.fax_process.subject_new_fax');
		if(($email_subject = settings::get('fax', 'email_subject')) != null) {
			$subject = str_replace(['${RECIPIENT}' ,'${SENDER}'], [$extension->extension, $source], $email_subject);
		}

		$body = __("fax.fax_process.fax_arrived", null, $extension->extension, $source);
		if(($email_body = settings::get('fax', 'email_body')) != null) {
			$body = str_replace(['${RECIPIENT}' ,'${SENDER}'], [$extension->extension, $source], $email_body);
		}
		send_email($email, $subject, $body, $from_name, $from_email, null, $destination_file, 'file', null, email::origin());
	}
}

$fax = new fax();
$fax->source = $source;
$fax->destination = $extension->extension;
$fax->destination_extension_id = $extension->extension_id;
$fax->status = $fax_status_msg;
$fax->date = gmdate("Y-m-d H:i:s");
$fax->filename = $destination_file;
$fax->direction = 'in';
$fax->tenant_id = tenant::current()->tenant_id;
$fax->save();

function get_extension($extension) {
	return extension::find_by_extension($extension);
}

?>
