From 3e60294bb6f6b30b744dd8ae68ba9ec4f8904f29 Mon Sep 17 00:00:00 2001 From: JT Smith Date: Fri, 10 Mar 2006 03:48:23 +0000 Subject: [PATCH] Run on registration and alert on new user have been converted to a single workflow. --- docs/changelog/6.x.x.txt | 2 + docs/upgrades/upgrade_6.8.7-6.99.0.pl | 3 + lib/WebGUI/Auth.pm | 14 ++- lib/WebGUI/Form/Workflow.pm | 16 ++- lib/WebGUI/Help/WebGUI.pm | 10 -- lib/WebGUI/Mail/Send.pm | 5 +- lib/WebGUI/Operation/Settings.pm | 4 +- lib/WebGUI/Workflow.pm | 4 +- .../Workflow/Activity/NotifyAboutUser.pm | 109 ++++++++++++++++++ .../Workflow/Activity/RunCommandAsUser.pm | 95 +++++++++++++++ lib/WebGUI/i18n/English.pm | 2 +- lib/WebGUI/i18n/English/WebGUI.pm | 29 +---- .../Workflow_Activity_NotifyAboutUser.pm | 48 ++++++++ .../Workflow_Activity_RunCommandAsUser.pm | 24 ++++ www/extras/toolbar/metal/copy.gif | Bin 1235 -> 0 bytes www/extras/toolbar/metal/cut.gif | Bin 1240 -> 0 bytes www/extras/toolbar/metal/delete.gif | Bin 1000 -> 0 bytes www/extras/toolbar/metal/drag.gif | Bin 1277 -> 0 bytes www/extras/toolbar/metal/edit.gif | Bin 1227 -> 0 bytes www/extras/toolbar/metal/export.gif | Bin 597 -> 0 bytes www/extras/toolbar/metal/help.gif | Bin 1221 -> 0 bytes www/extras/toolbar/metal/import.gif | Bin 597 -> 0 bytes www/extras/toolbar/metal/locked.gif | Bin 594 -> 0 bytes www/extras/toolbar/metal/manage.gif | Bin 1322 -> 0 bytes www/extras/toolbar/metal/moveBottom.gif | Bin 597 -> 0 bytes www/extras/toolbar/metal/moveDown.gif | Bin 604 -> 0 bytes www/extras/toolbar/metal/moveLeft.gif | Bin 604 -> 0 bytes www/extras/toolbar/metal/moveRight.gif | Bin 604 -> 0 bytes www/extras/toolbar/metal/moveTop.gif | Bin 597 -> 0 bytes www/extras/toolbar/metal/moveUp.gif | Bin 604 -> 0 bytes www/extras/toolbar/metal/paste.gif | Bin 1316 -> 0 bytes www/extras/toolbar/metal/shortcut.gif | Bin 604 -> 0 bytes www/extras/toolbar/metal/view.gif | Bin 1225 -> 0 bytes 33 files changed, 315 insertions(+), 50 deletions(-) create mode 100644 lib/WebGUI/Workflow/Activity/NotifyAboutUser.pm create mode 100644 lib/WebGUI/Workflow/Activity/RunCommandAsUser.pm create mode 100644 lib/WebGUI/i18n/English/Workflow_Activity_NotifyAboutUser.pm create mode 100644 lib/WebGUI/i18n/English/Workflow_Activity_RunCommandAsUser.pm delete mode 100644 www/extras/toolbar/metal/copy.gif delete mode 100644 www/extras/toolbar/metal/cut.gif delete mode 100644 www/extras/toolbar/metal/delete.gif delete mode 100644 www/extras/toolbar/metal/drag.gif delete mode 100644 www/extras/toolbar/metal/edit.gif delete mode 100644 www/extras/toolbar/metal/export.gif delete mode 100644 www/extras/toolbar/metal/help.gif delete mode 100644 www/extras/toolbar/metal/import.gif delete mode 100644 www/extras/toolbar/metal/locked.gif delete mode 100644 www/extras/toolbar/metal/manage.gif delete mode 100644 www/extras/toolbar/metal/moveBottom.gif delete mode 100644 www/extras/toolbar/metal/moveDown.gif delete mode 100644 www/extras/toolbar/metal/moveLeft.gif delete mode 100644 www/extras/toolbar/metal/moveRight.gif delete mode 100644 www/extras/toolbar/metal/moveTop.gif delete mode 100644 www/extras/toolbar/metal/moveUp.gif delete mode 100644 www/extras/toolbar/metal/paste.gif delete mode 100644 www/extras/toolbar/metal/shortcut.gif delete mode 100644 www/extras/toolbar/metal/view.gif diff --git a/docs/changelog/6.x.x.txt b/docs/changelog/6.x.x.txt index 0b3dd1bf8..bbb942335 100644 --- a/docs/changelog/6.x.x.txt +++ b/docs/changelog/6.x.x.txt @@ -1,4 +1,6 @@ 6.99.0 + - Run on registration and alert on new user have been converted to a single + workflow. - Many changes for better XHTML compliance. - Refactored admin bar to be more dynamic. - Added version tags menu to admin bar. diff --git a/docs/upgrades/upgrade_6.8.7-6.99.0.pl b/docs/upgrades/upgrade_6.8.7-6.99.0.pl index bbb972a22..3995d1bcc 100644 --- a/docs/upgrades/upgrade_6.8.7-6.99.0.pl +++ b/docs/upgrades/upgrade_6.8.7-6.99.0.pl @@ -243,6 +243,9 @@ sub addWorkflow { }, "pbworkflow000000000003"); $activity = $workflow->addActivity("WebGUI::Workflow::Activity::CommitVersionTag", "pbwfactivity0000000006"); $activity->set("title", "Commit Assets"); + $session->setting->remove("alertOnNewUser"); + $session->setting->remove("onNewUserAlertGroup"); + $session->setting->set("runOnRegistration",""); } #------------------------------------------------- diff --git a/lib/WebGUI/Auth.pm b/lib/WebGUI/Auth.pm index 6f8ffa458..36591bee6 100644 --- a/lib/WebGUI/Auth.pm +++ b/lib/WebGUI/Auth.pm @@ -28,6 +28,7 @@ use WebGUI::Utility; use WebGUI::User; use WebGUI::Operation::Shared; use WebGUI::Operation::Profile; +use WebGUI::Workflow::Instance; =head1 NAME @@ -267,10 +268,15 @@ sub createAccountSave { $self->session->var->start($userId,$self->session->getId); $self->_logLogin($userId,"success"); $self->session->http->setStatus(201,"Account Registration Successful"); - my $command = $self->session->setting->get("runOnRegistration"); - WebGUI::Macro::process($self->session,\$command); - system($command) if ($self->session->setting->get("runOnRegistration") ne ""); - WebGUI::MessageLog::addInternationalizedEntry('',$self->session->setting->get("onNewUserAlertGroup"),'',536) if ($self->session->setting->get("alertOnNewUser")); + if ($self->session->setting->get("runOnRegistration")) { + WebGUI::Workflow::Instance->create($self->session, { + workflowId=>$self->session->setting->get("runOnRegistration"), + methodName=>"new", + className=>"WebGUI::User", + parameters=>$self->session->userId, + priority=>1 + }); + } return ""; } diff --git a/lib/WebGUI/Form/Workflow.pm b/lib/WebGUI/Form/Workflow.pm index ae08f5705..5c2f604e0 100644 --- a/lib/WebGUI/Form/Workflow.pm +++ b/lib/WebGUI/Form/Workflow.pm @@ -53,19 +53,23 @@ The identifier for this field. Defaults to "workflowId". =head4 type -The type of workflows to list based upon the object type that will be passed to them "none", "versiontag", etc. If this is omitted, the entire list of workflows will be returned. +The type of workflows to list based upon the object type that will be passed to them "none", "WebGUI::VersionTag", etc. If this is omitted, the entire list of workflows will be returned. =head4 label A text label that will be displayed if toHtmlWithWrapper() is called. Defaults to getName(). +=head4 none + +If set to 1 then a "None" option will appear in the list of workflows, which will store a null value in the field. Defaults to 0. + =cut sub definition { my $class = shift; my $session = shift; my $definition = shift || []; - my $i18n = WebGUI::International->new($session, 'Workflow_Cron'); + my $i18n = WebGUI::International->new($session, 'Workflow'); push(@{$definition}, { formName=>{ defaultValue=>$i18n->get("topicName") @@ -76,9 +80,12 @@ sub definition { name=>{ defaultValue=>"workflowId" }, - namespace=>{ + type=>{ defaultValue=>undef }, + none=>{ + defaulValue=>0 + } }); return $class->SUPER::definition($session, $definition); } @@ -94,6 +101,7 @@ Renders a template picker control. sub toHtml { my $self = shift; my $workflowList = WebGUI::Workflow->getList($self->session, $self->get("type")); + $workflowList->{""} = "None"; $self->set("options", $workflowList); $self->setManageIcons(); return $self->SUPER::toHtml(); @@ -124,7 +132,7 @@ Adds code to the subtext field of the form so that buttons for managing or editi sub setManageIcons { my $self = shift; my $returnUrl = ";proceed=goBackToPage;returnUrl=".$self->session->url->escape($self->session->asset->getUrl) if $self->session->asset; - my $buttons = $self->session->icon->edit("op=editWorkflow".$returnUrl); + my $buttons = $self->session->icon->edit("op=editWorkflow;workflowId=".$self->get("workflowId").$returnUrl) if ($self->get("workflowId")); $buttons .= $self->session->icon->manage("op=manageWorkflows".$returnUrl); $self->set("subtext",$buttons . $self->get("subtext")); } diff --git a/lib/WebGUI/Help/WebGUI.pm b/lib/WebGUI/Help/WebGUI.pm index b330668b8..bfb521ce6 100644 --- a/lib/WebGUI/Help/WebGUI.pm +++ b/lib/WebGUI/Help/WebGUI.pm @@ -344,16 +344,6 @@ our $HELP = { description => '824 description', namespace => 'WebGUI', }, - { - title => '534', - description => '534 description', - namespace => 'WebGUI', - }, - { - title => '535', - description => '535 description', - namespace => 'WebGUI', - }, { title => '400', description => '400 description', diff --git a/lib/WebGUI/Mail/Send.pm b/lib/WebGUI/Mail/Send.pm index 2c675d914..2d8603ffa 100644 --- a/lib/WebGUI/Mail/Send.pm +++ b/lib/WebGUI/Mail/Send.pm @@ -190,7 +190,7 @@ sub new { =head2 send ( ) -Sends the message via SMTP. +Sends the message via SMTP. Returns 1 if successful. =cut @@ -202,6 +202,7 @@ sub send { close(MAIL) or $self->session->errorHandler->error("Couldn't close connection to mail server: ".$self->session->setting->get("smtpServer")); } else { $self->session->errorHandler->error("Couldn't connect to mail server: ".$self->session->setting->get("smtpServer")); + return 0; } } else { my $smtp = Net::SMTP->new($self->session->setting->get("smtpServer")); # connect to an SMTP server @@ -216,8 +217,10 @@ sub send { $smtp->quit; # Close the SMTP connection } else { $self->session->errorHandler->error("Couldn't connect to mail server: ".$self->session->setting->get("smtpServer")); + return 0; } } + return 1; } #------------------------------------------------------------------- diff --git a/lib/WebGUI/Operation/Settings.pm b/lib/WebGUI/Operation/Settings.pm index 3f7f1a983..1020206be 100644 --- a/lib/WebGUI/Operation/Settings.pm +++ b/lib/WebGUI/Operation/Settings.pm @@ -232,7 +232,9 @@ sub www_editSettings { -hoverHelp=>$i18n->get('118 description'), -value=>$session->setting->get("anonymousRegistration") ); - $tabform->getTab("user")->text( + $tabform->getTab("user")->workflow( + -none=>1, + -type=>"WebGUI::User", -name=>"runOnRegistration", -label=>$i18n->get(559), -hoverHelp=>$i18n->get('559 description'), diff --git a/lib/WebGUI/Workflow.pm b/lib/WebGUI/Workflow.pm index 2a3d3a9b9..c4b19231b 100644 --- a/lib/WebGUI/Workflow.pm +++ b/lib/WebGUI/Workflow.pm @@ -238,8 +238,8 @@ sub getList { my $session = shift; my $type = shift; my $sql = "select workflowId, title from Workflow where enabled=1"; - $sql .= " where type=?" if ($type); - return $session->db->buildHashRef($sql, $type); + $sql .= " and type=?" if ($type); + return $session->db->buildHashRef($sql, [$type]); } diff --git a/lib/WebGUI/Workflow/Activity/NotifyAboutUser.pm b/lib/WebGUI/Workflow/Activity/NotifyAboutUser.pm new file mode 100644 index 000000000..b090d26f9 --- /dev/null +++ b/lib/WebGUI/Workflow/Activity/NotifyAboutUser.pm @@ -0,0 +1,109 @@ +package WebGUI::Workflow::Activity::NotifyAboutUser; + + +=head1 LEGAL + + ------------------------------------------------------------------- + WebGUI is Copyright 2001-2006 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 + ------------------------------------------------------------------- + +=cut + +use strict; +use base 'WebGUI::Workflow::Activity'; +use WebGUI::International; +use WebGUI::Macro; +use WebGUI::Mail::Send; + +=head1 NAME + +Package WebGUI::Workflow::Activity::NotifyAboutUser + +=head1 DESCRIPTION + +Takes a user object and sends out a message. Can use macros in message. + +=head1 SYNOPSIS + +See WebGUI::Workflow::Activity for details on how to use any activity. + +=head1 METHODS + +These methods are available from this class: + +=cut + + +#------------------------------------------------------------------- + +=head2 definition ( session, definition ) + +See WebGUI::Workflow::Activity::defintion() for details. + +=cut + +sub definition { + my $class = shift; + my $session = shift; + my $definition = shift; + my $i18n = WebGUI::International->new($session, "Workflow_Activity_NotifyAboutUser"); + push(@{$definition}, { + name=>$i18n->get("topicName"), + properties=> { + to => { + fieldType=>"text", + label=>$i18n->get("to"), + defaultValue=>$session->setting->get("companyEmail"), + hoverHelp=>$i18n->get("to help") + }, + subject => { + fieldType=>"text", + label=>$i18n->get("subject"), + defaultValue=>undef, + hoverHelp=>$i18n->get("subject help") + }, + message => { + fieldType=>"textarea", + label=>$i18n->get("message"), + defaultValue=>undef, + hoverHelp=>$i18n->get("message help") + }, + } + }); + return $class->SUPER::definition($session,$definition); +} + + +#------------------------------------------------------------------- + +=head2 execute ( [ object ] ) + +See WebGUI::Workflow::Activity::execute() for details. + +=cut + +sub execute { + my $self = shift; + my $user = shift; + $self->session->user({user=>$user}); + my $message = $self->get("message"); + WebGUI::Macro::process(\$message); + my $mail = WebGUI::Mail::Send->new($self->session, { + to=>$self->get("to"), + subject=>$self->get("subject") + }); + $mail->addText($message); + return $mail->send; +} + + + +1; + + diff --git a/lib/WebGUI/Workflow/Activity/RunCommandAsUser.pm b/lib/WebGUI/Workflow/Activity/RunCommandAsUser.pm new file mode 100644 index 000000000..15c9363fc --- /dev/null +++ b/lib/WebGUI/Workflow/Activity/RunCommandAsUser.pm @@ -0,0 +1,95 @@ +package WebGUI::Workflow::Activity::RunCommandAsUser; + + +=head1 LEGAL + + ------------------------------------------------------------------- + WebGUI is Copyright 2001-2006 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 + ------------------------------------------------------------------- + +=cut + +use strict; +use base 'WebGUI::Workflow::Activity'; +use WebGUI::International; +use WebGUI::Macro; + +=head1 NAME + +Package WebGUI::Workflow::Activity::RunCommandAsUser + +=head1 DESCRIPTION + +This activity will tell the session to switch to the user object passed in as the current user, and then execute a command on the command line of the local operating system. It processes macros so feel free to use macros in the command line. + +=head1 SYNOPSIS + +See WebGUI::Workflow::Activity for details on how to use any activity. + +=head1 METHODS + +These methods are available from this class: + +=cut + + +#------------------------------------------------------------------- + +=head2 definition ( session, definition ) + +See WebGUI::Workflow::Activity::defintion() for details. + +=cut + +sub definition { + my $class = shift; + my $session = shift; + my $definition = shift; + my $i18n = WebGUI::International->new($session, "Workflow_Activity_RunCommandAsUser"); + push(@{$definition}, { + name=>$i18n->get("topicName"), + properties=> { + commandLine => { + fieldType=>"text", + label=>$i18n->get("command"), + defaultValue=>undef, + hoverHelp=>$i18n->get("command help") + }, + } + }); + return $class->SUPER::definition($session,$definition); +} + + +#------------------------------------------------------------------- + +=head2 execute ( [ object ] ) + +See WebGUI::Workflow::Activity::execute() for details. + +=cut + +sub execute { + my $self = shift; + my $user = shift; + my $cmd = $self->get("command"); + $self->session->user({user=>$user}); + WebGUI::Macro::process(\$cmd); + if (system($cmd)) { + return 0; + } else { + return 1; + } +} + + + +1; + + diff --git a/lib/WebGUI/i18n/English.pm b/lib/WebGUI/i18n/English.pm index bd7f2e10e..48a72e6c1 100644 --- a/lib/WebGUI/i18n/English.pm +++ b/lib/WebGUI/i18n/English.pm @@ -5,7 +5,7 @@ use strict; our $LANGUAGE = { label => 'English', - toolbar => 'metal', + toolbar => 'shiny', languageAbbreviation => 'en', # used by plugins such as javascript helpers and third-party perl modules locale => 'US' # same as above }; diff --git a/lib/WebGUI/i18n/English/WebGUI.pm b/lib/WebGUI/i18n/English/WebGUI.pm index dfab31218..b435de632 100644 --- a/lib/WebGUI/i18n/English/WebGUI.pm +++ b/lib/WebGUI/i18n/English/WebGUI.pm @@ -457,11 +457,6 @@ Be aware that any database links you create here will be available to all conten lastUpdated => 1031514049 }, - '536' => { - message => q|A new user named ^@; has joined the site.|, - lastUpdated => 1031514049 - }, - '379' => { message => q|Group ID|, lastUpdated => 1031514049 @@ -512,11 +507,6 @@ Be aware that any database links you create here will be available to all conten lastUpdated => 1031514049 }, - '535' => { - message => q|Group To Alert On New User|, - lastUpdated => 1031514049 - }, - '87' => { message => q|Edit Group|, lastUpdated => 1031514049 @@ -802,11 +792,6 @@ to add or remove users from their groups. lastUpdated => 1036046598 }, - '534' => { - message => q|Alert on new user?|, - lastUpdated => 1031514049 - }, - '400' => { message => q|Prevent Proxy Caching|, lastUpdated => 1031514049 @@ -3519,16 +3504,6 @@ Optionally, if you are running a sendmail server on the same machine as WebGUI, lastUpdated => 1120239343, }, - '534 description' => { - message => q|Should someone be alerted when a new user registers anonymously?|, - lastUpdated => 1120239343, - }, - - '535 description' => { - message => q|What group should be alerted when a new user registers?|, - lastUpdated => 1120239343, - }, - '400 description' => { message => q|Some companies have proxy servers that cause problems with WebGUI. If you're experiencing problems with WebGUI, and you have a proxy server, you may want to set this setting to Yes. Beware that WebGUI's URLs will not be as user-friendly after this feature is turned on.|, lastUpdated => 1120239343, @@ -3550,8 +3525,8 @@ Optionally, if you are running a sendmail server on the same machine as WebGUI, }, '559 description' => { - message => q|If there is a command line specified here, it will be executed each time a user registers anonymously.|, - lastUpdated => 1120239343, + message => q|If there is a workflow chosen here, it will be executed each time a user registers anonymously.|, + lastUpdated => 1141956483, }, '539 description' => { diff --git a/lib/WebGUI/i18n/English/Workflow_Activity_NotifyAboutUser.pm b/lib/WebGUI/i18n/English/Workflow_Activity_NotifyAboutUser.pm new file mode 100644 index 000000000..39c43909b --- /dev/null +++ b/lib/WebGUI/i18n/English/Workflow_Activity_NotifyAboutUser.pm @@ -0,0 +1,48 @@ +package WebGUI::i18n::English::Workflow_Activity_NotifyAboutUser; + +our $I18N = { + 'message help' => { + message => q|Type the message you want to send. Feel free to use macros for additional parameters.|, + context => q|the hover help for the message field|, + lastUpdated => 0, + }, + + 'message' => { + message => q|Message|, + context => q|a label for the message field|, + lastUpdated => 0, + }, + + 'subject help' => { + message => q|The subject of the message that will be sent.|, + context => q|the hover help for the subject field|, + lastUpdated => 0, + }, + + 'subject' => { + message => q|Subject|, + context => q|a label for the subject field|, + lastUpdated => 0, + }, + + 'to help' => { + message => q|The email address to send the message to. You may put in mutliple email addresses seperated by commas.|, + context => q|the hover help for the to field|, + lastUpdated => 0, + }, + + 'to' => { + message => q|To|, + context => q|a label for the to field|, + lastUpdated => 0, + }, + + 'topicName' => { + message => q|Notify About User|, + context => q|The name of this workflow activity.|, + lastUpdated => 0, + }, + +}; + +1; diff --git a/lib/WebGUI/i18n/English/Workflow_Activity_RunCommandAsUser.pm b/lib/WebGUI/i18n/English/Workflow_Activity_RunCommandAsUser.pm new file mode 100644 index 000000000..e8fc06bf6 --- /dev/null +++ b/lib/WebGUI/i18n/English/Workflow_Activity_RunCommandAsUser.pm @@ -0,0 +1,24 @@ +package WebGUI::i18n::English::Workflow_Activity_RunCommandAsUser; + +our $I18N = { + 'command help' => { + message => q|Type the command you wish to run here. Feel free to use macros for additional parameters.|, + context => q|the hover help for the command field|, + lastUpdated => 0, + }, + + 'command' => { + message => q|Command|, + context => q|a label for the command to be run|, + lastUpdated => 0, + }, + + 'topicName' => { + message => q|Run Command As User|, + context => q|The name of this workflow activity.|, + lastUpdated => 0, + }, + +}; + +1; diff --git a/www/extras/toolbar/metal/copy.gif b/www/extras/toolbar/metal/copy.gif deleted file mode 100644 index c1e84178e08f8389cb8a99c92ff9f4bf93ae8d29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1235 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 diff --git a/www/extras/toolbar/metal/edit.gif b/www/extras/toolbar/metal/edit.gif deleted file mode 100644 index 06ae517289b8bb2157bea22d1bbd1fc89577e1b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1227 zcmV;+1T_0cNk%w1VI=?z0QVUH^7Qm{baa4#fPa5~^7QrS?(gaD@5jr_b#-;PzrgYI z^l@=<^7Zw3d3k+(edq1&#>&cbb8~)ve(CP+a&mIFzQ2p6skObnu*b>r^740qg1Wl8 zc9WKii;L>+@3y|bm6et8^YrHI?7PCl=Irf!e0+$cr{?SIdU|?(ouIV5y~D`K#mUON z!^DN0pMIE|gPop$l$VR8sB@8&Yl@9`l$eL3rje16+T`VWm6*J|ym^$E)!yH3jE`e^ zdwZCh&D-3`)YgETo#*WAh=_=$yuX8kgZldVwZp}Lk&}(AulV@*(%s%?gNDo2*o>s6 zpSZemm6+h==6r*Lk*%=2!o$DN(!IpQi=(H0kC33dzKWotp}W59?CinP)PkFz)!^ZW zhlhKXnybLV+~nntkB?}Eig%ixj;*k;$jNe(muhr%d!C_|qNIkSrhu89rnzS7jd(9?REp2EVyuf@iO zhK7TjpWEZ)$k5P=rl{NG=7E8Mf}Ed_mzRjDtnc#ktHH#7nVikp+ST9Sz01vGfrN#k zrjf3&grTHmgonSz#)_q1kE5o8o1eGG$$^`mfuEw5tFMTstACxL zn5d|Nf`Y%r#+|yo=Ss;aNY%7UPygPos>rKpLZqlBfWf}x|W#mBwF#Bz_3jHao) z%+2fX@NjT&zP`SevbDg#z=)-&f}5UudwbmF<+{$%i>t59+T8E&?{{~1w#?7Bz`>BI ztkK%rx6IIdo1dn-y_2r7c$l1fj*xYhn#|SK(9qD>#m36Zi=?OY^z_2V$lK)Q zeV?Si($kunnybUd*4*7?e15>j#+tXf@$vDNw77ANkbjbuf|{J@?e6gN^na6<`T6;F zc6M4?S^xk5A^8LW000>PEC2ui03`qn000R805fDD2V%hj3K0S*M1Y{5!-o(VDh!Y? z0tE>h1PatKCEKT0`a*~l0Kf!@k-$a`3Jo!E;)DnhBuG3M z`XFC{qepp7SZct42M_v<-6U#opR0OY{n0|!Jo2{NuthXshd6#-Q&O#Hg|zP`%CfPvB&ICg(WZmb4V=s^btci8W5pT p2F#RkO#=;}P=W&v44|a|TyDZ8ms$=W0hT31gF*w9w4zZ!06VQ>zq>BJ?4MZGH?ggwWA(<3D>iKCUA2h{i`R;xDIy*a8?>lhx?78Ipg1rY0ZrQzO{kH8b z3zyc`)-GMTv}Nx6J^S}BTefWX{{7|Ud)q?&>3wG_D zyM5Q@BggXkCLOtODXYD!aKhxG+PZDK_q=)cuDQ9ny0&ihfx`vWwGA_7FIu!HJw5&B z&!3*2o(yCG#h)yU3=BC8Iw0MkIALJl)R5DZ#cOMt${3Q>)WabW7|G0Rq@Kpn!^p>+ zA}S~-YQV|In3Kg8oV#+Bu6Yn!7LS;Ju89K^Q*OMDhZs+`xMZ$SOf=`ATv_q#Y<{WS zFpX8YHo5$#xdd{htwls~wR01>vRPbjs``0b@xv+5iDqmWe9uXzS&8{XNp6pb_ zVX?@CRYHdShL6MKw&q?vpCE}!!^I5B8c8mHJeZVPxP^ozIJtrt8cr(m));WHFjxZs Df@}b} diff --git a/www/extras/toolbar/metal/help.gif b/www/extras/toolbar/metal/help.gif deleted file mode 100644 index f2f94c9c3cab3eb73af550f284a78e99e315ae3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1221 zcmV;$1UmaiNk%w1VI=?z0QVUHbaZs`^z?v$fPa5~xWB;i^!4fP?{#%`=Rbped+G*#>&g`^77{E?7qas z=Irg}?Ck39?{jl=c9WL2zQ4Z2#@poPe0+R}q^H~E=JE6Ng`A&zdwYJJptZfegPfm% zl9RW`$%34pilwK$($u}n&3BZTewdq#rKoa~mu`%Ya*vU%$H|eAk#UWX!^p_KzP@>s zn83imfq{XHjEuv`$%~7N#@5(>nVgT0k9C%sg`%dXr>B{ysAYtQV|jafn47Aqs&|2c zqP)MSy1R&~thd0yySuxDrKg9Zrt$Id@bmL(bwJH@bmPx!^M!7my4sPyu-x2!o!B6ri!Jgyu-tap`*>)+=`&0 z%-h_DhlhZgorHvhf}5Vd#m0)JsL;^Ryv)s@yS{jsoSe72ugA*k@9=`4qu1i%iHV87 z(9+f3-+Y6EfRmPhm6*xY)@6Kt`uh69!os(|!KS*sdX<=CfrOB-w9VYzjHao+($sR5 zn2e>Tfup8qhKl(3_}t^cdNw6!P3;s)z*-sroGYA z$PEC2ui03`qn000R805fD*1ff9#3LgL{Ja7P?!-o(VDxCO% z!UARj1-800MGF=@Cr&6BsUU#KlK~2-RN01sO9ll3;Q9hV;IjnL))~;Cp+g4_92^LB zKn;OWqxCK*HDJJl2d0sH-O&RrgN|KtEQxEEFJG@oUEy^do9|865hF~PAe+zCDmv&E z{Kzs$2BS)}x?&^J)k{|l7$OMn`hbw2QG_3Km8Pkdy&w(TebPk_4cmOd*xDi2RmiPU zG1&4L<|2=hSPgc3%LUF%S3rEahUvOtg9s6`x+cm222$4wz`MPQQs>Me3ZZ7Gs3N7S zCsAFwTzI1+~&DsaP!B*~0}gdbLvP{J56C^Er@r2J9C9)Y0X3^6rj z;KTu&ka5fnI1~c{2tI%^O%pT}agHJKAY#o6-muUGFUY84PBxh=^8_UsWzd5WvLujz jHY8YJ!2nbWU?mV%T1n*q3oKv(2`QwIz!phl6c7MAH^s1G diff --git a/www/extras/toolbar/metal/import.gif b/www/extras/toolbar/metal/import.gif deleted file mode 100644 index fb5ee0cb5477157d042af15ae2ba956ee33a7843..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmZ?wbhEHb>BJ?4MZGH?ggwWA(<3D>iKCUA2h{i`R;xDIy*a8?>lhx?78Ipg1rY0ZrQzO{kH8b z3zyc`)-GMTv}Nx6J^S}BTefWX{{7|Ud)q?&>3wG_D zyM5Q@BggXkCLOtODXYD!aKhxG+PZDK_q=)cuDQ9ny0&ihfx`vWwGA_7FIu!HJw5&B z&!3*2o(yCG#h)yU3=BC8Iw0MkIALJl)R5DZ6~dTmYRj9|)WeacZp6$S87RTg!^p>J zASx&*n!?P-n3Kg8WUiaLdQC7}7LS;RPJAvClY>dFzZg%pxNNRaE@yPiVM+1qZ2nxE zHMtsLxl;V6xe{}=b45g~rE>+ivRPc>LJf1Ry!})ky0UP~MMb1vSgq{K&2EvP<>k)u zM8N3TDRyD@8zM749`fK)i_IzUXij5V%&8L7!Z7hkJBML_1m~xV2^6(f_HcE}sBdhUJAd`Q z15wrW&9mk%UAnY#+Kht!Nwu}LMYVNlMaA_qW*1b~W;ZlXUbN)O&07-|E-sxgxp2bd z3sR^Hgy zxM}Ck%}0(sdHy21sim{CGp43t*7{Aa-@diBuw1rm*}D%PrY&4_?$YJFzDec%lL{wJ zNzO0mTC`;U=`-7p9INc^%_*;V`1o;tOM6l8g!bOPr8{>!IXZ3Fwr$a(Md|73>(;IN z`ST|O=|J%(3nK$V9)k`@D=1DF*w;7YHD#MJIRz=PW;gY4S!YEtFz6aNbM-I@_=QIB z^QX8l2r%Vkvpebs@PKxMrrCX>oJpFblKjv5ASX*|7*S=j3oI zsOMj~>fy$DUR+1&N^b5I2Y2xtQQ7D~k^K8tQe%Tfc_b9QU%kmsGPK|kinEuyy6U5W yvs05ayHD5!2j<6|>{_-yE(s!uK9hvZ_vJh=TEwaBD9@$A>2T?ws9PfggEavE)A0WQ diff --git a/www/extras/toolbar/metal/manage.gif b/www/extras/toolbar/metal/manage.gif deleted file mode 100644 index 25bfb67af837c4e0c4b8a25e8f23f0120841075d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1322 zcmV+_1=adTNk%w1VKe{?0QUp{e}8}I?(g#S^>lP}`T6&g`_4SCPr{?VKa&mHWb8~i+mU(%3adC0lF)04?CgAee80uU zzQo0TouKja^w{F#i>9fIsjYySoq?mK%i7$ErKf_Rqru0>f}Edxo1enS$iT+NzsAPa z;p6D-?s=4$dzhPZk(BE0@430T=IiW)goJvTp7QeYdzPBEy}oyMcY>j#fuEv&n45^D zsD+}YgrTH?fq{UVoqwI7fSR3qdwYSKo_czEf}5U_l9K4|?zg|dhoh#0nw`4A!i}u2 zhNGr`nVkCi`g)a^#>&csoS&1RqLitvbbf%w&(NH=yN;``xxm4SqNZz#jf0(@i>0Wu zyS;pol#{Npma?^`y1jRrp2EVyzP`Six4LqZmv@wyd5n&~#l`3B?2nI+nzFNus;-We zmGkxWjHapEUilCyu z(9*li&b-Xc@AC70kC45@#ns>7gPfn3n3!^pk&U6Gw!XjH<>tJ@!@Rt_t;NT zpS!`rZj6uD;^MTuy<>TMs=vX4nw+`8!eD)Xk*u($yuZ7`!+e8-ftsDm)YZ1Uy=ruI zeU6ZLn4F5GsBMjq@9*!Bu(YbGs_g9Sx4^-4et(IntijUMy~MTscpS{Dx+T`S8frRk$^U=}KtHH$U@9^^U^nieXc6N4JT3P@A0000000000 z0000000000A^8LW000C4EC2ui05kv$000R800|KImW~1i2oVM-OppMd!-o(R4qyne zB0h!^BSe5eLBR}x0!PgPhDlx{4;~JvJYcV-OM3!hrd;{bWz3s%8t7~wz#g1? zkjKpe8ZQG#jQ9Y6Kn)BmGHK$9;ue=! zTn-%Kf{VKW@4L8~qUQ@oy?QEbJh?4^-A;fXP1y3wtfHWhh zVnI6=;S|MP%z)G}$)uA|maq;8T+*QnAzf(Ggcw*PA&@T#Jc5iDsCW{C1QNV31r9Lu5QPXt z2!VtVD7+cxoORxr=bk7O!^sz>RIyDfiB!WzFq42p02*)TFu?>zXrO=s0CalKr$K!B gDFB*s>M5wA-qR@nkSL%*5l2i1phFGjfD{k_J2TMM`~Uy| diff --git a/www/extras/toolbar/metal/moveBottom.gif b/www/extras/toolbar/metal/moveBottom.gif deleted file mode 100644 index b01ba65b57b4ccd7dea49a43c8fec5ec4703758f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmZ?wbhEHbyjEr_J11@0wsh&zg8oSjGiLX$-Vjw?-@klS>%yhc<<%{Vmt~ig zcPv;`U0e6&-Mi8WlZ$#M96fukt)pY^_FbzEA8TxEJaqi{x^3I@`X;U4wr$hSokbI; z9=&?Kf90B8`}P%d_SDaqT{&$=T2b+~-FuSr3!c7uwSL?7qT0HKg^MSwSQS&#ux`ti z*KgkzPMlI+UcPka?#YXmELyZEJw5&B&!3*2o(y<_;!hSv28I#_9gr$eoG`F&YA9(c zl4Fq8wc#vk>f!K{P-kLN3=ih$Vc?0*<>KSx@@L{&-go=gTBfVFJ z+O4wB%NFMMa*12z5W6bMSdyPD)k-F!CQ!BMOt(fd&xOnbEL~C-tFme|l#&@1GpZeE b$!t0*I|dwY9rhl-%Oy?=jy$=26_kCA+Qe50eIdXAB5hl;4Yzpl2o zny<2VkCK+JvWlXl#M0E_=I2{?dz7oKsg#!z zm}75nTzr6mfq{gbpS{n~jb=n8eS~u)@S}iHwAyrLo1wagmgep`)C) zy6o=mmZ78T?d_ShxN?1d@TLJ=3J5Uge00mri1_uWQa{>hbeR>0Qd3X*z zL=GWmNCSEe6=-BM2^16wYiV&64SN_21bloF62=4!7<+pWYHr3bOU5id5zY@cC^{R) zVMioa4|@n;Ei!f`#$s|+a6kwPB41BQLnlQuZys4T3oiV~U_yftCNDsw7%_&*g+3O{ q)L5Z{jg>MSu*8_aXabKmTB3Xq(&0`JMuM6s=n|l%1tp9E0RTIf7B0~M diff --git a/www/extras/toolbar/metal/moveLeft.gif b/www/extras/toolbar/metal/moveLeft.gif deleted file mode 100644 index 629fa57cb3d818149ba1c2bf03684bb148955b60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmV-i0;By$Nk%w1VGaNe0OoxFczAevdV0~-)@f;JVu6ICqoaR+e~+iCfsc`Se0=Wk z@OgQ8ueZ4G@$rS6o^o<>e0+T5=;?cVdwPzMZHJ1-)YWluad&)tm$9^gfq{K}eROnm zmanpntFX}2)p3!OkEyJHp`*^y(|?$ovc$%asH%*suBO1lnYFlgkCI(^d~A1kowvHM zwzj>%!Ek$haF3F=#KxSrx~smxagdYL+1hoGlf})>V{dSYrmDin$AFldrMbIYe1LF? zjCq%smbJOD#m9q#gK~|KrKP32zrV!K(Yn6BilU^2p`~hviiDk?iK3;lxw%_+d$YQ` zu)@Ss&yuW#tm~M`eyHH(L>4 zWD!_3X%~7A2x~EC6?}XZMsryR4|@|12N*26W*7$!6MK6UUUj-!3~nY#KNQXcGo(lEO*`MuLbe$P=I?gg1-=0RTJg(F)6GZHJ1-)YWNe zX>xLMVu6IQxVdq0ad~-pd3=0)e0+tRo};6qe}8|Er>c8s+v$U(g!<4J7iK3;ezQCow!fbbVjH|C} zc6VlSbBLg#sJy?7tFDltqo%;amZ77Bqo!PZfRm!6&eGGw(9*ib$Z?R9aF3F5eSVX) zx3IRhd6t;#?d_4Vw8_`lU3q-I&d|EPzml@Hvc$%(x47l%>x7}DmZ73_baaV{iH3-X zilU^IwYYtKeeCY;x5UPowYYbWlETNwfS{svla|EK(Q1c^gq@$U#mB|X&T@^ArKP2X zp{3;K=%%KoTX%b!ud;xco4vrnowvGfj*_LhyR*c`z0c8qn45W*nC0r~T6=$Rdwr0o zs&$Z)yT8Axva^q=tkl`sgM))`iHxG6qGxAkNl8ih`S}0<00000A^8LW004aeEC2ui z01f~S000NMfPI2`O#ygLQV)89j20X}H~;`4S5Fp<0T3cV2L%NOQveVFeR>2mUSbAH zZw4TDOayuh7&lZo34DABS~@Zq3wsw56$5Cx4FeSt7khgMKua+~K1sS^ZV1i{J6J47 zQ5(8-Bn*2BaA`GFD!MZbB^fpf4rDxbCTzM!T_agU4kmcmf&xa7A!q0yIq}8Cggy~k q%#ou;!n1MuNaR_#mKVgfWZ)0RTIsA1$o_ diff --git a/www/extras/toolbar/metal/moveTop.gif b/www/extras/toolbar/metal/moveTop.gif deleted file mode 100644 index 32bd605a9d2a1dac9048cbcb8f7a2c9a859a2fec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmZ?wbhEHb}nwrIn7jM|Mt+9V%VPRo?eSLLx zb#8mto&yJx8e86d_)u9>Q&d#cI%nRdojYr4YO4As*4Ea>R@O{dxVUiQlx547&D^?U z*Rd1Zj~rXSb?f0HM-Cl7-nnem`t3U!7A{`B@4(uvTc5mm8C6|BdCT@wH*U?@zH8dT zMa|94=Pq5&DX%zr?Rvw4MWqua7gX17-m$ZA!sJyOHf}z0Y|^G})7Ed=ylZz+ZCz3C zglP*Gw=7)RGIxH@>h&=-4HH(Zdh_nxg)3LrZQGvJ-nDwu=IHY3&P7Z6m#^wyxn}A9 zLmdkiwJctiR#bfS?77LCwia~uOkT94y0&iJmM!J|lR7&)A3b}1<>sx%#>U9=A7cE+po}T{m=TA>hPX7EX>oPDnDfbdh7bT4XRkwVeQ+y@{_U7{fVw5xZikQ`Ne5JkT zS!yXtIxus(r+CfFj+$o?EzZf7?&@J<>hbX8VLo-XX8|6<$|rgZ%{*jQC^|DLv+6Bc bk;rt+T~szwg0sl^fp^1X5fcM076xkovqTP7 diff --git a/www/extras/toolbar/metal/moveUp.gif b/www/extras/toolbar/metal/moveUp.gif deleted file mode 100644 index feecb49dda9dfce8eab3f548e5a814edf3e274eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 604 zcmV-i0;By$Nk%w1VGaNe0OorDdU|?zczDs()_RVSX=!P9e0=Wk@SV51$=275tFD)^ zw8zxde0+R)d3k$#dvbDeg`A#oadG76>3Mv7@A2_}e}8Rzyn%s%>+S8fyS#~_rFVCCueP>?p`~$=l!~IHvc$%SprVnnw56q` zW^!{|cYCk5xQU60vbnjBsjOXje2}4|agdX%z{7iee#Fnwd6$@ZmY8sfjI+eXeSLje zdw;0Bzoogml&h_Tou6)wlDWRVs>H`!e1N*f$i>ahuC}+PrlxFnc;x5kaC?1~wYYzn zn{|+rmZ74Wud;)KgXQY#qN1W_XJ<)CN%{Ht000000000000000A^8LW004UcEC2ui z01f~S000NMfO~>?Jpp!8U=4VJj1F2XKLP?eH6sp;0TWb21{4$qG6E9;dw2yZYi|-D zcM?E6bOm@17%eUz3kV1cTWVJr4|xL+8VUz`dIt&`5CeI67F|gRPRMKt9b6XA8CW>T zaZ<<|CK-7IVP+`ELTJb&N@)ZUQ9)H%XE`1mMMyDL5iY>+VMNRe8!KioAtM6Hg*^;X q%sDaU#+My+Xuzq!sDc|Wa+)kDQzFC=MuMI+I0B$0gEou;0RTIiekLFQ diff --git a/www/extras/toolbar/metal/paste.gif b/www/extras/toolbar/metal/paste.gif deleted file mode 100644 index 6eff478eadba7a8b125174be28333983fdec7158..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1316 zcmV+<1>5>ZNk%w1VK4v;0QV9AlarI&<>iW{sMzA;z0uRh%FDyZ$$pQJu*b^0!o!=l zx{|N4jH<4Oqo#tPqiv0le}8|tzrgwV`GA0cbaZs-?(g#S^z!xfb#-;=?(U1Gsp#(S zadB~deSLX(d2@4f@$~fP?e21Na_a8yetv$x#>RYne0q9%dwYAo($k2fr|9nPyu-wH zla_;>p62W9jHapb^74Y5pM#yBcXxN8yS|I0r@zISZ z+vMebouG=QsOIeKw!XiJrKqjP$)>!&XoiZd#m9k~o%Hndt;Wchn3$%)#Jh=`1< zkB`XE(96`-w#LYOgM)yXop+j^ugA%+$IEnnfWpGUdzhPho}rPEk$s<}V10m9(_?viYl@A`+T4+>u#v5?a+8<8(9(65ns=0#ev_8%@9?g~#dLmu z+vDVTn4EBMaEPCxzQo3qvbNCB(9zM+@bmP)#>aAxk=f(q+T`V)y1l>A)YaeM^7Qp~ zc6P_h%UW7mA^8LW000sIEC2ui05AXy000R803}F}SBe7%5g#Zh#DJln!-o(VDx~n? zgNTO`6;>3%p@SZQ0_9`^<^~qMCr?1A1Yx12OAGvB#$0lt<^`EDY1-sx!O|=M0_S-k zG_Asm7gMGXArhi#h*uk;MqQDiYK00TMqJ%M)hbr475t==MyZPgQ3nb=GPF<9zqfA( z+`9+&A3i8h>i%1%_aC0V0idv3ga`!?cW?4wE4PN(TOmT;CVE?-z}s+d{b|-b#$RU5 zpEoN~M&?qRIvljDx{@l(B)v+M^ff@BuD%qw-x}ysyKV|^$*y4v7K;RjYy!mTQqb)! z3l@VId3pN<-rE~oc9babwi5yb*LPU|d0V0$4<4M&wnw>{{^LIO3^0AN0J^uzL=bxN=_jCq27!(k>y!bK1VB_mg9jd*U_u8SK%nUaoJPYbrd3>e0yNIBokEyJ? z!oq~1rErguQc_ZKeSTeDUXY=qwzs#2h=`M-q>!kpu)e@#W@cP`fVafPvBk%Mfq})% z&ZxYD=aC?30?d?oVOnrTQYj$_;@bJRN$D*R5XJ=UjP6ndNmY`0uy3&G)Yf+YXB1hetQLHK5<=r zZ9{KhAO(936*fBreSJz~7(z1@4SWX=235HPKoSNI2Yh@ASS|~>77_~_9tzG7TqQ=- z8FFJ95PTOOS6*dMeKKq$TSqz<3??ruZX&rYJR@c)39f4eSPWf?s9T+h@_|L?(gR7?1P$} z=Irf%e}8;@e0P(U=Irc*oS*XY^1sE#@$>X}czDCe$&ZhZ=2t+AD~wu7CYf0&zm zn45W+oV?7t4NqNcXJzSrX7d3kw_uCj!sr=_{NcbcAxrKrHbz=@ENh@Yag zy}f;(q_4ZZsJp&^nVhu3#F&_vbB~e1$H_ zv9r6(&a}L}Y>JJ&!^GCy-LuQhrKP33!o%_L@x{r?@bmM=%F275p@^lZfuEwb#>ngM z@U6wk(%s&^zP^%@l7F3`gPoqp(9oK)v+eKj!pF#hnw)@{opXDA!^p^ho1KoQs&syU z+vVnlr>W=c?7h9c+~noa(b1N&wTzvgbCZ|S($b2isQLN%c6N4JT3P@A0000000000 z0000000000A^8LW001HYEC2ui03`qn000R807Zz1cjUo?3ljn;G++Rq!-o(VDhx1T z!i5JFcnB2u?oE?j)Eto@p`fG!04P%eAi$EPrUoz@5C9PF%OQdFJdAO7K!XMlAUJSH zKs1341W1vhu)y@dfeaa(Y8&Uw*BKE*Xz)?R4M@Ixdaiu6^Ht8*v-u)@W%pIlS9rzX zjDpZDKpV%t|AUx$57^=eD9c^&Z05rRnz zDk@pN8WW`A>!8p1qI|+0jgUAgn_Ts#I?*SNpH5t?i6OEq%#(JetOThMp+2oj1yW2Z zz@L8-JZfw(#W{=AGK&$dv_TIjE>M!oH;`a+3m~Obp-UqeU~o+l_E6v<3|%l%2pAi1 zvW_