Logging - Studio-42/elFinder GitHub Wiki
This page demonstrates how to use elFinder connector event API to implement simple logging. Event API uses callbacks similar to jQuery.bind()
and defined using bind
connector option.
Using function callback
<?php
/**
* Smart logger function
* Demonstrate how to work with elFinder event api
*
* @param string $cmd command name
* @param array $result command result
* @param array $args command arguments from client
* @param elFinder $elfinder elFinder instance
* @param volume $volume elFinder current volume instance
* @return void|true
* @author Troex Nevelin
**/
function logger($cmd, $result, $args, $elfinder, $volume) {
$log = sprintf('[%s] %s:', date('r'), strtoupper($cmd));
foreach ($result as $key => $value) {
if (empty($value)) {
continue;
}
$data = array();
if (in_array($key, array('error', 'warning'))) {
array_push($data, implode(' ', $value));
} else {
if (is_array($value)) { // changes made to files
foreach ($value as $file) {
$filepath = (isset($file['realpath']) ? $file['realpath'] : $elfinder->realpath($file['hash']));
array_push($data, $filepath);
}
} else { // other value (ex. header)
array_push($data, $value);
}
}
$log .= sprintf(' %s(%s)', $key, implode(', ', $data));
}
$log .= "\n";
$logfile = '../files/temp/log.txt';
$dir = dirname($logfile);
if (!is_dir($dir) && !mkdir($dir)) {
return;
}
if (($fp = fopen($logfile, 'a'))) {
fwrite($fp, $log);
fclose($fp);
}
}
$opts = array(
'bind' => array(
'mkdir mkfile rename duplicate upload rm paste' => 'logger'
),
'roots' => array(...)
);
Using class instance callback
<?php
/**
* Simple logger function.
* Demonstrate how to work with elFinder event api.
*
* @package elFinder
* @author Dmitry (dio) Levashov
**/
class elFinderSimpleLogger {
/**
* Log file path
*
* @var string
**/
protected $file = '';
/**
* constructor
*
* @return void
* @author Dmitry (dio) Levashov
**/
public function __construct($path) {
$this->file = $path;
$dir = dirname($path);
if (!is_dir($dir)) {
mkdir($dir);
}
}
/**
* Create log record
*
* @param string $cmd command name
* @param array $result command result
* @param array $args command arguments from client
* @param elFinder $elfinder elFinder instance
* @param volume $volume elFinder current volume instance
* @return void|true
* @author Dmitry (dio) Levashov
**/
public function log($cmd, $result, $args, $elfinder, $volume) {
$log = $cmd.' ['.date('d.m H:s')."]\n";
if (!empty($result['error'])) {
$log .= "\tERROR: ".implode(' ', $result['error'])."\n";
}
if (!empty($result['warning'])) {
$log .= "\tWARNING: ".implode(' ', $result['warning'])."\n";
}
if (!empty($result['removed'])) {
foreach ($result['removed'] as $file) {
// removed file contain additional field "realpath"
$log .= "\tREMOVED: ".$file['realpath']."\n";
}
}
if (!empty($result['added'])) {
foreach ($result['added'] as $file) {
$log .= "\tADDED: ".$elfinder->realpath($file['hash'])."\n";
}
}
if (!empty($result['changed'])) {
foreach ($result['changed'] as $file) {
$log .= "\tCHANGED: ".$elfinder->realpath($file['hash'])."\n";
}
}
$this->write($log);
}
/**
* Write log into file
*
* @param string $log log record
* @return void
* @author Dmitry (dio) Levashov
**/
protected function write($log) {
if (($fp = @fopen($this->file, 'a'))) {
fwrite($fp, $log."\n");
fclose($fp);
}
}
}
$myLogger = new elFinderSimpleLogger('files/temp/log.txt');
$opts = array(
'bind' => array(
'mkdir mkfile rename duplicate upload rm paste' => array($myLogger, 'log'),
),
'roots' => array(...)
);