/**
  * Sends the mail to given user.
  * 
  * @param	User		$user
  */
 protected function sendMail(User $user)
 {
     // generate new password
     $password = substr(StringUtil::getRandomID(), 0, 10);
     // save
     $editor = $user->getEditor();
     $editor->update('', '', $password);
     // send mail
     if (!isset($this->languages[$user->languageID])) {
         $this->languages[$user->languageID] = new Language($user->languageID);
     }
     $mail = new Mail(array($user->username => $user->email), $this->languages[$user->languageID]->get('wcf.acp.user.newPassword.mail.subject', array('PAGE_TITLE' => $this->languages[$user->languageID]->get(PAGE_TITLE))), $this->languages[$user->languageID]->get('wcf.acp.user.newPassword.mail', array('PAGE_TITLE' => $this->languages[$user->languageID]->get(PAGE_TITLE), '$username' => $user->username, '$password' => $password, 'PAGE_URL' => PAGE_URL, 'MAIL_ADMIN_ADDRESS' => MAIL_ADMIN_ADDRESS)));
     $mail->send();
 }
 /**
  * @see Action::execute()
  */
 public function execute()
 {
     parent::execute();
     //validates the given token to avoid misusing
     $sql = 'SELECT COUNT(token) AS count
     		FROM wcf' . WCF_N . '_' . $this->unsubscriptionTable . '
     		WHERE subscriberID = ' . $this->subscriberID . "\n        \t\t\tAND token = '" . escapeString($this->token) . "'";
     $row = WCF::getDB()->getFirstRow($sql);
     if ($row['count'] != 1) {
         $message = WCF::getLanguage()->get('wcf.acp.newsletter.optin.invalidToken');
         throw new NamedUserException($message);
     }
     $subscriber = new NewsletterSubscriber($this->subscriberID);
     if ($subscriber->userID != 0) {
         $user = new User($subscriber->userID);
         $editor = $user->getEditor();
         $options = array('acceptNewsletter' => 0);
         $editor->updateOptions($options);
     }
     //delete subscriber related entries
     $sql = 'DELETE FROM wcf' . WCF_N . '_' . $this->unsubscriptionTable . '
     		WHERE subscriberID = ' . $this->subscriberID . "\n        \t\t\tAND token = '" . escapeString($this->token) . "'";
     WCF::getDB()->sendQuery($sql);
     $sql = 'DELETE FROM wcf' . WCF_N . '_' . $this->activationTable . '
     		WHERE userID = ' . intval($subscriber->userID);
     WCF::getDB()->sendQuery($sql);
     $sql = 'DELETE FROM wcf' . WCF_N . '_' . $this->guestActivationTable . '
     		WHERE subscriberID = ' . $this->subscriberID;
     WCF::getDB()->sendQuery($sql);
     unset($subscriber);
     $sql = 'DELETE FROM wcf' . WCF_N . '_' . $this->subscriberTable . '
     		WHERE subscriberID = ' . $this->subscriberID;
     WCF::getDB()->sendQuery($sql);
     $this->executed();
     WCF::getTPL()->assign(array('message' => WCF::getLanguage()->get('wcf.acp.newsletter.unsubscription.success'), 'url' => PAGE_URL . '/index.php?page=Index' . SID_ARG_2ND));
     WCF::getTPL()->display('redirect');
     exit;
 }