Roundmail::checkReminder automailing system

This commit is contained in:
Torsten 2017-08-28 16:34:19 +02:00
parent 6aad1a7ab2
commit 1f5e056b7f
18 changed files with 269 additions and 116 deletions

View file

@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use App\Roundmail;
use App\User;
use App\Round;
use App\Season;
use Illuminate\Http\Request;
use App\Mail\RoundmailMailer;
@ -30,7 +31,7 @@ class RoundmailController extends Controller
$fields['topic'] = $mail_db->topic;
$sender = User::where('id','=',$mail_db->user_id)->first();
$sender_name="(Gelöschter Anwender)";
$sender_name="Automailer";
if ($sender) { $sender_name=$sender->name; }
$fields['sender'] = $sender_name;
@ -98,23 +99,30 @@ class RoundmailController extends Controller
$missingTippMailList = implode(",",$missingTippMailList);
$missingJokerMailList = implode(",",$missingJokerMailList);
$adminMailList = implode(",",$adminMailList);
$tippSpielLink="http://hoschis-tippspiel.de/tipps#".Round::getFirstTippableRound()->id;
$tippSpielLink = Round::getTippSpielLink();
$topic="";
$mail_message="";
$sender_name=Auth::user()->name;
$sender_name="Automailer";
$recipients="";
$viewmode=false;
if ($mail_id>-1) {
$viewmode=true;
$mail = Roundmail::where('id','=',$mail_id)->first();
$send_date = $mail->send_date;
$topic = $mail->topic;
$mail_message = str_replace('<br/>','\n',$mail->message);
Log::info("Before:");
Log::info($mail->message);
//$mail_message = str_replace('<br/>','\n', $mail->message);
$mail_message = $mail->message;
Log::info("After:");
Log::info($mail_message);
$recipients = $mail->recipients;
$sender = User::where('id','=',$mail->user_id)->first();
$sender_name = $sender->name;
if ($sender) {$sender_name = $sender->name;}
}
@ -147,13 +155,20 @@ class RoundmailController extends Controller
}
*/
$r = new RoundmailMailer();
$r->user_id = Auth::user()->id;
$r->sender_email = Auth::user()->email;
$r->sender_name = Auth::user()->name;
$r->send_date = Carbon\Carbon::now();
$r->recipients = request('recipients');
Log::info("Recipients:".$r->recipients);
$r->topic = request('topic');
$r->mail_message = str_replace("\n","<br/>", request('message'));
$r->mail_message = str_replace("\r","",str_replace("\n","<br/>", request('message')));
Log::info("Recipients:");
Log::info($r->recipients);
\Mail::to(explode(",",$r->recipients))->send($r);
// Die hier ist nur für die DB
$rm = new RoundMail();
@ -164,7 +179,7 @@ class RoundmailController extends Controller
$rm->message=$r->mail_message;
$rm->save();
\Mail::to(explode(",",$r->recipients))->send($r);
// TODO: refactor, loop is also used in index method.
// COPY/PASTE, please refactor!
@ -177,7 +192,7 @@ class RoundmailController extends Controller
$fields['topic'] = $mail_db->topic;
$sender = User::where('id','=',$mail_db->user_id)->first();
$sender_name="(Gelöschter Anwender)";
$sender_name="Automailer";
if ($sender) { $sender_name=$sender->name; }
$fields['sender'] = $sender_name;
@ -186,11 +201,58 @@ class RoundmailController extends Controller
$mails=array_reverse($mails);
return view('roundmails.index',compact('mails'));
}
public function checkReminder() {
Log::info("RoundmailController::checkReminder was triggered");
$currentSeason = Season::getCurrent();
$users = User::whereNull('deleted')->get();
Log::info("Usercount: ".sizeof($users));
$emailsOfUsersWithIncompleteTipps=array();
foreach($users as $user) {
if (User::hasMissingTipp($user->id) || User::hasMissingJoker($user->id)) {
if ($user->gets_reminders) {
array_push($emailsOfUsersWithIncompleteTipps, $user->email);
}
}
}
$firstTippableRound = Round::getFirstTippableRound();
if (!$firstTippableRound) {
Log::info("RoundmailController::checkReminder: No tippable round detected, automailing aborted");
return;
}
$WARNING_HOURS_OFFSET=48;
if (!$firstTippableRound->isInLockWarningTime($WARNING_HOURS_OFFSET)) {
Log::info("RoundmailController->checkRemninder: skipping Reminder Mail because Lock is further away than ".$WARNING_HOURS_OFFSET." hours.");
return;
}
$roundLockTime = $firstTippableRound->getLockTime();
$r = new RoundmailMailer();
$r->user_id = 0;
$r->sender_email="info@hoschis-tippspiel.de";
$r->sender_name="Hoschis Tippspiel";
$r->send_date = Carbon\Carbon::now();
$r->recipients = implode(",", $emailsOfUsersWithIncompleteTipps);
$r->topic = "Fehlende Tipps/Joker";
$r->mail_message = "Es fehlen noch Tipps/Joker für: " . $firstTippableRound->name . "<br/>Die Runde sperrt sich: " . $roundLockTime . "<br/><br/>Link zum Spiel: " . Round::getTippSpielLink();
Log::info("Sending Reminder Mails");
\Mail::to($emailsOfUsersWithIncompleteTipps)->send($r);
// Die hier ist nur für die DB
$rm = new RoundMail();
$rm->send_date=$r->send_date;
$rm->recipients=$r->recipients;
$rm->user_id=$r->user_id;
$rm->topic=$r->topic;
$rm->message=$r->mail_message;
$rm->save();
}
}

View file

@ -53,7 +53,13 @@ class UsersController extends Controller
$nextRoundName="";
$nextRound = Round::getFirstTippableRound();
if ($nextRound) { $nextRoundName = $nextRound->name; }
$nextRoundLockTime = "";
$diffToLock ="";
if ($nextRound) {
$nextRoundName = $nextRound->name;
$nextRoundLockTime = $nextRound->getLockTime();
$hourDiffToLock=$nextRoundLockTime->diffInHours(Carbon\Carbon::now());
}
$user=Auth::user();
$message_text_tipps="";
@ -67,7 +73,7 @@ class UsersController extends Controller
}
}
return view('main',compact('roundname','display_rounds','message_text_joker','message_text_tipps','nextRoundName'));
return view('main',compact('roundname','display_rounds','message_text_joker','message_text_tipps','nextRoundName','nextRoundLockTime', 'hourDiffToLock'));
}
public function index() {
@ -138,7 +144,7 @@ class UsersController extends Controller
return view ('users.edit', compact('user','paid_date_str'));
}
public function store() {
public function store() {
if (Auth::guest()) { return redirect("/"); }
$season_id = Season::getCurrent()->id;
// Validate form
@ -294,64 +300,64 @@ class UsersController extends Controller
if ($user_id==1) { Log::info("Dayscore round: ".$round_id." = ".$roundtipps[$key]['dayscore']);}
if ($user_id==1) { Log::info("Rankscore round: ".$round_id." = ".$roundtipps[$key]['rankscore']);}
if (!array_key_exists($user_id, $rankingDisplay)) {
$rankingDisplay[$user_id] = array();
if (!array_key_exists($user_id, $rankingDisplay)) {
$rankingDisplay[$user_id] = array();
$rankingDisplay[$user_id]["user_id"] = $user_id;
$rankingDisplay[$user_id]["user_id"] = $user_id;
$rankingDisplay[$user_id]["user_name"] = $roundtipps[$key]["user_name"];
$rankingDisplay[$user_id]["is_dayscorewinner"] = 0;
$rankingDisplay[$user_id]["user_name"] = $roundtipps[$key]["user_name"];
$rankingDisplay[$user_id]["is_dayscorewinner"] = 0;
if ($user_id==1) { Log::info("rankscore after user init for display round_id ".$round_id." = ".$roundtipps[$key]["rankscore"]);}
}
if ($user_id==1) { Log::info("rankscore after user init for display round_id ".$round_id." = ".$roundtipps[$key]["rankscore"]);}
}
$rankingDisplay[$user_id]["rankscore"] = $roundtipps[$key]["rankscore"]; // Summe Rangwertung alle 4 Spiele/Tipps der letzten durchlaufenen Runde, NICHT in init stellen !!
$rankingDisplay[$user_id]["dayscore"] = $roundtipps[$key]["dayscore"]; // Dayscore der letzten durchlaufenen Runde, NICHT in init stellen !!
$rankingDisplay[$user_id]["rankscore"] = $roundtipps[$key]["rankscore"]; // Summe Rangwertung alle 4 Spiele/Tipps der letzten durchlaufenen Runde, NICHT in init stellen !!
$rankingDisplay[$user_id]["dayscore"] = $roundtipps[$key]["dayscore"]; // Dayscore der letzten durchlaufenen Runde, NICHT in init stellen !!
$rankingDisplay[$user_id]["rankscore_total"] = $rankscore_total + $roundtipps[$key]["rankscore"];
$rankscore_total=$rankingDisplay[$user_id]["rankscore_total"];
$rankingDisplay[$user_id]["rankscore_total"] = $rankscore_total + $roundtipps[$key]["rankscore"];
$rankscore_total=$rankingDisplay[$user_id]["rankscore_total"];
$rankingDisplay[$user_id]["tipp_score1"] = $roundtipps[$key]["tipps"][0];
$rankingDisplay[$user_id]["tipp_score2"] = $roundtipps[$key]["tipps"][1];
$rankingDisplay[$user_id]["joker1"] = $roundtipps[$key]["tipps"][2];
$rankingDisplay[$user_id]["result_score1"] = $roundtipps[$key]["results"][0];
$rankingDisplay[$user_id]["result_score2"] = $roundtipps[$key]["results"][1];
$rankingDisplay[$user_id]["tipp_score1"] = $roundtipps[$key]["tipps"][0];
$rankingDisplay[$user_id]["tipp_score2"] = $roundtipps[$key]["tipps"][1];
$rankingDisplay[$user_id]["joker1"] = $roundtipps[$key]["tipps"][2];
$rankingDisplay[$user_id]["result_score1"] = $roundtipps[$key]["results"][0];
$rankingDisplay[$user_id]["result_score2"] = $roundtipps[$key]["results"][1];
// Determine coloration for Game1
$rankingDisplay[$user_id]["trendCol1"] = Tipp::trendCol($roundtipps[$key]["results"][0],$roundtipps[$key]["results"][1],
$roundtipps[$key]["tipps"][0],$roundtipps[$key]["tipps"][1],
$roundtipps[$key]["tipps"][2]);
// Determine coloration for Game1
$rankingDisplay[$user_id]["trendCol1"] = Tipp::trendCol($roundtipps[$key]["results"][0],$roundtipps[$key]["results"][1],
$roundtipps[$key]["tipps"][0],$roundtipps[$key]["tipps"][1],
$roundtipps[$key]["tipps"][2]);
$rankingDisplay[$user_id]["tipp_score3"] = $roundtipps[$key]["tipps"][3];
$rankingDisplay[$user_id]["tipp_score4"] = $roundtipps[$key]["tipps"][4];
$rankingDisplay[$user_id]["joker2"] = $roundtipps[$key]["tipps"][5];
$rankingDisplay[$user_id]["result_score3"] = $roundtipps[$key]["results"][2];
$rankingDisplay[$user_id]["result_score4"] = $roundtipps[$key]["results"][3];
$rankingDisplay[$user_id]["tipp_score3"] = $roundtipps[$key]["tipps"][3];
$rankingDisplay[$user_id]["tipp_score4"] = $roundtipps[$key]["tipps"][4];
$rankingDisplay[$user_id]["joker2"] = $roundtipps[$key]["tipps"][5];
$rankingDisplay[$user_id]["result_score3"] = $roundtipps[$key]["results"][2];
$rankingDisplay[$user_id]["result_score4"] = $roundtipps[$key]["results"][3];
// Determine coloration for Game2
$rankingDisplay[$user_id]["trendCol2"] = Tipp::trendCol($roundtipps[$key]["results"][2],$roundtipps[$key]["results"][3],
$roundtipps[$key]["tipps"][3],$roundtipps[$key]["tipps"][4],
$roundtipps[$key]["tipps"][5]);
// Determine coloration for Game2
$rankingDisplay[$user_id]["trendCol2"] = Tipp::trendCol($roundtipps[$key]["results"][2],$roundtipps[$key]["results"][3],
$roundtipps[$key]["tipps"][3],$roundtipps[$key]["tipps"][4],
$roundtipps[$key]["tipps"][5]);
$rankingDisplay[$user_id]["tipp_score5"] = $roundtipps[$key]["tipps"][6];
$rankingDisplay[$user_id]["tipp_score6"] = $roundtipps[$key]["tipps"][7];
$rankingDisplay[$user_id]["joker3"] = $roundtipps[$key]["tipps"][8];
$rankingDisplay[$user_id]["result_score5"] = $roundtipps[$key]["results"][4];
$rankingDisplay[$user_id]["result_score6"] = $roundtipps[$key]["results"][5];
// Determine coloration for Game3
$rankingDisplay[$user_id]["trendCol3"] = Tipp::trendCol($roundtipps[$key]["results"][4],$roundtipps[$key]["results"][5],
$roundtipps[$key]["tipps"][6],$roundtipps[$key]["tipps"][7],
$roundtipps[$key]["tipps"][8]);
$rankingDisplay[$user_id]["tipp_score5"] = $roundtipps[$key]["tipps"][6];
$rankingDisplay[$user_id]["tipp_score6"] = $roundtipps[$key]["tipps"][7];
$rankingDisplay[$user_id]["joker3"] = $roundtipps[$key]["tipps"][8];
$rankingDisplay[$user_id]["result_score5"] = $roundtipps[$key]["results"][4];
$rankingDisplay[$user_id]["result_score6"] = $roundtipps[$key]["results"][5];
// Determine coloration for Game3
$rankingDisplay[$user_id]["trendCol3"] = Tipp::trendCol($roundtipps[$key]["results"][4],$roundtipps[$key]["results"][5],
$roundtipps[$key]["tipps"][6],$roundtipps[$key]["tipps"][7],
$roundtipps[$key]["tipps"][8]);
$rankingDisplay[$user_id]["tipp_score7"] = $roundtipps[$key]["tipps"][9];
$rankingDisplay[$user_id]["tipp_score8"] = $roundtipps[$key]["tipps"][10];
$rankingDisplay[$user_id]["joker4"] = $roundtipps[$key]["tipps"][11];
$rankingDisplay[$user_id]["result_score7"] = $roundtipps[$key]["results"][6];
$rankingDisplay[$user_id]["result_score8"] = $roundtipps[$key]["results"][7];
// Determine coloration for Game4
$rankingDisplay[$user_id]["trendCol4"] = Tipp::trendCol($roundtipps[$key]["results"][6],$roundtipps[$key]["results"][7],
$roundtipps[$key]["tipps"][9],$roundtipps[$key]["tipps"][10],
$roundtipps[$key]["tipps"][11]);
$rankingDisplay[$user_id]["tipp_score7"] = $roundtipps[$key]["tipps"][9];
$rankingDisplay[$user_id]["tipp_score8"] = $roundtipps[$key]["tipps"][10];
$rankingDisplay[$user_id]["joker4"] = $roundtipps[$key]["tipps"][11];
$rankingDisplay[$user_id]["result_score7"] = $roundtipps[$key]["results"][6];
$rankingDisplay[$user_id]["result_score8"] = $roundtipps[$key]["results"][7];
// Determine coloration for Game4
$rankingDisplay[$user_id]["trendCol4"] = Tipp::trendCol($roundtipps[$key]["results"][6],$roundtipps[$key]["results"][7],
$roundtipps[$key]["tipps"][9],$roundtipps[$key]["tipps"][10],
$roundtipps[$key]["tipps"][11]);
}
}
@ -503,4 +509,41 @@ class UsersController extends Controller
$this->sendResetLink(Auth::user());
}
public function storeUserEdit() {
Log::info("storeUserEdit");
if (Auth::guest()) { return redirect("/"); }
Log::info("Auth ok");
Log::info("Request:");
Log::info(request());
$season_id = Season::getCurrent()->id;
// Validate form
$this->validate(request(), [
'email'=> 'required'
]);
$user=Auth::user();
$user->email=request('email');
if (request()->has('gets_reminders')) {
Log::info("No reminder");
$user->gets_reminders = true;
} else {
Log::info("Set reminder");
$user->gets_reminders=false;
}
Log::info("Setting gets_reminders to: " . request('gets_reminders'));
$user->save();
return redirect('/');
}
}