* @copyright Copyright(c) 2010 C-UNIT SQUARE Co.,Ltd. All Rights Reserved. * @license C-UNIT SQUARE Co.,Ltd. ------------------------------------------------------------------------*/ /** * ブロック基本クラスを呼び出す */ require_once('BlockCls.php'); class InquiryCls extends BlockCls { /** * @var object モデル項目の各名前を格納した連想配列 */ protected $_arrParamName = array( 'name' => 'フォーム名', ); /**---------------------------------------------------------------------- * コンストラクタ * * @param none * @return none ----------------------------------------------------------------------*/ public function __construct() { parent::init(); $this->_arrParamName = array( 'name' => $this->_objTranslation->_('InquiryCls_msg6') ); } /**---------------------------------------------------------------------- * ブロックテキスト取得メイン * @param object $model Smartyテンプレート展開用オブジェクト * @return string ブロックテキスト ------------------------------------------------------------------------*/ protected function _create_main($model) { $this->_log->start('_create_main'); // 公開しているかチェック if (CMS_STATUS_PUBLIC != $model['model']['status']) { return ''; } $key_list = array( 'form_id', 'form_name', 'form_type', 'form_list', 'form_annotation', 'form_emptycheck', ); $arrTypeName = array( 'text', 'area', 'check', 'radio', 'select', 'mail', 'addr', 'sex', 'addr2', ); $model['model'] = $this->_set_process($model['model']); foreach ($key_list as $key) { $model['model'][$key] = explode("\t", $model['model'][$key]); } $model['model']['item'] = array(); foreach ($model['model']['form_id'] as $i => $data) { foreach ($key_list as $key) { $key_item = str_replace('form_', '', $key); $model['model']['item'][$i][$key_item] = $model['model'][$key][$i]; } // タイプモード switch ($model['model']['item'][$i]['type']) { case 0: $typeMode = 'text'; break; case 1: $typeMode = 'text'; break; case 2: $typeMode = 'check'; break; case 3: $typeMode = 'radio'; break; case 4: $typeMode = 'select'; break; case 5: $typeMode = 'mail'; break; case 6: $typeMode = 'addr'; break; case 7: $typeMode = 'sex'; break; case 8: $typeMode = 'addr2'; break; } // タイプ名 $model['model']['item'][$i]['type'] = $arrTypeName[$model['model']['item'][$i]['type']]; // フォームID $model['model']['item'][$i]['form_id'] = 'form_' . $i . ':' . $typeMode; if (1 == $model['model']['item'][$i]['emptycheck']) { $model['model']['item'][$i]['form_id'] .= ':' . $model['model']['item'][$i]['name']; } // フォーム名 switch($model['model']['item'][$i]['type']) { case 'check': $model['model']['item'][$i]['form_name'] = 'form_' . $i . ':' . $typeMode . '[]'; break; default: $model['model']['item'][$i]['form_name'] = 'form_' . $i . ':' . $typeMode; break; } } foreach ($key_list as $key) { unset($model['model'][$key]); } // 選択項目の展開 foreach ($model['model']['item'] as $i => $oItem) { $model['model']['item'][$i]['list'] = explode(',', $oItem['list']); } $view = new ViewMgr($this->_config); $userSession = new Zend_Session_Namespace('userinfo'); if ($userSession->user_id != '') { $strRootDir = $this->_config['saas']['root_dir']; $strTplPath = $this->_config['saas']['tpl_path']; $strBlock = $view->view($strRootDir . $strTplPath . '/block/inquiry.tpl', $model); } else { $strBlock = $view->view('block/inquiry.tpl', $model); } $this->_log->end(); return $strBlock; } /**---------------------------------------------------------------------- * データを検証する * @param object $model 処理対象とするモデルデータ * @param string $validate_name 処理対象とするモデルデータ * @return array 検証結果のエラーを格納した配列 ------------------------------------------------------------------------*/ public function check($model, $validate_name = null) { $this->_log->start('check'); $arrError = parent::check($model, $validate_name); // 受信用メールアドレス(1件)必須チェック if (0 == $model['mail_multi_use']) { if ('' == $model['mail']) { if (!isset($arrError['mail'])) { $arrError['mail'] = array(); } if (!isset($arrError['mail']['NotEmpty'])) { $arrError['mail']['NotEmpty'] = array(); } $arrError['mail']['NotEmpty'][] = $this->_objTranslation->_('InquiryCls_msg0'); } } // 受信用メールアドレス(振り分け)必須チェック else { $type_list = array( 'name' => $this->_objTranslation->_('InquiryCls_msg1'), 'addr' => $this->_objTranslation->_('InquiryCls_msg2'), ); foreach ($type_list as $type => $name) { foreach ($model as $key => $val) { if ('' == $val && 0 === strpos($key, 'mail_multi_' . $type . '_')) { if (!isset($arrError[$type])) { $arrError[$type] = array(); } if (!isset($arrError[$type]['NotEmpty'])) { $arrError[$type]['NotEmpty'] = array(); } $arrError[$type]['NotEmpty'][] = '[' . $name . $this->_objTranslation->_('InquiryCls_msg3'); break; } } } } $this->_log->end(); return $arrError; } /**---------------------------------------------------------------------- * 問い合わせ送信 * @param string リダイレクト先のURL ------------------------------------------------------------------------*/ public function send($id, $form_data) { $view = new ViewMgr($this->_config); $objPath = new PathMgr($this->_config); // メール本文へ渡すデータを作成 { // 問い合わせデータ取得 { $session = new Zend_Session_Namespace('preview'); if (isset($session->model) && $id === $session->model['id']) { // プレビューセッションから取得 $model = $session->model; } else { // データベースから取得 $model = $this->get($id); } } // フォーム項目展開 $model = $this->_set_process($model); // フォーム項目名展開 $form_name = explode("\t", $model['form_name']); $model['form_data'] = array(); $res_body = $model['res_body']; // Send to multible emails $to_addr = array(); foreach ($form_data as $key => $val) { { // 型 $tmp = explode(':', $key); // Remove account id in email content if (isset($tmp[1]) == false) { continue; } $type = $tmp[1]; // インデックス位置 $tmp = explode('_', $tmp[0]); $i = $tmp[1]; } { switch ($type) { // 住所振り分け用メールアドレスを取得 case 'addr2': if (1 == $model['mail_multi_use']) { if (!is_array($model['mail_multi_list'])) { $mail_multi_data = unserialize($model['mail_multi_list']); } else { $mail_multi_data = $model['mail_multi_list']; } foreach ($mail_multi_data as $objData) { if ($val == $objData['name']) { $model['mail'] = $objData['addr']; break; } } } break; // チェック case 'check': $val = implode(',', $val); break; // 自動返信メールに渡す送信先を取得 case 'mail': // Send to multible emails if($val != ''){ $to_addr[] = $val; } break; } } // 管理者メール用データ $model['form_data'][$i] = array( 'name' => $form_name[$i], 'value' => $val, ); /** * C-Unit 2011-11-30 * #6268 * Change tag name @フォーム項目 to english */ // 自動返信メール本文 //$res_body = str_replace('{' . $form_name[$i] . '@フォーム項目}', $val, $res_body); //$res_body = str_replace('{' . $form_name[$i] . $this->_objTranslation->_('InquiryCls_msg4'), $val, $res_body); $res_body = str_replace('{' . $form_name[$i] . '@FieldName}', $val, $res_body); } // 管理者メール用データ $model = $this->create_model($model); } $result = RETURN_NORMAL; // 管理者へ送信 if (RETURN_NORMAL == $result && '' != $model['model']['mail']) { $userSession = new Zend_Session_Namespace('userinfo'); if ($userSession->user_id != '') { $strRootDir = $this->_config['saas']['root_dir']; $strTplPath = $this->_config['saas']['tpl_path']; $result = mailsend(array( 'from_addr' => $this->_config['system']['mail'], 'to_addr' => $model['model']['mail'], 'title' => $model['model']['name'] . $this->_objTranslation->_('InquiryCls_msg5'), 'body' => $view->view($strRootDir . $strTplPath . '/block/mail_inquiry.tpl', $model), )); } else { $result = mailsend(array( 'from_addr' => $this->_config['system']['mail'], 'to_addr' => $model['model']['mail'], 'title' => $model['model']['name'] . $this->_objTranslation->_('InquiryCls_msg5'), 'body' => $view->view('block/mail_inquiry.tpl', $model), )); } } // ユーザーへ送信 if (RETURN_NORMAL == $result && count($to_addr) > 0 && isset($model['model']['res_use']) && 1 == $model['model']['res_use']) { // Send to multible emails foreach($to_addr as $id => $email){ $result = mailsend(array( 'from_addr' => $this->_config['system']['mail'], 'to_addr' => $email, 'title' => $model['model']['res_title'], 'body' => $res_body, )); } } if (RETURN_NORMAL == $result) { $strContentsId = $model['model']['id_ok']; } else { $strContentsId = $model['model']['id_ng']; } $strPublicPath = $objPath->get('user_site', 'public'); $objContents = $this->createObject('contents'); $url = $strPublicPath . $objContents->createURL($strContentsId); return $url; } /**---------------------------------------------------------------------- * 取得したデータを加工する * @param object $data 加工するデータを格納した連想配列 * @return object 加工したデータを格納した連想配列 ------------------------------------------------------------------------*/ protected function _get_process($data) { $this->_log->start('_get_process'); $data = parent::_get_process($data); // 複数メール振り分け情報展開 if (isset($data['mail_multi_list']) && '' != $data['mail_multi_list']) { $data['mail_multi_list'] = unserialize($data['mail_multi_list']); } else { $data['mail_multi_list'] = array(); } $key_list = array( 'form_id', 'form_name', 'form_type', 'form_list', 'form_annotation', 'form_emptycheck', ); $data['item'] = ''; foreach ($key_list as $i => $key) { $data[$key] = explode("\t", $data[$key]); } $count = count($data[$key]); for ($i = 0; $i < $count; $i ++) { $strLine = ''; foreach ($key_list as $j => $key) { if (0 != $j) { $strLine .= "\t"; } $strLine .= $data[$key][$i]; } if (0 != $i) { $data['item'] .= "\n"; } $data['item'] .= $strLine; } foreach ($key_list as $i => $key) { unset($data[$key]); } $this->_log->end(); return $data; } /**---------------------------------------------------------------------- * 登録するレコードを加工する * @param object $model 登録するレコードを格納した連想配列 * @return integer 処理結果コード ------------------------------------------------------------------------*/ protected function _set_process($model) { $this->_log->start('_set_process'); // 複数メール振り分け情報シリアライズ if (isset($model['mail_multi_name_(form_id)'])) { $mail_multi_list = array(); foreach ($model as $key => $val) { if ('mail_multi_use' == $key) continue; if ('mail_multi_name' == $key) continue; if ('mail_multi_name_(form_id)' == $key) continue; if ('mail_multi_addr_(form_id)' == $key) continue; if (0 === strpos($key, 'mail_multi_name_')) { $param = explode('_', $key); if ('' != $val) { $mail_multi_list[] = array( 'sort' => $param[3], 'name' => $val, 'addr' => $model['mail_multi_addr_' . $param[3]], ); } unset($model[$key]); unset($model['mail_multi_addr_' . $param[3]]); } } // 順序通り並び替える $mail_multi_list = vsort($mail_multi_list, array('sort' => SORT_ASC)); // 並び替え情報を削除し、配列に格納 $model['mail_multi_list'] = array(); foreach ($mail_multi_list as $i => $val) { unset($val['sort']); $model['mail_multi_list'][] = $val; } // 追加行にあるフォームを最後に追加 if ('' != $model['mail_multi_name_(form_id)']) { $model['mail_multi_list'][] = array( 'name' => $model['mail_multi_name_(form_id)'], 'addr' => $model['mail_multi_addr_(form_id)'], ); } unset($model['mail_multi_name_(form_id)']); unset($model['mail_multi_addr_(form_id)']); // シリアライズ $model['mail_multi_list'] = serialize($model['mail_multi_list']); } if (isset($model['form_radio_mail_multi_use'])) { unset($model['form_radio_mail_multi_use']); } if (isset($model['item'])) { $key_list = array( 'form_id', 'form_name', 'form_type', 'form_list', 'form_annotation', 'form_emptycheck', ); foreach ($key_list as $i => $key) { $model[$key] = ''; } if ('' != $model['item']) { $model['item'] = str_replace("\r\n", "\n", $model['item']); $model['item'] = str_replace("\r", "\n", $model['item']); $arrFormData = explode("\n", $model['item']); foreach ($arrFormData as $i => $strFormData) { $objFormData = explode("\t", $strFormData); foreach ($key_list as $j => $key) { if (0 != $i) { $model[$key] .= "\t"; } $model[$key] .= $objFormData[$j]; } } } unset($model['item']); } $this->_log->end(); return $model; } /**---------------------------------------------------------------------- * 複製対象のレコードを更新する * @param object $model 複製するレコードを格納した連想配列 * @param object $uniq_list 一意な値とするキーとフォーマットの組を格納した連想配列 * 指定するとテーブル内で一意な値となるように複製する * @return object 更新後の複製レコードを格納した連想配列 ------------------------------------------------------------------------*/ protected function _cpy_update($model, $uniq_list = array()) { $this->_log->start('_cpy_update'); $model = parent::_cpy_update($model, $uniq_list); $this->_log->end(); return $model; } }