mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-08-27 13:06:04 +02:00
65 lines
1.6 KiB
Markdown
65 lines
1.6 KiB
Markdown
# Howto: Track Member Logins
|
|
|
|
Sometimes its good to know how active your users are,
|
|
and when they last visited the site (and logged on).
|
|
A simple `LastVisited` property on the `Member` record
|
|
with some hooks into the login process can achieve this.
|
|
In addition, a `NumVisit` property will tell us how
|
|
often the member has visited. Or more specifically,
|
|
how often he has started a browser session, either through
|
|
explicitly logging in or by invoking the "remember me" functionality.
|
|
|
|
|
|
```php
|
|
use SilverStripe\Forms\ReadonlyField;
|
|
use SilverStripe\Security\Security;
|
|
use SilverStripe\ORM\DB;
|
|
use SilverStripe\ORM\DataExtension;
|
|
|
|
class MyMemberExtension extends DataExtension
|
|
{
|
|
private static $db = [
|
|
'LastVisited' => 'Datetime',
|
|
'NumVisit' => 'Int',
|
|
];
|
|
|
|
public function memberLoggedIn()
|
|
{
|
|
$this->logVisit();
|
|
}
|
|
|
|
public function memberAutoLoggedIn()
|
|
{
|
|
$this->logVisit();
|
|
}
|
|
|
|
public function updateCMSFields(FieldList $fields)
|
|
{
|
|
$fields->addFieldsToTab('Root.Main', [
|
|
ReadonlyField::create('LastVisited', 'Last visited'),
|
|
ReadonlyField::create('NumVisit', 'Number of visits')
|
|
]);
|
|
}
|
|
|
|
protected function logVisit()
|
|
{
|
|
if(!Security::database_is_ready()) return;
|
|
|
|
DB::query(sprintf(
|
|
'UPDATE "Member" SET "LastVisited" = %s, "NumVisit" = "NumVisit" + 1 WHERE "ID" = %d',
|
|
DB::get_conn()->now(),
|
|
$this->owner->ID
|
|
));
|
|
}
|
|
}
|
|
|
|
```
|
|
|
|
Now you just need to apply this extension through your config:
|
|
|
|
```yml
|
|
SilverStripe\Security\Member:
|
|
extensions:
|
|
- MyMemberExtension
|
|
```
|