source: temp/trunk/html/admin/system/bkup.php @ 5505

Revision 5505, 9.4 KB checked in by kakinaka, 20 years ago (diff)

blank

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1<?php
2require_once("../require.php");
3
4//¥Ú¡¼¥¸´ÉÍý¥¯¥é¥¹
5class LC_Page {
6    //¥³¥ó¥¹¥È¥é¥¯¥¿
7    function LC_Page() {
8        //¥á¥¤¥ó¥Æ¥ó¥×¥ì¡¼¥È¤Î»ØÄê
9        $this->tpl_mainpage = 'system/bkup.tpl';
10        $this->tpl_subnavi = 'system/subnavi.tpl';
11        $this->tpl_mainno = 'system';       
12        $this->tpl_subno = 'bkup';
13        $this->tpl_subtitle = '¥Ð¥Ã¥¯¥¢¥Ã¥×´ÉÍý';
14    }
15}
16
17$objPage = new LC_Page();
18$objView = new SC_AdminView();
19$objQuery = new SC_Query();
20
21// ¥»¥Ã¥·¥ç¥ó¥¯¥é¥¹
22$objSess = new SC_Session();
23// ǧ¾Ú²ÄÈݤÎȽÄê
24sfIsSuccess($objSess);
25
26switch($_POST['mode']) {
27// ¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºîÀ®¤¹¤ë
28case 'bkup':
29    // ¥¨¥é¡¼¥Á¥§¥Ã¥¯
30    $arrErr = lfCheckError($_POST);
31
32    // ¥¨¥é¡¼¤¬¤Ê¤±¤ì¤Ð¥Ð¥Ã¥¯¥¢¥Ã¥×½èÍý¤ò¹Ô¤¦   
33    if (count($arrErr) <= 0) {
34        // ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ëºîÀ®
35        lfCreateBkupData();
36       
37        // DB¤Ë¥Ç¡¼¥¿¹¹¿·
38       
39    }
40   
41
42    break;
43   
44// ¥¤¥ó¥¹¥È¡¼¥ë
45case 'install':
46    // ¹¹¿·¾ðÊó¤òºÇ¿·¤Ë¤¹¤ë
47    lfLoadUpdateList();
48    // ¥â¥¸¥å¡¼¥ë·´¤Î¥¤¥ó¥¹¥È¡¼¥ë
49    lfInstallModule();
50    break;
51// ¥¢¥ó¥¤¥ó¥¹¥È¡¼¥ë
52case 'uninstall':
53    // ¹¹¿·¾ðÊó¤òºÇ¿·¤Ë¤¹¤ë
54    lfLoadUpdateList();
55    // ¥â¥¸¥å¡¼¥ë·´¤Î¥¤¥ó¥¹¥È¡¼¥ë   
56    lfUninstallModule();
57    break;
58default:
59    break;
60}
61
62// ¥Æ¥ó¥×¥ì¡¼¥È¥Õ¥¡¥¤¥ë¤ËÅϤ¹¥Ç¡¼¥¿¤ò¥»¥Ã¥È
63$objPage->arrErr = $arrErr;
64
65$objView->assignobj($objPage);      //ÊÑ¿ô¤ò¥Æ¥ó¥×¥ì¡¼¥È¤Ë¥¢¥µ¥¤¥ó¤¹¤ë
66$objView->display(MAIN_FRAME);      //¥Æ¥ó¥×¥ì¡¼¥È¤Î½ÐÎÏ
67
68//-------------------------------------------------------------------------------------------------------
69
70// ¥¨¥é¡¼¥Á¥§¥Ã¥¯
71function lfCheckError($array){
72    $objErr = new SC_CheckError($array);
73   
74    $objErr->doFunc(array("¥Ð¥Ã¥¯¥¢¥Ã¥×̾", "bkup_name", STEXT_LEN), array("EXIST_CHECK","MAX_LENGTH_CHECK"));
75   
76    return $objErr->arrErr;
77}
78
79// ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ëºîÀ®
80function lfCreateBkupData(){
81    $objQuery = new SC_Query();
82    $csv_data = "";
83   
84    // Á´¥Æ¡¼¥Ö¥ë¼èÆÀ
85    $arrTableList = lfGetTableList();
86   
87    // ³Æ¥Æ¡¼¥Ö¥ë¾ðÊó¤ò¼èÆÀ¤¹¤ë
88    foreach($arrTableList as $key => $val){
89       
90        // ¥Æ¡¼¥Ö¥ë¹½À®¤ò¼èÆÀ
91        $arrColumnList = lfGetColumnList($val);
92       
93        // ¥Æ¡¼¥Ö¥ë¹½À®¤ÎCSV½ÐÎϥǡ¼¥¿À¸À®
94       
95       
96        // Á´¥Ç¡¼¥¿¤ò¼èÆÀ
97        $arrData = $objQuery->getAll("SELECT * FROM $val");
98
99        // CSV¥Ç¡¼¥¿À¸À®
100        if (count($arrData) > 0) {
101           
102            // ¥«¥é¥à¤òCSV·Á¼°¤ËÀ°¤¨¤ë
103            $arrKyes = sfGetCommaList(array_keys($arrData[0]), false);
104           
105            // ¥Ç¡¼¥¿¤òCSV·Á¼°¤ËÀ°¤¨¤ë
106            $data = "";
107            foreach($arrData as $data_key => $data_val){
108                $data .= sfGetCSVList($arrData[$data_key]);
109            }
110           
111           
112            $csv_data .= $val . "\n";
113            $csv_data .= $arrKyes . "\n";
114            $csv_data .= $data;
115            $csv_data .= "\n";
116        }   
117       
118        //sfprintr(array_keys($arrData[0]));
119        //sfprintr(sfGetCSVList($arrData));
120       
121    }
122   
123    sfprintr($csv_data);
124   
125   
126   
127   
128}
129
130// Á´¥Æ¡¼¥Ö¥ë¥ê¥¹¥È¤ò¼èÆÀ¤¹¤ë
131function lfGetTableList(){
132    $objQuery = new SC_Query();
133   
134    if(DB_TYPE == "pgsql"){
135        $sql = "SELECT tablename FROM pg_tables where tableowner = ? ORDER BY tablename ; ";
136        $arrRet = $objQuery->getAll($sql, array(DB_USER));
137        $arrRet = sfSwapArray($arrRet);
138        $arrRet = $arrRet['tablename'];
139    }else if(DB_TYPE == "mysql"){
140       
141    }
142   
143    return $arrRet;
144}
145
146// ¥Æ¡¼¥Ö¥ë¹½À®¤ò¼èÆÀ¤¹¤ë
147function lfGetColumnList($table_name){
148    $objQuery = new SC_Query();
149
150    if(DB_TYPE == "pgsql"){
151        $sql = "SELECT
152                    a.attname, t.typname, a.attnotnull, d.adsrc as defval, a.atttypmod, a.attnum as fldnum, e.description
153                FROM
154                    pg_class c,
155                    pg_type t,
156                    pg_attribute a left join pg_attrdef d on (a.attrelid=d.adrelid and a.attnum=d.adnum)
157                                   left join pg_description e on (a.attrelid=e.objoid and a.attnum=e.objsubid)
158                WHERE (c.relname=?) AND (c.oid=a.attrelid) AND (a.atttypid=t.oid) AND a.attnum > 0
159                ORDER BY fldnum";
160        $arrRet = $objQuery->getAll($sql, array($table_name));
161    }
162   
163    return sfswaparray($arrRet);
164
165}
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180// ¹¹¿·¥Õ¥¡¥¤¥ë¤Î¼èÆÀ
181function lfCopyUpdateFile($val) {
182    global $objPage;
183   
184    $src_path = sfRmDupSlash(UPDATE_HTTP . $val . ".txt");
185    $dst_path = sfRmDupSlash(ROOT_DIR . $val);
186    $flg_ok = true; // ½èÍý¤ÎÀ®¸ùȽÄê
187   
188    $src_fp = @fopen($src_path, "rb");
189   
190    if(!$src_fp) {
191        sfErrorHeader(">> " . $src_path . "¤Î¼èÆÀ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
192        $flg_ok = false;
193    } else {
194        // ¥Õ¥¡¥¤¥ë¤ò¤¹¤Ù¤ÆÆÉ¤ß¹þ¤à
195        $contents = '';
196        while (!feof($src_fp)) {
197            $contents .= fread($src_fp, 1024);
198        }
199        fclose($src_fp);
200       
201        // ¥Ç¥£¥ì¥¯¥È¥êºîÀ®¤ò»î¤ß¤ë
202        lfMakeDirectory($dst_path);
203        // ¥Õ¥¡¥¤¥ë½ñ¹þ¤ß       
204        $dst_fp = @fopen($dst_path, "wb");
205        if(!$dst_fp) {
206            sfErrorHeader(">> " . $dst_path . "¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Þ¤»¤ó¡£");
207            $flg_ok = false;
208        } else {
209            fwrite($dst_fp, $contents);
210            fclose($dst_fp);
211        }
212    }
213   
214    if($flg_ok) {
215        $objPage->update_mess.= ">> " . $dst_path . "¡§¥³¥Ô¡¼À®¸ù<br>";
216    } else {
217        $objPage->update_mess.= ">> " . $dst_path . "¡§¥³¥Ô¡¼¼ºÇÔ<br>";     
218    }
219   
220    return $flg_ok;
221}
222
223// ¤¹¤Ù¤Æ¤Î¥Ñ¥¹¤Î¥Ç¥£¥ì¥¯¥È¥ê¤òºîÀ®¤¹¤ë
224function lfMakeDirectory($path) {
225    $pos = 0;
226    $cnt = 0;               // ̵¸Â¥ë¡¼¥×Âкö
227    $len = strlen($path);   // ̵¸Â¥ë¡¼¥×Âкö
228   
229    while($cnt <= $len) {
230        $pos = strpos($path, "/", $pos);
231        // ¤³¤³¤Ç¤ÎȽÄê¤Ï¡¢Åù¹æ3¤Ä¤ò»ÈÍÑ
232        if($pos === false) {
233            // ¥¹¥é¥Ã¥·¥å¤¬¸«¤Ä¤«¤é¤Ê¤¤¾ì¹ç¤Ï¥ë¡¼¥×¤«¤éÈ´¤±¤ë
234            break;
235        }
236        $pos++; // ʸ»úȯ¸«°ÌÃÖ¤ò°ìʸ»ú¿Ê¤á¤ë
237        $dir = substr($path, 0, $pos);
238       
239        // ¤¹¤Ç¤Ë¸ºß¤¹¤ë¤«¤É¤¦¤«Ä´¤Ù¤ë
240        if(!file_exists($dir)) {
241            mkdir($dir);
242        }
243        $cnt++; // ̵¸Â¥ë¡¼¥×Âкö
244    }
245}
246
247// ¹¹¿·¾ðÊó¤òºÇ¿·¤Ë¤¹¤ë
248function lfLoadUpdateList() {
249    $objQuery = new SC_Query();
250    $path = UPDATE_HTTP . "update.txt";
251    $fp = @fopen($path, "rb");
252   
253    if(!$fp) {
254        sfErrorHeader(">> " . $path . "¤Î¼èÆÀ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
255    } else {
256        while (!feof($fp)) {
257            $arrCSV = fgetcsv($fp, UPDATE_CSV_LINE_MAX);
258            // ¥«¥é¥à¿ô¤¬Àµ¾ï¤Ç¤¢¤Ã¤¿¾ì¹ç¤Î¤ß
259            if(count($arrCSV) == UPDATE_CSV_COL_MAX) {
260                // ¼èÆÀ¤·¤¿¥¢¥Ã¥×¥Ç¡¼¥È¾ðÊó¤òDB¤Ë½ñ¤­¹þ¤à
261                $sqlval['module_id'] = $arrCSV[0];
262                $sqlval['module_name'] = $arrCSV[1];
263                $sqlval['latest_version'] = $arrCSV[3];
264                $sqlval['module_explain'] = $arrCSV[4];
265                $sqlval['main_php'] = $arrCSV[5];
266                $sqlval['extern_php'] = $arrCSV[6];
267                $sqlval['install_sql'] = $arrCSV[7];
268                $sqlval['uninstall_sql'] = $arrCSV[8];             
269                $sqlval['other_files'] = $arrCSV[9];
270                $sqlval['del_flg'] = $arrCSV[10];
271                $sqlval['update_date'] = "now()";
272                $sqlval['release_date'] = $arrCSV[12];
273                // ´û¸¥ì¥³¡¼¥É¤Î¥Á¥§¥Ã¥¯
274                $cnt = $objQuery->count("dtb_update", "module_id = ?", array($sqlval['module_id']));
275                if($cnt > 0) {
276                    // ¤¹¤Ç¤Ë¼èÆÀ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¹¹¿·¤¹¤ë¡£
277                    $objQuery->update("dtb_update", $sqlval, "module_id = ?", array($sqlval['module_id']));
278                } else {
279                    // ¿·µ¬¥ì¥³¡¼¥É¤ÎÄɲÃ
280                    $sqlval['create_date'] = "now()";
281                    $objQuery->insert("dtb_update", $sqlval);
282                }
283            }
284        }
285        fclose($fp);
286    }
287}
288
289// ¥¤¥ó¥¹¥È¡¼¥ë½èÍý
290function lfInstallModule() {
291    global $objPage;
292   
293    $objQuery = new SC_Query();
294    $arrRet = $objQuery->select("module_id, extern_php, other_files, install_sql, latest_version", "dtb_update", "module_id = ?", array($_POST['module_id']));
295    $flg_ok = true; // ½èÍý¤ÎÀ®¸ùȽÄê
296   
297    if(count($arrRet) > 0) {
298        $arrFiles = array();
299        if($arrRet[0]['other_files'] != "") {
300            $arrFiles = split("\|", $arrRet[0]['other_files']);
301        }
302        $arrFiles[] = $arrRet[0]['extern_php'];
303        foreach($arrFiles as $val) {
304            // ¹¹¿·¥Õ¥¡¥¤¥ë¤Î¼èÆÀ
305            $ret=lfCopyUpdateFile($val);
306            if(!$ret) {
307                $flg_ok = false;
308            }
309        }
310    } else {
311        sfErrorHeader(">> Âоݤε¡Ç½¤Ï¡¢ÇÛÉÛ¤ò½ªÎ»¤·¤Æ¤ª¤ê¤Þ¤¹¡£");
312        $flg_ok = false;
313    }
314   
315    // ɬÍפÊSQLʸ¤Î¼Â¹Ô
316    if($arrRet[0]['install_sql'] != "") {
317        // SQLʸ¼Â¹Ô¡¢¥Ñ¥é¡¼¥á¡¼¥¿¤Ê¤·¡¢¥¨¥é¡¼Ìµ»ë
318        $arrInstallSql = split(";",$arrRet[0]['install_sql']);
319        foreach($arrInstallSql as $key => $val){
320            if (trim($val) != ""){
321                $ret = $objQuery->query(trim($val),"",true);
322            }
323        }
324        if(DB::isError($ret)) {
325            // ¥¨¥é¡¼Ê¸¤ò¼èÆÀ¤¹¤ë
326            ereg("\[(.*)\]", $ret->userinfo, $arrKey);
327            $objPage->update_mess.=">> ¥Æ¡¼¥Ö¥ë¹½À®¤ÎÊѹ¹¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£<br>";
328            $objPage->update_mess.= $arrKey[0] . "<br>";
329            $flg_ok = false;
330        } else {
331            $objPage->update_mess.=">> ¥Æ¡¼¥Ö¥ë¹½À®¤ÎÊѹ¹¤ò¹Ô¤¤¤Þ¤·¤¿¡£<br>";
332        }
333    }
334   
335    if($flg_ok) {
336        $sqlval['now_version'] = $arrRet[0]['latest_version'];
337        $sqlval['update_date'] = "now()";
338        $objQuery->update("dtb_update", $sqlval, "module_id = ?", array($arrRet[0]['module_id']));
339    }
340}
341
342// ¥¢¥ó¥¤¥ó¥¹¥È¡¼¥ë½èÍý
343function lfUninstallModule() {
344    global $objPage;
345   
346    $objQuery = new SC_Query();
347    $arrRet = $objQuery->select("module_id, extern_php, other_files, install_sql, uninstall_sql, latest_version", "dtb_update", "module_id = ?", array($_POST['module_id']));
348    $flg_ok = true; // ½èÍý¤ÎÀ®¸ùȽÄê
349   
350    if(count($arrRet) > 0) {
351        $arrFiles = array();
352        if($arrRet[0]['other_files'] != "") {
353            $arrFiles = split("\|", $arrRet[0]['other_files']);
354        }
355        $arrFiles[] = $arrRet[0]['extern_php'];
356        foreach($arrFiles as $val) {
357            $path = ROOT_DIR . $val;
358            if(file_exists($path)) {
359                // ¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë
360                if(unlink($path)) {
361                    $objPage->update_mess.= ">> " . $path . "¡§ºï½üÀ®¸ù<br>";
362                } else {
363                    $objPage->update_mess.= ">> " . $path . "¡§ºï½ü¼ºÇÔ<br>";
364                }
365            }
366        }
367       
368        // ɬÍפÊSQLʸ¤Î¼Â¹Ô
369        if($arrRet[0]['uninstall_sql'] != "") {
370            // SQLʸ¼Â¹Ô¡¢¥Ñ¥é¡¼¥á¡¼¥¿¤Ê¤·¡¢¥¨¥é¡¼Ìµ»ë
371            $ret = $objQuery->query($arrRet[0]['uninstall_sql'],"",true);
372            if(DB::isError($ret)) {
373                // ¥¨¥é¡¼Ê¸¤ò¼èÆÀ¤¹¤ë
374                ereg("\[(.*)\]", $ret->userinfo, $arrKey);
375                $objPage->update_mess.=">> ¥Æ¡¼¥Ö¥ë¹½À®¤ÎÊѹ¹¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£<br>";
376                $objPage->update_mess.= $arrKey[0] . "<br>";
377                $flg_ok = false;
378            } else {
379                $objPage->update_mess.=">> ¥Æ¡¼¥Ö¥ë¹½À®¤ÎÊѹ¹¤ò¹Ô¤¤¤Þ¤·¤¿¡£<br>";
380            }
381        }       
382    } else {
383        sfErrorHeader(">> Âоݤε¡Ç½¤Ï¡¢ÇÛÉÛ¤ò½ªÎ»¤·¤Æ¤ª¤ê¤Þ¤¹¡£");
384    }
385   
386    if($flg_ok) {
387        // ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òºï½ü¤¹¤ë¡£
388        $sqlval['now_version'] = "";
389        $sqlval['update_date'] = "now()";
390        $objQuery->update("dtb_update", $sqlval, "module_id = ?", array($arrRet[0]['module_id']));
391    }
392}
393
394
395?>
Note: See TracBrowser for help on using the repository browser.