1 (function(angular
, $, _
) {
3 angular
.module('crmCxn').controller('CrmCxnManageCtrl', function CrmCxnManageCtrl($scope
, apiCalls
, crmApi
, crmUiAlert
, crmBlocker
, crmStatus
, $timeout
, dialogService
, crmCxnCheckAddr
) {
4 var ts
= $scope
.ts
= CRM
.ts(null);
5 if (apiCalls
.appMetas
.is_error
) {
7 CRM
.alert(apiCalls
.appMetas
.error_message
, ts('Application List Unavailable'), 'error');
10 $scope
.appMetas
= apiCalls
.appMetas
.values
;
12 $scope
.cxns
= apiCalls
.cxns
.values
;
13 $scope
.alerts
= _
.where(apiCalls
.sysCheck
.values
, {name
: 'checkCxnOverrides'});
15 crmCxnCheckAddr(apiCalls
.cfg
.values
.siteCallbackUrl
).then(function(response
) {
16 if (response
.valid
) return;
19 title
: ts('Internet Access Required'),
20 templateUrl
: '~/crmCxn/Connectivity.html',
22 options
: {expires
: false}
27 var block
= $scope
.block
= crmBlocker();
29 _
.each($scope
.alerts
, function(alert
){
30 crmUiAlert({text
: alert
.message
, title
: alert
.title
, type
: 'error'});
33 // Convert array [x] to x|null|error
34 function asOne(result
, msg
) {
35 switch (result
.length
) {
45 $scope
.findCxnByAppId = function(appId
) {
46 var result
= _
.where($scope
.cxns
, {
49 return asOne(result
, "Error: Too many connections for appId: " + appId
);
52 $scope
.findAppByAppId = function(appId
) {
53 var result
= _
.where($scope
.appMetas
, {
56 return asOne(result
, "Error: Too many apps for appId: " + appId
);
59 $scope
.hasAvailApps = function() {
60 // This should usu return after the 1st or 2nd item, but in testing with small# apps, we may exhaust the list.
61 for (var i
= 0; i
< $scope
.appMetas
.length
; i
++) {
62 if (!$scope
.findCxnByAppId($scope
.appMetas
[i
].appId
)) {
69 $scope
.refreshCxns = function() {
70 crmApi('Cxn', 'get', {sequential
: 1}).then(function(result
) {
72 $scope
.cxns
= result
.values
;
77 $scope
.register = function(appMeta
) {
78 var reg
= crmApi('Cxn', 'register', {app_guid
: appMeta
.appId
}).then($scope
.refreshCxns
).then(function() {
79 if (appMeta
.links
.welcome
) {
80 return $scope
.openLink(appMeta
, 'welcome', {title
: ts('%1: Welcome (External)', {1: appMeta
.title
})});
83 return block(crmStatus({start
: ts('Connecting...'), success
: ts('Connected')}, reg
));
86 $scope
.reregister = function(appMeta
) {
87 var reg
= crmApi('Cxn', 'register', {app_guid
: appMeta
.appId
}).then($scope
.refreshCxns
).then(function() {
88 if (appMeta
.links
.welcome
) {
89 return $scope
.openLink(appMeta
, 'welcome', {title
: ts('%1: Welcome (External)', {1: appMeta
.title
})});
92 return block(crmStatus({start
: ts('Reconnecting...'), success
: ts('Reconnected')}, reg
));
95 $scope
.unregister = function(appMeta
) {
96 var reg
= crmApi('Cxn', 'unregister', {app_guid
: appMeta
.appId
, debug
: 1}).then($scope
.refreshCxns
);
97 return block(crmStatus({start
: ts('Disconnecting...'), success
: ts('Disconnected')}, reg
));
100 $scope
.toggleCxn
= function toggleCxn(cxn
) {
101 var is_active
= (cxn
.is_active
=="1" ? 0 : 1); // we switch the flag
102 var reg
= crmApi('Cxn', 'create', {id
: cxn
.id
, app_guid
: cxn
.app_meta
.appId
, is_active
: is_active
, debug
: 1}).then(function(){
103 cxn
.is_active
= is_active
;
105 return block(crmStatus({start
: ts('Saving...'), success
: ts('Saved')}, reg
));
108 $scope
.openLink
= function openLink(appMeta
, page
, options
) {
109 var promise
= crmApi('Cxn', 'getlink', {app_guid
: appMeta
.appId
, page_name
: page
}).then(function(result
) {
110 var mode
= result
.values
.mode
? result
.values
.mode
: 'popup';
111 switch (result
.values
.mode
) {
113 var passThrus
= ['height', 'width']; // Options influenced by remote server.
114 options
= angular
.extend(_
.pick(result
.values
, passThrus
), options
);
115 $scope
.openIframe(result
.values
.url
, options
);
118 CRM
.alert(ts('The page "%1" will open in a popup. If it does not appear automatically, check your browser for notifications.', {1: options
.title
}), '', 'info');
119 window
.open(result
.values
.url
, 'cxnSettings', 'resizable,scrollbars,status');
122 window
.location
= result
.values
.url
;
125 CRM
.alert(ts('Cannot open link. Unrecognized mode.'), '', 'error');
128 return block(crmStatus({start
: ts('Opening...'), success
: ''}, promise
));
131 // @param Object options -- see dialogService.open
132 $scope
.openIframe
= function openIframe(url
, options
) {
136 options
= CRM
.utils
.adjustDialogDefaults(angular
.extend(
141 title
: ts('External Link')
145 return dialogService
.open('cxnLinkDialog', '~/crmCxn/LinkDialogCtrl.html', model
, options
)
146 .then(function(item
) {
147 mailing
.msg_template_id
= item
.id
;
153 })(angular
, CRM
.$, CRM
._
);