package WebGUI::Operation::MetaData; #------------------------------------------------------------------- # WebGUI is Copyright 2001-2004 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 Exporter; use strict; use Tie::IxHash; use WebGUI::Icon; use WebGUI::Id; use WebGUI::International; use WebGUI::Macro; use WebGUI::MetaData; use WebGUI::Operation::Shared; use WebGUI::Privilege; use WebGUI::Session; use WebGUI::SQL; use WebGUI::URL; use WebGUI::Utility; our @ISA = qw(Exporter); our @EXPORT = qw(&www_editMetaDataField &www_manageMetaData &www_editMetaDataFieldSave &www_deleteMetaDataField &www_deleteMetaDataFieldConfirm &www_saveMetaDataSettings); #------------------------------------------------------------------- sub _submenu { my (%menu); tie %menu, 'Tie::IxHash'; $menu{WebGUI::URL::page('op=manageSettings')} = WebGUI::International::get(4); if($session{form}{op} ne "manageMetaData") { $menu{WebGUI::URL::page('op=manageMetaData')} = WebGUI::International::get('Manage Metadata','MetaData'); } $menu{WebGUI::URL::page('op=editMetaDataField')} = WebGUI::International::get('Add new field','MetaData'); return menuWrapper($_[0],\%menu); } #------------------------------------------------------------------- sub www_saveMetaDataSettings { return WebGUI::Privilege::adminOnly() unless (WebGUI::Grouping::isInGroup(3)); WebGUI::SQL->write("update settings set value=".quote($session{form}{metaDataEnabled})." where name='metaDataEnabled'"); WebGUI::SQL->write("update settings set value=".quote($session{form}{passiveProfilingEnabled})." where name='passiveProfilingEnabled'"); $session{setting}{metaDataEnabled} = $session{form}{metaDataEnabled}; $session{setting}{passiveProfilingEnabled} = $session{form}{passiveProfilingEnabled}; return www_manageMetaData(); } #------------------------------------------------------------------- sub www_editMetaDataField { return WebGUI::Privilege::adminOnly() unless (WebGUI::Grouping::isInGroup(3)); return WebGUI::Privilege::vitalComponent() if ($session{form}{fid} < 1000 && $session{form}{fid} > 0); my ($output, $fieldName, $defaultValue, $description, $fieldInfo); $output = helpIcon('metadata edit property'); $output .= '

'.WebGUI::International::get('Edit Metadata','MetaData').'

'; if($session{form}{fid} && $session{form}{fid} ne "new") { $fieldInfo = WebGUI::MetaData::getField($session{form}{fid}); } my $fid = $session{form}{fid} || "new"; my $f = WebGUI::HTMLForm->new; $f->hidden("op", "editMetaDataFieldSave"); $f->hidden("fid", $fid); $f->readOnly( -value=>$fid, -label=>WebGUI::International::get('Field Id','MetaData'), ); $f->text("fieldName", WebGUI::International::get('Field name','MetaData'), $fieldInfo->{fieldName}); $f->textarea("description", WebGUI::International::get(85), $fieldInfo->{description}); $f->fieldType( -name=>"fieldType", -label=>WebGUI::International::get(486), -value=>[$fieldInfo->{fieldType} || "text"], -types=>WebGUI::MetaData::getFieldTypes() ); $f->textarea("possibleValues",WebGUI::International::get(487),$fieldInfo->{possibleValues}); #$f->text("defaultValue", "Default value", $defaultValue); $f->submit(); $output .= $f->print; return _submenu($output); } #------------------------------------------------------------------- sub www_editMetaDataFieldSave { return WebGUI::Privilege::adminOnly() unless (WebGUI::Grouping::isInGroup(3)); return WebGUI::Privilege::vitalComponent() if ($session{form}{fid} < 1000 && $session{form}{fid} > 0); # Check for duplicate field names my $sql = "select count(*) from metaData_properties where fieldName = ". quote($session{form}{fieldName}); if ($session{form}{fid} ne "new") { $sql .= " and fieldId <> ".quote($session{form}{fid}); } my ($isDuplicate) = WebGUI::SQL->buildArray($sql); if($isDuplicate) { my $error = WebGUI::International::get("duplicateField", "MetaData"); $error =~ s/\%field\%/$session{form}{fieldName}/; return $error . www_editMetaDataField(); } if($session{form}{fieldName} eq "") { return WebGUI::International::get("errorEmptyField", "MetaData") . www_editMetaDataField(); } if($session{form}{fid} eq 'new') { $session{form}{fid} = WebGUI::Id::generate(); WebGUI::SQL->write("insert into metaData_properties (fieldId, fieldName, defaultValue, description, fieldType, possibleValues) values (". quote($session{form}{fid}).",". quote($session{form}{fieldName}).",". quote($session{form}{defaultValue}).",". quote($session{form}{description}).",". quote($session{form}{fieldType}).",". quote($session{form}{possibleValues}).")"); } else { WebGUI::SQL->write("update metaData_properties set fieldName = ".quote($session{form}{fieldName}).", ". "defaultValue = ".quote($session{form}{defaultValue}).", ". "description = ".quote($session{form}{description}).", ". "fieldType = ".quote($session{form}{fieldType}).", ". "possibleValues = ".quote($session{form}{possibleValues}). " where fieldId = ".quote($session{form}{fid})); } return www_manageMetaData(); } #------------------------------------------------------------------- sub www_deleteMetaDataField { return WebGUI::Privilege::adminOnly() unless (WebGUI::Grouping::isInGroup(3)); return WebGUI::Privilege::vitalComponent() if ($session{form}{fid} < 1000 && $session{form}{fid} > 0); #TODO HELP my $output = helpIcon("theme delete"); $output .= '

'.WebGUI::International::get('Delete Metadata field','MetaData').'

'; $output .= WebGUI::International::get('deleteConfirm','MetaData').'

'; $output .= '

'.WebGUI::International::get(44).''; $output .= '    '.WebGUI::International::get(45).'
'; return _submenu($output); } #------------------------------------------------------------------- sub www_deleteMetaDataFieldConfirm { return WebGUI::Privilege::adminOnly() unless (WebGUI::Grouping::isInGroup(3)); return WebGUI::Privilege::vitalComponent() if ($session{form}{fid} < 1000 && $session{form}{fid} > 0); WebGUI::MetaData::deleteField($session{form}{fid}); return www_manageMetaData(); } #------------------------------------------------------------------- sub www_manageMetaData { return WebGUI::Privilege::adminOnly() unless (WebGUI::Grouping::isInGroup(3)); my $output; $output = helpIcon('metadata manage'); $output .= '

'.WebGUI::International::get('Manage Metadata','MetaData').'

'; my $f = new WebGUI::HTMLForm; $f->hidden("op","saveMetaDataSettings"); $f->yesNo( -name=>"metaDataEnabled", -label=>WebGUI::International::get("Enable Metadata ?", 'MetaData'), -value=>$session{setting}{metaDataEnabled}, ); $f->yesNo( -name=>"passiveProfilingEnabled", -label=>WebGUI::International::get("Enable passive profiling ?", 'MetaData'), -value=>$session{setting}{passiveProfilingEnabled}, ); $f->submit(); $output .= $f->print; $output .= "

".WebGUI::International::get('Manage Metadata fields','MetaData')."

"; my $fields = WebGUI::MetaData::getMetaDataFields(); foreach my $fieldId (keys %{$fields}) { $output .= deleteIcon("op=deleteMetaDataField&fid=".$fieldId); $output .= editIcon("op=editMetaDataField&fid=".$fieldId); $output .= "".$fields->{$fieldId}{fieldName}."
"; } $output .= '

'. WebGUI::International::get('Add new field','MetaData'). '

'; return _submenu($output); } 1;