last_login

Gesperrt
Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

last_login

Beitrag von Darth-Vader »

Hallo Contenido-Community,

nachdem ich mich schon lange nicht mehr hier hab blicken lassen ( außer um meine "Fanpost" zu beantworten... ;) :roll: ), hab ich gedacht ich lasse euch ma wieder was zu Gute kommen.

Das kleine Modul nennt sich "last-login" und es zeigt, wie der Name schon sagt, das Datum und die Uhrzeit des letzten login in das Contenido-Backend.

Diese Angabe kann man dann seinen Besuchern schön als "Letzte Änderung" bzw. "Last Change" auf seiner Seite in irgendeiner Ecke "verkaufen"! ;) :lol:
(Denn nur weil man sich eingeloggt hat, heisst noch lange nicht, dass man die Seite auf dem neuesten Stand hält... *fg*)


Ich habe das Feature auf meine Seite einbauen wollen und dazu in der Contenido-FAQ und hier im Contenido-Forum gesucht, aber nichts gefunden. Falls sowas schon existiert ignoriert meinen Beitrag einfach, da ich in dem Fall zu inkompetent und zu Faul war die Suchfunktion korrekt zu benutzen! ;) :lol:


Hier also der OUTPUT des Moduls, INPUT wird also nicht benötigt. :idea:


Code: Alles auswählen

<?php

/*******************************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname      :  last-login
* Author         :  Darth-Vader <lars@forseth.de>
* Copyright      :  Darth-Vader
* Created        :  Feb 11th 2005
********************************************************/


/* initialize db-object */
$db = new DB_Contenido;


/* set sql-query  */
$sql = "SELECT logtimestamp AS time FROM ".$cfg["tab"]["actionlog"]." WHERE idaction=330 ORDER BY time DESC LIMIT 1;";


/* execute sql-query */
$db->query($sql);


/* get resulting row and number of total rows from db */
$db->next_record();
$nr = $db->num_rows();
 

/* only give an output if there was a suitable line found, ergo a timestamp of the last login */
if ($nr == 1) {
    $time = strftime("%d.%m.%Y %H:%M:%S",strtotime($db->f("time")));
    echo "<div class=\"last_login\">Last Change: ".$time."</div>";
} // end if


?>


H i n w e i s:

Dieses Modul funktioniert so nur, wenn euer Tabellenprefix "con" lautet. Solltet ihr also Fehlermeldungen erhalten bezüglich nicht existenten Tabellen, dann passt das SQL-Query bitte an euren Tabellenprefix an! ;)



Wie ihr schlauen Füchse wohl auf den ersten Blick erkannt habt, hab ich die tatsächliche Ausgabe einfach in einen div der CSS-Klasse namens "last_login" gepackt.

Mit anderen Worten:
Wer will, dass das Ganze halbwegs gut aussieht, der sollte eine entsprechende CSS-Klasse in sein CSS-file aufnehmen (normalerweise heisst diese Datei "format.css", falls ihr sie seit der Installation von Contenido nicht umbenannt habt!).

Meine entsprechende CSS-Klasse aus "format.css" sieht folgendermaßen aus:

Code: Alles auswählen

.last_login {
    font-family: Verdana;
    font-size: 12px;
    background-color: #C7D0A6;
    color: black;
    padding: 10px;
    padding-top: 30px;
    border-right: 1px solid #EEF2D9;
    border-left: 1px solid #EEF2D9;
    width: 142px;
}




so long,

Darth. :twisted:
Zuletzt geändert von Darth-Vader am Fr 11. Feb 2005, 22:26, insgesamt 1-mal geändert.
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Faulpelz :wink:

Schön, mal wieder was von Dir zu lesen.

Mit dieser Zeile gehts auch mit dem Nachbarn (bzw. ohne con-Prefix):

Code: Alles auswählen

$sql = "SELECT logtimestamp AS time FROM ".$cfg["tab"]["actionlog"]." WHERE idaction=330 ORDER BY time DESC LIMIT 1;";
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

Beitrag von Darth-Vader »

HerrB hat geschrieben:Faulpelz :wink:

Schön, mal wieder was von Dir zu lesen.

Mit dieser Zeile gehts auch mit dem Nachbarn (bzw. ohne con-Prefix):

was heisst hier faulpelz, ich hab einiges zu tun, glaub mir! ;)

ich wohn ja jetzt seit sept. 2004 in stuttgart und bin BA-Student bei IBM (see: http://www-05.ibm.com/employment/de/sch ... index.html) . Außerdem schrieb ich nächste Woche 4 Klausuren und am Montag drauf geht es direkt weiter in der IBM mit Schulungen. Is net wie bei normalem Studium mit Rumgammeln in den Semesterferien, da es sowas garnet gibt bei uns! ;)


thx, hab ich garnet dran gedacht. hab das gleich mal oben im code abgeändert. :)



wer das modul übrigens mal in action sehen will guckt am besten einfach mal bei mir auf der homepage (see: http://www.forseth.de) am rechten rand am ende der "kästen" nach... ;) 8)
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Ich glaub' Dir, war nur'n Scherz... :wink:

So, so, BAler. Viel Erfolg! Uuuh, IBM, die haben ganz kompetente *hust* Consultants *hust*, denen kannste noch was beibringen... :lol:

Gruß
HerrB
Zuletzt geändert von HerrB am Fr 11. Feb 2005, 22:45, insgesamt 2-mal geändert.
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

Beitrag von Darth-Vader »

:lol: da sach ich jetzt ma nix zu! *HerrB nochmal davon kommen lässt*


btw wenn es interessiert, ich hab en FAQ-Artikel zu dem Modul gemacht:
http://www.thilo-sommer.de/PHPMyFAQ/ind ... 39&lang=de
swelpot
Beiträge: 101
Registriert: Mo 26. Jul 2004, 20:42
Wohnort: Rhein-Main
Kontaktdaten:

Beitrag von swelpot »

Hi,

ohne jetzt eine krieg der module vom zaun brechen zu wollen ;-):
hab da auch noch was in der richtung. "für ehrliche" ;-)
zeigt das wahre datum der letzten änderung an...

alle aus meiner sicht "wirklichen" änderungen (actions) sind am modulanfang in einem array mit erläuterung und können somit bei bedarf auskommentiert oder erweitert werden

Modul-Output

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* LastUpdate
*
* Gibt das Datum der letzten relevanten Änderung aus
*
* Author      :     Stefan Welpot
* Created     :     2004-10-06
* Modified		:			2005-02-12
************************************************/

$array_relevantActions = array(
// Artikel-Actions
   "Startartikel festlegen"								=> $perm->getIDForAction("con_makestart"),
   "Artikel online setzen"								=> $perm->getIDForAction("con_makeonline"),
   "Artikel löschen"											=> $perm->getIDForAction("con_deleteart"),
   "Kategorie schützen"										=> $perm->getIDForAction("con_makepublic"),
   "Template-Konfiguration bearbeiten"		=> $perm->getIDForAction("con_tplcfg_edit"),
   "Kategorie online setzen"							=> $perm->getIDForAction("con_makecatonline"),
   "Template wechseln"										=> $perm->getIDForAction("con_changetemplate"),
   "Artikel syncronisieren"								=> $perm->getIDForAction("con_syncarticle"),
   "Kategorie syncronisieren"							=> $perm->getIDForAction("con_synccat"),
   "Artikel kopieren"											=> $perm->getIDForAction("con_duplicate"),
   "Artikel bearbeiten"										=> $perm->getIDForAction("con_editart"),
   "Artikeleigenschaften bearbeiten"			=> $perm->getIDForAction("con_edit"),
   "Neuen Artikel erstellen"							=> $perm->getIDForAction("con_newart"),
//Kategorie-Actions
   "Neuen Baum anlegen"										=> $perm->getIDForAction("str_newtree"),
   "Neue Kategorie"												=> $perm->getIDForAction("str_newcat"),
   "Kategorie umbenennen"									=> $perm->getIDForAction("str_renamecat"),
   "Kategorie on- oder offline setzen"		=> $perm->getIDForAction("str_makevisible"),
   "Kategorie schützen"										=> $perm->getIDForAction("str_makepublic"),
   "Kategorie löschen"										=> $perm->getIDForAction("str_deletecat"),
   "Eine Kategorie nach oben verschieben"	=> $perm->getIDForAction("str_moveupcat"),
   "Kategorie verschieben"								=> $perm->getIDForAction("str_movesubtree"),
   "Kategorie kopieren"										=> $perm->getIDForAction("str_duplicate"),
   "Kategorie konfigurieren"							=> $perm->getIDForAction("str_tplcfg"),
//Upload-Actions
   "Dateien hochladen"										=> $perm->getIDForAction("upl_upload"),
   "Dateien löschen"											=> $perm->getIDForAction("upl_delete"),
   "Verzeichnis umbenennen"								=> $perm->getIDForAction("upl_renamedir"),
   "Datei modifizieren"										=> $perm->getIDForAction("upl_modify_file"),
   "Datei umbenennen"											=> $perm->getIDForAction("upl_renamefile"),
   "Dateien auf einmal löschen"						=> $perm->getIDForAction("upl_multidelete"),
//Layout-Actions
   "Layout bearbeiten"										=> $perm->getIDForAction("lay_edit"),
//Modul-Actions
   "Modul bearbeiten"											=> $perm->getIDForAction("mod_edit"),
   "Modul übersetzen"											=> $perm->getIDForAction("mod_translation_save"),
   "Modulübersetzung importieren/exportieren" => $perm->getIDForAction("mod_importexport_translation"),
//Style-Actions
   "Modify CSS"														=> $perm->getIDForAction("style_edit")
);




$tpl = new Template();

/* Start Output buffer */
ob_start();


$db = new DB_Contenido;
$sql =   "SELECT " .
         "MAX(logtimestamp) AS maxTimeStamp " .
      "FROM ".
         $cfg["tab"]["actionlog"];

//where-bedingung zusammenbauen
if(count($array_relevantActions) > 0) {
   $sql .= " WHERE";
   foreach($array_relevantActions as $idaction) {
      $sql .= " idaction = " . $idaction . " OR";
   }
   
   $sql = substr($sql, 0, strlen($sql) - 3);
}

$db->query($sql);


if($db->next_record()) {
   $tpl->set('s', "LASTUPDATE", date("d.m.Y", strtotime($db->f("maxTimeStamp"))));
} // end if
else {
   $tpl->set('s', "LASTUPDATE", "");
}


$tpl->generate("templates/lastupdate.html", false, false);

/* Read out buffer */
$html = ob_get_contents();

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo $html;
?>
einfaches template dazu für "cms/templates":
lastupdate.html

Code: Alles auswählen

Letzte Aktualisierung:<br>
{LASTUPDATE}

//edit:
liegt auch als zip auf:
http://www.swelpot.de/temp/lastUpdate.zip
Zuletzt geändert von swelpot am Sa 12. Feb 2005, 12:30, insgesamt 2-mal geändert.
Grüße

Stefan
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

@swelpot
die feste angabe der id halte ich für keine gute idee...
wenn sich da ne id ändert müsstest du jedesmal nachbessern...

an deiner stelle würde ich $perm->getIDForAction("con_makestart"); verwenden um die id zu bekommen...

ich spiel mich gerade mit einer option für die setup routine die darauf rücksicht nimmt, wenn sich ids ändern... mir ist das ganze nämlich ne spur zu unflexibel...
*** make your own tools (wishlist :: thx)
swelpot
Beiträge: 101
Registriert: Mo 26. Jul 2004, 20:42
Wohnort: Rhein-Main
Kontaktdaten:

Beitrag von swelpot »

hi emergence,

fühle mich damit auch nicht so wohl. deine mglk. kannte ich noch nicht.
dachte allerdings, dass die bisherigen ids erstmal bleiben...
danke für den hinweis ;-)
Grüße

Stefan
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

swelpot hat geschrieben:dachte allerdings, dass die bisherigen ids erstmal bleiben...
sie sollten ja so bleiben, mir gefällts trotzdem nicht...
der grund ist ein simpler... sollte sich wirklich mal aus versehen was ändern wären einträge im con_actionlog und con_rights einfach nur schrott... das ist nur ne vorbeugende maßnahme meinerseits...
*** make your own tools (wishlist :: thx)
swelpot
Beiträge: 101
Registriert: Mo 26. Jul 2004, 20:42
Wohnort: Rhein-Main
Kontaktdaten:

Beitrag von swelpot »

ja, ist mir klar...
nur mangels erfahrungen mit $perm gab für meinen horizont leider keine andere möglichkeit. :?
deswegen ja auch der dank :D

hab es jetzt nochmal geändert und auch im ersten post editiert.
denke, dass das so o.k. ist...

wobei ich jetzt nur noch bedenken hätte (vielleicht auch nur mangels wissen):
werden alle actionids in der $perm-instanz vorgehalten oder führt getIDForAction(actionname) jedesmal eine query aus?
dann fände ich das bei all den actions in diesem konkreten fall nicht so doll.

ich werde mal nachsehen...
Grüße

Stefan
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

swelpot hat geschrieben:wobei ich jetzt nur noch bedenken hätte (vielleicht auch nur mangels wissen):
werden alle actionids in der $perm-instanz vorgehalten oder führt getIDForAction(actionname) jedesmal eine query aus?
dann fände ich das bei all den actions in diesem konkreten fall nicht so doll.
ach den teil kannst du dir sparen, das hab ich schon umgebaut...

in der klasse perm.inc hab ich mir selbst folgendes reingebaut...

Code: Alles auswählen

	function Contenido_Perm() {

		global $cfg;

		// init
		$this->db = new DB_Contenido;

		// create area cache
		$sql = "SELECT
					name, idarea
				FROM
					".$cfg["tab"]["area"];

		$this->db->query($sql);

		while ($this->db->next_record()) {
			$this->areacache[$this->db->f("name")] = $this->db->f("idarea");
		}

		// create action cache
		$sql = "SELECT
					name, idaction
				FROM
					".$cfg["tab"]["actions"];
		$this->db->query($sql);

		while ($this->db->next_record()) {
			$this->actioncache[$this->db->f("name")] = $this->db->f("idaction");
		}

	}
damit wird beim erstmaligen aufruf der areacache und actioncache erzeugt... und zusätzlich eine db klasse initialisiert...

sämtliche
$db_perm = new DB_Contenido;
$db = new DB_Contenido;

und die $db in global können gelöscht werden...

anschließend einfach alle

$db_perm durch $this->db
$db durch $this->db

ersetzen...

wichtig ist einfach nur in genau der reihenfolge...

getestet hab ich das mit dem perm.inc der 4.4.5 und CVS_Head

ansonsten ist es so das beinahe bei jeden zugriff auf die $perm klasse eine db instanz initialisiert wird... das ganze sollte dann etwas schneller sein...
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

emergence hat geschrieben: ansonsten ist es so das beinahe bei jeden zugriff auf die $perm klasse eine db instanz initialisiert wird... das ganze sollte dann etwas schneller sein...
Das Problem sind hierbei geschachtelte Funktionen -> dadurch können unerwünschte Effekte entstehen, z.b. eine Methode ruft innerhalb einer $this->db->next_record-Schleife eine Unterfunktion auf, die selbst wiederum das $this->db Objekt verwendet...ich kann es aber im Moment nicht verifizieren ob das wirklich der Fall ist
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

die sache hier ist nicht so dringend...

soweit ich das verifiziert habe (ich setze es momentan bei zwei größeren projekten bis in etwa 20 user ein) gabs bis jetzt noch kein einziges problem...
*** make your own tools (wishlist :: thx)
Gesperrt