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
);
79 return block(crmStatus({start
: ts('Connecting...'), success
: ts('Connected')}, reg
));
82 $scope
.reregister = function(appMeta
) {
83 var reg
= crmApi('Cxn', 'register', {app_guid
: appMeta
.appId
}).then($scope
.refreshCxns
);
84 return block(crmStatus({start
: ts('Reconnecting...'), success
: ts('Reconnected')}, reg
));
87 $scope
.unregister = function(appMeta
) {
88 var reg
= crmApi('Cxn', 'unregister', {app_guid
: appMeta
.appId
, debug
: 1}).then($scope
.refreshCxns
);
89 return block(crmStatus({start
: ts('Disconnecting...'), success
: ts('Disconnected')}, reg
));
92 $scope
.toggleCxn
= function toggleCxn(cxn
) {
93 var is_active
= (cxn
.is_active
=="1" ? 0 : 1); // we switch the flag
94 var reg
= crmApi('Cxn', 'create', {id
: cxn
.id
, app_guid
: cxn
.app_meta
.appId
, is_active
: is_active
, debug
: 1}).then(function(){
95 cxn
.is_active
= is_active
;
97 return block(crmStatus({start
: ts('Saving...'), success
: ts('Saved')}, reg
));
100 $scope
.openLink
= function openLink(appMeta
, page
, options
) {
101 var promise
= crmApi('Cxn', 'getlink', {app_guid
: appMeta
.appId
, page_name
: page
}).then(function(result
) {
102 var mode
= result
.values
.mode
? result
.values
.mode
: 'popup';
103 switch (result
.values
.mode
) {
105 var passThrus
= ['height', 'width']; // Options influenced by remote server.
106 options
= angular
.extend(_
.pick(result
.values
, passThrus
), options
);
107 $scope
.openIframe(result
.values
.url
, options
);
110 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');
111 window
.open(result
.values
.url
, 'cxnSettings', 'resizable,scrollbars,status');
114 window
.location
= result
.values
.url
;
117 CRM
.alert(ts('Cannot open link. Unrecognized mode.'), '', 'error');
120 return block(crmStatus({start
: ts('Opening...'), success
: ''}, promise
));
123 // @param Object options -- see dialogService.open
124 $scope
.openIframe
= function openIframe(url
, options
) {
128 options
= CRM
.utils
.adjustDialogDefaults(angular
.extend(
133 title
: ts('External Link')
137 return dialogService
.open('cxnLinkDialog', '~/crmCxn/LinkDialogCtrl.html', model
, options
)
138 .then(function(item
) {
139 mailing
.msg_template_id
= item
.id
;
145 })(angular
, CRM
.$, CRM
._
);