From a72a8d0540507d01786f89af1dfd2da2adf2f480 Mon Sep 17 00:00:00 2001 From: Matthew Wilson Date: Wed, 7 Dec 2005 15:59:04 +0000 Subject: [PATCH] committing then deleting --- lib/WebGUI/Asset/Dashlet.pm | 761 ++++++++++++++++++++++++++++++++++++ 1 file changed, 761 insertions(+) create mode 100644 lib/WebGUI/Asset/Dashlet.pm diff --git a/lib/WebGUI/Asset/Dashlet.pm b/lib/WebGUI/Asset/Dashlet.pm new file mode 100644 index 000000000..645f4602d --- /dev/null +++ b/lib/WebGUI/Asset/Dashlet.pm @@ -0,0 +1,761 @@ +package WebGUI::Asset::Shortcut; + +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2005 Plain Black Corporation. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +use strict; +use WebGUI::Asset; +use WebGUI::Icon; +use WebGUI::International; +use WebGUI::Macro; +use WebGUI::Privilege; +use WebGUI::Session; +use WebGUI::SQL; + +our @ISA = qw(WebGUI::Asset); + +#------------------------------------------------------------------- +sub _drawQueryBuilder { + my $self = shift; + # Initialize operators + my @textFields = qw|text yesNo selectList radioList|; + my %operator; + foreach (@textFields) { + $operator{$_} = { + "=" => WebGUI::International::get("is","Asset_Shortcut"), + "!=" => WebGUI::International::get("isnt","Asset_Shortcut") + }; + } + $operator{integer} = { + "=" => WebGUI::International::get("equal to","Asset_Shortcut"), + "!=" => WebGUI::International::get("not equal to","Asset_Shortcut"), + "<" => WebGUI::International::get("less than","Asset_Shortcut"), + ">" => WebGUI::International::get("greater than","Asset_Shortcut") + }; + + # Get the fields and count them + my $fields = $self->getMetaDataFields(); + my $fieldCount = scalar(keys %$fields); + + unless ($fieldCount) { # No fields found.... + return 'No metadata defined yet. + Click here to define metadata attributes.'; + } + + # Static form fields + my $shortcutCriteriaField = WebGUI::Form::textarea({ + name=>"shortcutCriteria", + value=>$self->getValue("shortcutCriteria"), + extras=>'style="width: 100%" '.$self->{_disabled} + }); + my $conjunctionField = WebGUI::Form::selectBox({ + name=>"conjunction", + options=>{ + "AND" => WebGUI::International::get("AND","Asset_Shortcut"), + "OR" => WebGUI::International::get("OR","Asset_Shortcut")}, + value=>["OR"], + extras=>'class="qbselect"', + } + ); + + # html + my $output; + $output .= ''; + $output .= ''; + $output .= qq||; + + # Here starts the field loop + my $i = 1; + foreach my $field (keys %$fields) { + my $fieldLabel = $fields->{$field}{fieldName}; + my $fieldType = $fields->{$field}{fieldType} || "text"; + + # The operator select field + my $opFieldName = "op_field".$i; + my $opField = WebGUI::Form::selectList({ + name=>$opFieldName, + uiLevel=>5, + options=>$operator{$fieldType}, + extras=>'class="qbselect"' + }); + # The value select field + my $valFieldName = "val_field".$i; + my $valueField = WebGUI::Form::dynamicField( + fieldType=>$fieldType, + name=>$valFieldName, + uiLevel=>5, + extras=>qq/title="$fields->{$field}{description}" class="qbselect"/, + possibleValues=>$fields->{$field}{possibleValues}, + ); + # An empty row + $output .= qq||; + + # Table row with field info + $output .= qq| + + + + + + + + |; + $i++; + } + # Close the table + $output .= "
$shortcutCriteriaField
$conjunctionField

$fieldLabel

+ $opField + + $valueField + +
"; + + return $output; +} + +sub parseOverride { + my $self = shift; + my $value = shift; + my @userPrefs = $self->getUserPrefs; + foreach my $field (@userPrefs) { + my $id = $field->getId; + my $fieldName = $field->getFieldName; + use WebGUI::Asset::Field; + my $fieldValue = WebGUI::Asset::Field->getUserPref($id); + $value =~ s/\#\#userPref\:${fieldName}\#\#/$fieldValue/g; + } +} + +#------------------------------------------------------------------- +sub _submenu { + my $self = shift; + my $workarea = shift; + my $title = shift; + my $help = shift; + my $ac = WebGUI::AdminConsole->new("shortcutmanager"); + $ac->setHelp($help) if ($help); + $ac->setIcon($self->getIcon); + $ac->addSubmenuItem($self->getUrl('func=edit'), WebGUI::International::get("Back to Edit Shortcut","Asset_Shortcut")); + $ac->addSubmenuItem($self->getUrl("func=manageOverrides"),WebGUI::International::get("Manage Shortcut Overrides","Asset_Shortcut")); + $ac->addSubmenuItem($self->getUrl("func=manageUserPrefs"),WebGUI::International::get("Manage User Preferences","Asset_Shortcut")); + return $ac->render($workarea, $title); +} + +#------------------------------------------------------------------- +sub canEdit { + my $self = shift; +return 1 if ($self->SUPER::canEdit || (ref $self->getParent eq 'WebGUI::Asset::Wobject::Dashboard' && $self->getParent->canManage)); + return 0; +} + +#------------------------------------------------------------------- +sub canManage { + my $self = shift; + return $self->canEdit; +} + +#------------------------------------------------------------------- +sub definition { + my $class = shift; + my $definition = shift; + push(@{$definition}, { + assetName=>WebGUI::International::get('assetName',"Asset_Shortcut"), + icon=>'shortcut.gif', + tableName=>'Shortcut', + className=>'WebGUI::Asset::Shortcut', + properties=>{ + shortcutToAssetId=>{ + noFormPost=>1, + fieldType=>"hidden", + defaultValue=>undef + }, + shortcutByCriteria=>{ + fieldType=>"yesNo", + defaultValue=>0, + }, + disableContentLock=>{ + fieldType=>"yesNo", + defaultValue=>0 + }, + resolveMultiples=>{ + fieldType=>"selectBox", + defaultValue=>"mostRecent", + }, + shortcutCriteria=>{ + fieldType=>"textarea", + defaultValue=>"", + }, + templateId=>{ + fieldType=>"template", + defaultValue=>"PBtmpl0000000000000140" + }, + description=>{ + fieldType=>"HTMLArea", + defaultValue=>undef + }, + } + }); + return $class->SUPER::definition($definition); +} + + + +#------------------------------------------------------------------- +sub getEditForm { + my $self = shift; + my $tabform = $self->SUPER::getEditForm(); + my $originalTemplate; + my $i18n = WebGUI::International->new("Asset_Shortcut"); + $tabform->getTab("properties")->readOnly( + -label=>WebGUI::International::get(1,"Asset_Shortcut"), + -hoverHelp=>WebGUI::International::get('1 description',"Asset_Shortcut"), + -value=>''.$self->getShortcut->get('title').' ('.$self->getShortcut->getId.')' + ); + $tabform->getTab("display")->template( + -value=>$self->getValue("templateId"), + -label=>WebGUI::International::get('shortcut template title', 'Asset_Shortcut'), + -hoverHelp=>WebGUI::International::get('shortcut template title description', 'Asset_Shortcut'), + -namespace=>"Shortcut" + ); + if($session{setting}{metaDataEnabled}) { + $tabform->getTab("properties")->yesNo( + -name=>"shortcutByCriteria", + -value=>$self->getValue("shortcutByCriteria"), + -label=>WebGUI::International::get("Shortcut by alternate criteria","Asset_Shortcut"), + -hoverHelp=>WebGUI::International::get("Shortcut by alternate criteria description","Asset_Shortcut"), + -extras=>q|onchange=" + if (this.form.shortcutByCriteria[0].checked) { + this.form.resolveMultiples.disabled=false; + this.form.shortcutCriteria.disabled=false; + } else { + this.form.resolveMultiples.disabled=true; + this.form.shortcutCriteria.disabled=true; + }"| + ); + $tabform->getTab("properties")->yesNo( + -name=>"disableContentLock", + -value=>$self->getValue("disableContentLock"), + -label=>WebGUI::International::get("disable content lock","Asset_Shortcut"), + -hoverHelp=>WebGUI::International::get("disable content lock description","Asset_Shortcut") + ); + if ($self->getValue("shortcutByCriteria") == 0) { + $self->{_disabled} = 'disabled=true'; + } + $tabform->getTab("properties")->selectBox( + -name=>"resolveMultiples", + -value=>[ $self->getValue("resolveMultiples") ], + -label=>WebGUI::International::get("Resolve Multiples","Asset_Shortcut"), + -hoverHelp=>WebGUI::International::get("Resolve Multiples description","Asset_Shortcut"), + -options=>{ + mostRecent=>WebGUI::International::get("Most Recent","Asset_Shortcut"), + random=>WebGUI::International::get("Random","Asset_Shortcut"), + }, + -extras=>$self->{_disabled} + ); + + $tabform->getTab("properties")->readOnly( + -value=>$self->_drawQueryBuilder(), + -label=>WebGUI::International::get("Criteria","Asset_Shortcut"), + -hoverHelp=>WebGUI::International::get("Criteria description","Asset_Shortcut") + ); + } + $tabform->addTab('overrides',$i18n->get('Overrides')); + $tabform->getTab('overrides')->raw($self->getOverridesList); + return $tabform; +} + + +#------------------------------------------------------------------- + +=head2 getExtraHeadTags ( ) + +Returns the extraHeadTags stored in the asset. Called in WebGUI::Style::generateAdditionalHeadTags if this asset is the $session{asset}. Also called in WebGUI::Layout::view for its child assets. Overriden here in Shortcut.pm. + +=cut + +sub getExtraHeadTags { + my $self = shift; + return $self->get("extraHeadTags")."\n".$self->getShortcut->get("extraHeadTags"); +} + +#------------------------------------------------------------------- +sub getFieldsList { + my $self = shift; + my $i18n = WebGUI::International->new("Asset_Shortcut"); + my $output = ''.$i18n->get('Add Preference Field').'

'; + my @fielden; + @fielden = $self->getUserPrefs; + return $output unless scalar @fielden > 0; + $output .= ''; + $output .= ''; + foreach my $field (@fielden) { + $output .= ''; + $output .= ''; + $output .= ''; + $output .= ''; + } + $output .= '
'.$i18n->get('fieldName').''.$i18n->get('edit delete fieldname').'
'.$field->get("fieldName").''; + $output .= editIcon('func=edit',$field->getUrl()); + $output .= deleteIcon('func=delete',$field->getUrl()); + $output .= '
'; + return $output; +} + +#------------------------------------------------------------------- +sub getOverridesList { + my $self = shift; + my $output = ''; + my $i18n = WebGUI::International->new("Asset_Shortcut"); + my %overrides = $self->getOverrides; + $output .= ''; + $output .= ''; + foreach my $definition (@{$self->getShortcutOriginal->definition}) { + foreach my $prop (keys %{$definition->{properties}}) { + next if $definition->{properties}{$prop}{fieldType} eq 'hidden'; + $output .= ''; + $output .= ''; + $output .= ''; + } + } + $output .= '
'.$i18n->get('fieldName').''.$i18n->get('edit delete fieldname').''.$i18n->get('Original Value').''.$i18n->get('New value').''.$i18n->get('Replacement value').'
'.$prop.''; + $output .= editIcon('func=editOverride;fieldName='.$prop,$self->get("url")); + $output .= deleteIcon('func=deleteOverride;fieldName='.$prop,$self->get("url")) if exists $overrides{overrides}{$prop}; + $output .= ''; + $output .= $overrides{overrides}{$prop}{origValue}; + $output .= ''; + $output .= $overrides{overrides}{$prop}{newValue}; + $output .= ''; + $output .= $overrides{overrides}{$prop}{parsedValue}; + $output .= '
'; + return $output; +} + + +#------------------------------------------------------------------- +sub getOverrides { + my $self = shift; + my $i = 0; + #cache by userId, assetId of this shortcut, and whether adminMode is on or not. + my $cache = WebGUI::Cache->new(["shortcutOverrides",$self->getId,$session{user}{userId},$session{var}{adminOn}]); + my $overridesRef = $cache->get; + unless ($overridesRef->{cacheNotExpired}) { + my %overrides; + my $orig = $self->getShortcutOriginal; + unless (exists $orig->{_propertyDefinitions}) { + my %properties; + foreach my $definition (@{$orig->definition}) { + %properties = (%properties, %{$definition->{properties}}); + } + $orig->{_propertyDefinitions} = \%properties; + } + $overrides{cacheNotExpired} = 1; + my $sth = WebGUI::SQL->read("select fieldName, newValue from Shortcut_overrides where assetId=".quote($self->getId)." order by fieldName"); + while (my ($fieldName, $newValue) = $sth->array) { + $overrides{overrides}{$fieldName}{fieldType} = $orig->{_propertyDefinitions}{$fieldName}{fieldType}; + $overrides{overrides}{$fieldName}{origValue} = $self->getShortcutOriginal->get($fieldName); + $overrides{overrides}{$fieldName}{newValue} = $newValue; + $overrides{overrides}{$fieldName}{parsedValue} = $newValue; + } + $sth->finish; + my @userPrefs = $self->getUserPrefs; + foreach my $field (@userPrefs) { + my $id = $field->getId; + my $fieldName = $field->getFieldName; + my $fieldValue = $field->getUserPref($id); + $overrides{userPrefs}{$fieldName}{value} = $fieldValue; + $overrides{overrides}{$fieldName}{parsedValue} = $fieldValue; + # 'myTemplateId is ##userPref:myTemplateId##', for example. + foreach my $overr (keys %{$overrides{overrides}}) { + $overrides{overrides}{$overr}{parsedValue} =~ s/\#\#userPref\:${fieldName}\#\#/$fieldValue/gm; + } + } + $cache->set(\%overrides, 60*60); + $overridesRef = \%overrides; + } + return %$overridesRef; +} + +#------------------------------------------------------------------- +sub getShortcut { + my $self = shift; + unless ($self->{_shortcut}) { + $self->{_shortcut} = $self->getShortcutOriginal; + } + $self->{_shortcut}{_properties}{displayTitle} = undef if (ref $self->getParent eq 'WebGUI::Asset::Wobject::Dashboard'); + # Hide title by default. If you want, you can create an override + # to display it. But it's being shown in the dragheader by default. + my %overhash = $self->getOverrides; + if (exists $overhash{overrides}) { + my %overrides = %{$overhash{overrides}}; + foreach my $override (keys %overrides) { + $self->{_shortcut}{_properties}{$override} = $overrides{$override}{parsedValue}; + } + foreach my $userPref ($self->getUserPrefs) { + $self->{_shortcut}{_properties}{$userPref->getFieldName} = $userPref->getUserPref($userPref->getId) unless (exists $overrides{$userPref->getFieldName}); + } + } + return $self->{_shortcut}; +} + +#------------------------------------------------------------------- + +=head2 getShortcutByCriteria ( hashRef ) + +This function will search for a asset that match a metadata criteria set. +If no asset is found, undef will be returned. + +=cut + +sub getShortcutByCriteria { + my $self = shift; + my $assetProxy = shift; + my $criteria = $self->get("shortcutCriteria"); + my $order = $self->get("resolveMultiples"); + my $assetId = $self->getId; + + # Parse macro's in criteria + WebGUI::Macro::process(\$criteria); + + # Once a asset is found, we will stick to that asset, + # to prevent the proxying of multiple- depth assets like Surveys and USS. + my $scratchId; + if ($assetId) { + $scratchId = "Shortcut_" . $assetId; + if($session{scratch}{$scratchId} && !$self->getValue("disableContentLock")) { + return $session{scratch}{$scratchId} unless ($session{var}{adminOn}); + } + } + + # $criteria = "State = Wisconsin AND Country != Sauk"; + # + # State = Wisconsin AND Country != Sauk + # | | | + # |- $field |_ $operator |- $value + # |_ $attribute |_ $attribute + my $operator = qr/<>|!=|=|>=|<=|>|<|like/i; + my $attribute = qr/['"][^()|=>getShortcutDefault->get("className")); + + + # Add constraint only if it has been modified. + $sql .= " and ".$constraint if (($constraint ne $criteria) && $constraint ne ""); +# Can't do this without extensive refactoring.....! +# $sql .= " order by assetData.revisionDate desc"; + + # Execute the query with an unconditional read + my @ids; + my $sth = WebGUI::SQL->unconditionalRead($sql); + while (my ($data) = $sth->array) { + push (@ids, $data); + } + $sth->finish; + + # No matching assets found. + if (scalar(@ids) == 0) { + return $self->getShortcutDefault; # fall back to the originally mirrored asset. + } + my $id; + # Grab a wid from the results + if ($order eq 'random') { + $id = $ids[ rand @ids ]; + } else { + #default order is mostRecent + $id = $ids[0]; # 1st element in list is most recent. + } + + # Store the matching assetId in user scratch. + WebGUI::Session::setScratch($scratchId,$id) if ($scratchId); + + return WebGUI::Asset->newByDynamicClass($id); +} + +#------------------------------------------------------------------- +sub getShortcutDefault { + my $self = shift; + return WebGUI::Asset->newByDynamicClass($self->get("shortcutToAssetId")); +} + +#------------------------------------------------------------------- +sub getShortcutOriginal { + my $self = shift; + if ($self->get("shortcutByCriteria")) { + return $self->getShortcutByCriteria; + } else { + return $self->getShortcutDefault; + } +} + +#------------------------------------------------------------------- +sub getUserPrefs { + my $self = shift; + my $bibibib = $self->getLineage(["children"],{includeOnlyClasses=>["WebGUI::Asset::Field"],returnObjects=>1}); + return @$bibibib; +} + +#------------------------------------------------------------------- +sub processPropertiesFromFormPost { + my $self = shift; + $self->SUPER::processPropertiesFromFormPost; + my $scratchId = "Shortcut_" . $self->getId; + WebGUI::Session::deleteAllScratch($scratchId); +} + +#------------------------------------------------------------------- + +sub purge { + my $self = shift; + # delete and purge all associated FieldIds and their preferences. + return $self->SUPER::purge; +} + +#------------------------------------------------------------------- + +sub purgeRevision { + my $self = shift; + return $self->SUPER::purgeRevision; +} + +#------------------------------------------------------------------- + +sub uncacheOverrides { + my $self = shift; + WebGUI::Cache->new(["shortcutOverrides",$self->getId])->delete; +} + +#------------------------------------------------------------------- +sub view { + my $self = shift; + my $content; + my $shortcut = $self->getShortcut; + if ($self->get("shortcutToAssetId") eq $self->get("parentId")) { + $content = WebGUI::International::get("Displaying this shortcut would cause a feedback loop","Asset_Shortcut"); + } else { + $content = $shortcut->view; + } + my %var = ( + isShortcut => 1, + 'shortcut.content' => $content, + 'shortcut.label' => WebGUI::International::get('assetName',"Asset_Shortcut"), + originalURL => $shortcut->getUrl + ); + return $self->processTemplate(\%var,$self->getValue("templateId")); +} + +#------------------------------------------------------------------- +sub www_edit { + my $self = shift; + return WebGUI::Privilege::insufficient() unless $self->canEdit; + $self->getAdminConsole->setHelp("shortcut add/edit","Asset_Shortcut"); + $self->getAdminConsole->addSubmenuItem($self->getUrl("func=manageOverrides"),WebGUI::International::get("Manage Shortcut Overrides","Asset_Shortcut")); + $self->getAdminConsole->addSubmenuItem($self->getUrl("func=manageUserPrefs"),WebGUI::International::get("Manage User Preferences","Asset_Shortcut")); + return $self->getAdminConsole->render($self->getEditForm->print,WebGUI::International::get(2,"Asset_Shortcut")); +} + +#------------------------------------------------------------------- +sub www_getUserPrefsForm { + #This is a form retrieved by "ajax". + my $self = shift; + return 'nuhuh' unless $self->getParent->canPersonalize; + my @fielden = $self->getUserPrefs; + my $f = WebGUI::HTMLForm->new(extras=>' onSubmit="submitForm(this,\''.$self->getId.'\',\''.$self->getUrl.'\');return false;"'); + $f->hidden( + -name => 'func', + -value => 'saveUserPrefs' + ); + foreach my $field (@fielden) { + my $fieldType = $field->get("fieldType") || "text"; + my $options; + my $params = {name=>$field->getId, + label=>$field->get("fieldName"), + uiLevel=>5, + value=>$field->getUserPref($field->getId), + extras=>'', + possibleValues=>$field->get("possibleValues"), + options=>$options, + fieldType=>$fieldType + }; + if (lc($fieldType) eq 'textarea') { + $params->{rows} = 4; + $params->{columns} = 20; + } + $f->dynamicField(%$params); + } + $f->submit; + return $f->print; +} + +#------------------------------------------------------------------- +sub www_manageUserPrefs { + my $self = shift; + return WebGUI::Privilege::insufficient() unless $self->canEdit; + my $output = $self->getFieldsList; + return $self->_submenu($output,WebGUI::International::get("Manage User Preferences","Asset_Shortcut")); +} + +#------------------------------------------------------------------- +sub www_manageOverrides { + my $self = shift; + return WebGUI::Privilege::insufficient() unless $self->canEdit; + return $self->_submenu($self->getOverridesList,WebGUI::International::get("Manage Shortcut Overrides","Asset_Shortcut")); +} + +#------------------------------------------------------------------- +sub www_purgeOverrideCache { + my $self = shift; + return WebGUI::Privilege::insufficient() unless $self->canEdit; + $self->uncacheOverrides; + return $self->www_manageOverrides; +} + +#------------------------------------------------------------------- +sub www_deleteOverride { + my $self = shift; + return WebGUI::Privilege::insufficient() unless $self->canEdit; + WebGUI::SQL->write('delete from Shortcut_overrides where assetId='.quote($self->getId).' and fieldName='.quote($session{form}{fieldName})); + $self->uncacheOverrides; + return $self->www_manageOverrides; +} + +#------------------------------------------------------------------- +sub www_saveUserPrefs { + my $self = shift; + return '' unless $self->getParent->canPersonalize; + my @fellowFields = $self->getUserPrefs; + foreach my $fieldId (keys %{$session{form}}) { + my $field = WebGUI::Asset->newByDynamicClass($fieldId); + next unless $field; + $field->setUserPref($fieldId,$session{form}{$fieldId}); + } + return $self->view; +} + +#------------------------------------------------------------------- +sub www_getNewTitle { + my $self = shift; + return '' unless $self->getParent->canPersonalize; + my $foo = $self->getShortcut; + return $foo->{_properties}{title}; +} + +#------------------------------------------------------------------- +sub www_editOverride { + my $self = shift; + return WebGUI::Privilege::insufficient() unless $self->canEdit; + my $i18n = WebGUI::International->new("Asset_Shortcut"); + my $fieldName = $session{form}{fieldName}; + my %overrides = $self->getOverrides; + my $output = ''; + my %props; + foreach my $def (@{$self->getShortcutOriginal->definition}) { + %props = (%props,%{$def->{properties}}); + } + $output .= ''; + my $f = WebGUI::HTMLForm->new(-action=>$self->getUrl); + $f->hidden(-name=>"func",-value=>"saveOverride"); + $f->hidden(-name=>"overrideFieldName",-value=>$session{form}{fieldName}); + $f->readOnly(-label=>$i18n->get("Field Name"),-value=>$session{form}{fieldName}); + $f->readOnly(-label=>$i18n->get("Original Value"),-value=>$overrides{overrides}{$fieldName}{origValue}); + my %params; + foreach my $key (keys %{$props{$fieldName}}) { + next if ($key eq "tab"); + $params{$key} = $props{$fieldName}{$key}; + } + $params{value} = $overrides{overrides}{$fieldName}{origValue}; + $params{name} = $fieldName; + $params{label} = $params{label} || $i18n->get("Edit Field Directly"); + $params{hoverhelp} = $params{hoverhelp} || $i18n->get("Use this field to edit the override using the native form handler for this field type"); + if ($fieldName eq 'templateId') {$params{namespace} = $params{namespace} || WebGUI::Asset->newByDynamicClass($overrides{overrides}{templateId}{origValue})->get("namespace");} + $f->dynamicField(%params); + $f->textarea( + -name=>"newOverrideValueText", + -label=>$i18n->get("New Override Value"), + -value=>$overrides{overrides}{$fieldName}{newValue}, + -hoverHelp=>$i18n->get("Place something in this box if you dont want to use the automatically generated field") + ); + $f->readOnly(-label=>$i18n->get("Replacement Value"),-value=>$overrides{overrides}{$fieldName}{parsedValue},-hoverHelp=>$i18n->get("This is the example output of the field when parsed for user preference macros")); + $f->submit; + $output .= $f->print; + return $self->_submenu($output,$i18n->get('Edit Override')); +} + +#------------------------------------------------------------------- +sub www_saveOverride { + my $self = shift; + return WebGUI::Privilege::insufficient() unless $self->canEdit; + my $fieldName = $session{form}{overrideFieldName}; + my %overrides = $self->getOverrides; + my $output = ''; + my %props; + foreach my $def (@{$self->getShortcutOriginal->definition}) { + %props = (%props,%{$def->{properties}}); + } + my $fieldType = $props{$fieldName}{fieldType}; + my $value = WebGUI::FormProcessor::process($fieldName,$fieldType); + $value = $session{form}{newOverrideValueText} || $value; + WebGUI::SQL->write("delete from Shortcut_overrides where assetId=".quote($self->getId)." and fieldName=".quote($fieldName)); + WebGUI::SQL->write("insert into Shortcut_overrides values (".quote($self->getId).",".quote($fieldName).",".quote($value).")"); + $self->uncacheOverrides; + return $self->www_manageOverrides; +} + +#------------------------------------------------------------------- +sub www_view { + my $self = shift; + if (ref($self->getParent) eq 'WebGUI::Asset::Wobject::Dashboard') { + return WebGUI::Privilege::noAccess() unless $self->canView; + $session{asset} = $self->getParent; + return $session{asset}->www_view; + } else { + return $self->getShortcut->www_view; + } +} + +1; +