Commit da109d370d8ed086937f13219286ea74bca7eb1d
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
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 |