/** * 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; }
/** * Process the recipients of the notification email * @since Version 3.9.1 * @param \Railpage\Notifications\Notification $notificationObject * @param \Railpage\Images\Competition $photoComp * @param array $notificationOptions * @return \Railpage\Notifications\Notification */ public static function notificationDoRecipients(Notification $notificationObject, Competition $photoComp, $notificationOptions = null) { $contestants = (new Competitions())->getPreviousContestants(); $replacements = array(); $exclude = array(); if ($notificationOptions['excludeCurrentContestants']) { foreach (self::getCompetitionContestants($photoComp) as $row) { $exclude[$row['user_id']] = $row; } } foreach ($contestants as $row) { if (!in_array($row['user_id'], array_keys($exclude))) { $notificationObject->AddRecipient($row['user_id'], $row['username'], $row['contact_email']); // Add to the decorator $replacements[$row['contact_email']] = array("[username]" => $row['username']); } } $notificationObject->meta['decoration'] = $replacements; return $notificationObject; }