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





