You can install this plugin into your CakePHP application using composer.
The recommended way to install composer packages is:
composer require elstc/cakephp-activity-logger
(CakePHP >= 3.6.0) Load the plugin by adding the following statement in your project's src/Application.php
:
$this->addPlugin('Elastic/ActivityLogger');
(CakePHP <= 3.5.x) Load the plugin by adding the following statement in your project's config/bootstrap.php
file:
Plugin::load('Elastic/ActivityLogger');
run migration command:
bin/cake migrations migrate -p Elastic/ActivityLogger
class ArticlesTable extends Table
{
public function initialize(array $config)
{
// ...
$this->addBehavior('Elastic/ActivityLogger.Logger', [
'scope' => [
'Articles',
'Authors',
],
]);
}
}
$artice = $this-Articles->newEnity([ /* ... */ ]);
$this->Articles->save($artice);
// saved log
// [action='create', scope_model='Articles', scope_id=$article->id]
$artice = $this-Articles->patchEnity(artice, [ /* ... */ ]);
$this->Articles->save($artice);
// saved log
// [action='update', scope_model='Articles', scope_id=$article->id]
$artice = $this-Articles->get($id);
$this->Articles->delete($artice);
// saved log
// [action='delete', scope_model='Articles', scope_id=$article->id]
$this->Articles->setLogIssuer($author); // Set issuer
$artice = $this-Articles->newEnity([ /* ... */ ]);
$this->Articles->save($artice);
// saved log
// [action='create', scope_model='Articles', scope_id=$article->id, ...]
// and
// [action='create', scope_model='Auhtors', scope_id=$author->id, ...]
class CommentsTable extends Table
{
public function initialize(array $config)
{
// ...
$this->addBehavior('Elastic/ActivityLogger.Logger', [
'scope' => [
'Articles',
'Authors',
'Users',
],
]);
}
}
$this->Comments->setLogScope([$user, $article]); // Set scope
$comment = $this-Comments->newEnity([ /* ... */ ]);
$this->Comments->save($comment);
// saved log
// [action='create', scope_model='Users', scope_id=$article->id, ...]
// and
// [action='create', scope_model='Articles', scope_id=$author->id, ...]
$this->Articles->activityLog(\Psr\Log\LogLevel::NOTICE, 'Custom Messages', [
'action' => 'custom',
'object' => $artice,
]);
// saved log
// [action='custom', 'message' => 'Custom Messages', scope_model='Articles', scope_id=$article->id, ...]
$logs = $this->Articles->find('activity', ['scope' => $article]);