moved qdb here because matt is lazy
[public/www-new.git] / pub / qdb / util / chirpy_rqms_import.php
1 <?php\r
2 ###############################################################################\r
3 # Chirpy! 0.3, a quote management system                                      #\r
4 # Copyright (C) 2005-2007 Tim De Pauw <ceetee@users.sourceforge.net>          #\r
5 ###############################################################################\r
6 # This program is free software; you can redistribute it and/or modify it     #\r
7 # under the terms of the GNU General Public License as published by the Free  #\r
8 # Software Foundation; either version 2 of the License, or (at your option)   #\r
9 # any later version.                                                          #\r
10 #                                                                             #\r
11 # This program is distributed in the hope that it will be useful, but WITHOUT #\r
12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or       #\r
13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for   #\r
14 # more details.                                                               #\r
15 #                                                                             #\r
16 # You should have received a copy of the GNU General Public License along     #\r
17 # with this program; if not, write to the Free Software Foundation, Inc., 51  #\r
18 # Franklin St, Fifth Floor, Boston, MA  02110-1301  USA                       #\r
19 ###############################################################################\r
20 \r
21 ###############################################################################\r
22 # chirpy_rqms_import.php                                                      #\r
23 # Imports data from an existing RQMS installation into Chirpy!                #\r
24 ###############################################################################\r
25 # $Id:: chirpy_rqms_import.php 291 2007-02-05 21:24:46Z ceetee              $ #\r
26 ###############################################################################\r
27 \r
28 ###############################################################################\r
29 # CONFIGURATION                                                               #\r
30 ###############################################################################\r
31 \r
32 // Chirpy!'s table prefix: same as in the configuration.\r
33 $chirpy_table_prefix = 'chirpy_';\r
34 \r
35 // Set this to false to keep this script from emptying Chirpy!'s tables first.\r
36 // This can be useful if you want to import your Rash installation's quotes\r
37 // AFTER using Chirpy! for a while. Note that setting this option to true will\r
38 // copy Rash's quote IDs, which can be useful if you want to keep existing\r
39 // links intact, while a value of false will not guarantee that.\r
40 $clear_chirpy_tables = true;\r
41 \r
42 // Rash only saves the date of news items, not the time. To compensate, time\r
43 // is set to midnight in your time zone. Enter your time zone here. This needs\r
44 // to be a time zone that Perl's strtotime() function can understand, or the\r
45 // script will not work properly. Both GMT offsets like ‘+0200’ (no colon!)\r
46 // and zones like ‘CET’ should be supported.\r
47 $timezone = 'GMT';\r
48 \r
49 ###############################################################################\r
50 # DO NOT TOUCH ANYTHING BELOW THIS LINE                                       #\r
51 ###############################################################################\r
52 \r
53 require('config.php');\r
54 \r
55 set_magic_quotes_runtime(0);\r
56 error_reporting(E_ALL);\r
57 \r
58 header('Content-Type: text/plain; charset=UTF-8');\r
59 \r
60 log_event('Connecting to ‘' . $hostname . '’ …', true);\r
61 mysql_connect($hostname, $username, $dbpasswd)\r
62         or die('Database connection failed: ' . mysql_error());\r
63 \r
64 log_event('Accessing database ‘' . $dbname . '’ …', true);\r
65 mysql_select_db($dbname)\r
66         or die('Failed to select database: ' . mysql_error());\r
67 \r
68 if ($clear_chirpy_tables) {\r
69         log_event('Clearing Chirpy!’s tables …');\r
70         $tables = array();\r
71         $tables[] = 'accounts';\r
72         $tables[] = 'events';\r
73         $tables[] = 'event_metadata';\r
74         $tables[] = 'news';\r
75         $tables[] = 'quotes';\r
76         $tables[] = 'quote_tag';\r
77         $tables[] = 'sessions';\r
78         $tables[] = 'tags';\r
79         $tables[] = 'vars';\r
80         foreach ($tables as $table)\r
81                 clear_table($chirpy_table_prefix . $table);\r
82         log_event('Tables cleared', true);\r
83 }\r
84 \r
85 log_event('Importing user information …');\r
86 $users_result = mysql_query('SELECT * FROM `' . $rashusers . '`')\r
87         or die('Error retrieving user information: ' . mysql_error());\r
88 $count_users = 0;\r
89 while ($row = mysql_fetch_array($users_result)) {\r
90         $count_users++;\r
91         mysql_query('INSERT INTO `' . $chirpy_table_prefix . 'accounts`'\r
92                 . ' (`username`, `password`, `level`)'\r
93                 . ' VALUES ("' . $row['user'] . '", "' . $row['password'] . '", '\r
94                 . convert_level($row['level']) . ')')\r
95                         or die('Error importing user information: ' . mysql_error());\r
96 }\r
97 log_event('Users imported: ' . $count_users, true);\r
98 mysqL_free_result($users_result);\r
99 \r
100 log_event('Importing news items …');\r
101 $news_result = mysql_query('SELECT * FROM `' . $newstable . '`')\r
102         or die('Error retrieving news: ' . mysql_error());\r
103 $count_news = 0;\r
104 while ($row = mysql_fetch_array($news_result)) {\r
105         $count_news++;\r
106         $date = date_to_timestamp($row['date']);\r
107         if ($date <= 0)\r
108                 die('Unable to convert ‘' + $row['date'] + '’ into a UNIX timestamp');\r
109         mysql_query('INSERT INTO `' . $chirpy_table_prefix . 'news`'\r
110                 . ' (`body`, `date`)'\r
111                 . ' VALUES ("' . addslashes(decode_html($row['news']))\r
112                 . '", FROM_UNIXTIME(' . $date . '))')\r
113                         or die('Error importing news item: ' . mysql_error());\r
114 }\r
115 log_event('News items imported: ' . $count_news, true);\r
116 mysqL_free_result($news_result);\r
117 \r
118 log_event('Importing quotes …');\r
119 $quotes_result = mysql_query('SELECT * FROM `' . $quotetable . '`')\r
120         or die('Error retrieving quotes: ' . mysql_error());\r
121 $count_quotes = 0;\r
122 while ($row = mysql_fetch_array($quotes_result)) {\r
123         $count_quotes++;\r
124         $rating = $row['rating'];\r
125         // We use abs($rating) as the number of votes here, since RQMS doesn't\r
126         // seem to keep it anywhere.\r
127         $votes = abs($rating);\r
128         $score = (($votes + $rating) / 2 + 1) / (($votes - $rating) / 2 + 1);\r
129         mysql_query('INSERT INTO `' . $chirpy_table_prefix . 'quotes` ('\r
130                 . ($clear_chirpy_tables ? '`id`, ' : '')\r
131                 . '`body`, `rating`, `votes`, `submitted`, `approved`, `flagged`,'\r
132                 . ' `score`) VALUES ('\r
133                 . ($clear_chirpy_tables ? $row['id'] . ', ' : '')\r
134                 . '"' . addslashes(decode_html($row['quote'])) . '"'\r
135                 . ', ' . $rating\r
136                 . ', ' . $votes\r
137                 . ', FROM_UNIXTIME(' . $row['date'] . ')'\r
138                 . ', ' . ($row['approve'] ? 1 : 0)\r
139                 . ', ' . ($row['check'] ? 0 : 1)\r
140                 . ', ' . $score . ')')\r
141                         or die('Error importing quote: ' . mysql_error());\r
142 }\r
143 log_event('Quotes imported: ' . $count_quotes, true);\r
144 mysqL_free_result($quotes_result);\r
145 \r
146 log_event('Importing unverified quotes …');\r
147 $unverified_quotes_result = mysql_query('SELECT * FROM `' . $subtable . '`')\r
148         or die('Error retrieving unverified quotes: ' . mysql_error());\r
149 $count_unverified_quotes = 0;\r
150 while ($row = mysql_fetch_array($unverified_quotes_result)) {\r
151         $count_unverified_quotes++;\r
152         mysql_query('INSERT INTO `' . $chirpy_table_prefix . 'quotes`'\r
153                 . ' (`body`, `submitted`)'\r
154                 . ' VALUES ("' . decode_html($row['quote'])\r
155                 . '", FROM_UNIXTIME(' . time() . '))')\r
156                         or die('Error importing unverified quote: ' . mysql_error());\r
157 }\r
158 log_event('Unverified quotes imported: ' . $count_unverified_quotes, true);\r
159 mysqL_free_result($unverified_quotes_result);\r
160 \r
161 log_event('Closing database connection …', true);\r
162 mysql_close();\r
163 \r
164 log_event('Import finished!');\r
165 \r
166 function clear_table ($name) {\r
167         mysql_query('TRUNCATE TABLE `' . $name . '`')\r
168                 or die('Error clearing table ‘' . $name . '’: ' . mysql_error());\r
169         mysql_query('ALTER TABLE `' . $name . '` AUTO_INCREMENT = 1')\r
170                 or die('Error resetting auto-increment index for table ‘' . $name\r
171                         . '’: ' . mysql_error());\r
172 }\r
173 \r
174 function convert_level ($level) {\r
175         return ($level && $level >= 1 && $level <= 3 ? (4 - $level) * 3 : 0);\r
176 }\r
177 \r
178 function decode_html ($text) {\r
179         return html_entity_decode(\r
180                 preg_replace('|\s*<\s*br\s*/?\s*>\s*|', "\n", $text));\r
181 }\r
182 \r
183 function date_to_timestamp ($date) {\r
184         global $timezone;\r
185         $date .= ' 00:00 ' . $timezone;\r
186         return strtotime($date);\r
187 }\r
188 \r
189 function log_event ($text, $end_segment) {\r
190         echo $text . "\r\n";\r
191         if ($end_segment) echo "\r\n";\r
192 }\r
193 \r
194 ###############################################################################\r
195 ?>