public function registerUser($username, $password, $email) { /* * Perform validation and create all required entries for new user in database * * Input: $password is in plaintext * Ouput: ["result" => true, "userid" => {userid}, "passhash" => {passhash}] if successful * ["result" => false, "error" => {error message}] if not successful */ // Perform check that username/email is not already taken // and password is valid (not empty) $userDAO = new UserDAO(); if ($userDAO->checkUsernameExists($username)) { return ["result" => false, "error" => "Username is already in use."]; } if ($userDAO->checkEmailExists($email)) { return ["result" => false, "error" => "Email is already in use."]; } if (empty($password)) { return ["result" => false, "error" => "Password should be non-empty"]; } $password_encrypted = password_hash($password, PASSWORD_DEFAULT); //return newly-created userID (null if unsuccessful) $userid = $userDAO->addUser($username, $password_encrypted, $email); //initialize empty row in userdata, userprefs, and userrecords table $userdataSuccess = $userDAO->initializeUserData($userid); $userprefsSuccess = $userDAO->initializeUserPrefs($userid); $userrecordsSuccess = $userDAO->initializeUserRecords($userid); //add email to MailChimp list $MailChimp = initialize_mailchimp(); mailchimp_subscribe($_POST['email'], $MailChimp); //check if user added successfully $add_member = !is_null($userid) && $userdataSuccess && $userprefsSuccess && $userrecordsSuccess; if ($add_member) { return ["result" => true, "userid" => $userid, "passhash" => $password_encrypted]; } else { return ["result" => false, "error" => "Database error: Could not successfully create user"]; } }
/** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { global $base_url; $list_details = mailchimp_get_lists($this->signup->mc_lists); $subscribe_lists = array(); // Filter out blank fields so we don't erase values on the Mailchimp side. $merge_values = array_filter($form_state->getValue('mergevars')); $email = $merge_values['EMAIL']; $mailchimp_lists = $form_state->getValue('mailchimp_lists'); // If we only have one list we won't have checkbox values to investigate. if (count(array_filter($this->signup->mc_lists)) == 1) { $subscribe_lists[0] = array( 'subscribe' => reset($this->signup->mc_lists), 'interest_groups' => isset($mailchimp_lists['interest_groups']) ? $mailchimp_lists['interest_groups'] : NULL, ); } else { // We can look at the checkbox values now. foreach ($mailchimp_lists as $list) { if ($list['subscribe']) { $subscribe_lists[] = $list; } } } $successes = array(); // Loop through the selected lists and try to subscribe. foreach ($subscribe_lists as $list_choices) { $list_id = $list_choices['subscribe']; $mergevars = $merge_values; if (isset($list_choices['interest_groups'])) { $mergevars['GROUPINGS'] = mailchimp_reformat_groupings($list_choices['interest_groups']); } $result = mailchimp_subscribe($list_id, $email, $mergevars, $this->signup->settings['doublein'], $this->signup->settings['send_welcome']); if (empty($result)) { drupal_set_message(t('There was a problem with your newsletter signup to %list.', array( '%list' => $list_details[$list_id]['name'], )), 'warning'); } else { $successes[] = $list_details[$list_id]['name']; } } if (count($successes) && strlen($this->signup->settings['confirmation_message'])) { drupal_set_message($this->signup->settings['confirmation_message'], 'status'); } $destination_url = Url::fromUri($base_url . '/' . $this->signup->settings['destination']); $form_state->setRedirectUrl($destination_url); }
/** * Tests unsubscribing a member from a list. */ public function testUnsubscribe() { $list_id = DrupalMailchimpLists::TEST_LIST_A; $email = '*****@*****.**'; $subscribed = mailchimp_subscribe($list_id, $email); $this->assertTrue($subscribed, 'Tested new user subscription.'); $unsubscribed = mailchimp_unsubscribe($list_id, $email); $this->assertTrue($unsubscribed, 'Tested user unsubscription.'); $member_info = mailchimp_get_memberinfo($list_id, $email); $this->assertEqual($member_info['status'], 'unsubscribed', 'Tested updated subscription state.'); // Reset subscription. mailchimp_subscribe($list_id, $email); // Delete member. mailchimp_unsubscribe($list_id, $email, TRUE); $member_info = mailchimp_get_memberinfo($list_id, $email); $this->assertTrue(empty($member_info), 'Tested user deletion on unsubscribe.'); }