/** * 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 * @return void|true * @author Dmitry (dio) Levashov **/ public function log($cmd, &$result, $args, $elfinder) { $log = $cmd . ' [' . date('d.m H:s') . "]\n"; if ($cmd === 'netmount' && is_object($this->xoopsUser) && (!empty($result['sync']) || !empty($result['added']))) { if ($uid = $this->xoopsUser->getVar('uid')) { $uid = intval($uid); $table = $this->db->prefix($this->mydirname . '_userdat'); $netVolumes = $this->db->quoteString(serialize($_SESSION[_MD_XELFINDER_NETVOLUME_SESSION_KEY])); $sql = 'SELECT `id` FROM `' . $table . '` WHERE `key`=\'netVolumes\' AND `uid`=' . $uid; if ($res = $this->db->query($sql)) { if ($this->db->getRowsNum($res) > 0) { $sql = 'UPDATE `' . $table . '` SET `data`=' . $netVolumes . ', `mtime`=' . time() . ' WHERE `key`=\'netVolumes\' AND `uid`=' . $uid; } else { $sql = 'INSERT `' . $table . '` SET `key`=\'netVolumes\', `uid` = ' . $uid . ', `data`=' . $netVolumes . ', `mtime`=' . time(); } $this->db->queryF($sql); } } } 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: " . $elfinder->realpath($file['hash']) . "\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"; } } if (!empty($result['added']) && in_array($cmd, array('mkdir', 'mkfile', 'put', 'upload', 'extract'))) { $mail = false; if (is_object($this->xoopsUser)) { if ($this->isAdmin) { $mail = in_array(XOOPS_GROUP_ADMIN, $this->config['mail_notify_group']); } else { $mail = array_intersect($this->config['mail_notify_group'], $this->mygids); } } else { $mail = $this->config['mail_notify_guest']; } //$log .= "\n\$mail=".($mail? 'On' : 'Off')."\n"; if ($mail) { $config_handler = xoops_gethandler('config'); $xoopsConfig = $config_handler->getConfigsByCat(XOOPS_CONF); $sep = "\n" . str_repeat('-', 40) . "\n"; $self = XOOPS_MODULE_URL . '/' . $this->mydirname . '/connector.php'; if (is_object($this->xoopsUser)) { $uname = $this->xoopsUser->uname('n'); $uid = $this->xoopsUser->uid(); } else { $uname = $xoopsConfig['anonymous']; $uid = 0; } $date = date('c'); $head = <<<EOD USER: {$uname} UID: {$uid} IP: {$_SERVER['REMOTE_ADDR']} CMD: {$cmd} DATE: {$date} EOD; $msg = array(); foreach ($result['added'] as $file) { $url = 'unknown'; if (!empty($file['url'])) { $url = $file['url'] != 1 ? $file['url'] : 'ondemand'; } else { $url = $self . '?cmd=file&target=' . $file['hash']; } $dl = $self . '?cmd=file&download=1&target=' . $file['hash']; $hash = $file['hash']; $path = $elfinder->realpath($file['hash']); $name = $file['name']; $manager = XOOPS_MODULE_URL . '/' . $this->mydirname . '/manager.php#elf_' . $file['phash']; $msg[] = <<<EOD HASH: {$hash} PATH: {$path} NAME: {$name} URL: {$url} DOWNLOAD: {$dl} MANAGER: {$manager} EOD; } $sitename = $xoopsConfig['sitename']; $modname = $this->xoopsModule->getVar('name'); $subject = '[' . $modname . '] Cmd: "' . $cmd . '" Report'; $message = join($sep, $msg); if (strtoupper(_CHARSET) !== 'UTF-8') { ini_set('default_charset', _CHARSET); if (version_compare(PHP_VERSION, '5.6', '<')) { ini_set('mbstring.internal_encoding', _CHARSET); } else { @ini_set('mbstring.internal_encoding', ''); } $message = mb_convert_encoding($message, _CHARSET, 'UTF-8'); } $xoopsMailer = getMailer(); $xoopsMailer->useMail(); $xoopsMailer->setFromEmail($xoopsConfig['adminmail']); $xoopsMailer->setFromName($sitename . ':' . $modname); $xoopsMailer->setSubject($subject); $xoopsMailer->setBody($head . $sep . $message); $xoopsMailer->setToEmails($xoopsConfig['adminmail']); $xoopsMailer->send(); $xoopsMailer->reset(); if (strtoupper(_CHARSET) !== 'UTF-8') { ini_set('mbstring.internal_encoding', 'UTF-8'); } } } $this->write($log); if (in_array($cmd, array('mkdir', 'mkfile', 'put', 'paste', 'upload', 'extract', 'resize'))) { if (!empty($result['changed'])) { if (($target = $result['changed'][0]['phash']) && ($volume = $elfinder->getVolume($target))) { if ($parents = $volume->parents($target, true)) { $result['changed'] = array_merge($result['changed'], $parents); } } } } }