1 <div id="tools-trunk" 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-trunks-button md-icon-button" aria-label="Go to trunks" ng-click="vm.gotoTrunks()" translate translate-attr-aria-label="TOOLS.GO_TO_TRUNKS">
7 <md-icon md-font-icon="icon-arrow-left"></md-icon>
10 <div layout="row" layout-align="start center">
12 <div ng-if="vm.trunk.userpic" class="trunk-image" hide-xs>
13 <img ng-src="api/users/{{vm.trunk.id}}/avatar">
16 <div ng-if="!vm.trunk.userpic" class="trunk-image" hide-xs>
17 <img ng-src="assets/images/business/trunks.jpg">
20 <div layout="column" layout-align="start start">
22 #{{vm.trunk.id}} {{vm.trunk.name}}
24 <div class="subtitle secondary-text">
25 <span translate="TOOLS.CREATED_AT"></span> <span>{{vm.trunk.createdAt | date:'medium'}}</span>
32 <md-button type="submit" ng-click="vm.saveTrunk()" class="send-button md-accent md-raised" ng-disabled="(generalForm.$invalid) || (advancedForm.$invalid) || (otherFieldsForm.$invalid)" translate="TOOLS.SAVE" translate-attr-aria-label="TOOLS.SAVE">
43 <md-tabs md-selected="vm.selectedTab" md-dynamic-height>
46 <span translate="TOOLS.SETTINGS">SETTINGS</span>
50 <div class="trunk-detail-form-container general md-background-bg md-whiteframe-1dp">
51 <div class="pb-16" layout="row" layout-align="start center">
52 <div class="h2 secondary-text" translate="TOOLS.GENERAL">GENERAL</div>
54 <form name="generalForm" novalidate>
55 <md-input-container class="md-block">
56 <label translate="TOOLS.NAME">Name</label>
57 <input type="text" name="name" ng-model="vm.trunk.name" ng-pattern="/^[A-Za-z0-9\.\_]+$/i" required autofocus ng-disabled="true">
58 <div ng-messages="generalForm.name.$error" ng-show="generalForm.name.$touched" role="alert">
59 <div ng-message="required">
60 <span translate="TOOLS.ERRORS.NAME_REQUIRED">Name field is required</span>
62 <div ng-message="pattern">
63 <span translate="TOOLS.ERRORS.NAME_MUST_VALID_PATTERN" translate-values="{ regex: '/^[A-Za-z0-9\.\_]+$/i' }">Name must be valid pattern </span>
67 <md-input-container class="md-block">
68 <md-switch ng-model="vm.trunk.active" aria-label="active"><span translate="TOOLS.ACTIVE">active</span></md-switch>
70 <md-input-container class="md-block">
71 <label translate="TOOLS.HOST">host</label>
72 <input type="text" name="host" ng-model="vm.trunk.host" required>
73 <div class="hint"><span translate="TOOLS.HELP.HOST"></span></div>
74 <div ng-messages="generalForm.host.$error" ng-show="generalForm.host.$touched" role="alert">
75 <div ng-message="required">
76 <span translate="TOOLS.ERRORS.HOST_REQUIRED">host field is required</span>
80 <md-input-container class="md-block">
81 <label translate="TOOLS.SECRET">secret</label>
82 <input type="password" name="secret" ng-model="vm.trunk.secret" placeholder="Password" translate translate-attr-placeholder="TOOLS.PASSWORD">
83 <div class="hint"><span translate="TOOLS.HELP.SECRET"></span></div>
84 <div ng-messages="generalForm.password.$error" role="alert">
85 <div ng-message="required">
86 <span translate="TOOLS.ERRORS.PASSWORD_REQUIRED">Password field is required</span>
90 <md-input-container class="md-block" ng-if="vm.newTrunk ">
91 <label translate="TOOLS.CONFIRM_PASSWORD">Confirm Password</label>
92 <input type="password" match-password="secret" name="confirmPassword" ng-model="confirmPassword">
93 <div class="hint"><span translate="TOOLS.HELP.SECRET"></span></div>
94 <div ng-messages="generalForm.confirmPassword.$error" role="alert" multiple>
95 <div ng-message="required">
96 <span translate="TOOLS.ERRORS.CONFIRM_REQUIRED">Confirm field is required</span>
98 <div ng-message="passwordMatch">
99 <span translate="TOOLS.ERRORS.CONFIRM_NOT_MATCH">Your password did not match</span>
102 </md-input-container>
103 <md-input-container class="md-block">
104 <label translate="TOOLS.DEFAULTUSER">defaultuser</label>
105 <input type="text" name="defaultuser" ng-model="vm.trunk.defaultuser" required>
106 <div class="hint"><span translate="TOOLS.HELP.DEFAULTUSER"></span></div>
107 <div ng-messages="generalForm.defaultuser.$error" ng-show="generalForm.defaultuser.$touched" role="alert">
108 <div ng-message="required">
109 <span translate="TOOLS.ERRORS.DEFAULTUSER_REQUIRED">defaultuser field is required</span>
112 </md-input-container>
113 <md-input-container class="md-block">
114 <label translate="TOOLS.CONTEXT">context</label>
115 <md-select ng-model="vm.trunk.context" required>
116 <md-option ng-value="context.name" ng-repeat="context in vm.contexts">{{ context.name }}</md-option>
118 <div class="hint"><span translate="TOOLS.HELP.CONTEXT"></span></div>
119 <div ng-messages="generalForm.context.$error" ng-show="generalForm.context.$touched" role="alert">
120 <div ng-message="required">
121 <span translate="TOOLS.ERRORS.CONTEXT_REQUIRED">context field is required</span>
124 </md-input-container>
125 <md-input-container class="md-block">
126 <label translate="TOOLS.CALLERID">callerid</label>
127 <input type="text" name="callerid" ng-model="vm.trunk.callerid" required>
128 <div class="hint"><span translate="TOOLS.HELP.CALLERID"></span></div>
129 <div ng-messages="generalForm.callerid.$error" ng-show="generalForm.callerid.$touched" role="alert">
130 <div ng-message="required">
131 <span translate="TOOLS.ERRORS.CALLERID_REQUIRED">callerid field is required</span>
134 </md-input-container>
135 <md-input-container class="md-block">
136 <label translate="TOOLS.TYPE">Type</label>
137 <md-select ng-model="vm.trunk.type" required>
138 <md-option ng-value="'friend'">Friend</md-option>
139 <md-option ng-value="'user'">User</md-option>
140 <md-option ng-value="'peer'">Peer</md-option>
142 <div class="hint"><span translate="TOOLS.HELP.TYPE"></span></div>
143 <div ng-messages="generalForm.type.$error" ng-show="generalForm.type.$touched" role="alert">
144 <div ng-message="required">
145 <span translate="TOOLS.ERRORS.TYPE_REQUIRED">Type field is required</span>
148 </md-input-container>
149 <md-input-container class="md-block">
150 <label translate="TOOLS.DTMFMODE">dtmfmode</label>
151 <md-select ng-model="vm.trunk.dtmfmode" required>
152 <md-option ng-value="'rfc2833'">rfc2833</md-option>
153 <md-option ng-value="'info'">info</md-option>
154 <md-option ng-value="'shortinfo'">shortinfo</md-option>
155 <md-option ng-value="'inband'">inband</md-option>
156 <md-option ng-value="'auto'">auto</md-option>
158 <div class="hint"><span translate="TOOLS.HELP.DTMFMODE"></span></div>
159 <div ng-messages="generalForm.dtmfmode.$error" ng-show="generalForm.dtmfmode.$touched" role="alert">
160 <div ng-message="required">
161 <span translate="TOOLS.ERRORS.DTMFMODE_REQUIRED">dtmfmode field is required</span>
164 </md-input-container>
165 <md-input-container class="md-block">
166 <label translate="TOOLS.NAT">nat</label>
167 <md-select ng-model="vm.trunk.nat" required multiple>
168 <md-option ng-value="'force_rport'">force_rport</md-option>
169 <md-option ng-value="'comedia'">comedia</md-option>
170 <md-option ng-value="'yes'">yes</md-option>
171 <md-option ng-value="'no'">no</md-option>
172 <md-option ng-value="'never'">never</md-option>
173 <md-option ng-value="'route'">route</md-option>
175 <div class="hint"><span translate="TOOLS.HELP.NAT"></span></div>
176 <div ng-messages="generalForm.nat.$error" ng-show="generalForm.nat.$touched" role="alert">
177 <div ng-message="required">
178 <span translate="TOOLS.ERRORS.NAT_REQUIRED">nat field is required</span>
181 </md-input-container>
182 <md-input-container class="md-block">
183 <label translate="TOOLS.QUALIFY">qualify</label>
184 <md-select ng-model="vm.trunk.qualify" required>
186 <md-option ng-value="'yes'"> {{ 'TOOLS.YES' | translate }}</md-option>
188 <md-option ng-value="'user'"> {{ 'TOOLS.NO' | translate }}</md-option>
190 <div class="hint"><span translate="TOOLS.HELP.QUALIFY"></span></div>
191 <div ng-messages="generalForm.qualify.$error" ng-show="generalForm.qualify.$touched" role="alert">
192 <div ng-message="required">
193 <span translate="TOOLS.ERRORS.QUALIFY_REQUIRED">qualify field is required</span>
196 </md-input-container>
197 <md-input-container class="md-block">
198 <label translate="TOOLS.ALLOWCODECS">AllowCodecs</label>
199 <md-select ng-model="vm.trunk.allow" required multiple>
200 <md-option ng-value="'alaw'">alaw</md-option>
201 <md-option ng-value="'ulaw'">ulaw</md-option>
202 <md-option ng-value="'gsm'">gsm</md-option>
203 <md-option ng-value="'g723'">g723</md-option>
204 <md-option ng-value="'g726'">g726</md-option>
205 <md-option ng-value="'g722'">g722</md-option>
206 <md-option ng-value="'g729'">g729</md-option>
207 <md-option ng-value="'ilbc'">ilbc</md-option>
208 <md-option ng-value="'opus'">opus</md-option>
210 <div class="hint"><span translate="TOOLS.HELP.ALLOWCODECS"></span></div>
211 <div ng-messages="generalForm.allow.$error" ng-show="generalForm.allow.$touched" role="alert">
212 <div ng-message="required">
213 <span translate="TOOLS.ERRORS.ALLOWCODECS_REQUIRED">AllowCodecs field is required</span>
216 </md-input-container>
217 <md-input-container class="md-block">
218 <label translate="TOOLS.INSECURE">insecure</label>
219 <md-select ng-model="vm.trunk.insecure" required multiple>
220 <md-option ng-value="'port'">port</md-option>
221 <md-option ng-value="'invite'">invite</md-option>
222 <md-option ng-value="'very'">very</md-option>
224 <div class="hint"><span translate="TOOLS.HELP.INSECURE"></span></div>
225 <div ng-messages="generalForm.insecure.$error" ng-show="generalForm.insecure.$touched" role="alert">
226 <div ng-message="required">
227 <span translate="TOOLS.ERRORS.INSECURE_REQUIRED">insecure field is required</span>
230 </md-input-container>
231 <md-input-container class="md-block">
232 <label translate="TOOLS.CALL_LIMIT">call_limit</label>
233 <input type="number" name="call_limit" ng-model="vm.trunk.call_limit">
234 <div class="hint"><span translate="TOOLS.HELP.CALL_LIMIT"></span></div>
235 <div ng-messages="generalForm.call_limit.$error" ng-show="generalForm.call_limit.$touched" role="alert">
236 <div ng-message="required">
237 <span translate="TOOLS.ERRORS.CALL_LIMIT_REQUIRED">call_limit field is required</span>
240 </md-input-container>
241 <md-input-container class="md-block">
242 <label translate="TOOLS.DESCRIPTION">Description</label>
243 <input type="text" name="description" ng-model="vm.trunk.description">
244 <div ng-messages="generalForm.description.$error" ng-show="generalForm.description.$touched" role="alert">
245 <div ng-message="required">
246 <span translate="TOOLS.ERRORS.DESCRIPTION_REQUIRED">Description field is required</span>
249 </md-input-container>
257 <span translate="TOOLS.ADVANCED">ADVANCED</span>
261 <div class="trunk-detail-form-container advanced md-background-bg md-whiteframe-1dp">
262 <div class="pb-16" layout="row" layout-align="start center">
263 <div class="h2 secondary-text" translate="TOOLS.ADVANCED">ADVANCED</div>
265 <form name="advancedForm" novalidate>
266 <md-input-container class="md-block">
267 <label translate="TOOLS.REGISTRY">registry</label>
268 <input type="text" name="registry" ng-model="vm.trunk.registry" autofocus>
269 <div class="hint"><span translate="TOOLS.HELP.REGISTRY"></span></div>
270 <div ng-messages="advancedForm.registry.$error" ng-show="advancedForm.registry.$touched" role="alert">
271 <div ng-message="required">
272 <span translate="TOOLS.ERRORS.REGISTRY_REQUIRED">registry field is required</span>
275 </md-input-container>
276 <md-input-container class="md-block">
277 <label translate="TOOLS.DIRECTMEDIA">directmedia</label>
278 <md-select ng-model="vm.trunk.directmedia" required>
279 <md-option ng-value="'yes'">yes</md-option>
280 <md-option ng-value="'no'">no</md-option>
281 <md-option ng-value="'nonat'">nonat</md-option>
282 <md-option ng-value="'update'">update</md-option>
284 <div class="hint"><span translate="TOOLS.HELP.DIRECTMEDIA"></span></div>
285 <div ng-messages="advancedForm.directmedia.$error" ng-show="advancedForm.directmedia.$touched" role="alert">
286 <div ng-message="required">
287 <span translate="TOOLS.ERRORS.DIRECTMEDIA_REQUIRED">directmedia field is required</span>
290 </md-input-container>
291 <md-input-container class="md-block">
292 <label translate="TOOLS.CALLCOUNTER">callcounter</label>
293 <md-select ng-model="vm.trunk.callcounter" required>
295 <md-option ng-value="'yes'"> {{ 'TOOLS.YES' | translate }}</md-option>
297 <md-option ng-value="'no'"> {{ 'TOOLS.NO' | translate }}</md-option>
299 <div class="hint"><span translate="TOOLS.HELP.CALLCOUNTER"></span></div>
300 <div ng-messages="advancedForm.callcounter.$error" ng-show="advancedForm.callcounter.$touched" role="alert">
301 <div ng-message="required">
302 <span translate="TOOLS.ERRORS.CALLCOUNTER_REQUIRED">callcounter field is required</span>
305 </md-input-container>
306 <md-input-container class="md-block">
307 <label translate="TOOLS.FROMDOMAIN">fromdomain</label>
308 <input type="text" name="fromdomain" ng-model="vm.trunk.fromdomain">
309 <div class="hint"><span translate="TOOLS.HELP.FROMDOMAIN"></span></div>
310 <div ng-messages="advancedForm.fromdomain.$error" ng-show="advancedForm.fromdomain.$touched" role="alert">
311 <div ng-message="required">
312 <span translate="TOOLS.ERRORS.FROMDOMAIN_REQUIRED">fromdomain field is required</span>
315 </md-input-container>
316 <md-input-container class="md-block">
317 <label translate="TOOLS.FROMUSER">fromuser</label>
318 <input type="text" name="fromuser" ng-model="vm.trunk.fromuser">
319 <div class="hint"><span translate="TOOLS.HELP.FROMUSER"></span></div>
320 <div ng-messages="advancedForm.fromuser.$error" ng-show="advancedForm.fromuser.$touched" role="alert">
321 <div ng-message="required">
322 <span translate="TOOLS.ERRORS.FROMUSER_REQUIRED">fromuser field is required</span>
325 </md-input-container>
326 <md-input-container class="md-block">
327 <label translate="TOOLS.OUTBOUNDPROXY">outboundproxy</label>
328 <input type="text" name="outboundproxy" ng-model="vm.trunk.outboundproxy">
329 <div class="hint"><span translate="TOOLS.HELP.OUTBOUNDPROXY"></span></div>
330 <div ng-messages="advancedForm.outboundproxy.$error" ng-show="advancedForm.outboundproxy.$touched" role="alert">
331 <div ng-message="required">
332 <span translate="TOOLS.ERRORS.OUTBOUNDPROXY_REQUIRED">outboundproxy field is required</span>
335 </md-input-container>
336 <md-input-container class="md-block">
337 <label translate="TOOLS.ADD_PHONE_TO_URI">Add_phone_to_URI</label>
338 <md-select ng-model="vm.trunk.usereqphone" required>
340 <md-option ng-value="'yes'"> {{ 'TOOLS.YES' | translate }}</md-option>
342 <md-option ng-value="'no'"> {{ 'TOOLS.NO' | translate }}</md-option>
344 <div class="hint"><span translate="TOOLS.HELP.ADD_PHONE_TO_URI"></span></div>
345 <div ng-messages="advancedForm.usereqphone.$error" ng-show="advancedForm.usereqphone.$touched" role="alert">
346 <div ng-message="required">
347 <span translate="TOOLS.ERRORS.ADD_PHONE_TO_URI_REQUIRED">Add_phone_to_URI field is required</span>
350 </md-input-container>
351 <md-input-container class="md-block">
352 <label translate="TOOLS.TRUST_REMOTE_PARTY_ID">Trust_Remote_Party_ID</label>
353 <md-select ng-model="vm.trunk.trustrpid" required>
355 <md-option ng-value="'yes'"> {{ 'TOOLS.YES' | translate }}</md-option>
357 <md-option ng-value="'no'"> {{ 'TOOLS.NO' | translate }}</md-option>
359 <div class="hint"><span translate="TOOLS.HELP.TRUST_REMOTE_PARTY_ID"></span></div>
360 <div ng-messages="advancedForm.trustrpid.$error" ng-show="advancedForm.trustrpid.$touched" role="alert">
361 <div ng-message="required">
362 <span translate="TOOLS.ERRORS.TRUST_REMOTE_PARTY_ID_REQUIRED">Trust_Remote_Party_ID field is required</span>
365 </md-input-container>
366 <md-input-container class="md-block">
367 <label translate="TOOLS.SEND_REMOTE_PARTY_ID_HEADER">Send_Remote_Party_ID_header</label>
368 <md-select ng-model="vm.trunk.sendrpid" required>
370 <md-option ng-value="'yes'"> {{ 'TOOLS.YES' | translate }}</md-option>
372 <md-option ng-value="'no'"> {{ 'TOOLS.NO' | translate }}</md-option>
374 <div class="hint"><span translate="TOOLS.HELP.SEND_REMOTE_PARTY_ID_HEADER"></span></div>
375 <div ng-messages="advancedForm.sendrpid.$error" ng-show="advancedForm.sendrpid.$touched" role="alert">
376 <div ng-message="required">
377 <span translate="TOOLS.ERRORS.SEND_REMOTE_PARTY_ID_HEADER_REQUIRED">Send_Remote_Party_ID_header field is required</span>
380 </md-input-container>
381 <md-input-container class="md-block">
382 <label translate="TOOLS.ENCRYPTION">encryption</label>
383 <md-select ng-model="vm.trunk.encryption" required>
385 <md-option ng-value="'yes'"> {{ 'TOOLS.YES' | translate }}</md-option>
387 <md-option ng-value="'no'"> {{ 'TOOLS.NO' | translate }}</md-option>
389 <div class="hint"><span translate="TOOLS.HELP.ENCRYPTION"></span></div>
390 <div ng-messages="advancedForm.encryption.$error" ng-show="advancedForm.encryption.$touched" role="alert">
391 <div ng-message="required">
392 <span translate="TOOLS.ERRORS.ENCRYPTION_REQUIRED">encryption field is required</span>
395 </md-input-container>
396 <md-input-container class="md-block">
397 <label translate="TOOLS.PORT">port</label>
398 <input type="number" name="port" ng-model="vm.trunk.port">
399 <div class="hint"><span translate="TOOLS.HELP.PORT"></span></div>
400 <div ng-messages="advancedForm.port.$error" ng-show="advancedForm.port.$touched" role="alert">
401 <div ng-message="required">
402 <span translate="TOOLS.ERRORS.PORT_REQUIRED">port field is required</span>
405 </md-input-container>
406 <md-input-container class="md-block">
407 <label translate="TOOLS.TRANSPORT">Transport</label>
408 <md-select ng-model="vm.trunk.transport" required multiple>
409 <md-option ng-value="'udp'">udp</md-option>
410 <md-option ng-value="'tcp'">tcp</md-option>
411 <md-option ng-value="'ws'">ws</md-option>
412 <md-option ng-value="'wss'">wss</md-option>
413 <md-option ng-value="'tls'">tls</md-option>
415 <div class="hint"><span translate="TOOLS.HELP.TRANSPORT"></span></div>
416 <div ng-messages="advancedForm.transport.$error" ng-show="advancedForm.transport.$touched" role="alert">
417 <div ng-message="required">
418 <span translate="TOOLS.ERRORS.TRANSPORT_REQUIRED">Transport field is required</span>
421 </md-input-container>
429 <span translate="TOOLS.OTHERFIELDS">OTHERFIELDS</span>
433 <div class="trunk-detail-form-container otherfields md-background-bg md-whiteframe-1dp">
434 <div class="pb-16" layout="row" layout-align="start center">
435 <div class="h2 secondary-text" translate="TOOLS.OTHERFIELDS">OTHERFIELDS</div>
437 <form name="otherFieldsForm" novalidate>
438 <md-input-container class="md-block">
439 <label translate="TOOLS.OTHERFIELDS">otherFields</label>
440 <textarea ng-model="vm.trunk.otherFields" md-maxlength="150" max-rows="5" autofocus></textarea>
441 <div class="hint"><span translate="TOOLS.HELP.OTHERFIELDS"></span></div>
442 </md-input-container>