Übersicht der Personen, die gerade Online sind

Hast du Vorschläge, was wir an Admidio noch verbessern könnten ? Hier kannst du uns deine Vorstellung an neuen Funktionen mitteilen.
Antworten
Pendagon
Beiträge: 2
Registriert: 7. Jan 2010, 20:01

Übersicht der Personen, die gerade Online sind

Beitrag von Pendagon »

Hallo zusammen,

ich (Alex) bin hier sehr neu und eher durch einen Zufall auf Admidio gestoßen. Ich bin restlos begeistert und finde es super! Vielen vielen Dank dafür.

Nun habe ich eine Frage... ist es möglich, irgendwo zu sehen, wer wann online war?

Vielen Dank für eine Info,...

Alex
bettes
Beiträge: 65
Registriert: 12. Mai 2008, 23:33
Kontaktdaten:

Beitrag von bettes »

Hallo Pendagon,

bisher gibt es keine Möglichkeit das letzte Online-Datum auszuwerten. Dieses wird zwar in der Datenbank mit gespeichert jedoch aber nicht angezeigt. Man müsste hierzu entweder direkt auf die datenbank sehen (was aber für regelmäßige Besuche unpraktisch ist) oder Du müsstest dafür eine separate Liste schreiben.

Wie das geht ist in dem Thread von Ise http://forum.admidio.org/viewtopic.php?t=2528 beschrieben. Die Tabelle hierfür lautet adm_users

Gruß
Bettes
Pendagon
Beiträge: 2
Registriert: 7. Jan 2010, 20:01

Beitrag von Pendagon »

Hallo Bettes,

vielen Dank :-) Das hilft mir schon mal weiter.

Viele Grüße,

Alex
bettes
Beiträge: 65
Registriert: 12. Mai 2008, 23:33
Kontaktdaten:

Beitrag von bettes »

Hallo nochmals,

ich habe nochmal nachgedacht: Das passende SQL-Statement sollte wie folgt lauten:

Code: Alles auswählen

  $sql = "SELECT usr_id, row3id19.usd_value, row4id20.usd_value, usr_last_login, usr_login_name
      FROM ". TBL_ROLES. ", ". TBL_CATEGORIES. ", ". TBL_MEMBERS. ", ". TBL_USERS. "
	  LEFT JOIN adm_user_data row3id19 ON row3id19.usd_usr_id = usr_id  AND row3id19.usd_usf_id = 19
	  LEFT JOIN adm_user_data row4id20 ON row4id20.usd_usr_id = usr_id  AND row4id20.usd_usf_id = 20
      WHERE rol_id = 2 
	  AND mem_begin <= '".DATE_NOW."'
	  AND mem_end    > '".DATE_NOW."' 
      AND rol_valid = 1
      AND rol_cat_id = cat_id
      AND cat_org_id = 1
      AND mem_rol_id = rol_id
      AND mem_usr_id = usr_id
      AND usr_valid = 1
	  AND usr_login_name is not null
      ORDER BY usr_id ASC";

$result = $g_db->query($sql);
Gruß
Bettes
bettes
Beiträge: 65
Registriert: 12. Mai 2008, 23:33
Kontaktdaten:

Beitrag von bettes »

hallo pendagon,

ich habe nochmals ein wenig ausprobiert, da mich diese Fragestellung durchaus auch interessiert. Ingesamt müsste die Liste dann wie folgt codiert werden:

Code: Alles auswählen

<link rel="stylesheet" type="text/css" href="http://deine_domäne.de/adm_themes/classic/css/listen.css" />

<script type="text/javascript" src="http://deine_domäne.de/adm_program/libs/jquery/jquery.js"></script>
<script type="text/javascript" src="http://deine_domäne.de/adm_program/system/js/common_functions.js"></script>
</head>
<body>
  <?php
	
include_once($_SERVER['DOCUMENT_ROOT']. "/adm_program/system/common.php");

// USD_USF_ID 19 = Name *** ist je nach Installation unterschiedlich
// USD_USF_ID 20 = Vorname *** ist je nach Installation unterschiedlich

// Ermittlung der Daten für die gesamte Datenbank //
// Die Einschränkung der Where Bedingung usr_login_name is not null zeigt nur Mitglieder mit einer gültigen Anmeldung 
 $sql = "SELECT usr_id, row3id19.usd_value, row4id20.usd_value, usr_last_login, usr_login_name
      FROM ". TBL_ROLES. ", ". TBL_CATEGORIES. ", ". TBL_MEMBERS. ", ". TBL_USERS. "
	  LEFT JOIN adm_user_data row3id19 ON row3id19.usd_usr_id = usr_id  AND row3id19.usd_usf_id = 19
	  LEFT JOIN adm_user_data row4id20 ON row4id20.usd_usr_id = usr_id  AND row4id20.usd_usf_id = 20
      WHERE rol_id = 2 
	  AND mem_begin <= '".DATE_NOW."'
	  AND mem_end    > '".DATE_NOW."' 
      AND rol_valid = 1
      AND rol_cat_id = cat_id
      AND cat_org_id = 1
      AND mem_rol_id = rol_id
      AND mem_usr_id = usr_id
      AND usr_valid = 1
	  AND usr_login_name is not null
      ORDER BY usr_last_login desc,usr_id ASC";
$result = $g_db->query($sql);

// Wenn die Ausgabe der Abfrage als SQL-Select erfolgen soll, dann Kommentierung entfernen
// echo $sql; exit();

// Ab hier erfolgt Aufbereitung der Ergebnisliste
// Erst mal der Kopf
echo '<table id="ListTable" width="100%">';
echo '<tr >';
echo '<td class="ListHeader" colspan="4" align="center">Anmeldestatistik</td>';
echo '</tr>';

echo '<tr >';
echo '<td class="ListSubHeader">Name</td>';
echo '<td class="ListSubHeader">Vorname</td>';
echo '<td class="ListSubHeader">Benutzername</td>';
echo '<td class="ListSubHeader">letzter Login</td></tr>';
 
$listrowstyle = "ListhighList";

while($row = $g_db->fetch_array($result))
  {
  
  if ($listrowstyle =="ListhighList")
  	{
	$listrowstyle = "ListlowList";
	}
  else $listrowstyle ="ListhighList";
 
  //Hier wird das Userobjekt erzeugt welches die Informationen über den User sammelt

   $user = new User($g_db, $row['usr_id']);

  $usr_id = $row['usr_id'];
  $usr_lastname = $user->getValue("Nachname");
  $usr_name = $user->getValue("Vorname");

  // Umwandlung des Login-Datums in deutsche Schreibweise
  $usr_last_login = mysqldatetime('d.m.y',$row['usr_last_login']);
  $usr_username = utf8_encode($row['usr_login_name']);

  echo '<tr><td class="'.$listrowstyle.'">'.$usr_lastname.'</td>';
  echo '<td class="'.$listrowstyle.'">'.$usr_name.'</td>';
  echo '<td class="'.$listrowstyle.'">'.$usr_last_login.'</td>';
  echo '<td class="'.$listrowstyle.'">'.$usr_username.'</td></tr>';
  
}

// Und hier schließen wir wieder die Tabelle
echo '</table>';
?>

</body>

Die Liste funktioniert soweit, benötigt aber eine separate css - bei mir die listen.css kann aber natürlich auch jede andere sein.
Ich habe bei dem Code nur noch ein Problem, bei dem ich von den Programmierern Hilfe brauche.

Ich möchte diese Liste immer separat aufrufen, allerdings soll bei fehlendem Login noch die Login-Maske erscheinen - sind ja schließlich nicht unbedingt öffentliche daten die da ausgewertet werden. Nach dem login die Liste dann aufgerufen werden. Wie kann und sollte in diesem Falle die Codierung vorgenommen werden?

Gruß
Bettes
matzman2000
Former team member
Beiträge: 1087
Registriert: 2. Sep 2007, 17:12
Wohnort: Itzstedt
Kontaktdaten:

Beitrag von matzman2000 »

bettes hat geschrieben:Ich möchte diese Liste immer separat aufrufen, allerdings soll bei fehlendem Login noch die Login-Maske erscheinen - sind ja schließlich nicht unbedingt öffentliche daten die da ausgewertet werden. Nach dem login die Liste dann aufgerufen werden. Wie kann und sollte in diesem Falle die Codierung vorgenommen werden?
Moin Bettes,

einfach im Kopf der PHP Datei das Login mit einbinden:

Code: Alles auswählen

require_once($g_root_path.'adm_program/system/login_valid.php');
Dann gehts nur weiter mit gültigem Login.

Gruss,
Matze
ise
Beiträge: 119
Registriert: 11. Sep 2009, 11:08
Wohnort: Schweiz

Beitrag von ise »

Hallo bettes,
Um die Seite durch ein Login zu sichern musst du nur folgende Zeile in deinen Code einfügen:

Code: Alles auswählen

require_once("../../system/login_valid.php");
Sofern du aber möchtest, dass nur der Webmaster oder eine definierte Rolle auf die Webseite zugreifen darf, so kannst du immer noch folgende IF-Schlaufe einfügen:

Code: Alles auswählen

if($g_current_user->isWebmaster() || hasRole("Leiter") == true)
Gruss
Ise
bettes
Beiträge: 65
Registriert: 12. Mai 2008, 23:33
Kontaktdaten:

Beitrag von bettes »

Hallo Matze, hallo Ise,

Danke für den Hinweis. Das hatte ich auch vorab schon probiert, jedoch blieb dann die Seite leer und es erschien auch keine Login-Maske.

Und eine parallele Anmeldung in einem anderen Tab führt auch nicht zum Erfolg.

Stylesheet, jquery und common_functions werden korrekt eingebunden.

Es muss also noch an etwas anderem liegen. Vielleicht weiß ja jemand Rat?

Gruß
Bettes
matzman2000
Former team member
Beiträge: 1087
Registriert: 2. Sep 2007, 17:12
Wohnort: Itzstedt
Kontaktdaten:

Beitrag von matzman2000 »

Mal ganz direkt gefragt: Hast Du die common.php mit eingebunden?
Ansonsten schicke mir den gesamten Inhalt der Datei einfach als PN - gucke ich mal drauf.
bettes
Beiträge: 65
Registriert: 12. Mai 2008, 23:33
Kontaktdaten:

Login-Maske erscheint weiterhin nicht

Beitrag von bettes »

Hallo nochmals,

auch wenn ich mit matze über pn in Kontakt stehe, wollte ich nochmal mein Problem hier schildern.

Ich habe die o.g. Liste nun zusätzlich mit der funktion login_valid versehen:

Code: Alles auswählen

?> 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />


<title>Letzte Anmeldung</title>

<link rel="stylesheet" type="text/css" href="http://meine_domäne.de/adm_themes/classic/css/listen.css" />

<script type="text/javascript" src="http://meine_domäne.de/adm_program/libs/jquery/jquery.js"></script>
<script type="text/javascript" src="http://meine_domäne.de/adm_program/system/js/common_functions.js"></script>
</head>
<body>
  <?php
   include_once($_SERVER['DOCUMENT_ROOT']. "/adm_program/system/common.php");

   require_once($_SERVER['DOCUMENT_ROOT']."/adm_program/system/login_valid.php");
	
...


Wenn ich meine Anmeldung mit dem Merkmal "angemeldet bleiben" versehe, dann erhalte ich eine Listausgabe. Bin ich aber auf einem parallelen Tab ausgeloggt, dann bleibt die separate Liste leer.
Es erscheint weder die login-maske noch irgendeine andere Reaktion. Im HTML-Code ist zu erkennen, dass der Header korrekt geschrieben wurde, jedoch der Body bleibt leer.

Mein Wunsch ist es bei fehlender Anmeldung, dass die Login-Maske erscheint und nach Anmeldung zur Liste zurückgekehrt wird.

Wo kann das Problem noch liegen?

Gruß
Bettes
Antworten