Example #1
0
 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.');
 }