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

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