Per-request configuration of WYSIWIG-Editor buttonbar
From OpenCms Wiki
The following CustomWidget shows an approach, how to render different button bars in WYSIWIG-Editor, dependent on the current request.
The examples renders different button bars for users in different organization units. Of course, any other information from the request can be used as well to distinct button bar settings.
For the sake of brevity the example does not build the button bar definitions from the configuration.
package f3.widget; import org.opencms.file.CmsObject; import org.opencms.widgets.CmsHtmlWidget; import org.opencms.widgets.CmsHtmlWidgetOption; import org.opencms.widgets.I_CmsWidget; import org.opencms.widgets.I_CmsWidgetDialog; import org.opencms.widgets.I_CmsWidgetParameter; /** * This widget returns a WYSIWIG-Editor whose button bar * depends on the organization unit of the current user * * * @author cf * */ public class F3HtmlWidget extends CmsHtmlWidget{ // config for main organization unit private CmsHtmlWidgetOption forMainOU = new CmsHtmlWidgetOption("link, source, buttonbar:" + "[;undo;redo;-;find;replace;-;selectall;removeformat;-;cut;copy;paste;-;bold;italic;-;subscript;superscript;];" + "[;orderedlist;unorderedlist;];[;source;-;formatselect;style;editorlink;link;anchor;unlink;]; " + "[;imagegallery;downloadgallery;linkgallery;htmlgallery;tablegallery;-;-;specialchar;-;print;]"); // config for other organization units private CmsHtmlWidgetOption forOtherOU = new CmsHtmlWidgetOption("buttonbar:" + "[;undo;redo;-;find;replace;-;selectall;removeformat;-;cut;copy;paste;-;bold;italic;-;subscript;superscript;];" + "[;orderedlist;unorderedlist;]; [;specialchar;-;print;]"); /** * @see org.opencms.widgets.CmsHtmlWidget#getDialogIncludes(org.opencms.file.CmsObject, org.opencms.widgets.I_CmsWidgetDialog) */ @Override public String getDialogIncludes(CmsObject cms, I_CmsWidgetDialog widgetDialog) { setConfiguration(cms); return super.getDialogIncludes(cms, widgetDialog); } /** * @see org.opencms.widgets.CmsHtmlWidget#getDialogInitCall(org.opencms.file.CmsObject, org.opencms.widgets.I_CmsWidgetDialog) */ @Override public String getDialogInitCall(CmsObject cms, I_CmsWidgetDialog widgetDialog) { setConfiguration(cms); return super.getDialogInitCall(cms, widgetDialog); } /** * @see org.opencms.widgets.CmsHtmlWidget#getDialogInitMethod(org.opencms.file.CmsObject, org.opencms.widgets.I_CmsWidgetDialog) */ @Override public String getDialogInitMethod(CmsObject cms, I_CmsWidgetDialog widgetDialog) { setConfiguration(cms); return super.getDialogInitMethod(cms, widgetDialog); } /** * @see org.opencms.widgets.CmsHtmlWidget#getDialogWidget(org.opencms.file.CmsObject, org.opencms.widgets.I_CmsWidgetDialog, org.opencms.widgets.I_CmsWidgetParameter) */ public String getDialogWidget(CmsObject cms, I_CmsWidgetDialog widgetDialog, I_CmsWidgetParameter param) { setConfiguration(cms); return super.getDialogWidget(cms, widgetDialog, param); } /** * @see org.opencms.widgets.I_CmsWidget#newInstance() */ public I_CmsWidget newInstance() { return new F3HtmlWidget(); } /** * Sets the configuration dependent on the users OU * @param cms */ protected void setConfiguration(CmsObject cms){ // default setHtmlWidgetOption(forOtherOU); if(cms.getRequestContext().getCurrentUser()!=null){ if("".equals(cms.getRequestContext().getCurrentUser().getOuFqn())){ setHtmlWidgetOption(forMainOU); } } } }
Enabling the widget
To use the widget, you would reference it in the xml schema defintion of your content type
<xsd:annotation> <xsd:appinfo> ... <layouts> <layout element="articleText" widget="f3.widget.F3HtmlWidget"/> </layouts> ... </xsd:appinfo> </xsd:annotation>