source: extensions/reply_to/reply_to.inc.php @ 11298

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

first commit, only compatible with Piwigo 2.2.3 and last version of Comments on Albums

File size: 5.3 KB
Line 
1<?php 
2if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
3
4/**
5 * Add anchors and reply button to comments blocks
6 */
7function replyto_add_link()
8{
9  global $pwg_loaded_plugins, $template, $page, $conf;
10  $template->assign('REPLYTO_PATH', REPLYTO_PATH);
11 
12  // comment form has different id
13  if (
14    (isset($_GET['action']) AND $_GET['action'] == 'edit_comment') OR 
15    (isset($page['body_id']) AND $page['body_id'] == 'theCommentsPage')
16    ) 
17  {
18    $template->assign('replyto_form_name', 'editComment');
19  } 
20  else 
21  {
22    $template->assign('replyto_form_name', 'addComment');
23  }
24   
25  // must re-check our location + some additional tests
26  if (script_basename() == 'picture')
27  {
28    add_event_handler('render_comment_content', 'replyto_parse_picture', 10);
29    if ( !is_a_guest() OR $conf['comments_forall'] )
30    {
31      $template->set_prefilter('picture', 'replyto_add_link_prefilter');
32    }
33  } 
34  else if 
35    (
36      script_basename() == 'index' AND 
37      isset($pwg_loaded_plugins['Comments_on_Albums']) AND 
38      $page['section'] == 'categories' AND isset($page['category'])
39    )
40  {
41    add_event_handler('render_comment_content', 'replyto_parse_album', 10);
42    if ( !is_a_guest() OR $conf['comments_forall'] )
43    {
44      $template->set_prefilter('comments_on_albums', 'replyto_add_link_prefilter');
45    }
46  }
47}
48
49function replyto_add_link_prefilter($content, &$smarty)
50{
51  // script
52  $search[0] = '<ul class="thumbnailCategories">';
53  $replace[0] = '
54{combine_script id=\'insertAtCaret\' require=\'jquery\' path=$REPLYTO_PATH|@cat:\'insertAtCaret.js\'}
55
56{footer_script require=\'insertAtCaret\'}
57function replyto(commentID, author) {ldelim}
58  jQuery("#{$replyto_form_name} textarea").insertAtCaret("[reply=" + commentID + "]" + author + "[/reply] ");
59}
60{/footer_script}
61
62{html_head}
63<style type="text/css">
64  .replyTo {ldelim}
65    display:inline-block;
66    width:16px;
67    height:16px;
68    background:url({$REPLYTO_PATH}reply.png) center top no-repeat;
69  }
70  .replyTo:hover {ldelim}
71    background-position:center -16px;
72  }
73</style>
74{/html_head}'
75.$search[0];
76
77  // button
78  $search[1] = '<span class="author">';
79  $replace[1] = '
80{if not isset($comment.IN_EDIT)}
81<div class="actions" style="float:right;">
82  <a title="{\'reply to this comment\'|@translate}" class="replyTo" onclick="replyto(\'{$comment.ID}\', \'{$comment.AUTHOR}\');">&nbsp;</a>
83</div>
84{/if}'
85.$search[1];
86 
87  // anchor
88  $search[2] = '<div class="thumbnailCategory';
89  $replace[2] = '
90<a name="comment-{$comment.ID}"></a>'
91.$search[2];
92
93  return str_replace($search, $replace, $content);
94}
95
96
97/**
98 * Replace BBcode tag by a link with absolute url
99 */
100function replyto_parse_picture($comment)
101{
102  if (preg_match('#\[reply=([1-9]+)\](.*)\[/reply\]#si', $comment, $matches))
103  {
104    // picture informations
105    $query = '
106SELECT
107  img.id,
108  img.file,
109  cat.category_id
110FROM ' . IMAGES_TABLE . ' AS img
111INNER JOIN ' . IMAGE_CATEGORY_TABLE . ' AS cat
112  ON cat.image_id = img.id
113INNER JOIN ' . COMMENTS_TABLE . ' AS com
114  ON com.image_id = img.id
115WHERE com.id = ' . $matches[1] . '
116;';
117    $result = pwg_query($query);
118   
119    // make sure the target comment exists
120    if (pwg_db_num_rows($result))
121    {
122      $image = pwg_db_fetch_assoc($result);
123
124      // retrieving category informations
125      $query = '
126SELECT
127  id,
128  name,
129  permalink,
130  uppercats
131FROM ' . CATEGORIES_TABLE . '
132WHERE id = ' . $image['category_id'] . '
133;';
134      $image['cat'] = pwg_db_fetch_assoc(pwg_query($query));
135
136      // link to the full size picture
137      $image['url'] = make_picture_url(array(
138        'category' => $image['cat'],
139        'image_id' => $image['id'],
140        'image_file' => $image['file'],
141      ));                 
142     
143      $search = "#\[reply=([1-9]+)\](.*)\[/reply\]#si";
144      $replace = '@ <a href="'.$image['url'].'#comment-$1">$2</a> :';
145    }
146    else
147    {
148      $search = "#\[reply=([1-9]+)\](.*)\[/reply\]#si";
149      $replace = '';
150    }
151   
152    return preg_replace($search, $replace, $comment);
153  }
154  else
155  {
156    return $comment;
157  }
158}
159
160function replyto_parse_album($comment)
161{
162  if (preg_match('#\[reply=([1-9]+)\](.*)\[/reply\]#si', $comment, $matches))
163  { 
164    // check if the comment is really an album comment
165    // (both comments_on_albums script and default comments script are executed...
166    //  with the same 'render_comment_content' event)
167    $query = '
168SELECT id
169FROM ' . COA_TABLE . '
170WHERE content = "' . $comment .'"
171;';
172    if (!pwg_db_num_rows(pwg_query($query)))
173    {
174      return $comment;
175    }
176   
177    // retrieving category informations
178    $query = '
179SELECT
180  cat.id,
181  cat.name,
182  cat.permalink,
183  cat.uppercats
184FROM ' . COA_TABLE . ' AS com
185INNER JOIN ' . CATEGORIES_TABLE . ' AS cat
186  ON cat.id = com.category_id
187WHERE com.id = ' . $matches[1] . '
188;';
189    $result = pwg_query($query);
190   
191    // make sure the target comment exists
192    if (pwg_db_num_rows($result))
193    {
194      $category = pwg_db_fetch_assoc($result);
195
196      // link to the album
197      $category['url'] = make_index_url(array(
198        'category' => $category,
199      ));                 
200   
201      $search = "#\[reply=([1-9]+)\](.*)\[/reply\]#si";
202      $replace = '@ <a href="'.$category['url'].'#comment-$1">$2</a> :';
203    }
204    else
205    {
206      $search = "#\[reply=([1-9]+)\](.*)\[/reply\]#si";
207      $replace = '';
208    }
209   
210    return preg_replace($search, $replace, $comment);
211  }
212  else
213  {
214    return $comment;
215  }
216}
217
218?>
Note: See TracBrowser for help on using the repository browser.