1 (function(angular
, $, _
) {
3 angular
.module('crmCxn').controller('CrmCxnManageCtrl', function CrmCxnManageCtrl($scope
, apiCalls
, crmApi
, crmUiAlert
, crmBlocker
, crmStatus
, $timeout
, dialogService
) {
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'});
16 var block
= $scope
.block
= crmBlocker();
18 _
.each($scope
.alerts
, function(alert
){
19 crmUiAlert({text
: alert
.message
, title
: alert
.title
, type
: 'error'});
22 // Convert array [x] to x|null|error
23 function asOne(result
, msg
) {
24 switch (result
.length
) {
34 $scope
.findCxnByAppId = function(appId
) {
35 var result
= _
.where($scope
.cxns
, {
38 return asOne(result
, "Error: Too many connections for appId: " + appId
);
41 $scope
.findAppByAppId = function(appId
) {
42 var result
= _
.where($scope
.appMetas
, {
45 return asOne(result
, "Error: Too many apps for appId: " + appId
);
48 $scope
.hasAvailApps = function() {
49 // This should usu return after the 1st or 2nd item, but in testing with small# apps, we may exhaust the list.
50 for (var i
= 0; i
< $scope
.appMetas
.length
; i
++) {
51 if (!$scope
.findCxnByAppId($scope
.appMetas
[i
].appId
)) {
58 $scope
.refreshCxns = function() {
59 crmApi('Cxn', 'get', {sequential
: 1}).then(function(result
) {
61 $scope
.cxns
= result
.values
;
66 $scope
.register = function(appMeta
) {
67 var reg
= crmApi('Cxn', 'register', {app_guid
: appMeta
.appId
}).then($scope
.refreshCxns
);
68 return block(crmStatus({start
: ts('Connecting...'), success
: ts('Connected')}, reg
));
71 $scope
.reregister = function(appMeta
) {
72 var reg
= crmApi('Cxn', 'register', {app_guid
: appMeta
.appId
}).then($scope
.refreshCxns
);
73 return block(crmStatus({start
: ts('Reconnecting...'), success
: ts('Reconnected')}, reg
));
76 $scope
.unregister = function(appMeta
) {
77 var reg
= crmApi('Cxn', 'unregister', {app_guid
: appMeta
.appId
, debug
: 1}).then($scope
.refreshCxns
);
78 return block(crmStatus({start
: ts('Disconnecting...'), success
: ts('Disconnected')}, reg
));
81 $scope
.toggleCxn
= function toggleCxn(cxn
) {
82 var reg
= crmApi('Cxn', 'create', {id
: cxn
.id
, is_active
: !cxn
.is_active
, debug
: 1}).then(function(){
83 cxn
.is_active
= !cxn
.is_active
;
85 return block(crmStatus({start
: ts('Saving...'), success
: ts('Saved')}, reg
));
88 $scope
.openLink
= function openLink(appMeta
, page
, options
) {
89 var promise
= crmApi('Cxn', 'getlink', {app_guid
: appMeta
.appId
, page
: page
}).then(function(result
) {
90 var mode
= result
.values
.mode
? result
.values
.mode
: 'popup';
91 switch (result
.values
.mode
) {
93 var passThrus
= ['height', 'width']; // Options influenced by remote server.
94 options
= angular
.extend(_
.pick(result
.values
, passThrus
), options
);
95 $scope
.openIframe(result
.values
.url
, options
);
98 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');
99 window
.open(result
.values
.url
, 'cxnSettings', 'resizable,scrollbars,status');
102 window
.location
= result
.values
.url
;
105 CRM
.alert(ts('Cannot open link. Unrecognized mode.'), '', 'error');
108 return block(crmStatus({start
: ts('Opening...'), success
: ''}, promise
));
111 // @param Object options -- see dialogService.open
112 $scope
.openIframe
= function openIframe(url
, options
) {
116 options
= CRM
.utils
.adjustDialogDefaults(angular
.extend(
121 title
: ts('External Link')
125 return dialogService
.open('cxnLinkDialog', '~/crmCxn/LinkDialogCtrl.html', model
, options
)
126 .then(function(item
) {
127 mailing
.msg_template_id
= item
.id
;
133 })(angular
, CRM
.$, CRM
._
);