Skip to content

Commit 58e371b

Browse files
committed
add system settings
1 parent 0c7721d commit 58e371b

File tree

4 files changed

+115
-8
lines changed

4 files changed

+115
-8
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1212
- Creating a new branch now reports the error if uncommitted changes conflict (#624)
1313
- Fix Configure erroring out if git isn't found (#632)
1414

15+
### Added
16+
- Added saving settings as system default for new namespaces (#535)
17+
1518
## [2.7.0] - 2024-11-04
1619

1720
### Added

cls/SourceControl/Git/Settings.cls

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ ClassMethod CreateNamespaceTempFolder() As %Status
154154
ClassMethod Configure() As %Boolean [ CodeMode = objectgenerator ]
155155
{
156156
do %code.WriteLine(" set inst = ..%New()")
157+
do %code.WriteLine(" do inst.RetrieveDefaults()")
157158
set defaultPromptFlag = $$$DisableBackupCharMask + $$$TrapCtrlCMask + $$$EnableQuitCharMask + $$$DisableHelpCharMask + $$$DisableHelpContextCharMask + $$$TrapErrorMask
158159
set property = ""
159160
for {
@@ -394,4 +395,25 @@ Method ConfigureBinPath(ByRef path As %String) As %Boolean
394395
return 1
395396
}
396397

398+
Method RetrieveDefaults() As %Boolean
399+
{
400+
do ##class(%zpkg.isc.sc.git.Defaults).GetDefaultSettings(.settings)
401+
set iterator = settings.%GetIterator()
402+
while iterator.%GetNext(.key, .value) {
403+
set $property($this,key) = value
404+
}
405+
return $$$OK
406+
}
407+
408+
Method SaveDefaults() As %Boolean
409+
{
410+
set defaults = {}
411+
set items = $lb("gitBinPath", "namespaceTemp", "pullEventClass", "percentClassReplace", "environmentName", "systemBasicMode", "defaultMergeBranch", "mappedItemsReadOnly", "compileOnImport")
412+
for i=1:1:$LISTLENGTH(items) {
413+
set property = $listget(items,i)
414+
do defaults.%Set(property, $property($this, property))
415+
}
416+
return ##class(%zpkg.isc.sc.git.Defaults).SetDefaultSettings(defaults)
417+
}
418+
397419
}

cls/_zpkg/isc/sc/git/Defaults.cls

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
Class %zpkg.isc.sc.git.Defaults
2+
{
3+
4+
ClassMethod GetDefaults() As %Library.DynamicObject [ NotInheritable, Private ]
5+
{
6+
set defaults = {}
7+
set storage = "^%SYS(""SourceControl"",""Git"",""defaults"")"
8+
$$$AddAllRoleTemporary
9+
10+
set key = $order(@storage@(""))
11+
while key '= "" {
12+
do defaults.%Set(key, $get(@storage@(key)))
13+
set key = $order(@storage@(key))
14+
}
15+
return defaults
16+
}
17+
18+
ClassMethod GetDefaultSettings(ByRef defaults As %Library.DynamicObject) As %Status
19+
{
20+
try {
21+
set defaults = ..GetDefaults()
22+
} catch e {
23+
return e.AsStatus()
24+
}
25+
return $$$OK
26+
}
27+
28+
ClassMethod SetDefaults(defaults As %Library.DynamicObject) As %Status [ NotInheritable, Private ]
29+
{
30+
31+
$$$AddAllRoleTemporary
32+
set storage = "^%SYS(""SourceControl"",""Git"",""defaults"")"
33+
k @storage
34+
set iterator = defaults.%GetIterator()
35+
36+
while iterator.%GetNext(.key, .value) {
37+
set @storage@(key) = value
38+
}
39+
40+
return $$$OK
41+
}
42+
43+
ClassMethod SetDefaultSettings(defaults As %Library.DynamicObject) As %Status [ NotInheritable ]
44+
{
45+
46+
set newDefaults = {}
47+
48+
set iterator = defaults.%GetIterator()
49+
50+
while iterator.%GetNext(.key, .value) {
51+
do newDefaults.%Set(key, value)
52+
}
53+
54+
try {
55+
do ..SetDefaults(newDefaults)
56+
} catch e {
57+
return e.AsStatus()
58+
}
59+
return $$$OK
60+
}
61+
62+
}

csp/gitprojectsettings.csp

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,10 @@ body {
163163
}
164164

165165
set settings.favoriteNamespaces = contexts
166+
167+
if ($get(%request.Data("proxySubmitButton",1)) = "saveDefaults") {
168+
do settings.SaveDefaults()
169+
}
166170
}
167171
do settings.%Save()
168172
}
@@ -273,7 +277,7 @@ body {
273277
}
274278
</server>
275279
<div class="form-group row mb-3">
276-
<label for="privateKeyFile" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="Absolute path to your private SSH key file">SSH Private Key File</label>
280+
<label for="privateKeyFile" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="Absolute path to your private SSH key file">*SSH Private Key File</label>
277281
<div class="col-sm-7">
278282
<server>
279283
Set fileExists = ##class(%File).Exists(settings.privateKeyFile)
@@ -393,7 +397,7 @@ body {
393397
</div>
394398

395399
<div class="form-group row mb-3">
396-
<label for="remoteRepo" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="Url to Remote repository">Remote Repository</label>
400+
<label for="remoteRepo" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="Url to Remote repository">*Remote Repository</label>
397401
<div class="col-sm-7">
398402
<input type="text" class="form-control" id="remoteRepo" name="remoteRepo" value='#(..EscapeHTML(remote))#' placeholder="ex. [email protected]:User/UserRepo.git"/>
399403
<div class = "neutral-feedback">
@@ -435,7 +439,7 @@ body {
435439

436440
<div class="form-group row mb-3 mapping-input-group">
437441
<div class="offset-sm-1 col-sm-3">
438-
<label for="MappingsPath" class="col-form-label" data-toggle="tooltip" data-placement="top" title="Relative paths mapping the files in your project. For web application files, use the extension: /CSP/">Mappings</label>
442+
<label for="MappingsPath" class="col-form-label" data-toggle="tooltip" data-placement="top" title="Relative paths mapping the files in your project. For web application files, use the extension: /CSP/">*Mappings</label>
439443
<button type="button" class="btn btn-default btn-add" >
440444
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="#198754" class="bi bi-plus-circle-fill" viewBox="0 0 16 16">
441445
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8.5 4.5a.5.5 0 0 0-1 0v3h-3a.5.5 0 0 0 0 1h3v3a.5.5 0 0 0 1 0v-3h3a.5.5 0 0 0 0-1h-3v-3z"></path>
@@ -538,21 +542,21 @@ body {
538542

539543
<fieldset id="userSettings">
540544
<div class="form-group row mb-3">
541-
<label for="gitUserName" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="Firstname Lastname">Git Committer Name </label>
545+
<label for="gitUserName" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="Firstname Lastname">*Git Committer Name </label>
542546
<div class="col-sm-7">
543547
<input type="text" class="form-control" id="gitUserName" name="gitUserName" value='#(..EscapeHTML(settings.gitUserName))#'/>
544548
</div>
545549
</div>
546550

547551
<div class="form-group row mb-3">
548-
<label for="gitUserEmail" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="<git-username-on-remote>@remote.com">Git Committer Email </label>
552+
<label for="gitUserEmail" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="<git-username-on-remote>@remote.com">*Git Committer Email </label>
549553
<div class="col-sm-7">
550554
<input type="email" class="form-control" id="gitUserEmail" name="gitUserEmail" value='#(..EscapeHTML(settings.gitUserEmail))#'/>
551555
</div>
552556
</div>
553557

554558
<div class="form-group mb-3">
555-
<label for="basicMode" class="offset-sm-1 col-sm-3 col-form-label form-rad-label" data-toggle="tooltip" data-placement="top" title="Enable basic mode, which reduces the number of menu options and requires less knowledge of git. This is suitable for a single-developer (non-shared) namespace.">Basic Mode</label>
559+
<label for="basicMode" class="offset-sm-1 col-sm-3 col-form-label form-rad-label" data-toggle="tooltip" data-placement="top" title="Enable basic mode, which reduces the number of menu options and requires less knowledge of git. This is suitable for a single-developer (non-shared) namespace.">*Basic Mode</label>
556560

557561
<div class="form-check offset-sm-4 form-rad">
558562
<server>
@@ -608,7 +612,7 @@ body {
608612
</div>
609613

610614
<div class="form-group row mb-3">
611-
<label for="addToFav" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="Favorite namespaces for user to add link on Home page.">Favorite Namespaces</label>
615+
<label for="addToFav" class="offset-sm-1 col-sm-3 col-form-label" data-toggle="tooltip" data-placement="top" title="Favorite namespaces for user to add link on Home page.">*Favorite Namespaces</label>
612616
<div class="col-sm-7">
613617
<select multiple class="form-control" id="addToFav" name="favNamespace">
614618
<server>
@@ -633,7 +637,12 @@ body {
633637

634638
<div class="form-group row mb-3">
635639
<div class="col-sm-12 text-center">
636-
<input type='submit' class="btn-lg btn-primary" value = 'Save'/>
640+
<input type="hidden" id="proxySubmitButton" name="proxySubmitButton" value="Save">
641+
<input type='submit' class="btn-lg btn-primary" value = 'Save' name="Save"/>
642+
<input type="submit" class="btn-lg btn-primary" id="saveDefaults" value = 'Save as Instance Defaults' title="Save these settings as default for new instances" name="saveDefaults"/>
643+
<div>
644+
<small> Settings not saved as default marked with '*'</small>
645+
</div>
637646
</div>
638647
</div>
639648

@@ -660,6 +669,17 @@ function getSocket(urlPostfix) {
660669
return new WebSocket(socketURL);
661670
}
662671

672+
var submitForm = function(e) {
673+
e.preventDefault();
674+
e.stopPropagation();
675+
var proxySubmitButton = document.getElementById('proxySubmitButton');
676+
proxySubmitButton.value = "saveDefaults";
677+
var form = document.getElementById('settingsForm');
678+
form.submit();
679+
}
680+
681+
document.getElementById('saveDefaults').addEventListener('click',submitForm,false);
682+
663683
function init() {
664684
disableActionButtons();
665685
var root = document.getElementById("namespaceTemp").value;

0 commit comments

Comments
 (0)