- Timestamp:
- 2007/09/07 12:49:03 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/feature-module-update/html/admin/mail/index.php
r15532 r15640 5 5 * http://www.lockon.co.jp/ 6 6 */ 7 require_once("../require.php");8 require_once("./inc_mailmagazine.php");9 7 10 class LC_Page { 11 var $arrSession; 12 var $arrHtmlmail; 13 var $arrNowDate; 14 function LC_Page() { 15 $this->tpl_mainpage = 'mail/index.tpl'; 16 $this->tpl_mainno = 'mail'; 17 $this->tpl_subnavi = 'mail/subnavi.tpl'; 18 $this->tpl_subno = "index"; 19 $this->tpl_pager = DATA_PATH . 'Smarty/templates/admin/pager.tpl'; 20 $this->tpl_subtitle = '配信内容設定'; 21 22 global $arrPref; 23 $this->arrPref = $arrPref; 24 global $arrJob; 25 $arrJob["不明"] = "不明"; 26 $this->arrJob = $arrJob; 27 global $arrSex; 28 $this->arrSex = $arrSex; 29 global $arrMailType; 30 $this->arrMailType = $arrMailType; 31 global $arrPageRows; 32 $this->arrPageRows = $arrPageRows; 33 // ページナビ用 34 $this->tpl_pageno = $_POST['search_pageno']; 35 global $arrMAILMAGATYPE; 36 $this->arrMAILMAGATYPE = $arrMAILMAGATYPE; 37 $this->arrHtmlmail[''] = "すべて"; 38 $this->arrHtmlmail[1] = $arrMAILMAGATYPE[1]; 39 $this->arrHtmlmail[2] = $arrMAILMAGATYPE[2]; 40 global $arrCustomerType; 41 $this->arrCustomerType = $arrCustomerType; 42 } 43 } 8 // {{{ requires 9 require_once("../../require.php"); 10 require_once(CLASS_PATH . "page_extends/admin/mail/LC_Page_Admin_Mail_Ex.php"); 44 11 45 class LC_HTMLtemplate { 46 var $list_data; 47 } 12 // }}} 13 // {{{ generate page 48 14 49 //---- ページ初期設定 50 $conn = new SC_DBConn(); 51 $objPage = new LC_Page(); 52 $objView = new SC_AdminView(); 53 $objDate = new SC_Date(); 54 $objQuery = new SC_Query(); 55 $objPage->objDate = $objDate; 56 $objPage->arrTemplate = getTemplateList($conn); 57 58 $objSess = new SC_Session(); 59 60 // 認証可否の判定 61 sfIsSuccess($objSess); 62 63 /* 64 query:配信履歴「確認」 65 */ 66 if ($_GET["mode"] == "query" && sfCheckNumLength($_GET["send_id"])) { 67 // 送信履歴より、送信条件確認画面 68 $sql = "SELECT search_data FROM dtb_send_history WHERE send_id = ?"; 69 $result = $conn->getOne($sql, array($_GET["send_id"])); 70 $tpl_path = "mail/query.tpl"; 71 72 $list_data = unserialize($result); 73 74 // 都道府県を変換 75 $list_data['pref_disp'] = $objPage->arrPref[$list_data['pref']]; 76 77 // 配信形式 78 $list_data['htmlmail_disp'] = $objPage->arrHtmlmail[$list_data['htmlmail']]; 79 80 // 性別の変換 81 if (count($list_data['sex']) > 0) { 82 foreach($list_data['sex'] as $key => $val){ 83 $list_data['sex'][$key] = $objPage->arrSex[$val]; 84 $sex_disp .= $list_data['sex'][$key] . " "; 85 } 86 $list_data['sex_disp'] = $sex_disp; 87 } 88 89 // 職業の変換 90 if (count($list_data['job']) > 0) { 91 foreach($list_data['job'] as $key => $val){ 92 $list_data['job'][$key] = $objPage->arrJob[$val]; 93 $job_disp .= $list_data['job'][$key] . " "; 94 } 95 $list_data['job_disp'] = $job_disp; 96 } 97 98 // カテゴリ変換 99 $arrCatList = sfGetCategoryList(); 100 $list_data['category_name'] = $arrCatList[$list_data['category_id']]; 101 102 $objPage->list_data = $list_data; 103 104 $objView->assignobj($objPage); 105 $objView->display($tpl_path); 106 exit; 107 } 108 109 if($_POST['mode'] == 'delete') { 110 } 111 112 switch($_POST['mode']) { 113 /* 114 search:「検索」ボタン 115 back:検索結果画面「戻る」ボタン 116 */ 117 case 'delete': 118 case 'search': 119 case 'back': 120 //-- 入力値コンバート 121 $objPage->list_data = lfConvertParam($_POST, $arrSearchColumn); 122 123 //-- 入力エラーのチェック 124 $objPage->arrErr = lfErrorCheck($objPage->list_data); 125 126 //-- 検索開始 127 if (!is_array($objPage->arrErr)) { 128 $objPage->list_data['name'] = sfManualEscape($objPage->list_data['name']); 129 // hidden要素作成 130 $objPage->arrHidden = lfGetHidden($objPage->list_data); 131 132 //-- 検索データ取得 133 $objSelect = new SC_CustomerList($objPage->list_data, "magazine"); 134 // 生成されたWHERE文を取得する 135 list($where, $arrval) = $objSelect->getWhere(); 136 137 // 「WHERE」部分を削除する。 138 $where = ereg_replace("^WHERE", "", $where); 139 140 // 検索結果の取得 141 $objQuery = new SC_Query(); 142 $from = "dtb_customer"; 143 144 // 行数の取得 145 $linemax = $objQuery->count($from, $where, $arrval); 146 $objPage->tpl_linemax = $linemax; // 何件が該当しました。表示用 147 148 // ページ送りの取得 149 $objNavi = new SC_PageNavi($_POST['search_pageno'], $linemax, SEARCH_PMAX, "fnResultPageNavi", NAVI_PMAX); 150 $objPage->arrPagenavi = $objNavi->arrPagenavi; 151 $startno = $objNavi->start_row; 152 153 // 取得範囲の指定(開始行番号、行数のセット) 154 $objQuery->setlimitoffset(SEARCH_PMAX, $startno); 155 // 表示順序 156 $objQuery->setorder("customer_id DESC"); 157 158 // 検索結果の取得 159 $col = $objSelect->getMailMagazineColumn(lfGetIsMobile($_POST['mail_type'])); 160 $objPage->arrResults = $objQuery->select($col, $from, $where, $arrval); 161 //現在時刻の取得 162 $objPage->arrNowDate = lfGetNowDate(); 163 } 164 break; 165 /* 166 input:検索結果画面「htmlmail内容設定」ボタン 167 */ 168 case 'input': 169 //-- 入力値コンバート 170 $objPage->list_data = lfConvertParam($_POST, $arrSearchColumn); 171 //-- 入力エラーのチェック 172 $objPage->arrErr = lfErrorCheck($objPage->list_data); 173 //-- エラーなし 174 if (!is_array($objPage->arrErr)) { 175 //-- 現在時刻の取得 176 $objPage->arrNowDate = lfGetNowDate(); 177 $objPage->arrHidden = lfGetHidden($objPage->list_data); // hidden要素作成 178 $objPage->tpl_mainpage = 'mail/input.tpl'; 179 } 180 break; 181 /* 182 template:テンプレート選択 183 */ 184 case 'template': 185 //-- 入力値コンバート 186 $objPage->list_data = lfConvertParam($_POST, $arrSearchColumn); 187 188 //-- 時刻設定の取得 189 $objPage->arrNowDate['year'] = $_POST['send_year']; 190 $objPage->arrNowDate['month'] = $_POST['send_month']; 191 $objPage->arrNowDate['day'] = $_POST['send_day']; 192 $objPage->arrNowDate['hour'] = $_POST['send_hour']; 193 $objPage->arrNowDate['minutes'] = $_POST['send_minutes']; 194 195 //-- 入力エラーのチェック 196 $objPage->arrErr = lfErrorCheck($objPage->list_data); 197 198 //-- 検索開始 199 if ( ! is_array($objPage->arrErr)) { 200 $objPage->list_data['name'] = sfManualEscape($objPage->list_data['name']); 201 $objPage->arrHidden = lfGetHidden($objPage->list_data); // hidden要素作成 202 203 $objPage->tpl_mainpage = 'mail/input.tpl'; 204 $template_data = getTemplateData($conn, $_POST['template_id']); 205 if ( $template_data ){ 206 foreach( $template_data as $key=>$val ){ 207 $objPage->list_data[$key] = $val; 208 } 209 } 210 211 //-- HTMLテンプレートを使用する場合は、HTMLソースを生成してBODYへ挿入 212 if ( $objPage->list_data["mail_method"] == 3) { 213 $objTemplate = new LC_HTMLtemplate; 214 $objTemplate->list_data = lfGetHtmlTemplateData($_POST['template_id']); 215 $objSiteInfo = new SC_SiteInfo(); 216 $objTemplate->arrInfo = $objSiteInfo->data; 217 //メール担当写真の表示 218 $objUpFile = new SC_UploadFile(IMAGE_TEMP_URL, IMAGE_SAVE_URL); 219 $objUpFile->addFile("メール担当写真", 'charge_image', array('jpg'), IMAGE_SIZE, true, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT); 220 $objUpFile->setDBFileList($objTemplate->list_data); 221 $objTemplate->arrFile = $objUpFile->getFormFileList(IMAGE_TEMP_URL, IMAGE_SAVE_URL); 222 $objMakeTemplate = new SC_AdminView(); 223 $objMakeTemplate->assignobj($objTemplate); 224 $objPage->list_data["body"] = $objMakeTemplate->fetch("mail/html_template.tpl"); 225 } 226 } 227 break; 228 /* 229 regist_confirm:「入力内容を確認」 230 regist_back:「テンプレート設定画面へ戻る」 231 regist_complete:「登録」 232 */ 233 case 'regist_confirm': 234 case 'regist_back': 235 case 'regist_complete': 236 //-- 入力値コンバート 237 $arrCheckColumn = array_merge( $arrSearchColumn, $arrRegistColumn ); 238 $objPage->list_data = lfConvertParam($_POST, $arrCheckColumn); 239 240 //現在時刻の取得 241 $objPage->arrNowDate = lfGetNowDate(); 242 243 //-- 入力エラーのチェック 244 $objPage->arrErr = lfErrorCheck($objPage->list_data, 1); 245 $objPage->tpl_mainpage = 'mail/input.tpl'; 246 $objPage->arrHidden = lfGetHidden($objPage->list_data); // hidden要素作成 247 248 //-- 検索開始 249 if ( ! is_array($objPage->arrErr)) { 250 $objPage->list_data['name'] = sfManualEscape($objPage->list_data['name']); 251 if ( $_POST['mode'] == 'regist_confirm'){ 252 $objPage->tpl_mainpage = 'mail/input_confirm.tpl'; 253 } else if( $_POST['mode'] == 'regist_complete' ){ 254 lfRegistData($objPage->list_data); 255 if(MELMAGA_SEND == true) { 256 if(MELMAGA_BATCH_MODE) { 257 header("Location: " . URL_DIR . "admin/mail/history.php"); 258 } else { 259 header("Location: " . URL_DIR . "admin/mail/sendmail.php?mode=now"); 260 } 261 exit; 262 } else { 263 sfErrorHeader(">> 本サイトではメルマガ配信は行えません。"); 264 } 265 } 266 } 267 break; 268 default: 269 $objPage->list_data['mail_type'] = 1; 270 break; 271 } 272 273 // 配信時間の年を、「現在年~現在年+1」の範囲に設定 274 for ($year=date("Y"); $year<=date("Y") + 1;$year++){ 275 $arrYear[$year] = $year; 276 } 277 $objPage->arrYear = $arrYear; 278 279 $objPage->arrCustomerOrderId = lfGetCustomerOrderId($_POST['buy_product_code']); 280 281 $objPage->arrCatList = sfGetCategoryList(); 282 283 $objPage->arrCampaignList = lfGetCampaignList(); 284 285 //---- ページ表示 286 $objView->assignobj($objPage); 287 $objView->display(MAIN_FRAME); 288 289 //------------------------------------------------------------------------------------------------------------------------------- 290 291 // 商品コードで検索された場合にヒットした受注番号を取得する。 292 function lfGetCustomerOrderId($keyword) { 293 if($keyword != "") { 294 $col = "dtb_order.customer_id, dtb_order.order_id"; 295 $from = "dtb_order LEFT JOIN dtb_order_detail USING(order_id)"; 296 $where = "product_code LIKE ? AND del_flg = 0"; 297 $val = sfManualEscape($keyword); 298 $arrVal[] = "%$val%"; 299 $objQuery = new SC_Query(); 300 $objQuery->setgroupby("customer_id, order_id"); 301 $arrRet = $objQuery->select($col, $from, $where, $arrVal); 302 $arrCustomerOrderId = sfArrKeyValues($arrRet, "customer_id", "order_id"); 303 } 304 return $arrCustomerOrderId; 305 } 306 307 function lfMakeCsvData( $send_id ){ 308 309 global $conn; 310 311 $arrTitle = array( 'name01','email'); 312 313 $sql = "SELECT name01,email FROM dtb_send_customer WHERE send_id = ? ORDER BY email"; 314 $result = $conn->getAll($sql, array($send_id) ); 315 316 if ( $result ){ 317 $return = lfGetCSVData( $result, $arrTitle); 318 } 319 return $return; 320 } 321 322 //---- CSV出力用データ取得 323 function lfGetCSVData( $array, $arrayIndex){ 324 325 for ($i=0; $i<count($array); $i++){ 326 327 for ($j=0; $j<count($array[$i]); $j++ ){ 328 if ( $j > 0 ) $return .= ","; 329 $return .= "\""; 330 if ( $arrayIndex ){ 331 $return .= mb_ereg_replace("<","<",mb_ereg_replace( "\"","\"\"",$array[$i][$arrayIndex[$j]] )) ."\""; 332 } else { 333 $return .= mb_ereg_replace("<","<",mb_ereg_replace( "\"","\"\"",$array[$i][$j] )) ."\""; 334 } 335 } 336 $return .= "\n"; 337 } 338 return $return; 339 } 340 341 //現在時刻の取得(配信時間デフォルト値) 342 function lfGetNowDate(){ 343 $nowdate = date("Y/n/j/G/i"); 344 list($year, $month, $day, $hour, $minute) = split("[/]", $nowdate); 345 $arrNowDate = array( 'year' => $year, 'month' => $month, 'day' => $day, 'hour' => $hour, 'minutes' => $minute); 346 foreach ($arrNowDate as $key => $val){ 347 switch ($key){ 348 case 'minutes': 349 $val = ereg_replace('^[0]','', $val); 350 if ($val < 30){ 351 $list_date[$key] = '30'; 352 }else{ 353 $list_date[$key] = '00'; 354 } 355 break; 356 case 'year': 357 case 'month': 358 case 'day': 359 $list_date[$key] = $val; 360 break; 361 } 362 } 363 if ($arrNowDate['minutes'] < 30){ 364 $list_date['hour'] = $hour; 365 }else{ 366 $list_date['hour'] = $hour + 1; 367 } 368 return $list_date; 369 } 370 371 // 配信内容と配信リストを書き込む 372 function lfRegistData($arrData){ 373 374 global $conn; 375 global $arrSearchColumn; 376 377 $objQuery = new SC_Query(); 378 $objSelect = new SC_CustomerList( lfConvertParam($arrData, $arrSearchColumn), "magazine" ); 379 380 $search_data = $conn->getAll($objSelect->getListMailMagazine(lfGetIsMobile($_POST['mail_type'])), $objSelect->arrVal); 381 $dataCnt = count($search_data); 382 383 $dtb_send_history = array(); 384 if(DB_TYPE=='pgsql'){ 385 $dtb_send_history["send_id"] = $objQuery->nextval('dtb_send_history', 'send_id'); 386 } 387 $dtb_send_history["mail_method"] = $arrData['mail_method']; 388 $dtb_send_history["subject"] = $arrData['subject']; 389 $dtb_send_history["body"] = $arrData['body']; 390 if(MELMAGA_BATCH_MODE) { 391 $dtb_send_history["start_date"] = $arrData['send_year'] ."/".$arrData['send_month']."/".$arrData['send_day']." ".$arrData['send_hour'].":".$arrData['send_minutes']; 392 } else { 393 $dtb_send_history["start_date"] = "now()"; 394 } 395 $dtb_send_history["creator_id"] = $_SESSION['member_id']; 396 $dtb_send_history["send_count"] = $dataCnt; 397 $arrData['body'] = ""; 398 $dtb_send_history["search_data"] = serialize($arrData); 399 $dtb_send_history["update_date"] = "now()"; 400 $dtb_send_history["create_date"] = "now()"; 401 $objQuery->insert("dtb_send_history", $dtb_send_history ); 402 if(DB_TYPE == "mysql"){ 403 $dtb_send_history["send_id"] = $objQuery->nextval('dtb_send_history','send_id'); 404 } 405 if ( is_array( $search_data ) ){ 406 foreach( $search_data as $line ){ 407 $dtb_send_customer = array(); 408 $dtb_send_customer["customer_id"] = $line["customer_id"]; 409 $dtb_send_customer["send_id"] = $dtb_send_history["send_id"]; 410 $dtb_send_customer["email"] = $line["email"]; 411 412 $dtb_send_customer["name"] = $line["name01"] . " " . $line["name02"]; 413 414 $conn->autoExecute("dtb_send_customer", $dtb_send_customer ); 415 } 416 } 417 } 418 419 // キャンペーン一覧 420 function lfGetCampaignList() { 421 422 global $objQuery; 423 424 $sql = "SELECT campaign_id, campaign_name FROM dtb_campaign ORDER BY update_date DESC"; 425 $arrResult = $objQuery->getall($sql); 426 427 foreach($arrResult as $arrVal) { 428 $arrCampaign[$arrVal['campaign_id']] = $arrVal['campaign_name']; 429 } 430 431 return $arrCampaign; 432 } 433 434 function lfGetIsMobile($mail_type) { 435 // 検索結果の取得 436 $is_mobile = false; 437 switch($mail_type) { 438 case 1: 439 $is_mobile = false; 440 break; 441 case 2: 442 $is_mobile = true; 443 break; 444 default: 445 $is_mobile = false; 446 break; 447 } 448 449 return $is_mobile; 450 } 15 $objPage = new LC_Page_Admin_Mail_Ex(); 16 $objPage->init(); 17 $objPage->process(); 18 register_shutdown_function(array($objPage, "destroy")); 451 19 ?>
Note: See TracChangeset
for help on using the changeset viewer.