Commit da109d370d8ed086937f13219286ea74bca7eb1d

Authored by OpenWapp Developer
1 parent 70f26442c1

Rely on the server to validate and normalize the number to be registered.

Showing 4 changed files with 51 additions and 48 deletions

app/scripts/localisations/translation.js View file @ da109d3
... ... @@ -24,8 +24,9 @@
24 24 oldAppAlert: 'Esta versión no está soportada. Por favor, actualícela ' +
25 25 'en el Firefox Marketplace para disfrutar de la nueva funcionalidad.',
26 26 selectCountryAlert: 'Por favor, seleccione un país.',
27   - movilNumberValidationAlert: 'El número de móvil no es válido.\n' +
28   - 'Por favor, compruébelo y vuelva a intentarlo.',
  27 + movilNumberValidationAlert: 'El número de móvil:\n' +
  28 + '+{{prefix}} {{number}}\nno parece un número de {{country}} válido.\n ' +
  29 + '¿Quieres seguir de todas formas?',
29 30 registerErrorObjectAlert: 'Se ha producido un error al registrar su ' +
30 31 'número de móvil.\n Por favor, compruebe su conectividad.',
31 32 registerError429Alert: 'Se ha producido un error al registrar su ' +
... ... @@ -193,8 +194,9 @@
193 194 oldAppAlert: 'This version is not supported. Please update it ' +
194 195 'from the Firefox Marketplace to enjoy new functionality.',
195 196 selectCountryAlert: 'Please select a country.',
196   - movilNumberValidationAlert: 'Your phone number is not valid.\n' +
197   - 'Please check it and try again.',
  197 + movilNumberValidationAlert: 'The mobile number:\n' +
  198 + '+{{prefix}} {{number}}\ndoes not seem a valid number from ' +
  199 + '{{country}}.\nDo you want to continue in any case?',
198 200 registerErrorObjectAlert: 'There was an error registering ' +
199 201 'your number.\n Please check your connectivity settings.',
200 202 registerError429Alert: 'There was an error registering your number.\n' +
... ... @@ -364,8 +366,9 @@
364 366 oldAppAlert: 'Esta versão não está suportada. Favor atualizar ' +
365 367 'no Firefox Marketplace para aproveitar a nova funcionalidade.',
366 368 selectCountryAlert: 'Por favor, selecione um país.',
367   - movilNumberValidationAlert: 'O número de telefone não é válido.\n' +
368   - 'Por favor, verifique e tente novamente.',
  369 + movilNumberValidationAlert: 'O número de celular:\n' +
  370 + '+{{prefix}} {{number}}\nnão parece um número válido de {{country}}.\n ' +
  371 + 'De qualquer forma, você quer continuar?',
369 372 registerErrorObjectAlert: 'Houve um erro ao cadastrar' +
370 373 'seu número.\n Por favor, verifique sua conexão.',
371 374 registerError429Alert: 'Houve um erro ao cadastrar ' +
... ... @@ -534,8 +537,9 @@
534 537 oldAppAlert: 'Esta versão não está suportada. Favor atualizar ' +
535 538 'no Firefox Marketplace para aproveitar a nova funcionalidade.',
536 539 selectCountryAlert: 'Por favor, selecione um país.',
537   - movilNumberValidationAlert: 'O número de telefone não é válido.\n' +
538   - 'Por favor, verifique e tente novamente.',
  540 + movilNumberValidationAlert: 'O número de celular:\n' +
  541 + '+{{prefix}} {{number}}\nnão parece um número válido de {{country}}.\n ' +
  542 + 'De qualquer forma, você quer continuar?',
539 543 registerErrorObjectAlert: 'Houve um erro ao cadastrar' +
540 544 'seu número.\n Por favor, verifique sua conexão.',
541 545 registerError429Alert: 'Houve um erro ao cadastrar ' +
app/scripts/utils/contact-picker.js View file @ da109d3
... ... @@ -22,7 +22,7 @@
22 22 function (err, details) {
23 23  
24 24 var contact = new Contact({
25   - 'displayName': activityContact.name[0] || '',
  25 + 'displayName': activityContact.name[0] || ''
26 26 });
27 27  
28 28 if (err) {
app/scripts/views/login.js View file @ da109d3
... ... @@ -28,7 +28,7 @@
28 28  
29 29 events: {
30 30 'submit #register': 'gotoConfirmation',
31   - 'submit #register-conf': 'validate',
  31 + 'submit #register-conf': 'register',
32 32 'click button': 'goToValidate',
33 33 'click .btn-back': 'back',
34 34 'change select': 'setCountryPrefix',
35 35  
36 36  
37 37  
38 38  
39 39  
40 40  
41 41  
42 42  
43 43  
44 44  
45 45  
46 46  
... ... @@ -126,59 +126,52 @@
126 126  
127 127 gotoConfirmation: function (evt) {
128 128 evt.preventDefault();
129   - var country = $(evt.target).find('select').val();
130   - var number = $(evt.target).find('input[name=msisdn]').val();
  129 + var countryCode = $(evt.target).find('select').val();
  130 + var phoneParts = this._getPhoneParts();
131 131  
132   - var international = this.checkPhoneNumber(number, country);
133   - if (!international) {
  132 + var isValid = this._checkPhoneNumber(phoneParts, countryCode);
  133 + if (!isValid) {
134 134 return;
135 135 }
136 136  
137 137 var $confirmationForm = this.$el.find('#register-conf');
138   - $confirmationForm.find('input[name=msisdn]').val(number);
  138 + $confirmationForm.find('input[name=msisdn]').val(phoneParts.number);
139 139 this.next('confirmation');
140 140 },
141 141  
142 142 goToValidate: function (evt) {
143 143 evt.preventDefault();
144   - var international = this._getInternational('#confirm-phone-page');
145   - if (!international) {
146   - return;
147   - }
148 144  
149   - var countryCode = this.getCountryCode(international);
150   - var phoneNumber = international.national;
151   -
  145 + var phoneParts = this._getPhoneParts('#confirm-phone-page');
152 146 global.router.navigate(
153   - 'validate/' + phoneNumber + '/' + countryCode,
  147 + 'validate/' + phoneParts.number + '/' + phoneParts.prefix,
154 148 { trigger: true }
155 149 );
156 150 },
157 151  
158   - _getInternational: function (pageId) {
  152 + _getPhoneParts: function (pageId) {
159 153 pageId = pageId || '#login-page';
160   - var country = this.$el.find('select').val();
  154 + var code = this.$el.find('select').val();
  155 + var country = this.countryTables.findWhere({ code: code });
  156 + var prefix = country.get('prefix').substr(1);
161 157 var number = this.$el.find(pageId + ' input[name=msisdn]').val();
162   - return this.checkPhoneNumber(number, country);
  158 + return { prefix: prefix, number: number, complete: prefix + number };
163 159 },
164 160  
165   - validate: function (evt) {
  161 + register: function (evt) {
166 162 var _this = this;
167 163 evt.preventDefault();
168 164  
169   - var international = this._getInternational('#confirm-phone-page');
170   - if (!international) {
171   - return;
172   - }
173   -
174 165 this.$el.find('section.intro > p').hide();
175 166 this.toggleSpinner();
176 167  
177   - var countryCode = this.getCountryCode(international);
178   - var phoneNumber = international.national;
  168 + var phoneParts = this._getPhoneParts('#confirm-phone-page');
  169 + var countryCode = phoneParts.prefix;
  170 + var phoneNumber = phoneParts.number;
179 171  
180 172 // TODO: Get locale from the i18n object (or from the phone number)
181 173 localStorage.removeItem('isPinSent');
  174 + phoneNumber = phoneNumber.replace(/[^\d]/g, '');
182 175 global.auth.register(countryCode, phoneNumber, 'es-ES',
183 176 function (err, details) {
184 177 _this.toggleSpinner();
185 178  
186 179  
187 180  
188 181  
... ... @@ -201,33 +194,34 @@
201 194 }
202 195 }
203 196 );
204   -
205 197 },
206 198  
207   - getCountryCode: function (international) {
208   - var prefixLength =
209   - international.full.length - international.national.length;
210   - return international.full.substr(0, prefixLength);
211   - },
212   -
213   - checkPhoneNumber: function (number, country) {
  199 + _checkPhoneNumber: function (parts, country) {
214 200 if (!country) {
215 201 window.alert(global.localisation[global.language].selectCountryAlert);
216 202 return;
217 203 }
218 204  
219   - var international = PhoneNumber.parse(number, country);
  205 + var international = PhoneNumber.parse(parts.complete, country);
220 206  
221 207 // show error if cannot parse number or parsed country is different.
222 208 // PhoneNumber always change the country to uppercase, so
223 209 // we should also for this check to work
224 210 country = country.toUpperCase();
225 211 if (!international || country !== international.region) {
226   - window.alert(global.localisation[global.language]
227   - .movilNumberValidationAlert);
228   - return;
  212 + var countrySelect = this.$el.find('select')[0];
  213 + var countryName =
  214 + countrySelect.options[countrySelect.selectedIndex].textContent;
  215 + var message =
  216 + global.localisation[global.language].movilNumberValidationAlert;
  217 + var interpolate = global.l10nUtils.interpolate;
  218 + return window.confirm(interpolate(message, {
  219 + country: countryName,
  220 + number: parts.number,
  221 + prefix: parts.prefix
  222 + }));
229 223 }
230   - return international;
  224 + return true;
231 225 },
232 226  
233 227 next: function (nextPage) {
app/scripts/views/validate.js View file @ da109d3
... ... @@ -15,9 +15,14 @@
15 15 template: templates.validate,
16 16  
17 17 render: function () {
  18 + var internationalNumber;
18 19 var fullNumber = this.options.countryCode + this.options.phoneNumber;
19 20 this.$el.removeClass().addClass('page validate');
20   - var internationalNumber = PhoneNumber.format(fullNumber);
  21 + try {
  22 + internationalNumber = PhoneNumber.format(fullNumber);
  23 + } catch (e) {
  24 + internationalNumber = fullNumber;
  25 + }
21 26 this.$el.html(this.template({ phoneNumber: internationalNumber }));
22 27 },
23 28