Dotclear

source: inc/core/class.dc.log.php @ 270:48858be15bda

Revision 270:48858be15bda, 4.6 KB checked in by Franck <carnet.franck.paul@…>, 13 years ago (diff)

Changement d'année

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
7# Licensed under the GPL version 2.0 license.
8# See LICENSE file or
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10#
11# -- END LICENSE BLOCK -----------------------------------------
12if (!defined('DC_RC_PATH')) { return; }
13
14class dcLog
15{
16     protected $core;
17     protected $prefix;
18     
19     /**
20     Object constructor.
21     
22     @param    core      <b>dcCore</b>  dcCore instance
23     */
24     public function __construct($core)
25     {
26          $this->core =& $core;
27          $this->prefix = $core->prefix;
28     }
29     
30     /**
31     Retrieves logs. <b>$params</b> is an array taking the following
32     optionnal parameters:
33     
34     - blog_id: Get logs belonging to given blog ID
35     - user_id: Get logs belonging to given user ID
36     - log_ip: Get logs belonging to given IP address
37     - log_table: Get logs belonging to given log table
38     - order: Order of results (default "ORDER BY log_dt DESC")
39     - limit: Limit parameter
40     
41     @param    params         <b>array</b>        Parameters
42     @param    count_only     <b>boolean</b>      Only counts results
43     @return   <b>record</b>  A record with some more capabilities
44     */
45     public function getLogs($params = array(),$count_only = false)
46     {
47          if ($count_only) {
48               $f = 'COUNT(log_id)';
49          }
50          else {
51               $f =
52               'L.log_id, L.user_id, L.log_table, L.log_dt, '.
53               'L.log_ip, L.log_msg, L.blog_id, U.user_name, '.
54               'U.user_firstname, U.user_displayname, U.user_url';
55          }
56         
57          $strReq = 'SELECT '.$f.' FROM '.$this->prefix.'log L ';
58         
59          if (!$count_only) {
60               $strReq .=
61               'LEFT JOIN '.$this->prefix.'user U '.
62               'ON U.user_id = L.user_id ';
63          }
64         
65          if (!empty($params['blog_id'])) {
66               if ($params['blog_id'] === 'all') {
67                    $strReq .= "WHERE NULL IS NULL ";
68               }
69               else {
70                    $strReq .= "WHERE L.blog_id = '".$this->core->con->escape($params['blog_id'])."' ";
71               }
72          }
73          else {
74               $strReq .= "WHERE L.blog_id = '".$this->core->blog->id."' ";
75          }
76         
77          if (!empty($params['user_id'])) {
78               $strReq .= 'AND L.user_id'.$this->core->con->in($params['user_id']);
79          }
80          if (!empty($params['log_ip'])) {
81               $strReq .= 'AND log_ip'.$this->core->con->in($params['log_ip']);
82          }
83          if (!empty($params['log_table'])) {
84               $strReq .= 'AND log_table'.$this->core->con->in($params['log_table']);
85          }
86         
87          if (!$count_only)
88          {
89               if (!empty($params['order'])) {
90                    $strReq .= 'ORDER BY '.$this->core->con->escape($params['order']).' ';
91               } else {
92                    $strReq .= 'ORDER BY log_dt DESC ';
93               }
94          }
95         
96          if (!empty($params['limit'])) {
97               $strReq .= $this->core->con->limit($params['limit']);
98          }
99         
100          $rs = $this->core->con->select($strReq);
101          $rs->extend('rsExtLog');
102         
103          return $rs;
104     }
105     
106     /**
107     Creates a new log. Takes a cursor as input and returns the new log
108     ID.
109     
110     @param    cur       <b>cursor</b>       Log cursor
111     @return   <b>integer</b>      New log ID
112     */
113     public function addLog($cur)
114     {
115          $this->core->con->writeLock($this->prefix.'log');
116         
117          try
118          {
119               # Get ID
120               $rs = $this->core->con->select(
121                    'SELECT MAX(log_id) '.
122                    'FROM '.$this->prefix.'log ' 
123               );
124               
125               $cur->log_id = (integer) $rs->f(0) + 1;
126               $cur->blog_id = (string) $this->core->blog->id;
127               $cur->log_dt = date('Y-m-d H:i:s');
128               
129               $this->getLogCursor($cur,$cur->log_id);
130               
131               # --BEHAVIOR-- coreBeforeLogCreate
132               $this->core->callBehavior('coreBeforeLogCreate',$this,$cur);
133               
134               $cur->insert();
135               $this->core->con->unlock();
136          }
137          catch (Exception $e)
138          {
139               $this->core->con->unlock();
140               throw $e;
141          }
142         
143          # --BEHAVIOR-- coreAfterLogCreate
144          $this->core->callBehavior('coreAfterLogCreate',$this,$cur);
145         
146          return $cur->log_id;
147     }
148     
149     /**
150     Deletes a log.
151     
152     @param    id        <b>integer</b>      Log ID
153     */
154     public function delLogs($id,$all = false)
155     {
156          $strReq = $all ?
157          'TRUNCATE TABLE '.$this->prefix.'log' :
158          'DELETE FROM '.$this->prefix.'log WHERE log_id'.$this->core->con->in($id);
159         
160          $this->core->con->execute($strReq);
161     }
162     
163     private function getLogCursor($cur,$log_id = null)
164     {
165          if ($cur->log_msg === '') {
166               throw new Exception(__('No log message'));
167          }
168         
169          if ($cur->log_table === null) {
170               $cur->log_table = 'none';
171          }
172         
173          if ($cur->user_id === null) {
174               $cur->user_id = 'unknown';
175          }
176         
177          if ($cur->log_dt === '' || $cur->log_dt === null) {
178               $cur->log_dt = date('Y-m-d H:i:s');
179          }
180         
181          if ($cur->log_ip === null) {
182               $cur->log_ip = http::realIP();
183          }
184         
185          $log_id = is_int($log_id) ? $log_id : $cur->log_id;
186     }
187}
188
189class rsExtLog
190{
191     public static function getUserCN($rs)
192     {
193          $user = dcUtils::getUserCN($rs->user_id, $rs->user_name,
194          $rs->user_firstname, $rs->user_displayname);
195         
196          if ($user === 'unknown') {
197               $user = __('unknown');
198          }
199         
200          return $user;
201     }
202}
203
204?>
Note: See TracBrowser for help on using the repository browser.

Sites map