Page
[ class tree: Page ] [ index: Page ] [ all elements ]

Source for file LC_Page_CampaignEntry.php

Documentation is available at LC_Page_CampaignEntry.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2010 LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.jp/
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  22.  */
  23.  
  24. // {{{ requires
  25. require_once(CLASS_PATH "pages/LC_Page.php");
  26.  
  27. /**
  28.  * キャンペーンエントリー のページクラス.
  29.  *
  30.  * @package Page
  31.  * @author LOCKON CO.,LTD.
  32.  * @version $Id: LC_Page_CampaignEntry.php 18734 2010-06-22 08:45:33Z nanasess $
  33.  */
  34. class LC_Page_CampaignEntry extends LC_Page {
  35.  
  36.     // }}}
  37.     // {{{ functions
  38.  
  39.     /**
  40.      * Page を初期化する.
  41.      *
  42.      * @return void 
  43.      */
  44.     function init({
  45.         parent::init();
  46.         $this->tpl_mainpage = 'entry/index.tpl';                // メインテンプレート
  47.         $this->tpl_title .= '会員登録(入力ページ)';             // ページタイトル
  48.  
  49.         $masterData new SC_DB_MasterData_Ex();
  50.         $this->arrPref $masterData->getMasterData("mtb_pref",
  51.                                 array("pref_id""pref_name""rank"));
  52.         $this->arrJob $masterData->getMasterData("mtb_job");
  53.         $this->arrReminder $masterData->getMasterData("mtb_reminder");
  54.         $this->objDate new SC_Date(START_BIRTH_YEARdate("Y",strtotime("now")));
  55.         $this->arrYear $this->objDate->getYear(''1950);    // 日付プルダウン設定
  56.         $this->arrMonth $this->objDate->getMonth();
  57.         $this->arrDay $this->objDate->getDay();
  58.     }
  59.  
  60.     /**
  61.      * Page のプロセス.
  62.      *
  63.      * @return void 
  64.      */
  65.     function process({
  66.         global $objCampaignSess;
  67.  
  68.         $objConn new SC_DbConn();
  69.         $objQuery new SC_Query();
  70.         $objView new SC_SiteView();
  71.         $CONF $objView->objSiteInfo->data;
  72.         $objCampaignSess new SC_CampaignSession();
  73.  
  74.         // レイアウトデザインを取得
  75.         $objLayout new SC_Helper_PageLayout_Ex();
  76.         $objLayout->sfGetPageLayout($thisfalseDEF_LAYOUT);
  77.  
  78.         //---- 登録用カラム配列
  79.         $arrRegistColumn array(
  80.                                  array(  "column" => "name01""convert" => "aKV" ),
  81.                                  array(  "column" => "name02""convert" => "aKV" ),
  82.                                  array(  "column" => "kana01""convert" => "CKV" ),
  83.                                  array(  "column" => "kana02""convert" => "CKV" ),
  84.                                  array(  "column" => "zip01""convert" => "n" ),
  85.                                  array(  "column" => "zip02""convert" => "n" ),
  86.                                  array(  "column" => "pref""convert" => "n" ),
  87.                                  array(  "column" => "addr01""convert" => "aKV" ),
  88.                                  array(  "column" => "addr02""convert" => "aKV" ),
  89.                                  array(  "column" => "email""convert" => "a" ),
  90.                                  array(  "column" => "email02""convert" => "a" ),
  91.                                  array(  "column" => "email_mobile""convert" => "a" ),
  92.                                  array(  "column" => "email_mobile02""convert" => "a" ),
  93.                                  array(  "column" => "tel01""convert" => "n" ),
  94.                                  array(  "column" => "tel02""convert" => "n" ),
  95.                                  array(  "column" => "tel03""convert" => "n" ),
  96.                                  array(  "column" => "fax01""convert" => "n" ),
  97.                                  array(  "column" => "fax02""convert" => "n" ),
  98.                                  array(  "column" => "fax03""convert" => "n" ),
  99.                                  array(  "column" => "sex""convert" => "n" ),
  100.                                  array(  "column" => "job""convert" => "n" ),
  101.                                  array(  "column" => "birth""convert" => "n" ),
  102.                                  array(  "column" => "year",  "convert" => "n"),
  103.                                  array(  "column" => "month""convert" => "n"),
  104.                                  array(  "column" => "day",   "convert" => "n"),
  105.                                  array(  "column" => "reminder""convert" => "n" ),
  106.                                  array(  "column" => "reminder_answer""convert" => "aKV"),
  107.                                  array(  "column" => "password""convert" => "a" ),
  108.                                  array(  "column" => "password02""convert" => "a" ),
  109.                                  array(  "column" => "mailmaga_flg""convert" => "n" )
  110.                                  );
  111.  
  112.         //---- 登録除外用カラム配列
  113.         $arrRejectRegistColumn array("year""month""day""email02""email_mobile02""password02");
  114.  
  115.         if ($_SERVER["REQUEST_METHOD"== "POST"{
  116.  
  117.             //-- POSTデータの引き継ぎ
  118.             $this->arrForm $_POST;
  119.  
  120.             if($this->arrForm['year'== '----'{
  121.                 $this->arrForm['year''';
  122.             }
  123.  
  124.             $this->arrForm['email'strtolower($this->arrForm['email']);        // emailはすべて小文字で処理
  125.             $this->arrForm['email02'strtolower($this->arrForm['email02']);    // emailはすべて小文字で処理
  126.  
  127.             //-- 入力データの変換
  128.             $this->arrForm $this->lfConvertParam($this->arrForm$arrRegistColumn);
  129.  
  130.             //-- 入力エラーチェック
  131.             $this->arrErr $this->lfErrorCheck($this->arrForm);
  132.  
  133.             if ($this->arrErr || $_POST["mode"== "return"{        // 入力エラーのチェック
  134.                 foreach($arrRegistColumn as $key{
  135.                     $this->$key['column'$this->arrForm[$key['column']];
  136.                 }
  137.  
  138.             else {
  139.  
  140.                 //-- 確認
  141.                 if ($_POST["mode"== "confirm"{
  142.                     foreach($this->arrForm as $key => $val{
  143.                         if ($key != "mode" && $key != "subm"$this->list_data$key $val;
  144.                     }
  145.                     //パスワード表示
  146.                     $passlen strlen($this->arrForm['password']);
  147.                     $this->passlen $this->lfPassLen($passlen);
  148.  
  149.                     $this->tpl_mainpage = 'entry/confirm.tpl';
  150.                     $this->tpl_title = '会員登録(確認ページ)';
  151.  
  152.                 }
  153.  
  154.                 //--仮登録と完了画面
  155.                 if ($_POST["mode"== "complete"{
  156.                     $this->uniqid $this->lfRegistData ($this->arrForm$arrRegistColumn$arrRejectRegistColumn);
  157.  
  158.                     if($objCampaignSess->getIsCampaign()) {
  159.                         $this->etc_value "&cp=".$objCampaignSess->getCampaignId();
  160.                     }
  161.  
  162.                     $this->tpl_css = '/css/layout/entry/complete.css';
  163.                     $this->tpl_mainpage = 'entry/complete.tpl';
  164.                     $this->tpl_title = '会員登録(完了ページ)';
  165.  
  166.  
  167.                     // 仮登録完了メール送信
  168.                     $this->CONF $CONF;
  169.                     $this->name01 $_POST['name01'];
  170.                     $this->name02 $_POST['name02'];
  171.                     $objMailText new SC_SiteView();
  172.                     $objMailText->assignobj($this);
  173.                     $objHelperMail new SC_Helper_Mail_Ex();
  174.                     $objQuery new SC_Query();
  175.  
  176.                     $subject $objHelperMail->sfMakeSubject($objQuery$objMailText$this'会員登録のご確認');
  177.  
  178.                     $toCustomerMail $objMailText->fetch("mail_templates/customer_mail.tpl");
  179.                     $objMail new SC_SendMail();
  180.                     $objMail->setItem(
  181.                                       ''                                    // 宛先
  182.                                       $subject                            // サブジェクト
  183.                                       $toCustomerMail                    // 本文
  184.                                       $CONF["email03"]                    // 配送元アドレス
  185.                                       $CONF["shop_name"]                // 配送元 名前
  186.                                       $CONF["email03"]                    // reply_to
  187.                                       $CONF["email04"]                    // return_path
  188.                                       $CONF["email04"]                    //  Errors_to
  189.                                       $CONF["email01"]                    //  Bcc
  190.                                       );
  191.                     // 宛先の設定
  192.                     $name $_POST["name01"$_POST["name02"." 様";
  193.                     $objMail->setTo($_POST["email"]$name);
  194.                     $objMail->sendMail();
  195.  
  196.                     // キャンペーン受注情報を登録
  197.                     $this->lfRegistCampaignOrder($this->uniqid$objQuery);
  198.  
  199.                     // 完了ページに移動させる。
  200.                     $this->sendRedirect($this->getLocation("./complete.php"));
  201.                     exit;
  202.                 }
  203.             }
  204.         }
  205.  
  206.         if($this->year == ''{
  207.             $this->year '----';
  208.         }
  209.  
  210.         //---- ページ表示
  211.         $objView->assignobj($this);
  212.         // フレームを選択(キャンペーンページから遷移なら変更)
  213.         $objCampaignSess->pageView($objView);
  214.  
  215.     }
  216.  
  217.     /**
  218.      * デストラクタ.
  219.      *
  220.      * @return void 
  221.      */
  222.     function destroy({
  223.         parent::destroy();
  224.     }
  225.  
  226.     //---- function群
  227.     function lfRegistData ($array$arrRegistColumn$arrRejectRegistColumn{
  228.         $objConn new SC_DbConn();
  229.  
  230.         // 仮登録
  231.         foreach ($arrRegistColumn as $data{
  232.             if (strlen($array$data["column"] ]&& in_array($data["column"]$arrRejectRegistColumn)) {
  233.                 $arrRegist$data["column"] ] $array$data["column"] ];
  234.             }
  235.         }
  236.  
  237.         // 誕生日が入力されている場合
  238.         if (strlen($array["year"]{
  239.             $arrRegist["birth"$array["year"."/"$array["month"."/"$array["day"." 00:00:00";
  240.         }
  241.  
  242.         // パスワードの暗号化
  243.         $arrRegist["password"sha1($arrRegist["password"":" AUTH_MAGIC);
  244.  
  245.         $count 1;
  246.         while ($count != 0{
  247.             $uniqid SC_Utils_Ex::sfGetUniqRandomId("t");
  248.             $count $objConn->getOne("SELECT COUNT(*) FROM dtb_customer WHERE secret_key = ?"array($uniqid));
  249.         }
  250.  
  251.         $arrRegist["secret_key"$uniqid;        // 仮登録ID発行
  252.         $arrRegist["create_date""now()";     // 作成日
  253.         $arrRegist["update_date""now()";     // 更新日
  254.         $arrRegist["first_buy_date""";         // 最初の購入日
  255.  
  256.         //-- 仮登録実行
  257.         $objConn->query("BEGIN");
  258.  
  259.         $objQuery new SC_Query();
  260.         $objQuery->insert("dtb_customer"$arrRegist);
  261.  
  262.         /* メルマガ会員機能は現在停止中 2007/03/07
  263.  
  264.         //-- 非会員でメルマガ登録しているかの判定
  265.         $sql = "SELECT count(*) FROM dtb_customer_mail WHERE email = ?";
  266.         $mailResult = $objConn->getOne($sql, array($arrRegist["email"]));
  267.  
  268.         //-- メルマガ仮登録実行
  269.         $arrRegistMail["email"] = $arrRegist["email"];
  270.         if ($array["mailmaga_flg"] == 1) {
  271.         $arrRegistMail["mailmaga_flg"] = 4;
  272.         } elseif ($array["mailmaga_flg"] == 2) {
  273.         $arrRegistMail["mailmaga_flg"] = 5;
  274.         } else {
  275.         $arrRegistMail["mailmaga_flg"] = 6;
  276.         }
  277.         $arrRegistMail["update_date"] = "now()";
  278.  
  279.         // 非会員でメルマガ登録している場合
  280.         if ($mailResult == 1) {
  281.         $objQuery->update("dtb_customer_mail", $arrRegistMail, "email = '" .addslashes($arrRegistMail["email"]). "'");
  282.         } else {                // 新規登録の場合
  283.         $arrRegistMail["create_date"] = "now()";
  284.         $objQuery->insert("dtb_customer_mail", $arrRegistMail);
  285.         }
  286.         */
  287.         $objConn->query("COMMIT");
  288.  
  289.         return $uniqid;
  290.     }
  291.  
  292.     //---- 取得文字列の変換
  293.     function lfConvertParam($array$arrRegistColumn{
  294.         /*
  295.          *    文字列の変換
  296.          *    K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換
  297.          *    C :  「全角ひら仮名」を「全角かた仮名」に変換
  298.          *    V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します
  299.          *    n :  「全角」数字を「半角(ハンカク)」に変換
  300.          *  a :  全角英数字を半角英数字に変換する
  301.          */
  302.         // カラム名とコンバート情報
  303.         foreach ($arrRegistColumn as $data{
  304.             $arrConvList$data["column"] ] $data["convert"];
  305.         }
  306.         // 文字変換
  307.         foreach ($arrConvList as $key => $val{
  308.             // POSTされてきた値のみ変換する。
  309.             if(strlen(($array[$key])) 0{
  310.                 $array[$keymb_convert_kana($array[$key,$val);
  311.             }
  312.         }
  313.         return $array;
  314.     }
  315.  
  316.     //---- 入力エラーチェック
  317.     function lfErrorCheck($array{
  318.  
  319.         $objErr new SC_CheckError($array);
  320.  
  321.         $objErr->doFunc(array("お名前(姓)"'name01'STEXT_LEN)array("EXIST_CHECK""NO_SPTAB""SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
  322.         $objErr->doFunc(array("お名前(名)"'name02'STEXT_LEN)array("EXIST_CHECK""NO_SPTAB""SPTAB_CHECK" "MAX_LENGTH_CHECK"));
  323.         $objErr->doFunc(array("フリガナ(セイ)"'kana01'STEXT_LEN)array("EXIST_CHECK""NO_SPTAB""SPTAB_CHECK" ,"MAX_LENGTH_CHECK""KANA_CHECK"));
  324.         $objErr->doFunc(array("フリガナ(メイ)"'kana02'STEXT_LEN)array("EXIST_CHECK""NO_SPTAB""SPTAB_CHECK" ,"MAX_LENGTH_CHECK""KANA_CHECK"));
  325.         $objErr->doFunc(array("郵便番号1""zip01"ZIP01_LEN ,array("EXIST_CHECK""SPTAB_CHECK" ,"NUM_CHECK""NUM_COUNT_CHECK"));
  326.         $objErr->doFunc(array("郵便番号2""zip02"ZIP02_LEN ,array("EXIST_CHECK""SPTAB_CHECK" ,"NUM_CHECK""NUM_COUNT_CHECK"));
  327.         $objErr->doFunc(array("郵便番号""zip01""zip02")array("ALL_EXIST_CHECK"));
  328.         $objErr->doFunc(array("都道府県"'pref')array("SELECT_CHECK","NUM_CHECK"));
  329.         $objErr->doFunc(array("ご住所1""addr01"MTEXT_LEN)array("EXIST_CHECK","SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
  330.         $objErr->doFunc(array("ご住所2""addr02"MTEXT_LEN)array("EXIST_CHECK","SPTAB_CHECK" ,"MAX_LENGTH_CHECK"));
  331.         $objErr->doFunc(array('メールアドレス'"email"MTEXT_LEN,array("NO_SPTAB""EXIST_CHECK""EMAIL_CHECK""SPTAB_CHECK" ,"EMAIL_CHAR_CHECK""MAX_LENGTH_CHECK"));
  332.         $objErr->doFunc(array('メールアドレス(確認)'"email02"MTEXT_LEN,array("NO_SPTAB""EXIST_CHECK""EMAIL_CHECK","SPTAB_CHECK" "EMAIL_CHAR_CHECK""MAX_LENGTH_CHECK"));
  333.         $objErr->doFunc(array('メールアドレス''メールアドレス(確認)'"email""email02",array("EQUAL_CHECK"));
  334.  
  335.         //現会員の判定 → 現会員もしくは仮登録中は、メアド一意が前提になってるので同じメアドで登録不可
  336.         if (strlen($array["email"]0{
  337.             $array['email'strtolower($array['email']);
  338.             $objQuery new SC_Query();
  339.             $arrRet $objQuery->select("email, update_date, del_flg""dtb_customer","email = ? ORDER BY del_flg"array($array["email"]));
  340.  
  341.             if(count($arrRet0{
  342.                 if($arrRet[0]['del_flg'!= '1'{
  343.                     // 会員である場合
  344.                     $objErr->arrErr["email".= "※ すでに会員登録で使用されているメールアドレスです。<br />";
  345.                 else {
  346.                     // 退会した会員である場合
  347.                     $leave_time SC_Utils_Ex::sfDBDatetoTime($arrRet[0]['update_date']);
  348.                     $now_time time();
  349.                     $pass_time $now_time $leave_time;
  350.                     // 退会から何時間-経過しているか判定する。
  351.                     $limit_time ENTRY_LIMIT_HOUR 3600;
  352.                     if($pass_time $limit_time{
  353.                         $objErr->arrErr["email".= "※ 退会から一定期間の間は、同じメールアドレスを使用することはできません。<br />";
  354.                     }
  355.                 }
  356.             }
  357.         }
  358.  
  359.         $objErr->doFunc(array("お電話番号1"'tel01')array("EXIST_CHECK","SPTAB_CHECK" ));
  360.         $objErr->doFunc(array("お電話番号2"'tel02')array("EXIST_CHECK","SPTAB_CHECK" ));
  361.         $objErr->doFunc(array("お電話番号3"'tel03')array("EXIST_CHECK","SPTAB_CHECK" ));
  362.         $objErr->doFunc(array("お電話番号""tel01""tel02""tel03",TEL_ITEM_LEN,array("TEL_CHECK"));
  363.         $objErr->doFunc(array("FAX番号1"'fax01')array("SPTAB_CHECK"));
  364.         $objErr->doFunc(array("FAX番号2"'fax02')array("SPTAB_CHECK"));
  365.         $objErr->doFunc(array("FAX番号3"'fax03')array("SPTAB_CHECK"));
  366.         $objErr->doFunc(array("FAX番号""fax01""fax02""fax03"TEL_ITEM_LEN,array("TEL_CHECK"));
  367.         $objErr->doFunc(array("ご性別""sex",array("SELECT_CHECK""NUM_CHECK"));
  368.         $objErr->doFunc(array("パスワード"'password'PASSWORD_LEN1PASSWORD_LEN2)array("EXIST_CHECK""SPTAB_CHECK" ,"ALNUM_CHECK""NUM_RANGE_CHECK"));
  369.         $objErr->doFunc(array("パスワード(確認)"'password02'PASSWORD_LEN1PASSWORD_LEN2)array("EXIST_CHECK""SPTAB_CHECK" ,"ALNUM_CHECK""NUM_RANGE_CHECK"));
  370.         $objErr->doFunc(array('パスワード''パスワード(確認)'"password""password02",array("EQUAL_CHECK"));
  371.         $objErr->doFunc(array("パスワードを忘れたときのヒント 質問""reminder",array("SELECT_CHECK""NUM_CHECK"));
  372.         $objErr->doFunc(array("パスワードを忘れたときのヒント 答え""reminder_answer"STEXT_LEN,array("EXIST_CHECK","SPTAB_CHECK" "MAX_LENGTH_CHECK"));
  373.         $objErr->doFunc(array("メールマガジン""mailmaga_flg",array("SELECT_CHECK""NUM_CHECK"));
  374.         $objErr->doFunc(array("生年月日""year""month""day")array("CHECK_DATE"));
  375.  
  376.  
  377.         return $objErr->arrErr;
  378.     }
  379.  
  380.     // キャンペーン受注テーブルへ登録
  381.     function lfRegistCampaignOrder($uniqid&$objQuery{
  382.         global $objCampaignSess;
  383.  
  384.         $campaign_id $objCampaignSess->getCampaignId();
  385.  
  386.         // 顧客データを取得
  387.         $cols "
  388.             customer_id,
  389.             name01 as order_name01,
  390.             name02 as order_name02,
  391.             kana01 as order_kana01,
  392.             kana02 as order_kana02,
  393.             zip01 as order_zip01,
  394.             zip02 as order_zip02,
  395.             pref as order_pref,
  396.             addr01 as order_addr01,
  397.             addr02 as order_addr02,
  398.             email as order_email,
  399.             tel01 as order_tel01,
  400.             tel02 as order_tel02,
  401.             tel03 as order_tel03,
  402.             fax01 as order_fax01,
  403.             fax02 as order_fax02,
  404.             fax03 as order_fax03,
  405.             sex as order_sex,
  406.             job as order_job,
  407.             birth as order_birth
  408.             ";
  409.  
  410.         $arrCustomer $objQuery->select($cols"dtb_customer""secret_key = ?"array($uniqid));
  411.  
  412.         $sqlval $arrCustomer[0];
  413.         $sqlval['campaign_id'$campaign_id;
  414.         $sqlval['create_date''now()';
  415.  
  416.         // INSERTの実行
  417.         $objQuery->insert("dtb_campaign_order"$sqlval);
  418.  
  419.         // 申し込み数の更新
  420.         $total_count $objQuery->get("dtb_campaign""total_count""campaign_id = ?"array($campaign_id));
  421.         $arrCampaign['total_count'$total_count += 1;
  422.         $objQuery->update("dtb_campaign"$arrCampaign"campaign_id = ?"array($campaign_id));
  423.     }
  424.  
  425.     //確認ページ用パスワード表示用
  426.  
  427.     function lfPassLen($passlen){
  428.         $ret "";
  429.         for ($i=0;$i<$passlen;true){
  430.             $ret.="*";
  431.             $i++;
  432.         }
  433.         return $ret;
  434.     }
  435.  
  436. }
  437. ?>

Documentation generated on Fri, 24 Feb 2012 13:59:16 +0900 by Seasoft