/src/M_echohist.php

https://github.com/Mithgol/Nephtsys · PHP · 205 lines · 185 code · 11 blank · 9 comment · 67 complexity · fb51aaf845d37669c5a9f92cce798ef8 MD5 · raw file

  1. <?php
  2. /*\
  3. / This is a part of PhFiTo (aka PHP Fido Tosser)
  4. // Copyright (c) Alex Kocharin, 2:50/13
  5. ///
  6. /// This program is distributed under GNU GPL v2
  7. /// See docs/license for details
  8. //
  9. / $Id: M_echohist.php,v 1.6 2011/01/09 08:53:12 kocharin Exp $
  10. \*/
  11. if (!function_exists('xinclude')) die();
  12. class M_echohist
  13. {
  14. var $file;
  15. function init()
  16. {
  17. GLOBAL $CONFIG;
  18. if ($name = $CONFIG->GetVar('echohistfile')) {
  19. $name .= '.' . str_pad(date('z'),3,'0',STR_PAD_LEFT);
  20. $this->file = fopen($name,'a');
  21. }
  22. }
  23. function escape($str)
  24. {
  25. $str = str_replace('%','%25',$str);
  26. $str = str_replace('|','%7C',$str);
  27. $str = str_replace("\n",'%0a',$str);
  28. $str = str_replace("\r",'%0d',$str);
  29. $str = str_replace("\t",'%09',$str);
  30. return $str;
  31. }
  32. function hook_msglog($params)
  33. {
  34. GLOBAL $CurrentMessage, $CurrentMessageParsed, $CurrentMessageInfo;
  35. if (($this->file) &&
  36. ($params[1] !== false) &&
  37. ($CurrentMessageInfo->state == 'ok')) {
  38. $echo = $this->escape($CurrentMessageInfo->area);
  39. $msgid = $this->escape($CurrentMessageParsed->msgid);
  40. $path = $this->escape($CurrentMessageParsed->path);
  41. $seenby = $this->escape($CurrentMessageParsed->seenby);
  42. $subj = $this->escape($CurrentMessage->Subject);
  43. $from = $this->escape($CurrentMessage->FromUser);
  44. $fromaddr = $this->escape($CurrentMessageParsed->FromAddr);
  45. $to = $this->escape($CurrentMessage->ToUser);
  46. $origdate = $this->escape($CurrentMessage->getAsciiDate());
  47. $line = $echo.'|'.$msgid."\t".time().'| '.$path.'| '.$seenby.'|'.
  48. $subj.'|'.$from.'|'.$fromaddr.'|'.$to.'|'.$origdate."\n";
  49. fwrite($this->file,$line,strlen($line));
  50. }
  51. }
  52. function done()
  53. {
  54. if ($this->file) {
  55. fclose($this->file);
  56. $this->file = false;
  57. }
  58. }
  59. }
  60. class M_msglog
  61. {
  62. var $file_handle; // file -> number_of_handle
  63. var $handles; // handles of files (maybe falses)
  64. var $net_files; // number of handle (n-th line of netlog)
  65. var $net_lines; // line contents (n-th line of netlog)
  66. var $echo_files; // number of handle (n-th line of echolog)
  67. var $echo_lines; // line contents (n-th line of echolog)
  68. function init()
  69. {
  70. GLOBAL $CONFIG;
  71. foreach ($CONFIG->GetArray('echomaillog') as $log_str) {
  72. $arr = explode(' ',$log_str,2);
  73. if (sizeof($arr) == 1) $arr[] = '';
  74. list($file,$log) = $arr;
  75. if (isset($this->file_handle[$file])) {
  76. $num = $this->file_handle[$file];
  77. } else {
  78. $this->handles[] = fopen($file,'a');
  79. $this->file_handle[$file] = $num = sizeof($this->handles)-1;
  80. }
  81. $this->echo_files[] = $num;
  82. $this->echo_lines[] = $log;
  83. }
  84. foreach ($CONFIG->GetArray('netmaillog') as $log_str) {
  85. $arr = explode(' ',$log_str,2);
  86. if (sizeof($arr) == 1) $arr[] = '';
  87. list($file,$log) = $arr;
  88. if (isset($this->file_handle[$file])) {
  89. $num = $this->file_handle[$file];
  90. } else {
  91. $this->handles[] = fopen($file,'a');
  92. $this->file_handle[$file] = $num = sizeof($this->handles)-1;
  93. }
  94. $this->net_files[] = $num;
  95. $this->net_lines[] = $log;
  96. }
  97. }
  98. function transform_line($line)
  99. {
  100. GLOBAL $CurrentMessage, $CurrentMessageParsed, $CurrentMessageInfo;
  101. $p = strpos($line,'@');
  102. while($p !== false) {
  103. if (substr($line,$p+1,8) == 'fromname') {
  104. $zat = $CurrentMessage->FromUser;
  105. $line = substr($line,0,$p).str_replace(" ","_",$zat).substr($line,$p+9);
  106. $p += strlen($zat)-1;
  107. } else if (substr($line,$p+1,6) == 'toname') {
  108. $zat = $CurrentMessage->ToUser;
  109. $line = substr($line,0,$p).str_replace(" ","_",$zat).substr($line,$p+7);
  110. $p += strlen($zat)-1;
  111. } else if (substr($line,$p+1,8) == 'fromaddr') {
  112. $zat = $CurrentMessageParsed->FromAddr;
  113. $line = substr($line,0,$p).$zat.substr($line,$p+9);
  114. $p += strlen($zat)-1;
  115. } else if (substr($line,$p+1,6) == 'toaddr') {
  116. $zat = $CurrentMessageParsed->ToAddr;
  117. $line = substr($line,0,$p).$zat.substr($line,$p+7);
  118. $p += strlen($zat)-1;
  119. } else if (substr($line,$p+1,7) == 'curtime') {
  120. $zat = date('H:i:s');
  121. $line = substr($line,0,$p).$zat.substr($line,$p+8);
  122. $p += strlen($zat)-1;
  123. } else if (substr($line,$p+1,7) == 'curdate') {
  124. $zat = date('d_M_y');
  125. $line = substr($line,0,$p).$zat.substr($line,$p+8);
  126. $p += strlen($zat)-1;
  127. } else if (substr($line,$p+1,4) == 'area') {
  128. $zat = $CurrentMessageInfo->area;
  129. $line = substr($line,0,$p).$zat.substr($line,$p+5);
  130. $p += strlen($zat)-1;
  131. } else if (substr($line,$p+1,4) == 'size') {
  132. $zat = strlen($CurrentMessageParsed->body);
  133. $line = substr($line,0,$p).$zat.substr($line,$p+5);
  134. $p += strlen($zat)-1;
  135. } else if (substr($line,$p+1,7) == 'subject') {
  136. $zat = $CurrentMessage->Subject;
  137. $line = substr($line,0,$p).str_replace(" ","_",$zat).substr($line,$p+8);
  138. $p += strlen($zat)-1;
  139. } else if (substr($line,$p+1,5) == 'msgid') {
  140. $zat = $CurrentMessageParsed->msgid;
  141. $line = substr($line,0,$p).str_replace(" ","_",$zat).substr($line,$p+6);
  142. $p += strlen($zat)-1;
  143. } else if (substr($line,$p+1,5) == 'reply') {
  144. $zat = $CurrentMessageParsed->reply;
  145. $line = substr($line,0,$p).str_replace(" ","_",$zat).substr($line,$p+6);
  146. $p += strlen($zat)-1;
  147. } else if (substr($line,$p+1,7) == 'pktfrom') {
  148. $zat = $CurrentMessageInfo->from_link;
  149. $line = substr($line,0,$p).$zat.substr($line,$p+8);
  150. $p += strlen($zat)-1;
  151. } else if (substr($line,$p+1,7) == 'pktname') {
  152. $zat = $CurrentMessageInfo->pkt_name;
  153. $line = substr($line,0,$p).$zat.substr($line,$p+8);
  154. $p += strlen($zat)-1;
  155. } else if (substr($line,$p+1,5) == 'state') {
  156. $zat = $CurrentMessageInfo->state;
  157. $line = substr($line,0,$p).$zat.substr($line,$p+6);
  158. $p += strlen($zat)-1;
  159. } else if (substr($line,$p+1,8) == 'packedto') {
  160. $zat = '';
  161. if ($CurrentMessageInfo->packed_to) {
  162. $zat = join(",",$CurrentMessageInfo->packed_to);
  163. }
  164. $line = substr($line,0,$p).$zat.substr($line,$p+9);
  165. $p += strlen($zat)-1;
  166. }
  167. $p = strpos($line,"@",$p+1);
  168. }
  169. return $line;
  170. }
  171. function hook_msglog($params)
  172. {
  173. if ($params[1] == false) {
  174. for($i=0,$s=sizeof($this->net_files); $i<$s; $i++) {
  175. $line = $this->transform_line($this->net_lines[$i]);
  176. fwrite($this->handles[$this->net_files[$i]],$line."\n");
  177. }
  178. } else {
  179. for($i=0,$s=sizeof($this->echo_files); $i<$s; $i++) {
  180. $line = $this->transform_line($this->echo_lines[$i]);
  181. fwrite($this->handles[$this->echo_files[$i]],$line."\n");
  182. }
  183. }
  184. }
  185. function done()
  186. {
  187. for ($i=0,$s=sizeof($this->handles); $i<$s; $i++) {
  188. if ($this->handles[$i]) {
  189. fclose($this->handles[$i]);
  190. $this->handles[$i] = false;
  191. }
  192. }
  193. }
  194. }