1 | <?PHP
|
---|
2 | // $Id: xoops_version.php,v 0.4 2007/07/21 01:35:02 toemon $
|
---|
3 | // ------------------------------------------------------------------------ //
|
---|
4 | // XOOPS - PHP Content Management System //
|
---|
5 | // Copyright (c) 2000 XOOPS.org //
|
---|
6 | // <http://www.xoops.org/> //
|
---|
7 | // ------------------------------------------------------------------------ //
|
---|
8 | // This program is free software; you can redistribute it and/or modify //
|
---|
9 | // it under the terms of the GNU General Public License as published by //
|
---|
10 | // the Free Software Foundation; either version 2 of the License, or //
|
---|
11 | // (at your option) any later version. //
|
---|
12 | // //
|
---|
13 | // You may not change or alter any portion of this comment or credits //
|
---|
14 | // of supporting developers from this source code or any supporting //
|
---|
15 | // source code which is considered copyrighted (c) material of the //
|
---|
16 | // original comment or credit authors. //
|
---|
17 | // //
|
---|
18 | // This program is distributed in the hope that it will be useful, //
|
---|
19 | // but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
---|
20 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
---|
21 | // GNU General Public License for more details. //
|
---|
22 | // //
|
---|
23 | // You should have received a copy of the GNU General Public License //
|
---|
24 | // along with this program; if not, write to the Free Software //
|
---|
25 | // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
|
---|
26 | // ------------------------------------------------------------------------ //
|
---|
27 | // Author: toemon //
|
---|
28 | // URL:http://www.toemon.com //
|
---|
29 | // ------------------------------------------------------------------------- //
|
---|
30 | function onaction_comment_post($comment_ID = "")
|
---|
31 | {
|
---|
32 | global $wpdb;
|
---|
33 | $comment_type = $wpdb->get_var("SELECT comment_type FROM $wpdb->comments WHERE comment_ID = $comment_ID");
|
---|
34 | if (!empty($comment_type)) return ;
|
---|
35 | return wp_comment_sync_to_d3forum($comment_ID,'post');
|
---|
36 | }
|
---|
37 | function onaction_edit_comment($comment_ID = "")
|
---|
38 | {
|
---|
39 | global $wpdb;
|
---|
40 | $comment_type = $wpdb->get_var("SELECT comment_type FROM $wpdb->comments WHERE comment_ID = $comment_ID");
|
---|
41 | if (!empty($comment_type)) return ;
|
---|
42 | return wp_comment_sync_to_d3forum($comment_ID,'edit');
|
---|
43 | }
|
---|
44 | function onaction_delete_comment($comment_ID = "")
|
---|
45 | {
|
---|
46 | global $wpdb;
|
---|
47 | $comment_type = $wpdb->get_var("SELECT comment_type FROM $wpdb->comments WHERE comment_ID = $comment_ID");
|
---|
48 | if (!empty($comment_type)) return ;
|
---|
49 | return wp_comment_sync_to_d3forum($comment_ID,'delete');
|
---|
50 | }
|
---|
51 | function onaction_delete_post($post_id)
|
---|
52 | {
|
---|
53 | wp_post_delete_sync($post_id);
|
---|
54 | }
|
---|
55 |
|
---|
56 | function onaction_comment_close($post_id)
|
---|
57 | {
|
---|
58 | global $wpdb;
|
---|
59 | $status = $wpdb->get_var("SELECT comment_status FROM $wpdb->posts WHERE ID = $post_id");
|
---|
60 |
|
---|
61 | if ($status =='open')
|
---|
62 | $lock = 0;
|
---|
63 | else
|
---|
64 | $lock = 1;
|
---|
65 | d3forum_topic_rock($post_id,$lock);
|
---|
66 | }
|
---|
67 |
|
---|
68 | function onaction_comment_apobe($comment_ID){
|
---|
69 | global $wpdb;
|
---|
70 | $comment_type = $wpdb->get_var("SELECT comment_type FROM $wpdb->comments WHERE comment_ID = $comment_ID");
|
---|
71 | $status = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_ID = $comment_ID");
|
---|
72 | if(is_null($status)) return;
|
---|
73 | // $status = wp_get_comment_status($comment_ID);
|
---|
74 | switch($status){
|
---|
75 | case 'approved':
|
---|
76 | case 1:
|
---|
77 | if (empty($comment_type)) onaction_edit_comment($comment_ID);
|
---|
78 | break;
|
---|
79 | case 'unapproved':
|
---|
80 | case 0:
|
---|
81 | if (empty($comment_type)) onaction_edit_comment($comment_ID);
|
---|
82 | break;
|
---|
83 | default:
|
---|
84 | break;
|
---|
85 | }
|
---|
86 | }
|
---|
87 |
|
---|
88 | function disp_d3forum_comments($template_dir="", $file_name="")
|
---|
89 | {
|
---|
90 | if (is_xpress_mobile()) return $file_path;
|
---|
91 | $file_path = dirname(__FILE__) . '/d3forum_comment_disp.php';
|
---|
92 | return $file_path;
|
---|
93 | }
|
---|
94 |
|
---|
95 |
|
---|
96 | function d3f_module_found($forum_dir ='d3forum'){ //use admin/admin_enhanced.php
|
---|
97 | return file_exists( get_xoops_root_path() . '/modules/' . $forum_dir);
|
---|
98 | }
|
---|
99 |
|
---|
100 | function d3f_forum_id_found($forum_id = 1 , $forum_dir ='d3forum'){ //use admin/admin_enhanced.php
|
---|
101 | global $xoops_db;
|
---|
102 |
|
---|
103 | $d3f_forums = get_xoops_prefix() . $forum_dir . '_forums';
|
---|
104 |
|
---|
105 | $sql = "SELECT forum_id ";
|
---|
106 | $sql .= "FROM $d3f_forums ";
|
---|
107 | $sql .= "WHERE ( forum_id = $forum_id )";
|
---|
108 |
|
---|
109 | $forum_id = $xoops_db->get_var($sql);
|
---|
110 | if (empty($forum_id)){
|
---|
111 | return false;
|
---|
112 | }
|
---|
113 | return $forum_id;
|
---|
114 | }
|
---|
115 |
|
---|
116 | function get_d3forum_post_ID($wp_comment_ID){
|
---|
117 | global $xoops_db;
|
---|
118 |
|
---|
119 | $wp_d3forum_link = get_wp_prefix() . 'd3forum_link';
|
---|
120 |
|
---|
121 | $sql = "SELECT post_id FROM $wp_d3forum_link WHERE comment_ID = $wp_comment_ID";
|
---|
122 | $post_id = $xoops_db->get_var($sql);
|
---|
123 | return $post_id;
|
---|
124 | }
|
---|
125 |
|
---|
126 | function get_wp_comment_ID($d3forum_post_ID){
|
---|
127 | global $xoops_db;
|
---|
128 |
|
---|
129 | $wp_d3forum_link = get_wp_prefix() . 'd3forum_link';
|
---|
130 |
|
---|
131 | $sql = "SELECT comment_ID FROM $wp_d3forum_link WHERE post_id = $d3forum_post_ID";
|
---|
132 | $comment_ID = $xoops_db->get_var($sql);
|
---|
133 | return $comment_ID;
|
---|
134 | }
|
---|
135 |
|
---|
136 | // Next, auto increment ID value used is acquired.
|
---|
137 | function get_next_auto_increment_id($table_name,$id_name){
|
---|
138 | global $xoops_db;
|
---|
139 | $sql = "SELECT MAX($id_name) as last_id FROM $table_name";
|
---|
140 | $get_id = $xoops_db->get_var($sql);
|
---|
141 | if (empty($get_id)){
|
---|
142 | return 1;
|
---|
143 | } else {
|
---|
144 | return $get_id + 1;
|
---|
145 | }
|
---|
146 | }
|
---|
147 |
|
---|
148 | function is_d3forum_setting(){
|
---|
149 | global $xpress_config,$xoops_db;
|
---|
150 |
|
---|
151 | $use_d3f = $xpress_config->is_use_d3forum;
|
---|
152 | if (empty($use_d3f)) {
|
---|
153 | return false;
|
---|
154 | }
|
---|
155 | $d3f_forum_id = $xpress_config->d3forum_forum_id;
|
---|
156 | $d3f_forum_dir = $xpress_config->d3forum_module_dir;
|
---|
157 | if (! d3f_module_found($d3f_forum_dir)) die( "D3Forum Directory ($d3f_forum_dir) not found" ) ;
|
---|
158 | if (! d3f_forum_id_found($d3f_forum_id , $d3f_forum_dir)) die( "D3Forum ForumID($d3f_forum_id) not found" ) ;
|
---|
159 |
|
---|
160 | $xoops_db->query( "UPDATE ".get_xoops_prefix() . $d3f_forum_dir."_forums" ." SET forum_external_link_format='".addslashes($xpress_config->d3forum_external_link_format)."' WHERE forum_id= $d3f_forum_id" ) ;
|
---|
161 |
|
---|
162 | return true;
|
---|
163 | }
|
---|
164 |
|
---|
165 | function d3forum_topic_rock($wp_post_id,$lock = '0')
|
---|
166 | {
|
---|
167 | global $xpress_config,$xoops_db;
|
---|
168 |
|
---|
169 | if (!is_d3forum_setting()) die('The setting of the D3Forum comment integration is wrong. ');
|
---|
170 | $d3f_forum_dir = $xpress_config->d3forum_module_dir;
|
---|
171 |
|
---|
172 | $d3f_topic = get_xoops_prefix() . $d3f_forum_dir . '_topics';
|
---|
173 |
|
---|
174 | $sql = "UPDATE $d3f_topic ";
|
---|
175 | $sql .= "SET topic_locked = $lock ";
|
---|
176 | $sql .= "WHERE topic_external_link_id = $wp_post_id" ;
|
---|
177 | $xoops_db->query($sql);
|
---|
178 | }
|
---|
179 |
|
---|
180 | // All comments of WordPress are exported to the D3Forum comment.
|
---|
181 | function wp_to_d3forum($forum_id = 1, $d3f_prefix = 'd3forum'){
|
---|
182 | global $xpress_config,$xoops_db;
|
---|
183 |
|
---|
184 | if (!is_d3forum_setting()) die('The setting of the D3Forum comment integration is wrong. ');
|
---|
185 |
|
---|
186 | $d3forum_prefix = get_xoops_prefix() . $d3f_prefix . '_';
|
---|
187 | $xpress_prefix = get_wp_prefix();
|
---|
188 |
|
---|
189 | $wp_comments = $xpress_prefix . 'comments';
|
---|
190 | $wp_d3forum_link = $xpress_prefix . 'd3forum_link';
|
---|
191 | $wp_posts = $xpress_prefix . 'posts';
|
---|
192 | $d3f_topic = $d3forum_prefix . 'topics'; // delete key forum_id
|
---|
193 | $d3f_forums = $d3forum_prefix . 'forums'; // delete key forum_id
|
---|
194 | $d3f_posts = $d3forum_prefix . 'posts'; // delete key topic_id
|
---|
195 | $d3f_users2topics = $d3forum_prefix . 'users2topics'; // delete key topic_id
|
---|
196 | $d3f_post_histories = $d3forum_prefix . 'post_histories'; // delete key post_id
|
---|
197 | $d3f_post_post_votes = $d3forum_prefix . 'post_votes'; // delete key post_id
|
---|
198 |
|
---|
199 | //DELETE D3FORUM_TOPIC & D3FORUM_POSTS
|
---|
200 | $topics = $xoops_db->get_results("SELECT topic_id FROM $d3f_topic WHERE forum_id = $forum_id");
|
---|
201 | foreach($topics as $topic){
|
---|
202 | $now_topic_id = $topic->topic_id;
|
---|
203 | $posts = $xoops_db->get_results("SELECT post_id FROM $d3f_posts WHERE topic_id = $now_topic_id");
|
---|
204 | foreach($posts as $post){
|
---|
205 | $now_post_id = $post->post_id;
|
---|
206 | $xoops_db->query("DELETE FROM $d3f_post_histories WHERE post_id = $now_post_id");
|
---|
207 | $xoops_db->query("DELETE FROM $d3f_post_post_votes WHERE post_id = $now_post_id");
|
---|
208 | }
|
---|
209 | $xoops_db->query("DELETE FROM $d3f_posts WHERE topic_id = $now_topic_id");
|
---|
210 | $xoops_db->query("DELETE FROM $d3f_users2topics WHERE topic_id = $now_topic_id");
|
---|
211 | }
|
---|
212 | $sql = "UPDATE $d3f_forums ";
|
---|
213 | $sql .= "SET forum_topics_count = 0,forum_posts_count = 0,forum_last_post_id = 0,forum_last_post_time = 0 ";
|
---|
214 | $sql .= "WHERE forum_id = $forum_id" ;
|
---|
215 | $xoops_db->query($sql);
|
---|
216 |
|
---|
217 | $xoops_db->query("DELETE FROM $d3f_topic WHERE forum_id = $forum_id");
|
---|
218 |
|
---|
219 | $next_id = get_next_auto_increment_id($d3f_topic,'topic_id');
|
---|
220 | $xoops_db->query("ALTER TABLE $d3f_topic AUTO_INCREMENT = $next_id");
|
---|
221 |
|
---|
222 | $next_id = get_next_auto_increment_id($d3f_posts,'post_id');
|
---|
223 | $xoops_db->query("ALTER TABLE $d3f_posts AUTO_INCREMENT = $next_id");
|
---|
224 |
|
---|
225 | $next_id = get_next_auto_increment_id($d3f_post_histories,'history_id');
|
---|
226 | $xoops_db->query("ALTER TABLE $d3f_post_histories AUTO_INCREMENT = $next_id");
|
---|
227 |
|
---|
228 | $next_id = get_next_auto_increment_id($d3f_post_post_votes,'vote_id');
|
---|
229 | $xoops_db->query("ALTER TABLE $d3f_post_post_votes AUTO_INCREMENT = $next_id");
|
---|
230 |
|
---|
231 | //All the records in the wp_d3forum_link table are deleted.
|
---|
232 | $xoops_db->query("DELETE FROM $wp_d3forum_link WHERE 1");
|
---|
233 |
|
---|
234 | //The comment is copied from the wordpress comment.
|
---|
235 | $sql = "SELECT comment_ID ";
|
---|
236 | $sql .= "FROM $wp_comments ";
|
---|
237 | $sql .= "WHERE (comment_approved NOT LIKE 'spam') AND (comment_type = '') ";
|
---|
238 | $sql .= "ORDER BY comment_ID";
|
---|
239 |
|
---|
240 | $comment_count = 0;
|
---|
241 | $comments = $xoops_db->get_results($sql);
|
---|
242 | foreach($comments as $comment){
|
---|
243 | $comment_ID = $comment->comment_ID;
|
---|
244 | wp_comment_sync_to_d3forum($comment_ID ,'insert');
|
---|
245 | $comment_count++;
|
---|
246 | }
|
---|
247 |
|
---|
248 | $return_str = "...Export $comment_count Comment OK ";
|
---|
249 |
|
---|
250 | return $return_str;
|
---|
251 | }
|
---|
252 |
|
---|
253 |
|
---|
254 | // All comments of D3Forum are import to the WordPress comment.
|
---|
255 | function d3forum_to_wp($forum_id = 1, $d3f_prefix = 'd3forum'){
|
---|
256 | global $xpress_config,$xoops_db;
|
---|
257 | if (!is_d3forum_setting()) die('The setting of the D3Forum comment integration is wrong. ');
|
---|
258 |
|
---|
259 | $d3forum_prefix = get_xoops_prefix() . $d3f_prefix . '_';
|
---|
260 | $xpress_prefix = get_wp_prefix() ;
|
---|
261 |
|
---|
262 | $wp_comments = $xpress_prefix . 'comments';
|
---|
263 | $wp_d3forum_link = $xpress_prefix . 'd3forum_link';
|
---|
264 | $wp_dummy = $xpress_prefix . 'dummy';
|
---|
265 | $wp_d3forum_link = $xpress_prefix . 'd3forum_link';
|
---|
266 |
|
---|
267 | $d3f_topic = $d3forum_prefix . 'topics';
|
---|
268 | $d3f_posts = $d3forum_prefix . 'posts';
|
---|
269 |
|
---|
270 | $db_xoops_users = get_xoops_prefix() . 'users';
|
---|
271 |
|
---|
272 | // The track back data is taken out of the comment table, and it returns it to the initialized comment table.
|
---|
273 | //copies it in the dummy table excluding a usual comment.
|
---|
274 | $xoops_db->query("CREATE TABLE $wp_dummy SELECT * FROM $wp_comments WHERE comment_type != ''");
|
---|
275 | //comment_ID of the dummy table is adjusted to all 0.
|
---|
276 | $xoops_db->query("UPDATE $wp_dummy SET `comment_ID` = 0");
|
---|
277 | //All the records in the comment table are deleted.
|
---|
278 | $xoops_db->query("DELETE FROM $wp_comments WHERE 1");
|
---|
279 | //The auto increment value of the comment table is reset in '1'.
|
---|
280 | $xoops_db->query("ALTER TABLE $wp_comments AUTO_INCREMENT =1");
|
---|
281 | //The content of dummy table is returned to the comment table.
|
---|
282 | $xoops_db->query("INSERT INTO $wp_comments SELECT * FROM $wp_dummy");;
|
---|
283 | //The dummy table is deleted.
|
---|
284 | $xoops_db->query("DROP TABLE $wp_dummy");
|
---|
285 | //All the records in the wp_d3forum_link table are deleted.
|
---|
286 | $xoops_db->query("DELETE FROM $wp_d3forum_link WHERE 1");
|
---|
287 |
|
---|
288 | //All wp post comment count clear
|
---|
289 | $wp_posts = $xpress_prefix . 'posts';
|
---|
290 | $xoops_db->query("UPDATE $wp_posts SET comment_count = 0 WHERE 1 ");
|
---|
291 |
|
---|
292 | //The comment is copied from the d3forum comment.
|
---|
293 | $d3f_sql = "SELECT $d3f_topic.forum_id, $d3f_topic.topic_external_link_id, $d3f_topic.topic_id, $d3f_posts.post_id, $d3f_posts.pid ";
|
---|
294 | $d3f_sql .= "FROM $d3f_topic LEFT JOIN $d3f_posts ON $d3f_topic.topic_id = $d3f_posts.topic_id ";
|
---|
295 | $d3f_sql .= "WHERE $d3f_topic.forum_id=$forum_id ";
|
---|
296 | $d3f_sql .= "ORDER BY $d3f_posts.post_id";
|
---|
297 |
|
---|
298 | $d3f_res = $xoops_db->get_results($d3f_sql);
|
---|
299 | $import_count = 0;
|
---|
300 | foreach($d3f_res as $d3f_row){
|
---|
301 | $link_id = $d3f_row->topic_external_link_id;
|
---|
302 | $forum_id = $d3f_row->forum_id;
|
---|
303 | $topic_id = $d3f_row->topic_id;
|
---|
304 | $post_id = $d3f_row->post_id;
|
---|
305 |
|
---|
306 | if(empty($link_id)){ echo "<p><font color='#FF0000'>PASS: empty topic.topic_external_link_id in topic_id($topic_id)</font></p>" ; continue;}
|
---|
307 | if(empty($post_id)){ echo "<p><font color='#FF0000'>PASS: empty topic_id=$topic_id in $d3f_posts</font></p>" ; continue;}
|
---|
308 |
|
---|
309 | if ($d3f_row->pid == 0){
|
---|
310 | $mode = 'newtopic';
|
---|
311 | }else{
|
---|
312 | $mode = 'reply';
|
---|
313 | }
|
---|
314 | d3forum_sync_to_wp_comment( $mode , $link_id , $forum_id , $topic_id , $post_id);
|
---|
315 | $import_count++;
|
---|
316 | }
|
---|
317 | $return_str = "...Import $import_count Comment OK ";
|
---|
318 | return $return_str;
|
---|
319 | }
|
---|
320 |
|
---|
321 | //When post of wordpress is deleted, the comment on relating d3forum is deleted.
|
---|
322 |
|
---|
323 | function wp_post_delete_sync($post_id){
|
---|
324 | global $xpress_config,$xoops_db;
|
---|
325 |
|
---|
326 | if (!is_d3forum_setting()) die('The setting of the D3Forum comment integration is wrong. ');
|
---|
327 | $d3forum_dirname = $xpress_config->d3forum_module_dir;
|
---|
328 | $d3forum_prefix = get_xoops_prefix() . $d3forum_dirname . '_';
|
---|
329 |
|
---|
330 | $post_id = intval( $post_id ) ;
|
---|
331 |
|
---|
332 | $d3f_topics = $d3forum_prefix . 'topics';
|
---|
333 |
|
---|
334 | $sql = "SELECT topic_id,topic_first_post_id FROM $d3f_topics WHERE topic_external_link_id = $post_id";
|
---|
335 | $row = $xoops_db->get_row($sql) ;
|
---|
336 |
|
---|
337 | if(empty($row)) return ;
|
---|
338 | $topic_id = $row->topic_id;
|
---|
339 | $topic_first_post_id = $row->topic_first_post_id;
|
---|
340 | wp_d3forum_delete_post_recursive( $d3forum_dirname , $topic_first_post_id ,true);
|
---|
341 | // wp_d3forum_delete_topic( $d3forum_dirname , $topic_id );
|
---|
342 | wp_d3forum_sync_topic( $d3forum_dirname , $topic_id ) ;
|
---|
343 | }
|
---|
344 |
|
---|
345 | // The content is reflected in the WordPress comment when there is a change in the D3Forum comment.
|
---|
346 |
|
---|
347 | function d3forum_sync_to_wp_comment( $mode , $link_id , $forum_id , $topic_id , $post_id = 0 ){
|
---|
348 | global $xpress_config,$xoops_db;
|
---|
349 |
|
---|
350 | if (!is_d3forum_setting()) die('The setting of the D3Forum comment integration is wrong. ');
|
---|
351 | $d3forum_prefix = get_xoops_prefix() . $xpress_config->d3forum_module_dir . '_';
|
---|
352 | $xpress_prefix = get_wp_prefix();
|
---|
353 |
|
---|
354 | $wp_comments = $xpress_prefix . 'comments';
|
---|
355 | $wp_posts = $xpress_prefix . 'posts';
|
---|
356 | $wp_d3forum_link = $xpress_prefix . 'd3forum_link';
|
---|
357 |
|
---|
358 | $d3f_posts = $d3forum_prefix . 'posts';
|
---|
359 | $d3f_topics = $d3forum_prefix . 'topics';
|
---|
360 | $d3f_users2topics = $d3forum_prefix . 'users2topics';
|
---|
361 | $d3f_post_votes = $d3forum_prefix . 'post_votes';
|
---|
362 |
|
---|
363 | $db_xoops_users = get_xoops_prefix() . 'users';
|
---|
364 |
|
---|
365 | $comment_post_ID = $link_id;
|
---|
366 |
|
---|
367 | $d3f_sql = "SELECT $d3f_posts.guest_name, ";
|
---|
368 | $d3f_sql .= "$d3f_posts.guest_email, $d3f_posts.guest_url, $d3f_posts.poster_ip, $d3f_posts.post_time, ";
|
---|
369 | $d3f_sql .= "$d3f_posts.post_text, $d3f_posts.approval, $d3f_posts.uid ,$d3f_posts.pid ";
|
---|
370 | $d3f_sql .= "FROM $d3f_posts ";
|
---|
371 | $d3f_sql .= "WHERE $d3f_posts.post_id = $post_id";
|
---|
372 |
|
---|
373 | $d3f_row = $xoops_db->get_row($d3f_sql) ;
|
---|
374 | if (empty($d3f_row)) die('...Err. OPEN D3Forum Data (' . $d3f_sql . ')');
|
---|
375 | $uid = $d3f_row->uid;
|
---|
376 | if (!empty($uid)) {
|
---|
377 | $xu_sql = "SELECT uid ,name ,uname ,email , url FROM $db_xoops_users WHERE uid = $uid";
|
---|
378 | $xu_row = $xoops_db->get_row($xu_sql);
|
---|
379 | if (empty($xu_row)){
|
---|
380 | $user_display_name = '';
|
---|
381 | }else {
|
---|
382 | if (empty($xu_row->name)){
|
---|
383 | $user_display_name = $xu_row->uname;
|
---|
384 | } else {
|
---|
385 | $user_display_name = $xu_row->name;
|
---|
386 | }
|
---|
387 | $comment_author_email = "'" . $xu_row->email . "'";
|
---|
388 | $comment_author_url = "'" . $xu_row->url . "'";
|
---|
389 | }
|
---|
390 | $comment_author = "'" . addSlashes($user_display_name) . "'";
|
---|
391 | } else {
|
---|
392 | $comment_author = "'" . addSlashes($d3f_row->guest_name) . "'";
|
---|
393 | $comment_author_email = "'" . $d3f_row->guest_email . "'";
|
---|
394 | $comment_author_url = "'" . $d3f_row->guest_url . "'";
|
---|
395 | }
|
---|
396 | $comment_author_IP = "'" . $d3f_row->poster_ip . "'";
|
---|
397 | $comment_date = "'" . date('Y-m-d H:i:s' , $d3f_row->post_time) . "'";
|
---|
398 | $comment_content = "'" . addSlashes($d3f_row->post_text) . "'";
|
---|
399 | $comment_approved = "'" . $d3f_row->approval . "'";
|
---|
400 | $user_ID = $d3f_row->uid;
|
---|
401 | $comment_date_gmt = "'" . gmdate('Y-m-d H:i:s' , $d3f_row->post_time) . "'";
|
---|
402 | $comment_type = '';
|
---|
403 | if ($d3f_row->pid > 0) {
|
---|
404 | $comment_parent = get_wp_comment_ID($d3f_row->pid);
|
---|
405 | } else {
|
---|
406 | $comment_parent = 0 ;
|
---|
407 | }
|
---|
408 |
|
---|
409 |
|
---|
410 | switch($mode){
|
---|
411 | case 'reply':
|
---|
412 | case 'newtopic' :
|
---|
413 | $wp_sql = "INSERT INTO $wp_comments ";
|
---|
414 | $wp_sql .= "(comment_post_ID , comment_author , comment_author_email , comment_author_url , comment_author_IP , ";
|
---|
415 | $wp_sql .= "comment_date , comment_content , comment_approved , user_id , comment_date_gmt, comment_parent) ";
|
---|
416 | $wp_sql .= "VALUES ";
|
---|
417 | $wp_sql .= "($comment_post_ID, $comment_author, $comment_author_email, $comment_author_url, $comment_author_IP, ";
|
---|
418 | $wp_sql .= "$comment_date, $comment_content, $comment_approved, $user_ID, $comment_date_gmt, $comment_parent)";
|
---|
419 |
|
---|
420 | $wp_res = $xoops_db->query($wp_sql);
|
---|
421 | if ($wp_res === false) die( '...Err. INSERT' . $wp_comments . '(' . $wp_sql . ')');
|
---|
422 | $comment_ID = mysql_insert_id();
|
---|
423 | $wp_sql = "UPDATE $wp_posts SET comment_count = comment_count +1 WHERE ID = $comment_post_ID";
|
---|
424 | $xoops_db->query($wp_sql);
|
---|
425 | $wp_sql = "INSERT INTO $wp_d3forum_link ";
|
---|
426 | $wp_sql .= "(comment_ID , post_id) ";
|
---|
427 | $wp_sql .= "VALUES ";
|
---|
428 | $wp_sql .= "($comment_ID, $post_id)";
|
---|
429 | $xoops_db->query($wp_sql);
|
---|
430 | if ($comment_approved ==0) do_CommentWaiting($comment_ID, $post_id);
|
---|
431 | break;
|
---|
432 | case 'edit':
|
---|
433 | $comment_ID = "SELECT comment_ID FROM $wp_d3forum_link WHERE post_id = $post_id";
|
---|
434 | $comment_ID = $xoops_db->get_var("SELECT comment_ID FROM $wp_d3forum_link WHERE post_id = $post_id");
|
---|
435 | if (empty($comment_ID)) die('...Err. EDIT' . $wp_comments . '(' . $wp_sql . ')');
|
---|
436 | $wp_sql = "UPDATE $wp_comments SET comment_content = $comment_content , comment_date_gmt = $comment_date_gmt WHERE comment_ID = $comment_ID";
|
---|
437 | $wp_res = $xoops_db->query($wp_sql);
|
---|
438 | if (empty($wp_res)) die( '...Err. UPDATE' . $wp_comments . '(' . $wp_sql . ')');
|
---|
439 | break;
|
---|
440 | case 'delete':
|
---|
441 | // wordpress comments delete
|
---|
442 | $comment_ID = get_wp_comment_ID($post_id);
|
---|
443 | if ($comment_ID > 0){
|
---|
444 | $sql= "SELECT comment_type FROM $wp_comments WHERE comment_ID = $comment_ID";
|
---|
445 | $comment_type= $xoops_db->get_var("SELECT comment_type FROM $wp_comments WHERE comment_ID = $comment_ID");
|
---|
446 | if (!empty($comment_type)) break;
|
---|
447 | $xoops_db->query("DELETE FROM $wp_comments WHERE comment_ID = $comment_ID");
|
---|
448 | $xoops_db->query("DELETE FROM $wp_d3forum_link WHERE post_id = $post_id");
|
---|
449 | $xoops_db->query("UPDATE $wp_posts SET comment_count = comment_count -1 WHERE ID = $comment_post_ID");
|
---|
450 | }
|
---|
451 | break;
|
---|
452 | default :
|
---|
453 | }
|
---|
454 |
|
---|
455 | return true ;
|
---|
456 | }
|
---|
457 |
|
---|
458 | // The content is reflected in the D3Forum comment when there is a change in the WordPress comment.
|
---|
459 | function wp_comment_sync_to_d3forum($comment_ID = 0,$sync_mode){
|
---|
460 | global $xpress_config,$xoops_db;
|
---|
461 |
|
---|
462 | if (!is_d3forum_setting()) die('The setting of the D3Forum comment integration is wrong. ');
|
---|
463 |
|
---|
464 | $d3f_forum_id = $xpress_config->d3forum_forum_id;
|
---|
465 | $d3f_forum_dir = $xpress_config->d3forum_module_dir;
|
---|
466 |
|
---|
467 | $d3forum_prefix = get_xoops_prefix() . $d3f_forum_dir . '_';
|
---|
468 | $xpress_prefix = get_wp_prefix();
|
---|
469 | $wp_comments = $xpress_prefix . 'comments';
|
---|
470 | $wp_posts = $xpress_prefix . 'posts';
|
---|
471 | $wp_d3forum_link = $xpress_prefix . 'd3forum_link';
|
---|
472 | $d3f_topic = $d3forum_prefix . 'topics';
|
---|
473 | $d3f_posts = $d3forum_prefix . 'posts';
|
---|
474 |
|
---|
475 | $sql = "SELECT $wp_comments.comment_ID,$wp_comments.comment_post_ID, ";
|
---|
476 | $sql .= "$wp_comments.comment_author, $wp_comments.comment_author_email, $wp_comments.comment_date, ";
|
---|
477 | $sql .= "$wp_comments.comment_author_url, $wp_comments.comment_author_IP, ";
|
---|
478 | $sql .= "$wp_comments.comment_content, $wp_comments.comment_karma, ";
|
---|
479 | $sql .= "$wp_comments.comment_approved, $wp_comments.comment_agent, ";
|
---|
480 | $sql .= "$wp_comments.comment_type, $wp_comments.comment_parent, $wp_comments.user_id, ";
|
---|
481 | $sql .= "$wp_posts.post_title ,$wp_posts.comment_count ";
|
---|
482 | $sql .= "FROM $wp_comments INNER JOIN $wp_posts ON $wp_comments.comment_post_ID = $wp_posts.ID ";
|
---|
483 | $sql .= "WHERE (comment_ID = $comment_ID) AND ($wp_comments.comment_approved NOT LIKE 'spam') ";
|
---|
484 |
|
---|
485 | $row = $xoops_db->get_row($sql) ;
|
---|
486 | if(empty($row)) die( 'READ ' . $wp_comments . '_NG...' .$sql);
|
---|
487 | if (! empty($row->comment_type)) return;
|
---|
488 |
|
---|
489 | $forum_id = $d3f_forum_id;
|
---|
490 | $d3forum_dirname =$d3f_forum_dir;
|
---|
491 | $topic_external_link_id = $row->comment_post_ID; //There is information on WP post_ID in topic_external_link_id of D3Forum
|
---|
492 | $topic_title = 'Re.' . addSlashes($row->post_title);
|
---|
493 | $post_time = strtotime($row->comment_date); // or $row2['comment_date_gmt']
|
---|
494 | $modified_time = strtotime($row->comment_date); // or $row2['comment_date_gmt']
|
---|
495 | $uid = $row->user_id;
|
---|
496 | $poster_ip = "'" . addslashes($row->comment_author_IP ). "'";
|
---|
497 | $modifier_ip = "'" . addslashes($row->comment_author_IP) . "'";
|
---|
498 | $subject = "'" . $topic_title . "'";
|
---|
499 | $post_text = "'" . addSlashes($row->comment_content) . "'";
|
---|
500 | $guest_name = "'" . addSlashes($row->comment_author) . "'";
|
---|
501 | $guest_email = "'" . $row->comment_author_email . "'";
|
---|
502 | $guest_url = "'" . $row->comment_author_url . "'";
|
---|
503 | $approval = $row->comment_approved;
|
---|
504 | $comment_count = $row->comment_count;
|
---|
505 | $comment_parent = $row->comment_parent;
|
---|
506 |
|
---|
507 | if ($sync_mode == 'delete'){
|
---|
508 | $mode = 'delete';
|
---|
509 | $delete_post_id = $xoops_db->get_var("SELECT post_id FROM $wp_d3forum_link WHERE comment_ID = $comment_ID");
|
---|
510 | if (empty($delete_post_id)) return;
|
---|
511 | $topic_id = $xoops_db->get_var("SELECT topic_id FROM $d3f_topic WHERE topic_external_link_id = $topic_external_link_id AND forum_id = $forum_id");
|
---|
512 | if (empty($topic_id)) return;
|
---|
513 | }else{
|
---|
514 | // Does the first comment (= topic) on the post exist?
|
---|
515 | $sql = "SELECT * FROM $d3f_topic WHERE topic_external_link_id = $topic_external_link_id AND forum_id = $forum_id";
|
---|
516 | $row = $xoops_db->get_row($sql) ;
|
---|
517 | $topic_first_post_id = $row->topic_first_post_id;
|
---|
518 | if (empty($row)){
|
---|
519 | $mode = $mode = 'newtopic';
|
---|
520 | } else {
|
---|
521 | $topic_id = $row->topic_id;
|
---|
522 |
|
---|
523 | // if comment on same ID exists then edits comment else reply comment
|
---|
524 | $row = $xoops_db->get_row("SELECT * FROM $wp_d3forum_link WHERE comment_ID = $comment_ID") ;
|
---|
525 |
|
---|
526 | if (!empty($row)){
|
---|
527 | $mode = $mode = 'edit';
|
---|
528 | $edit_post_id = $row->post_id;
|
---|
529 | } else {
|
---|
530 | $mode = $mode = 'reply';
|
---|
531 | $reply_pid = 0;
|
---|
532 | if ($comment_parent > 0) {
|
---|
533 | $reply_pid = get_d3forum_post_ID($comment_parent);
|
---|
534 | }
|
---|
535 | if ($reply_pid == 0) {
|
---|
536 | $reply_pid = $topic_first_post_id; //reply_first_comment
|
---|
537 | }
|
---|
538 | }
|
---|
539 | }
|
---|
540 | }
|
---|
541 | $modified_time = $post_time;
|
---|
542 |
|
---|
543 | // make set part of INSERT or UPDATE (refalence d3forum main/post.php)
|
---|
544 | $set4sql = "modified_time= $modified_time , modifier_ip= $modifier_ip " ;
|
---|
545 | $set4sql .= ",subject= $subject " ;
|
---|
546 | $set4sql .= ",post_text= $post_text " ;
|
---|
547 |
|
---|
548 | if($uid == 0) {
|
---|
549 | @list( $guest_name , $trip_base ) = explode( '#' , $guest_name , 2 ) ;
|
---|
550 | if( ! trim( @$guest_name ) ) $guest_name = get_xoops_config('anonymous_name',$d3f_forum_dir) ;
|
---|
551 | if( ! empty( $trip_base ) && function_exists( 'crypt' ) ) {
|
---|
552 | $salt = strtr( preg_replace( '/[^\.-z]/' , '.' , substr( $trip_base . 'H.' , 1 , 2 ) ) , ':;<=>?@[\]^_`' , 'ABCDEFGabcdef' ) ;
|
---|
553 | $guest_trip = substr( crypt( $trip_base , $salt ) , -10 ) ;
|
---|
554 | } else {
|
---|
555 | $guest_trip = '' ;
|
---|
556 | }
|
---|
557 | $guest_url = preg_match( '#^https?\://#' , $guest_url ) ? $guest_url : '' ;
|
---|
558 | foreach( array('guest_name','guest_email','guest_url','guest_trip') as $key ) {
|
---|
559 | $set4sql .= ",$key='".addslashes($$key)."'" ;
|
---|
560 | }
|
---|
561 | if( ! empty( $guest_pass ) ) {
|
---|
562 | $set4sql .= ",guest_pass_md5='".md5($guest_pass.'d3forum')."'" ;
|
---|
563 | }
|
---|
564 | }
|
---|
565 |
|
---|
566 | $hide_uid = get_xoops_config('allow_hideuid',$d3f_forum_dir);
|
---|
567 |
|
---|
568 | switch($mode){
|
---|
569 | case 'edit':
|
---|
570 | $edit_post = $xoops_db->get_row("SELECT * FROM $d3f_posts WHERE post_id= $edit_post_id ");
|
---|
571 | if(empty($edit_post)) die( 'READ ' . $d3forum_comments . '_NG...' .$sql);
|
---|
572 | // approval
|
---|
573 | if( $approval ) {
|
---|
574 | $set4sql .= ',approval=1' ;
|
---|
575 | $topic_invisible = 0 ;
|
---|
576 | $need_notify = true ;
|
---|
577 | } else {
|
---|
578 | $set4sql .= ',approval=0' ;
|
---|
579 | $topic_invisible = 0 ;
|
---|
580 | $need_admin_notify = true ;
|
---|
581 | }
|
---|
582 | // hide_uid
|
---|
583 | if( $hide_uid ) {
|
---|
584 | $set4sql .= ",uid=0,uid_hidden='$uid'" ;
|
---|
585 | } else {
|
---|
586 | $set4sql .= ",uid='$uid',uid_hidden=0" ;
|
---|
587 | }
|
---|
588 |
|
---|
589 | // update post specified post_id
|
---|
590 | wp_d3forum_transact_make_post_history( $d3forum_dirname , $edit_post_id ) ;
|
---|
591 | $sql = "UPDATE ".$d3f_posts." SET $set4sql WHERE post_id=$edit_post_id";
|
---|
592 | $xoops_db->query($sql);
|
---|
593 | $xoops_db->query($sql) ;
|
---|
594 | if ($edit_post_pid == 0){
|
---|
595 | $sql = "UPDATE ".$d3f_topic." SET topic_invisible=$topic_invisible WHERE topic_id=$topic_id";
|
---|
596 | $xoops_db->query($sql);
|
---|
597 | }
|
---|
598 | wp_d3forum_sync_topic( $d3forum_dirname , $topic_id , true , ! $edit_post_pid ) ;
|
---|
599 | break;
|
---|
600 |
|
---|
601 | case 'reply' :
|
---|
602 | // approval
|
---|
603 | if( $approval ) {
|
---|
604 | $set4sql .= ',approval=1' ;
|
---|
605 | $need_notify = true ;
|
---|
606 | } else {
|
---|
607 | $set4sql .= ',approval=0' ;
|
---|
608 | $need_admin_notify = true ;
|
---|
609 | }
|
---|
610 |
|
---|
611 | // hide_uid
|
---|
612 | if( $hide_uid ) {
|
---|
613 | $set4sql .= ",uid=0,uid_hidden='$uid'" ;
|
---|
614 | } else {
|
---|
615 | $set4sql .= ",uid='$uid',uid_hidden=0" ;
|
---|
616 | }
|
---|
617 |
|
---|
618 | // create post under specified post_id
|
---|
619 | $sql = "INSERT INTO ".$d3f_posts." SET $set4sql,pid=$reply_pid,topic_id=$topic_id,post_time=$post_time,poster_ip=$poster_ip";
|
---|
620 | $xoops_db->query($sql) ;
|
---|
621 | $post_id = mysql_insert_id();
|
---|
622 | wp_d3forum_sync_topic( $d3forum_dirname , $topic_id ) ;
|
---|
623 |
|
---|
624 | $wp_sql = "INSERT INTO $wp_d3forum_link ";
|
---|
625 | $wp_sql .= "(comment_ID , post_id) ";
|
---|
626 | $wp_sql .= "VALUES ";
|
---|
627 | $wp_sql .= "($comment_ID, $post_id)";
|
---|
628 | $xoops_db->query($wp_sql);
|
---|
629 |
|
---|
630 | break;
|
---|
631 |
|
---|
632 | case 'newtopic':
|
---|
633 | // approval
|
---|
634 | if( $approval ) {
|
---|
635 | $set4sql .= ',approval=1' ;
|
---|
636 | $topic_invisible = 0 ;
|
---|
637 | $need_notify = true ;
|
---|
638 | } else {
|
---|
639 | $set4sql .= ',approval=0' ;
|
---|
640 | $topic_invisible = 0 ;
|
---|
641 | $need_admin_notify = true ;
|
---|
642 | }
|
---|
643 |
|
---|
644 | // hide_uid
|
---|
645 | if( $hide_uid ) {
|
---|
646 | $set4sql .= ",uid=0,uid_hidden='$uid'" ;
|
---|
647 | } else {
|
---|
648 | $set4sql .= ",uid='$uid',uid_hidden=0" ;
|
---|
649 | }
|
---|
650 |
|
---|
651 | // create topic and get a new topic_id
|
---|
652 | $sql = "INSERT INTO ".$d3f_topic." SET forum_id=$forum_id,topic_invisible=$topic_invisible,topic_external_link_id='".addslashes($topic_external_link_id)."'";
|
---|
653 | $xoops_db->query($sql) ;
|
---|
654 | $topic_id = mysql_insert_id();
|
---|
655 | // create post in the topic
|
---|
656 | $sql = "INSERT INTO ".$d3f_posts." SET $set4sql,topic_id=$topic_id,post_time=$post_time,poster_ip=$poster_ip";
|
---|
657 | $xoops_db->query($sql) ;
|
---|
658 | $post_id = mysql_insert_id();
|
---|
659 | wp_d3forum_sync_topic( $d3forum_dirname , $topic_id , true , true ) ;
|
---|
660 |
|
---|
661 | $wp_sql = "INSERT INTO $wp_d3forum_link ";
|
---|
662 | $wp_sql .= "(comment_ID , post_id , wp_post_ID) ";
|
---|
663 | $wp_sql .= "VALUES ";
|
---|
664 | $wp_sql .= "($comment_ID, $post_id, $topic_external_link_id)";
|
---|
665 | $xoops_db->query($wp_sql);
|
---|
666 |
|
---|
667 | break;
|
---|
668 | case 'delete':
|
---|
669 | wp_d3forum_delete_post_recursive( $d3forum_dirname , $delete_post_id );
|
---|
670 | wp_d3forum_sync_topic( $d3forum_dirname , $topic_id ) ;
|
---|
671 | break;
|
---|
672 | default:
|
---|
673 | }
|
---|
674 |
|
---|
675 | // increment post
|
---|
676 | if( is_object( @$xoopsUser ) && $mode != 'edit' ) {
|
---|
677 | $xoopsUser->incrementPost() ;
|
---|
678 | }
|
---|
679 | // set u2t_marked
|
---|
680 | $allow_mark = get_xoops_config('allow_mark',$d3f_forum_dir);
|
---|
681 |
|
---|
682 | if( $uid && $allow_mark) {
|
---|
683 | $u2t_marked = empty( $_POST['u2t_marked'] ) ? 0 : 1 ;
|
---|
684 | $sql = "UPDATE ".$d3forum_prefix."users2topics"." SET u2t_marked=$u2t_marked,u2t_time=UNIX_TIMESTAMP() WHERE uid=$uid AND topic_id=$topic_id" ;
|
---|
685 | if( ! $xoops_db->query($sql)){
|
---|
686 | $sql = "INSERT INTO ".$d3forum_prefix."users2topics"." SET uid=$uid,topic_id=$topic_id,u2t_marked=$u2t_marked,u2t_time=UNIX_TIMESTAMP()" ;
|
---|
687 | $xoops_db->query($sql);
|
---|
688 | }
|
---|
689 | }
|
---|
690 | }
|
---|
691 |
|
---|
692 |
|
---|
693 | // ********************** refrence by d3forum *********************************************
|
---|
694 | // delete posts recursively
|
---|
695 | function wp_d3forum_delete_post_recursive( $d3forum_dirname , $post_id ,$isChild = false)
|
---|
696 | {
|
---|
697 | $post_id = intval( $post_id ) ; // post_id is d3forum post(comments) id.
|
---|
698 | global $xpress_config,$xoops_db;
|
---|
699 | $d3forum_prefix = get_xoops_prefix() . $d3forum_dirname . '_';
|
---|
700 | $xpress_prefix = get_wp_prefix();
|
---|
701 |
|
---|
702 | $topic_id = $xoops_db->get_var("SELECT topic_id FROM ".$d3forum_prefix."posts WHERE post_id=$post_id");
|
---|
703 |
|
---|
704 | //It deletes it if there is a child comment.
|
---|
705 | $sql = "SELECT post_id FROM ".$d3forum_prefix ."posts"." WHERE pid=$post_id" ;
|
---|
706 | $child_comments = $xoops_db->get_results("SELECT post_id FROM ".$d3forum_prefix ."posts"." WHERE pid=$post_id");
|
---|
707 | foreach($child_comments as $child_comment){
|
---|
708 | wp_d3forum_delete_post_recursive( $d3forum_dirname , $child_comment->post_id ,true) ;
|
---|
709 | }
|
---|
710 | wp_d3forum_transact_make_post_history( $d3forum_dirname , $post_id , true ) ;
|
---|
711 | $xoops_db->query( "DELETE FROM ".$d3forum_prefix."posts WHERE post_id=$post_id" ) ;
|
---|
712 | $xoops_db->query( "DELETE FROM ".$d3forum_prefix."post_votes WHERE post_id=$post_id" ) ;
|
---|
713 |
|
---|
714 | $wp_comments = $xpress_prefix . 'comments';
|
---|
715 | $wp_posts = $xpress_prefix . 'posts';
|
---|
716 | $wp_d3forum_link = $xpress_prefix . 'd3forum_link';
|
---|
717 |
|
---|
718 | $comment_ID = get_wp_comment_ID($post_id); // get wordpress comment ID
|
---|
719 | if ($comment_ID > 0){
|
---|
720 | $comment_post_ID = $xoops_db->get_var("SELECT comment_post_ID FROM $wp_comments WHERE comment_ID = $comment_ID");
|
---|
721 | if ($isChild){ //The first comment is deleted on the WordPress side.
|
---|
722 | $xoops_db->query("DELETE FROM $wp_comments WHERE comment_ID = $comment_ID");
|
---|
723 | if (!empty($comment_post_ID)){
|
---|
724 | $xoops_db->query("UPDATE $wp_posts SET comment_count = comment_count -1 WHERE ID = $comment_post_ID");
|
---|
725 | }
|
---|
726 | }
|
---|
727 | $xoops_db->query("DELETE FROM $wp_d3forum_link WHERE post_id = $post_id");
|
---|
728 | }
|
---|
729 | }
|
---|
730 |
|
---|
731 |
|
---|
732 | // delete a topic
|
---|
733 | function wp_d3forum_delete_topic( $d3forum_dirname , $topic_id , $delete_also_posts = true )
|
---|
734 | {
|
---|
735 | global $xpress_config,$xoops_db;
|
---|
736 | $d3forum_prefix = get_xoops_prefix() . $d3forum_dirname . '_';
|
---|
737 | $xpress_prefix = get_wp_prefix();
|
---|
738 |
|
---|
739 | $topic_id = intval( $topic_id ) ;
|
---|
740 |
|
---|
741 | // delete posts
|
---|
742 | if( $delete_also_posts ) {
|
---|
743 | $posts = $xoops_db->query("SELECT post_id FROM ".$d3forum_prefix."posts WHERE topic_id=$topic_id");
|
---|
744 | if( !empty($posts)) {
|
---|
745 | foreach($posts as $post){
|
---|
746 | wp_d3forum_delete_post_recursive( $d3forum_dirname , $post->post_id ) ;
|
---|
747 | }
|
---|
748 | }
|
---|
749 | }
|
---|
750 |
|
---|
751 | // delete notifications about this topic
|
---|
752 |
|
---|
753 | // delete topic
|
---|
754 | $xoops_db->query( "DELETE FROM ".$d3forum_prefix."topics WHERE topic_id=$topic_id" );
|
---|
755 | // delete u2t
|
---|
756 | $xoops_db->query( "DELETE FROM ".$d3forum_prefix."users2topics WHERE topic_id=$topic_id" );
|
---|
757 | }
|
---|
758 |
|
---|
759 |
|
---|
760 | // store redundant informations to a topic from its posts
|
---|
761 | // and rebuild tree informations (depth, order_in_tree)
|
---|
762 | function wp_d3forum_sync_topic( $d3forum_dirname , $topic_id , $sync_also_forum = true , $sync_topic_title = false )
|
---|
763 | {
|
---|
764 | global $xpress_config,$xoops_db;
|
---|
765 | $d3forum_prefix = get_xoops_prefix() . $d3forum_dirname . '_';
|
---|
766 | $xpress_prefix = get_wp_prefix();
|
---|
767 |
|
---|
768 | $topic_id = intval( $topic_id ) ;
|
---|
769 |
|
---|
770 | $forum_id = $xoops_db->get_var("SELECT forum_id FROM ".$d3forum_prefix."topics WHERE topic_id=$topic_id");
|
---|
771 |
|
---|
772 | // get first_post_id
|
---|
773 | $first_post_id = $xoops_db->get_var("SELECT post_id FROM ".$d3forum_prefix."posts WHERE topic_id=$topic_id AND pid=0");
|
---|
774 |
|
---|
775 | // get last_post_id and total_posts
|
---|
776 | $sql = "SELECT MAX(post_id) as last_post_id,COUNT(post_id) as total_posts FROM ".$d3forum_prefix."posts WHERE topic_id=$topic_id" ;
|
---|
777 | $row = $xoops_db->get_row($sql);
|
---|
778 | $last_post_id = $row->last_post_id;
|
---|
779 | $total_posts = $row->total_posts;
|
---|
780 |
|
---|
781 | if( empty( $total_posts ) ) {
|
---|
782 | // this is empty topic should be removed
|
---|
783 | wp_d3forum_delete_topic( $d3forum_dirname , $topic_id ,0) ;
|
---|
784 |
|
---|
785 | } else {
|
---|
786 |
|
---|
787 | // update redundant columns in topics table
|
---|
788 | $row = $xoops_db->get_row( "SELECT post_time,uid,subject,unique_path FROM ".$d3forum_prefix."posts WHERE post_id=$first_post_id" ) ;
|
---|
789 | $first_post_time = $row->post_time;
|
---|
790 | $first_uid = $row->uid;
|
---|
791 | $first_subject = $row->subject;
|
---|
792 | $unique_path = $row->unique_path;
|
---|
793 | $row = $xoops_db->get_row( "SELECT post_time,uid FROM ".$d3forum_prefix."posts WHERE post_id=$last_post_id" ) ;
|
---|
794 | $last_post_time = $row->post_time;
|
---|
795 | $last_uid = $row->uid;
|
---|
796 | // sync topic_title same as first post's subject if specified
|
---|
797 | $topictitle4set = $sync_topic_title ? "topic_title='".addslashes($first_subject)."'," : "" ;
|
---|
798 |
|
---|
799 | $xoops_db->query( "UPDATE ".$d3forum_prefix."topics SET {$topictitle4set} topic_posts_count=$total_posts, topic_first_uid=$first_uid, topic_first_post_id=$first_post_id, topic_first_post_time=$first_post_time, topic_last_uid=$last_uid, topic_last_post_id=$last_post_id, topic_last_post_time=$last_post_time WHERE topic_id=$topic_id" );
|
---|
800 |
|
---|
801 | // rebuild tree informations
|
---|
802 | $tree_array = wp_d3forum_maketree_recursive( $d3forum_prefix."posts" , intval( $first_post_id ) , 'post_id' , array() , 0 , empty( $unique_path ) ? '.1' : $unique_path ) ;
|
---|
803 | if( ! empty( $tree_array ) ) {
|
---|
804 | foreach( $tree_array as $key => $val ) {
|
---|
805 | $xoops_db->query( "UPDATE ".$d3forum_prefix."posts SET depth_in_tree=".$val['depth'].", order_in_tree=".($key+1).", unique_path='".addslashes($val['unique_path'])."' WHERE post_id=".$val['post_id'] ) ;
|
---|
806 | }
|
---|
807 | }
|
---|
808 | }
|
---|
809 |
|
---|
810 | if( $sync_also_forum )
|
---|
811 | return wp_d3forum_sync_forum( $d3forum_dirname , $forum_id ) ;
|
---|
812 | else
|
---|
813 | return true ;
|
---|
814 | }
|
---|
815 |
|
---|
816 | function wp_d3forum_maketree_recursive( $tablename , $post_id , $order = 'post_id' , $parray = array() , $depth = 0 , $unique_path = '.1' )
|
---|
817 | {
|
---|
818 | global $xpress_config,$xoops_db;
|
---|
819 |
|
---|
820 | $parray[] = array( 'post_id' => $post_id , 'depth' => $depth , 'unique_path' => $unique_path ) ;
|
---|
821 |
|
---|
822 | $sql = "SELECT post_id,unique_path FROM $tablename WHERE pid=$post_id ORDER BY $order" ;
|
---|
823 | if( ! $result = $xoops_db->get_results( $sql )) {
|
---|
824 | return $parray ;
|
---|
825 | }
|
---|
826 | $new_post_ids = array() ;
|
---|
827 | $max_count_of_last_level = 0 ;
|
---|
828 | foreach($result as $row){
|
---|
829 | $new_post_id = $row->post_id;
|
---|
830 | $new_unique_path = $row->unique_path;
|
---|
831 | $new_post_ids[ intval( $new_post_id ) ] = $new_unique_path ;
|
---|
832 | if( ! empty( $new_unique_path ) ) {
|
---|
833 | $count_of_last_level = intval( substr( strrchr( $new_unique_path , '.' ) , 1 ) ) ;
|
---|
834 | if( $max_count_of_last_level < $count_of_last_level ) {
|
---|
835 | $max_count_of_last_level = $count_of_last_level ;
|
---|
836 | }
|
---|
837 | }
|
---|
838 | }
|
---|
839 | foreach( $new_post_ids as $new_post_id => $new_unique_path ) {
|
---|
840 | if( empty( $new_unique_path ) ) {
|
---|
841 | $new_unique_path = $unique_path . '.' . ++ $max_count_of_last_level ;
|
---|
842 | }
|
---|
843 | $parray = wp_d3forum_maketree_recursive( $tablename , $new_post_id , $order , $parray , $depth + 1 , $new_unique_path ) ;
|
---|
844 | }
|
---|
845 | return $parray ;
|
---|
846 | }
|
---|
847 |
|
---|
848 | function wp_d3forum_makecattree_recursive( $tablename , $cat_id , $order = 'cat_weight' , $parray = array() , $depth = 0 , $cat_title = '' )
|
---|
849 | {
|
---|
850 | global $xoops_db;
|
---|
851 |
|
---|
852 | $parray[] = array( 'cat_id' => $cat_id , 'depth' => $depth , 'cat_title' => $cat_title ) ;
|
---|
853 |
|
---|
854 | $sql = "SELECT cat_id,cat_title FROM $tablename WHERE pid=$cat_id ORDER BY $order" ;
|
---|
855 | $results = $xoops_db->get_results( $sql ) ;
|
---|
856 | if( empty($results) ) {
|
---|
857 | return $parray ;
|
---|
858 | }
|
---|
859 | foreach($result as $row){
|
---|
860 | $new_cat_id = $row->cat_id;
|
---|
861 | $new_cat_title = $row->cat_title;
|
---|
862 | $parray = wp_d3forum_makecattree_recursive( $tablename , $new_cat_id , $order , $parray , $depth + 1 , $new_cat_title ) ;
|
---|
863 | }
|
---|
864 | return $parray ;
|
---|
865 | }
|
---|
866 |
|
---|
867 |
|
---|
868 | // store redundant informations to a forum from its topics
|
---|
869 | function wp_d3forum_sync_forum( $d3forum_dirname , $forum_id , $sync_also_category = true )
|
---|
870 | {
|
---|
871 | global $xoops_db;
|
---|
872 | $d3forum_prefix = get_xoops_prefix() . $d3forum_dirname . '_';
|
---|
873 |
|
---|
874 | $forum_id = intval( $forum_id ) ;
|
---|
875 |
|
---|
876 | $sql = "SELECT cat_id FROM ".$d3forum_prefix."forums WHERE forum_id=$forum_id" ;
|
---|
877 | if( ! $cat_id = $xoops_db->get_var( $sql ) ) die( "ERROR SELECT forum in sync forum" ) ;
|
---|
878 |
|
---|
879 | $sql = "SELECT MAX(topic_last_post_id) as last_post_id ,MAX(topic_last_post_time) as last_post_time ,COUNT(topic_id) as topics_count,SUM(topic_posts_count) as posts_count FROM ".$d3forum_prefix."topics WHERE forum_id=$forum_id" ;
|
---|
880 | if( ! $row = $xoops_db->get_row( $sql ) ) die( "ERROR SELECT topics in sync forum" ) ;
|
---|
881 | $last_post_id = $row->last_post_id;
|
---|
882 | $last_post_time = $row->last_post_time;
|
---|
883 | $topics_count = $row->topics_count;
|
---|
884 | $posts_count = $row->posts_count;
|
---|
885 |
|
---|
886 | $xoops_db->query( "UPDATE ".$d3forum_prefix."forums SET forum_topics_count=".intval($topics_count).",forum_posts_count=".intval($posts_count).", forum_last_post_id=".intval($last_post_id).", forum_last_post_time=".intval($last_post_time)." WHERE forum_id=$forum_id" ) ;
|
---|
887 |
|
---|
888 | if( $sync_also_category ) return wp_d3forum_sync_category( $d3forum_dirname , $cat_id ) ;
|
---|
889 | else return true ;
|
---|
890 | }
|
---|
891 |
|
---|
892 | function get_d3forum_all_child_catid($d3forum_prefix,$sel_id, $order="", $idarray = array())
|
---|
893 | {
|
---|
894 | global $xoops_db;
|
---|
895 | $sql = "SELECT * FROM ".$d3forum_prefix."categories WHERE pid =".$sel_id."";
|
---|
896 | if ( $order != "" ) {
|
---|
897 | $sql .= " ORDER BY $order";
|
---|
898 | }
|
---|
899 | $categories =$xoops_db->get_results($sql);
|
---|
900 | if ( empty($cat_ids)) {
|
---|
901 | return $idarray;
|
---|
902 | }
|
---|
903 | foreach( categories as $categorie ) {
|
---|
904 | $r_id = $categorie->cat_id;
|
---|
905 | array_push($idarray, $r_id);
|
---|
906 | $idarray = get_d3forum_all_child_catid($d3forum_prefix, $r_id,$order,$idarray);
|
---|
907 | }
|
---|
908 | return $idarray;
|
---|
909 | }
|
---|
910 |
|
---|
911 | // store redundant informations to a category from its forums
|
---|
912 | function wp_d3forum_sync_category( $d3forum_dirname , $cat_id )
|
---|
913 | {
|
---|
914 | global $xoops_db;
|
---|
915 | $d3forum_prefix = get_xoops_prefix() . $d3forum_dirname . '_';
|
---|
916 |
|
---|
917 | $cat_id = intval( $cat_id ) ;
|
---|
918 |
|
---|
919 | // get children
|
---|
920 | $children = get_d3forum_all_child_catid( $d3forum_prefix."categories" , $cat_id ) ;
|
---|
921 | $children[] = $cat_id ;
|
---|
922 | $children = array_map( 'intval' , $children ) ;
|
---|
923 |
|
---|
924 | // topics/posts information belonging this category directly
|
---|
925 | $sql = "SELECT MAX(forum_last_post_id) as last_post_id,MAX(forum_last_post_time) as last_post_time,SUM(forum_topics_count) as topics_count,SUM(forum_posts_count) as posts_count FROM ".$d3forum_prefix."forums WHERE cat_id=$cat_id" ;
|
---|
926 | if( ! $row = $xoops_db->get_row( $sql ) ) die( "ERROR SELECT forum in sync category" ) ;
|
---|
927 | $last_post_id = $row->last_post_id ;
|
---|
928 | $last_post_time = $row->last_post_time ;
|
---|
929 | $topics_count = $row->topics_count ;
|
---|
930 | $posts_count = $row->posts_count ;
|
---|
931 |
|
---|
932 | // topics/posts information belonging this category and/or subcategories
|
---|
933 | $sql = "SELECT MAX(forum_last_post_id) as last_post_id_in_tree,MAX(forum_last_post_time) as last_post_time_in_tree,SUM(forum_topics_count) as topics_count_in_tree,SUM(forum_posts_count) as posts_count_in_tree FROM ".$d3forum_prefix."forums WHERE cat_id IN (".implode(",",$children).")" ;
|
---|
934 | if( ! $row = $xoops_db->get_row( $sql ) ) die( "ERROR SELECT forum in sync category" ) ;
|
---|
935 | $last_post_id_in_tree = $row->last_post_id_in_tree ;
|
---|
936 | $last_post_time_in_tree = $row->last_post_time_in_tree ;
|
---|
937 | $topics_count_in_tree = $row->topics_count_in_tree ;
|
---|
938 | $posts_count_in_tree = $row->posts_count_in_tree ;
|
---|
939 |
|
---|
940 | // update query
|
---|
941 | $xoops_db->query( "UPDATE ".$d3forum_prefix."categories SET cat_topics_count=".intval($topics_count).",cat_posts_count=".intval($posts_count).", cat_last_post_id=".intval($last_post_id).", cat_last_post_time=".intval($last_post_time).",cat_topics_count_in_tree=".intval($topics_count_in_tree).",cat_posts_count_in_tree=".intval($posts_count_in_tree).", cat_last_post_id_in_tree=".intval($last_post_id_in_tree).", cat_last_post_time_in_tree=".intval($last_post_time_in_tree)." WHERE cat_id=$cat_id" );
|
---|
942 |
|
---|
943 | // do sync parents
|
---|
944 | $pid = $xoops_db->get_var( "SELECT pid FROM ".$d3forum_prefix."categories WHERE cat_id=$cat_id" ) ;
|
---|
945 | if( $pid != $cat_id && $pid > 0 ) {
|
---|
946 | wp_d3forum_sync_category( $d3forum_dirname , $pid ) ;
|
---|
947 | }
|
---|
948 |
|
---|
949 | return true ;
|
---|
950 | }
|
---|
951 |
|
---|
952 | // make a new history entry for a post
|
---|
953 | function wp_d3forum_transact_make_post_history( $d3forum_dirname , $post_id , $full_backup = false )
|
---|
954 | {
|
---|
955 | global $xoops_db;
|
---|
956 | $d3forum_prefix = get_xoops_prefix() . $d3forum_dirname . '_';
|
---|
957 |
|
---|
958 | $post_id = intval( $post_id ) ;
|
---|
959 |
|
---|
960 | $results = $xoops_db->get_results( "SELECT * FROM ".$d3forum_prefix."posts WHERE post_id=$post_id" ) ;
|
---|
961 | if(empty($results)) return ;
|
---|
962 | $post_row = $results ;
|
---|
963 | $data = array() ;
|
---|
964 | $indexes = $full_backup ? array_keys( $post_row ) : array( 'subject' , 'post_text' ) ;
|
---|
965 | foreach( $indexes as $index ) {
|
---|
966 | $data[ $index ] = $post_row[ $index ] ;
|
---|
967 | }
|
---|
968 |
|
---|
969 | // check the latest data in history
|
---|
970 | $old_data_serialized = $xoops_db->get_var( "SELECT data FROM ".$d3forum_prefix."post_histories WHERE post_id=$post_id ORDER BY history_time DESC" ) ;
|
---|
971 | if( !empty( $old_data_serialized ) ) {
|
---|
972 | $old_data = unserialize( $old_data_serialized ) ;
|
---|
973 | if( $old_data == $data ) return ;
|
---|
974 | }
|
---|
975 |
|
---|
976 | $xoops_db->query( "INSERT INTO ".$d3forum_prefix."post_histories SET post_id=$post_id, history_time=UNIX_TIMESTAMP(), data='".mysql_real_escape_string( serialize( $data ) )."'" ) ;
|
---|
977 | }
|
---|
978 |
|
---|
979 | ?> |
---|