15 $monLibrary= dirname(__FILE__) .
"/../library";
16 require_once(
"$monLibrary/cu_top.i");
17 require_once(
"$monLibrary/ck_hticket.i");
18 require_once(
"$monLibrary/monitorView.i");
19 require_once(
"$sharedLibrary/commonJsFunctions.i");
21 if (!CheckPerm($link, $Hu, basename($_SERVER[
'SCRIPT_NAME']), $_SERVER[
'REMOTE_ADDR'])) {
24 header(
"Location: /hcuadm/hcu_noperm.prg");
29 $dataFile=
"cutrustvendor.data";
30 $dataPath=
"/hcuadm/$dataFile";
33 printMonitorPageTop(
"Trusted Vendors", $homecuKendoVersion, $cloudfrontDomainName);
42 .k-grid tbody .k-button {
43 min-width: 20px !important;
46 #defaultValueGrid thead { 50 #defaultValueGrid tbody tr { 54 #defaultValueGrid .k-grid-customDelete { 65 border-color: rgb(204, 204, 204);
66 background-color: rgb(238, 238, 238);
68 color: rgb(51, 131, 187) !important;
70 font-family:
'Trebuchet MS',
'Lucida Grande', Verdana, Arial, sans-serif;
75 #deleteDialogWindow .message { 79 #deleteDialogWindow .k-edit-buttons { 83 .k-context-menu .k-item, .k-context-menu {
84 width: 150px !important;
87 .k-edit-form-container {
88 width:
auto !important;
92 <script type=
"text/javascript">
96 getErrorsAreShownFunction();
97 getSetupDeleteConfirmDialogFunction();
98 getAddMinifiedActionStyleFunction();
99 getParseCrudGridFunction();
100 getEscapeHTMLFunction();
101 getShowSQLFunction($showSQL);
102 getSetupValidatorInGridFunction();
103 getUseValidatorInGridFunction();
104 getShowWaitFunctions();
105 getAddErrorFunction();
106 getContextMenuForDoubleLevelGrid();
110 function initAccordion()
112 var accordion= $(
"#accordion").kendoPanelBar({}).data(
"kendoPanelBar");
116 var fullContextMenu=
null;
117 var detailRecords= [];
120 var optionDDLData= [];
122 var fieldTypeDDLData= [];
123 var serverOptions= [];
124 var initialized=
false;
128 var grid= $(
"#grid").kendoGrid({
132 url:
"<?php echo $dataPath; ?>?operation=readTrustedVendors",
137 url:
"<?php echo $dataPath; ?>?operation=createTrustedId",
142 url:
"<?php echo $dataPath; ?>?operation=updateTrustedId",
146 parameterMap:
function(data, type) {
151 return {features: data.features, trustedId: data.trustedId, typeValue: data.typeValue, vendorName: data.vendorName, detailsEncoded: data.detailsEncoded}
158 trustedId: {type:
"string"},
159 vendorName: {type:
"string"},
160 typeValue: {type:
"string"},
161 typeText: {type:
"string"}
164 parse:
function (data)
167 if (data.operation ==
"read")
169 optionDDLData= data.optionDDL;
170 typeDDLData= data.typeDDL;
171 fieldTypeDDLData= data.fieldTypeDDL;
172 serverOptions= data.serverOptions;
173 detailRecords=
new kendo.data.ObservableArray(data.detailRecords);
176 return parseCrudGrid(data);
181 {field:
"trustedId", title:
"Trusted ID", attributes: {
"class" :
"trustedId"}},
182 {field:
"vendorName", title:
"Vendor"},
183 {field:
"typeText", title:
"Type"}
186 filterable: {extra:
false},
187 toolbar: [{name:
"create", text:
""}],
188 detailTemplate:
"<div class=\"detailGrid\"></div>",
189 detailInit:
function (eOuter) {
190 if (eOuter.data.trustedId ==
"HOMECUSERVICE" && eOuter.data.vendorName ==
"HOMECU")
191 initServerMasterGrid(eOuter, serverOptions, detailRecords);
193 initDetailGrid(eOuter, fieldTypeDDLData, detailRecords);
197 template: kendo.template($(
"#popupTemplate").html()),
201 title:
"<span class='gridWindowTitle'></span>",
206 edit:
function (eOuter) {
207 setupValidatorInGrid(eOuter,
false);
209 var typeDDL= $(
"#typeDDL").kendoDropDownList({
213 dataTextField:
"text",
214 dataValueField:
"value",
215 filter:
"startswith",
216 change:
function () {
217 eOuter.model.typeValue= this.value();
218 eOuter.model.typeText= this.text();
219 eOuter.model.dirty=
true;
221 }).data(
"kendoDropDownList");
223 if (eOuter.model.isNew())
225 $(
".gridWindowTitle").text(
"Add Trusted Vendor");
226 $(
"#nameLabel").
remove();
228 $(
".nameInput").blur(
function () {
229 $(
this).val($(
this).val().replace(/\s+/g,
""));
230 addTrustedIdDuplicateError(eOuter, $(
this).val(), eOuter.model.uid,
false);
233 eOuter.model.typeValue= typeDDL.value();
237 $(
".gridWindowTitle").text(
"Edit Trusted Vendor");
238 $(
".nameInput").
remove();
241 typeDDL.value(eOuter.model.typeValue);
244 initMasterDetailsAtOnceTable(eOuter, fieldTypeDDLData, detailRecords);
246 save:
function (eOuter) {
247 useValidatorInGrid(eOuter,
false);
249 if (eOuter.model.isNew())
250 addTrustedIdDuplicateError(eOuter, $(
".nameInput").val(), eOuter.model.uid,
true);
251 if (eOuter.model.detailsChanged)
253 var data= $(
"#masterDetailAtOnceGrid").data(
"kendoGrid").dataSource.data();
254 detailRecords= $.grep(detailRecords,
function(n,i) {
return n.trustedId != eOuter.model.trustedId; });
255 for (var i=0; i!= data.length; i++)
258 record.trustedId= eOuter.model.trustedId.replace(/\s+/g,
"");
259 detailRecords.push(record);
262 eOuter.model.detailsEncoded= kendo.stringify(data);
265 dataBound:
function () {
266 fullContextMenu.gridDatabound (
true, initialized,
this);
269 addMinifiedActionStyle(
"#grid",
true);
272 var keys= Object.keys(openDetails);
273 for (var i=0; i!=keys.length; i++)
275 this.expandRow($(
".trustedId").filter(
function (index) {
return $(
this).text() == keys[i]; }).parent());
278 cancel:
function (eOuter) {
280 fullContextMenu.gridCancel(eOuter,
this,
true);
281 eOuter.preventDefault();
284 detailExpand:
function (eOuter) {
285 openDetails[$(eOuter.masterRow).find(
".trustedId").text()]=
true;
286 $(eOuter.detailRow).find(
".detailGrid").data(
"kendoGrid").dataSource.read();
288 detailCollapse:
function (eOuter) {
289 delete openDetails[$(eOuter.masterRow).find(
".trustedId").text()];
291 }).data(
"kendoGrid");
293 fullContextMenu=
new getFullContextMenu(grid,
"contextMenu",
"trustedId",
"detailName");
294 fullContextMenu.setOptionFuncs(
null, detailOptionFunc, additionalSelectOptionFunc);
295 fullContextMenu.setDeleteOptions(
"<?php echo $dataPath; ?>",
"removeTrustedId",
"removeTrustedDetail",
function(isMaster, dataItemForDelete) {
298 var data= grid.dataSource.data().slice(0);
299 data= $.grep(data,
function(n,i) {
return n.trustedId != dataItemForDelete.trustedId; });
300 detailRecords= $.grep(detailRecords,
function(n,i) {
return n.trustedId != dataItemForDelete.trustedId; });
301 $(
".detailGrid:visible").each(
function () { $(
this).data(
"kendoGrid").dataSource.read(); });
302 grid.dataSource.data(data);
306 detailRecords= $.grep(detailRecords,
function(n,i) {
return n.trustedId == dataItemForDelete.trustedId && n.detailName == dataItemForDelete.detailName;},
true);
307 $(
".detailGrid:visible").each(
function () { $(
this).data(
"kendoGrid").dataSource.read(); });
309 },
function(dataItem) {
310 return $.grep(detailRecords,
function(n,i) { n.trustedId == dataItem.trustedId; }).length;
314 function detailOptionFunc(options, dataItem)
316 options.push({text:
"Edit", cssClass:
"editLi"});
317 options.push({text:
"Delete", cssClass:
"deleteLi"});
319 if (dataItem.trustedId ==
"HOMECUSERVICE")
322 var data= $.grep(detailRecords,
function(n,i) {
return n.trustedId == dataItem.trustedId; });
323 data.sort(
function(a,b) {
return a.displayOrder - b.displayOrder; });
325 if (data.length >= 2)
327 var moveBeforeChoices= [];
328 var moveAfterChoices= [];
330 for (var i=0; i!= data.length; i++)
332 moveBeforeChoices.push({text: data[i].detailName, cssClass:
"moveBeforeChoiceLi task_"+i});
333 moveAfterChoices.push({text: data[i].detailName, cssClass:
"moveAfterChoiceLi task_"+i});
334 if (data[i].detailName == dataItem.detailName)
338 if (data.length == 2)
340 this.taskIndex == 0 ? moveBeforeChoices= [] : moveBeforeChoices.splice(this.taskIndex, 1);
341 this.taskIndex == 1 ? moveAfterChoices= [] : moveAfterChoices.splice(this.taskIndex, 1);
345 moveBeforeChoices.splice(this.taskIndex, 2);
346 this.taskIndex == 0 ? moveAfterChoices.splice(0, 1) : moveAfterChoices.splice(this.taskIndex-1, 2);
349 if (moveBeforeChoices.length > 0)
350 options.push({text:
"Move before...", items: moveBeforeChoices, cssClass:
"moveBeforeLi"});
351 if (moveAfterChoices.length > 0)
352 options.push({text:
"Move after...", items: moveAfterChoices, cssClass:
"moveAfterLi"});
356 function additionalSelectOptionFunc(item, tr, grid, dataItem)
358 if ($(item).hasClass(
"moveAfterChoiceLi") || $(item).hasClass(
"moveBeforeChoiceLi"))
360 var classes= $(item).attr(
"class").split(/\s+/);
362 for(var i=0; i!= classes.length; i++)
364 var parts= classes[i].split(/_/);
365 if (parts[0].trim() ==
"task")
367 moveTaskId= Number(parts[1]);
372 if ($(item).hasClass(
"moveAfterChoiceLi"))
374 $.post(
"<?php echo $dataPath; ?>?operation=reorderTrustedDetail", {position: moveTaskId, trustedId: dataItem.trustedId, detailName: dataItem.detailName},
378 if (!errorsAreShown(data,
"formValidateMainDiv"))
380 detailRecords= $.grep(detailRecords,
function(n,i) {
return n.trustedId != dataItem.trustedId; });
381 for(var i=0, length= data.record.length; i!= length; i++)
383 detailRecords.push(data.record[i]);
385 grid.dataSource.read();
386 $(
"#grid").data(
"kendoGrid").expandRow($(tr).closest(
".k-detail-row").prev());
393 function initServerMasterGrid(eOuter, serverOptions)
395 var detailGridInitialized=
false;
397 var detailGrid= eOuter.detailRow.find(
".detailGrid").kendoGrid({
400 read:
function (options) {
401 options.success(detailRecords);
403 create:
function (options) {
404 var parameters= {detailName: options.data.detailName, defaultMessage: options.data.defaultMessage, defaultValue: options.data.defaultValue};
406 $.post(
"<?php echo $dataPath; ?>?operation=addServerProperty", parameters,
411 if (!errorsAreShown(data,
"formValidatePopupDetailDiv"))
413 options.success(data.record);
417 update:
function (options) {
418 var parameters= {detailName: options.data.detailName, defaultMessage: options.data.defaultMessage, defaultValue: options.data.defaultValue};
420 $.post(
"<?php echo $dataPath; ?>?operation=updateServerProperty", parameters,
function (data) {
424 if (!errorsAreShown(data,
"formValidatePopupDetailDiv"))
426 options.success(data.record);
435 detailName: {type:
"string"},
436 defaultMessage: {type:
"string"},
437 defaultValue: {type:
"string"},
438 trustedId: {type:
"string", defaultValue: eOuter.data.trustedId}
442 sort: {field:
"detailName", dir:
"asc"},
443 filter: {field:
"trustedId",
operator:
"eq", value: eOuter.data.trustedId}
447 template: kendo.template($(
"#popupTemplateServerProperties").html()),
451 title:
"<span class='gridWindowTitle'></span>",
458 {field:
"detailName", title:
"Description"},
459 {field:
"defaultValue", title:
"Default Value", values: serverOptions},
460 {field:
"defaultMessage", title:
"Default Message"}
463 filterable: {extra:
false},
464 edit:
function (eInner) {
465 setupValidatorInGrid(eInner,
true);
467 var serverOptionsDDL= $(
"#serverOptionsDDL").kendoDropDownList({
471 dataTextField:
"text",
472 dataValueField:
"value",
473 filter:
"startswith",
474 change:
function () {
475 eInner.model.defaultValue= this.value();
476 eInner.model.dirty=
true;
478 }).data(
"kendoDropDownList");
480 $(
"#serverMessageInput").blur(
function () {
481 eInner.model.defaultMessage= $(
this).val();
482 eInner.model.dirty=
true;
485 if (eInner.model.isNew())
487 $(
".gridWindowTitle").text(
"Add Detail");
488 $(
"#nameLabel").
remove();
490 $(
".nameInput").blur(
function () {
491 $(
this).val($(
this).val().replace(/\s+/g,
""));
492 addPropertyDuplicateError(eInner, $(
this).val(), eOuter.data.trustedId, eInner.model.uid,
false, detailGrid);
493 addNoMsgError(eInner, $(
this).val(),
false);
496 eInner.model.defaultValue= serverOptionsDDL.value();
500 $(
".gridWindowTitle").text(
"Update Detail");
501 $(
".nameInput").
remove();
503 serverOptionsDDL.value(eInner.model.defaultValue);
504 $(
"#serverMessageInput").val(eInner.model.defaultMessage);
507 $(
"#serverMessageInput").focus();
509 save:
function (eInner) {
510 useValidatorInGrid(eInner,
true);
512 if (eInner.model.isNew())
514 addPropertyDuplicateError(eInner, $(
".nameInput").val(), eOuter.data.trustedId, eInner.model.uid,
true, detailGrid);
515 addNoMsgError(eInner, $(
".nameInput").val(),
true);
517 eInner.model.detailName= eInner.model.detailName.replace(/\s+/g,
"");
520 dataBound:
function (eInner)
522 var gridElement= eOuter.detailRow.find(
".detailGrid");
523 fullContextMenu.gridDatabound (
false, detailGridInitialized,
this);
524 if (!detailGridInitialized)
526 addMinifiedActionStyle(gridElement);
527 detailGridInitialized=
true;
530 cancel:
function (eInner) {
531 this.cancelChanges();
532 fullContextMenu.gridCancel(eInner,
this,
false);
533 eInner.preventDefault();
536 }).data(
"kendoGrid");
538 fullContextMenu.addToDetailGrid (eOuter.data.trustedId, detailGrid);
542 function initDetailGrid(eOuter, fieldTypeDDLData)
544 var detailGridInitialized=
false;
546 var detailGrid= eOuter.detailRow.find(
".detailGrid").kendoGrid({
549 read:
function (options) {
550 options.success(detailRecords);
552 create:
function (options) {
553 var parameters= {trustedId: eOuter.data.trustedId, detailName: options.data.detailName, fieldType: options.data.fieldType, defaultValue: options.data.defaultValue,
554 defaultMessage: options.data.defaultMessage};
556 $.post(
"<?php echo $dataPath; ?>?operation=addTrustedDetail", parameters,
561 if (!errorsAreShown(data,
"formValidatePopupDetailDiv"))
563 options.success(data.record);
564 detailRecords.push(data.record[0]);
568 update:
function (options) {
569 var parameters= {trustedId: eOuter.data.trustedId, detailName: options.data.detailName, fieldType: options.data.fieldType, defaultValue: options.data.defaultValue,
570 defaultMessage: options.data.defaultMessage};
572 $.post(
"<?php echo $dataPath; ?>?operation=updateTrustedDetail", parameters,
function (data) {
576 if (!errorsAreShown(data,
"formValidatePopupDetailDiv"))
578 options.success(data.record);
587 detailName: {type:
"string"},
588 fieldType: {type:
"string"},
589 fieldTypeText: {type:
"string"},
590 defaultValue: {type:
"string"},
591 defaultMessage: {type:
"string"},
592 trustedId: {type:
"string"},
593 displayOrder: {type:
"number"}
597 sort: {field:
"displayOrder", dir:
"asc"},
598 filter: {field:
"trustedId",
operator:
"eq", value: eOuter.data.trustedId}
602 template: kendo.template($(
"#popupTemplateDetail").html()),
606 title:
"<span class='gridWindowTitle'></span>",
613 {field:
"detailName", title:
"Title"},
614 {field:
"fieldType", title:
"Field Type", values: fieldTypeDDLData, width:
"10%"},
615 {field:
"defaultValue", title:
"Default Value"},
616 {field:
"defaultMessage", title:
"Description"}
619 filterable: {extra:
false},
620 edit:
function (eInner) {
621 setupValidatorInGrid(eInner,
true);
623 $(
"#defaultValueTextInput").blur(
function () {
624 eInner.model.dirty=
true;
625 eInner.model.defaultValue= $(
this).val();
628 $(
"#defaultValueBooleanInput").click(
function () {
629 eInner.model.dirty=
true;
630 eInner.model.defaultValue= $(
this).prop(
"checked") ?
"Y" :
"N";
633 var defaultValueNumericInput= $(
"#defaultValueNumericInput").kendoNumericTextBox({
634 change:
function () {
635 eInner.model.dirty=
true;
636 eInner.model.defaultValue= this.value();
638 }).data(
"kendoNumericTextBox");
641 var inEditCell=
false;
642 var defaultValueGrid= $(
"#defaultValueGrid").kendoGrid({
649 index: {type:
"number"},
650 value: {type:
"string"}
656 {field:
"index", hidden:
true},
657 {command: [{name:
"customDelete", text:
"", iconClass:
"k-icon k-i-delete", click:
function(e) {
658 eInner.model.dirty=
true;
659 getDefaultValueFromGrid(eInner, e, defaultValueGrid,
true);
664 toolbar: [{name:
"create", text:
""}],
669 edit:
function (eGrid) {
670 if (eGrid.model.isNew())
671 eGrid.model.index= ++index;
673 save:
function (eGrid) {
674 eInner.model.dirty=
true;
675 getDefaultValueFromGrid(eInner, eGrid,
this,
false);
677 dataBound:
function () {
678 addMinifiedActionStyle(
"#defaultValueGrid",
true);
680 }).data(
"kendoGrid");
682 var detailTypeDDL= $(
"#detailTypeDDL").kendoDropDownList({
683 dataSource: fieldTypeDDLData,
684 dataTextField:
"text",
685 dataValueField:
"value",
686 filter:
"startswith",
687 change:
function () {
688 eInner.model.dirty=
true;
689 eInner.model.fieldType= this.value();
690 fieldTypeChange(eInner, defaultValueGrid, defaultValueNumericInput, eInner.model.fieldType,
true);
692 }).data(
"kendoDropDownList");
694 if (eInner.model.isNew())
696 $(
".gridWindowTitle").text(
"Add Detail");
697 $(
"#nameLabel").
remove();
699 $(
".nameInput").blur(
function () {
700 $(
this).val($(
this).val().replace(/\s+/g,
""));
701 addPropertyDuplicateError(eInner, $(
this).val(), eOuter.data.trustedId, eInner.model.uid,
false, detailGrid);
704 fieldTypeChange(eInner, defaultValueGrid, defaultValueNumericInput,
"string",
false);
705 eInner.model.fieldType=
"string";
709 $(
".gridWindowTitle").text(
"Update Detail");
710 $(
".nameInput").
remove();
711 detailTypeDDL.value(eInner.model.fieldType);
712 fieldTypeChange(eInner, defaultValueGrid, defaultValueNumericInput, eInner.model.fieldType,
false);
715 save:
function (eInner) {
716 useValidatorInGrid(eInner,
true);
718 if (eInner.model.isNew())
719 addPropertyDuplicateError(eInner, $(
".nameInput").val(), eOuter.data.trustedId, eInner.model.uid,
true, detailGrid);
720 eInner.model.detailName= eInner.model.detailName.replace(/\s+/g,
"");
722 dataBound:
function (eInner)
724 var gridElement= eOuter.detailRow.find(
".detailGrid");
725 fullContextMenu.gridDatabound (
false, detailGridInitialized,
this);
726 if (!detailGridInitialized)
728 addMinifiedActionStyle(gridElement);
729 detailGridInitialized=
true;
732 cancel:
function (eInner) {
733 this.cancelChanges();
734 fullContextMenu.gridCancel(eInner,
this,
false);
735 eInner.preventDefault();
738 }).data(
"kendoGrid");
740 fullContextMenu.addToDetailGrid (eOuter.data.trustedId, detailGrid);
744 function getDefaultValueFromGrid(eInner, eGrid, grid, isDeleting)
746 eInner.model.dirty=
true;
747 var data= grid.dataSource.data();
751 var deletingIndex= Number($(eGrid.target).closest(
"tr").find(
"td:eq(0)").text());
752 data= $.grep(data,
function(n,i) {
return n.index != deletingIndex; });
753 grid.dataSource.data(data);
755 var defaultValueArray= [];
756 for (var i=0; i!= data.length; i++)
758 if (!isDeleting && data[i].index == eGrid.model.index)
759 defaultValueArray.push(eGrid.values.value);
761 defaultValueArray.push(data[i].value);
763 eInner.model.defaultValue= kendo.stringify(defaultValueArray);
767 function fieldTypeChange(eInner, defaultValueGrid, defaultValueNumericInput, newValue, updateModel)
772 $(
"#defaultValueTextDiv").hide();
773 $(
"#defaultValueBooleanDiv").hide();
774 $(
"#defaultValueNumericDiv").show();
775 $(
"#defaultValueListDiv").hide();
779 defaultValueNumericInput.value(0);
780 eInner.model.defaultValue=
"0";
784 defaultValueNumericInput.value(eInner.model.defaultValue);
787 defaultValueNumericInput.focus();
790 $(
"#defaultValueTextDiv").show();
791 $(
"#defaultValueBooleanDiv").hide();
792 $(
"#defaultValueNumericDiv").hide();
793 $(
"#defaultValueListDiv").hide();
797 $(
"#defaultValueTextInput").val(
null);
798 eInner.model.defaultValue=
"";
802 $(
"#defaultValueTextInput").val(eInner.model.defaultValue);
805 $(
"#defaultValueTextInput").focus();
808 $(
"#defaultValueTextDiv").hide();
809 $(
"#defaultValueBooleanDiv").show();
810 $(
"#defaultValueNumericDiv").hide();
811 $(
"#defaultValueListDiv").hide();
815 $(
"#defaultValueBooleanInput").prop(
"checked",
false);
816 eInner.model.defaultValue=
"N";
820 $(
"#defaultValueBooleanInput").prop(
"checked", eInner.model.defaultValue ==
"Y");
823 $(
"#defaultValueBooleanInput").focus();
826 $(
"#defaultValueTextDiv").hide();
827 $(
"#defaultValueBooleanDiv").hide();
828 $(
"#defaultValueNumericDiv").hide();
829 $(
"#defaultValueListDiv").show();
833 defaultValueGrid.dataSource.data([]);
834 eInner.model.defaultValue=
"[]";
838 var defaultValueDecoded= [];
839 if (eInner.model.defaultValue !=
null)
841 var defaultValue= eInner.model.defaultValue.replace(/\\
"/g, '"'); // unescape here so JSON is valid. 842 defaultValueDecoded= JSON && JSON.parse(defaultValue) || $.parseJSON(defaultValue); 846 for(var i=0; i!= defaultValueDecoded.length; i++) 848 gridData.push({index: i, value: defaultValueDecoded[i]}); 850 defaultValueGrid.dataSource.data(gridData); 858 <?php /* This prevents user from entering a duplicate trusted id. This is also prevented at the database level. */ ?> 859 function addTrustedIdDuplicateError(e, trustedId, uid, onSave) 861 var data= $("#grid").data("kendoGrid").dataSource.data(); 862 var hasDuplicates= $.grep(data, function (n,i) { return n.trustedId == trustedId && n.uid != uid; }).length > 0; 865 addError(e, "trustedId", onSave, "duplicate"); 868 <?php /* This prevents user from entering in a duplicate property within a trusted id. Before, a duplicate property would overwrite the previous value but the user won't know until a refresh. */ ?>
869 function addPropertyDuplicateError(e, property, trustedId, uid, onSave, grid)
871 var data= grid.dataSource.data();
872 var hasDuplicates= $.grep(data,
function (n,i) {
return n.detailName ==
property && n.uid != uid && n.trustedId == trustedId; }).length > 0;
875 addError(e,
"detailName", onSave,
"duplicate",
"formValidatePopupDetailDiv");
879 function addNoMsgError(e, property, onSave)
881 var hasMsg=
property.indexOf(
"_MSG") != -1;
884 addError(e,
"detailName", onSave,
"nomsg",
"formValidatePopupDetailDiv");
887 function initMasterDetailsAtOnceTable(eOuter, fieldTypes)
890 var deleteConfirm= $(
"<div id='masterDetailsDelete'></div>").kendoWindow({
891 content: {
template: $(
"#deleteConfirmTemplate").html()},
896 title:
"Confirm deletion",
900 }).data(
"kendoWindow");
902 $(
"#masterDetailsDelete .deleteConfirmContinueBtn").click(
function () {
903 atOnceGrid.removeRow(deleteTr);
904 deleteConfirm.close();
908 $(
"#masterDetailsDelete .deleteConfirmContinueBtn").click(
function() {
909 deleteConfirm.close();
913 var atOnceGrid= $(
"#masterDetailAtOnceGrid").kendoGrid({
915 data: $.grep(detailRecords,
function(n,i) {
return n.trustedId == eOuter.model.trustedId; }),
920 detailName: {type:
"string"},
921 fieldType: {type:
"string", defaultValue:
"string"},
922 fieldTypeText: {type:
"string", defaultValue:
"String"},
923 defaultValue: {type:
"string"},
924 defaultMessage: {type:
"string"},
925 trustedId: {type:
"string", defaultValue: eOuter.model.trustedId}
931 {command: [{name:
"customDelete", text:
"", iconClass:
"k-icon k-delete", click:
function(e) {
932 deleteTr= $(e.target).closest(
"tr");
933 deleteConfirm.open().center();
935 {field:
"detailName", title:
"Name", editor:
function(container, options) {
936 var input= $(
"<input type='text' class='k-input k-textbox' name='"+ options.field +
"'>").appendTo(container).blur(
function() {
937 var value= $(
this).val().replace(/\s+/g,
"");
939 options.model.detailName= value;
942 {field:
"fieldTypeText", title:
"Type", editor:
function(container, options) {
943 var ddl= $(
"<div></div>").appendTo(container).kendoDropDownList({
947 dataTextField:
"text",
948 dataValueField:
"value",
949 filter:
"startswith",
950 value: options.model.fieldType,
951 change:
function () {
955 options.model.defaultValue= 0;
958 options.model.defaultValue=
"N";
963 options.model.defaultValue=
"";
966 options.model.fieldType= this.value();
967 options.model.fieldTypeText= this.text();
968 $(container).parent().find(
"td:eq(2)").text(options.model.defaultValue);
970 }).data(
"kendoDropDownList");
972 {field:
"defaultValue", title:
"Value", editor:
function(container, options) {
973 switch(options.model.fieldType)
976 var input= $(
"<input name='" + options.field +
"'>").appendTo(container).kendoNumericTextBox({});
979 var input= $(
"<input type='checkbox'>").appendTo(container).click(
function () {
980 options.model.defaultValue= $(
this).prop(
"checked") ?
"Y" :
"N";
982 if (options.model.defaultValue ==
"Y")
983 $(input).prop(
"checked",
true);
988 var input= $(
"<textarea name='" + options.field +
"' class='k-input' type='text' style='width: 100%;' row=15 col=40></textarea>").appendTo(container);
991 {field:
"defaultMessage", title:
"Message", editor:
function(container, options) {
992 var input= $(
"<textarea name='" + options.field +
"' class='k-input' type='text' style='width: 100%;' row=15 col=40></textarea>").appendTo(container);
995 toolbar: [{name:
"create", text:
""}],
999 dataBound:
function () {
1000 addMinifiedActionStyle(
"#masterDetailAtOnceGrid",
true);
1003 eOuter.model.detailsChanged=
true;
1006 }).data(
"kendoGrid");
1008 $(
"#masterDetailAtOnceGrid").on(
"blur",
"[name='detailName']",
function() {
1009 $(
this).val($(
this).val().replace(/\s+/g,
""));
1013 $(document).ready(
function () {
1019 <script
id=
"popupTemplate" type=
"text/x-kendo-template">
1020 <div
id=
"formValidatePopupDiv" class=
"homecu-formStatus k-block k-error-colored" style=
"display:none;"></div>
1021 <form
id=
"popupForm" class=
"popupForm" data-role=
"validator" novalidate>
1022 <div
class=
"container_12">
1023 <div
class=
"grid_12">
1024 <div
class=
"grid_2 alpha">
1027 <div
class=
"grid_4">
1028 <div
id=
"nameLabel">#: trustedId #</div>
1029 <input type=
"text" class=
"k-input nameInput" name=
"trustedId" required data-required-msg=
"Id is required" data-duplicate-msg=
"trusted Id needs to be unique" 1030 maxlength=20 style=
"width:100%">
1032 <div
class=
"grid_1 omega">
1033 <span data-
for=
'trustedId' class=
'k-invalid-msg'></span>
1036 <div
class=
"grid_12">
1037 <div
class=
"grid_2 alpha">
1038 <label>Vendor:</label>
1040 <div
class=
"grid_4">
1041 <input name=
"vendorName" type=
"text" class=
"k-input" required data-required-msg=
"Vendor is required" maxlength=15 style=
"width:100%">
1043 <div
class=
"grid_1 omega">
1044 <span data-
for=
'vendorName' class=
'k-invalid-msg'></span>
1047 <div
class=
"grid_12">
1048 <div
class=
"grid_2 alpha">
1049 <label>Type:</label>
1051 <div
class=
"grid_4">
1052 <div
id=
"typeDDL" style=
"width:100%"></div>
1054 <div
class=
"grid_1 omega">
1058 <div
class=
"grid_12">
1059 <div
class=
"grid_2 alpha">
1060 <label>Details:</label>
1062 <div
class=
"grid_10">
1063 <div
id=
"masterDetailAtOnceGrid"></div>
1069 <script
id=
"popupTemplateServerProperties" type=
"text/x-kendo-template">
1070 <div
id=
"formValidatePopupDetailDiv" class=
"homecu-formStatus k-block k-error-colored" style=
"display:none;"></div>
1071 <form
id=
"popupFormDetail" class=
"popupForm" data-role=
"validator" novalidate>
1072 <div
class=
"container_12">
1073 <div
class=
"grid_12">
1074 <div
class=
"grid_4 alpha">
1077 <div
class=
"grid_7">
1078 <div
id=
"nameLabel">#: detailName #</div>
1079 <input type=
"text" class=
"k-input nameInput" name=
"detailName" required data-required-msg=
"Id is required" data-duplicate-msg=
"Property needs to be unique" 1080 maxlength=20 style=
"width:100%" data-nomsg-msg=
"Property cannot have _MSG in its name">
1082 <div
class=
"grid_1 omega">
1083 <span data-
for=
'detailName' class=
'k-invalid-msg'></span>
1086 <div
class=
"grid_12">
1087 <div
class=
"grid_4 alpha">
1088 <label>Default Value:</label>
1090 <div
class=
"grid_7">
1091 <div
id=
"serverOptionsDDL"></div>
1094 <div
class=
"grid_12">
1095 <div
class=
"grid_4 alpha">
1096 <label>Default Message:</label>
1098 <div
class=
"grid_7">
1099 <textarea
class=
"k-input" type=
"text" id=
"serverMessageInput" style=
"width: 100%; height: 100px" row=15 col=40></textarea>
1105 <script
id=
"popupTemplateDetail" type=
"text/x-kendo-template">
1106 <div
id=
"formValidatePopupDetailDiv" class=
"homecu-formStatus k-block k-error-colored" style=
"display:none;"></div>
1107 <form
id=
"popupFormDetail" class=
"popupForm" data-role=
"validator" novalidate>
1108 <div
class=
"container_12">
1109 <div
class=
"grid_12">
1110 <div
class=
"grid_4 alpha">
1113 <div
class=
"grid_7">
1114 <div
id=
"nameLabel">#: detailName #</div>
1115 <input type=
"text" class=
"k-input nameInput" name=
"detailName" required data-required-msg=
"Id is required" data-duplicate-msg=
"Property needs to be unique" 1116 maxlength=20 style=
"width:100%">
1118 <div
class=
"grid_1 omega">
1119 <span data-
for=
'detailName' class=
'k-invalid-msg'></span>
1122 <div
class=
"grid_12">
1123 <div
class=
"grid_4 alpha">
1124 <label>Field Type:</label>
1126 <div
class=
"grid_7">
1127 <div
id=
"detailTypeDDL"></div>
1129 <div
class=
"grid_1 omega">
1133 <div
class=
"grid_12">
1134 <div
class=
"grid_4 alpha">
1135 <label>Default Value:</label>
1137 <div
class=
"grid_7">
1138 <div
id=
"defaultValueTextDiv" style=
"display: none;">
1139 <textarea
class=
"k-input" type=
"text" id=
"defaultValueTextInput" style=
"width: 100%; height: 100px" row=15 col=40></textarea>
1141 <div
id=
"defaultValueBooleanDiv" style=
"display: none;">
1142 <input type=
"checkbox" id=
"defaultValueBooleanInput">
1144 <div
id=
"defaultValueNumericDiv" style=
"display:none;">
1145 <input
id=
"defaultValueNumericInput">
1147 <div
id=
"defaultValueListDiv" style=
"display: none;">
1148 <div
id=
"defaultValueGrid" style=
"width: 100%"></div>
1151 <div
class=
"grid_1 omega">
1155 <div
class=
"grid_12">
1156 <div
class=
"grid_4 alpha">
1157 <label>Description:</label>
1159 <div
class=
"grid_7">
1160 <textarea
class=
"k-input" type=
"text" name=
"defaultMessage" style=
"width: 100%; height: 100px" row=15 col=40></textarea>
1162 <div
class=
"grid_1 omega">
1169 <script
id=
"deleteConfirmTemplate" type=
"text/x-kendo-template">
1170 <div
class=
"k-edit-form-container">
1171 <div
class=
"container_12">
1172 <div
class=
"grid_12 message">Are you sure that you want to
delete? <span
id=
"detailDeleteMsg" style=
"display:none;">This will also delete <span>1</span> detail(s) as well.</div>
1174 <div
class=
"k-edit-buttons k-state-default">
1175 <a
class=
"k-button k-button-icontext deleteConfirmContinueBtn" href=
"\#">
1176 <span
class=
"k-icon k-i-check"></span>
1179 <a
class=
"k-button k-button-icontext deleteConfirmCancelBtn" href=
"\#">
1180 <span
class=
"k-icon k-i-cancel"></span>
1187 <?php printMonitorPageMiddle(
"Trusted Vendors"); ?>
1189 <div
id=
"trustedListDiv" class=
"container_12">
1190 <div
class=
"grid_12">
1192 <li><span style=
'color: rgb(51, 131, 187);'>Looking
for something?</span>
1196 Are you trying to change the service status
for a HOMECU Vendor?<br/>
1197 This table maintains the
default settings
for each vendor in the cutrustedmaster table.<br/>
1198 All homecu services are listed under the HOMECUSERVICE Trusted ID <br/>
1199 To change the service, you must use the
'Service Settings' on the server menu<br/>
1200 <a href=
'https://www.homecu.net/hcuadm/servindex.prg?rowid=www3' target=
'_blank'>www3</a>
1201 <a href=
'https://www.homecu.net/hcuadm/servindex.prg?rowid=www5' target=
'_blank'>www5</a>
1202 <a href=
'https://www.homecu.net/hcuadm/servindex.prg?rowid=www6' target=
'_blank'>www6</a>
1208 <div
class=
"grid_12">
1211 <div
class=
"grid_12">
1212 <div
id=
"sqlOutput"></div>
1214 <div
class=
"grid_12">
1215 <div
id=
"formValidateMainDiv" class=
"k-block k-error-colored" style=
"display:none;"></div>
1217 <div
class=
"grid_12">
1218 <div
id=
"grid"></div>
1222 <div
id=
'hideSubmitWait' style=
'position:relative; left:-2000px;top:-2000px;'>
1223 <div
id=
'homecuSubmitWait' class=
'k-block' >
1224 <div
class=
'k-loading-image'></div>
1227 <input type=
"hidden" id=
"invalidRequestClientSide">
1228 <input type=
"hidden" id=
"invalidRequestServerSide">
1230 <?php printMonitorPageBottom(); ?>