OSDN Git Service

4d4e9521a06d1816b1135fbf1fa0698dc3b8a24c
[nucleus-jp/nucleus-jp-ancient.git] / nucleus / upgrades / upgrade.functions.php
1 <?php
2
3         /*
4          * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
5          * Copyright (C) 2002-2009 The Nucleus Group
6          *
7          * This program is free software; you can redistribute it and/or
8          * modify it under the terms of the GNU General Public License
9          * as published by the Free Software Foundation; either version 2
10          * of the License, or (at your option) any later version.
11          * (see nucleus/documentation/index.html#license for more info)
12          */
13         /**
14          * Some functions common to all upgrade scripts
15          *
16          * @license http://nucleuscms.org/license.txt GNU General Public License
17          * @copyright Copyright (C) 2002-2009 The Nucleus Group
18          * @version $Id$
19          * $NucleusJP: upgrade.functions.php,v 1.10 2007/04/26 06:20:19 kimitake Exp $
20          */
21
22         include('../../config.php');
23
24         // sql_table function did not exists in nucleus <= 2.0
25         if (!function_exists('sql_table'))
26         {
27                 function sql_table($name) {
28                         return 'nucleus_' . $name;
29                 }
30         }
31
32         //intGetVar did not exist in very early versions
33         if (!function_exists('intGetVar')) {
34                 function intGetVar($name) {
35                         if (defined($_GET)) {
36                                 return intval($_GET[$name]);
37                         } else {
38                                 global $HTTP_GET_VARS;
39                                 return intval($HTTP_GET_VARS[$name]);
40                         }
41                 }
42         }
43
44         function upgrade_checkinstall($version) {
45                 $installed = 0;
46
47                 switch($version) {
48                         case '95':
49                                 $query = 'SELECT bconvertbreaks FROM '.sql_table('blog').' LIMIT 1';
50                                 $minrows = -1;
51                                 break;
52                         case '96':
53                                 $query = 'SELECT cip FROM '.sql_table('comment').' LIMIT 1';
54                                 $minrows = -1;
55                                 break;
56                         case '10':
57                                 $query = 'SELECT mcookiekey FROM '.sql_table('member').' LIMIT 1';
58                                 $minrows = -1;
59                                 break;
60                         case '11':
61                                 $query = 'SELECT bnotifytype FROM '.sql_table('blog').' LIMIT 1';
62                                 $minrows = -1;
63                                 break;
64                         case '15':
65                                 $query = 'SELECT * FROM '.sql_table('plugin_option').' LIMIT 1';
66                                 $minrows = -1;
67                                 break;
68                         case '20':
69                                 $query = 'SELECT sdincpref FROM '.sql_table('skin_desc').' LIMIT 1';
70                                 $minrows = -1;
71                                 break;
72                         // dev only (v2.2)
73                         case '22':
74                                 $query = 'SELECT oid FROM '.sql_table('plugin_option_desc').' LIMIT 1';
75                                 $minrows = -1;
76                                 break;
77                         // v2.5 beta
78                         case '24':
79                                 $query = 'SELECT bincludesearch FROM ' . sql_table('blog') . ' LIMIT 1';
80                                 $minrows = -1;
81                                 break;
82                         case '25':
83                                 $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 250 LIMIT 1';
84                                 $minrows = 1;
85                                 break;
86                         case '30':
87                                 $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 300 LIMIT 1';
88                                 $minrows = 1;
89                                 break;
90                         case '31':
91                                 $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 310 LIMIT 1';
92                                 $minrows = 1;
93                                 break;
94                         case '32':
95                                 $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 320 LIMIT 1';
96                                 $minrows = 1;
97                                 break;
98                         case '33':
99                                 $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 330 LIMIT 1';
100                                 $minrows = 1;
101                                 break;
102                         case '331':
103                                 $query = 'SELECT * FROM '.sql_table('config').' WHERE name=\'DatabaseVersion\' and value >= 331 LIMIT 1';
104                                 $minrows = 1;
105                                 break;
106                 }
107
108                 $res = mysql_query($query);
109                 $installed = ($res != 0) && (mysql_num_rows($res) >= $minrows);
110
111                 return $installed;
112         }
113
114
115         /** this function gets the nucleus version, even if the getNucleusVersion
116          * function does not exist yet
117          * return 96 for all versions < 100
118          */
119         function upgrade_getNucleusVersion() {
120                 if (!function_exists('getNucleusVersion')) return 96;
121                 return getNucleusVersion();
122         }
123
124         function upgrade_showLogin($type) {
125                 upgrade_head();
126         ?>
127                 <h1>まずはログインして下さい</h1>
128                 <p>下記の情報を入力して下さい:</p>
129
130                 <form method="post" action="<?php echo $type?>">
131
132                         <ul>
133                                 <li>名前: <input name="login" /></li>
134                                 <li>パスワード <input name="password" type="password" /></li>
135                         </ul>
136
137                         <p>
138                                 <input name="action" value="login" type="hidden" />
139                                 <input type="submit" value="ログイン" />
140                         </p>
141
142                 </form>
143         <?php           upgrade_foot();
144                 exit;
145         }
146
147         function upgrade_head() {
148         ?>
149                         <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
150                         <html xmlns="http://www.w3.org/1999/xhtml">
151                         <head>
152                                 <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
153                                 <title>Nucleus アップグレード</title>
154 <?php if (file_exists("../styles/manual.css")) { ?>
155                                 <link rel="stylesheet" href="../styles/manual.css" type="text/css" />
156 <?php }else{ ?>
157                                 <style type="text/css"><!--
158                                         .warning {
159                                                 color: red;
160                                         }
161                                         .ok {
162                                                 color: green;
163                                         }
164                                 --></style>
165 <?php } ?>
166                         </head>
167                         <body>
168         <?php   }
169
170         function upgrade_foot() {
171         ?>
172                         </body>
173                         </html>
174         <?php   }
175
176         function upgrade_error($msg) {
177                 upgrade_head();
178                 ?>
179                 <h1>エラー!</h1>
180
181                 <p>メッセージは以下の通り:</p>
182
183                 <blockquote><div>
184                 <?php echo $msg?>
185                 </div></blockquote>
186
187                 <p><a href="index.php" onclick="history.back();">戻る</a></p>
188                 <?php
189                 upgrade_foot();
190                 exit;
191         }
192
193
194         function upgrade_start() {
195                 global $upgrade_failures;
196                 $upgrade_failures = 0;
197
198                 upgrade_head();
199                 ?>
200                 <h1>アップグレードの実行</h1>
201                 <ul>
202                 <?php   }
203
204         function upgrade_end($msg = "") {
205                 global $upgrade_failures;
206                 if ($upgrade_failures > 0)
207                         $msg = "いくつかのデータベース操作に失敗しました。もし以前にこのアップグレードスクリプトを実行していたのであれば、問題ないと思われます。";
208
209                 ?>
210                 </ul>
211
212                 <h1>アップグレード完了!</h1>
213
214                 <p><?php echo $msg?></p>
215
216                 <p><a href="index.php">アップグレード最初のページ</a>にもどる</p>
217
218                 <?php
219                 upgrade_foot();
220                 exit;
221         }
222
223         /**
224           * Tries to execute a query, gives a message when failed
225           *
226           * @param friendly name
227           * @param query
228           */
229         function upgrade_query($friendly, $query) {
230                 global $upgrade_failures;
231
232                 echo "<li>$friendly ... ";
233                 $res = mysql_query($query);
234                 if (!$res) {
235                         echo "<span style='color:red'>失敗</span>\n";
236                         echo "<blockquote>失敗の理由: " . mysql_error() . " </blockquote>";
237                         $upgrade_failures++;
238                 } else {
239                         echo "<span style='color:green'>成功!</span><br />\n";
240                 }
241                 echo "</li>";
242                 return $res;
243         }
244
245         /**
246           * Tries to update database version, gives a message when failed
247           *
248           * @param $version
249           *     Schema version the database has been upgraded to
250           */
251         function update_version($version) {
252                 global $upgrade_failures;
253                 $message='Updating DatabaseVersion in config table to '.$version;
254                 if(0==$upgrade_failures){
255                         $query = 'UPDATE ' . sql_table('config') . ' set value=\''.$version.'\' where name=\'DatabaseVersion\'';
256                         upgrade_query($message, $query);
257                 }else
258                         echo '<li>'.$message.' ... <span class="warning">NOT EXECUTED</span>\n<blockquote>Errors occurred during upgrade process.</blockquote>';
259         }
260
261         /**
262          * @param $table
263          *              table to check (without prefix)
264          * @param $aColumns
265          *              array of column names included
266          */
267         function upgrade_checkIfIndexExists($table, $aColumns) {
268                 // get info for indices from database
269
270                 $aIndices = array();
271                 $query = 'show index from ' . sql_table($table);
272                 $res = mysql_query($query);
273                 while ($o = mysql_fetch_object($res)) {
274                         if (!$aIndices[$o->Key_name]) {
275                                 $aIndices[$o->Key_name] = array();
276                         }
277                         array_push($aIndices[$o->Key_name], $o->Column_name);
278                 }
279
280                 // compare each index with parameter
281                 foreach ($aIndices as $keyName => $aIndexColumns) {
282                         $aDiff = array_diff($aIndexColumns, $aColumns);
283                         if (count($aDiff) == 0) return 1;
284                 }
285
286                 return 0;
287
288         }
289
290         /**
291           * Checks to see if a given table exists
292           *
293           * @param $table
294           *     Name of table to check for existance of
295           *     Uses sql_table internally
296           * @return true if table exists, false otherwise.
297           */
298         function upgrade_checkIfTableExists($table){
299                 $query = 'SHOW TABLES LIKE \''.sql_table($table).'\'';
300                 $res = mysql_query($query);
301                 return ($res != 0) && (mysql_num_rows($res) == 1);
302         }
303
304         /**
305           * Checks to see if a given configuration value exists
306           *
307           * @param $value
308           *     Config value to check for existance of.
309           *     Paramater must be MySQL escaped
310           * @return true if configuration value exists, false otherwise.
311           */
312         function upgrade_checkIfCVExists($value){
313                 $query = 'SELECT name from '.sql_table('config').' WHERE name = \''.$value.'\'';
314                 $res = mysql_query($query);
315                 return ($res != 0) && (mysql_num_rows($res) == 1);
316         }
317
318         /**
319           * Checks to see if a given column exists
320           *
321           * @param $table
322           *     Name of table to check for column in
323           *     Uses sql_table internally
324           * @param $col
325           *     Name of column to check for existance of
326           * @return true if column exists, false otherwise.
327           */
328         function upgrade_checkIfColumnExists($table, $col){
329                 $query = 'DESC `'.sql_table($table).'` `'.$col.'`';
330                 $res = mysql_query($query);
331                 return ($res != 0) && (mysql_num_rows($res) == 1);
332         }
333 ?>