[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&send_id=<!--{$arrDataList[cnt].send_id|h}-->&retry=yes" onclick="return window.confirm('未配信と配信失敗となった宛先に再送信を試みますか?');">実行</a>
+ <a href="index.php?mode=retry&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 メーリングリストの案内