Deaktivierung des Benutzerprofils

Benutzer deaktivieren, die längere Zeit nicht eingeloggt waren.

Um Benutzer zu deaktiveren oder zu löschen, die sich längere Zeit nicht mehr in Weblication® CMS angemeldet haben, können Sie auf PHP-Framework Funktionen zurückgreifen.

In diesem Beispiel können Sie im Skript die Anzahl an Tagen angeben ($days), auf die seit dem letzten Login eines Benutzers geprüft wird. Bei Login in Weblication® CMS wird in der Benutzerdatei im Tag lastLogin der Unix Zeitstempel als Wert hinterlegt, auf welchen Sie für das letzte Login zurückgreifen können.

Auf diese Weise können Sie z.B. alle Benutzer auslesen, die sich (Stand heute) seit 30 Tagen nicht mehr angemeldet haben und über den generierten Link den Benutzer deaktivieren.

Das Beispiel lässt sich individuell erweitern (z.B. Benutzer benachrichtigen, Benutzerdatei löschen, etc.).

Beispiel: Benutzer über ein Skript auslesen und deaktivieren können (z.B. setUserOffline.php)

<?php include($_SERVER['DOCUMENT_ROOT'].'/weblication/grid.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Deaktivierung des Benutzerprofils</title>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  <style type="text/css">
  /*# Tabellen */
  
  body                 {margin:20px;padding:0;font-family:Arial, Sans-serif, Helvetica;font-size:12px;color:#000000;background-repeat:repeat;background-attachment:fixed;background-color:#bcbcbc}
  h1                   {font-size:25px;line-height:28px;font-weight:normal;color:#666666;padding:0;margin:0 0 16px 0}
  h2                   {font-size:19px;line-height:22px;font-weight:normal;color:#666666;padding:0;margin:0 0 12px 0}
  table                {font:inherit;color:inherit;border:none}
  tr, thead, tbody     {}
  th, td               {vertical-align:top}
  
  table.default        {width:500px;background-color:#ffffff;border-style:solid none none solid;border-width:1px;border-color:#a0a0a0;margin-bottom:12px;border-collapse:collapse;}
  table.default th     {border-style:none solid solid none;border-width:1px;border-color:#a0a0a0;padding:4px;text-align:left;background-color:#b0b0b0;color:#ffffff}
  table.default td     {border-style:none solid solid none;border-width:1px;border-color:#a0a0a0;padding:4px}
  </style>
</head>
<body>
<?php
  
  $usersQuery    = array();
  $usertype      = "public"; // Benutzertyp (falls weiter unten auf Benutzertyp public, standard oder admin gefiltert werden soll)
  $days          = "30"; // Anzahl Tage
  $lastLoginTime = time() - ($days * 24 * 60 * 60); // letzter Login vor x Tagen ($days)
  
  $usersQuery['filterset']   = array('type' => 'and'); 
  //$usersQuery['filterset'][] = array('wPath' => '/wUser/type/@value', 'operator' => '==', 'condition' => $usertype);
  //$usersQuery['filterset'][] = array('wPath' => '/wd:stat/@path', 'operator' => 'contains', 'condition' => 'wUser.php');
  $usersQuery['filterset'][] = array('wPath' => '/wUser/status/@online', 'operator' => '!=', 'condition' => 'off');
  $usersQuery['filterset'][] = array('wPath' => '/wUser/lastLogin/@value', 'operator' => '<', 'condition' => $lastLoginTime);
  $usersQuery['filterset'][] = array('wPath' => '/wd:stat/@path', 'operator' => 'pregiMatch', 'condition' => 'mu');
  
  $allowSettings = "1";
  if(wUserCur::getType() == 'admin' && $allowSettings == '1'){
  
    $users = wUsers::selectUsers($usersQuery);
    
    print '<h1>Benutzer, die sich länger als '.$days.' Tage nicht mehr angemeldet haben</h1>';  
    print '<table class="default">';  
    print '<tr><th>Benutzername</th><th>Nachname</th><th>Vorname</th><th>Status setzen</th></tr>'; 
    foreach($users as $user){
      print '<tr><td>'.$user.'</td><td>'.wUserData::getData($user, 'surname').'</td><td>'.wUserData::getData($user, 'firstname').'</td><td><img src="http://domain.dd/weblication/grid5/gui/images/icon_small/status_online.gif" alt="Benutzer aktiv" title="Benutzer aktiv"/> =&gt; <a onclick="if(!confirm(\'Wollen Sie den Benutzer wirklich deaktivieren?\'))return false" href="?action=setOffline&user='.$user.'"> <img src="http://domain.dd/weblication/grid5/gui/images/icon_small/status_offline.gif" alt="Benutzer deaktivieren" title="Benutzer deaktivieren"/> Benutzer deaktivieren</a></td></tr>';    
  
    }
    print '</table><hr />';
    
    if(wRequest::getParameter('action') == 'setOffline' && wRequest::getParameter('user') != ''){
      $user = wRequest::getParameter('user');
      wUsers::setUserOffline($user);
      wResponse::redirect($_SERVER[PHP_SELF]);
    }
  }

?>
</body>
</html>
FAQs
Wie kann ich Benutzer in Weblication® CMS deaktivieren oder löschen, die sich lange nicht angemeldet haben?
Du kannst dafür auf PHP-Framework-Funktionen zurückgreifen. Im Kern wird ein Skript verwendet, um Benutzer anhand ihres letzten Login-Zeitpunkts zu ermitteln und anschließend den Status (offline/deaktiviert) zu setzen.
Wie bestimmt das Beispielskript, welche Benutzer deaktiviert werden sollen?
Im Beispiel wird eine Variable <code class="codeInline">$days</code> definiert (z. B. <code class="codeInline">30</code>). Daraus wird ein Grenzzeitpunkt berechnet: <code class="codeInline">lastLoginTime = time() - ($days * 24 * 60 * 60)</code>. Anschließend werden Benutzer ausgewählt, deren <code class="codeInline">lastLogin</code> älter als dieser Grenzwert ist.
Woher bekommt das Skript die Information über den letzten Login eines Benutzers?
Beim Login in Weblication® CMS wird in der Benutzerdatei im Tag <code class="codeInline">lastLogin</code> ein Unix-Zeitstempel gespeichert. Das Skript greift auf diesen Wert zurück, um zu prüfen, wie lange der letzte Login her ist.
Welche Benutzer werden im Beispielskript ausgeschlossen bzw. gefiltert?
Das Beispiel filtert u. a. nach Status: Es werden nur Benutzer berücksichtigt, bei denen <code class="codeInline">/wUser/status/@online</code> nicht <code class="codeInline">off</code> ist. Zusätzlich wird geprüft, ob <code class="codeInline">/wUser/lastLogin/@value</code> kleiner als der berechnete Grenzzeitpunkt <code class="codeInline">lastLoginTime</code> ist.
Was passiert, wenn ein Benutzer über den generierten Link deaktiviert werden soll?
Wird der Parameter <code class="codeInline">action=setOffline</code> und ein gültiger <code class="codeInline">user</code> übergeben, setzt das Skript den Benutzer mit <code class="codeInline">wUsers::setUserOffline($user)</code> auf „offline“/deaktiviert und leitet danach per <code class="codeInline">wResponse::redirect($_SERVER[PHP_SELF])</code> zur Seite zurück.
Wie kann ich das Beispielskript erweitern (z. B. Benachrichtigung oder Löschen)?
Das Beispiel ist ausdrücklich erweiterbar. Du kannst z. B. vor oder nach dem Deaktivieren zusätzliche Aktionen einbauen, etwa Benutzer benachrichtigen oder die Benutzerdatei löschen.
Welche Rolle spielt <code class="codeInline">$usertype</code> im Beispiel?
<code class="codeInline">$usertype</code> ist im Beispiel für eine mögliche Filterung nach Benutzertyp vorgesehen (z. B. <code class="codeInline">public</code>). Die entsprechenden Filterzeilen sind im Beispiel jedoch auskommentiert, sodass aktuell kein zusätzlicher Benutzertyp-Filter aktiv ist.
Welche Voraussetzungen müssen erfüllt sein, damit das Skript die Benutzerauflistung und Deaktivierung ausführt?
Im Beispiel ist eine Server-/Berechtigungsprüfung enthalten: Es wird nur ausgegeben und eingestellt, wenn <code class="codeInline">wUserCur::getType() == 'admin'</code> und <code class="codeInline">$allowSettings == '1'</code> ist. So werden Deaktivierungsaktionen auf Admins beschränkt.