source: extensions/Comments_on_Albums/include/functions_comment.inc.php @ 11327

Last change on this file since 11327 was 11327, checked in by mistic100, 13 years ago

correct link in notification mail, add album thumbnail on comments list (both public and admin side)

File size: 10.1 KB
Line 
1<?php
2/* This is a copy of include/functions_comment.inc.php but adapted for Comments On Albums */
3
4//returns string action to perform on a new comment: validate, moderate, reject
5if (!function_exists('user_comment_check')) 
6{
7  function user_comment_check($action, $comment)
8  {
9    global $conf,$user;
10
11    if ($action=='reject')
12    return $action;
13
14    $my_action = $conf['comment_spam_reject'] ? 'reject':'moderate';
15
16    if ($action==$my_action)
17    return $action;
18
19    // we do here only BASIC spam check (plugins can do more)
20    if ( !is_a_guest() )
21    return $action;
22
23    $link_count = preg_match_all( '/https?:\/\//',
24    $comment['content'], $matches);
25
26    if ( strpos($comment['author'], 'http://')!==false )
27    {
28    $link_count++;
29    }
30
31    if ( $link_count>$conf['comment_spam_max_links'] )
32    return $my_action;
33
34    return $action;
35  }
36}
37
38
39add_event_handler('user_comment_check', 'user_comment_check',
40  EVENT_HANDLER_PRIORITY_NEUTRAL, 2);
41
42/**
43 * Tries to insert a user comment in the database and returns one of :
44 * validate, moderate, reject
45 * @param array comm contains author, content, image_id
46 * @param string key secret key sent back to the browser
47 * @param array infos out array of messages
48 */
49function insert_user_comment_albums( &$comm, $key, &$infos )
50{
51  global $conf, $user;
52
53  $comm = array_merge( $comm,
54    array(
55      'ip' => $_SERVER['REMOTE_ADDR'],
56      'agent' => $_SERVER['HTTP_USER_AGENT']
57    )
58   );
59
60  $infos = array();
61  if (!$conf['comments_validation'] or is_admin())
62  {
63    $comment_action='validate'; //one of validate, moderate, reject
64  }
65  else
66  {
67    $comment_action='moderate'; //one of validate, moderate, reject
68  }
69
70  // display author field if the user status is guest or generic
71  if (!is_classic_user())
72  {
73    if ( empty($comm['author']) )
74    {
75      $comm['author'] = 'guest';
76    }
77    $comm['author_id'] = $conf['guest_id'];
78    // if a guest try to use the name of an already existing user, he must be
79    // rejected
80    if ( $comm['author'] != 'guest' )
81    {
82      $query = '
83SELECT COUNT(*) AS user_exists
84  FROM '.USERS_TABLE.'
85  WHERE '.$conf['user_fields']['username']." = '".addslashes($comm['author'])."'";
86      $row = pwg_db_fetch_assoc( pwg_query( $query ) );
87      if ( $row['user_exists'] == 1 )
88      {
89        array_push($infos, l10n('This login is already used by another user') );
90        $comment_action='reject';
91      }
92    }
93  }
94  else
95  {
96    $comm['author'] = addslashes($user['username']);
97    $comm['author_id'] = $user['id'];
98  }
99
100  if ( empty($comm['content']) )
101  { // empty comment content
102    $comment_action='reject';
103  }
104
105  if ( !verify_ephemeral_key(@$key, $comm['image_id']) )
106  {
107    $comment_action='reject';
108  }
109
110  if ($comment_action!='reject' and $conf['anti-flood_time']>0 and !is_admin())
111  { // anti-flood system
112    $reference_date = pwg_db_get_flood_period_expression($conf['anti-flood_time']);
113
114    $query = '
115SELECT count(1) FROM '.COA_TABLE.'
116  WHERE date > '.$reference_date.'
117    AND author_id = '.$comm['author_id'];
118    list($counter) = pwg_db_fetch_row(pwg_query($query));
119    if ( $counter > 0 )
120    {
121      array_push( $infos, l10n('Anti-flood system : please wait for a moment before trying to post another comment') );
122      $comment_action='reject';
123    }
124  }
125
126  // perform more spam check
127  $comment_action = trigger_event('user_comment_check',
128      $comment_action, $comm
129    );
130
131  if ( $comment_action!='reject' )
132  {
133    $query = '
134INSERT INTO '.COA_TABLE.'
135  (author, author_id, content, date, validated, validation_date, category_id)
136  VALUES (
137    \''.$comm['author'].'\',
138    '.$comm['author_id'].',
139    \''.$comm['content'].'\',
140    NOW(),
141    \''.($comment_action=='validate' ? 'true':'false').'\',
142    '.($comment_action=='validate' ? 'NOW()':'NULL').',
143    '.$comm['image_id'].'
144  )
145';
146
147    pwg_query($query);
148
149    $comm['id'] = pwg_db_insert_id(COA_TABLE);
150
151    if ($conf['email_admin_on_comment']
152        or ($conf['email_admin_on_comment_validation'] and 'moderate' == $comment_action))
153    {
154      include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
155
156      $comment_url = get_absolute_root_url().'comments.php?display_mode=albums&amp;comment_id='.$comm['id'];
157
158      $keyargs_content = array
159      (
160        get_l10n_args('Author: %s', stripslashes($comm['author']) ),
161        get_l10n_args('Comment: %s', stripslashes($comm['content']) ),
162        get_l10n_args('', ''),
163        get_l10n_args('Manage this user comment: %s', $comment_url)
164      );
165
166      if ('moderate' == $comment_action)
167      {
168        $keyargs_content[] = get_l10n_args('', '');
169        $keyargs_content[] = get_l10n_args('(!) This comment requires validation', '');
170      }
171
172      pwg_mail_notification_admins
173      (
174        get_l10n_args('Comment by %s', stripslashes($comm['author']) ),
175        $keyargs_content
176      );
177    }
178  }
179  return $comment_action;
180}
181
182/**
183 * Tries to delete a user comment in the database
184 * only admin can delete all comments
185 * other users can delete their own comments
186 * so to avoid a new sql request we add author in where clause
187 *
188 * @param comment_id
189 */
190function delete_user_comment_albums($comment_id) 
191{
192  $user_where_clause = '';
193  if (!is_admin())
194  {
195    $user_where_clause = '   AND author_id = \''.$GLOBALS['user']['id'].'\'';
196  }
197  $query = '
198DELETE FROM '.COA_TABLE.'
199  WHERE id = '.$comment_id.
200$user_where_clause.'
201;';
202  $result = pwg_query($query);
203  if ($result) {
204    email_admin('delete', 
205                array('author' => $GLOBALS['user']['username'],
206                      'comment_id' => $comment_id
207                  ));
208  }
209}
210
211/**
212 * Tries to update a user comment in the database
213 * only admin can update all comments
214 * users can edit their own comments if admin allow them
215 * so to avoid a new sql request we add author in where clause
216 *
217 * @param comment_id
218 * @param post_key
219 * @param content
220 */
221function update_user_comment_albums($comment, $post_key)
222{
223  global $conf;
224
225  $comment_action = 'validate';
226
227  if ( !verify_ephemeral_key($post_key, $comment['image_id']) )
228  {
229    $comment_action='reject';
230  }
231
232  // perform more spam check
233  $comment_action =
234    trigger_event('user_comment_check',
235      $comment_action,
236      array_merge($comment,
237            array('author' => $GLOBALS['user']['username'])
238            )
239      );
240
241  if ( $comment_action!='reject' )
242  {
243    $user_where_clause = '';
244    if (!is_admin())
245    {
246      $user_where_clause = '   AND author_id = \''.
247  $GLOBALS['user']['id'].'\'';
248    }
249   
250    // should the updated comment must be validated
251    if (!$conf['comments_validation'] or is_admin())
252    {
253      $comment_action='validate'; //one of validate, moderate, reject
254    }
255    else
256    {
257      $comment_action='moderate'; //one of validate, moderate, reject
258    }
259
260    $query = '
261UPDATE '.COA_TABLE.'
262  SET content = \''.$comment['content'].'\',
263      validated = \''.($comment_action=='validate' ? 'true':'false').'\',
264      validation_date = '.($comment_action=='validate' ? 'NOW()':'NULL').'
265  WHERE id = '.$comment['comment_id'].
266$user_where_clause.'
267;';
268    $result = pwg_query($query);
269   
270    // mail admin and ask to validate the comment
271    if ($result and $conf['email_admin_on_comment_validation'] and 'moderate' == $comment_action) 
272    {
273      include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
274
275      $comment_url = get_absolute_root_url().'comments.php?display_mode=albums&amp;comment_id='.$comment['comment_id'];
276
277      $keyargs_content = array
278      (
279        get_l10n_args('Author: %s', stripslashes($GLOBALS['user']['username']) ),
280        get_l10n_args('Comment: %s', stripslashes($comment['content']) ),
281        get_l10n_args('', ''),
282        get_l10n_args('Manage this user comment: %s', $comment_url),
283        get_l10n_args('', ''),
284        get_l10n_args('(!) This comment requires validation', ''),
285      );
286
287      pwg_mail_notification_admins
288      (
289        get_l10n_args('Comment by %s', stripslashes($GLOBALS['user']['username']) ),
290        $keyargs_content
291      );
292    }
293    // just mail admin
294    else if ($result)
295    {
296      email_admin('edit', array('author' => $GLOBALS['user']['username'],
297        'content' => stripslashes($comment['content'])) );
298    }
299  }
300 
301  return $comment_action;
302}
303
304if (!function_exists('email_admin')) 
305{
306  function email_admin($action, $comment)
307  {
308    global $conf;
309
310    if (!in_array($action, array('edit', 'delete'))
311      or (($action=='edit') and !$conf['email_admin_on_comment_edition'])
312      or (($action=='delete') and !$conf['email_admin_on_comment_deletion']))
313    {
314    return;
315    }
316
317    include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
318
319    $keyargs_content = array();
320    $keyargs_content[] = get_l10n_args('Author: %s', $comment['author']);
321    if ($action=='delete')
322    {
323    $keyargs_content[] = get_l10n_args('This author removed the comment with id %d',
324               $comment['comment_id']
325               );
326    }
327    else
328    {
329    $keyargs_content[] = get_l10n_args('This author modified following comment:', '');
330    $keyargs_content[] = get_l10n_args('Comment: %s', $comment['content']);
331    }
332
333    pwg_mail_notification_admins(get_l10n_args('Comment by %s',
334               $comment['author']),
335             $keyargs_content
336             );
337  }
338}
339
340function get_comment_author_id_albums($comment_id, $die_on_error=true)
341{
342  $query = '
343SELECT
344    author_id
345  FROM '.COA_TABLE.'
346  WHERE id = '.$comment_id.'
347;';
348  $result = pwg_query($query);
349  if (pwg_db_num_rows($result) == 0)
350  {
351    if ($die_on_error)
352    {
353      fatal_error('Unknown comment identifier');
354    }
355    else
356    {
357      return false;
358    }
359  }
360 
361  list($author_id) = pwg_db_fetch_row($result);
362
363  return $author_id;
364}
365
366function validate_user_comment_albums($comment_id)
367{
368  $query = '
369UPDATE '.COA_TABLE.'
370  SET validated = \'true\'
371    , validation_date = NOW()
372  WHERE id = '.$comment_id.'
373;';
374  pwg_query($query);
375}
376?>
Note: See TracBrowser for help on using the repository browser.