ke kazdemu SQL dotazu v administraci pridat komentar /* $user_id */

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
MzK
Člen | 127
+
0
-

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
+
0
-

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)