Initial commit

This commit is contained in:
Isaac Parenteau committed 2018-07-07 20:43:51 -05:00
commit 880e39de2e
511 files changed
+38363

No files matched your search

@@ -0,0 +1,63 @@
<md-card>
<md-card-content>
<div layout="row" flex="100">
<md-toolbar class="md-padding md-portal-grey">
<div layout="row" layout-align="center center" flex="100">
<span><strong>Schedule</strong></span>
<span flex></span>
<md-button class="md-icon-button" ng-click="addSchedule()">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">New Schedule</md-tooltip>
<md-icon class="md-icon-default-color">note_add</md-icon>
</md-button>
</div>
</md-toolbar>
</div>
<div layout="row" flex="100">
<md-list flex>
<md-list-item ng-repeat="sched in script.schedule" class="secondary-button-padding" ng-if="sched.frequency !== 'NOW' && sched.frequency !== 'TRIGGERED'">
<div layout="row" flex="100" style="background: {{$index % 2 === 0 ? 'white' : '#DCDCDC'}}; padding-left:5px; padding-right:5px;">
<md-input-container flex>
<label>Frequency</label>
<md-select ng-model="sched.frequency" required>
<md-option ng-repeat="sched in schedFreq" ng-value="sched.name" ng-if="sched.name !== 'NOW' && sched.name !== 'TRIGGERED'">{{sched.value}}</md-option>
</md-select>
</md-input-container>
<md-input-container flex>
<label >Start Date/Time</label>
<input mdc-datetime-picker="" date="true" time="true" type="text" id="startdatetime"
show-todays-date="" minutes="true" min-date="date" show-icon="true" format='MMM D, YYYY h:mm:ss A'
ng-model="sched.startDatetime" class=" dtp-no-msclear dtp-input">
</md-input-container>
<md-input-container flex ng-if="sched.frequency !== 'SPECIFIC'" >
<label style="padding-left: 35px;">End Date/Time</label>
<input mdc-datetime-picker="" date="true" time="true" type="text" id="enddatetime"
show-todays-date="" minutes="true" min-date="date" show-icon="true" format='MMM D, YYYY h:mm:ss A'
ng-model="sched.endDatetime" class=" dtp-no-msclear dtp-input md-input">
</md-input-container>
<md-input-container ng-if="sched.frequency !== 'SPECIFIC'">
<label>Number of Executions</label>
<input type="number" min="0" ng-model="sched.maxExecutions"/>
</md-input-container>
<div layout="row" layout-align="end center" flex>
<md-button class="md-icon-button" ng-click="moveUp($index, script.schedule)" ng-if="($index > 0)">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Move Up</md-tooltip>
<md-icon>arrow_upward</md-icon>
</md-button>
<md-button class="md-icon-button" ng-if="($index < script.schedule.length-1) &&
(script.schedule[$index + 1] !== undefined &&
script.schedule[$index + 1].frequency != 'NOW' &&
script.schedule[$index + 1].frequency != 'TRIGGERED')" ng-click="moveDown($index, script.schedule)">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Move Down</md-tooltip>
<md-icon>arrow_downward</md-icon>
</md-button>
<md-button class="md-icon-button" ng-click="delete($index,script.schedule)" >
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Remove Parameter</md-tooltip>
<md-icon>delete</md-icon>
</md-button>
</div>
</div>
</md-list-item>
</md-list>
</div>
</md-card-content>
</md-card>
@@ -0,0 +1,9 @@
<div layout-gt-xs="row">
<md-input-container class="md-block" flex-gt-xs>
<label>Command</label>
<input ng-model="script.command" name="scm" id="scm" required>
<div ng-messages="scriptForm.scm.$error" ng-show="scriptForm.scm.$invalid && submitted || scriptForm.scm.$touched">
<div ng-message="required">Script command is required</div>
</div>
</md-input-container>
</div>
@@ -0,0 +1,27 @@
<div layout-gt-xs="row">
<md-input-container class="md-block" flex-gt-xs>
<label><strong>Credentials</strong></label>
<md-select ng-model="script.remote.scriptCredentials" required name="creds" id="creds" ng-model-options="{trackBy: '$value.uid'}">
<md-option ng-repeat="cred in credentials" ng-value="cred">{{displayKey(cred)}}</md-option>
</md-select>
<div ng-messages="scriptForm.creds.$error" ng-show="scriptForm.creds.$invalid && submitted || scriptForm.creds.$touched">
<div ng-message="required">Credentials are required</div>
</div>
</md-input-container>
</div>
<div layout-gt-xs="row">
<md-input-container class="md-block" flex-gt-xs>
<label><strong>SSH URL</strong></label>
<input ng-model="script.remote.url" name="url" id="url" required>
<div ng-messages="scriptForm.url.$error" ng-show="scriptForm.url.$invalid && submitted || scriptForm.url.$touched">
<div ng-message="required">SSH URL is required</div>
</div>
</md-input-container>
<md-input-container class="md-block" flex-gt-xs>
<label><strong>SSH Port</strong></label>
<input ng-model="script.remote.port" type="number" min="0" max="65535" name="port" id="port" required>
<div ng-messages="scriptForm.port.$error" ng-show="scriptForm.port.$invalid && submitted || scriptForm.port.$touched">
<div ng-message="required">SSH URL is required</div>
</div>
</md-input-container>
</div>
@@ -0,0 +1,78 @@
<div layout-gt-xs="row">
<md-checkbox ng-model="model.fromLocal" ng-change="fromLocalChange()" class="md-primary">
From Local
</md-checkbox>
</div>
<div layout-gt-xs="row" ng-if="!model.fromLocal">
<md-input-container class="md-block" flex-gt-xs>
<label><strong>From Host</strong></label>
<input ng-model="script.scp.fromHost" name="fromHost" id="fromHost" required>
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="bottom">Host name of the machine script is copying from. For local type 'LOCAL'</md-tooltip>
<div ng-messages="scriptForm.fromHost.$error" ng-show="scriptForm.fromHost.$invalid && submitted || scriptForm.fromHost.$touched">
<div ng-message="required">From host address is required</div>
</div>
</md-input-container>
<md-input-container class="md-block" flex-gt-xs>
<label><strong>From Port</strong></label>
<input ng-model="script.scp.fromPort" type="number" min="0" max="65535" name="fromPort" id="fromPort" required>
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="bottom">Host port of the machine script is copying from. For local type '0'</md-tooltip>
<div ng-messages="scriptForm.fromPort.$error" ng-show="scriptForm.fromPort.$invalid && submitted || scriptForm.fromPort.$touched">
<div ng-message="required">From Port is required</div>
</div>
</md-input-container>
</div>
<div layout-gt-xs="row" ng-if="!model.fromLocal">
<md-input-container class="md-block" flex-gt-xs>
<label><strong>From Credentials</strong></label>
<md-select ng-model="script.scp.fromCredentials" required name="fromCredentials" id="fromCredentials" ng-model-options="{trackBy: '$value.uid'}">
<md-option ng-repeat="cred in credentials" ng-value="cred">{{displayKey(cred)}}</md-option>
</md-select>
<div ng-messages="scriptForm.fromCredentials.$error" ng-show="scriptForm.fromCredentials.$invalid && submitted || scriptForm.fromCredentials.$touched">
<div ng-message="required">From credentials are required</div>
</div>
</md-input-container>
</div>
<div layout-gt-xs="row">
<md-checkbox ng-model="model.toLocal" ng-change="toLocalChange()" class="md-primary">
To Local
</md-checkbox>
</div>
<div layout-gt-xs="row" ng-if="!model.toLocal">
<md-input-container class="md-block" flex-gt-xs>
<label><strong>To Host</strong></label>
<input ng-model="script.scp.toHost" name="toHost" id="toHost" required>
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="bottom">Host name of the machine script is copying to. For local type 'LOCAL'</md-tooltip>
<div ng-messages="scriptForm.toHost.$error" ng-show="scriptForm.toHost.$invalid && submitted || scriptForm.toHost.$touched">
<div ng-message="required">To host address is required</div>
</div>
</md-input-container>
<md-input-container class="md-block" flex-gt-xs>
<label><strong>SSH Port</strong></label>
<input ng-model="script.scp.toPort" type="number" min="0" max="65535" name="toPort" id="toPort" required>
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="bottom">Host port of the machine script is copying to. For local type '0'</md-tooltip>
<div ng-messages="scriptForm.toPort.$error" ng-show="scriptForm.toPort.$invalid && submitted || scriptForm.toPort.$touched">
<div ng-message="required">To Port is required</div>
</div>
</md-input-container>
</div>
<div layout-gt-xs="row" ng-if="!model.toLocal">
<md-input-container class="md-block" flex-gt-xs>
<label><strong>To Credentials</strong></label>
<md-select ng-model="script.scp.toCredentials" required name="toCredentials" id="toCredentials" ng-model-options="{trackBy: '$value.uid'}">
<md-option ng-repeat="cred in credentials" ng-value="cred">{{displayKey(cred)}}</md-option>
</md-select>
<div ng-messages="scriptForm.toCredentials.$error" ng-show="scriptForm.toCredentials.$invalid && submitted || scriptForm.toCredentials.$touched">
<div ng-message="required">From credentials are required</div>
</div>
</md-input-container>
</div>
<div layout-gt-xs="row">
<md-input-container class="md-block" flex-gt-xs>
<label><strong>File name or regex for file</strong></label>
<input ng-model="script.scp.dataRegex" name="dataRegex" id="dataRegex" required>
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="bottom">File name or regular expression for file to send'</md-tooltip>
<div ng-messages="scriptForm.dataRegex.$error" ng-show="scriptForm.dataRegex.$invalid && submitted || scriptForm.dataRegex.$touched">
<div ng-message="required">File name or regular expression required</div>
</div>
</md-input-container>
</div>
@@ -0,0 +1,55 @@
<md-card>
<md-card-content>
<div layout="row" flex="100">
<md-toolbar class="md-padding md-portal-grey">
<div layout="row" layout-align="center center" flex="100">
<span><strong>Script</strong></span>
<span flex></span>
</div>
</md-toolbar>
</div>
<div layout-gt-xs="row">
<md-input-container class="md-block" flex-gt-xs>
<label><strong>Script Name</strong></label>
<input ng-model="script.name" name="name" id="name" required>
<div ng-messages="scriptForm.name.$error" ng-show="scriptForm.name.$invalid && submitted || scriptForm.name.$touched">
<div ng-message="required">Name is required</div>
</div>
</md-input-container>
</div>
<md-input-container class="md-block" flex-gt-xs>
<label><strong>Script Type</strong></label>
<md-select ng-model="script.scriptType" required name="scriptType" id="scriptType">
<md-option ng-repeat="st in scriptTypes" ng-value="st.name">{{st.value}}</md-option>
</md-select>
<div ng-messages="scriptForm.scriptType.$error" ng-show="scriptForm.scriptType.$invalid && submitted || scriptForm.scriptType.$touched">
<div ng-message="required">Script type is required</div>
</div>
</md-input-container>
<div layout-gt-xs="column" ng-switch="script.scriptType">
<div ng-switch-when="LOCAL">
<div ng-include src ="'common/partials/add-script/add-script-left-local.html'" flex></div>
</div>
<div ng-switch-when="REMOTE">
<div ng-include src ="'common/partials/add-script/add-script-left-remote.html'" flex></div>
</div>
<div ng-switch-when="SCP">
<div ng-include src ="'common/partials/add-script/add-script-left-scp.html'" flex></div>
</div>
</div>
<div layout-gt-xs="row">
<md-input-container class="md-block" flex-gt-xs>
<label>Base Directory</label>
<input ng-model="script.baseDirectory" name="bd" id="bd">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="bottom">Base directory to find files in</md-tooltip>
</md-input-container>
</div>
<div layout-gt-xs="row">
<md-input-container class="md-block" flex-gt-xs>
<label>Output Directory</label>
<input ng-model="script.outputDirectory" name="od" id="od">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Directory to send/save the files to</md-tooltip>
</md-input-container>
</div>
</md-card-content>
</md-card>
@@ -0,0 +1,60 @@
<div layout="row" flex="100">
<md-toolbar class="md-padding md-portal-grey">
<div layout="row" layout-align="center center" flex="100">
<span><strong>Script Chain</strong></span>
<span flex></span>
<md-button class="md-icon-button" ng-click="addScriptChain()">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">New Script Chain</md-tooltip>
<md-icon class="md-icon-default-color">note_add</md-icon>
</md-button>
</div>
</md-toolbar>
</div>
<div layout="row" flex="100">
<md-list flex>
<md-list-item ng-repeat="chain in script.scriptChain" class="secondary-button-padding">
<div layout="row" flex="100" style="background: {{$index % 2 === 0 ? 'white' : '#DCDCDC'}}; padding-left:5px; padding-right:5px;">
<div layout="row" flex>
<md-input-container class="md-block" flex>
<label>Scripts</label>
<md-select ng-model="chain.childScript" required name="chain_{{$index}}" id="chain_{{$index}}" ng-model-options="{trackBy: '$value'}" flex>
<md-option ng-repeat="s in availScripts" ng-value="s.id" ng-if="s.name !== script.name">{{s.name}}</md-option>
</md-select>
<div ng-messages="scriptForm['chain_' + $index].$error" ng-show="scriptForm['chain_' + $index].$invalid && submitted || scriptForm['chain_' + $index].$touched">
<div ng-message="required">Script Required</div>
</div>
</md-input-container>
<md-input-container flex>
<label>Exit Status</label>
<input type="number" ng-model="chain.exitStatus" class="answerInput" required name="exitStatus_{{$index}}" id="exitStatus_{{$index}}"/>
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Exit status of the parent script to execute this script</md-tooltip>
<div ng-messages="scriptForm['exitStatus_' + $index].$error" ng-show="scriptForm['exitStatus_' + $index].$invalid && submitted || scriptForm['exitStatus_' + $index].$touched">
<div ng-message="required">Exit Status is Required</div>
</div>
</md-input-container>
<md-input-container flex>
<label>Exec After N Mins</label>
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">(Optional) How many minutes after the parent script ends should this script execute</md-tooltip>
<input type="number" ng-model="chain.executeAfterMin" class="answerInput"/>
</md-input-container>
</div>
<div layout="column" flex="25">
<div layout="row" layout-align="end center" flex>
<md-button class="md-icon-button" ng-click="moveUp($index, script.scriptChain" ng-if="($index > 0)">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Move Up</md-tooltip>
<md-icon>arrow_upward</md-icon>
</md-button>
<md-button class="md-icon-button" ng-if="($index < script.scriptChain.length-1)" ng-click="moveDown($index, script.scriptChain)">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Move Down</md-tooltip>
<md-icon>arrow_downward</md-icon>
</md-button>
<md-button class="md-icon-button" ng-click="delete($index, script.scriptChain)" >
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Remove Parameter</md-tooltip>
<md-icon>delete</md-icon>
</md-button>
</div>
</div>
</div>
</md-list-item>
</md-list>
</div>
@@ -0,0 +1,89 @@
<div layout="row" flex="100">
<md-toolbar class="md-padding md-portal-grey">
<div layout="row" layout-align="center center" flex="100">
<span><strong>Script Email</strong></span>
<span flex></span>
<md-button class="md-icon-button" ng-click="addScriptEmail()">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">New Script Email</md-tooltip>
<md-icon class="md-icon-default-color">note_add</md-icon>
</md-button>
</div>
</md-toolbar>
</div>
<div layout="column" flex="100">
<div layout="row" ng-if="model.addEmail" flex>
<div layout="row" layout-align="start center" flex>
<md-input-container class="md-block" flex>
<label>Email Template</label>
<md-select ng-model="model.email" required name="email_{{$index}}" id="email_{{$index}}" flex>
<md-option ng-repeat="tmpl in emails" ng-value="tmpl">{{tmpl.emailName}}</md-option>
</md-select>
<div ng-messages="scriptForm['email_' + $index].$error" ng-show="scriptForm['email_' + $index].$invalid && submitted || scriptForm['email_' + $index].$touched">
<div ng-message="required">Email Template Required</div>
</div>
</md-input-container>
<md-button class="md-icon-button" ng-click="addRecipient(model)">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Add Recipient</md-tooltip>
<md-icon>add</md-icon>
</md-button>
</div>
<md-list flex>
<md-list-item ng-repeat="recip in model.recipients track by $index">
<div layout="row" layout-align="start start" flex>
<md-input-container class="md-block" flex>
<label>Recipient</label>
<md-select ng-model="recip" required name="recip_{{$index}}_{{$parent.$index}}" id="recip_{{$index}}_{{$parent.$index}}" ng-change="userUpdate(model, recip, $index)" flex>
<md-option ng-repeat="u in users track by $index" ng-value="u">{{u.username}}</md-option>
</md-select>
<div ng-messages="scriptForm['recip_' + $index + '_' + $parent.$index].$error"
ng-show="scriptForm['recip_' + $index + '_' + $parent.$index].$invalid && submitted || scriptForm['recip_' + $index + '_' + $parent.$index].$touched">
<div ng-message="required">Recipient Required</div>
</div>
</md-input-container>
</div>
</md-list-item>
</md-list>
<div layout="column" flex="25">
<div layout="row" layout-align="end center" flex>
<md-button class="md-icon-button" ng-click="confirmTemplate()" >
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Confirm Email Template</md-tooltip>
<md-icon>check</md-icon>
</md-button>
<md-button class="md-icon-button" ng-click="removeTmpl()" >
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Remove Email Template</md-tooltip>
<md-icon>delete</md-icon>
</md-button>
</div>
</div>
</div>
<md-list flex>
<md-list-item ng-repeat="email in script.scriptEmails track by $index" class="secondary-button-padding">
<div layout="row" flex="100" style="background: {{$index % 2 === 0 ? 'white' : '#DCDCDC'}}; padding-left:5px; padding-right:5px;">
<div layout="row" layout-align="start center" flex>
<md-input-container class="md-block" flex>
<label>Email Template</label>
<input ng-value="email.emailName" ng-disabled="true" style="color: rgba(0,0,0,1) !important; background: none !important;"/>
</md-input-container>
</div>
<md-list flex>
<md-list-item ng-repeat="recip in email.recipients track by $index">
<div layout="row" layout-align="start start" flex>
<md-input-container class="md-block" flex>
<label>Recipient</label>
<input ng-value="recip.username" ng-disabled="true" style="color: rgba(0,0,0,1) !important; background: none !important;"/>
</md-input-container>
</div>
</md-list-item>
</md-list>
<div layout="column" flex="25">
<div layout="row" layout-align="end center" flex>
<md-button class="md-icon-button" ng-click="delete($index, script.scriptEmails)" >
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Remove Email Template</md-tooltip>
<md-icon>delete</md-icon>
</md-button>
</div>
</div>
</div>
</md-list-item>
</md-list>
</div>
@@ -0,0 +1,47 @@
<div layout="row" flex="100">
<md-toolbar class="md-padding md-portal-grey">
<div layout="row" layout-align="center center" flex="100">
<span><strong>Script Environment Variables</strong></span>
<span flex></span>
<md-button class="md-icon-button" ng-click="addEnvVar()">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">New Script Environment Variable</md-tooltip>
<md-icon class="md-icon-default-color">note_add</md-icon>
</md-button>
</div>
</md-toolbar>
</div>
<div layout="row" flex="100">
<md-list flex>
<md-list-item ng-repeat="param in script.scriptVariables" class="secondary-button-padding">
<div layout="row" flex="100" style="background: {{$index % 2 === 0 ? 'white' : '#DCDCDC'}}; padding-left:5px; padding-right:5px;">
<div layout="row" flex>
<md-input-container flex>
<label>Variable Name</label>
<input type="text" ng-model="param.name" class="answerInput"/>
</md-input-container>
<span flex="5"></span>
<md-input-container flex>
<label>Variable Value</label>
<input type="text" ng-model="param.value" class="answerInput"/>
</md-input-container>
</div>
<div layout="column" flex="25">
<div layout="row" layout-align="end center" flex>
<md-button class="md-icon-button" ng-click="moveUp($index, script.scriptVariables)" ng-if="($index > 0)">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Move Up</md-tooltip>
<md-icon>arrow_upward</md-icon>
</md-button>
<md-button class="md-icon-button" ng-if="($index < script.scriptVariables.length-1)" ng-click="moveDown($index, script.scriptVariables)">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Move Down</md-tooltip>
<md-icon>arrow_downward</md-icon>
</md-button>
<md-button class="md-icon-button" ng-click="delete($index, script.scriptVariables)" >
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Remove Parameter</md-tooltip>
<md-icon>delete</md-icon>
</md-button>
</div>
</div>
</div>
</md-list-item>
</md-list>
</div>
@@ -0,0 +1,41 @@
<div layout="row" flex="100">
<md-toolbar class="md-padding md-portal-grey">
<div layout="row" layout-align="center center" flex="100">
<span><strong>{{script.scriptType !== 'LOCAL' ? 'Commands' : 'Parameters'}}</strong></span>
<span flex></span>
<md-button class="md-icon-button" ng-click="addParameter()">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">{{script.scriptType !== 'LOCAL' ? 'New Command' : 'New Parameter'}}</md-tooltip>
<md-icon class="md-icon-default-color">note_add</md-icon>
</md-button>
</div>
</md-toolbar>
</div>
<div layout="row" flex="100">
<md-list flex>
<md-list-item ng-repeat="param in script.parameters" class="secondary-button-padding">
<div layout="row" flex="100" style="background: {{$index % 2 === 0 ? 'white' : '#DCDCDC'}}; padding-left:5px; padding-right:5px;">
<div layout="column" flex>
<md-input-container flex md-no-float>
<input type="text" ng-model="param.parameter" class="answerInput"/>
</md-input-container>
</div>
<div layout="column" flex="25">
<div layout="row" layout-align="end center" flex>
<md-button class="md-icon-button" ng-click="moveUp($index, script.parameters)" ng-if="($index > 0)">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Move Up</md-tooltip>
<md-icon>arrow_upward</md-icon>
</md-button>
<md-button class="md-icon-button" ng-if="($index < script.parameters.length-1)" ng-click="moveDown($index, script.parameters)">
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Move Down</md-tooltip>
<md-icon>arrow_downward</md-icon>
</md-button>
<md-button class="md-icon-button" ng-click="delete($index,script.parameters)" >
<md-tooltip md-delay="500" class="mediaTileToolTip" md-direction="left">Remove Parameter</md-tooltip>
<md-icon>delete</md-icon>
</md-button>
</div>
</div>
</div>
</md-list-item>
</md-list>
</div>
@@ -0,0 +1,21 @@
<md-card ng-if="script.scriptType !== 'SCP'">
<md-card-content>
<div ng-include src ="'common/partials/add-script/add-script-right-parameters.html'"flex></div>
</md-card-content>
</md-card>
<md-card>
<md-card-content>
<div ng-include src ="'common/partials/add-script/add-script-right-chain.html'" flex></div>
</md-card-content>
</md-card>
<md-card>
<md-card-content ng-if="script.scriptType !== 'SCP'">
<div ng-include src ="'common/partials/add-script/add-script-right-env-vars.html'" flex></div>
</md-card-content>
</md-card>
<md-card ng-if="model.smtpEnabled">
<md-card-content>
<div ng-include src ="'common/partials/add-script/add-script-right-email.html'" flex></div>
</md-card-content>
</md-card>
<md-card>
@@ -0,0 +1,19 @@
.add-script-even {
background-color: #f3f3f3;
}
answerInput.md-input-container.md-input {
height: 65px !important;
}
.md-parameter-toolbar {
background-color: rgb(219, 233, 240) !important;
color: black !important;
padding-left: 5px !important;
padding-right: 5px !important;
}
.md-icon-default-color {
color: grey !important;
color: rgba(0, 0, 0, 0.54) !important;
}
@@ -0,0 +1,31 @@
<md-dialog flex="95">
<form name="scriptForm" ng-submit="scriptForm.$valid && ok()">
<md-toolbar>
<div class="md-toolbar-tools md-portal">
<span>{{header}}</span>
<span flex></span>
<md-button class="md-icon-button" ng-click="cancel()">
<md-icon aria-label="Close dialog">close</md-icon>
</md-button>
</div>
</md-toolbar>
<md-dialog-content layout-padding flex>
<div layout="row" flex>
<div layout="column" flex="50" ng-include src="'common/partials/add-script/add-script-left.html'"></div>
<div layout="column" flex="50" ng-include src="'common/partials/add-script/add-script-right.html'"></div>
</div>
<div ng-include src="'common/partials/add-script/add-script-bottom.html'"></div>
<div ng-show="loadingBlock" class="loadingFade"></div>
<div class="loadingModal" ng-show="loadingBlock">
<md-progress-circular md-mode="indeterminate" md-diameter="80" class="md-hue-2"></md-progress-circular>
</div>
</md-dialog-content>
<md-dialog-actions layout="row" class="modal-footer">
<div class="text-danger">{{error}}</div>
<md-button id="okButton" type="submit" class="md-raised md-primary" >OK</md-button>
<md-button id="cancelButton" class="md-raised md-warn" ng-click="cancel()">Cancel</md-button>
</md-dialog-actions>
</form>
</md-dialog>
@@ -0,0 +1,218 @@
(function () {
'use strict';
/**
* MODULE DESCRIPTION:
*
* TODO: Write description here.
*/
angular.module('portal.common.partials.addScript', ['ui.router']).controller('AddScriptCtrl', addScriptCtrlController);
function addScriptCtrlController($scope, modalInstance, $state, cache, $mdDialog, scriptObjects, EmailTemplate, Account,
scriptProvider, scriptStores, credentialStores, portalUtils, systemStores, accountStores) {
$scope.trustAsHtml = portalUtils.trustAsHtml;
$scope.header = modalInstance.header;
$scope.submitted = false;
$scope.loadingBlock = false;
$scope.isNew = modalInstance.script === undefined ? true : false;
$scope.script = $scope.isNew ? new scriptObjects.Script() : new scriptObjects.Script(modalInstance.script);
$scope.model = {
fromLocal: $scope.isNew || $scope.script.scriptType !== 'SCP' ? false : $scope.script.scp.fromHost === 'LOCAL',
toLocal: $scope.isNew || $scope.script.scriptType !== 'SCP' ? false : $scope.script.scp.toHost === 'LOCAL',
addEmail : false,
recipients: []
};
$scope.valid = false;
$scope.mCache = cache.request([
new scriptStores.ScriptTypes(),
new scriptStores.ScheduleFrequencies(),
new credentialStores.Credentials(),
new scriptStores.Scripts(),
new systemStores.EmailTemplates(),
new systemStores.SMTPConfig(),
new accountStores.UserPool()
]).then(function(){
$scope.scriptTypes = $scope.mCache.scriptTypes.data.values;
$scope.schedFreq = $scope.mCache.scheduleFrequencies.data.values;
$scope.credentials = $scope.mCache.credentials.data.values;
$scope.availScripts = $scope.mCache.scripts.data.values;
$scope.users = $scope.mCache.userPool.data.values;
$scope.emails = $scope.mCache.emailTmpls.data.values;
$.each($scope.mCache.smtpConfig.data.values, function(key, value){
if (value.name === 'smtp.enabled') {
$scope.model.smtpEnabled = value.value === 'true' || value.value === true;
return;
}
});
});
$scope.fromLocalChange = function() {
if ($scope.model.fromLocal) {
$scope.script.scp.fromHost = 'LOCAL';
$scope.script.scp.fromPort = 0;
$scope.script.scp.fromCredentials = $scope.credentials[0];
} else {
$scope.script.scp.fromHost = undefined;
$scope.script.scp.fromPort = undefined;
$scope.script.scp.fromCredentials = undefined;
}
};
$scope.toLocalChange = function() {
if ($scope.model.toLocal) {
$scope.script.scp.toHost = 'LOCAL';
$scope.script.scp.toPort = 0;
$scope.script.scp.toCredentials = $scope.credentials[0];
} else {
$scope.script.scp.toHost = undefined;
$scope.script.scp.toPort = undefined;
$scope.script.scp.toCredentials = undefined;
}
};
/**
* OK button handler
* @returns {undefined}
*/
$scope.ok = function () {
$scope.loadingBlock = true;
var status = $scope.isNew ? 'added': 'edited';
$scope.submitted = true;
$.each($scope.script.schedule, function(index, value) {
$scope.script.schedule[index].startDatetime = convertTime(value.startDatetime);
$scope.script.schedule[index].endDatetime = convertTime(value.endDatetime);
$scope.script.schedule[index].lastRun = convertTime(value.lastRun);
});
scriptProvider.addScript($scope.script).then(function(data) {
$scope.loadingBlock = false;
portalUtils.toast('Script ' + status + ' successfully', ['top', 'left'], 2000);
$mdDialog.hide();
}).catch(function(err) {
$scope.loadingBlock = false;
$scope.error = err.message;
});
};
function convertTime(value) {
if (value === null || value === undefined) {
return undefined;
}
var dte;
if(moment.isMoment(value)) {
dte = value.unix();
} else if ($.isNumeric(value)) {
dte = value;
} else if (typeof value.getTime === 'function'){
dte = value.getTime();
} else {
//When adding a new file the return date comes back like this format Nov 2, 2017 10:53:19 AM
//We need to parse it back to a moment object to parse it to the correct format
dte = moment(value, 'MMM D, YYY h:mm:ss A').unix();
}
return dte;
}
$scope.displayKey = function(cred) {
if (cred === undefined) {
return '';
}
return cred.name + (cred.credentialType === 'SSH' ? ' (SSH Key)' : ' (Username/Password)');
};
$scope.addParameter = function() {
var param = new scriptObjects.ScriptParameter();
$scope.script.parameters.push(param);
};
$scope.addSchedule = function() {
var sched = new scriptObjects.ScriptSchedule();
$scope.script.schedule.unshift(sched);
};
$scope.addScriptChain = function() {
var chain = new scriptObjects.ScriptChain();
chain.parentScript = $scope.script.id;
$scope.script.scriptChain.push(chain);
};
$scope.addEnvVar = function() {
var env = new scriptObjects.ScriptEnvironmentVariable();
$scope.script.scriptVariables.push(env);
};
$scope.addScriptEmail = function() {
$scope.model.addEmail = true;
};
$scope.removeTmpl = function() {
$scope.model.email = undefined;
$scope.model.recipients = [];
$scope.model.addEmail = false;
};
$scope.confirmTemplate = function() {
var email = new EmailTemplate($scope.model.email);
$.each($scope.model.recipients, function(key, value) {
email.recipients.push(new Account(value));
});
$scope.script.scriptEmails.push(email);
$scope.removeTmpl();
};
$scope.emailTmpl = function(email, index) {
$scope.script.scriptEmails[index] = email;
};
$scope.userUpdate = function(email, recip, index) {
email.recipients[index] = recip;
};
$scope.addRecipient = function(email) {
var user = new Account();
email.recipients.push(user);
};
$scope.moveUp = function(index, array) {
var ent1 = array[index];
var ent2 = array[index-1];
array[index] = ent2;
array[index-1] = ent1;
};
$scope.moveDown = function(index, array) {
var ent1 = array[index];
var ent2 = array[index+1];
array[index] = ent2;
array[index+1] = ent1;
};
$scope.delete = function (id, array) {
array.splice(id, 1);
};
/**
* Cancel button handler.
* @returns {undefined}
*/
$scope.cancel = function () {
//Dismiss the modal
$mdDialog.cancel();
};
} //end addScriptCtrlController function
})();