1 <div id="sms-smsAccount" class="page-layout simple tabbed" layout="column">
4 <div class="header md-accent-bg" layout="row" layout-align="start center">
5 <div class="white-fg" layout="row" layout-align="start center" flex>
6 <md-button class="goto-smsAccounts-button md-icon-button" aria-label="Go to smsAccounts" ng-click="vm.gotoSmsAccounts()" translate translate-attr-aria-label="SMS.GO_TO_SMSACCOUNTS">
7 <md-icon md-font-icon="icon-arrow-left"></md-icon>
10 <div layout="row" layout-align="start center">
12 <div ng-if="vm.smsAccount.userpic" class="smsAccount-image" hide-xs>
13 <img ng-src="api/users/{{vm.smsAccount.id}}/avatar">
16 <div ng-if="!vm.smsAccount.userpic" class="smsAccount-image" hide-xs>
17 <img ng-src="assets/images/business/smsAccounts.jpg">
20 <div layout="column" layout-align="start start">
22 #{{vm.smsAccount.id}} {{vm.smsAccount.name}}
24 <div class="subtitle secondary-text">
25 <span translate="SMS.CREATED_AT"></span> <span>{{vm.smsAccount.createdAt | date:'medium'}}</span>
32 <md-button type="submit" ng-click="vm.saveSmsAccount()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (apiForm.$invalid) || (smsDispositionsForm.$invalid) || (acceptForm.$invalid) || (rejectForm.$invalid) || (closeForm.$invalid) || (actionsForm.$invalid)"
33 translate="SMS.SAVE" translate-attr-aria-label="SMS.SAVE">
44 <md-tabs md-selected="vm.selectedTab" md-dynamic-height>
47 <span translate="SMS.SETTINGS">SETTINGS</span>
51 <div class="smsAccount-detail-form-container general md-background-bg md-whiteframe-1dp">
52 <div class="pb-16" layout="row" layout-align="start center">
53 <div class="h2 secondary-text" translate="SMS.GENERAL">GENERAL</div>
55 <form name="generalForm" novalidate>
56 <md-input-container class="md-block">
57 <label translate="SMS.NAME">Name</label>
58 <input type="text" name="name" ng-model="vm.smsAccount.name" required md-autofocus>
59 <div ng-messages="generalForm.name.$error" ng-show="generalForm.name.$touched" role="alert">
60 <div ng-message="required">
61 <span translate="SMS.ERRORS.NAME_REQUIRED">Name field is required</span>
65 <md-input-container class="md-block">
66 <label translate="SMS.LIST">List</label>
67 <md-select ng-model="vm.smsAccount.ListId">
68 <md-option ng-value="ListId.id" ng-repeat="ListId in vm.lists">{{ ListId.name }}</md-option>
70 <div ng-messages="generalForm.ListId.$error" ng-show="generalForm.ListId.$touched" role="alert">
71 <div ng-message="required">
72 <span translate="SMS.ERRORS.LIST_REQUIRED">List field is required</span>
76 <md-input-container class="md-block">
77 <md-switch ng-model="vm.smsAccount.fidelity" aria-label="fidelity"><span translate="SMS.FIDELITY">fidelity</span></md-switch>
79 <md-input-container ng-if="vm.smsAccount.fidelity" class="md-block">
80 <label translate="SMS.TIMEOUT">Timeout</label>
81 <input type="number" name="timeout" ng-model="vm.smsAccount.timeout" required>
82 <div ng-messages="generalForm.timeout.$error" ng-show="generalForm.timeout.$touched" role="alert">
83 <div ng-message="required">
84 <span translate="SMS.ERRORS.TIMEOUT_REQUIRED">Timeout field is required</span>
88 <md-input-container class="md-block">
89 <label translate="SMS.TYPE">Type</label>
90 <md-select ng-model="vm.smsAccount.type" required>
91 <md-option ng-value="'twilio'">Twilio</md-option>
92 <md-option ng-value="'skebby'">Skebby</md-option>
94 <div ng-messages="generalForm.type.$error" ng-show="generalForm.type.$touched" role="alert">
95 <div ng-message="required">
96 <span translate="SMS.ERRORS.TYPE_REQUIRED">Type field is required</span>
100 <md-input-container ng-if="vm.smsAccount.type == 'skebby'" class="md-block">
101 <label translate="SMS.SMSTYPE">smstype</label>
102 <md-select ng-model="vm.smsAccount.smstype" required>
103 <md-option ng-value="'basic'">Basic</md-option>
104 <md-option ng-value="'classic'">Classic</md-option>
105 <md-option ng-value="'classic+'">Classic+</md-option>
107 <div ng-messages="generalForm.smstype.$error" ng-show="generalForm.smstype.$touched" role="alert">
108 <div ng-message="required">
109 <span translate="SMS.ERRORS.SMSTYPE_REQUIRED">smstype field is required</span>
112 </md-input-container>
113 <md-input-container class="md-block">
114 <label translate="SMS.PHONE">phone</label>
115 <input type="text" name="phone" ng-model="vm.smsAccount.phone" required>
116 <div ng-messages="generalForm.phone.$error" ng-show="generalForm.phone.$touched" role="alert">
117 <div ng-message="required">
118 <span translate="SMS.ERRORS.PHONE_REQUIRED">phone field is required</span>
121 </md-input-container>
122 <md-input-container ng-if="vm.smsAccount.type == 'twilio'" class="md-block">
123 <label translate="SMS.SID">sid</label>
124 <input type="text" name="sid" ng-model="vm.smsAccount.sid" required>
125 <div ng-messages="generalForm.sid.$error" ng-show="generalForm.sid.$touched" role="alert">
126 <div ng-message="required">
127 <span translate="SMS.ERRORS.SID_REQUIRED">sid field is required</span>
130 </md-input-container>
131 <md-input-container ng-if="vm.smsAccount.type == 'twilio'" class="md-block">
132 <label translate="SMS.TOKEN">token</label>
133 <input type="text" name="token" ng-model="vm.smsAccount.token" required>
134 <div ng-messages="generalForm.token.$error" ng-show="generalForm.token.$touched" role="alert">
135 <div ng-message="required">
136 <span translate="SMS.ERRORS.TOKEN_REQUIRED">token field is required</span>
139 </md-input-container>
140 <md-input-container ng-if="vm.smsAccount.type == 'skebby'" class="md-block">
141 <label translate="SMS.USERNAME">username</label>
142 <input type="text" name="username" ng-model="vm.smsAccount.username" required>
143 <div ng-messages="generalForm.username.$error" ng-show="generalForm.username.$touched" role="alert">
144 <div ng-message="required">
145 <span translate="SMS.ERRORS.USERNAME_REQUIRED">username field is required</span>
148 </md-input-container>
149 <md-input-container class="md-block" ng-if="vm.smsAccount.type == 'skebby'">
150 <label translate="SMS.PASSWORD">password</label>
151 <input type="password" name="password" ng-model="vm.smsAccount.password" placeholder="Password" translate translate-attr-placeholder="SMS.PASSWORD" required>
152 <div ng-messages="generalForm.password.$error" role="alert">
153 <div ng-message="required">
154 <span translate="SMS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>
157 </md-input-container>
158 <md-input-container class="md-block" ng-if="vm.newSmsAccount && vm.smsAccount.type == 'skebby'">
159 <label translate="SMS.CONFIRM_PASSWORD">Confirm Password</label>
160 <input type="password" match-password="password" name="confirmPassword" ng-model="confirmPassword">
161 <div ng-messages="generalForm.confirmPassword.$error" role="alert" multiple>
162 <div ng-message="required">
163 <span translate="SMS.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>
165 <div ng-message="passwordMatch">
166 <span translate="SMS.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>
169 </md-input-container>
170 <md-input-container class="md-block">
171 <label translate="SMS.MOTIONADDRESS">motionaddress</label>
172 <input type="url" name="remote" ng-model="vm.smsAccount.remote" required>
173 <div ng-messages="generalForm.remote.$error" ng-show="generalForm.remote.$touched" role="alert">
174 <div ng-message="required">
175 <span translate="SMS.ERRORS.MOTIONADDRESS_REQUIRED">motionaddress field is required</span>
177 <div ng-message="url">
178 <span translate="SMS.ERRORS.MOTIONADDRESS_MUST_VALID_URL">motionaddress must be a valid url http://www.xcally.com</span>
181 </md-input-container>
182 <md-input-container class="md-block">
183 <label translate="SMS.DESCRIPTION">Description</label>
184 <input type="text" name="description" ng-model="vm.smsAccount.description">
185 <div ng-messages="generalForm.description.$error" ng-show="generalForm.description.$touched" role="alert">
186 <div ng-message="required">
187 <span translate="SMS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>
190 </md-input-container>
198 <span translate="SMS.API">API</span>
202 <div class="smsAccount-detail-form-container api md-background-bg md-whiteframe-1dp">
203 <div class="pb-16" layout="row" layout-align="start center">
204 <div class="h2 secondary-text" translate="SMS.API">API</div>
206 <form name="apiForm" novalidate>
214 <span translate="SMS.DISPOSITIONS">DISPOSITIONS</span>
218 <div class="smsAccount-detail-form-container smsdispositions md-background-bg md-whiteframe-1dp">
219 <div ng-controller="SmsAccountSmsDispositionsController as vm_dc" ng-init="vm_dc.init(vm.smsAccount)">
220 <md-toolbar class="md-table-toolbar md-default" ng-hide="vm_dc.selectedSmsAccountSmsDispositions.length">
221 <div class="md-toolbar-tools">
222 <span class="md-subhead" translate="SMS.SMSDISPOSITIONS">SmsDispositions</span>
224 <ms-search-bar on-search="vm_dc.query.filter = query" on-collapse="vm_dc.query.filter = undefined" debounce="300"></ms-search-bar>
225 <md-button class="md-icon-button" ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event)" aria-label="add smsDisposition" translate translate-attr-label="SMS.ADD_SMSDISPOSITION">
226 <md-icon md-font-icon="icon-plus"></md-icon>
230 <md-toolbar class="md-table-toolbar md-accent" ng-show="vm_dc.selectedSmsAccountSmsDispositions.length">
231 <div class="md-toolbar-tools">
232 <span class="md-subhead">{{vm_dc.selectedSmsAccountSmsDispositions.length}} {{vm_dc.selectedSmsAccountSmsDispositions.length > 1 ? 'items' : 'item'}} selected</span>
234 <md-button class="md-icon-button" ng-click="vm_dc.deleteSelectedSmsAccountSmsDispositions($event)" aria-label="delete selected" translate translate-attr-label="SMSACCOUNTS.DELETE_SELECTED">
235 <md-icon md-font-icon="icon-delete"></md-icon>
240 <table md-table md-row-select multiple ng-model="vm_dc.selectedSmsAccountSmsDispositions" md-progress="vm_dc.promise">
241 <thead md-head md-order="vm_dc.query.sort" md-on-reorder="vm_dc.getSmsAccountSmsDispositions">
243 <th md-column md-order-by="id">{{ 'SMS.ID' | translate }}</th>
244 <th md-column md-order-by="name">{{ 'SMS.NAME' | translate }}</th>
245 <th md-column md-order-by="createdAt">{{ 'SMS.CREATED_AT' | translate }}</th>
246 <th md-column width="10px"></th>
250 <tr md-row md-select="smsDisposition" md-select-id="id" ng-repeat="smsDisposition in vm_dc.smsAccountSmsDispositions.rows">
251 <td ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event, smsDisposition)" md-cell>{{smsDisposition.id}}</td>
252 <td ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event, smsDisposition)" md-cell>{{smsDisposition.name}}</td>
253 <td ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event, smsDisposition)" md-cell>{{smsDisposition.createdAt | date:'medium'}}</td>
254 <td md-cell class="actions">
256 <md-button class="md-icon-button" aria-label="More" translate translate-attr-aria-label="SMS.MORE">
257 <md-icon md-font-icon="icon-dots-vertical" ng-click="$mdOpenMenu($event)"></md-icon>
260 <md-menu-content width="3">
262 <md-button ng-click="vm_dc.createOrEditSmsAccountSmsDisposition($event, smsDisposition)" translate="SMS.EDIT_SMSDISPOSITION">
267 <md-button ng-click="vm_dc.deleteConfirm(smsDisposition, $event)" translate="SMS.DELETE_SMSDISPOSITION">
268 Delete SmsDisposition
275 <tr md-row ng-if="!vm_dc.smsAccountSmsDispositions.rows.length">
276 <td md-cell colspan="5">
277 <span class="text-boxed-ligth" translate="SMS.NO_SMSDISPOSITION_AVAILABLE">No smsdisposition available</span>
282 </md-table-container>
283 <md-table-pagination md-limit="vm_dc.query.limit" md-limit-options="[10, 15, 20]" md-page="vm_dc.query.page" md-total="{{vm_dc.smsAccountSmsDispositions.count}}" md-on-paginate="vm_dc.getSmsAccountSmsDispositions" md-page-select></md-table-pagination>
291 <span translate="SMS.WEBHOOKS">WEBHOOKS</span>
295 <div class="smsAccount-detail-form-container accept md-background-bg md-whiteframe-1dp">
296 <div class="pb-16" layout="row" layout-align="start center">
297 <div class="h2 secondary-text" translate="SMS.ACCEPT">ACCEPT</div>
299 <form name="acceptForm" novalidate>
300 <md-input-container class="md-block">
301 <label translate="SMS.ACCEPTMETHOD">acceptMethod</label>
302 <md-select ng-model="vm.smsAccount.acceptMethod" md-autofocus>
303 <md-option ng-value="'GET'">HTTP GET</md-option>
304 <md-option ng-value="'POST'">HTTP POST</md-option>
306 <div ng-messages="acceptForm.acceptMethod.$error" ng-show="acceptForm.acceptMethod.$touched" role="alert">
307 <div ng-message="required">
308 <span translate="SMS.ERRORS.ACCEPTMETHOD_REQUIRED">acceptMethod field is required</span>
311 </md-input-container>
312 <md-input-container class="md-block">
313 <label translate="SMS.ACCEPTURL">acceptUrl</label>
314 <input type="url" name="acceptUrl" ng-model="vm.smsAccount.acceptUrl">
315 <div ng-messages="acceptForm.acceptUrl.$error" ng-show="acceptForm.acceptUrl.$touched" role="alert">
316 <div ng-message="required">
317 <span translate="SMS.ERRORS.ACCEPTURL_REQUIRED">acceptUrl field is required</span>
319 <div ng-message="url">
320 <span translate="SMS.ERRORS.ACCEPTURL_MUST_VALID_URL">acceptUrl must be a valid url http://www.xcally.com</span>
323 </md-input-container>
327 <div class="smsAccount-detail-form-container reject md-background-bg md-whiteframe-1dp">
328 <div class="pb-16" layout="row" layout-align="start center">
329 <div class="h2 secondary-text" translate="SMS.REJECT">REJECT</div>
331 <form name="rejectForm" novalidate>
332 <md-input-container class="md-block">
333 <label translate="SMS.REJECTMETHOD">rejectMethod</label>
334 <md-select ng-model="vm.smsAccount.rejectMethod" md-autofocus>
335 <md-option ng-value="'GET'">HTTP GET</md-option>
336 <md-option ng-value="'POST'">HTTP POST</md-option>
338 <div ng-messages="rejectForm.rejectMethod.$error" ng-show="rejectForm.rejectMethod.$touched" role="alert">
339 <div ng-message="required">
340 <span translate="SMS.ERRORS.REJECTMETHOD_REQUIRED">rejectMethod field is required</span>
343 </md-input-container>
344 <md-input-container class="md-block">
345 <label translate="SMS.REJECTURL">rejectUrl</label>
346 <input type="url" name="rejectUrl" ng-model="vm.smsAccount.rejectUrl">
347 <div ng-messages="rejectForm.rejectUrl.$error" ng-show="rejectForm.rejectUrl.$touched" role="alert">
348 <div ng-message="required">
349 <span translate="SMS.ERRORS.REJECTURL_REQUIRED">rejectUrl field is required</span>
351 <div ng-message="url">
352 <span translate="SMS.ERRORS.REJECTURL_MUST_VALID_URL">rejectUrl must be a valid url http://www.xcally.com</span>
355 </md-input-container>
359 <div class="smsAccount-detail-form-container close md-background-bg md-whiteframe-1dp">
360 <div class="pb-16" layout="row" layout-align="start center">
361 <div class="h2 secondary-text" translate="SMS.CLOSE">CLOSE</div>
363 <form name="closeForm" novalidate>
364 <md-input-container class="md-block">
365 <label translate="SMS.CLOSEMETHOD">closeMethod</label>
366 <md-select ng-model="vm.smsAccount.closeMethod" md-autofocus>
367 <md-option ng-value="'GET'">HTTP GET</md-option>
368 <md-option ng-value="'POST'">HTTP POST</md-option>
370 <div ng-messages="closeForm.closeMethod.$error" ng-show="closeForm.closeMethod.$touched" role="alert">
371 <div ng-message="required">
372 <span translate="SMS.ERRORS.CLOSEMETHOD_REQUIRED">closeMethod field is required</span>
375 </md-input-container>
376 <md-input-container class="md-block">
377 <label translate="SMS.CLOSEURL">closeUrl</label>
378 <input type="url" name="closeUrl" ng-model="vm.smsAccount.closeUrl">
379 <div ng-messages="closeForm.closeUrl.$error" ng-show="closeForm.closeUrl.$touched" role="alert">
380 <div ng-message="required">
381 <span translate="SMS.ERRORS.CLOSEURL_REQUIRED">closeUrl field is required</span>
383 <div ng-message="url">
384 <span translate="SMS.ERRORS.CLOSEURL_MUST_VALID_URL">closeUrl must be a valid url http://www.xcally.com</span>
387 </md-input-container>
395 <span translate="SMS.ACTIONS">ACTIONS</span>
399 <div class="smsAccount-detail-form-container actions md-background-bg md-whiteframe-1dp">
400 <div class="pb-16" layout="row" layout-align="start center">
401 <div class="h2 secondary-text" translate="SMS.ACTIONS">ACTIONS</div>
403 <form name="actionsForm" novalidate>