お問い合せフォームの確認画面に入力画面に戻るボタンを追加する
		2012/10/24
	
	
	baserCMSのお問い合せフォーム(メールプラグイン)ってすごく便利なのですが、
	入力画面に戻るボタンがないので、実装してみました。
	baserCMS 2.0.3で確認しています。
	
	とりあえず、変更点
	baser/plugins/mail/views/elements/mail_form.php
	の50行目あたりの
<?php if($freezed): ?>
    <?php echo $mailform->submit(' 送信する ', array('div' => false, 'class' => 'btn-red button', 'id' => 'MessageSubmit'))  ?>
<?php elseif($this->action != 'submit'): ?>
の部分に1行追加&1行修正して
<?php if($freezed): ?>
    <?php echo $mailform->submit(' 書き直す ', array('div' => false, 'class' => 'btn-red button', 'id' => 'MessageBack', 'name' => 'data[mode][back]'))  ?>
    <?php echo $mailform->submit(' 送信する ', array('div' => false, 'class' => 'btn-red button', 'id' => 'MessageSubmit', 'name' => 'data[mode][submit]'))  ?>
<?php elseif($this->action != 'submit'): ?>
と、戻るボタンの追加とsubmitボタンに名前をつけます。
でもって、次は baser/plugins/mail/controllers/mail_controller.php の324行目あたり function submit($id = null) のメソッドのなかの
        if(!$this->data) {
            $this->redirect(array('action' => 'index', $id));
        }else {
を
        if(!$this->data) {
            $this->redirect(array('action' => 'index', $id));
        } elseif( isset($this->data['mode']) && key($this->data['mode']) == 'back' ) {
            $this->_back($id);
        } else {
	とします。
	
	あわせて、元ファイルだと、352行目あたりの
	        }
	
	        $this->set('mailContent',$this->dbDatas['mailContent']);
	        $this->render($this->dbDatas['mailContent']['MailContent']['form_template'].DS.'submit');
を、
	            $this->set('mailContent',$this->dbDatas['mailContent']);
	            $this->render($this->dbDatas['mailContent']['MailContent']['form_template'].DS.'submit');
	        }
	として、326行目(元ファイルは324行目)あたりの else 句の中に入れ込みます。
	
	
	最後に、同じmail_controller.phpにメソッドをまるっと追加。
    /**
     * [private] 確認画面から戻る
     *
     * @param mixed mail_content_id
     * @return void
     * @access public
     */
    function _back($id)
    {
        $this->set('freezed',false);
        $this->set('error',false);
        if($this->dbDatas['mailFields']){
            $this->set('mailFields',$this->dbDatas['mailFields']);
        }
        //mailの重複チェックがある場合は、チェック用のデータを復帰
        $sendVal = array();
        $noSendVal = array();
        foreach($this->dbDatas['mailContent']['MailField'] as $val){
            if($val['valid_ex'] == 'VALID_EMAIL_CONFIRM'){
                if(! $val['no_send'] ){
                    $sendVal[$val['group_valid']] = $val['field_name'];
                } else {
                    $noSendVal[$val['group_valid']][] = $val['field_name'] ;
                }
            }
        }
        if(! empty($noSendVal) ){
            foreach( $noSendVal as $key => $val){
                foreach( $val as $v){
                    if( isset($this->data['Message'][$sendVal[$key]]) ){
                        $this->data['Message'][$v] = $this->data['Message'][$sendVal[$key]];
                    }
                }
            }
        }
        $this->action = 'index'; //viewのボタンの表示の切り替えに必要なため変更
        $this->set('mailContent',$this->dbDatas['mailContent']);
        $this->render($this->dbDatas['mailContent']['MailContent']['form_template'].DS.'index');
    }
とすれば、完成です。
で、スマホは基本PCと同じなので一応チェックして動作確認しておりますが、ケータイはview自体が別物なので baser/plugins/mail/views/elements/mobile/mail_form.php の
    <?php echo $mailform->submit(' 送信する ', array('class' => 'btn-red button'))  ?>
を
    <?php echo $mailform->submit(' 書き直す ', array('class' => 'btn-red button', 'name' => 'data[mode][back]'))  ?>
    <?php echo $mailform->submit(' 送信する ', array('class' => 'btn-red button', 'name' => 'data[mode][submit]'))  ?>
	とすれば大丈夫です。
	
	とりあえず、本体の方には、マージしてもらえるように(関連する細かいバグを含めて)リクエストしておりますが
	現状のバージョンにくみこみたい場合はお試しください。
	
	あと、完了画面で、リロードすると2回送信なるので、全部の処理が終わったあとに、
	入力データの 初期化を組み込むべきだろうなぁ。取りあえずチケットは上げたのでそのうち修正されると思います。