PageRenderTime 54ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/baser/plugins/mail/models/message.php

https://github.com/hashing/basercms
PHP | 740 lines | 390 code | 103 blank | 247 comment | 56 complexity | bb46819cd1373d50200d6b62bbe480f1 MD5 | raw file
Possible License(s): MIT
  1. <?php
  2. /* SVN FILE: $Id$ */
  3. /**
  4. * メッセージモデル
  5. *
  6. * PHP versions 5
  7. *
  8. * baserCMS : Based Website Development Project <http://basercms.net>
  9. * Copyright 2008 - 2012, baserCMS Users Community <http://sites.google.com/site/baserusers/>
  10. *
  11. * @copyright Copyright 2008 - 2012, baserCMS Users Community
  12. * @link http://basercms.net baserCMS Project
  13. * @package baser.plugins.mail.models
  14. * @since baserCMS v 0.1.0
  15. * @version $Revision$
  16. * @modifiedby $LastChangedBy$
  17. * @lastmodified $Date$
  18. * @license http://basercms.net/license/index.html
  19. */
  20. /**
  21. * Include files
  22. */
  23. App::import('Model', 'MailField');
  24. /**
  25. * メッセージモデル
  26. *
  27. * @package baser.plugins.mail.models
  28. *
  29. */
  30. class Message extends MailAppModel {
  31. /**
  32. * クラス名
  33. *
  34. * @var string
  35. * @access public
  36. */
  37. var $name = 'Message';
  38. /**
  39. * ビヘイビア
  40. *
  41. * @var array
  42. * @access public
  43. */
  44. var $actsAs = array('BcCache');
  45. /**
  46. * メールフォーム情報
  47. *
  48. * @var array
  49. * @access public
  50. */
  51. var $mailFields = null;
  52. /**
  53. * Constructor.
  54. *
  55. * @return void
  56. * @access private
  57. */
  58. function __construct($id = false, $table = null, $ds = null, $tablePrefix = null) {
  59. if($tablePrefix) {
  60. $cm =& ConnectionManager::getInstance();
  61. if(!empty($cm->config->plugin['prefix'])) {
  62. $dbPrefix = $cm->config->plugin['prefix'];
  63. }else {
  64. $dbPrefix = '';
  65. }
  66. $this->tablePrefix = $dbPrefix.$tablePrefix;
  67. }
  68. parent::__construct();
  69. }
  70. /**
  71. * beforeSave
  72. *
  73. * @return boolean
  74. * @access public
  75. */
  76. function beforeSave() {
  77. $this->data = $this->convertToDb($this->data);
  78. return true;
  79. }
  80. /**
  81. * バリデート処理
  82. *
  83. * @param array $options
  84. * @return array
  85. * @access public
  86. * TODO beforeValidateに移行できないか検討
  87. */
  88. function invalidFields($options = array()) {
  89. $data = $this->data;
  90. $this->_setValidate();
  91. parent::invalidFields($options);
  92. // Eメール確認チェック
  93. $this->_validEmailCofirm($data);
  94. // 不完全データチェック
  95. $this->_validGroupComplate($data);
  96. // 拡張バリデートチェック
  97. $this->_validExtends($data);
  98. // バリデートグループエラーチェック
  99. $this->_validGroupErrorCheck();
  100. // エラー内容変換
  101. $this->_validSingeErrorCheck();
  102. return $this->validationErrors;
  103. }
  104. /**
  105. * validate(入力チェック)を個別に設定する
  106. * VALID_NOT_EMPTY 空不可
  107. * VALID_EMAIL メール形式チェック
  108. *
  109. * @return void
  110. * @access protected
  111. * TODO Cake1.2に対応させる
  112. */
  113. function _setValidate() {
  114. foreach($this->mailFields as $mailField) {
  115. if($mailField['MailField']['valid']&&!empty($mailField['MailField']['use_field'])) {
  116. if(defined($mailField['MailField']['valid'])) {
  117. $this->validate[$mailField['MailField']['field_name']] = constant($mailField['MailField']['valid']);
  118. }else {
  119. $this->validate[$mailField['MailField']['field_name']]=$mailField['MailField']['valid'];
  120. }
  121. }
  122. }
  123. }
  124. /**
  125. * 拡張バリデートチェック
  126. *
  127. * @param array $data
  128. * @return void
  129. * @access protected
  130. */
  131. function _validExtends($data) {
  132. $dists = array();
  133. // 対象フィールドを取得
  134. foreach($this->mailFields as $mailField) {
  135. if(!empty($mailField['MailField']['use_field'])) {
  136. // マルチチェックボックスのチェックなしチェック
  137. if($mailField['MailField']['valid_ex']=='VALID_NOT_UNCHECKED') {
  138. if(empty($data['Message'][$mailField['MailField']['field_name']])) {
  139. $this->invalidate($mailField['MailField']['field_name']);
  140. }
  141. $dists[$mailField['MailField']['field_name']][] = @$data['Message'][$mailField['MailField']['field_name']];
  142. // datetimeの空チェック
  143. }elseif($mailField['MailField']['valid_ex']=='VALID_DATETIME') {
  144. if(empty($data['Message'][$mailField['MailField']['field_name']]['year']) ||
  145. empty($data['Message'][$mailField['MailField']['field_name']]['month']) ||
  146. empty($data['Message'][$mailField['MailField']['field_name']]['day'])) {
  147. $this->invalidate($mailField['MailField']['field_name']);
  148. }
  149. }
  150. }
  151. }
  152. }
  153. /**
  154. * エラー内容変換
  155. *
  156. * @return void
  157. * @access protected
  158. */
  159. function _validSingeErrorCheck() {
  160. foreach($this->validate as $key => $data) {
  161. // VALID_NOT_EMPTY以外は形式エラーとする
  162. if($data != '/.+/') {
  163. if(isset($this->validationErrors[$key])) {
  164. $this->invalidate($key.'_format');
  165. }
  166. }
  167. }
  168. }
  169. /**
  170. * バリデートグループエラーチェック
  171. *
  172. * @return void
  173. * @access protected
  174. */
  175. function _validGroupErrorCheck() {
  176. $dists = array();
  177. // 対象フィールドを取得
  178. foreach($this->mailFields as $mailField) {
  179. // 対象フィールドがあれば、バリデートグループごとに配列にフィールド名を格納する
  180. if($mailField['MailField']['group_valid']) {
  181. $dists[$mailField['MailField']['group_valid']][] = $mailField['MailField']['field_name'];
  182. }
  183. }
  184. // エラーが発生しているかチェック
  185. foreach($dists as $key =>$dist) {
  186. foreach($dist as $data) {
  187. if(isset($this->validationErrors[$data])) {
  188. // VALID_NOT_EMPTY以外は形式エラーとする
  189. if($this->validate[$data]!='/.+/') {
  190. $this->invalidate($key);
  191. $this->invalidate($key.'_format');
  192. }else {
  193. $this->invalidate($key);
  194. }
  195. }
  196. }
  197. }
  198. }
  199. /**
  200. * 不完全データチェック
  201. *
  202. * @param array $data
  203. * @return void
  204. * @access protected
  205. */
  206. function _validGroupComplate($data) {
  207. $dists = array();
  208. // 対象フィールドを取得
  209. foreach($this->mailFields as $mailField) {
  210. // 対象フィールドがあれば、バリデートグループごとに配列に格納する
  211. if($mailField['MailField']['valid_ex']=='VALID_GROUP_COMPLATE') {
  212. $dists[$mailField['MailField']['group_valid']][] = $data['Message'][$mailField['MailField']['field_name']];
  213. }
  214. }
  215. // チェック
  216. // バリデートグループにおけるデータの埋まり具合をチェックし、全て埋まっていない場合、全て埋まっている場合以外は
  217. // 不完全データとみなしエラーとする
  218. foreach($dists as $key =>$dist) {
  219. $i=0;
  220. foreach($dist as $data) {
  221. if($data) {
  222. $i++;
  223. }
  224. }
  225. if($i>0 && $i < count($dist)) {
  226. $this->invalidate($key.'_not_complate');
  227. for($j=1;$j<=count($dist);$j++) {
  228. $this->invalidate($key.'_'.$j);
  229. }
  230. }
  231. }
  232. }
  233. /**
  234. * Eメール確認チェック
  235. *
  236. * @param array $data
  237. * @return void
  238. * @access protected
  239. */
  240. function _validEmailCofirm($data) {
  241. $dists = array();
  242. // 対象フィールドを取得
  243. foreach($this->mailFields as $mailField) {
  244. // 対象フィールドがあれば、バリデートグループごとに配列に格納する
  245. if($mailField['MailField']['valid_ex']=='VALID_EMAIL_CONFIRM') {
  246. $dists[$mailField['MailField']['group_valid']][] = $data['Message'][$mailField['MailField']['field_name']];
  247. }
  248. }
  249. // チェック
  250. // バリデートグループにおけるデータ2つを比較し、違えばエラーとする
  251. foreach($dists as $key =>$dist) {
  252. list($a,$b)=$dist;
  253. if($a != $b) {
  254. $this->invalidate($key.'_not_same');
  255. $this->invalidate($key.'_1');
  256. $this->invalidate($key.'_2');
  257. }
  258. }
  259. }
  260. /**
  261. * 自動変換
  262. * 確認画面で利用される事も踏まえてバリデートを通す為の
  263. * 可能な変換処理を行う。
  264. *
  265. * @param array $data
  266. * @return array $data
  267. * @access public
  268. */
  269. function autoConvert($data) {
  270. foreach($this->mailFields as $mailField) {
  271. $value = $data['Message'][$mailField['MailField']['field_name']];
  272. if(!empty($value)) {
  273. // 半角処理
  274. if($mailField['MailField']['auto_convert']=='CONVERT_HANKAKU') {
  275. $value = mb_convert_kana($value,'a');
  276. }
  277. // 全角処理
  278. if($mailField['MailField']['auto_convert']=='CONVERT_ZENKAKU') {
  279. $value = mb_convert_kana($value,'AK');
  280. }
  281. // サニタイズ
  282. if(!is_array($value)) {
  283. $value = str_replace('<!--','&lt;!--', $value);
  284. }
  285. // TRIM
  286. if(!is_array($value)) {
  287. $value = trim($value);
  288. }
  289. }
  290. $data['Message'][$mailField['MailField']['field_name']] = $value;
  291. }
  292. return $data;
  293. }
  294. /**
  295. * 初期値の設定をする
  296. *
  297. * @return array $data
  298. * @access public
  299. */
  300. function getDefaultValue() {
  301. $data = array();
  302. // 対象フィールドを取得
  303. if($this->mailFields) {
  304. foreach($this->mailFields as $mailField) {
  305. // 対象フィールドがあれば、バリデートグループごとに配列に格納する
  306. if(!is_null($mailField['MailField']['default_value']) && $mailField['MailField']['default_value'] !== "") {
  307. if($mailField['MailField']['type']=='multi_check') {
  308. $data['Message'][$mailField['MailField']['field_name']][0] = $mailField['MailField']['default_value'];
  309. }else {
  310. $data['Message'][$mailField['MailField']['field_name']] = $mailField['MailField']['default_value'];
  311. }
  312. }
  313. }
  314. }
  315. return $data;
  316. }
  317. /**
  318. * データベース用のデータに変換する
  319. *
  320. * @param array $dbDatas
  321. * @return array $dbDatas
  322. * @access public
  323. */
  324. function convertToDb($dbData) {
  325. // マルチチェックのデータを|区切りに変換
  326. foreach($this->mailFields as $mailField) {
  327. if($mailField['MailField']['type']=='multi_check' && $mailField['MailField']['use_field']) {
  328. if(!empty($dbData['Message'][$mailField['MailField']['field_name']])) {
  329. if(is_array($dbData['Message'][$mailField['MailField']['field_name']])){
  330. $dbData['Message'][$mailField['MailField']['field_name']]= implode("|",$dbData['Message'][$mailField['MailField']['field_name']]);
  331. }else{
  332. $dbData['Message'][$mailField['MailField']['field_name']]= $dbData['Message'][$mailField['MailField']['field_name']];
  333. }
  334. }
  335. }
  336. }
  337. // 機種依存文字を変換
  338. $dbData['Message'] = $this->replaceText($dbData['Message']);
  339. return $dbData;
  340. }
  341. /**
  342. * 機種依存文字の変換処理
  343. * 内部文字コードがUTF-8である必要がある。
  344. * 多次元配列には対応していない。
  345. *
  346. * @param string $str 変換対象文字列
  347. * @return string $str 変換後文字列
  348. * @access public
  349. * TODO AppExModeに移行すべきかも
  350. */
  351. function replaceText($str) {
  352. $ret = $str;
  353. $arr = array(
  354. "\xE2\x85\xA0" => "I",
  355. "\xE2\x85\xA1" => "II",
  356. "\xE2\x85\xA2" => "III",
  357. "\xE2\x85\xA3" => "IV",
  358. "\xE2\x85\xA4" => "V",
  359. "\xE2\x85\xA5" => "VI",
  360. "\xE2\x85\xA6" => "VII",
  361. "\xE2\x85\xA7" => "VIII",
  362. "\xE2\x85\xA8" => "IX",
  363. "\xE2\x85\xA9" => "X",
  364. "\xE2\x85\xB0" => "i",
  365. "\xE2\x85\xB1" => "ii",
  366. "\xE2\x85\xB2" => "iii",
  367. "\xE2\x85\xB3" => "iv",
  368. "\xE2\x85\xB4" => "v",
  369. "\xE2\x85\xB5" => "vi",
  370. "\xE2\x85\xB6" => "vii",
  371. "\xE2\x85\xB7" => "viii",
  372. "\xE2\x85\xB8" => "ix",
  373. "\xE2\x85\xB9" => "x",
  374. "\xE2\x91\xA0" => "(1)",
  375. "\xE2\x91\xA1" => "(2)",
  376. "\xE2\x91\xA2" => "(3)",
  377. "\xE2\x91\xA3" => "(4)",
  378. "\xE2\x91\xA4" => "(5)",
  379. "\xE2\x91\xA5" => "(6)",
  380. "\xE2\x91\xA6" => "(7)",
  381. "\xE2\x91\xA7" => "(8)",
  382. "\xE2\x91\xA8" => "(9)",
  383. "\xE2\x91\xA9" => "(10)",
  384. "\xE2\x91\xAA" => "(11)",
  385. "\xE2\x91\xAB" => "(12)",
  386. "\xE2\x91\xAC" => "(13)",
  387. "\xE2\x91\xAD" => "(14)",
  388. "\xE2\x91\xAE" => "(15)",
  389. "\xE2\x91\xAF" => "(16)",
  390. "\xE2\x91\xB0" => "(17)",
  391. "\xE2\x91\xB1" => "(18)",
  392. "\xE2\x91\xB2" => "(19)",
  393. "\xE2\x91\xB3" => "(20)",
  394. "\xE3\x8A\xA4" => "(上)",
  395. "\xE3\x8A\xA5" => "(中)",
  396. "\xE3\x8A\xA6" => "(下)",
  397. "\xE3\x8A\xA7" => "(左)",
  398. "\xE3\x8A\xA8" => "(右)",
  399. "\xE3\x8D\x89" => "ミリ",
  400. "\xE3\x8D\x8D" => "メートル",
  401. "\xE3\x8C\x94" => "キロ",
  402. "\xE3\x8C\x98" => "グラム",
  403. "\xE3\x8C\xA7" => "トン",
  404. "\xE3\x8C\xA6" => "ドル",
  405. "\xE3\x8D\x91" => "リットル",
  406. "\xE3\x8C\xAB" => "パーセント",
  407. "\xE3\x8C\xA2" => "センチ",
  408. "\xE3\x8E\x9D" => "cm",
  409. "\xE3\x8E\x8F" => "kg",
  410. "\xE3\x8E\xA1" => "m2",
  411. "\xE3\x8F\x8D" => "K.K.",
  412. "\xE2\x84\xA1" => "TEL",
  413. "\xE2\x84\x96" => "No.",
  414. "\xE3\x8D\xBB" => "平成",
  415. "\xE3\x8D\xBC" => "昭和",
  416. "\xE3\x8D\xBD" => "大正",
  417. "\xE3\x8D\xBE" => "明治",
  418. "\xE3\x88\xB1" => "(株)",
  419. "\xE3\x88\xB2" => "(有)",
  420. "\xE3\x88\xB9" => "(代)",
  421. );
  422. return str_replace( array_keys( $arr), array_values( $arr), $str);
  423. }
  424. /**
  425. * メール用に変換する
  426. *
  427. * @param array $dbDatas
  428. * @return array $dbDatas
  429. * @access public
  430. * TODO ヘルパー化すべきかも
  431. */
  432. function convertDatasToMail($dbData) {
  433. foreach($dbData['mailFields'] as $key => $value) {
  434. $dbData['mailFields'][$key]['MailField']['before_attachment'] = strip_tags($value['MailField']['before_attachment']);
  435. $dbData['mailFields'][$key]['MailField']['after_attachment'] = strip_tags($value['MailField']['after_attachment'],"<br>");
  436. $dbData['mailFields'][$key]['MailField']['head'] = strip_tags($value['MailField']['head'],"<br>");
  437. $dbData['mailFields'][$key]['MailField']['after_attachment'] = str_replace("<br />","\n",$dbData['mailFields'][$key]['MailField']['after_attachment']);
  438. $dbData['mailFields'][$key]['MailField']['head'] = str_replace('<br />',"",$dbData['mailFields'][$key]['MailField']['head']);
  439. }
  440. foreach($this->mailFields as $mailField) {
  441. if(!empty($dbData['message'][$mailField['MailField']['field_name']])) {
  442. //var_dump(mb_convert_encoding($dbData['message'][$mailField['MailField']['field_name']],'SJIS','UTF-8'));
  443. $dbData['message'][$mailField['MailField']['field_name']] = str_replace('<br />',"\n",$dbData['message'][$mailField['MailField']['field_name']]);
  444. //$dbData['message'][$mailField['MailField']['field_name']] = mb_convert_kana($dbData['message'][$mailField['MailField']['field_name']], "K", "UTF-8");
  445. }
  446. if($mailField['MailField']['type']=='multi_check') {
  447. if(!empty($dbData['message'][$mailField['MailField']['field_name']])) {
  448. $dbData['message'][$mailField['MailField']['field_name']]= split("\|",$dbData['message'][$mailField['MailField']['field_name']]);
  449. }
  450. }
  451. }
  452. return $dbData;
  453. }
  454. /**
  455. * メッセージテーブルを作成する
  456. *
  457. * @param string $contentName コンテンツ名
  458. * @return boolean
  459. * @access public
  460. */
  461. function createTable($contentName) {
  462. $db = $this->getDataSource();
  463. $this->tablePrefix = $this->getTablePrefixByContentName($contentName);
  464. $fullTable = $this->tablePrefix.'messages';
  465. $table = str_replace($db->config['prefix'], '', $fullTable);
  466. $schema = array(
  467. 'id' => array('type' => 'integer', 'null' => false, 'default' => NULL, 'length' => 8, 'key' => 'primary'),
  468. 'modified' => array('type' => 'datetime', 'null' => true, 'default' => NULL),
  469. 'created' => array('type' => 'datetime', 'null' => true, 'default' => NULL),
  470. 'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1))
  471. );
  472. $ret = true;
  473. if($contentName == 'messages') {
  474. if($this->tableExists($fullTable)){
  475. $ret = $db->dropTable(array('table'=>$table));
  476. }
  477. }
  478. if(!$ret){
  479. return false;
  480. }
  481. $ret = $db->createTable(array('schema'=>$schema, 'table'=>$table));
  482. $this->deleteModelCache();
  483. return $ret;
  484. }
  485. /**
  486. * メッセージテーブルの名前を変更する
  487. *
  488. * @param string $source 元コンテンツ名
  489. * @param string $target 変更後コンテンツ名
  490. * @return boolean
  491. * @access public
  492. */
  493. function renameTable($source,$target) {
  494. $db = $this->getDataSource();
  495. $sourceName = $this->getTablePrefixByContentName($source).'messages';
  496. $targetName = $this->getTablePrefixByContentName($target).'messages';
  497. $sourceTable = str_replace($db->config['prefix'], '', $sourceName);
  498. $targetTable = str_replace($db->config['prefix'], '', $targetName);
  499. $ret = true;
  500. if($target== 'messages') {
  501. $ret = $db->dropTable(array('table'=>$targetTable));
  502. }
  503. if(!$ret){
  504. return false;
  505. }
  506. $ret = $db->renameTable(array('old'=>$sourceTable, 'new'=>$targetTable));
  507. if($ret && $source == 'messages') {
  508. $ret = $this->createTable($source);
  509. }
  510. $this->deleteModelCache();
  511. return $ret;
  512. }
  513. /**
  514. * メッセージテーブルを削除する
  515. *
  516. * @param string $contentName コンテンツ名
  517. * @return boolean
  518. * @access private
  519. */
  520. function dropTable($contentName) {
  521. $db = $this->getDataSource();
  522. $this->tablePrefix = $this->getTablePrefixByContentName($contentName);
  523. $fullTable = $this->tablePrefix.'messages';
  524. $table = str_replace($db->config['prefix'], '', $fullTable);
  525. if(!$this->tableExists($fullTable)){
  526. return true;
  527. }
  528. $ret = $db->dropTable(array('table'=>$table));
  529. if($ret && $contentName == 'messages') {
  530. $ret = $this->createTable($contentName);
  531. }
  532. $this->deleteModelCache();
  533. return $ret;
  534. }
  535. /**
  536. * メッセージファイルにフィールドを追加する
  537. *
  538. * @param string $contentName
  539. * @param string $field
  540. * @return array
  541. * @access public
  542. */
  543. function addField($contentName, $field) {
  544. $fullTable = $this->getTablePrefixByContentName($contentName).$this->useTable;
  545. $db = $this->getDataSource();
  546. $table = str_replace($db->config['prefix'],'',$fullTable);
  547. $options = array('field' => $field, 'column' => array('type'=>'text'), 'table' => $table);
  548. $ret = parent::addField($options);
  549. return $ret;
  550. }
  551. /**
  552. * メッセージファイルのフィールドを削除する
  553. *
  554. * @param string $contentName
  555. * @param string $field
  556. * @return array
  557. * @access public
  558. */
  559. function delField($contentName, $field) {
  560. $fullTable = $this->getTablePrefixByContentName($contentName).$this->useTable;
  561. $db = $this->getDataSource();
  562. $table = str_replace($db->config['prefix'],'',$fullTable);
  563. $ret = parent::delField(array('field'=>$field, 'table'=>$table));
  564. return $ret;
  565. }
  566. /**
  567. * メッセージファイルのフィールドを編集する
  568. *
  569. * @param string $fieldName
  570. * @param string $oldFieldName
  571. * @param string $newfieldName
  572. * @return array
  573. * @access private
  574. */
  575. function renameField($contentName, $oldFieldName,$newfieldName) {
  576. $fullTable = $this->getTablePrefixByContentName($contentName).$this->useTable;
  577. $db = $this->getDataSource();
  578. $table = str_replace($db->config['prefix'],'',$fullTable);
  579. $ret = parent::renameField(array('old'=>$oldFieldName, 'new'=>$newfieldName, 'table'=>$table));
  580. return $ret;
  581. }
  582. /**
  583. * コンテンツ名つきのテーブルプレフィックスを取得する
  584. *
  585. * @param string $contentName
  586. * @return string
  587. * @access public
  588. */
  589. function getTablePrefixByContentName($contentName) {
  590. $db = $this->getDataSource();
  591. $prefix = '';
  592. if($contentName != 'messages') {
  593. $prefix = $db->config['prefix'].$contentName."_";
  594. } else {
  595. $prefix = $db->config['prefix'];
  596. }
  597. return $prefix;
  598. }
  599. /**
  600. * メッセージ保存用テーブルのフィールドを最適化する
  601. * 初回の場合、id/created/modifiedを追加する
  602. * 2回目以降の場合は、最後のカラムに追加する
  603. *
  604. * @param array $dbConfig
  605. * @param int $mailContentId
  606. * @return boolean
  607. * @access public
  608. */
  609. function construction($mailContentId) {
  610. App::import('Model','Mail.MailField');
  611. App::import('Model','Mail.MailContent');
  612. $mailFieldClass = new MailField();
  613. $mailContentClass = new MailContent();
  614. // フィールドリストを取得
  615. $mailFields = $mailFieldClass->find('all', array('conditions' => array('MailField.mail_content_id' => $mailContentId)));
  616. // コンテンツ名を取得
  617. $contentName = $mailContentClass->field('name', array('MailContent.id'=>$mailContentId));
  618. if(!$this->tableExists($this->getTablePrefixByContentName($contentName).'messages')) {
  619. /* 初回の場合 */
  620. $this->createTable($contentName);
  621. }else {
  622. /* 2回目以降の場合 */
  623. $this->tablePrefix = $this->getTablePrefixByContentName($contentName);
  624. $this->_schema = null;
  625. $this->cacheSources = false;
  626. $schema = $this->schema();
  627. $messageFields = array_keys($schema);
  628. foreach($mailFields as $mailField) {
  629. if(!in_array($mailField['MailField']['field_name'], $messageFields)) {
  630. $this->addField($contentName, $mailField['MailField']['field_name']);
  631. }
  632. }
  633. }
  634. return true;
  635. }
  636. }
  637. ?>