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

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