source: branches/feature-module-update/data/class/pages/upgrade/LC_Page_Upgrade_Download.php @ 16459

Revision 16459, 6.6 KB checked in by adachi, 15 years ago (diff)

暫定コミット

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-httpd-php
Line 
1<?php
2/*
3 * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
4 *
5 * http://www.lockon.co.jp/
6 */
7
8// {{{ requires
9require_once CLASS_PATH . 'pages/upgrade/LC_Page_Upgrade_Base.php';
10error_reporting(E_ALL);
11/**
12 * ダウンロード処理を担当する.
13 *
14 * TODO 要リファクタリング
15 *
16 * @package Page
17 * @author LOCKON CO.,LTD.
18 * @version $Id$
19 */
20class LC_Page_Upgrade_Download extends LC_Page_Upgrade_Base {
21
22    /** SC_Sessionオブジェクト */
23    var $objSession = null;
24    /** Services_Jsonオブジェクト */
25    var $objJson = null;
26    /** HTTP_Requestオブジェクト */
27    var $objReq = null;
28    /** SC_FromParamオブジェクト */
29    var $objForm = null;
30
31    // }}}
32    // {{{ functions
33
34    /**
35     * Page を初期化する.
36     *
37     * @return void
38     */
39    function init() {
40        $this->objSess = new SC_Session();
41        $this->objJson = new Services_Json();
42        $rhis->objReq  = new HTTP_Request();
43        $this->objForm = new SC_FormParam();
44        $this->objForm->addParam(
45            'product_id', 'product_id', INT_LEN, '',
46            array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK')
47        );
48        $this->objForm->setParam($_POST);
49    }
50
51    /**
52     * Page のプロセス.
53     *
54     * @return void
55     */
56    function process() {
57        $errFormat = '* error! code:%s / debug:%s';
58
59        GC_Utils::gfPrintLog('###Download Start###');
60
61        // 管理画面ログインチェック
62        GC_Utils::gfPrintLog('* admin auth start');
63        if ($this->objSess->isSuccess() !== SUCCESS) {
64            $arrErr = array(
65                'status'  => OWNERSSTORE_STATUS_ERROR,
66                'errcode' => OWNERSSTORE_ERR_DL_ADMIN_AUTH,
67                'body' => '管理画面にログインしていません'
68            );
69            echo $this->objJson->encode($arrErr);
70            GC_Utils::gfPrintLog(
71                sprintf($errFormat, $arrErr['errcode'], serialize($_SESSION))
72            );
73            exit;
74        }
75
76        // パラメーチェック
77        GC_Utils::gfPrintLog('* post parameter check start');
78        if ($arrErr = $this->objForm->checkError()) {
79            $arrErr = array(
80                'status'  => OWNERSSTORE_STATUS_ERROER,
81                'errcode' => OWNERSSTORE_ERR_DL_POST_PARAM,
82                'body' => 'パラメータが不正です。'
83            );
84            echo $this->objJson->encode($arrErr);
85            GC_Utils::gfPrintLog(
86                sprintf($errFormat, $arrErr['errcode'], serialize($_POST))
87            );
88            exit;
89        }
90
91        // TODO CSRF対策が必須
92
93        // ダウンロードリクエストを開始
94        GC_Utils::gfPrintLog('* http request start');
95        $resp = $this->request(
96            'download',
97            array('product_id' => $this->objForm->getValue('product_id'))
98        );
99
100        // リクエストのエラーチェック
101        GC_Utils::gfPrintLog('* http response check start');
102        if (PEAR::isError($resp)) {
103            $arrErr = array(
104                'status'  => OWNERSSTORE_STATUS_ERROR,
105                'errcode' => OWNERSSTORE_ERR_DL_HTTP_REQ,
106                'body' => 'サーバとの通信に失敗しました。エラーコード:' . OWNERSSTORE_ERR_DL_HTTP_REQ
107            );
108            echo $this->objJson->encode($arrErr);
109            GC_Utils::gfPrintLog(
110                sprintf($errFormat, $arrErr['errcode'], serialize($resp))
111            );
112            exit;
113        }
114
115        // ダウンロードデータの保存
116        $jsonData = $resp->getResponseBody();
117        $objRet   = $this->objJson->decode($resp->getResponseBody($jsonData));
118        if ($objRet->status == OWNERSSTORE_STATUS_SUCCESS) {
119            GC_Utils::gfPrintLog('* save file start');
120            $time = time();
121            $dir  = DATA_PATH . 'downloads/tmp/';
122            $filename = $time . '.tar.gz';
123
124            $data = base64_decode($objRet->body);
125
126            if ($fp = fopen($dir . $filename, "w")) {
127                fwrite($fp, $data);
128                fclose($fp);
129            } else {
130                $arrErr = array(
131                    'status'  => OWNERSSTORE_STATUS_ERROR,
132                    'errcode' => OWNERSSTORE_ERR_DL_FILE_WRITE,
133                    'body' => 'ファイルの書き込みに失敗しました。'
134                );
135                echo $this->objJson->encode($arrErr);
136                GC_Utils::gfPrintLog(
137                    sprintf($errFormat, $arrErr['errcode'], serialize($dir . $filename))
138                );
139                exit;
140            }
141            // ダウンロードアーカイブを展開する
142            $exract_dir = $dir . $time;
143            if (!@mkdir($exract_dir)) {
144                $arrErr = array(
145                    'status'  => OWNERSSTORE_STATUS_ERROR,
146                    'errcode' => OWNERSSTORE_ERR_DL_MKDIR,
147                    'body' => 'ディレクトリを作成できません。'
148                );
149                echo $this->objJson->encode($arrErr);
150                GC_Utils::gfPrintLog(
151                    sprintf($errFormat, $arrErr['errcode'], serialize($exract_dir))
152                );
153                exit;
154            }
155
156            $tar = new Archive_Tar($dir . $filename);
157            $tar->extract($exract_dir);
158
159            include_once CLASS_PATH . 'batch/SC_Batch_Update.php';
160            $objBatch = new SC_Batch_Update();
161            $arrCopyLog = $objBatch->execute($exract_dir);
162
163            // テーブルの更新
164            // $this->updateMdlTable($objRet);
165
166            $arrParam = array(
167                'status'  => OWNERSSTORE_STATUS_SUCCESS,
168                'body' => wordwrap(implode('\n', $arrCopyLog), 80, "<br />\n")
169            );
170            echo $this->objJson->encode($arrParam);
171            GC_Utils::gfPrintLog('* file save ok');
172            exit;
173        } else {
174            echo $jsonData;
175            GC_Utils::gfPrintLog(
176                sprintf($errFormat, $objRet->errcode, serialize(array($resp, $objRet)))
177            );
178            exit;
179        }
180    }
181
182    /**
183     * デストラクタ
184     *
185     * @return void
186     */
187    function destroy() {
188        GC_Utils::gfPrintLog('###Download End###');
189    }
190
191    /**
192     * dtb_moduleを更新する
193     *
194     * @param object $objRet
195     */
196    function updateMdlTable($objRet) {
197        $table = 'dtb_module';
198        $objQuery = new SC_Query;
199
200        $count = $objQuery->count($objRet, 'module_id=?', array($objRet->product_id));
201        if ($count) {
202            $arrUpdate = array();
203            $objQuery->update($table, $arrUpdate);
204        } else {
205            $arrInsert = array();
206            $objQuery->insert($table, $arrInsert);
207        }
208    }
209}
210?>
Note: See TracBrowser for help on using the repository browser.