source: branches/beta/html/admin/system/module.php @ 15120

Revision 15120, 8.6 KB checked in by adati, 17 years ago (diff)

1.4.2betaのマージ

Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7require_once("../require.php");
8require_once(DATA_PATH . "module/Request.php");
9
10//¥Ú¡¼¥¸´ÉÍý¥¯¥é¥¹
11class LC_Page {
12    //¥³¥ó¥¹¥È¥é¥¯¥¿
13    function LC_Page() {
14        //¥á¥¤¥ó¥Æ¥ó¥×¥ì¡¼¥È¤Î»ØÄê
15        $this->tpl_mainpage = 'system/module.tpl';
16        $this->tpl_subnavi = 'system/subnavi.tpl';
17        $this->tpl_mainno = 'system';       
18        $this->tpl_subno = 'module';
19        $this->tpl_subtitle = '¥â¥¸¥å¡¼¥ë´ÉÍý';
20    }
21}
22$objPage = new LC_Page();
23$objView = new SC_AdminView();
24$objQuery = new SC_Query();
25
26// ¥»¥Ã¥·¥ç¥ó¥¯¥é¥¹
27$objSess = new SC_Session();
28// ǧ¾Ú²ÄÈݤÎȽÄê
29sfIsSuccess($objSess);
30
31switch($_POST['mode']) {
32// ¥¢¥Ã¥×¥Ç¡¼¥È¾ðÊó¥Õ¥¡¥¤¥ë¤ò¼èÆÀ
33case 'edit':
34    // ¹¹¿·¾ðÊó¤òºÇ¿·¤Ë¤¹¤ë
35    lfLoadUpdateList();
36    break;
37// ¥¤¥ó¥¹¥È¡¼¥ë
38case 'install':
39    // ¹¹¿·¾ðÊó¤òºÇ¿·¤Ë¤¹¤ë
40    lfLoadUpdateList();
41    // ¥â¥¸¥å¡¼¥ë·´¤Î¥¤¥ó¥¹¥È¡¼¥ë
42    lfInstallModule();
43    break;
44// ¥¢¥ó¥¤¥ó¥¹¥È¡¼¥ë
45case 'uninstall':
46    // ¹¹¿·¾ðÊó¤òºÇ¿·¤Ë¤¹¤ë
47    lfLoadUpdateList();
48    // ¥â¥¸¥å¡¼¥ë·´¤Î¥¤¥ó¥¹¥È¡¼¥ë   
49    lfUninstallModule();
50    break;
51default:
52    break;
53}
54
55$objQuery->setorder("module_id");
56$arrUpdate = $objQuery->select("*", "dtb_module");
57
58$objPage->arrUpdate = $arrUpdate;
59$objView->assignobj($objPage);      //ÊÑ¿ô¤ò¥Æ¥ó¥×¥ì¡¼¥È¤Ë¥¢¥µ¥¤¥ó¤¹¤ë
60$objView->display(MAIN_FRAME);      //¥Æ¥ó¥×¥ì¡¼¥È¤Î½ÐÎÏ
61//-------------------------------------------------------------------------------------------------------
62// ¹¹¿·¥Õ¥¡¥¤¥ë¤Î¼èÆÀ
63function lfCopyUpdateFile($file, $icon = false) {
64    global $objPage;
65   
66    $src_path = sfRmDupSlash(UPDATE_HTTP . $file . ".txt");
67    $dst_path = sfRmDupSlash(MODULE_PATH . $file);
68    $flg_ok = true; // ½èÍý¤ÎÀ®¸ùȽÄê
69   
70    $src_fp = @fopen($src_path, "rb");
71   
72    if(!$src_fp) {
73        sfErrorHeader(">> " . $src_path . "¤Î¼èÆÀ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
74        $flg_ok = false;
75    } else {
76        // ¥Õ¥¡¥¤¥ë¤ò¤¹¤Ù¤ÆÆɤ߹þ¤à
77        $contents = '';
78        while (!feof($src_fp)) {
79            $contents .= fread($src_fp, 1024);
80        }
81        fclose($src_fp);
82       
83        // ¥Ç¥£¥ì¥¯¥È¥êºîÀ®¤ò»î¤ß¤ë
84        lfMakeDirectory($dst_path);
85        // ¥Õ¥¡¥¤¥ë½ñ¹þ¤ß       
86        $dst_fp = @fopen($dst_path, "wb");
87        if(!$dst_fp) {
88            sfErrorHeader(">> " . $dst_path . "¤ò¥ª¡¼¥×¥ó¤Ç¤­¤Þ¤»¤ó¡£");
89            $flg_ok = false;
90        } else {
91            fwrite($dst_fp, $contents);
92            fclose($dst_fp);
93        }
94    }
95   
96    if($icon === true) return $flg_ok;
97   
98    if($flg_ok) {
99        $objPage->update_mess.= ">> " . $dst_path . "¡§¥³¥Ô¡¼À®¸ù<br>";
100    } else {
101        $objPage->update_mess.= ">> " . $dst_path . "¡§¥³¥Ô¡¼¼ºÇÔ<br>";     
102    }
103   
104    return $flg_ok;
105}
106
107// ¤¹¤Ù¤Æ¤Î¥Ñ¥¹¤Î¥Ç¥£¥ì¥¯¥È¥ê¤òºîÀ®¤¹¤ë
108function lfMakeDirectory($path) {
109    $pos = 0;
110    $cnt = 0;               // ̵¸Â¥ë¡¼¥×Âкö
111    $len = strlen($path);   // ̵¸Â¥ë¡¼¥×Âкö
112   
113    while($cnt <= $len) {
114        $pos = strpos($path, "/", $pos);
115        // ¤³¤³¤Ç¤ÎȽÄê¤Ï¡¢Åù¹æ3¤Ä¤ò»ÈÍÑ
116        if($pos === false) {
117            // ¥¹¥é¥Ã¥·¥å¤¬¸«¤Ä¤«¤é¤Ê¤¤¾ì¹ç¤Ï¥ë¡¼¥×¤«¤éÈ´¤±¤ë
118            break;
119        }
120        $pos++; // ʸ»úȯ¸«°ÌÃÖ¤ò°ìʸ»ú¿Ê¤á¤ë
121        $dir = substr($path, 0, $pos);
122       
123        // ¤¹¤Ç¤Ë¸ºß¤¹¤ë¤«¤É¤¦¤«Ä´¤Ù¤ë
124        if(!file_exists($dir)) {
125            mkdir($dir);
126        }
127        $cnt++; // ̵¸Â¥ë¡¼¥×Âкö
128    }
129}
130
131// ¹¹¿·¾ðÊó¤òºÇ¿·¤Ë¤¹¤ë
132function lfLoadUpdateList() {
133    $objQuery = new SC_Query();
134    $path = UPDATE_HTTP . MODULE_CSV;
135    $fp = @fopen($path, "rb");
136   
137    $arrInsID = array();
138       
139    if(!$fp) {
140        sfErrorHeader(">> " . $path . "¤Î¼èÆÀ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");
141    } else {
142       
143        while (!feof($fp)) {
144            $arrCSV = fgetcsv($fp, UPDATE_CSV_LINE_MAX);
145           
146            // ¥¨¥¹¥±¡¼¥×½èÍý¤ÎÃÖ´¹
147            foreach($arrCSV as $key => $val){
148                $arrCSV[$key] = str_replace('\"', '"', $val);
149            }
150           
151            if(ereg("^#", $arrCSV[0])) {
152                continue;
153            }
154           
155            // ¥«¥é¥à¿ô¤¬Àµ¾ï¤Ç¤¢¤Ã¤¿¾ì¹ç¤Î¤ß
156            if(count($arrCSV) == MODULE_CSV_COL_MAX) {
157                    // insert¤¹¤ëmodule_id¤òÇÛÎó¤Ë³ÊǼ
158                    $arrInsID[] = $arrCSV[0];
159               
160                    // ¼èÆÀ¤·¤¿¥¢¥Ã¥×¥Ç¡¼¥È¾ðÊó¤òDB¤Ë½ñ¤­¹þ¤à
161                    $sqlval['module_id'] = $arrCSV[0];
162                    $sqlval['module_name'] = $arrCSV[1];
163                    $sqlval['latest_version'] = $arrCSV[3];
164                    $sqlval['module_explain'] = $arrCSV[4];
165                    $sqlval['main_php'] = $arrCSV[5];
166                    $sqlval['extern_php'] = $arrCSV[6];
167                    $sqlval['install_sql'] = $arrCSV[7];
168                    $sqlval['uninstall_sql'] = $arrCSV[8];             
169                    $sqlval['other_files'] = $arrCSV[9];
170                    $sqlval['del_flg'] = $arrCSV[10];
171                    $sqlval['update_date'] = "now()";
172                    $sqlval['release_date'] = $arrCSV[12];
173                    $sqlval['module_x'] = $arrCSV[14];
174                    $sqlval['module_y'] = $arrCSV[15];
175                    $sqlval['icon'] = $arrCSV[16];
176                    $sqlval['url'] = $arrCSV[17];
177                    // ¥â¥¸¥å¡¼¥ë¤¬Âбþ¤·¤Æ¤¤¤ëËÜÂΤΥС¼¥¸¥ç¥ó
178                    $sqlval['eccube_version'] = $arrCSV[13];                   
179                    // ´û¸¥ì¥³¡¼¥É¤Î¥Á¥§¥Ã¥¯
180                    $cnt = $objQuery->count("dtb_module", "module_id = ?", array($sqlval['module_id']));
181                    if($cnt > 0) {
182                        // ¤¹¤Ç¤Ë¼èÆÀ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¹¹¿·¤¹¤ë¡£
183                        $objQuery->update("dtb_module", $sqlval, "module_id = ?", array($sqlval['module_id']));
184                    } else {
185                        // ¿·µ¬¥ì¥³¡¼¥É¤ÎÄɲÃ
186                        $sqlval['create_date'] = "now()";
187                        $objQuery->insert("dtb_module", $sqlval);
188                    }
189                    // ¥¢¥¤¥³¥ó¥Õ¥¡¥¤¥ë¤Î¥À¥¦¥ó¥í¡¼¥É
190                    if ( !empty($arrCSV[16]) ) {
191                        lfCopyUpdateFile($arrCSV[16], true);
192                    }
193            } else {
194                sfErrorHeader(">> ¥«¥é¥à¿ô¤¬°ìÃפ·¤Þ¤»¤ó¡£¡§".count($arrCSV));
195            }
196        }
197       
198        // ÉÔÍפʥǡ¼¥¿¤òºï½ü
199        if(count($arrInsID) > 0){
200            $del_sql = "DELETE FROM dtb_module WHERE module_id NOT IN (?";
201           
202            for($i = 1; $i < count($arrInsID); $i++){
203                $del_sql .= ",?";
204            }
205            $del_sql .= ")";
206           
207            $objQuery->query($del_sql, $arrInsID);
208        }
209
210        fclose($fp);
211    }
212}
213
214// ¥¤¥ó¥¹¥È¡¼¥ë½èÍý
215function lfInstallModule() {
216    global $objPage;
217   
218    $objQuery = new SC_Query();
219    $arrRet = $objQuery->select("module_id, extern_php, other_files, install_sql, latest_version", "dtb_module", "module_id = ?", array($_POST['module_id']));
220    $flg_ok = true; // ½èÍý¤ÎÀ®¸ùȽÄê
221   
222    if(count($arrRet) > 0) {
223        $arrFiles = array();
224        if($arrRet[0]['other_files'] != "") {
225            $arrFiles = split("\|", $arrRet[0]['other_files']);
226        }
227        $arrFiles[] = $arrRet[0]['extern_php'];
228        foreach($arrFiles as $val) {
229            // ¹¹¿·¥Õ¥¡¥¤¥ë¤Î¼èÆÀ
230            $ret=lfCopyUpdateFile($val);
231            if(!$ret) {
232                $flg_ok = false;
233            }
234        }
235    } else {
236        sfErrorHeader(">> Âоݤε¡Ç½¤Ï¡¢ÇÛÉÛ¤ò½ªÎ»¤·¤Æ¤ª¤ê¤Þ¤¹¡£");
237        $flg_ok = false;
238    }
239   
240    // ɬÍפÊSQLʸ¤Î¼Â¹Ô
241    if($arrRet[0]['install_sql'] != "") {
242        // SQLʸ¼Â¹Ô¡¢¥Ñ¥é¡¼¥á¡¼¥¿¤Ê¤·¡¢¥¨¥é¡¼Ìµ»ë
243        $arrInstallSql = split(";",$arrRet[0]['install_sql']);
244        foreach($arrInstallSql as $key => $val){
245            if (trim($val) != ""){
246                $ret = $objQuery->query(trim($val),"",true);
247            }
248        }
249        if(DB::isError($ret)) {
250            // ¥¨¥é¡¼Ê¸¤ò¼èÆÀ¤¹¤ë
251            ereg("\[(.*)\]", $ret->userinfo, $arrKey);
252            $objPage->update_mess.=">> ¥Æ¡¼¥Ö¥ë¹½À®¤ÎÊѹ¹¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£<br>";
253            $objPage->update_mess.= $arrKey[0] . "<br>";
254            $flg_ok = false;
255        } else {
256            $objPage->update_mess.=">> ¥Æ¡¼¥Ö¥ë¹½À®¤ÎÊѹ¹¤ò¹Ô¤¤¤Þ¤·¤¿¡£<br>";
257        }
258    }
259   
260    if($flg_ok) {
261        $path = MODULE_PATH . $arrRet[0]['extern_php'];
262        $sqlval['now_version'] = sfGetFileVersion($path);
263       
264        $sqlval['update_date'] = "now()";
265        $objQuery->update("dtb_module", $sqlval, "module_id = ?", array($arrRet[0]['module_id']));
266    }
267}
268
269// ¥¢¥ó¥¤¥ó¥¹¥È¡¼¥ë½èÍý
270function lfUninstallModule() {
271    global $objPage;
272   
273    $objQuery = new SC_Query();
274    $arrRet = $objQuery->select("module_id, extern_php, other_files, install_sql, uninstall_sql, latest_version", "dtb_module", "module_id = ?", array($_POST['module_id']));
275    $flg_ok = true; // ½èÍý¤ÎÀ®¸ùȽÄê
276   
277    if(count($arrRet) > 0) {
278       
279        // ¥â¥¸¥å¡¼¥ë¤òºï½ü¤¹¤ë
280        $objQuery->query("UPDATE dtb_payment SET del_flg = 1 WHERE module_id = ?", array($arrRet[0]['module_id']));
281
282        $arrFiles = array();
283        if($arrRet[0]['other_files'] != "") {
284            $arrFiles = split("\|", $arrRet[0]['other_files']);
285        }
286        $arrFiles[] = $arrRet[0]['extern_php'];
287
288        foreach($arrFiles as $val) {
289            $path = MODULE_PATH . $val;
290            // ¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë
291            if(file_exists($path) && unlink($path)) {
292                $objPage->update_mess.= ">> " . $path . "¡§ºï½üÀ®¸ù<br>";
293            } else {
294                $objPage->update_mess.= ">> " . $path . "¡§ºï½ü¼ºÇÔ<br>";
295            }
296        }
297
298        // ɬÍפÊSQLʸ¤Î¼Â¹Ô
299        if($arrRet[0]['uninstall_sql'] != "") {
300            // SQLʸ¼Â¹Ô¡¢¥Ñ¥é¡¼¥á¡¼¥¿¤Ê¤·¡¢¥¨¥é¡¼Ìµ»ë
301            $ret = $objQuery->query($arrRet[0]['uninstall_sql'],"",true);
302            if(DB::isError($ret)) {
303                // ¥¨¥é¡¼Ê¸¤ò¼èÆÀ¤¹¤ë
304                ereg("\[(.*)\]", $ret->userinfo, $arrKey);
305                $objPage->update_mess.=">> ¥Æ¡¼¥Ö¥ë¹½À®¤ÎÊѹ¹¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£<br>";
306                $objPage->update_mess.= $arrKey[0] . "<br>";
307                $flg_ok = false;
308            } else {
309                $objPage->update_mess.=">> ¥Æ¡¼¥Ö¥ë¹½À®¤ÎÊѹ¹¤ò¹Ô¤¤¤Þ¤·¤¿¡£<br>";
310            }
311        }
312    } else {
313        sfErrorHeader(">> Âоݤε¡Ç½¤Ï¡¢ÇÛÉÛ¤ò½ªÎ»¤·¤Æ¤ª¤ê¤Þ¤¹¡£");
314    }
315
316    if($flg_ok) {
317        // ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òºï½ü¤¹¤ë¡£
318        $sqlval['now_version'] = "";
319        $sqlval['update_date'] = "now()";
320        $objQuery->update("dtb_module", $sqlval, "module_id = ?", array($arrRet[0]['module_id']));
321    }
322}
323
324?>
Note: See TracBrowser for help on using the repository browser.