[Svn-src-all:1465] [version-2_5-dev 20357] #963 [管理画面]メルマガ管理リファクタリング

fukuda admin @ mail.ec-cube.net
2011年 2月 23日 (水) 21:52:41 JST


Subversion committed to /home/svn/open 20357
http://svn.ec-cube.net/open_trac/changeset/20357
┌────────────────────────────┐
│更新者 :  fukuda                                       │
│更新日時:  2011-02-23 21:52:41 +0900 (水, 23  2月 2011)│
└────────────────────────────┘

Log:
--------------------------------------------------------
#963 	[管理画面]メルマガ管理リファクタリング 

Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
U   branches/version-2_5-dev/data/Smarty/templates/admin/mail/history.tpl
U   branches/version-2_5-dev/data/class/helper/SC_Helper_Mail.php
U   branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail.php
U   branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_History.php
U   branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_Preview.php
D   branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_Sendmail.php
U   branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_Template.php
U   branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_TemplateInput.php

変更: branches/version-2_5-dev/data/Smarty/templates/admin/mail/history.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/admin/mail/history.tpl	2011-02-23 12:28:01 UTC (rev 20356)
+++ branches/version-2_5-dev/data/Smarty/templates/admin/mail/history.tpl	2011-02-23 12:52:41 UTC (rev 20357)
@@ -58,7 +58,7 @@
             </td>
             <td>
                 <!--{if $arrDataList[cnt].count_error >= 1 || $arrDataList[cnt].count_unsent >= 1}-->
-                    <a href="sendmail.php?mode=now&amp;send_id=<!--{$arrDataList[cnt].send_id|h}-->&amp;retry=yes" onclick="return window.confirm('未配信と配信失敗となった宛先に再送信を試みますか?');">実行</a>
+                    <a href="index.php?mode=retry&amp;send_id=<!--{$arrDataList[cnt].send_id|h}-->" onclick="return window.confirm('未配信と配信失敗となった宛先に再送信を試みますか?');">実行</a>
                 <!--{/if}-->
             </td>
             <td><a href="?mode=delete&send_id=<!--{$arrDataList[cnt].send_id|h}-->" onclick="return window.confirm('配信履歴を削除しても宜しいでしょうか');">削除</a></td>

変更: branches/version-2_5-dev/data/class/helper/SC_Helper_Mail.php
===================================================================
--- branches/version-2_5-dev/data/class/helper/SC_Helper_Mail.php	2011-02-23 12:28:01 UTC (rev 20356)
+++ branches/version-2_5-dev/data/class/helper/SC_Helper_Mail.php	2011-02-23 12:52:41 UTC (rev 20357)
@@ -329,12 +329,12 @@
     }
     
     /**
-     * 保存されているメールテンプレートの取得
+     * 保存されているメルマガテンプレートの取得
      * @param integer 特定IDのテンプレートを取り出したい時はtemplate_idを指定。未指定時は全件取得
      * @return array メールテンプレート情報を格納した配列
      * @todo   表示順も引数で変更できるように
      */
-    function sfGetMailTemplate($template_id = null){
+    function sfGetMailmagaTemplate($template_id = null){
         // 初期化
         $where = '';
         $objQuery =& SC_Query::getSingletonInstance();
@@ -356,7 +356,7 @@
     }
     
     /**
-     * 保存されている送信履歴の取得
+     * 保存されているメルマガ送信履歴の取得
      * @param integer 特定の送信履歴を取り出したい時はsend_idを指定。未指定時は全件取得
      * @return array 送信履歴情報を格納した配列
      */
@@ -381,5 +381,97 @@
         $arrResults = $objQuery->select('*', 'dtb_send_history', $where, $arrValues);
         return $arrResults;
     }
+
+    /**
+     * 指定したIDのメルマガ配送を行う
+     * 
+     * @param integer $send_id dtb_send_history の情報
+     * @return boolean true:成功 false:失敗
+     */
+    function sfSendMailmagazine($send_id) {
+        $objQuery =& SC_Query::getSingletonInstance();
+        $objDb = new SC_Helper_DB_Ex();
+        $objSite = $objDb->sfGetBasisData();
+        $objMail = new SC_SendMail_Ex();
+        
+        $where = 'del_flg = 0 AND send_id = ?';
+        $arrMail = $objQuery->getRow('*', 'dtb_send_history', $where, array($send_id));
+
+        // 対象となる$send_idが見つからない
+        if (SC_Utils_Ex::isBlank($arrMail)) return false;
+
+        // 送信先リストの取得
+        $arrDestinationList = $objQuery->select(
+            '*',
+            'dtb_send_customer',
+            'send_id = ? AND (send_flag = 2 OR send_flag IS NULL)',
+            array($send_id)
+        );
+        
+        // 現在の配信数
+        $complete_count = $arrMail['complete_count'];
+        if(SC_Utils_Ex::isBlank($arrMail)) $complete_count = 0;
+        
+        foreach ($arrDestinationList as $arrDestination) {
+
+            // 顧客名の変換
+            $customerName = trim($arrDestination["name"]);
+            $subjectBody = ereg_replace("{name}", $customerName, $arrMail["subject"]);
+            $mailBody = ereg_replace("{name}", $customerName, $arrMail["body"]);
+
+            $objMail->setItem(
+                $arrDestination["email"],
+                $subjectBody,
+                $mailBody,
+                $objSite->data["email03"],      // 送信元メールアドレス
+                $objSite->data["shop_name"],    // 送信元名
+                $objSite->data["email03"],      // reply_to
+                $objSite->data["email04"],      // return_path
+                $objSite->data["email04"]       // errors_to
+            );
+
+            // テキストメール配信の場合
+            if ($arrMail["mail_method"] == 2) {
+                $sendResut = $objMail->sendMail();
+            // HTMLメール配信の場合
+            } else {
+                $sendResut = $objMail->sendHtmlMail();
+            }
+
+            // 送信完了なら1、失敗なら2をメール送信結果フラグとしてDBに挿入
+            if (!$sendResut) {
+                $sendFlag = '2';
+            } else {
+                // 完了を 1 増やす
+                $sendFlag = '1';
+                $complete_count++;
+            }
+            
+            // 送信結果情報を更新
+            $objQuery->update('dtb_send_customer',
+                              array('send_flag'=>$sendFlag),
+                              'send_id = ? AND customer_id = ?',
+                              array($send_id,$arrDestination["customer_id"]));
+        }
+
+        // メール全件送信完了後の処理
+        $completeSql = "UPDATE dtb_send_history SET end_date = now(), complete_count = ? WHERE send_id = ?";
+        $objQuery->query($completeSql, array($complete_count, $send_id));
+
+        // 送信完了 報告メール
+        $compSubject = date("Y年m月d日H時i分") . "  下記メールの配信が完了しました。";
+        // 管理者宛に変更
+        $objMail->setTo($objSite->data["email03"]);
+        $objMail->setSubject($compSubject);
+
+        // テキストメール配信の場合
+        if ($arrMail["mail_method"] == 2 ) {
+            $sendResut = $objMail->sendMail();
+        // HTMLメール配信の場合
+        } else {
+            $sendResut = $objMail->sendHtmlMail();
+        }
+        return true;
+    }
 }
 ?>

変更: branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail.php	2011-02-23 12:28:01 UTC (rev 20356)
+++ branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail.php	2011-02-23 12:52:41 UTC (rev 20357)
@@ -71,7 +71,7 @@
         $this->arrCatList = $objDb->sfGetCategoryList();
         
         // テンプレート一覧設定
-        $this->arrTemplate = $this->lfGetMailTemplateList(SC_Helper_Mail_Ex::sfGetMailTemplate());
+        $this->arrTemplate = $this->lfGetMailTemplateList(SC_Helper_Mail_Ex::sfGetMailmagaTemplate());
         
         $this->httpCacheControl('nocache');
     }
@@ -142,19 +142,26 @@
             $objFormParam->setParam($_POST);
             $this->arrErr = $objFormParam->checkError();
             if (SC_Utils_Ex::isBlank($this->arrErr)){
-                $this->lfRegisterData($objFormParam);
                 $this->tpl_mainpage = 'mail/index.tpl';
-                //SC_Helper_Mail_Ex::hogehoge();  //送信処理
-                $this->tpl_onload = "window.alert('メール送信が完了しました。配信履歴画面から確認してください。');";
+                SC_Helper_Mail_Ex::sfSendMailmagazine($this->lfRegisterData($objFormParam));  // DB登録・送信
+                SC_Response_Ex::sendRedirect("./history.php");
             }
             break;
-        // query:配信履歴「確認」
+        // query:配信履歴から「確認」
         case 'query':
             if (SC_Utils_Ex::sfIsInt($_GET["send_id"])) {
                 $this->arrSearchData = $this->lfGetMailQuery();
             }
             $this->setTemplate('mail/query.tpl');
             break;
+        // query:配信履歴から「再送信」
+        case 'retry':
+            if (SC_Utils_Ex::sfIsInt($_GET["send_id"])) {
+                SC_Helper_Mail_Ex::sfSendMailmagazine($_GET['send_id']);  // DB登録・送信
+                SC_Response_Ex::sendRedirect("./history.php");
+            } else {
+                $this->tpl_onload = "window.alert('メール送信IDが正しくありません');";
+            }
         default:
             break;
         }
@@ -198,9 +205,9 @@
     }
     
     /**
-     * テンプレート一覧情報の取得
+     * メルマガテンプレート一覧情報の取得
      *
-     * @param array $arrTemplate SC_Helper_Mail_Ex::sfGetMailTemplate()の戻り値
+     * @param array $arrTemplate SC_Helper_Mail_Ex::sfGetMailmagaTemplate()の戻り値
      * @return array key:template_id value:サブジェクト【配信形式】 
      */
     function lfGetMailTemplateList($arrTemplate){
@@ -230,7 +237,7 @@
     /**
      * 配信内容と配信リストを書き込む
      *
-     * @return string 登録した行の dtb_send_history.send_id の値
+     * @return integer 登録した行の dtb_send_history.send_id の値
      */
     function lfRegisterData(&$objFormParam){
         $objQuery =& SC_Query::getSingletonInstance();
@@ -262,6 +269,7 @@
                 $objQuery->insert("dtb_send_customer", $dtb_send_customer );
             }
         }
+        return $send_id;
     }
     
     /**

変更: branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_History.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_History.php	2011-02-23 12:28:01 UTC (rev 20356)
+++ branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_History.php	2011-02-23 12:52:41 UTC (rev 20357)
@@ -69,7 +69,7 @@
     function action() {
         switch ($this->getMode()) {
         case 'delete':
-            if (SC_Utils_Ex::sfIsInt($send_id)) {
+            if (SC_Utils_Ex::sfIsInt($_GET['send_id'])) {
                 // 削除時
                 $this->lfDeleteHistory($_GET['send_id']);
                 $this->objDisplay->reload(null, true);

変更: branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_Preview.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_Preview.php	2011-02-23 12:28:01 UTC (rev 20356)
+++ branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_Preview.php	2011-02-23 12:52:41 UTC (rev 20357)
@@ -68,7 +68,7 @@
         switch ($this->getMode()) {
         case 'template':
             if (SC_Utils_Ex::sfIsInt($_GET['template_id'])){
-                $arrMail = $objMailHelper->sfGetMailTemplate($_GET['template_id']);
+                $arrMail = $objMailHelper->sfGetMailmagaTemplate($_GET['template_id']);
                 $this->mail = $arrMail[0];
             }
             break;

削除: branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_Sendmail.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_Sendmail.php	2011-02-23 12:28:01 UTC (rev 20356)
+++ branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_Sendmail.php	2011-02-23 12:52:41 UTC (rev 20357)
@@ -1,199 +0,0 @@
-<?php
-/*
- * This file is part of EC-CUBE
- *
- * Copyright(c) 2000-2010 LOCKON CO.,LTD. All Rights Reserved.
- *
- * http://www.lockon.co.jp/
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-// {{{ requires
-require_once(CLASS_EX_REALDIR . "page_extends/admin/LC_Page_Admin_Ex.php");
-
-/**
- * メール配信履歴 のページクラス.
- *
- * @package Page
- * @author LOCKON CO.,LTD.
- * @version $Id$
- */
-class LC_Page_Admin_Mail_Sendmail extends LC_Page_Admin_Ex {
-
-    var $objMail;
-    // }}}
-    // {{{ functions
-
-    /**
-     * Page を初期化する.
-     *
-     * @return void
-     */
-    function init() {
-         // SC_SendMailの拡張
-        if (file_exists(MODULE_REALDIR . "mdl_speedmail/SC_SpeedMail.php")) {
-            require_once(MODULE_REALDIR . "mdl_speedmail/SC_SpeedMail.php");
-            // SpeedMail対応
-            $this->objMail = new SC_SpeedMail();
-        } else {
-            $this->objMail = new SC_SendMail_Ex();
-        }
-
-        parent::init();
-    }
-
-    /**
-     * Page のプロセス.
-     *
-     * @return void
-     */
-    function process() {
-        $objQuery = new SC_Query();
-
-        $objDb = new SC_Helper_DB_Ex();
-        $objSite = $objDb->sfGetBasisData();
-
-        if (MELMAGA_SEND != true) {
-            exit;
-        }
-
-        $where = 'del_flg = 0';
-        $sqlval = array();
-        // リアルタイム配信モードがオンのとき
-        switch ($this->getMode()) {
-        case 'now':
-            // 指定データを取得する
-            $where .= ' AND send_id = ?';
-            $sqlval[] = $_GET['send_id'];
-            if ($_GET['retry'] != 'yes') {
-                $where .= ' AND complete_count = 0 AND end_date IS NULL';
-            }
-            break;
-        default:
-            $where .= ' AND end_date IS NULL';
-            $dbFactory = SC_DB_DBFactory::getInstance();
-            $where .= $dbFactory->getSendHistoryWhereStartdateSql();
-            // 30分毎にCronが送信時間データ確認
-            break;
-        }
-
-        $objQuery->setOrder('send_id');
-        $arrMailList = $objQuery->select('*', 'dtb_send_history', $where, $sqlval);
-        $objQuery->setOrder('');
-
-        // 未送信メルマガがあれば送信処理を続ける。なければ中断する。
-        if (empty($arrMailList)) {
-            echo "not found\n";
-            exit;
-        }
-
-        echo "start sending\n";
-
-        // メール生成と送信
-        foreach ($arrMailList as $arrMail) {
-            $sendFlag = null;
-
-            // 送信先リストの取得
-            $arrDestinationList = $objQuery->select(
-                '*',
-                'dtb_send_customer',
-                'send_id = ? AND (send_flag = 2 OR send_flag IS NULL)',
-                array($arrMail["send_id"])
-            );
-
-            foreach ($arrDestinationList as $arrDestination) {
-
-                // 顧客名の変換
-                $name = trim($arrDestination["name"]);
-
-                if ($name == "") {
-                    $name = "お客";
-                }
-
-                $customerName = htmlspecialchars($name);
-                $subjectBody = ereg_replace("{name}", $customerName, $arrMail["subject"]);
-                $mailBody = ereg_replace("{name}", $customerName, $arrMail["body"]);
-
-                $this->objMail->setItem(
-                    $arrDestination["email"],
-                    $subjectBody,
-                    $mailBody,
-                    $objSite->data["email03"],      // 送信元メールアドレス
-                    $objSite->data["shop_name"],    // 送信元名
-                    $objSite->data["email03"],      // reply_to
-                    $objSite->data["email04"],      // return_path
-                    $objSite->data["email04"]       // errors_to
-                );
-
-                // テキストメール配信の場合
-                if ($arrMail["mail_method"] == 2) {
-                    $sendResut = $this->objMail->sendMail();
-                // HTMLメール配信の場合
-                } else {
-                    $sendResut = $this->objMail->sendHtmlMail();
-                }
-
-                // 送信完了なら1、失敗なら2をメール送信結果フラグとしてDBに挿入
-                if (!$sendResut) {
-                    $sendFlag = '2';
-                } else {
-                    $sendFlag = '1';
-
-                    // 完了を 1 増やす
-                    $sql = "UPDATE dtb_send_history SET complete_count = complete_count + 1 WHERE send_id = ?";
-                    $objQuery->query($sql, array($arrMail["send_id"]));
-                }
-
-                // 送信結果フラグ
-                $sql ="UPDATE dtb_send_customer SET send_flag = ? WHERE send_id = ? AND customer_id = ?";
-                $objQuery->query($sql, array($sendFlag, $arrMail["send_id"], $arrDestination["customer_id"]));
-            }
-
-            // メール全件送信完了後の処理
-            $completeSql = "UPDATE dtb_send_history SET end_date = now() WHERE send_id = ?";
-            $objQuery->query($completeSql, array($arrMail["send_id"]));
-
-            // 送信完了 報告メール
-            $compSubject = date("Y年m月d日H時i分") . "  下記メールの配信が完了しました。";
-            // 管理者宛に変更
-            $this->objMail->setTo($objSite->data["email03"]);
-            $this->objMail->setSubject($compSubject);
-
-            // テキストメール配信の場合
-            if ($arrMail["mail_method"] == 2 ) {
-                $sendResut = $this->objMail->sendMail();
-            // HTMLメール配信の場合
-            } else {
-                $sendResut = $this->objMail->sendHtmlMail();
-            }
-        }
-        //TODO 要リファクタリング(MODE if利用)
-        if ($this->getMode() == 'now') {
-            SC_Response_Ex::sendRedirectFromUrlPath(ADMIN_DIR . 'mail/history.php');
-        }
-        echo "complete\n";
-    }
-
-    /**
-     * デストラクタ.
-     *
-     * @return void
-     */
-    function destroy() {
-        parent::destroy();
-    }
-}
-?>

変更: branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_Template.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_Template.php	2011-02-23 12:28:01 UTC (rev 20356)
+++ branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_Template.php	2011-02-23 12:52:41 UTC (rev 20357)
@@ -81,7 +81,7 @@
         default:
             break;
         }
-        $this->arrTemplates = $objMailHelper->sfGetMailTemplate();
+        $this->arrTemplates = $objMailHelper->sfGetMailmagaTemplate();
     }
 
     /**

変更: branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_TemplateInput.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_TemplateInput.php	2011-02-23 12:28:01 UTC (rev 20356)
+++ branches/version-2_5-dev/data/class/pages/admin/mail/LC_Page_Admin_Mail_TemplateInput.php	2011-02-23 12:52:41 UTC (rev 20357)
@@ -75,7 +75,7 @@
         case 'edit':
             // 編集
             if ( SC_Utils_Ex::sfIsInt($_GET['template_id'])===true ){
-                $arrMail = $objMailHelper->sfGetMailTemplate($_GET['template_id']);
+                $arrMail = $objMailHelper->sfGetMailmagaTemplate($_GET['template_id']);
                 $this->arrForm = $arrMail[0];
             }
             break;




Svn-src-all メーリングリストの案内