PageRenderTime 61ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/baser/plugins/mail/controllers/mail_fields_controller.php

https://github.com/hashing/basercms
PHP | 600 lines | 303 code | 68 blank | 229 comment | 59 complexity | ee47a142839855e61844f83ca7ec83f5 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.controllers
  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. /**
  24. * メールフィールドコントローラー
  25. *
  26. * @package baser.plugins.mail.controllers
  27. */
  28. class MailFieldsController extends MailAppController {
  29. /**
  30. * クラス名
  31. *
  32. * @var string
  33. * @access public
  34. */
  35. var $name = 'MailFields';
  36. /**
  37. * モデル
  38. *
  39. * @var array
  40. * @access public
  41. */
  42. var $uses = array('Mail.MailField','Mail.MailContent','Mail.Message');
  43. /**
  44. * ヘルパー
  45. *
  46. * @var array
  47. * @access public
  48. */
  49. var $helpers = array(BC_HTML_HELPER, BC_TIME_HELPER, BC_FORM_HELPER, BC_TEXT_HELPER, BC_CSV_HELPER);
  50. /**
  51. * コンポーネント
  52. *
  53. * @var array
  54. * @access public
  55. */
  56. var $components = array('BcAuth','Cookie','BcAuthConfigure');
  57. /**
  58. * ぱんくずナビ
  59. *
  60. * @var array
  61. * @access public
  62. */
  63. var $crumbs = array(
  64. array('name' => 'プラグイン管理', 'url' => array('plugin' => '', 'controller' => 'plugins', 'action' => 'index')),
  65. array('name' => 'メールフォーム管理', 'url' => array('plugin' => 'mail', 'controller' => 'mail_contents', 'action' => 'index'))
  66. );
  67. /**
  68. * サブメニューエレメント
  69. *
  70. * @var string
  71. * @access public
  72. */
  73. var $subMenuElements = array();
  74. /**
  75. * beforeFilter
  76. *
  77. * @return void
  78. * @access public
  79. */
  80. function beforeFilter() {
  81. parent::beforeFilter();
  82. $this->MailContent->recursive = -1;
  83. $this->mailContent = $this->MailContent->read(null,$this->params['pass'][0]);
  84. $this->crumbs[] = array('name' => $this->mailContent['MailContent']['title'].'管理', 'url' => array('plugin' => 'mail', 'controller' => 'mail_fields', 'action' => 'index', $this->params['pass'][0]));
  85. }
  86. /**
  87. * beforeRender
  88. *
  89. * @return void
  90. * @access public
  91. */
  92. function beforeRender() {
  93. parent::beforeRender();
  94. $this->set('mailContent',$this->mailContent);
  95. }
  96. /**
  97. * [ADMIN] メールフィールド一覧
  98. *
  99. * @param int $mailContentId
  100. * @return void
  101. * @access public
  102. */
  103. function admin_index($mailContentId) {
  104. if(!$mailContentId || !$this->mailContent) {
  105. $this->Session->setFlash('無効な処理です。');
  106. $this->redirect(array('controller' => 'mail_contents', 'action' => 'index'));
  107. }
  108. $conditions = $this->_createAdminIndexConditions($mailContentId);
  109. $datas = $this->MailField->find('all', array('conditions' => $conditions, 'order' => 'MailField.sort'));
  110. $this->set('datas',$datas);
  111. $this->_setAdminIndexViewData();
  112. if($this->RequestHandler->isAjax() || !empty($this->params['url']['ajax'])) {
  113. $this->render('ajax_index');
  114. return;
  115. }
  116. $this->set('publishLink', '/' . $this->mailContent['MailContent']['name'] . '/index');
  117. $this->subMenuElements = array('mail_fields','mail_common');
  118. $this->pageTitle = '['.$this->mailContent['MailContent']['title'].'] メールフィールド一覧';
  119. $this->help = 'mail_fields_index';
  120. }
  121. /**
  122. * 一覧の表示用データをセットする
  123. *
  124. * @return void
  125. * @access protected
  126. */
  127. function _setAdminIndexViewData() {
  128. /* セッション処理 */
  129. if(isset($this->params['named']['sortmode'])){
  130. $this->Session->write('SortMode.MailField', $this->params['named']['sortmode']);
  131. }
  132. /* 並び替えモード */
  133. if(!$this->Session->check('SortMode.MailField')){
  134. $this->set('sortmode', 0);
  135. }else{
  136. $this->set('sortmode', $this->Session->read('SortMode.MailField'));
  137. }
  138. }
  139. /**
  140. * [ADMIN] メールフィールド追加
  141. *
  142. * @param int $mailContentId
  143. * @return void
  144. * @access public
  145. */
  146. function admin_add($mailContentId) {
  147. if(!$mailContentId || !$this->mailContent) {
  148. $this->Session->setFlash('無効な処理です。');
  149. $this->redirect(array('controller' => 'mail_contents', 'action' => 'index'));
  150. }
  151. if(!$this->data) {
  152. $this->data = $this->_getDefaultValue();
  153. }else {
  154. /* 登録処理 */
  155. $this->data['MailField']['mail_content_id'] = $mailContentId;
  156. $this->data['MailField']['no'] = $this->MailField->getMax('no',array('MailField.mail_content_id'=>$mailContentId))+1;
  157. $this->data['MailField']['sort'] = $this->MailField->getMax('sort')+1;
  158. $this->MailField->create($this->data);
  159. if($this->MailField->validates()) {
  160. if($this->Message->addField($this->mailContent['MailContent']['name'],$this->data['MailField']['field_name'])) {
  161. // データを保存
  162. if($this->MailField->save(null, false)) {
  163. $message = '新規メールフィールド「'.$this->data['MailField']['name'].'」を追加しました。';
  164. $this->Session->setFlash($message);
  165. $this->MailField->saveDbLog($message);
  166. $this->redirect(array('controller' => 'mail_fields', 'action' => 'index', $mailContentId));
  167. }else {
  168. $this->Session->setFlash('データベース処理中にエラーが発生しました。');
  169. }
  170. } else {
  171. $this->Session->setFlash('データベースに問題があります。メール受信データ保存用テーブルの更新処理に失敗しました。');
  172. }
  173. } else {
  174. $this->Session->setFlash('入力エラーです。内容を修正してください。');
  175. }
  176. }
  177. $this->subMenuElements = array('mail_fields','mail_common');
  178. $this->pageTitle = '['.$this->mailContent['MailContent']['title'].'] 新規メールフィールド登録';
  179. $this->set('controlSource',$this->MailField->getControlSource());
  180. $this->help = 'mail_fields_form';
  181. $this->render('form');
  182. }
  183. /**
  184. * [ADMIN] 編集処理
  185. *
  186. * @param int $mailContentId
  187. * @param int $id
  188. * @return void
  189. * @access public
  190. */
  191. function admin_edit($mailContentId,$id) {
  192. if(!$id && empty($this->data)) {
  193. $this->Session->setFlash('無効なIDです。');
  194. $this->redirect(array('action' => 'index'));
  195. }
  196. if (empty($this->data)) {
  197. $this->data = $this->MailField->read(null, $id);
  198. }else {
  199. $old = $this->MailField->read(null, $id);
  200. $this->MailField->set($this->data);
  201. if($this->MailField->validates()) {
  202. $ret = true;
  203. if ($old['MailField']['field_name'] != $this->data['MailField']['field_name']) {
  204. $ret = $this->Message->renameField($this->mailContent['MailContent']['name'], $old['MailField']['field_name'],$this->data['MailField']['field_name']);
  205. }
  206. if ($ret) {
  207. /* 更新処理 */
  208. if($this->MailField->save(null, false)) {
  209. $message = 'メールフィールド「'.$this->data['MailField']['name'].'」を更新しました。';
  210. $this->Session->setFlash($message);
  211. $this->MailField->saveDbLog($message);
  212. $this->redirect(array('action' => 'index', $mailContentId));
  213. }else {
  214. $this->Session->setFlash('データベース処理中にエラーが発生しました。');
  215. }
  216. } else {
  217. $this->Session->setFlash('データベースに問題があります。メール受信データ保存用テーブルの更新処理に失敗しました。');
  218. }
  219. } else {
  220. $this->Session->setFlash('入力エラーです。内容を修正してください。');
  221. }
  222. }
  223. /* 表示設定 */
  224. $this->subMenuElements = array('mail_fields','mail_common');
  225. $this->set('controlSource',$this->MailField->getControlSource());
  226. $this->pageTitle = '['.$this->mailContent['MailContent']['title'].'] メールフィールド編集: '.$this->data['MailField']['name'];
  227. $this->help = 'mail_fields_form';
  228. $this->render('form');
  229. }
  230. /**
  231. * [ADMIN] 削除処理(Ajax)
  232. *
  233. * @param int $mailContentId
  234. * @param int $id
  235. * @return void
  236. * @access public
  237. */
  238. function admin_ajax_delete($mailContentId, $id = null) {
  239. /* 除外処理 */
  240. if(!$id) {
  241. $this->ajaxError(500, '無効な処理です。');
  242. }
  243. // メッセージ用にデータを取得
  244. $mailField = $this->MailField->read(null, $id);
  245. /* 削除処理 */
  246. if ($this->Message->delField($this->mailContent['MailContent']['name'], $mailField['MailField']['field_name'])) {
  247. if($this->MailField->del($id)) {
  248. $this->MailField->saveDbLog('メールフィールド「'.$mailField['MailField']['name'].'」 を削除しました。');
  249. exit(true);
  250. }
  251. } else {
  252. $this->ajaxError(500, 'データベースに問題があります。メール受信データ保存用テーブルの更新処理に失敗しました。');
  253. }
  254. exit();
  255. }
  256. /**
  257. * [ADMIN] 削除処理
  258. *
  259. * @param int $mailContentId
  260. * @param int $id
  261. * @return void
  262. * @access public
  263. */
  264. function admin_delete($mailContentId, $id = null) {
  265. /* 除外処理 */
  266. if(!$id) {
  267. $this->Session->setFlash('無効なIDです。');
  268. $this->redirect(array('action' => 'admin_index'));
  269. }
  270. // メッセージ用にデータを取得
  271. $mailField = $this->MailField->read(null, $id);
  272. /* 削除処理 */
  273. if ($this->Message->delField($this->mailContent['MailContent']['name'], $mailField['MailField']['field_name'])) {
  274. if($this->MailField->del($id)) {
  275. $message = 'メールフィールド「'.$mailField['MailField']['name'].'」 を削除しました。';
  276. $this->Session->setFlash($message);
  277. $this->MailField->saveDbLog($message);
  278. }else {
  279. $this->Session->setFlash('データベース処理中にエラーが発生しました。');
  280. }
  281. } else {
  282. $this->Session->setFlash('データベースに問題があります。メール受信データ保存用テーブルの更新処理に失敗しました。');
  283. }
  284. $this->redirect(array('action' => 'index', $mailContentId));
  285. }
  286. /**
  287. * 一括削除
  288. *
  289. * @param array $ids
  290. * @return boolean
  291. * @access protected
  292. */
  293. function _batch_del($ids) {
  294. if($ids) {
  295. foreach($ids as $id) {
  296. // メッセージ用にデータを取得
  297. $mailField = $this->MailField->read(null, $id);
  298. $mailContentName = $this->MailContent->field('name', array('MailContent.id' => $mailField['MailField']['mail_content_id']));
  299. /* 削除処理 */
  300. if ($this->Message->delField($mailContentName, $mailField['MailField']['field_name'])) {
  301. if($this->MailField->del($id)) {
  302. $this->MailField->saveDbLog('メールフィールド「'.$mailField['MailField']['name'].'」 を削除しました。');
  303. }
  304. }
  305. }
  306. }
  307. return true;
  308. }
  309. /**
  310. * フォームの初期値を取得する
  311. *
  312. * @return string
  313. * @access protected
  314. */
  315. function _getDefaultValue() {
  316. $data['MailField']['type'] = 'text';
  317. $data['MailField']['use_field'] = 1;
  318. $data['MailField']['no_send'] = 0;
  319. return $data;
  320. }
  321. /**
  322. * フィールドデータをコピーする
  323. *
  324. * @param int $mailContentId
  325. * @param int $Id
  326. * @return void
  327. * @access protected
  328. * @deprecated admin_ajax_copy に移行
  329. */
  330. function admin_copy($mailContentId,$id) {
  331. /* 除外処理 */
  332. if(!$id) {
  333. $this->Session->setFlash('無効なIDです。');
  334. $this->redirect(array('action' => 'index'));
  335. }
  336. /* コピー対象フィールドデータを読み込む */
  337. $mailField = $this->MailField->read(null,$id);
  338. if(!$mailField) {
  339. $this->Session->setFlash('無効なIDです。');
  340. $this->redirect(array('action' => 'index'));
  341. }
  342. // 不要な値をリセットする
  343. unset($mailField['MailField']['id']);
  344. unset($mailField['MailField']['modified']);
  345. unset($mailField['MailField']['created']);
  346. // メッセージ用
  347. $oldName = $mailField['MailField']['name'];
  348. // 項目名とフィールド名は識別用に__n形式のナンバーを付加する
  349. $mailField['MailField']['field_name'] = $this->__getNewValueOnCopy('field_name',$mailField['MailField']['field_name']);
  350. $mailField['MailField']['name'] = $this->__getNewValueOnCopy('name',$mailField['MailField']['name']);
  351. $mailField['MailField']['no'] = $this->MailField->getMax('no',array('MailField.mail_content_id'=>$mailContentId))+1;
  352. $mailField['MailField']['sort'] = $this->MailField->getMax('sort')+1;
  353. // データを保存
  354. $this->MailField->create($mailField);
  355. if($this->MailField->save()) {
  356. $message = 'メールフィールド「'.$oldName.'」 をコピーしました。';
  357. $this->Session->setFlash($message);
  358. $this->MailField->saveDbLog($message);
  359. $this->Message->construction($mailContentId);
  360. }else {
  361. $message = 'コピー中にエラーが発生しました。';
  362. $this->Session->setFlash($message);
  363. }
  364. $this->redirect(array('action' => 'index', $mailContentId));
  365. }
  366. /**
  367. * フィールドデータをコピーする
  368. *
  369. * @param int $mailContentId
  370. * @param int $Id
  371. * @return void
  372. * @access protected
  373. */
  374. function admin_ajax_copy($mailContentId, $id) {
  375. /* 除外処理 */
  376. if(!$id || !$mailContentId) {
  377. $this->ajaxError(500, '無効な処理です。');
  378. }
  379. $result = $this->MailField->copy($id);
  380. if($result) {
  381. $this->Message->construction($mailContentId);
  382. $this->set('data', $result);
  383. } else {
  384. $this->ajaxError(500, 'データベースに問題があります。メール受信データ保存用テーブルの更新処理に失敗しました。');
  385. }
  386. }
  387. /**
  388. * メッセージCSVファイルをダウンロードする
  389. *
  390. * @param int $mailContentId
  391. * @return void
  392. * @access public
  393. */
  394. function admin_download_csv($mailContentId) {
  395. if(!$mailContentId || !$this->mailContent) {
  396. $this->Session->setFlash('無効な処理です。');
  397. $this->redirect(array('controller' => 'mail_contents', 'action' => 'index'));
  398. }
  399. $this->Message->alias = Inflector::camelize($this->mailContent['MailContent']['name'].'_message');
  400. $this->Message->tablePrefix .= $this->mailContent['MailContent']['name'].'_';
  401. $this->Message->_schema = null;
  402. $this->Message->cacheSources = false;
  403. $messages = $this->Message->find('all');
  404. $this->set('messages',$messages);
  405. $this->set('contentName',$this->mailContent['MailContent']['name']);
  406. }
  407. /**
  408. * 並び替えを更新する [AJAX]
  409. *
  410. * @param int $mailContentId
  411. * @return boolean
  412. * @access public
  413. */
  414. function admin_ajax_update_sort ($mailContentId) {
  415. if(!$mailContentId) {
  416. $this->ajaxError(500, '無効な処理です。');
  417. }
  418. if($this->data){
  419. $conditions = $this->_createAdminIndexConditions($mailContentId);
  420. if($this->MailField->changeSort($this->data['Sort']['id'],$this->data['Sort']['offset'],$conditions)){
  421. exit(true);
  422. } else {
  423. $this->ajaxError(500, $this->MailField->validationErrors);
  424. }
  425. } else {
  426. $this->ajaxError(500, '無効な処理です。');
  427. }
  428. exit();
  429. }
  430. /**
  431. * 管理画面ページ一覧の検索条件を取得する
  432. *
  433. * @param array $mailContentId
  434. * @return string
  435. * @access protected
  436. */
  437. function _createAdminIndexConditions($mailContentId){
  438. $conditions = array('MailField.mail_content_id'=>$mailContentId);
  439. return $conditions;
  440. }
  441. /**
  442. * [ADMIN] 無効状態にする(AJAX)
  443. *
  444. * @param string $blogContentId
  445. * @param string $blogPostId beforeFilterで利用
  446. * @param string $blogCommentId
  447. * @return void
  448. * @access public
  449. */
  450. function admin_ajax_unpublish($mailContentId, $id) {
  451. if(!$id) {
  452. $this->ajaxError(500, '無効な処理です。');
  453. }
  454. if($this->_changeStatus($id, false)) {
  455. exit(true);
  456. } else {
  457. $this->ajaxError(500, $this->MailField->validationErrors);
  458. }
  459. exit();
  460. }
  461. /**
  462. * [ADMIN] 有効状態にする(AJAX)
  463. *
  464. * @param string $blogContentId
  465. * @param string $blogPostId beforeFilterで利用
  466. * @param string $blogCommentId
  467. * @return void
  468. * @access public
  469. */
  470. function admin_ajax_publish($mailContentId, $id) {
  471. if(!$id) {
  472. $this->ajaxError(500, '無効な処理です。');
  473. }
  474. if($this->_changeStatus($id, true)) {
  475. exit(true);
  476. } else {
  477. $this->ajaxError(500, $this->MailField->validationErrors);
  478. }
  479. exit();
  480. }
  481. /**
  482. * 一括公開
  483. *
  484. * @param array $ids
  485. * @return boolean
  486. * @access protected
  487. */
  488. function _batch_publish($ids) {
  489. if($ids) {
  490. foreach($ids as $id) {
  491. $this->_changeStatus($id, true);
  492. }
  493. }
  494. return true;
  495. }
  496. /**
  497. * 一括非公開
  498. *
  499. * @param array $ids
  500. * @return boolean
  501. * @access protected
  502. */
  503. function _batch_unpublish($ids) {
  504. if($ids) {
  505. foreach($ids as $id) {
  506. $this->_changeStatus($id, false);
  507. }
  508. }
  509. return true;
  510. }
  511. /**
  512. * ステータスを変更する
  513. *
  514. * @param int $id
  515. * @param boolean $status
  516. * @return boolean
  517. */
  518. function _changeStatus($id, $status) {
  519. $statusTexts = array(0 => '無効', 1 => '有効');
  520. $data = $this->MailField->find('first', array('conditions' => array('MailField.id' => $id), 'recursive' => -1));
  521. $data['MailField']['use_field'] = $status;
  522. $this->MailField->set($data);
  523. if($this->MailField->save()) {
  524. $statusText = $statusTexts[$status];
  525. $this->MailField->saveDbLog('メールフィールド「'.$data['MailField']['name'].'」 を'.$statusText.'化しました。');
  526. return true;
  527. } else {
  528. return false;
  529. }
  530. }
  531. }
  532. ?>