root/trunk/blog/checkup/index.php @ 4563

Revision 4563, 49.2 KB (checked in by inureyes, 3 years ago)

#711

  • 데이터베이스 입출력 루틴을 컴포넌트로 분리함.
  • 새로운 DBMS 지원을 위해서는 해당 컴포넌트만을 재작성하면 됩니다.
  • 분리된 벡엔드를 지원하도록 setup의 확장이 필요함.
Line 
1<?php
2/// Copyright (c) 2004-2007, Needlworks / Tatter Network Foundation
3/// All rights reserved. Licensed under the GPL.
4/// See the GNU General Public License for more details. (/doc/LICENSE, /doc/COPYRIGHT)
5define('ROOT', '../..');
6require ROOT . '/lib/includeForBlog.php';
7require ROOT . '/lib/model/blog.skin.php';
8
9requireModel('common.setting');
10
11if (!file_exists(ROOT . '/cache/CHECKUP') || (file_get_contents(ROOT . '/cache/CHECKUP') != TEXTCUBE_VERSION)) {
12    if ($fp = fopen(ROOT . '/cache/CHECKUP', 'w')) {
13        fwrite($fp, TEXTCUBE_VERSION);
14        fclose($fp);
15        @chmod(ROOT . '/cache/CHECKUP', 0666);
16    }
17}
18
19function setBlogSettingForMigration($blogid, $name, $value, $mig = null) {
20    global $database;
21    $name = tc_escape_string($name);
22    $value = tc_escape_string($value);
23    if($mig == null)
24        return DBQuery::execute("REPLACE INTO {$database['prefix']}BlogSettingsMig VALUES('$blogid', '$name', '$value')");
25    else
26        return DBQuery::execute("REPLACE INTO {$database['prefix']}BlogSettings VALUES('$blogid', '$name', '$value')");
27}
28
29function getBlogSettingForMigration($blogid, $name, $default = null) {
30    global $database;
31    $value = DBQuery::queryCell("SELECT value
32        FROM {$database['prefix']}BlogSettingsMig
33        WHERE blogid = '$blogid'
34        AND name = '".tc_escape_string($name)."'");
35    return ($value === null) ? $default : $value;
36}
37
38?>
39<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
40<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko">
41<head>
42    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
43    <title><?php echo _text('텍스트큐브를 점검합니다.');?></title>
44    <style type="text/css" media="screen">
45    /*<![CDATA[*/
46        body
47        {
48            font                : 12px/1.5 Verdana, Gulim;
49            color               : #333;
50        }
51        h3
52        {
53            color               :#0099FF;
54            padding-bottom      :5px;
55        }
56    /*]]>*/
57    </style>
58</head>
59<body>
60    <h3><?php echo _text('텍스트큐브를 점검합니다.');?></h3>
61   
62    <p>
63        <ul>
64<?php
65$changed = false;
66if (!DBQuery::queryExistence("DESC {$database['prefix']}SkinSettings recentNoticeLength")) { // Since 1.0.1
67    $changed = true;
68    echo '<li>', _text('스킨 설정 테이블에 공지 길이 제한 필드를 추가합니다.'), ': ';
69    if (DBQuery::execute("ALTER TABLE {$database['prefix']}SkinSettings ADD recentNoticeLength INT DEFAULT 30 NOT NULL AFTER expandTrackback"))
70        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
71    else
72        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
73}
74if (DBQuery::queryExistence("DESC {$database['prefix']}Categories `order`")) { // Since 1.0.2
75    $changed = true;
76    echo '<li>', _text('분류 테이블의 우선순위 필드명을 변경합니다.'), ': ';
77    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Categories CHANGE `order` priority INT NOT NULL DEFAULT 0"))
78        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
79    else
80        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
81}
82if (DBQuery::queryExistence("DESC {$database['prefix']}Users `database`")) { // Since 1.0.2
83    $changed = true;
84    echo '<li>', _text('사용자 테이블의 미사용 필드를 삭제합니다.'), ': ';
85    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Users DROP server, DROP `database`"))
86        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
87    else
88        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
89}
90if (!DBQuery::queryExistence("DESC {$database['prefix']}RefererLogs url")) { // Since 1.0.2
91    $changed = true;
92    echo '<li>', _text('리퍼러 로그 테이블의 구조를 변경합니다.'), ': ';
93    if (DBQuery::execute("UPDATE {$database['prefix']}RefererLogs SET path = CONCAT('http://', host, path)") && DBQuery::execute("ALTER TABLE {$database['prefix']}RefererLogs CHANGE path url VARCHAR(255) NOT NULL") && DBQuery::execute("ALTER TABLE {$database['prefix']}RefererLogs CHANGE written referred INT NOT NULL"))
94        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
95    else
96        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
97}
98if (!doesExistTable($database['prefix'] . 'Filters')) { // Since 1.0.2
99    $changed = true;
100    echo '<li>', _text('필터와 관련된 구조를 변경합니다.'), ': ';
101    $query = "
102        CREATE TABLE {$database['prefix']}Filters (
103          id int(11) NOT NULL auto_increment,
104          owner int(11) NOT NULL default '0',
105          type enum('content','ip','name','url') NOT NULL default 'content',
106          pattern varchar(255) NOT NULL default '',
107          PRIMARY KEY (id),
108          UNIQUE KEY owner (owner, type, pattern)
109        ) TYPE=MyISAM
110    ";
111    if (DBQuery::execute($query . ' DEFAULT CHARSET=utf8') || DBQuery::execute($query)) {
112        if (DBQuery::execute("INSERT INTO {$database['prefix']}Filters(owner, type, pattern) SELECT owner, 'content', word FROM {$database['prefix']}ContentFilters"))
113            DBQuery::execute("DROP TABLE {$database['prefix']}ContentFilters");
114        if (DBQuery::execute("INSERT INTO {$database['prefix']}Filters(owner, type, pattern) SELECT owner, 'name', name FROM {$database['prefix']}GuestFilters"))
115            DBQuery::execute("DROP TABLE {$database['prefix']}GuestFilters");
116        if (DBQuery::execute("INSERT INTO {$database['prefix']}Filters(owner, type, pattern) SELECT owner, 'ip', address FROM {$database['prefix']}HostFilters"))
117            DBQuery::execute("DROP TABLE {$database['prefix']}HostFilters");
118        if (DBQuery::execute("INSERT INTO {$database['prefix']}Filters(owner, type, pattern) SELECT owner, 'url', url FROM {$database['prefix']}URLFilters"))
119            DBQuery::execute("DROP TABLE {$database['prefix']}URLFilters");
120        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
121    } else {
122        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
123    }
124}
125if (doesExistTable($database['prefix'] . 'FeedOwners')) { // Since 1.0.2
126    $changed = true;
127    echo '<li>', _text('리더와 관련된 구조를 변경합니다.'), ': ';
128    if (DBQuery::execute("DROP TABLE {$database['prefix']}FeedOwners"))
129        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
130    else
131        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
132}
133if (doesExistTable($database['prefix'] . 'MonthlyStatistics')) { // Since 1.0.2
134    $changed = true;
135    echo '<li>', _text('통계와 관련된 구조를 변경합니다.'), ': ';
136    if (DBQuery::execute("DROP TABLE {$database['prefix']}MonthlyStatistics"))
137        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
138    else
139        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
140}
141if (DBQuery::queryExistence("SELECT * FROM {$database['prefix']}Users WHERE name = ''")) { // Since 1.0.2
142    $changed = true;
143    echo '<li>', _text('사용자 이름 누락 정보를 보완합니다.'), ': ';
144    if (DBQuery::execute("UPDATE {$database['prefix']}Users SET name = IF(LEFT(loginid, POSITION('@' IN loginid) - 1) = '', loginid, LEFT(loginid, POSITION('@' IN loginid) - 1)) WHERE name = ''"))
145        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
146    else
147        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
148}
149if (DBQuery::queryCell("DESC {$database['prefix']}Entries owner", 'Key') != 'PRI'
150    && DBQuery::queryCell("DESC {$database['prefix']}Entries blogid", 'Key') != 'PRI') { // Since 1.0.2
151    $changed = true;
152    echo '<li>', _text('엔트리 테이블의 인덱스를 수정합니다.'), ': ';
153    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Entries DROP PRIMARY KEY, ADD PRIMARY KEY(owner, id, draft)"))
154        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
155    else
156        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
157}
158if (DBQuery::queryCell("DESC {$database['prefix']}TagRelations owner", 'Key') != 'PRI'
159    && DBQuery::queryCell("DESC {$database['prefix']}TagRelations blogid", 'Key') != 'PRI') { // Since 1.0.2
160    $changed = true;
161    echo '<li>', _text('태그관계 테이블의 인덱스를 수정합니다.'), ': ';
162    if (DBQuery::execute("ALTER TABLE {$database['prefix']}TagRelations DROP PRIMARY KEY, ADD PRIMARY KEY(owner, tag, entry)"))
163        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
164    else
165        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
166}
167if (DBQuery::queryCell("DESC {$database['prefix']}Trackbacks owner", 'Key') != 'MUL'
168    && DBQuery::queryCell("DESC {$database['prefix']}Trackbacks blogid", 'Key') != 'MUL') { // Since 1.0.2
169    $changed = true;
170    echo '<li>', _text('걸린글 테이블의 인덱스를 수정합니다.'), ': ';
171    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Trackbacks DROP INDEX entry, ADD UNIQUE owner (owner, entry, url)"))
172        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
173    else
174        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
175}
176if (DBQuery::queryCell("DESC {$database['prefix']}Comments parent", 'Key') != 'MUL') { // Since 1.0.3
177    $changed = true;
178    echo '<li>', _text('댓글 테이블에 인덱스를 추가합니다.'), ': ';
179    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Comments ADD INDEX parent (parent)"))
180        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
181    else
182        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
183}
184if (!Validator::getBool(DBQuery::queryCell("DESC {$database['prefix']}Sessions data", 'Null'))) { // Since 1.0.3
185    $changed = true;
186    echo '<li>', _text('세션 테이블의 필드 속성을 변경합니다.'), ': ';
187    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Sessions CHANGE data data TEXT DEFAULT NULL"))
188        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
189    else
190        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
191}
192if (DBQuery::queryCell("DESC {$database['prefix']}Categories name", 'Type') == 'varchar(32)') { // Since 1.0.3
193    $changed = true;
194    echo '<li>', _text('분류 테이블의 이름 필드 속성을 변경합니다.'), ': ';
195    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Categories CHANGE name name VARCHAR(127) NOT NULL"))
196        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
197    else
198        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
199}
200if (DBQuery::queryCell("DESC {$database['prefix']}Categories label", 'Type') == 'varchar(80)') { // Since 1.0.3
201    $changed = true;
202    echo '<li>', _text('분류 테이블의 라벨 필드 속성을 변경합니다.'), ': ';
203    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Categories CHANGE label label VARCHAR(255) NOT NULL"))
204        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
205    else
206        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
207}
208if (DBQuery::queryCell("DESC {$database['prefix']}BlogSettings timezone", 'Type') != 'varchar(32)'
209    && !DBQuery::queryExistence("DESC {$database['prefix']}BlogSettings value")) { // Since 1.0.5
210    $changed = true;
211    echo '<li>', _text('블로그 설정 테이블의 시간대 필드 속성을 변경합니다.'), ': ';
212    if (DBQuery::execute("ALTER TABLE {$database['prefix']}BlogSettings CHANGE timezone timezone VARCHAR(32) NOT NULL DEFAULT 'GMT'")) {
213        DBQuery::execute("UPDATE {$database['prefix']}BlogSettings SET timezone = 'GMT' WHERE timezone <> '32400' AND timezone <> '-18000'");
214        DBQuery::execute("UPDATE {$database['prefix']}BlogSettings SET timezone = 'Asia/Seoul' WHERE timezone = '32400'");
215        DBQuery::execute("UPDATE {$database['prefix']}BlogSettings SET timezone = 'America/New_York' WHERE timezone = '-18000'");
216        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
217    } else {
218        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
219    }
220}
221if (DBQuery::queryCell("DESC {$database['prefix']}BlogSettings language", 'Type') != 'varchar(5)'
222    && !DBQuery::queryExistence("DESC {$database['prefix']}BlogSettings value")) { // Since 1.0.6
223    $changed = true;
224    echo '<li>', _text('블로그 설정 테이블의 언어 필드 속성을 변경합니다.'), ': ';
225    if (DBQuery::execute("ALTER TABLE {$database['prefix']}BlogSettings CHANGE language language VARCHAR(5) NOT NULL DEFAULT 'en'"))
226        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
227    else
228        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
229}
230if (!DBQuery::queryExistence("DESC {$database['prefix']}SkinSettings archivesOnPage")) { // Since 1.1
231    $changed = true;
232    echo '<li>', _text('스킨 설정 테이블에 아카이브 출력 설정 필드를 추가합니다.'), ': ';
233    if (DBQuery::execute("ALTER TABLE {$database['prefix']}SkinSettings ADD archivesOnPage INT DEFAULT 5 NOT NULL AFTER commentsOnGuestbook"))
234        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
235    else
236        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
237}
238if (!DBQuery::queryExistence("DESC {$database['prefix']}BlogSettings publishEolinSyncOnRSS")
239    && !DBQuery::queryExistence("DESC {$database['prefix']}BlogSettings value")) {
240    $changed = true;
241    echo '<li>', _text('블로그 설정 테이블에 RSS 공개 정도 설정 필드를 추가합니다.'), ': ';
242    if (DBQuery::execute("ALTER TABLE {$database['prefix']}BlogSettings ADD publishEolinSyncOnRSS INT(1) DEFAULT 1 NOT NULL AFTER publishWholeOnRSS"))
243        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
244    else
245        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
246}
247if (!DBQuery::queryExistence("DESC {$database['prefix']}Trackbacks isFiltered")) {
248    $changed = true;
249    echo '<li>', _text('걸린글 테이블에 광고 및 스팸 분류를 위한 휴지통 필드를 추가합니다.'), ': ';
250    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Trackbacks ADD isFiltered INT(11) DEFAULT 0 NOT NULL AFTER written"))
251        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
252    else
253        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
254}
255if (!DBQuery::queryExistence("DESC {$database['prefix']}Comments isFiltered")) {
256    $changed = true;
257    echo '<li>', _text('덧글및 방명록 테이블에 광고 및 스팸 분류를 위한 휴지통 필드를 추가합니다.'), ': ';
258    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Comments ADD isFiltered INT(11) DEFAULT 0 NOT NULL AFTER written"))
259        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
260    else
261        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
262}
263if (DBQuery::queryExistence("DESC {$database['prefix']}Trackbacks sender")) {
264    $changed = true;
265    echo '<li>', _text('걸린글 테이블의 미사용 필드를 삭제합니다.'), ': ';
266    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Trackbacks DROP sender"))
267        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
268    else
269        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
270}
271if (!DBQuery::queryExistence("DESC {$database['prefix']}Categories visibility")) {
272    $changed = true;
273    echo '<li>', _text('카테고리 테이블에 비공개 카테고리 설정을 위한 필드를 추가합니다.'), ': ';
274    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Categories ADD visibility TINYINT(4) DEFAULT 2 NOT NULL AFTER label"))
275        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
276    else
277        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
278}
279if (!DBQuery::queryExistence("DESC {$database['prefix']}Categories bodyId")) {
280    $changed = true;
281    echo '<li>', _text('카테고리 테이블에 Body Id 설정을 위한 필드를 추가합니다.'), ': ';
282    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Categories ADD bodyId varchar(20) DEFAULT null AFTER visibility"))
283        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
284    else
285        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
286}
287if (!doesExistTable($database['prefix'] . 'ServiceSettings')) {
288    $changed = true;
289    echo '<li>', _text('서비스 설정을 위한 테이블을 추가합니다.'), ': ';
290    $query = "
291        CREATE TABLE {$database['prefix']}ServiceSettings (
292            name varchar(32) NOT NULL default '',
293            value varchar(255) NOT NULL default '',
294            PRIMARY KEY (name)
295        ) TYPE=MyISAM
296    ";
297    if (DBQuery::execute($query . ' DEFAULT CHARSET=utf8') || DBQuery::execute($query))
298        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
299    else
300        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
301}
302if (!doesExistTable($database['prefix'] . 'UserSettings')) { // Since 1.0.7
303    $changed = true;
304    echo '<li>', _t('사용자 설정값과 관련된 구조를 변경합니다'), ': ';
305    $query = "
306        CREATE TABLE {$database['prefix']}UserSettings (
307          user int(11) NOT NULL default '0',
308          name varchar(32) NOT NULL default '',
309          value text NOT NULL default '',
310          PRIMARY KEY (user,name)
311        ) TYPE=MyISAM
312    ";
313    if (DBQuery::execute($query . ' DEFAULT CHARSET=utf8') || DBQuery::execute($query)) {
314        DBQuery::execute("INSERT INTO {$database['prefix']}UserSettings(user, name, value) SELECT owner, 'rowsPerPage', rowsPerPage FROM {$database['prefix']}Personalization");
315        DBQuery::execute("INSERT INTO {$database['prefix']}UserSettings(user, name, value) SELECT owner, 'readerPannelVisibility', readerPannelVisibility FROM {$database['prefix']}Personalization");
316        DBQuery::execute("INSERT INTO {$database['prefix']}UserSettings(user, name, value) SELECT owner, 'readerPannelHeight', readerPannelHeight FROM {$database['prefix']}Personalization");
317        DBQuery::execute("INSERT INTO {$database['prefix']}UserSettings(user, name, value) SELECT owner, 'lastVisitNotifiedPage', lastVisitNotifiedPage FROM {$database['prefix']}Personalization");
318        DBQuery::execute("DROP TABLE {$database['prefix']}Personalization");
319        echo '<span style="color:#33CC33;">', _t('성공'), '</span></li>';
320    } else {
321        echo '<span style="color:#FF0066;">', _t('실패'), '</span></li>';
322    }
323}
324
325if (!DBQuery::queryExistence("SELECT value FROM {$database['prefix']}ServiceSettings WHERE name = 'newlineStyle' AND value >= 1.1")) { // Since 1.0.7
326    $query = new TableQuery($database['prefix'] . 'Entries');
327    if($query->doesExist()) {
328        $changed = true;
329        echo '<li>', _t('[HTML][/HTML] 블럭을 제거합니다'), ': ';
330        if ($entries = $query->getAll('owner, id, draft')) {
331            foreach($entries as $entry) {
332                $query->setQualifier('owner', $entry['owner']);
333                $query->setQualifier('id', $entry['id']);
334                $query->setQualifier('draft', $entry['draft']);
335                $originalEntry = $query->getCell('content');
336                $newContent = tc_escape_string(nl2brWithHTML($originalEntry));
337                DBQuery::execute("UPDATE {$database['prefix']}Entries SET content = '$newContent' WHERE owner = {$entry['owner']} AND id = {$entry['id']} AND draft = {$entry['draft']}");
338                $query->resetQualifiers();
339            }
340            echo '<span style="color:#33CC33;">', _t('성공'), '</span></li>';
341            unset($entries);
342        } else {
343            echo '<span style="color:#FF0066;">', _t('실패'), '</span></li>';
344        }
345    }
346    setServiceSetting('newlineStyle', '1.1');
347}
348
349if (!DBQuery::queryExistence("DESC {$database['prefix']}BlogSettings blogLanguage")
350    && !DBQuery::queryExistence("DESC {$database['prefix']}BlogSettings value")) {
351    $changed = true;
352    echo '<li>', _text('설정 테이블에 블로그 언어 설정을 위한 필드를 추가합니다.'), ': ';
353    if (DBQuery::execute("ALTER TABLE {$database['prefix']}BlogSettings ADD blogLanguage varchar(5) not null default 'en' after language")) {
354        DBQuery::execute("UPDATE {$database['prefix']}BlogSettings SET blogLanguage = language");
355        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
356    } else
357        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
358}
359
360if (DBQuery::queryExistence("DESC {$database['prefix']}SkinSettings NoCommentMessage")) {
361    $changed = true;
362    echo '<li>', _text('스킨 관련 테이블에 댓글 및 글걸기 메세지 설정을 위한 필드를 삭제합니다.'), ': ';
363    if(DBQuery::execute("ALTER TABLE {$database['prefix']}SkinSettings DROP NoCommentMessage") &&
364    DBQuery::execute("ALTER TABLE {$database['prefix']}SkinSettings DROP SingleCommentMessage") &&
365    DBQuery::execute("ALTER TABLE {$database['prefix']}SkinSettings DROP MultipleCommentMessage") &&
366    DBQuery::execute("ALTER TABLE {$database['prefix']}SkinSettings DROP NoTrackbackMessage") &&
367    DBQuery::execute("ALTER TABLE {$database['prefix']}SkinSettings DROP SingleTrackbackMessage") &&
368    DBQuery::execute("ALTER TABLE {$database['prefix']}SkinSettings DROP MultipleTrackbackMessage"))
369        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
370    else
371        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
372}
373
374if (DBQuery::queryCell("DESC {$database['prefix']}Tags name" , 'Key') != 'UNI') {
375    $changed = true;
376    echo '<li>', _text('태그 테이블에 인덱스 키를 추가합니다.'), ': ';
377    requireComponent('Textcube.Data.Post');
378    Post::correctTagsAll();
379    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Tags ADD UNIQUE INDEX name (name)")) {
380        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
381    } else {
382        echo '<span style="color:#FF0066;">', _text('실패'), '</span>';
383        echo '<span style="color:#33CC33;">', _text('관리자 화면의 환경 설정에서 데이터 교정을 수행하시기 바랍니다.'), '</span></li>';
384    }
385}
386
387if (DBQuery::queryCell("DESC {$database['prefix']}UserSettings value", 'Type') != 'text') { // Since 1.1
388    $changed = true;
389    echo '<li>', _text('사용자 설정값 테이블의 필드 속성을 변경합니다.'), ': ';
390    if (DBQuery::execute("ALTER TABLE {$database['prefix']}UserSettings CHANGE value value text NOT NULL DEFAULT ''")) {
391        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
392    } else {
393        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
394    }
395}
396
397if (DBQuery::queryCell("DESC {$database['prefix']}Comments isFiltered", 'Type') != 'int(11)') {
398    $changed = true;
399    echo '<li>', _text('휴지통 테이블의 필드 속성을 변경합니다.'), ': ';
400    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Comments CHANGE isFiltered isFiltered int(11) NOT NULL DEFAULT 0")) {
401        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
402    } else {
403        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
404    }
405}
406
407if (DBQuery::queryCell("DESC {$database['prefix']}Trackbacks isFiltered", 'Type') != 'int(11)') {
408    $changed = true;
409    echo '<li>', _text('휴지통 테이블의 필드 속성을 변경합니다.'), ': ';
410    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Trackbacks CHANGE isFiltered isFiltered int(11) NOT NULL DEFAULT 0")) {
411        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
412    } else {
413        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
414    }
415}
416
417// Since 1.1.1
418$indexes = DBQuery::queryAll("Show index from {$database['prefix']}Entries");
419$idkey = FALSE;
420foreach($indexes as $index)
421    if($index['Column_name']=='id' && $index['Key_name']=='id') $idkey = TRUE;
422if ($idkey == FALSE) {
423    $changed = true;
424    echo '<li>', _text('본문 테이블에 태그 검색 향상을 위한 인덱스를 추가합니다.'), ': ';
425    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Entries ADD INDEX id (id)"))
426        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
427    else
428        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
429}
430
431if (DBQuery::queryCell("DESC {$database['prefix']}Comments isFiltered", 'Key') != 'MUL') {
432    $changed = true;
433    echo '<li>', _text('댓글 테이블에 필터 인덱스를 추가합니다.'), ': ';
434    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Comments ADD INDEX isFiltered (isFiltered)"))
435        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
436    else
437        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
438}
439
440if (DBQuery::queryCell("DESC {$database['prefix']}Trackbacks isFiltered", 'Key') != 'MUL') {
441    $changed = true;
442    echo '<li>', _text('글걸기 테이블에 필터 인덱스를 추가합니다.'), ': ';
443    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Trackbacks ADD INDEX isFiltered (isFiltered)"))
444        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
445    else
446        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
447}
448
449if (!DBQuery::queryExistence("DESC {$database['prefix']}SkinSettings showListOnTag")) {
450    $changed = true;
451    echo '<li>', _text('스킨 설정 테이블에 태그 출력시 목록 및 글 출력 설정을 위한 필드를 추가합니다.'), ': ';
452    if (DBQuery::execute("ALTER TABLE {$database['prefix']}SkinSettings ADD showListOnTag INT(1) DEFAULT 1 NOT NULL AFTER showListOnArchive"))
453        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
454    else
455        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
456}
457
458if (!DBQuery::queryExistence("DESC {$database['prefix']}SkinSettings showListOnSearch")) { // Since 1.1.1.1
459    $changed = true;
460    echo '<li>', _text('스킨 설정 테이블에 검색 결과 출력시 목록 및 글 출력 설정을 위한 필드를 추가합니다.'), ': ';
461    if (DBQuery::execute("ALTER TABLE {$database['prefix']}SkinSettings ADD showListOnSearch INT(1) DEFAULT 1 NOT NULL AFTER showListOnTag"))
462        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
463    else
464        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
465}
466
467if (DBQuery::queryCell("DESC {$database['prefix']}Categories owner", 'Key') != 'PRI'
468    && DBQuery::queryCell("DESC {$database['prefix']}Categories blogid", 'Key') != 'PRI') { // Since 1.1.2
469    $changed = true;
470    echo '<li>', _text('최상위 카테고리 이름 수정을 위하여 카테고리 테이블의 인덱스를 수정합니다.'), ': ';
471    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Categories DROP PRIMARY KEY, ADD PRIMARY KEY(owner, id)"))
472        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
473    else
474        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
475}
476
477if (DBQuery::queryCell("DESC {$database['prefix']}Categories id", 'Extra') == 'auto_increment') {
478    $changed = true;
479    echo '<li>', _text('최상위 카테고리 이름 수정을 위하여 카테고리 테이블의 자동 증가 설정을 제거합니다.'), ': ';
480    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Categories CHANGE id id int(11) NOT NULL"))
481        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
482    else
483        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
484}
485
486if (DBQuery::queryCell("DESC {$database['prefix']}Entries id", 'Extra') == 'auto_increment') {
487    $changed = true;
488    echo '<li>', _text('글번호의 교정을 위하여 본문 테이블의 자동 증가 설정을 제거합니다.'), ': ';
489    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Entries CHANGE id id int(11) NOT NULL"))
490        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
491    else
492        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
493}
494
495if (!DBQuery::queryExistence("DESC {$database['prefix']}Entries contentFormatter")) { // Since 1.5
496    $changed = true;
497    echo '<li>', _text('글을 쓸 때 사용할 편집기와 포매터를 선택하는 필드를 추가합니다.'), ': ';
498    $defaultformatter = 'ttml';
499    $defaulteditor = 'modern';
500    $result =
501        DBQuery::execute("ALTER TABLE {$database['prefix']}Entries ADD contentEditor VARCHAR(32) DEFAULT '' NOT NULL AFTER content, ADD contentFormatter VARCHAR(32) DEFAULT '' NOT NULL AFTER content") &&
502        DBQuery::execute("UPDATE {$database['prefix']}Entries SET contentEditor = '".tc_escape_string($defaulteditor)."', contentFormatter = '".tc_escape_string($defaultformatter)."'");
503    if ($result)
504        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
505    else
506        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
507}
508
509if (DBQuery::queryCell("select count(*) FROM {$database['prefix']}Entries WHERE contentFormatter = ''") != 0) {
510    $changed = true;
511    echo '<li>', _text('글 테이블의 편집기와 포매터 필드를 갱신합니다.'), ': ';
512    $defaultformatter = 'ttml';
513    $defaulteditor = 'modern';
514    $result = DBQuery::execute("UPDATE {$database['prefix']}Entries SET contentEditor = '".tc_escape_string($defaulteditor)."', contentFormatter = '".tc_escape_string($defaultformatter)."'");
515    if ($result)
516        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
517    else
518        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
519}
520
521if (!doesExistTable($database['prefix'] . 'Teamblog')) {
522    $changed = true;
523    echo '<li>', _text('팀블로그 기능을 위한 테이블을 추가합니다.'), ': ';
524    $query = "
525        CREATE TABLE {$database['prefix']}Teamblog (
526            blogid int(11) NOT NULL default 1,
527            userid int(11) NOT NULL default 1,
528            acl    int(11) NOT NULL default 0,
529            created int(11) NOT NULL default 0,
530            lastLogin int(11) NOT NULL default 0,
531            PRIMARY KEY (blogid,userid)
532        ) TYPE=MyISAM
533    ";
534    if (DBQuery::execute($query . ' DEFAULT CHARSET=utf8') || DBQuery::execute($query)) {
535        $query = new TableQuery($database['prefix'] . 'Users');
536        if($query->doesExist()) {
537            $changed = true;
538            if ($users = $query->getAll('userid, name, created')) {
539                foreach($users as $user) {
540                    DBQuery::execute("INSERT INTO `{$database['prefix']}Teamblog` (blogid,userid,acl,created,lastLogin) VALUES('".$user['userid']."', '".$user['userid']."','16','".$user['created']."', '0')");
541                }
542            }
543            unset($users);
544            echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
545        }
546    } else
547        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
548}
549
550if (!doesExistTable($database['prefix'] . 'XMLRPCPingSettings')) {
551    $changed = true;
552    echo '<li>', _text('XML-RPC ping 설정을 위한 테이블을 추가합니다.'), ': ';
553    $query = "
554        CREATE TABLE {$database['prefix']}XMLRPCPingSettings (
555            owner int(11) NOT NULL default 0,
556            url varchar(255) NOT NULL default '',
557            type varchar(32) NOT NULL default 'xmlrpc',
558            PRIMARY KEY (owner)
559        ) TYPE=MyISAM
560    ";
561    if (DBQuery::execute($query . ' DEFAULT CHARSET=utf8') || DBQuery::execute($query))
562        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
563    else
564        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
565}
566
567if (DBQuery::queryExistence("DESC {$database['prefix']}Teamblog enduser")) {
568    $changed = true;
569    echo '<li>', _text('팀블로그 테이블의 유저 출력 설정 필드를 삭제합니다.'), ': ';
570    if(DBQuery::execute("ALTER TABLE {$database['prefix']}Teamblog DROP logo") &&
571    DBQuery::execute("ALTER TABLE {$database['prefix']}Teamblog DROP enduser") &&
572    DBQuery::execute("ALTER TABLE {$database['prefix']}Teamblog DROP admin") &&
573    DBQuery::execute("ALTER TABLE {$database['prefix']}Teamblog DROP posting") &&
574    DBQuery::execute("ALTER TABLE {$database['prefix']}Teamblog DROP font_style") &&
575    DBQuery::execute("ALTER TABLE {$database['prefix']}Teamblog DROP font_color") &&
576    DBQuery::execute("ALTER TABLE {$database['prefix']}Teamblog DROP font_size") &&
577    DBQuery::execute("ALTER TABLE {$database['prefix']}Teamblog DROP font_bold") &&
578    DBQuery::execute("ALTER TABLE {$database['prefix']}Teamblog ADD acl int(11) not null AFTER userid"))
579        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
580    else
581        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
582}
583
584if (DBQuery::queryExistence("DESC {$database['prefix']}BlogSettings defaultDomain")) {
585    $changed = true;
586    echo '<li>', _text('블로그 설정 테이블과 사용자 설정 테이블의 구조를 변경합니다.'), ': ';
587    $query = "
588        CREATE TABLE {$database['prefix']}BlogSettingsMig (
589            blogid int(11) NOT NULL default 0,
590            name varchar(32) NOT NULL default '',
591            value text NOT NULL,
592            PRIMARY KEY (blogid,name)
593        ) TYPE=MyISAM
594    ";
595    if (DBQuery::execute($query . ' DEFAULT CHARSET=utf8') || DBQuery::execute($query)) {
596        $query = new TableQuery($database['prefix'] . 'BlogSettings');
597        if($query->doesExist()) {
598            $changed = true;
599            $defaultformatter = 'ttml';
600            $defaulteditor = 'modern';
601            if ($blogSettings = $query->getAll('owner, name, secondaryDomain, defaultDomain, url, title, description, logo, logoLabel, logoWidth, logoHeight, useSlogan, entriesOnPage, entriesOnList, entriesOnRSS, publishWholeOnRSS, publishEolinSyncOnRSS, allowWriteOnGuestbook, allowWriteDoubleCommentOnGuestbook, language, blogLanguage,timezone')) {
602                $fieldnames = array('owner', 'name', 'secondaryDomain', 'defaultDomain', 'url', 'title', 'description', 'logo', 'logoLabel', 'logoWidth', 'logoHeight', 'useSlogan', 'entriesOnPage', 'entriesOnList', 'entriesOnRSS', 'publishWholeOnRSS', 'publishEolinSyncOnRSS', 'allowWriteOnGuestbook', 'language', 'blogLanguage','timezone');
603                foreach($blogSettings as $blogSetting) {
604                    foreach($fieldnames as $fieldname) {
605                        setBlogSettingForMigration($blogSetting['owner'],$fieldname,$blogSetting[$fieldname]);
606                    }
607                    setBlogSettingForMigration($blogSetting['owner'],'defaultEditor',$defaulteditor);
608                    setBlogSettingForMigration($blogSetting['owner'],'defaultFormatter',$defaultformatter);
609                    setBlogSettingForMigration($blogSetting['owner'],'allowWriteDblCommentOnGuestbook',$blogSetting['allowWriteDoubleCommentOnGuestbook']);
610                }
611                $checked = true;
612                foreach($blogSettings as $blogSetting) {
613                    foreach($fieldnames as $fieldname) {
614                        if(getBlogSettingForMigration($blogSetting['owner'],$fieldname) != $blogSetting[$fieldname]) {$checked = false;break;}
615                    }
616                    if(getBlogSettingForMigration($blogSetting['owner'],'allowWriteDblCommentOnGuestbook') != $blogSetting['allowWriteDoubleCommentOnGuestbook']) {$checked = false;break;}
617                }
618                unset($blogSettings);
619                if($checked == false) {
620                    DBQuery::execute("DROP TABLE {$database['prefix']}BlogSettingsMig");
621                    echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
622                } else {
623                    // Change Table
624                    DBQuery::execute("DROP TABLE {$database['prefix']}BlogSettings");
625                    DBQuery::execute("RENAME TABLE {$database['prefix']}BlogSettingsMig TO {$database['prefix']}BlogSettings");
626                    // Migrate UserSettings
627                    $query = new TableQuery($database['prefix'] . 'UserSettings');
628                    if($query->doesExist()) {
629                        $oldUserSettings = $query->getAll('user, name, value');
630                        foreach($oldUserSettings as $oldUserSetting) {
631                            setBlogSettingForMigration($oldUserSetting['user'],$oldUserSetting['name'],$oldUserSetting['value'],true);
632                        }
633                        DBQuery::execute("DROP TABLE {$database['prefix']}UserSettings");
634                        $query = "
635                            CREATE TABLE {$database['prefix']}UserSettings (
636                            userid int(11) NOT NULL default 0,
637                            name varchar(32) NOT NULL default '',
638                            value text NOT NULL,
639                            PRIMARY KEY (userid,name)
640                        ) TYPE=MyISAM
641                        ";
642                        if (DBQuery::execute($query . ' DEFAULT CHARSET=utf8') || DBQuery::execute($query)) {
643                            echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
644                        } else echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
645                    } else echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
646                }
647            } else echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
648        }
649    } else echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
650}
651
652if (!DBQuery::queryExistence("DESC {$database['prefix']}Entries userid")) {
653    $changed = true;
654    echo '<li>', _text('본문 테이블에 작성자 정보를 위한 필드를 추가합니다.'), ': ';
655    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Entries ADD userid INT(11) DEFAULT 0 NOT NULL AFTER owner")) {
656        if($blogids = DBQuery::queryColumn("SELECT DISTINCT owner FROM {$database['prefix']}Entries")) {
657            foreach($blogids as $blogid) {
658                DBQuery::execute("UPDATE {$database['prefix']}Entries
659                    SET userid = '".$blogid['owner']."'
660                    WHERE owner = '".$blogid['owner']."'");
661            }
662            DBQuery::execute("DROP TABLE {$database['prefix']}TeamEntryRelations");
663            echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
664        } else {
665            echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
666        }
667    } else {
668        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
669    }
670}
671
672if (DBQuery::queryCell("DESC {$database['prefix']}Entries published", 'Key') != 'PRI') {
673    $changed = true;
674    echo '<li>', _text('본문 테이블의 인덱스를 수정합니다.'), ': ';
675    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Entries
676        DROP PRIMARY KEY,
677        DROP INDEX owner,
678        DROP INDEX id,
679        ADD PRIMARY KEY (owner,id,category,published),
680        ADD index visibility (visibility),
681        ADD index published (published),
682        ADD index userid (userid),
683        ADD index id (id, category, visibility),
684        ADD index owner (owner, published)"))
685        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
686    else
687        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
688}
689
690if (DBQuery::queryExistence("DESC {$database['prefix']}Teamblog teams")) {
691    $changed = true;
692    echo '<li>', _text('팀블로그 테이블의 필드 이름을 변경합니다.'), ': ';
693    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Teamblog CHANGE teams blogid int(11) NOT NULL DEFAULT 0"))
694        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
695    else
696        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
697}
698
699
700if (DBQuery::queryExistence("DESC {$database['prefix']}Teamblog profile")) {
701    $changed = true;
702    echo '<li>', _text('팀블로그 테이블의 사용자 이름 필드를 삭제합니다.'), ': ';
703    if(DBQuery::execute("ALTER TABLE {$database['prefix']}Teamblog DROP profile"))
704        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
705    else
706        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
707}
708
709if (DBQuery::queryExistence("DESC {$database['prefix']}SkinSettings owner")) {
710    $changed = true;
711    echo '<li>', _text('스킨 테이블의 필드 이름을 변경합니다.'), ': ';
712    if (DBQuery::execute("ALTER TABLE {$database['prefix']}SkinSettings CHANGE owner blogid int(11) NOT NULL DEFAULT 0"))
713        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
714    else
715        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
716}
717
718if (DBQuery::queryExistence("DESC {$database['prefix']}Entries owner")) {
719    $changed = true;
720    echo '<li>', _text('본문 테이블의 필드 이름을 변경합니다.'), ': ';
721    if (DBQuery::execute("ALTER TABLE {$database['prefix']}Entries CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
722       && DBQuery::execute("ALTER TABLE {$database['prefix']}Attachments CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
723       && DBQuery::execute("ALTER TABLE {$database['prefix']}BlogStatistics CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
724       && DBQuery::execute("ALTER TABLE {$database['prefix']}Categories CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
725       && DBQuery::execute("ALTER TABLE {$database['prefix']}Comments CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
726       && DBQuery::execute("ALTER TABLE {$database['prefix']}CommentsNotified CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
727       && DBQuery::execute("ALTER TABLE {$database['prefix']}CommentsNotifiedQueue CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
728       && DBQuery::execute("ALTER TABLE {$database['prefix']}DailyStatistics CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
729       && DBQuery::execute("ALTER TABLE {$database['prefix']}FeedGroupRelations CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
730       && DBQuery::execute("ALTER TABLE {$database['prefix']}FeedGroups CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
731       && DBQuery::execute("ALTER TABLE {$database['prefix']}FeedReads CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
732       && DBQuery::execute("ALTER TABLE {$database['prefix']}FeedSettings CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
733       && DBQuery::execute("ALTER TABLE {$database['prefix']}FeedStarred CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
734       && DBQuery::execute("ALTER TABLE {$database['prefix']}Filters CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
735       && DBQuery::execute("ALTER TABLE {$database['prefix']}Links CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
736       && DBQuery::execute("ALTER TABLE {$database['prefix']}Plugins CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
737       && DBQuery::execute("ALTER TABLE {$database['prefix']}RefererLogs CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
738       && DBQuery::execute("ALTER TABLE {$database['prefix']}RefererStatistics CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
739       && DBQuery::execute("ALTER TABLE {$database['prefix']}TagRelations CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
740       && DBQuery::execute("ALTER TABLE {$database['prefix']}Trackbacks CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
741       && DBQuery::execute("ALTER TABLE {$database['prefix']}TrackbackLogs CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
742       && DBQuery::execute("ALTER TABLE {$database['prefix']}XMLRPCPingSettings CHANGE owner blogid int(11) NOT NULL DEFAULT 0")
743    )
744        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
745    else
746        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
747}
748
749if (DBQuery::queryCell("DESC {$database['prefix']}Filters blogid", 'Key') != 'MUL') {
750    $changed = true;
751    echo '<li>', _text('테이블의 필드 인덱스를 변경합니다.'), ': ';
752    if (
753       DBQuery::execute("ALTER TABLE {$database['prefix']}Categories DROP INDEX owner, ADD INDEX blogid (blogid)")
754       && DBQuery::execute("ALTER TABLE {$database['prefix']}Comments DROP INDEX owner, ADD INDEX blogid (blogid)")
755       && DBQuery::execute("ALTER TABLE {$database['prefix']}CommentsNotified DROP INDEX owner, ADD INDEX blogid (blogid)")
756       && DBQuery::execute("ALTER TABLE {$database['prefix']}Entries DROP INDEX owner, ADD INDEX blogid (blogid, published)")
757       && DBQuery::execute("ALTER TABLE {$database['prefix']}Filters DROP INDEX owner, ADD INDEX blogid (blogid, type, pattern)")
758       && DBQuery::execute("ALTER TABLE {$database['prefix']}Links DROP INDEX owner, ADD INDEX blogid (blogid, url)")
759       && DBQuery::execute("ALTER TABLE {$database['prefix']}RefererLogs ADD INDEX blogid (blogid, referred)")
760       && DBQuery::execute("ALTER TABLE {$database['prefix']}TagRelations DROP INDEX owner, ADD INDEX blogid (blogid)")
761       && DBQuery::execute("ALTER TABLE {$database['prefix']}Trackbacks DROP INDEX owner, ADD INDEX blogid (blogid, entry, url)")
762    )
763        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
764    else
765        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
766}
767   
768   
769if (!doesExistTable($database['prefix'] . 'PageCacheLog')) {
770    $changed = true;
771    echo '<li>', _text('페이지 캐싱을 위한 테이블을 추가합니다.'), ': ';
772    $query = "
773        CREATE TABLE {$database['prefix']}PageCacheLog (
774            blogid int(11) NOT NULL default 0,
775            name varchar(255) NOT NULL default '',
776            PRIMARY KEY (blogid,name)
777        ) TYPE=MyISAM
778    ";
779    if (DBQuery::execute($query . ' DEFAULT CHARSET=utf8') || DBQuery::execute($query))
780        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
781    else
782        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
783}
784
785if (DBQuery::queryCell("DESC {$database['prefix']}SkinSettings skin", 'Default') != 'coolant') {
786    $changed = true;
787    echo '<li>', _text('기본 스킨을 변경합니다.'), ': ';
788    if (DBQuery::execute("ALTER TABLE {$database['prefix']}SkinSettings CHANGE skin skin varchar(32) NOT NULL DEFAULT 'coolant'")) {
789        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
790    } else {
791        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
792    }
793}
794
795
796
797// Plugin Table update.
798$likeEscape = array ( '/_/' , '/%/' );
799$likeReplace = array ( '\\_' , '\\%' );
800$escapename = preg_replace($likeEscape, $likeReplace, $database['prefix']);
801$query = "show tables like '{$escapename}%'";
802$dbtables = DBQuery::queryColumn($query);
803
804$result = DBQuery::queryRow("show variables like 'lower_case_table_names'");
805$dbCaseInsensitive = ($result['Value'] == 1) ? true : false;
806
807$definedTables = getDefinedTableNames();
808
809$dbtables = array_values(array_diff($dbtables, $definedTables));
810if ($dbCaseInsensitive == true) {
811    $tempTables = $definedTables;
812    $definedTables = array();
813    foreach($tempTables as $table) {
814        $table = strtolower($table);
815        array_push($definedTables, $table);
816    }
817    $tempTables = $dbtables;
818    $dbtables = array();
819    foreach($tempTables as $table) {
820        $table = strtolower($table);
821        array_push($dbtables, $table);
822    }
823    $dbtables = array_values(array_diff($dbtables, $definedTables));
824}
825
826$query = "select name, value from {$database['prefix']}ServiceSettings WHERE name like 'Database\_%'";
827$plugintablesraw = DBQuery::queryAll($query);
828$plugintables = array();
829foreach($plugintablesraw as $table) {
830    $dbname = $database['prefix'] . substr($table['name'], 9);
831    $values = explode('/', $table['value'], 2);
832
833    $plugin = $values[0];
834    $version = $values[1];
835    if (!array_key_exists($plugin .'/'. $version, $plugintables)) {
836        $plugintables[$plugin .'/'. $version] = array('plugin' => $plugin, 'version' => $version, 'tables' => array());
837    }
838    array_push($plugintables[$plugin .'/'. $version]['tables'], $dbname);
839   
840    if ($dbCaseInsensitive == true) $dbname = strtolower($dbname);
841    if(DBQuery::queryExistence("DESC $dbname owner")) {
842        echo '<li>', _textf('플러그인이 생성한 %1 테이블의 owner 필드를 변경합니다.',$table['name']), ': ';
843        if(DBQuery::execute("ALTER TABLE $dbname CHANGE owner blogid int(11) NOT NULL DEFAULT 0"))
844            echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
845        else
846            echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
847    }
848}
849
850if (DBQuery::queryCell("SELECT acl FROM {$database['prefix']}Teamblog WHERE blogid = 1 AND userid = 1") == '0') {
851    $changed = true;
852    echo '<li>', _text('팀블로그 테이블의 소유 관계를 정의합니다.'), ': ';
853    if (DBQuery::execute("UPDATE {$database['prefix']}Teamblog SET acl = 16
854        WHERE blogid = userid"))
855        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
856    else
857        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
858}
859
860if (DBQuery::queryCell("DESC {$database['prefix']}ServiceSettings value", 'Type') != 'text') {
861    $changed = true;
862    echo '<li>', _text('서비스 설정값 테이블의 필드 속성을 변경합니다.'), ': ';
863    if (DBQuery::execute("ALTER TABLE {$database['prefix']}ServiceSettings CHANGE value value text NOT NULL")) {
864        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
865    } else {
866        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
867    }
868}
869
870if (!DBQuery::queryExistence("DESC {$database['prefix']}PageCacheLog value")) {
871    $changed = true;
872    echo '<li>', _text('페이지 캐싱을 위한 테이블을 추가합니다.'), ': ';
873    if (DBQuery::execute("ALTER TABLE {$database['prefix']}PageCacheLog ADD value text NOT NULL AFTER name"))
874        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
875    else
876        echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
877}
878
879
880// Common parts.
881if(doesHaveOwnership() && $blogids = DBQuery::queryColumn("SELECT blogid FROM {$database['prefix']}PageCacheLog")) {
882    $changed = true;
883    $errorlog = false;
884    echo '<li>', _textf('페이지 캐시를 초기화합니다.'), ': ';
885    foreach($blogids as $ids) {
886        if(CacheControl::flushAll($ids) == false) $errorlog = true;
887    }
888    if($errorlog == false) echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
889    else echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
890}
891
892if(doesHaveOwnership()){
893    echo '<li>', _textf('공지사항 캐시를 초기화합니다.'), ': ';
894    if(DBQuery::execute("DELETE FROM {$database['prefix']}ServiceSettings WHERE name = 'Textcube_Notice'"))
895        echo '<span style="color:#33CC33;">', _text('성공'), '</span></li>';
896    else echo '<span style="color:#FF0066;">', _text('실패'), '</span></li>';
897}
898
899$filename = ROOT . '/.htaccess';
900$fp = fopen($filename, "r");
901$content = fread($fp, filesize($filename));
902fclose($fp);
903if (preg_match('@\(thumbnail\)/\(\[0\-9\]\+/\.\+\) cache/\$1/\$2@', $content) == 0) {
904    if ($service['type'] == 'path')
905        $insertLine = 'RewriteRule ^[[:alnum:]]+/+(thumbnail)/([0-9]+/.+) cache/$1/$2 [E=SURI:1,L]'.CRLF;
906    else
907        $insertLine = 'RewriteRule ^(thumbnail)/([0-9]+/.+) cache/$1/$2 [E=SURI:1,L]'.CRLF;
908    $findStr = 'RewriteRule !^(blog|cache)/ - [L]';
909    echo '<li>.htaccess thumbnail rule - ', _text('수정');
910    if (strpos($content, $findStr) == false)
911        echo ': <span style="color:#33CC33;">', _text('실패'), '</span></li>';
912    else {
913        $pos = strpos($content, $findStr) + strlen($findStr);
914        while (((bin2hex($content[$pos]) == '0d') || (bin2hex($content[$pos]) == '0a') || (bin2hex($content[$pos]) == '20')) && (strlen($content) > $pos)) $pos++;
915        $content = substr($content, 0, $pos) . $insertLine . substr($content,$pos);
916        $fp = fopen($filename, "w");
917        fwrite($fp, $content);
918        fclose($fp);
919        echo ': <span style="color:#33CC33;">', _text('성공'), '</span></li>';
920    }
921}
922
923?>
924</ul>
925<?php
926    reloadSkin(1);
927?>
928<?php echo ($changed ? _text('완료되었습니다.') : _text('확인되었습니다.'));?>
929</p>
930<p>
931<a href="<?php echo $blogURL.'/owner/center/dashboard';?>"><?php echo _text('되돌아가기');?></a>
932</p>
933</body>
934</html>
Note: See TracBrowser for help on using the browser.