<?php
require_once(WCF_DIR.'lib/system/event/EventListener.class.php');

class ProfilelastVisitorsListener implements EventListener {
    
    public $visitorCount = 0;
    public $visitors = array();
    public $profileID = 0;

    /**
    * @see EventListener::execute()
    */
    public function execute($eventObj, $className, $eventName){

        //Mit dieser IF Abfrage wird geschaut, ob der Visitor ein GAST oder ob er INVISIBLE ist. Sollte eines zustreffen, wird die Eingabe in die Datenbank nicht ausgefï¿½hrt
        if (WCF::getUser()->userID != 0 && $eventObj->userID != WCF::getUser()->userID && WCF::getUser()->getPermission('admin.profile.lastvisitor.isinvisible') != 1){
            $sql = "INSERT INTO wcf".WCF_N."_profile_lastvisitors (profileID, userID, username, time)
            VALUES ('".$eventObj->userID."', '".WCF::getUser()->userID."', '".WCF::getUser()->username."', '".TIME_NOW."')
            ON DUPLICATE KEY
            UPDATE time = VALUES(time)";
            WCF::getDB()->sendQuery($sql);
        }
        // Ab hier wird die Anzeige gemacht. Es werden keine Daten mehr in die Datenbank eingespielt
        // Hier werden die Daten der Besucher des angeschauten Profils gesammelt

        $sql = "SELECT userID, username, time FROM wcf".WCF_N."_profile_lastvisitors WHERE profileID = '".$eventObj->userID."' ORDER BY time DESC LIMIT 0,".SHOW_LASTVISITOR_AMOUNT."";
        $result = WCF::getDB()->sendQuery($sql);

        while ($row = WCF::getDB()->fetchArray($result)) {
                $this->visitors[] = $row;
        }
        if(count($this->visitors) > 0) $this->visitorCount = count($this->visitors);

        //Hier werden die Variablen in den Template-Variabeln registriert

        WCF::getTPL()->assign(array(
                'visitors' => $this->visitors,
                'visitorCount' => $this->visitorCount,
		 		'profileID' => $eventObj->userID,
                ));
        //Datenbank wird hier aufgeraeumt... Hier werden alle Visitors geloescht, die nicht mehr angezeigt werden koennen (Visitors groesser 100)
        $sql = "SELECT userID FROM wcf".WCF_N."_profile_lastvisitors WHERE profileID = '".$eventObj->userID."' ORDER BY time DESC";
        $result = WCF::getDB()->sendQuery($sql);
        $skipCount = 0;
        $deleteIDs = array();
        while ($row = WCF::getDB()->fetchArray($result)){
            if($skipCount > 100) $deleteIDs[] = $row['userID'];
            $skipCount++;
        }
        if(count($deleteIDs) > 0) {
            $deleteIDString = implode(',', $deleteIDs);
            $sql = "DELETE FROM wcf".WCF_N."_profile_lastvisitors WHERE userID IN (".$deleteIDString.") AND profileID = '".$eventObj->userID."'";
            WCF::getDB()->sendQuery($sql);
        }
       
	//Hier werden die Templates in die Platzhalter der userProfile.tpl geladen
	WCF::getTPL()->append('additionalBoxes5', WCF::getTPL()->fetch('ProfilelastVisitorSmall'));
	WCF::getTPL()->append('additionalContents3', WCF::getTPL()->fetch('ProfilelastVisitor'));
        
    }
}
?>