ke kazdemu SQL dotazu v administraci pridat komentar /* $user_id */
- MzK
- Člen | 127
Po přihlášení do administrace mohou uživatelé přidávat články,
editovat články, přidávat obrázky a další věci.
Ne všechny věci mám ošetřené a tak bych chtěl pomocí dibi logovat akce
uživatelů.
Představil bych si to tak, že buď do SQL dotazu přidám komentář
obsahující ID uživatele nebo se přidá jako popis sql dotazu.
Například takto:
<?php
OK: INSERT INTO `category` (id,name) ('', 'moje kategorie'); /*komentar s $id_uzivatele */
-- rows: 1
-- takes: 0,000 ms
-- driver: mysql/0
-- 2010-10-25 21:15:16
-- user: $id_prihlaseneho_uzivatele_nebo_cokoliv_jineho
?>
Napadlo mne bud to přidat jako parametr k modelu. Ale modelů je víc
(komentare, clanky, novinkyModel) a ty s sebou nesouvisí.
Nebo měnit přímo /libs/dibi/ ale to se mi nechce kvůli aktualizacím na
nové verze (změnu bych musel přenášet).
Nebo extra třída pro logování např do sql tabulky logy
? To se
mi nechce, protože pak by se logovalo na více místech (dibi i log)
Díky za navedení správným směrem.
- Filip Procházka
- Moderator | 4668
Tenhle dotaz patří do dibi fóra ;-) https://forum.dibiphp.com/cs/
Ale k tématu… Vytvoř si vlastní profiler? :)
[database]
user = root
pass = root
host = localhost
database = db
profiler.class = MyProfiler
profiler.run = TRUE
takováhle úprava bude asi nejjednodužší, byť se mi nelíbí, že měním jenom 1 řádek z pěkně velké funkce…
class MyProfiler extends \DibiProfiler
{
/**
* After event notification.
* @param int
* @param DibiResult
* @return void
*/
public function after($ticket, $res = NULL)
{
if (!isset(self::$tickets[$ticket])) {
throw new InvalidArgumentException('Bad ticket number.');
}
$ticket = & self::$tickets[$ticket];
$ticket[3] += microtime(TRUE);
list($connection, $event, $sql, $time) = $ticket;
dibi::$elapsedTime = $time;
dibi::$totalTime += $time;
if (($event & $this->filter) === 0) return;
if ($event & self::QUERY) {
try {
$ticket[4] = $count = $res instanceof DibiResult ? count($res) : '-';
} catch (Exception $e) {
$count = '?';
}
if (count(self::$fireTable) < self::$maxQueries) {
self::$fireTable[] = array(
sprintf('%0.3f', $time * 1000),
strlen($sql) > self::$maxLength ? substr($sql, 0, self::$maxLength) . '...' : $sql,
$count,
$connection->getConfig('driver') . '/' . $connection->getConfig('name')
);
if ($this->explainQuery && $event === self::SELECT) {
$tmpSql = dibi::$sql;
try {
$ticket[5] = dibi::dump($connection->setProfiler(NULL)->nativeQuery('EXPLAIN ' . $sql), TRUE);
} catch (DibiException $e) {}
$connection->setProfiler($this);
dibi::$sql = $tmpSql;
}
if ($this->useFirebug && !headers_sent()) {
header('X-Wf-Protocol-dibi: http://meta.wildfirehq.org/Protocol/JsonStream/0.2');
header('X-Wf-dibi-Plugin-1: http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.2.0');
header('X-Wf-dibi-Structure-1: http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1');
$payload = json_encode(array(
array(
'Type' => 'TABLE',
'Label' => 'dibi profiler (' . dibi::$numOfQueries . ' SQL queries took ' . sprintf('%0.3f', dibi::$totalTime * 1000) . ' ms)',
),
self::$fireTable,
));
foreach (str_split($payload, 4990) as $num => $s) {
$num++;
header("X-Wf-dibi-1-1-d$num: |$s|\\"); // protocol-, structure-, plugin-, message-index
}
header("X-Wf-dibi-1-1-d$num: |$s|");
}
}
if ($this->file) {
$this->writeFile(
"OK: " . $sql
. ($res instanceof DibiResult ? ";\n-- rows: " . $count : '')
. "\n-- takes: " . sprintf('%0.3f', $time * 1000) . ' ms'
. "\n-- driver: " . $connection->getConfig('driver') . '/' . $connection->getConfig('name')
. "\n-- " . date('Y-m-d H:i:s')
. "\n-- logged user " . \Nette\Environment::getUser()->getIdentity()->id
. "\n\n"
);
}
}
}
}
Editoval HosipLan (12. 11. 2010 8:13)