66 */
77
88/**
9- * Form constructor for the SMS Game form.
9+ * Form constructor for an Alpha/Beta signup form.
10+ *
11+ * @param int $nid
12+ * Loaded $node that the form is being rendered on.
13+ * @param int $num_betas
14+ * Number of inputs to provide for beta numbers.
1015 */
11- function dosomething_signup_sms_game_form ($ form , &$ form_state ) {
12- global $ user ;
13- // Load user to get relevant field values as form default_values.
14- $ account = user_load ($ user ->uid );
15- $ form ['user_first_name ' ] = array (
16+ function dosomething_signup_alpha_beta_form ($ form , &$ form_state , $ node , $ num_betas = 3 ) {
17+ $ form ['nid ' ] = array (
18+ '#type ' => 'hidden ' ,
19+ '#default_value ' => $ node ->nid ,
20+ '#access ' => FALSE ,
21+ );
22+ $ form ['num_betas ' ] = array (
23+ '#type ' => 'hidden ' ,
24+ '#default_value ' => $ num_betas ,
25+ '#access ' => FALSE ,
26+ );
27+ $ form ['alpha_first_name ' ] = array (
1628 '#type ' => 'textfield ' ,
1729 '#required ' => TRUE ,
18- '#title ' => t ('First Name ' ),
19- '#default_value ' => isset ($ account ->field_first_name [LANGUAGE_NONE ][0 ]['value ' ]) ? $ account ->field_first_name [LANGUAGE_NONE ][0 ]['value ' ] : '' ,
30+ '#default_value ' => dosomething_user_get_field ('field_first_name ' ),
2031 '#attributes ' => array (
2132 'data-validate ' => 'fname ' ,
2233 'data-validate-required ' => '' ,
34+ 'placeholder ' => t ('First Name ' ),
35+ ),
36+ );
37+ $ form ['alpha_mobile ' ] = array (
38+ '#type ' => 'textfield ' ,
39+ '#required ' => TRUE ,
40+ '#default_value ' => dosomething_user_get_mobile (),
41+ '#attributes ' => array (
42+ 'data-validate ' => 'phone ' ,
43+ 'data-validate-required ' => '' ,
44+ 'placeholder ' => t ('Enter your mobile number ' ),
2345 ),
2446 );
47+ for ($ i = 0 ; $ i < $ num_betas ; $ i ++) {
48+ $ form ['beta_mobile_ ' .$ i ] = array (
49+ '#type ' => 'textfield ' ,
50+ '#attributes ' => array (
51+ 'data-validate ' => 'phone ' ,
52+ 'placeholder ' => t ('Enter someone else \'s number ' ),
53+ ),
54+ );
55+ }
2556 $ form ['actions ' ] = array (
2657 '#type ' => 'actions ' ,
2758 'submit ' => array (
@@ -31,3 +62,70 @@ function dosomething_signup_sms_game_form($form, &$form_state) {
3162 );
3263 return $ form ;
3364}
65+
66+ /**
67+ * Form validation handler for dosomething_signup_alpha_beta_form().
68+ *
69+ * Provides server-side checks for valid and duplicate numbers, cleans input format.
70+ */
71+ function dosomething_signup_alpha_beta_form_validate ($ form , &$ form_state ) {
72+ $ values = $ form_state ['values ' ];
73+ // Text to display for invalid number format.
74+ $ invalid_format_msg = t ("Please provide a valid telephone number. " );
75+ // Initialize array to store all inputted numbers, to check for duplicates.
76+ $ numbers = array ();
77+
78+ // Check if alpha is a valid number:
79+ $ alpha_value = dosomething_user_clean_mobile_number ($ values ['alpha_mobile ' ]);
80+ if (!$ alpha_value ) {
81+ form_set_error ('alpha_mobile ' , $ invalid_format_msg );
82+ }
83+ else {
84+ // Add to numbers inputted.
85+ $ numbers [] = $ alpha_value ;
86+ // Update form_state value with the clean format.
87+ $ form_state ['values ' ]['alpha_mobile ' ] = $ alpha_value ;
88+ }
89+
90+ // Loop through beta form values.
91+ for ($ i = 0 ; $ i < $ values ['num_betas ' ]; $ i ++) {
92+ $ beta = 'beta_mobile_ ' . $ i ;
93+ // If a value exists:
94+ if (!empty ($ values [$ beta ])) {
95+
96+ // Check if valid number.
97+ $ beta_value = dosomething_user_clean_mobile_number ($ values [$ beta ]);
98+ if (!$ beta_value ) {
99+ form_set_error ($ beta , $ invalid_format_msg );
100+ }
101+ // Check if the number is a duplicate value.
102+ elseif (in_array ($ beta_value , $ numbers )) {
103+ form_set_error ($ beta , t ("Hey, you entered this number already! " ));
104+ }
105+ // Else store as an inputted number to check against later.
106+ else {
107+ $ numbers [] = $ beta_value ;
108+ // Update form_state value with the clean format.
109+ $ form_state ['values ' ][$ beta ] = $ beta_value ;
110+ }
111+
112+ }
113+ }
114+ }
115+
116+ /**
117+ * Form submission handler for dosomething_signup_alpha_beta_form().
118+ *
119+ * Redirects user to the reportback confirmation page for given node.
120+ */
121+ function dosomething_signup_alpha_beta_form_submit ($ form , &$ form_state ) {
122+ $ values = $ form_state ['values ' ];
123+ $ nid = $ values ['nid ' ];
124+ if (user_is_logged_in ()) {
125+ // Create a signup.
126+ dosomething_signup_create ($ nid );
127+ }
128+ // Redirect to the reportback confirmation page.
129+ $ confirmation_path = 'node/ ' . $ values ['nid ' ] . '/confirmation ' ;
130+ $ form_state ['redirect ' ] = $ confirmation_path ;
131+ }
0 commit comments