Merge commit 'v7.10.15' into 8

Conflicts:
	docs/gotcha.txt
	docs/previousVersion.sql
	docs/templates.txt
	lib/WebGUI.pm
	lib/WebGUI/Asset.pm
	lib/WebGUI/Asset/Event.pm
	lib/WebGUI/Asset/File.pm
	lib/WebGUI/Asset/MapPoint.pm
	lib/WebGUI/Asset/RichEdit.pm
	lib/WebGUI/Asset/Sku/Product.pm
	lib/WebGUI/Asset/Snippet.pm
	lib/WebGUI/Asset/Story.pm
	lib/WebGUI/Asset/Template.pm
	lib/WebGUI/Asset/Template/TemplateToolkit.pm
	lib/WebGUI/Asset/Wobject/Calendar.pm
	lib/WebGUI/Asset/Wobject/Carousel.pm
	lib/WebGUI/Asset/Wobject/Collaboration.pm
	lib/WebGUI/Asset/Wobject/Dashboard.pm
	lib/WebGUI/Asset/Wobject/DataForm.pm
	lib/WebGUI/Asset/Wobject/Folder.pm
	lib/WebGUI/Asset/Wobject/Map.pm
	lib/WebGUI/Asset/Wobject/Search.pm
	lib/WebGUI/Asset/Wobject/Shelf.pm
	lib/WebGUI/Asset/Wobject/StockData.pm
	lib/WebGUI/Asset/Wobject/StoryTopic.pm
	lib/WebGUI/Asset/Wobject/SyndicatedContent.pm
	lib/WebGUI/Asset/Wobject/Thingy.pm
	lib/WebGUI/Asset/Wobject/WeatherData.pm
	lib/WebGUI/AssetClipboard.pm
	lib/WebGUI/AssetCollateral/DataForm/Entry.pm
	lib/WebGUI/AssetExportHtml.pm
	lib/WebGUI/AssetLineage.pm
	lib/WebGUI/AssetMetaData.pm
	lib/WebGUI/AssetTrash.pm
	lib/WebGUI/AssetVersioning.pm
	lib/WebGUI/Auth.pm
	lib/WebGUI/Cache/CHI.pm
	lib/WebGUI/Content/AssetManager.pm
	lib/WebGUI/Fork/ProgressBar.pm
	lib/WebGUI/Form/JsonTable.pm
	lib/WebGUI/Form/TimeField.pm
	lib/WebGUI/Form/Zipcode.pm
	lib/WebGUI/Group.pm
	lib/WebGUI/International.pm
	lib/WebGUI/Macro/AssetProxy.pm
	lib/WebGUI/Macro/FileUrl.pm
	lib/WebGUI/Operation/SSO.pm
	lib/WebGUI/Operation/User.pm
	lib/WebGUI/Role/Asset/Subscribable.pm
	lib/WebGUI/Shop/Cart.pm
	lib/WebGUI/Shop/Transaction.pm
	lib/WebGUI/Shop/TransactionItem.pm
	lib/WebGUI/Test.pm
	lib/WebGUI/URL/Content.pm
	lib/WebGUI/URL/Uploads.pm
	lib/WebGUI/User.pm
	lib/WebGUI/Workflow/Activity/ExtendCalendarRecurrences.pm
	lib/WebGUI/Workflow/Activity/SendNewsletters.pm
	lib/WebGUI/i18n/English/Asset.pm
	lib/WebGUI/i18n/English/WebGUI.pm
	sbin/installClass.pl
	sbin/rebuildLineage.pl
	sbin/search.pl
	sbin/testEnvironment.pl
	t/Asset/Asset.t
	t/Asset/AssetClipboard.t
	t/Asset/AssetLineage.t
	t/Asset/AssetMetaData.t
	t/Asset/Event.t
	t/Asset/File.t
	t/Asset/File/Image.t
	t/Asset/Post/notification.t
	t/Asset/Sku.t
	t/Asset/Story.t
	t/Asset/Template.t
	t/Asset/Wobject/Collaboration/templateVariables.t
	t/Asset/Wobject/Collaboration/unarchiveAll.t
	t/Asset/Wobject/Shelf.t
	t/Auth.t
	t/Macro/EditableToggle.t
	t/Macro/FilePump.t
	t/Shop/Cart.t
	t/Shop/Transaction.t
	t/Storage.t
	t/User.t
	t/Workflow.t
This commit is contained in:
Doug Bell 2011-05-13 18:15:11 -05:00
commit 277faae8a1
783 changed files with 32041 additions and 25495 deletions

View file

@ -326,7 +326,140 @@ override getEditForm => sub {
return $f;
};
#----------------------------------------------------------------------------
=head2 getAllButtons ( )
Get a list of all the buttons in this MCE
=cut
sub getAllButtons {
my ( $self ) = @_;
my @toolbarRows = map{[split "\n", $self->get("toolbarRow$_")]} (1..3);
my @toolbarButtons = map{ @{$_} } @toolbarRows;
return @toolbarButtons;
}
#----------------------------------------------------------------------------
=head2 getConfig ( )
Get a hashref of configuration to create this MCE. You must run the code
from getLoadPlugins before you can successfully initialize an MCE. You
must also specify the "elements" key so TinyMCE knows what textarea to
replace.
=cut
sub getConfig {
my ($self) = @_;
my $i18n = WebGUI::International->new($self->session, 'Asset_RichEdit');
my @plugins;
push @plugins, "safari";
push @plugins, "paste";
push @plugins, "contextmenu"
if $self->enableContextMenu;
push @plugins, "inlinepopups"
if $self->inlinePopups;
push @plugins, "media"
if $self->allowMedia;
my @toolbarRows = map{[split "\n", $self->get("toolbarRow$_")]} (1..3);
my @toolbarButtons = map{ @{$_} } @toolbarRows;
my %config = (
mode => 'exact',
theme => "advanced",
relative_urls => JSON::false(),
remove_script_host => JSON::true(),
auto_reset_designmode => JSON::true(),
cleanup_callback => "tinyMCE_WebGUI_Cleanup",
urlconverter_callback => "tinyMCE_WebGUI_URLConvertor",
theme_advanced_resizing => JSON::true(),
( map { "theme_advanced_buttons" . ( $_ + 1 ) => ( join ',', @{ $toolbarRows[$_] } ) } ( 0 .. $#toolbarRows ) ),
ask => JSON::false(),
preformatted => $self->preformatted ? JSON::true() : JSON::false(),
force_br_newlines => $self->useBr ? JSON::true() : JSON::false(),
force_p_newlines => $self->useBr ? JSON::false() : JSON::true(),
$self->useBr ? ( forced_root_block => JSON::false() ) : (),
remove_linebreaks => $self->removeLineBreaks ? JSON::true() : JSON::false(),
nowrap => $self->nowrap ? JSON::true() : JSON::false(),
directionality => $self->directionality,
theme_advanced_toolbar_location => $self->toolbarLocation,
theme_advanced_statusbar_location => "bottom",
valid_elements => $self->validElements,
wg_userIsVisitor => $self->session->user->isVisitor ? JSON::true() : JSON::false(),
paste_postprocess => 'tinyMCE_WebGUI_paste_postprocess',
);
foreach my $button (@toolbarButtons) {
if ( $button eq "spellchecker" && $self->session->config->get('availableDictionaries') ) {
push( @plugins, "-wgspellchecker" );
$config{spellchecker_rpc_url} = $self->session->url->gateway( '', "op=spellCheck" );
$config{spellchecker_languages} = join( ',',
map { ( $_->{default} ? '+' : '' ) . $_->{name} . '=' . $_->{id} }
@{ $self->session->config->get('availableDictionaries') } );
}
push( @plugins, "table" ) if ( $button eq "tablecontrols" );
push( @plugins, "save" ) if ( $button eq "save" );
push( @plugins, "advhr" ) if ( $button eq "advhr" );
push( @plugins, "fullscreen" ) if ( $button eq "fullscreen" );
if ( $button eq "advimage" ) {
push( @plugins, "advimage" );
$config{external_link_list_url} = "";
}
if ( $button eq "advlink" ) {
$config{external_image_list_url} = "";
$config{file_browser_callback} = "mcFileManager.filebrowserCallBack";
push( @plugins, "advlink" );
}
push( @plugins, "emotions" ) if ( $button eq "emotions" );
push( @plugins, "iespell" ) if ( $button eq "iespell" );
$config{gecko_spellcheck} = 'true' if ( $button eq "iespell" );
if ( $button eq "paste" || $button eq "pastetext" || $button eq "pasteword" ) {
push( @plugins, "paste" );
}
if ( $button eq "insertdate" || $button eq "inserttime" || $button eq "insertdatetime" ) {
$config{plugin_insertdate_dateFormat} = "%Y-%m-%d";
$config{plugin_insertdate_timeFormat} = "%H:%M:%S";
push( @plugins, "insertdatetime" );
}
push( @plugins, "preview" ) if ( $button eq "preview" );
if ( $button eq "media" ) {
push( @plugins, "media" );
}
push( @plugins, "searchreplace" )
if ( $button eq "search" || $button eq "replace" || $button eq "searchreplace" );
push( @plugins, "print" ) if ( $button eq "print" );
if ( $button eq "wginsertimage" ) {
push @plugins, "-wginsertimage";
}
if ( $button eq "wgpagetree" ) {
push @plugins, "-wgpagetree";
}
if ( $button eq "wgmacro" ) {
push @plugins, "-wgmacro";
}
if ( $button eq "code" ) {
$config{theme_advanced_source_editor_width} = $self->sourceEditorWidth
if ( $self->sourceEditorWidth > 0 );
$config{theme_advanced_source_editor_height} = $self->sourceEditorHeight
if ( $self->sourceEditorHeight > 0 );
}
} ## end foreach my $button (@toolbarButtons)
my $language = $i18n->getLanguage( '', "languageAbbreviation" );
unless ($language) {
$language = $i18n->getLanguage( "English", "languageAbbreviation" );
}
$config{language} = $language;
$config{content_css} = $self->cssFile
|| $self->session->url->extras('tinymce-webgui/defaultcontent.css');
$config{width} = $self->editorWidth if ( $self->editorWidth > 0 );
$config{height} = $self->editorHeight if ( $self->editorHeight > 0 );
$config{plugins} = join( ",", @plugins );
return \%config;
} ## end sub getConfig
#-------------------------------------------------------------------
@ -354,6 +487,40 @@ my $sql = "select asset.assetId, assetData.revisionDate from RichEdit left join
#-------------------------------------------------------------------
=head2 getLoadPlugins ( )
Get the JS code to load the plugins for this MCE. Needs to be called once
on the page this MCE will be on
=cut
sub getLoadPlugins {
my ( $self ) = @_;
my %loadPlugins;
for my $button ( $self->getAllButtons ) {
if ( $button eq 'spellchecker' ) {
$loadPlugins{wgspellchecker} = $self->session->url->extras("tinymce-webgui/plugins/wgspellchecker/editor_plugin.js");
}
if ( $button eq 'wginsertimage' ) {
$loadPlugins{wginsertimage} = $self->session->url->extras("tinymce-webgui/plugins/wginsertimage/editor_plugin.js");
}
if ( $button eq 'wgpagetree' ) {
$loadPlugins{wgpagetree} = $self->session->url->extras("tinymce-webgui/plugins/wgpagetree/editor_plugin.js");
}
if ( $button eq 'wgmacro' ) {
$loadPlugins{wgmacro} = $self->session->url->extras("tinymce-webgui/plugins/wgmacro/editor_plugin.js");
}
}
my $out = '';
while (my ($plugin, $path) = each %loadPlugins) {
$out .= "tinymce.PluginManager.load('$plugin', '$path');\n";
}
return $out;
}
#-------------------------------------------------------------------
=head2 getRichEditor ( $nameId )
Return the javascript needed to make the Rich Editor.
@ -369,119 +536,16 @@ sub getRichEditor {
my $self = shift;
return '' if ($self->disableRichEditor);
my $nameId = shift;
my @plugins;
my %loadPlugins;
push @plugins, "safari";
push @plugins, "contextmenu"
if $self->enableContextMenu;
push @plugins, "inlinepopups"
if $self->inlinePopups;
push @plugins, "media"
if $self->allowMedia;
my @toolbarRows = map{[split "\n", $self->get("toolbarRow$_")]} (1..3);
my @toolbarButtons = map{ @{$_} } @toolbarRows;
my $i18n = WebGUI::International->new($self->session, 'Asset_RichEdit');
my $ask = $self->askAboutRichEdit;
my %config = (
mode => $ask ? "none" : "exact",
elements => $nameId,
theme => "advanced",
relative_urls => JSON::false(),
remove_script_host => JSON::true(),
auto_reset_designmode => JSON::true(),
cleanup_callback => "tinyMCE_WebGUI_Cleanup",
urlconverter_callback => "tinyMCE_WebGUI_URLConvertor",
theme_advanced_resizing => JSON::true(),
(map { "theme_advanced_buttons".($_+1) => (join ',', @{$toolbarRows[$_]}) }
(0..$#toolbarRows)),
#ask => $self->getValue("askAboutRichEdit") ? JSON::true() : JSON::false(),
ask => JSON::false(),
preformatted => $self->preformatted ? JSON::true() : JSON::false(),
force_br_newlines => $self->useBr ? JSON::true() : JSON::false(),
force_p_newlines => $self->useBr ? JSON::false() : JSON::true(),
$self->useBr ? ( forced_root_block => JSON::false() ) : (),
remove_linebreaks => $self->removeLineBreaks ? JSON::true() : JSON::false(),
nowrap => $self->nowrap ? JSON::true() : JSON::false(),
directionality => $self->directionality,
theme_advanced_toolbar_location => $self->toolbarLocation,
theme_advanced_statusbar_location => "bottom",
valid_elements => $self->validElements,
wg_userIsVisitor => $self->session->user->isVisitor ? JSON::true() : JSON::false(),
);
# if ($ask) {
# $config{oninit} = 'turnOffTinyMCE_'.$nameId;
# }
foreach my $button (@toolbarButtons) {
if ($button eq "spellchecker" && $self->session->config->get('availableDictionaries')) {
push(@plugins,"-wgspellchecker");
$loadPlugins{wgspellchecker} = $self->session->url->extras("tinymce-webgui/plugins/wgspellchecker/editor_plugin.js");
$config{spellchecker_rpc_url} = $self->session->url->gateway('', "op=spellCheck");
$config{spellchecker_languages} =
join(',', map { ($_->{default} ? '+' : '').$_->{name}.'='.$_->{id} } @{$self->session->config->get('availableDictionaries')});
}
push(@plugins,"table") if ($button eq "tablecontrols");
push(@plugins,"save") if ($button eq "save");
push(@plugins,"advhr") if ($button eq "advhr");
push(@plugins,"fullscreen") if ($button eq "fullscreen");
if ($button eq "advimage") {
push(@plugins,"advimage");
$config{external_link_list_url} = "";
}
if ($button eq "advlink") {
$config{external_image_list_url} = "";
$config{file_browser_callback} = "mcFileManager.filebrowserCallBack";
push(@plugins,"advlink");
}
push(@plugins,"emotions") if ($button eq "emotions");
push(@plugins,"iespell") if ($button eq "iespell");
$config{gecko_spellcheck} = 'true' if ($button eq "iespell");
if ($button eq "paste" || $button eq "pastetext" || $button eq "pasteword") {
push(@plugins,"paste");
}
if ($button eq "insertdate" || $button eq "inserttime" || $button eq "insertdatetime") {
$config{plugin_insertdate_dateFormat} = "%Y-%m-%d";
$config{plugin_insertdate_timeFormat} = "%H:%M:%S";
push(@plugins,"insertdatetime");
}
push(@plugins,"preview") if ($button eq "preview");
if ($button eq "media") {
push(@plugins,"media");
}
push(@plugins,"searchreplace") if ($button eq "search" || $button eq "replace" || $button eq "searchreplace");
push(@plugins,"print") if ($button eq "print");
if ($button eq "wginsertimage") {
push @plugins, "-wginsertimage";
$loadPlugins{wginsertimage} = $self->session->url->extras("tinymce-webgui/plugins/wginsertimage/editor_plugin.js");
}
if ($button eq "wgpagetree") {
push @plugins, "-wgpagetree";
$loadPlugins{wgpagetree} = $self->session->url->extras("tinymce-webgui/plugins/wgpagetree/editor_plugin.js");
}
if ($button eq "wgmacro") {
push @plugins, "-wgmacro";
$loadPlugins{wgmacro} = $self->session->url->extras("tinymce-webgui/plugins/wgmacro/editor_plugin.js");
}
if ($button eq "code") {
$config{theme_advanced_source_editor_width} = $self->sourceEditorWidth if ($self->sourceEditorWidth > 0);
$config{theme_advanced_source_editor_height} = $self->sourceEditorHeight if ($self->sourceEditorHeight > 0);
}
}
my $language = $i18n->getLanguage('' ,"languageAbbreviation");
unless ($language) {
$language = $i18n->getLanguage("English","languageAbbreviation");
}
$config{language} = $language;
$config{content_css} = $self->cssFile || $self->session->url->extras('tinymce-webgui/defaultcontent.css');
$config{width} = $self->editorWidth || "100%";
$config{height} = $self->editorHeight || "100%";
$config{plugins} = join(",",@plugins);
$self->richedit_headTags;
my $out = '';
if ($ask) {
$out = q|<a style="display: block;" href="javascript:toggleEditor('|.$nameId.q|')">|.$i18n->get('Toggle editor').q|</a>|;
}
$self->richedit_headTags;
$out .= qq|<script type="text/javascript">\n|;
if ($ask) {
$out .= <<"EOHTML1";
@ -498,11 +562,16 @@ EOHTML1
# }
#}
#YAHOO.util.Event.onDOMReady(turnOffTinyMCE_$nameId);
}
my $config = $self->getConfig;
$config->{ elements } = $nameId;
if ( $ask ) {
$config->{mode} = "none";
}
while (my ($plugin, $path) = each %loadPlugins) {
$out .= "tinymce.PluginManager.load('$plugin', '$path');\n";
}
$out .= "\ttinyMCE.init(" . JSON->new->pretty->encode(\%config) . " );\n";
$out .= $self->getLoadPlugins;
$out .= "\ttinyMCE.init(" . JSON->new->pretty->encode( $config ) . " );\n";
$out .= "</script>";
}