<?php

/* ԤȤʸκĹ */
define("LINE_LENGTH_SUBJECT", 66);

/* ᡼إåΥ󥳡 */
define("ISO_2022_JP", "ISO-2022-JP");

/* ʸcharser*/
define("CHARSET_JIS", "JIS");

define("SUBJECT", "Subject:");

/**
 * analyze_mail_tmpl
 *
 * ᡼ƥץ졼ȤʬϤƷ̾ʸ
 *
 * @param  $mail_tmpl     ᡼ƥץ졼ȤΥեѥ
 * @param  &$ref_subject  ̾(ȥǡ)
 * @param  &$ref_body     ʸ(ȥǡ)
 *
 * @return true    
 * @return false   ۾
 */
function analyze_mail_tmpl($mail_tmpl, &$ref_subject, &$ref_body)
{
    /* եΥå */
    if (!is_file($mail_tmpl)) {
        $logmsg = sprintf(ERR_SYS_LOG_OPEN_FILE_FAIL, $mail_tmpl);
        write_log($logmsg);
        return false;
    }

    /* ᡼ƥץ졼ȥե򥪡ץ */
    $file = fopen($mail_tmpl, "r");
    if ($file === false) {
        $logmsg = sprintf(ERR_SYS_LOG_OPEN_FILE_FAIL, $mail_tmpl);
        write_log($logmsg);
        return false;
    }  

    /* إåɤ⡼ */
    $mode = 0;
  
    /* ̾ */
    $subject = "";

    /* ʸ */
    $body = "";

    /* ĤĹԤɤ߹ */
    while(!feof($file)) {

        /* եݥ󥿤 1 Լ */
        $line = fgets($file);

        if ($line === "\n" && $mode == 0) {
            /* ʸɤ⡼ */
            $mode = 1;
            /* ǽ̵*/
            continue;
        }

        /* ̾ */
        if ($mode == 0) {
            $subject = $line;
        /* ʸ */
        } else if ($mode == 1) {
            $body .= $line;
        }
    }

    /* եĤ */
    fclose($file);

    /* ƥץ졼ȤϲԤʤ硢 */
    if ($mode == 0) {
        $logmsg = sprintf(ERR_SYS_LOG_MAIL_TMPL_INVALID, $mail_tmpl, 
                         "Do not exit body part");
        write_log($logmsg);
        return false;
    }

    /* ̾γʸ */
    $start_sbj = substr($subject, 0, strlen(SUBJECT));
    if ($start_sbj !== SUBJECT) {
        $logmsg = sprintf(ERR_SYS_LOG_MAIL_TMPL_INVALID, $mail_tmpl, 
                          "Subject do not exist char[subject:]");
        write_log($logmsg);
        return false;
    }

    /* Ǽ */
    $ref_subject = substr($subject, strlen(SUBJECT) + 1);;
    $ref_body = $body;

    return true;
}

/**
 * sendmail_to_admin
 *
 * Ԥ˥᡼Τ
 *
 * @param  $mail_tmpl   ᡼Υƥץ졼
 * @param  $to_addr     
 * @param  $from_addr   п
 * @param  $tag         ִ륿Ϣ
 *
 * @return true         
 * @return false        ۾
 */
function sendmail_to_admin($mail_tmpl, $to_addr, $from_addr, $tags, $csv_data)
{
    /* ᡼ƥץ졼Ȥʬ */
    $ret = analyze_mail_tmpl($mail_tmpl, $ref_subject, $ref_body);    
    if ($ret === false) {
        return false;
    }
  
    $body = $ref_body;
 
    /* ʸΥִ */
    foreach ($tags as $key => $value) {
        $body = str_replace($key, $value, $body);     
    }

    /* CSVǡΥִ */
    $body = replace_loop_tag($body, '{$START_LOOP_CSV}', '{$END_LOOP_CSV}', $csv_data);

    /* ᡼ */
    $ret = send_mail($to_addr, $from_addr, $ref_subject, $body);

    return $ret;
}

/**
 * send_mail
 *
 * ᡼Ԥ
 *
 * @param  $to        
 * @param  $from      п
 * @param  $subject   ̾
 * @param  $body      ʸ
 * @param  $cc        cc
 * @param  $bcc       bcc
 *
 * @return true    ˥᡼
 * @return false   顼ȯ
 */
function send_mail($to, $from, $subject = "" , $body = "", $cc = "", $bcc = "")
{
    /* UTF8˥󥳡ɤ */
    mb_internal_encoding("UTF-8");

    /* ᡼ */
    $headers = "From: " . $from . " \n";

    /* CC */
    if ($cc !== "") {
        $headers .= "Cc: " . $cc . " \n";
    }

    /* BCC */
    if ($bcc != "") {
        $headers .= "Bcc: " . $bcc . " \n";
    }

    /* إåʬꤹ */
    $headers .= "Content-Type: text/plain;charset=" . ISO_2022_JP ." \n";
    $headers .= "Content-Transfer-Encoding: 7bit" ." \n";

    /* ʸʸɤISO-2022-JP򤹤 */
    $body = mb_convert_encoding($body, CHARSET_JIS, "UTF-8");

    /* ̾MIME󥳡ɤ򤹤 */
    $preferences = array(
   		     "input-charset" => "UTF-8",
		     "output-charset" => "ISO-2022-JP",
		     "line-length" => LINE_LENGTH_SUBJECT,
		     "line-break-chars" => "\n",
		     "scheme" => "B"
    );

    $subject = iconv_mime_encode("Subject", $subject, $preferences);
    $subject = preg_replace("/^Subject: /", "", $subject);

    /* ᡼ */
    $result = mail($to, $subject, $body, $headers);

    /* ֤*/
    return $result;
}

/**
 * replace_loop_tag
 *
 * 롼ץִ
 *
 * @param $html         HTML
 * @param $starttag     ϥ
 * @param $endtag       λ
 * @param $looptags     롼ץ
 *
 * @return $mod_html    ִ줿ʸ
 */
function replace_loop_tag($html, $starttag, $endtag, $looptags)
{
    $mod_html = "";

    /* 롼׳ϥʬ */
    $dev_s = explode($starttag, $html, 2);
    $mod_html .= $dev_s[0];

    /* 롼ץ¸ߤʤ硢ϥʸѤ */
    if ($looptags === array()) {
        return $mod_html;
    }

    /* 롼׳ϥĤʤä */
    if (isset($dev_s[1]) === FALSE || $dev_s[1] == "") {
        return $html;
    }

    /* 롼׽λʬ */
    $dev_e = explode($endtag, $dev_s[1], 2);

    /* 롼׽λĤʤä */
    if ($dev_e[1] == "") {
        return $html;
    }

    /* 롼ΥѴ */
    $loop_html = $dev_e[0];         // 롼ץHTML

    /* Ĥ */
    $rest_html = $dev_e[1];

    foreach ($looptags as $tag) {
        $str = $loop_html;
        foreach ($tag as $key => $value) {
            $str = str_replace($key, $value, $str);
        }
        $mod_html .= $str;
    }

    $mod_html .= $rest_html;

    return $mod_html;
}
?>
