SugarCRM - TinyMCEを使ったフィールドを作成する

#php, #sugarcrm, #tinymce

WordPressとかであるあのリッチテキストエディタ(TinyMCE)をSugarCRMで実装するサンプルを紹介する。
このTinMCEはEmailTemplatesモジュールでは有効化されているが、これを自分らで作ったフィールドでも有効化するというのが今回のネタ。

EditViewで有効化

Sugarでは簡単にTinyMCEを使えるように、さりげなくクラスが作られているのでそれを使う。
view.edit.phppreDisplayに以下のように書く。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
require_once 'include/SugarTinyMCE.php';
class HogesViewEdit extends ViewEdit
{
function preDisplay()
{
parent::preDisplay();
$tinyHtml = '';
// TinyMCE 有効化
$tiny = new SugarTinyMCE();
$tiny->defaultConfig['cleanup_on_startup'] = true;
$tinyHtml = $tiny->getInstance('tinymce_field');
$this->ev->ss->assign('tiny', $tinyHtml);
}
}

SugarTinyMCE::getInstance()には、有効化したいフィールド名を引数として渡す。
JavaScriptやらが返されるのでそのままSmartyにassignする。

editviewdefsで受け取る

assignした$tinyHtmlをフィールドのHTMLとして使うようにする。
editviewdefs.phpの有効したいフィールド(この例でいくとtinymce_field)のカスタムコードに{$tiny}を足して、assignした内容を受け取れるようにする。

こんだけで有効化できる。簡単!

XSSに気をつけて!

このまま実装すると

1
<script>console.log(document.cookie);</script>

とかできちゃうのでXSSには十分注意されたし。