Pictnotes メインイメージ

お仕事メモ

お問い合せフォームの確認画面に入力画面に戻るボタンを追加する

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回送信なるので、全部の処理が終わったあとに、
入力データの 初期化を組み込むべきだろうなぁ。取りあえずチケットは上げたのでそのうち修正されると思います。

baserCMS   2012/10/24   admin