PageRenderTime 26ms CodeModel.GetById 1ms RepoModel.GetById 1ms app.codeStats 0ms

/administrator/includes/pcl/pcltrace.lib.php

https://bitbucket.org/asosso/joomla15
PHP | 459 lines | 264 code | 51 blank | 144 comment | 31 complexity | 57d0053cb7e3d5faa3165a340d204d42 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0
  1. <?php
  2. /**
  3. * @version $Id: pcltrace.lib.php 10381 2008-06-01 03:35:53Z pasamio $
  4. * @package Joomla
  5. */
  6. // --------------------------------------------------------------------------------
  7. // PhpConcept Library (PCL) Trace 1.0
  8. // --------------------------------------------------------------------------------
  9. // License GNU/GPL - Vincent Blavet - Janvier 2001
  10. // http://www.phpconcept.net & http://phpconcept.free.fr
  11. // --------------------------------------------------------------------------------
  12. // Fran�ais :
  13. // La description de l'usage de la librairie PCL Trace 1.0 n'est pas encore
  14. // disponible. Celle-ci n'est pour le moment distribu�e qu'avec l'application
  15. // et la librairie PhpZip.
  16. // Une version ind�pendante sera bientot disponible sur http://www.phpconcept.net
  17. //
  18. // English :
  19. // The PCL Trace 1.0 library description is not available yet. This library is
  20. // released only with PhpZip application and library.
  21. // An independant release will be soon available on http://www.phpconcept.net
  22. //
  23. // --------------------------------------------------------------------------------
  24. //
  25. // * Avertissement :
  26. //
  27. // Cette librairie a �t� cr��e de fa�on non professionnelle.
  28. // Son usage est au risque et p�ril de celui qui l'utilise, en aucun cas l'auteur
  29. // de ce code ne pourra �tre tenu pour responsable des �ventuels d�gats qu'il pourrait
  30. // engendrer.
  31. // Il est entendu cependant que l'auteur a r�alis� ce code par plaisir et n'y a
  32. // cach� aucun virus, ni malveillance.
  33. // Cette libairie est distribu�e sous la license GNU/GPL (http://www.gnu.org)
  34. //
  35. // * Auteur :
  36. //
  37. // Ce code a �t� �crit par Vincent Blavet (vincent@blavet.net) sur son temps
  38. // de loisir.
  39. //
  40. // --------------------------------------------------------------------------------
  41. // ----- Look for double include
  42. if (!defined("PCLTRACE_LIB"))
  43. {
  44. define( "PCLTRACE_LIB", 1 );
  45. // ----- Version
  46. $g_pcl_trace_version = "1.0";
  47. // ----- Internal variables
  48. // These values must be change by PclTrace library functions
  49. $g_pcl_trace_mode = "memory";
  50. $g_pcl_trace_filename = "trace.txt";
  51. $g_pcl_trace_name = array();
  52. $g_pcl_trace_index = 0;
  53. $g_pcl_trace_level = 1;
  54. //$g_pcl_trace_entries = array();
  55. // --------------------------------------------------------------------------------
  56. // Function : TrOn($p_level, $p_mode, $p_filename)
  57. // Description :
  58. // Parameters :
  59. // $p_level : Trace level
  60. // $p_mode : Mode of trace displaying :
  61. // 'normal' : messages are displayed at function call
  62. // 'memory' : messages are memorized in a table and can be display by
  63. //TrDisplay() function. (default)
  64. // 'log': messages are writed in the file $p_filename
  65. // --------------------------------------------------------------------------------
  66. function TrOn($p_level=1, $p_mode="memory", $p_filename="trace.txt")
  67. {
  68. global $g_pcl_trace_level;
  69. global $g_pcl_trace_mode;
  70. global $g_pcl_trace_filename;
  71. global $g_pcl_trace_name;
  72. global $g_pcl_trace_index;
  73. global $g_pcl_trace_entries;
  74. // ----- Enable trace mode
  75. $g_pcl_trace_level = $p_level;
  76. // ----- Memorize mode and filename
  77. switch ($p_mode) {
  78. case "normal" :
  79. case "memory" :
  80. case "log" :
  81. $g_pcl_trace_mode = $p_mode;
  82. break;
  83. default :
  84. $g_pcl_trace_mode = "logged";
  85. }
  86. // ----- Memorize filename
  87. $g_pcl_trace_filename = $p_filename;
  88. }
  89. // --------------------------------------------------------------------------------
  90. // --------------------------------------------------------------------------------
  91. // Function : IsTrOn()
  92. // Description :
  93. // Return value :
  94. // The trace level (0 for disable).
  95. // --------------------------------------------------------------------------------
  96. function IsTrOn()
  97. {
  98. global $g_pcl_trace_level;
  99. return($g_pcl_trace_level);
  100. }
  101. // --------------------------------------------------------------------------------
  102. // --------------------------------------------------------------------------------
  103. // Function : TrOff()
  104. // Description :
  105. // Parameters :
  106. // --------------------------------------------------------------------------------
  107. function TrOff()
  108. {
  109. global $g_pcl_trace_level;
  110. global $g_pcl_trace_mode;
  111. global $g_pcl_trace_filename;
  112. global $g_pcl_trace_name;
  113. global $g_pcl_trace_index;
  114. // ----- Clean
  115. $g_pcl_trace_mode = "memory";
  116. unset($g_pcl_trace_entries);
  117. unset($g_pcl_trace_name);
  118. unset($g_pcl_trace_index);
  119. // ----- Switch off trace
  120. $g_pcl_trace_level = 0;
  121. }
  122. // --------------------------------------------------------------------------------
  123. // --------------------------------------------------------------------------------
  124. // Function : TrFctStart()
  125. // Description :
  126. // Just a trace function for debbugging purpose before I use a better tool !!!!
  127. // Start and stop of this function is by $g_pcl_trace_level global variable.
  128. // Parameters :
  129. // $p_level : Level of trace required.
  130. // --------------------------------------------------------------------------------
  131. function TrFctStart($p_file, $p_line, $p_name, $p_param="", $p_message="")
  132. {
  133. global $g_pcl_trace_level;
  134. global $g_pcl_trace_mode;
  135. global $g_pcl_trace_filename;
  136. global $g_pcl_trace_name;
  137. global $g_pcl_trace_index;
  138. global $g_pcl_trace_entries;
  139. // ----- Look for disabled trace
  140. if ($g_pcl_trace_level < 1)
  141. return;
  142. // ----- Add the function name in the list
  143. if (!isset($g_pcl_trace_name))
  144. $g_pcl_trace_name = $p_name;
  145. else
  146. $g_pcl_trace_name .= ",".$p_name;
  147. // ----- Update the function entry
  148. $i = sizeof($g_pcl_trace_entries);
  149. $g_pcl_trace_entries[$i]["name"] = $p_name;
  150. $g_pcl_trace_entries[$i]["param"] = $p_param;
  151. $g_pcl_trace_entries[$i]["message"] = "";
  152. $g_pcl_trace_entries[$i]["file"] = $p_file;
  153. $g_pcl_trace_entries[$i]["line"] = $p_line;
  154. $g_pcl_trace_entries[$i]["index"] = $g_pcl_trace_index;
  155. $g_pcl_trace_entries[$i]["type"] = "1"; // means start of function
  156. // ----- Update the message entry
  157. if ($p_message != "")
  158. {
  159. $i = sizeof($g_pcl_trace_entries);
  160. $g_pcl_trace_entries[$i]["name"] = "";
  161. $g_pcl_trace_entries[$i]["param"] = "";
  162. $g_pcl_trace_entries[$i]["message"] = $p_message;
  163. $g_pcl_trace_entries[$i]["file"] = $p_file;
  164. $g_pcl_trace_entries[$i]["line"] = $p_line;
  165. $g_pcl_trace_entries[$i]["index"] = $g_pcl_trace_index;
  166. $g_pcl_trace_entries[$i]["type"] = "3"; // means message
  167. }
  168. // ----- Action depending on mode
  169. PclTraceAction($g_pcl_trace_entries[$i]);
  170. // ----- Increment the index
  171. $g_pcl_trace_index++;
  172. }
  173. // --------------------------------------------------------------------------------
  174. // --------------------------------------------------------------------------------
  175. // Function : TrFctEnd()
  176. // Description :
  177. // Just a trace function for debbugging purpose before I use a better tool !!!!
  178. // Start and stop of this function is by $g_pcl_trace_level global variable.
  179. // Parameters :
  180. // $p_level : Level of trace required.
  181. // --------------------------------------------------------------------------------
  182. function TrFctEnd($p_file, $p_line, $p_return=1, $p_message="")
  183. {
  184. global $g_pcl_trace_level;
  185. global $g_pcl_trace_mode;
  186. global $g_pcl_trace_filename;
  187. global $g_pcl_trace_name;
  188. global $g_pcl_trace_index;
  189. global $g_pcl_trace_entries;
  190. // ----- Look for disabled trace
  191. if ($g_pcl_trace_level < 1)
  192. return;
  193. // ----- Extract the function name in the list
  194. // ----- Remove the function name in the list
  195. if (!($v_name = strrchr($g_pcl_trace_name, ",")))
  196. {
  197. $v_name = $g_pcl_trace_name;
  198. $g_pcl_trace_name = "";
  199. }
  200. else
  201. {
  202. $g_pcl_trace_name = substr($g_pcl_trace_name, 0, strlen($g_pcl_trace_name)-strlen($v_name));
  203. $v_name = substr($v_name, -strlen($v_name)+1);
  204. }
  205. // ----- Decrement the index
  206. $g_pcl_trace_index--;
  207. // ----- Update the message entry
  208. if ($p_message != "")
  209. {
  210. $i = sizeof($g_pcl_trace_entries);
  211. $g_pcl_trace_entries[$i]["name"] = "";
  212. $g_pcl_trace_entries[$i]["param"] = "";
  213. $g_pcl_trace_entries[$i]["message"] = $p_message;
  214. $g_pcl_trace_entries[$i]["file"] = $p_file;
  215. $g_pcl_trace_entries[$i]["line"] = $p_line;
  216. $g_pcl_trace_entries[$i]["index"] = $g_pcl_trace_index;
  217. $g_pcl_trace_entries[$i]["type"] = "3"; // means message
  218. }
  219. // ----- Update the function entry
  220. $i = sizeof($g_pcl_trace_entries);
  221. $g_pcl_trace_entries[$i]["name"] = $v_name;
  222. $g_pcl_trace_entries[$i]["param"] = $p_return;
  223. $g_pcl_trace_entries[$i]["message"] = "";
  224. $g_pcl_trace_entries[$i]["file"] = $p_file;
  225. $g_pcl_trace_entries[$i]["line"] = $p_line;
  226. $g_pcl_trace_entries[$i]["index"] = $g_pcl_trace_index;
  227. $g_pcl_trace_entries[$i]["type"] = "2"; // means end of function
  228. // ----- Action depending on mode
  229. PclTraceAction($g_pcl_trace_entries[$i]);
  230. }
  231. // --------------------------------------------------------------------------------
  232. // --------------------------------------------------------------------------------
  233. // Function : TrFctMessage()
  234. // Description :
  235. // Parameters :
  236. // --------------------------------------------------------------------------------
  237. function TrFctMessage($p_file, $p_line, $p_level, $p_message="")
  238. {
  239. global $g_pcl_trace_level;
  240. global $g_pcl_trace_mode;
  241. global $g_pcl_trace_filename;
  242. global $g_pcl_trace_name;
  243. global $g_pcl_trace_index;
  244. global $g_pcl_trace_entries;
  245. // ----- Look for disabled trace
  246. if ($g_pcl_trace_level < $p_level)
  247. return;
  248. // ----- Update the entry
  249. $i = sizeof($g_pcl_trace_entries);
  250. $g_pcl_trace_entries[$i]["name"] = "";
  251. $g_pcl_trace_entries[$i]["param"] = "";
  252. $g_pcl_trace_entries[$i]["message"] = $p_message;
  253. $g_pcl_trace_entries[$i]["file"] = $p_file;
  254. $g_pcl_trace_entries[$i]["line"] = $p_line;
  255. $g_pcl_trace_entries[$i]["index"] = $g_pcl_trace_index;
  256. $g_pcl_trace_entries[$i]["type"] = "3"; // means message of function
  257. // ----- Action depending on mode
  258. PclTraceAction($g_pcl_trace_entries[$i]);
  259. }
  260. // --------------------------------------------------------------------------------
  261. // --------------------------------------------------------------------------------
  262. // Function : TrMessage()
  263. // Description :
  264. // Parameters :
  265. // --------------------------------------------------------------------------------
  266. function TrMessage($p_file, $p_line, $p_level, $p_message="")
  267. {
  268. global $g_pcl_trace_level;
  269. global $g_pcl_trace_mode;
  270. global $g_pcl_trace_filename;
  271. global $g_pcl_trace_name;
  272. global $g_pcl_trace_index;
  273. global $g_pcl_trace_entries;
  274. // ----- Look for disabled trace
  275. if ($g_pcl_trace_level < $p_level)
  276. return;
  277. // ----- Update the entry
  278. $i = sizeof($g_pcl_trace_entries);
  279. $g_pcl_trace_entries[$i]["name"] = "";
  280. $g_pcl_trace_entries[$i]["param"] = "";
  281. $g_pcl_trace_entries[$i]["message"] = $p_message;
  282. $g_pcl_trace_entries[$i]["file"] = $p_file;
  283. $g_pcl_trace_entries[$i]["line"] = $p_line;
  284. $g_pcl_trace_entries[$i]["index"] = $g_pcl_trace_index;
  285. $g_pcl_trace_entries[$i]["type"] = "4"; // means simple message
  286. // ----- Action depending on mode
  287. PclTraceAction($g_pcl_trace_entries[$i]);
  288. }
  289. // --------------------------------------------------------------------------------
  290. // --------------------------------------------------------------------------------
  291. // Function : TrDisplay()
  292. // Description :
  293. // Parameters :
  294. // --------------------------------------------------------------------------------
  295. function TrDisplay()
  296. {
  297. global $g_pcl_trace_level;
  298. global $g_pcl_trace_mode;
  299. global $g_pcl_trace_filename;
  300. global $g_pcl_trace_name;
  301. global $g_pcl_trace_index;
  302. global $g_pcl_trace_entries;
  303. // ----- Look for disabled trace
  304. if (($g_pcl_trace_level <= 0) || ($g_pcl_trace_mode != "memory"))
  305. return;
  306. $v_font = "\"Verdana, Arial, Helvetica, sans-serif\"";
  307. // ----- Trace Header
  308. echo "<table width=100% border=0 cellspacing=0 cellpadding=0>";
  309. echo "<tr bgcolor=#0000CC>";
  310. echo "<td bgcolor=#0000CC width=1>";
  311. echo "</td>";
  312. echo "<td><div align=center><font size=3 color=#FFFFFF face=$v_font>Trace</font></div></td>";
  313. echo "</tr>";
  314. echo "<tr>";
  315. echo "<td bgcolor=#0000CC width=1>";
  316. echo "</td>";
  317. echo "<td>";
  318. // ----- Content header
  319. echo "<table width=100% border=0 cellspacing=0 cellpadding=0>";
  320. // ----- Display
  321. $v_again=0;
  322. for ($i=0; $i<sizeof($g_pcl_trace_entries); $i++)
  323. {
  324. // ---- Row header
  325. echo "<tr>";
  326. echo "<td><table width=100% border=0 cellspacing=0 cellpadding=0><tr>";
  327. $n = ($g_pcl_trace_entries[$i]["index"]+1)*10;
  328. echo "<td width=".$n."><table width=100% border=0 cellspacing=0 cellpadding=0><tr>";
  329. for ($j=0; $j<=$g_pcl_trace_entries[$i]["index"]; $j++)
  330. {
  331. if ($j==$g_pcl_trace_entries[$i]["index"])
  332. {
  333. if (($g_pcl_trace_entries[$i]["type"] == 1) || ($g_pcl_trace_entries[$i]["type"] == 2))
  334. echo "<td width=10><div align=center><font size=2 face=$v_font>+</font></div></td>";
  335. }
  336. else
  337. echo "<td width=10><div align=center><font size=2 face=$v_font>|</font></div></td>";
  338. }
  339. //echo "<td>&nbsp</td>";
  340. echo "</tr></table></td>";
  341. echo "<td width=2></td>";
  342. switch ($g_pcl_trace_entries[$i]["type"]) {
  343. case 1:
  344. echo "<td><font size=2 face=$v_font>".$g_pcl_trace_entries[$i]["name"]."(".$g_pcl_trace_entries[$i]["param"].")</font></td>";
  345. break;
  346. case 2:
  347. echo "<td><font size=2 face=$v_font>".$g_pcl_trace_entries[$i]["name"]."()=".$g_pcl_trace_entries[$i]["param"]."</font></td>";
  348. break;
  349. case 3:
  350. case 4:
  351. echo "<td><table width=100% border=0 cellspacing=0 cellpadding=0><td width=20></td><td>";
  352. echo "<font size=2 face=$v_font>".$g_pcl_trace_entries[$i]["message"]."</font>";
  353. echo "</td></table></td>";
  354. break;
  355. default:
  356. echo "<td><font size=2 face=$v_font>".$g_pcl_trace_entries[$i]["name"]."(".$g_pcl_trace_entries[$i]["param"].")</font></td>";
  357. }
  358. echo "</tr></table></td>";
  359. echo "<td width=5></td>";
  360. echo "<td><font size=1 face=$v_font>".basename($g_pcl_trace_entries[$i]["file"])."</font></td>";
  361. echo "<td width=5></td>";
  362. echo "<td><font size=1 face=$v_font>".$g_pcl_trace_entries[$i]["line"]."</font></td>";
  363. echo "</tr>";
  364. }
  365. // ----- Content footer
  366. echo "</table>";
  367. // ----- Trace footer
  368. echo "</td>";
  369. echo "<td bgcolor=#0000CC width=1>";
  370. echo "</td>";
  371. echo "</tr>";
  372. echo "<tr bgcolor=#0000CC>";
  373. echo "<td bgcolor=#0000CC width=1>";
  374. echo "</td>";
  375. echo "<td><div align=center><font color=#FFFFFF face=$v_font>&nbsp</font></div></td>";
  376. echo "</tr>";
  377. echo "</table>";
  378. }
  379. // --------------------------------------------------------------------------------
  380. // --------------------------------------------------------------------------------
  381. // Function : PclTraceAction()
  382. // Description :
  383. // Parameters :
  384. // --------------------------------------------------------------------------------
  385. function PclTraceAction($p_entry)
  386. {
  387. global $g_pcl_trace_level;
  388. global $g_pcl_trace_mode;
  389. global $g_pcl_trace_filename;
  390. global $g_pcl_trace_name;
  391. global $g_pcl_trace_index;
  392. global $g_pcl_trace_entries;
  393. if ($g_pcl_trace_mode == "normal")
  394. {
  395. for ($i=0; $i<$p_entry["index"]; $i++)
  396. echo "---";
  397. if ($p_entry["type"] == 1)
  398. echo "<b>".$p_entry["name"]."</b>(".$p_entry["param"].") : ".$p_entry["message"]." [".$p_entry["file"].", ".$p_entry["line"]."]<br>";
  399. else if ($p_entry["type"] == 2)
  400. echo "<b>".$p_entry["name"]."</b>()=".$p_entry["param"]." : ".$p_entry["message"]." [".$p_entry["file"].", ".$p_entry["line"]."]<br>";
  401. else
  402. echo $p_entry["message"]." [".$p_entry["file"].", ".$p_entry["line"]."]<br>";
  403. }
  404. }
  405. // --------------------------------------------------------------------------------
  406. // ----- End of double include look
  407. }
  408. ?>