SlideShare a Scribd company logo
1 of 25
baserCMS勉強会 
@福岡vol.12 
MailSavePreventプラグイン 
の紹介 
2014/08/30 @arata
■Twitter@arata 
■http://www.materializing.net/ 
の中のひと 
■ウェブ制作ウェブシステム開発に 
携わってます。 
■好物は珈琲~■D とCMS 
http://www.materializing.net/ 
自己紹介
CMS 
baserCMS 
の 
プラグイン作り 
が 
とっても好き&#9829 
http://www.materializing.net/
今回やってみたこと 
MailSavePrevent 
プラグイン作成 
※読み:メールセーブプリベント 
http://www.materializing.net/
こんな感じ 
メールフォームから送信された内容を 
保存しないようにする。 
http://www.materializing.net/
自分に課してみた点 
■メールフォーム別に、 
受信データを保存しない設定ができる 
■メールフォーム基本設定画面で 
設定を切替えることができる 
■設定一覧画面を用意して、 
メールフォーム別に、 
設定を簡単に切替えることができる 
http://www.materializing.net/
自分に課してみた点 
■メールフォーム別に、 
受信データを保存しない設定ができる 
■メールフォーム基本設定画面で 
設定を切替えることができる 
■設定一覧画面を用意して、 
メールフォーム別に、 
設定を簡単に切替えることができる 
http://www.materializing.net/
仕組み 
1.ユーザーがメールフォームに入力して 
送信する 
2.送信された内容は、 
メールフォーム別の専用テーブルに 
保存される 
3.通知メールが送信される 
http://www.materializing.net/
仕組み 
1.ユーザーがメールフォームに入力して 
送信する 
!!NEW!! 
ここでイベント処理で保存防止! 
2.送信された内容は、 
メールフォーム別の専用テーブルに 
保存される 
3.通知メールが送信される 
http://www.materializing.net/
やる事一覧 
■CakeEvent:beforeSave() 
使って保存しないようにする 
/app/Plugin/MailSavePrevent 
/Event 
/MailSavePreventModelEventListener.ph 
p 
にbeforeSave() 処理の作成 
http://www.materializing.net/
以上の作業で終了 
マジ簡単!!勝った!! 
おらやったどー! 
\(^o^)/ 
さすがbaserやで!! 
http://www.materializing.net/
動作結果 
できませんでした 
orz 
http://www.materializing.net/
問題点 
■CakeEvent:beforeSave() 
使って保存しないようにする 
→ 無慈悲なエラー!! 
【入力エラーです】 
入力内容を確認して再度送信してください。 
(^ω^#) 
http://www.materializing.net/
調査 
■ /lib/Baser/Plugin/Mail/Controller/MailController.php 
if ($this->Message->validates()) { 
// validation OK 
if ($this->Message->save(null, false)) { 
// 〜省略〜 
$this->_sendEmail(); 
} else { 
$this->setMessage('【送信エラーです】'); 
// 〜省略〜 
} 
// 〜省略〜 
http://www.materializing.net/
調査 
■ /lib/Baser/Plugin/Mail/Controller/MailController.php 
if ($this->Message->validates()) { 
// validation OK 
if ($this->Message->save(null, false)) { 
送信メッセージが保存されない場合 
エラー扱いになる仕組みとなっている。 
// 〜省略〜 
$this->_sendEmail(); 
} else { 
$this->setMessage('【送信エラーです】'); 
// 〜省略〜 
} 
// 〜省略〜 
http://www.materializing.net/
解決策 
■CakeEvent:afterSave() 
使って保存された送信データを削除 
→ これで勝つる!! 
丶(゚∀゚)ノ 
http://www.materializing.net/
動作結果2 
できました 
ε= \_○ノヒャッホーウ!! 
http://www.materializing.net/
どんな感じ? 
■/app/Plugin/MailSavePrevent/Event 
/MailSavePreventModelEventListener.php 
public function messageAfterSave(CakeEvent $event) { 
$Model = $event->subject(); 
// 直前に登録されたデータの削除 
$Model->delete($Model->id); 
} 
https://github.com/materializing/MailSavePrevent/blob/master/Event/MailSavePreventMode 
lEventListener.php 
実際の内容はgithubでちぇけら!丶(゚∀゚)ノ 
http://www.materializing.net/
ドヤ顔で社内に自慢 
丶(゚∀゚)ノ 
「みんなー! 
メールフォームのデータを保存しない 
プラグインつくったよー!!! 
これでプライバシー考慮できるよ!」 
→ やったどー!! 
http://www.materializing.net/
再び問題点 
A「名前がわかりづらい!」 
B「ぷりべんとって一般的ですか?」 
C「なんて読むの?」 
D「うーん、どうでしょう?」 
【審議中】( ´・ω) (´・ω・) (・ω・`) (ω・` ) 
http://www.materializing.net/
重大なバグ 
大不評 
※ネーミングセンス無し 
(つД`) 
http://www.materializing.net/
畳み掛ける一言 
「それ 
コアに実装予定 
だよ」 
Σ(゚∇゚|||) 
http://www.materializing.net/
プラグイン作りは楽しい 
・・・こんな感じで、 
■ コアに手を入れず動作を変える 
■ コミュニケーション 
■ コードレビューの機会 
■ そもそも作るのすきですしおすし 
・・・楽しく作りました。 
http://www.materializing.net/
githubにて公開中 
■ ソースコード 
https://github.com/materializing/MailSavePrevent 
http://www.materializing.net/
おしまい 
ご清聴ありがとう 
ございました。 
楽しく作ってbaserマーケットで 
公開しましょう! 
http://barket.jp/ 
http://www.materializing.net/

More Related Content

Viewers also liked (14)

Actividad de aprendizaje 8
Actividad de aprendizaje 8Actividad de aprendizaje 8
Actividad de aprendizaje 8
 
ΤΟΠΙΑ
ΤΟΠΙΑΤΟΠΙΑ
ΤΟΠΙΑ
 
Getting started with ExtBase
Getting started with ExtBaseGetting started with ExtBase
Getting started with ExtBase
 
Presentation 2
Presentation 2Presentation 2
Presentation 2
 
ΠΕΙΝΑ ΣΤΗΝ ΚΑΤΟΧΗ
ΠΕΙΝΑ ΣΤΗΝ ΚΑΤΟΧΗΠΕΙΝΑ ΣΤΗΝ ΚΑΤΟΧΗ
ΠΕΙΝΑ ΣΤΗΝ ΚΑΤΟΧΗ
 
福岡データベース勉強会 2016春: CakeSchemaとbaserCMS
福岡データベース勉強会 2016春: CakeSchemaとbaserCMS福岡データベース勉強会 2016春: CakeSchemaとbaserCMS
福岡データベース勉強会 2016春: CakeSchemaとbaserCMS
 
Produccion agropecuaria cristi 2014
Produccion agropecuaria cristi 2014Produccion agropecuaria cristi 2014
Produccion agropecuaria cristi 2014
 
งานนำเสนอวิชาการ1
งานนำเสนอวิชาการ1งานนำเสนอวิชาการ1
งานนำเสนอวิชาการ1
 
ExtBase workshop
ExtBase workshop ExtBase workshop
ExtBase workshop
 
TYPO3 ViewHelper Workshop
TYPO3 ViewHelper WorkshopTYPO3 ViewHelper Workshop
TYPO3 ViewHelper Workshop
 
PiBase Updates
PiBase UpdatesPiBase Updates
PiBase Updates
 
Social mediabook
Social mediabookSocial mediabook
Social mediabook
 
Slideshare presentation
Slideshare presentationSlideshare presentation
Slideshare presentation
 
PHP Summer Training Presentation
PHP Summer Training PresentationPHP Summer Training Presentation
PHP Summer Training Presentation
 

baserCms勉強会@福岡 vol.12