/** * Function called from ESPublic. This function is triggered everytime a user subscribes via email. * * @param String $email * @param String $ip */ public function subscribe($email, $ip) { $options = get_option($this->pluginname . '_options'); $sanemail = sanitize_email($email); //Check if email is already subscribed. $subscriber = $this->getSubscriber($sanemail); if (isset($subscriber)) { //Email is already present. //Check status of email if ($subscriber->status == self::ES_STAT_SUB_CONF) { //TODO //Subscriber is present and confirmed //Send info email and show success message } elseif ($subscriber->status == self::ES_STAT_SUB_NOTCONF) { //Subscriber is present and not confirmed //Send re-confirmation email, update confirmations and show success message //Get ID of added subscriber $subscriberId = $this->getSubscriberId($sanemail); //Regenerate hash $hash = md5(uniqid(rand(), TRUE)); //Resend confirmation $res = $this->emailVerification($sanemail, $hash, $subscriberId); if (!$res) { //Error sending confirmation email. ice_log("error sending email"); return ESMessageCode::ES_ERROR_SYSTEM; } //Update confirmation $res = $this->updateConfirmation($subscriberId, self::ES_STAT_CONF_SENT, $hash); if (false == $res) { //Error inserting into database ice_log("error updating confirmation into database"); return ESMessageCode::ES_ERROR_SYSTEM; } //All okay. Return success return ESMessageCode::ES_SUCCESS_SUB_ADDED; } elseif ($subscriber->status == self::ES_STAT_UNSUB_CONF) { //TODO //Subscribed is present but unconfirmed //Send re-confirmation email, update confirmations and show success message } elseif ($subscriber->status == self::ES_STAT_UNSUB_NOTCONF) { //TODO //Subscriber is present, had unsubscribed but not confirmed unsubscribe //Send re-confirmation email, update confirmations and show success message } else { //Invalid value. Log error and exit gracefully } } else { //Subscriber is not present. Add subscriber, send confirmation email and return success message $res = $this->addSubscriber($sanemail, $ip); if (!$res) { //Error inserting into database ice_log("error inserting subscriber into database"); return ESMessageCode::ES_ERROR_SYSTEM; } //Get ID of added subscriber $subscriberId = $this->getSubscriberId($sanemail); //Generate hash $hash = md5(uniqid(rand(), TRUE)); $res = $this->emailVerification($sanemail, $hash, $subscriberId); if (!$res) { //Error sending confirmation email. ice_log("error inserting into database"); return ESMessageCode::ES_ERROR_SYSTEM; } //Add confirmation $res = $this->addConfirmation($subscriberId, self::ES_STAT_CONF_SENT, $hash); if (!$res) { //Error inserting into database ice_log("error inserting confirmation into database"); return ESMessageCode::ES_ERROR_SYSTEM; } //All okay. Return success return ESMessageCode::ES_SUCCESS_SUB_ADDED; } }
public function subscribe() { $result = ''; if (!$_POST || !wp_verify_nonce($_POST[$this->pluginname . "_form_nonce"], $this->pluginname . "_form_submit")) { $result = json_encode(array("status" => false, "type" => "request", "reason" => "Bad request")); } else { $email = $_POST['es-email']; if (isset($email) && is_email($email)) { // Register and reply with confirmation message $ip = $_SERVER['REMOTE_ADDR']; //Check IP to make sure it is valid and not spam $saneip = filter_var($ip, FILTER_VALIDATE_IP); if ($saneip) { $res = $this->manager->subscribe($email, $saneip); if ($res == ESMessageCode::ES_SUCCESS_SUB_ADDED) { $result = json_encode(array("status" => true, "type" => "", "reason" => "")); } else { $result = json_encode(array("status" => false, "type" => "system", "reason" => "System error.")); } } else { ice_log("in subscribe - bad ip error"); $result = json_encode(array("status" => false, "type" => "ip", "reason" => "Invalid IP.")); } } else { // Reply with error $result = json_encode(array("status" => false, "type" => "data", "reason" => "Invalid email.")); } } header("Content-Type: application/json"); echo $result; die; }
/** * Register EasySubscribe widget. * * @since 0.1 * @access private */ public function registerESWidget() { ice_log("registering widget"); register_widget('ESWidget'); }