Dotclear

source: inc/core/class.dc.log.php @ 3730:5c45a5df9a59

Revision 3730:5c45a5df9a59, 5.5 KB checked in by franck <carnet.franck.paul@…>, 7 years ago (diff)

Code formatting (PSR-2)

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2013 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        } else {
50            $f =
51                'L.log_id, L.user_id, L.log_table, L.log_dt, ' .
52                'L.log_ip, L.log_msg, L.blog_id, U.user_name, ' .
53                'U.user_firstname, U.user_displayname, U.user_url';
54        }
55
56        $strReq = 'SELECT ' . $f . ' FROM ' . $this->prefix . 'log L ';
57
58        if (!$count_only) {
59            $strReq .=
60            'LEFT JOIN ' . $this->prefix . 'user U ' .
61                'ON U.user_id = L.user_id ';
62        }
63
64        if (!empty($params['blog_id'])) {
65            if ($params['blog_id'] === 'all') {
66                $strReq .= "WHERE NULL IS NULL ";
67            } else {
68                $strReq .= "WHERE L.blog_id = '" . $this->core->con->escape($params['blog_id']) . "' ";
69            }
70        } else {
71            $strReq .= "WHERE L.blog_id = '" . $this->core->blog->id . "' ";
72        }
73
74        if (!empty($params['user_id'])) {
75            $strReq .= 'AND L.user_id' . $this->core->con->in($params['user_id']);
76        }
77        if (!empty($params['log_ip'])) {
78            $strReq .= 'AND log_ip' . $this->core->con->in($params['log_ip']);
79        }
80        if (!empty($params['log_table'])) {
81            $strReq .= 'AND log_table' . $this->core->con->in($params['log_table']);
82        }
83
84        if (!$count_only) {
85            if (!empty($params['order'])) {
86                $strReq .= 'ORDER BY ' . $this->core->con->escape($params['order']) . ' ';
87            } else {
88                $strReq .= 'ORDER BY log_dt DESC ';
89            }
90        }
91
92        if (!empty($params['limit'])) {
93            $strReq .= $this->core->con->limit($params['limit']);
94        }
95
96        $rs = $this->core->con->select($strReq);
97        $rs->extend('rsExtLog');
98
99        return $rs;
100    }
101
102    /**
103    Creates a new log. Takes a cursor as input and returns the new log
104    ID.
105
106    @param    cur        <b>cursor</b>        Log cursor
107    @return    <b>integer</b>        New log ID
108     */
109    public function addLog($cur)
110    {
111        $this->core->con->writeLock($this->prefix . 'log');
112
113        try
114        {
115            # Get ID
116            $rs = $this->core->con->select(
117                'SELECT MAX(log_id) ' .
118                'FROM ' . $this->prefix . 'log '
119            );
120
121            $cur->log_id  = (integer) $rs->f(0) + 1;
122            $cur->blog_id = (string) $this->core->blog->id;
123            $cur->log_dt  = date('Y-m-d H:i:s');
124
125            $this->getLogCursor($cur, $cur->log_id);
126
127            # --BEHAVIOR-- coreBeforeLogCreate
128            $this->core->callBehavior('coreBeforeLogCreate', $this, $cur);
129
130            $cur->insert();
131            $this->core->con->unlock();
132        } catch (Exception $e) {
133            $this->core->con->unlock();
134            throw $e;
135        }
136
137        # --BEHAVIOR-- coreAfterLogCreate
138        $this->core->callBehavior('coreAfterLogCreate', $this, $cur);
139
140        return $cur->log_id;
141    }
142
143    /**
144    Deletes a log.
145
146    @param    id        <b>integer</b>        Log ID
147     */
148    public function delLogs($id, $all = false)
149    {
150        $strReq = $all ?
151        'TRUNCATE TABLE ' . $this->prefix . 'log' :
152        'DELETE FROM ' . $this->prefix . 'log WHERE log_id' . $this->core->con->in($id);
153
154        $this->core->con->execute($strReq);
155    }
156
157    private function getLogCursor($cur, $log_id = null)
158    {
159        if ($cur->log_msg === '') {
160            throw new Exception(__('No log message'));
161        }
162
163        if ($cur->log_table === null) {
164            $cur->log_table = 'none';
165        }
166
167        if ($cur->user_id === null) {
168            $cur->user_id = 'unknown';
169        }
170
171        if ($cur->log_dt === '' || $cur->log_dt === null) {
172            $cur->log_dt = date('Y-m-d H:i:s');
173        }
174
175        if ($cur->log_ip === null) {
176            $cur->log_ip = http::realIP();
177        }
178
179        $log_id = is_int($log_id) ? $log_id : $cur->log_id;
180    }
181}
182
183class rsExtLog
184{
185    public static function getUserCN($rs)
186    {
187        $user = dcUtils::getUserCN($rs->user_id, $rs->user_name,
188            $rs->user_firstname, $rs->user_displayname);
189
190        if ($user === 'unknown') {
191            $user = __('unknown');
192        }
193
194        return $user;
195    }
196}
Note: See TracBrowser for help on using the repository browser.

Sites map