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

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