<?php

namespace FOP;

class Notification {
  
  

  
  

    // --- Statische Methoden ---
  
  public static function instantMail() { 
    
    
    // --- BLOCK: main ---
    
		$olduser = \FOP\User::getID();
		foreach (\FOP\Database::query('SELECT '.qi('ID').' FROM '.qi('mitglied').' WHERE '.qi('reminderMitgliedMitglied-gebtagMails').' = '.\FOP\Database::quote('instant').' OR '.qi('reminderMitgliedForderungenMails').' = '.\FOP\Database::quote('instant').' OR '.qi('reminderFop_fints_buchungForderungenMails').' = '.\FOP\Database::quote('instant').' OR '.qi('reminderAufgabeAssignedMails').' = '.\FOP\Database::quote('instant').' OR '.qi('reminderAufgabeNot_assignedMails').' = '.\FOP\Database::quote('instant').'')->fetchAll(\PDO::FETCH_COLUMN) AS $userid) {
			\FOP\User::login($userid, false);
			\FOP\User::updateColumns();
			self::sendEmail('', 'instant');
		}
		\FOP\User::login($olduser, false);
		\FOP\User::updateColumns();
	
    
  }

  public static function hourlyMail() { 
    
    
    // --- BLOCK: main ---
    
		$olduser = \FOP\User::getID();
		foreach (\FOP\Database::query('SELECT '.qi('ID').' FROM '.qi('mitglied').' WHERE '.qi('reminderMitgliedMitglied-gebtagMails').' = '.\FOP\Database::quote('hourly').' OR '.qi('reminderMitgliedForderungenMails').' = '.\FOP\Database::quote('hourly').' OR '.qi('reminderFop_fints_buchungForderungenMails').' = '.\FOP\Database::quote('hourly').' OR '.qi('reminderAufgabeAssignedMails').' = '.\FOP\Database::quote('hourly').' OR '.qi('reminderAufgabeNot_assignedMails').' = '.\FOP\Database::quote('hourly').'')->fetchAll(\PDO::FETCH_COLUMN) AS $userid) {
			\FOP\User::login($userid, false);
			\FOP\User::updateColumns();
			self::sendEmail(_('Stündliche Zusammenfassung'), 'hourly');
		}
		\FOP\User::login($olduser, false);
		\FOP\User::updateColumns();
	
    
  }

  public static function dailyMail() { 
    
    
    // --- BLOCK: main ---
    
		$olduser = \FOP\User::getID();
		foreach (\FOP\Database::query('SELECT '.qi('ID').' FROM '.qi('mitglied').' WHERE '.qi('reminderMitgliedMitglied-gebtagMails').' = '.\FOP\Database::quote('daily').' OR '.qi('reminderMitgliedForderungenMails').' = '.\FOP\Database::quote('daily').' OR '.qi('reminderFop_fints_buchungForderungenMails').' = '.\FOP\Database::quote('daily').' OR '.qi('reminderAufgabeAssignedMails').' = '.\FOP\Database::quote('daily').' OR '.qi('reminderAufgabeNot_assignedMails').' = '.\FOP\Database::quote('daily').'')->fetchAll(\PDO::FETCH_COLUMN) AS $userid) {
			\FOP\User::login($userid, false);
			\FOP\User::updateColumns();
			self::sendEmail(_('Tägliche Zusammenfassung'), 'daily');
		}
		\FOP\User::login($olduser, false);
		\FOP\User::updateColumns();
	
    
  }

  public static function weeklyMail() { 
    
    
    // --- BLOCK: main ---
    
		$olduser = \FOP\User::getID();
		foreach (\FOP\Database::query('SELECT '.qi('ID').' FROM '.qi('mitglied').' WHERE '.qi('reminderMitgliedMitglied-gebtagMails').' = '.\FOP\Database::quote('weekly').' OR '.qi('reminderMitgliedForderungenMails').' = '.\FOP\Database::quote('weekly').' OR '.qi('reminderFop_fints_buchungForderungenMails').' = '.\FOP\Database::quote('weekly').' OR '.qi('reminderAufgabeAssignedMails').' = '.\FOP\Database::quote('weekly').' OR '.qi('reminderAufgabeNot_assignedMails').' = '.\FOP\Database::quote('weekly').'')->fetchAll(\PDO::FETCH_COLUMN) AS $userid) {
			\FOP\User::login($userid, false);
			\FOP\User::updateColumns();
			self::sendEmail(_('Wöchentliche Zusammenfassung'), 'weekly');
		}
		\FOP\User::login($olduser, false);
		\FOP\User::updateColumns();
	
    
  }

  public static function monthlyMail() { 
    
    
    // --- BLOCK: main ---
    
		$olduser = \FOP\User::getID();
		foreach (\FOP\Database::query('SELECT '.qi('ID').' FROM '.qi('mitglied').' WHERE '.qi('reminderMitgliedMitglied-gebtagMails').' = '.\FOP\Database::quote('monthly').' OR '.qi('reminderMitgliedForderungenMails').' = '.\FOP\Database::quote('monthly').' OR '.qi('reminderFop_fints_buchungForderungenMails').' = '.\FOP\Database::quote('monthly').' OR '.qi('reminderAufgabeAssignedMails').' = '.\FOP\Database::quote('monthly').' OR '.qi('reminderAufgabeNot_assignedMails').' = '.\FOP\Database::quote('monthly').'')->fetchAll(\PDO::FETCH_COLUMN) AS $userid) {
			\FOP\User::login($userid, false);
			\FOP\User::updateColumns();
			self::sendEmail(_('Monatliche Zusammenfassung'), 'monthly');
		}
		\FOP\User::login($olduser, false);
		\FOP\User::updateColumns();
	
    
  }

  public static function sendEmail($subject, $cronmode) { 
    
    
    // --- BLOCK: main ---
    
		$total = 0;
		$seenflags = [];
		$rerun = false;
		$user = \Tables\Mitglied::view(\FOP\User::getID(), false, true);
		ob_start();
		if ($user['reminderMitgliedMitglied-gebtagMails'] == $cronmode) {
			$ids = \DataView\ReminderMitgliedMitglied_gebtag::getUnseenNotificationsForChannel('email');
			if ($ids) {
				?><h3><?php echo(_('Geburtstage')); ?></h3><ul><?php
				$total += count($ids);
				if (count($ids) >= 100) {
					$rerun = true;
				}
				foreach ($ids AS $id) {
					if (!$subject) {
						$subject = _('Geburtstage') . ': ' . \Types\Mitglied::descriptionAction($id);
					}
					echo '<li><a target="_blank" href="'.htmlentities(\TablesRouter\Mitglied::viewURL($id)).'">'.htmlentities(\Types\Mitglied::descriptionAction($id)).'</a></li>'; // TODO: description gleich in die SQL Query einbauen für Performance
					array_push($seenflags, '('.\FOP\Database::quote(\FOP\User::getID()).', '.\FOP\Database::quote('email').', '.\FOP\Database::quote('reminderMitgliedMitglied-gebtag').', '.\FOP\Database::quote($id).', '.\FOP\Database::quote(time()).')');
				}
				?></ul>
				<a target="_blank" href="<?php echo htmlentities(\DataViewRouter\ReminderMitgliedMitglied_gebtag::viewURL()); ?>">zur Liste</a><?php
			}
		}
		
		if ($user['reminderMitgliedForderungenMails'] == $cronmode) {
			$ids = \DataView\ReminderMitgliedForderungen::getUnseenNotificationsForChannel('email');
			if ($ids) {
				?><h3><?php echo(_('Offene Beiträge')); ?></h3><ul><?php
				$total += count($ids);
				if (count($ids) >= 100) {
					$rerun = true;
				}
				foreach ($ids AS $id) {
					if (!$subject) {
						$subject = _('Offene Beiträge') . ': ' . \Types\Mitglied::descriptionAction($id);
					}
					echo '<li><a target="_blank" href="'.htmlentities(\TablesRouter\Mitglied::viewURL($id)).'">'.htmlentities(\Types\Mitglied::descriptionAction($id)).'</a></li>'; // TODO: description gleich in die SQL Query einbauen für Performance
					array_push($seenflags, '('.\FOP\Database::quote(\FOP\User::getID()).', '.\FOP\Database::quote('email').', '.\FOP\Database::quote('reminderMitgliedForderungen').', '.\FOP\Database::quote($id).', '.\FOP\Database::quote(time()).')');
				}
				?></ul>
				<a target="_blank" href="<?php echo htmlentities(\DataViewRouter\ReminderMitgliedForderungen::viewURL()); ?>">zur Liste</a><?php
			}
		}
		
		if ($user['reminderFop_fints_buchungForderungenMails'] == $cronmode) {
			$ids = \DataView\ReminderFop_fints_buchungForderungen::getUnseenNotificationsForChannel('email');
			if ($ids) {
				?><h3><?php echo(_('unbehandelte Zahlungseingänge')); ?></h3><ul><?php
				$total += count($ids);
				if (count($ids) >= 100) {
					$rerun = true;
				}
				foreach ($ids AS $id) {
					if (!$subject) {
						$subject = _('unbehandelte Zahlungseingänge') . ': ' . \Types\Fop_fints_buchung::descriptionAction($id);
					}
					echo '<li><a target="_blank" href="'.htmlentities(\TablesRouter\Fop_fints_buchung::viewURL($id)).'">'.htmlentities(\Types\Fop_fints_buchung::descriptionAction($id)).'</a></li>'; // TODO: description gleich in die SQL Query einbauen für Performance
					array_push($seenflags, '('.\FOP\Database::quote(\FOP\User::getID()).', '.\FOP\Database::quote('email').', '.\FOP\Database::quote('reminderFop_fints_buchungForderungen').', '.\FOP\Database::quote($id).', '.\FOP\Database::quote(time()).')');
				}
				?></ul>
				<a target="_blank" href="<?php echo htmlentities(\DataViewRouter\ReminderFop_fints_buchungForderungen::viewURL()); ?>">zur Liste</a><?php
			}
		}
		
		if ($user['reminderAufgabeAssignedMails'] == $cronmode) {
			$ids = \DataView\ReminderAufgabeAssigned::getUnseenNotificationsForChannel('email');
			if ($ids) {
				?><h3><?php echo(_('Mir zugewiesen')); ?></h3><ul><?php
				$total += count($ids);
				if (count($ids) >= 100) {
					$rerun = true;
				}
				foreach ($ids AS $id) {
					if (!$subject) {
						$subject = _('Mir zugewiesen') . ': ' . \Types\Aufgabe::descriptionAction($id);
					}
					echo '<li><a target="_blank" href="'.htmlentities(\TablesRouter\Aufgabe::viewURL($id)).'">'.htmlentities(\Types\Aufgabe::descriptionAction($id)).'</a></li>'; // TODO: description gleich in die SQL Query einbauen für Performance
					array_push($seenflags, '('.\FOP\Database::quote(\FOP\User::getID()).', '.\FOP\Database::quote('email').', '.\FOP\Database::quote('reminderAufgabeAssigned').', '.\FOP\Database::quote($id).', '.\FOP\Database::quote(time()).')');
				}
				?></ul>
				<a target="_blank" href="<?php echo htmlentities(\DataViewRouter\ReminderAufgabeAssigned::viewURL()); ?>">zur Liste</a><?php
			}
		}
		
		if ($user['reminderAufgabeNot_assignedMails'] == $cronmode) {
			$ids = \DataView\ReminderAufgabeNot_assigned::getUnseenNotificationsForChannel('email');
			if ($ids) {
				?><h3><?php echo(_('Nicht zugewiesen')); ?></h3><ul><?php
				$total += count($ids);
				if (count($ids) >= 100) {
					$rerun = true;
				}
				foreach ($ids AS $id) {
					if (!$subject) {
						$subject = _('Nicht zugewiesen') . ': ' . \Types\Aufgabe::descriptionAction($id);
					}
					echo '<li><a target="_blank" href="'.htmlentities(\TablesRouter\Aufgabe::viewURL($id)).'">'.htmlentities(\Types\Aufgabe::descriptionAction($id)).'</a></li>'; // TODO: description gleich in die SQL Query einbauen für Performance
					array_push($seenflags, '('.\FOP\Database::quote(\FOP\User::getID()).', '.\FOP\Database::quote('email').', '.\FOP\Database::quote('reminderAufgabeNot_assigned').', '.\FOP\Database::quote($id).', '.\FOP\Database::quote(time()).')');
				}
				?></ul>
				<a target="_blank" href="<?php echo htmlentities(\DataViewRouter\ReminderAufgabeNot_assigned::viewURL()); ?>">zur Liste</a><?php
			}
		}
		
		$html = ob_get_contents();
		ob_end_clean();
		if ($total) {
			// mail senden
			if (\Tables\Mitglied::notificationMail(\FOP\User::getID(), $subject, $html)) {
				\FOP\Database::query('INSERT INTO fop_notification('.qi('user').', channel, dv, id, '.qi('date').') VALUES '.implode(',', $seenflags));
				if ($rerun) return self::sendEmail($subject . ' f', $cronmode); // self-recursion over too much messages
			}
		}
	
    
  }


  
  

  
  
}



