Beispiel #1
0
 /**
  * Notify the winner
  * @since Version 3.9.1
  * @return \Railpage\Gallery\Competition
  * @param \Railpage\Images\Competition
  * @todo Check recipient preferences for email notifications
  */
 public static function notifyWinner(Competition $compObject)
 {
     if (isset($compObject->meta['winnernotified']) && $compObject->meta['winnernotified'] === true) {
         return $this;
     }
     if ($Photo = $compObject->getWinningPhoto()) {
         /**
          * Create a news article
          */
         CompetitionUtility::createNewsArticle_Winner($compObject);
         /**
          * Create a site message
          */
         CompetitionUtility::createSiteNotificationForWinner($compObject);
         /**
          * Create an email
          */
         $Notification = new Notification();
         $Notification->AddRecipient($Photo->Author->id, $Photo->Author->username, $Photo->Author->contact_email);
         $Notification->subject = sprintf("Photo competition: %s", $compObject->title);
         /**
          * Set our email body
          */
         $body = sprintf("Hi %s,\n\nCongratulations! You won the <a href='%s'>%s</a> photo competition!\n\nAs the winner of this competition, you get to <a href='%s'>select a theme</a> for the next competition. You have seven days to do so, before we automatically select one.\n\nThanks\nThe Railpage team.", $Photo->Author->username, $compObject->url->canonical, $compObject->title, "https://www.railpage.com.au" . $compObject->url->suggestsubject);
         if (function_exists("wpautop") && function_exists("format_post")) {
             $body = wpautop(format_post($body));
         }
         /**
          * Assemble some template vars for our email
          */
         foreach ($Photo->Image->sizes as $size) {
             $hero = $size['source'];
             if ($size['width'] >= 600) {
                 break;
             }
         }
         $Smarty = AppCore::getSmarty();
         $Smarty->Assign("email", array("subject" => $Notification->subject, "hero" => array("image" => $hero, "title" => sprintf("Winning photo: Yours! <em>%s</em>", $Photo->Image->title), "link" => $compObject->url->url, "author" => $Photo->Author->username), "body" => $body));
         $Notification->body = $Smarty->Fetch($Smarty->ResolveTemplate("template.generic"));
         $Notification->commit();
         /**
          * Update the winnernotified flag
          */
         $compObject->meta['winnernotified'] = true;
         $compObject->commit();
     }
     return $compObject;
 }
Beispiel #2
0
 /**
  * Add menu entry
  * @since Version 3.8.6
  * @param string $title The title of the breadcrumb item
  * @param string $url An optional URL for this breadcrumb item
  */
 public function Add($title = false, $url = false)
 {
     if (!$title) {
         #throw new Exception("Cannot add item to menu - no title given");
         return $this;
     }
     $i = count($this->menu);
     $this->menu[$i]['title'] = $title;
     if ($url) {
         $this->menu[$i]['url'] = strval($url);
         $Smarty = AppCore::getSmarty();
         /**
          * Pre-rendering
          */
         if ($Smarty instanceof \Railpage\Template) {
             $Smarty->prerender($url);
         }
     }
     return $this;
 }
 /**
  * Process the emoticons, BBCode, rich text, embedded content etc in this object and return as HTML
  * @since Version 3.10.0
  * @param string $string
  * @param array $options
  * @return string
  */
 public static function formatText($string, $options)
 {
     AppCore::getSmarty()->addStylesheet("/themes/jiffy_simple/style/opt.embedded.css");
     $defaultOptions = ["bbcode_uid" => "sausages", "flag_html" => true, "flag_bbcode" => true, "flag_emoticons" => true, "strip_formatting" => false, "editor_version" => 1];
     $options = array_merge($defaultOptions, is_array($options) ? $options : []);
     if (empty(trim($string))) {
         throw new InvalidArgumentException("Cannot execute " . __METHOD__ . " as no text was provided!");
     }
     $cacheKey = "railpage:formatText=" . sha1((string) $string . json_encode($options)) . ";" . self::$formatTextVer;
     $cacheProvider = AppCore::getMemcached();
     $processedText = false;
     if ($processedText = $cacheProvider->fetch($cacheKey)) {
         return $processedText;
     }
     /**
      * @todo
      * - make clickable - doesn't seem to do anything? 24/03/2016
      * - convert to UTF8 - is this still required? 24/03/2016
      */
     $string = EmoticonsUtility::Process($string, $options['flag_emoticons']);
     $string = Html::cleanupBadHtml($string, $options['editor_version']);
     $string = Html::removeHeaders($string);
     $string = BbcodeUtility::Process($string, $options['flag_bbcode']);
     $string = MultimediaUtility::Process($string);
     $string = MakeClickable::Process($string);
     $string = Url::offsiteUrl((string) $string);
     if (is_object($string)) {
         $string = $string->__toString();
     }
     if ($options['strip_formatting'] == true) {
         $string = strip_tags($string);
     }
     $rs = $cacheProvider->save($cacheKey, $string, 0);
     // 3600 * 24 * 30);
     return $string;
 }
Beispiel #4
0
 /** 
  * Send this message
  * @since Version 3.3
  * @version 3.3
  * @return boolean
  */
 public function send()
 {
     $this->validate();
     $data = array("privmsgs_type" => PRIVMSGS_UNREAD_MAIL, "privmsgs_subject" => $this->subject, "privmsgs_from_userid" => $this->from_user_id, "privmsgs_to_userid" => $this->to_user_id, "privmsgs_date" => time(), "privmsgs_ip" => encode_ip($_SERVER['REMOTE_ADDR']), "privmsgs_enable_bbcode" => $this->enable_bbcode, "privmsgs_enable_html" => $this->enable_html, "privmsgs_enable_smilies" => $this->enable_smilies, "privmsgs_attach_sig" => $this->enable_signature, "object_id" => $this->object_id);
     $this->db->insert("nuke_bbprivmsgs", $data);
     $pm_id = $this->db->lastInsertId();
     $this->id = $pm_id;
     $data = array("privmsgs_text_id" => $pm_id, "privmsgs_bbcode_uid" => $this->bbcode_uid, "privmsgs_text" => function_exists("prepare_submit") ? prepare_submit($this->body) : $this->body);
     $rs = $this->db->insert("nuke_bbprivmsgs_text", $data);
     /**
      * If the recipient doesn't want to be notified of a new message then return out
      */
     if ($this->Recipient->notify_privmsg != 1) {
         return;
     }
     /**
      * Send a push notification
      */
     $Push = new Notification();
     $Push->transport = Notifications::TRANSPORT_PUSH;
     $Push->subject = sprintf("[Private Messages] New message from %s", $this->Author->username);
     $Push->body = sprintf("%s has sent you a new private message in the conversation titled \"%s\"", $this->Author->username, $this->subject);
     $Push->setActionUrl(sprintf("/messages/conversation/%d", $this->id))->addRecipient($this->Recipient->id, $this->Recipient->username, $this->Recipient->username);
     $Push->commit()->dispatch();
     /**
      * Template settings
      */
     $Smarty = AppCore::getSmarty();
     $Smarty->assign("server_addr", "www.railpage.com.au");
     $Smarty->assign("message_id", $this->id);
     $Smarty->assign("pm_from_username", $this->Author->username);
     $Smarty->assign("userdata_username", $this->Recipient->username);
     /**
      * Create a user notification
      */
     $Notification = new Notification();
     $Notification->transport = Notifications::TRANSPORT_EMAIL;
     $Notification->status = Notifications::STATUS_QUEUED;
     $Notification->subject = sprintf("[Private Messages] New message from %s", $this->Author->username);
     $Notification->addRecipient($this->Recipient->id, $this->Recipient->username, $this->Recipient->contact_email);
     $tpl = $Smarty->ResolveTemplate("template.generic");
     $email = array("subject" => sprintf("New message from %s", $this->Author->username), "subtitle" => "Private Messages", "body" => nl2br(sprintf("Hi %s,\n\n<a href='http://www.railpage.com.au%s?utm_medium&email&utm_source=private-messages&utm_campain=user-%d'>%s</a> has sent you a new <a href='http://www.railpage.com.au/messages/conversation/%d?utm_medium=email&utm_source=private-messages&utm_campaign=user-%d#%d'>private message</a> in the conversation titled <em>%s</em>.", $this->Recipient->username, $this->Author->url->url, $this->Author->id, $this->Author->username, $this->id, $this->Author->id, $this->id, $this->subject)));
     $Smarty->Assign("email", $email);
     $Notification->body = $Smarty->fetch($tpl);
     $Notification->commit();
 }
 /**
  * Send an email notification for this competition
  * @since Version 3.9.1
  * @param \Railpage\Images\Competition $photoComp
  * @param array $notificationOptions
  * @return void
  * @todo Finish push notifications
  */
 public static function sendNotification(Competition $photoComp, $notificationOptions)
 {
     if (count((new Competitions())->getPreviousContestants()) == 0) {
         return false;
     }
     $flag = $notificationOptions['flag'];
     if (!is_array($notificationOptions)) {
         $notificationOptions = [];
     }
     // If we want to exclude contestants in this competition from this email, set this to true
     // This is to remind contestants from previous comps to submit a photo
     if (!isset($notificationOptions['excludeCurrentContestants'])) {
         $notificationOptions['excludeCurrentContestants'] = false;
     }
     /**
      * Check if the notification sent flag has been set
      */
     if (!isset($photoComp->meta[$flag]) || !filter_var($photoComp->meta[$flag]) || $photoComp->meta[$flag] === false) {
         /**
          * Create the notification
          */
         $Notification = new Notification();
         $Notification->subject = $notificationOptions['subject'];
         $Push = new Notification();
         $Push->subject = $Notification->subject;
         $Push->transport = Notifications::TRANSPORT_PUSH;
         /**
          * Add recipients and decoration
          */
         $Notification = self::notificationDoRecipients($Notification, $photoComp, $notificationOptions);
         $Push = self::notificationDoRecipients($Push, $photoComp, $notificationOptions);
         /**
          * Set our email body
          */
         if (function_exists("wpautop") && function_exists("format_post")) {
             $notificationOptions['body'] = wpautop(format_post($notificationOptions['body']));
         }
         /**
          * Assemble some template vars for our email
          */
         $Smarty = AppCore::getSmarty();
         $Smarty->Assign("email", array("subject" => $notificationOptions['subject'], "body" => $notificationOptions['body']));
         /**
          * Set the body, submit the notification to the dispatch queue
          */
         $Notification->body = $Smarty->Fetch($Smarty->ResolveTemplate("template.generic"));
         $Notification->commit();
         /**
          * Set the notification flag
          */
         $photoComp->meta[$flag] = true;
         $photoComp->commit();
     }
 }
Beispiel #6
0
 /**
  * Unban user
  * @since Version 3.2
  * @version 3.2
  * @param int $banId
  * @param int|bool $userId
  * @return boolean
  */
 public function unBanUser($banId, $userId = null)
 {
     $success = false;
     /**
      * Empty the cache
      */
     try {
         $this->Memcached->delete("railpage:bancontrol.users");
         $this->Memcached->delete(self::CACHE_KEY_ALL);
     } catch (Exception $e) {
         // throw it away
     }
     try {
         $this->Redis->delete("railpage:bancontrol");
     } catch (Exception $e) {
         // throw it away
     }
     if ($banId instanceof User) {
         $userId = $banId->id;
     }
     if ($userId == null) {
         $query = "SELECT user_id FROM bancontrol WHERE id = ?";
         $userId = $this->db->fetchOne($query, $banId);
     }
     if ($userId > 0) {
         $data = array("ban_active" => 0);
         $where = array("user_id = " . $userId);
         $this->db->update("bancontrol", $data, $where);
         $success = true;
         $cachekey_user = sprintf(self::CACHE_KEY_USER, $userId);
         $this->Memcached->save($cachekey_user, false, strtotime("+5 weeks"));
     }
     if ($success) {
         // Tell the world that they've been unbanned
         $ThisUser = UserFactory::CreateUser($userId);
         $ThisUser->active = 1;
         $ThisUser->location = "";
         $ThisUser->signature = "";
         $ThisUser->avatar = "";
         $ThisUser->interests = "";
         $ThisUser->occupation = "";
         try {
             $ThisUser->commit();
             $Smarty = AppCore::getSmarty();
             // Send the ban email
             $Smarty->Assign("userdata_username", $ThisUser->username);
             // Send the confirmation email
             $Notification = new Notification();
             $Notification->addRecipient($ThisUser->id, $ThisUser->username, $ThisUser->contact_email);
             $Notification->body = $Smarty->Fetch($Smarty->ResolveTemplate("email_unban"));
             $Notification->subject = "Railpage account re-activation";
             $Notification->transport = Notifications::TRANSPORT_EMAIL;
             $Notification->commit()->dispatch();
             return true;
         } catch (Exception $e) {
             global $Error;
             if (isset($Error)) {
                 $Error->save($e, $_SESSION['user_id']);
             }
             Debug::logException($e);
         }
     }
     return false;
 }
Beispiel #7
0
 /**
  * Send this reminder
  * @since Version 3.8.7
  * @return \Railpage\Reminders\Reminder
  * @param boolean $markAsSent Flag to indicate if this is a test notification or not
  */
 public function send($markAsSent = false)
 {
     $this->validate();
     $Smarty = AppCore::getSmarty();
     /**
      * Set some vars
      */
     $email = array("subject" => $this->title, "body" => wpautop(format_post($this->text)));
     /**
      * Try and load the object to get some fancy stuff from it
      */
     try {
         $classname = sprintf("\\%s", $this->object);
         $Object = new $classname($this->object_id);
         $email['subtitle'] = "Railpage \\ " . $Object->Module->name;
         if (isset($Object->meta['coverphoto']) && !empty($Object->meta['coverphoto'])) {
             if ($CoverPhoto = (new Images())->getImageFromUrl($Object->meta['coverphoto'])) {
                 $email['hero'] = array("title" => isset($Object->name) ? $Object->name : $Object->title, "link" => isset($Object->url->canonical) ? $Object->url->canonical : sprintf("http://www.railpage.com.au%s", (string) $Object->url), "author" => isset($CoverPhoto->author->realname) && !empty($CoverPhoto->author->realname) ? $CoverPhoto->author->realname : $CoverPhoto->author->username);
                 if (strpos($email['hero']['link'], "http://") === false) {
                     $email['hero']['link'] = "http://www.railpage.com.au" . $email['hero']['link'];
                 }
                 if (strpos($email['hero']['link'], "railpage.com.au") === false) {
                     $email['hero']['link'] = sprintf("http://www.railpage.com.au%s", (string) $Object->url);
                 }
                 $utm = ["utm_source=reminder", "utm_medium=email", sprintf("utm_campaign=%s", ContentUtility::generateUrlSlug($this->title))];
                 $joiner = strpos($email['hero']['link'], "?") === false ? "?" : "&";
                 $email['hero']['link'] .= $joiner . implode("&", $utm);
                 foreach ($CoverPhoto->sizes as $size) {
                     if ($size >= 620) {
                         $email['hero']['image'] = $size['source'];
                     }
                 }
             }
         }
     } catch (Exception $e) {
     }
     /**
      * Process and fetch the email template
      */
     $tpl = $Smarty->ResolveTemplate("template.reminder");
     $Smarty->Assign("email", $email);
     $body = $Smarty->Fetch($tpl);
     $Notification = new Notification();
     $Notification->subject = $this->title;
     $Notification->body = $body;
     $Notification->addRecipient($this->User->id, $this->User->username, $this->User->contact_email);
     $Notification->commit();
     if ($markAsSent) {
         $this->sent = true;
         $this->Dispatched = new DateTime();
         $this->commit();
     }
     /**
      * Start composing and sending the email
      */
     /*
     $message = Swift_Message::newInstance()
         ->setSubject($this->title)
         ->setFrom(array(
             $this->Config->SMTP->username => $this->Config->SiteName
         ))
         ->setTo(array(
             $this->User->contact_email => !empty($this->User->realname) ? $this->User->realname : $this->User->username
         ))
         ->setBody($body, 'text/html');
     
     $transport = Swift_SmtpTransport::newInstance($this->Config->SMTP->host, $this->Config->SMTP->port, $this->Config->SMTP->TLS = true ? "tls" : NULL)
         ->setUsername($this->Config->SMTP->username)
         ->setPassword($this->Config->SMTP->password);
     
     $mailer = Swift_Mailer::newInstance($transport);
     
     if ($result = $mailer->send($message)) {
         if ($markAsSent) {
             $this->sent = true;
             $this->Dispatched = new DateTime;
             $this->commit();
         }
     }
     */
     return $this;
 }