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

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