예제 #1
0
파일: package.php 프로젝트: 453111208/bbc
 static function walk($file)
 {
     $obj = new base_package();
     $obj->open($file);
     $obj->filename = $file;
     return $obj;
 }
예제 #2
0
 public function download($app_id, $force = false)
 {
     $download_able = $force;
     if (!$download_able) {
         $download_able = !file_exists(APP_DIR . '/' . $app_id . '/app.xml');
         if (!$download_able) {
             $rows = app::get('base')->model('apps')->getList('app_id,local_ver,remote_ver', array('app_id' => $app_id), 0, 1);
             $download_able = $rows[0]['local_ver'] ? version_compare($rows[0]['remote_ver'], $rows[0]['local_ver'], '>') : true;
         }
     }
     if ($download_able) {
         $tmpfile = tempnam(TMP_DIR, 'app_');
         $tmpdir = tempnam(TMP_DIR, 'app_');
         $download_result = kernel::single('base_pget')->dl(sprintf(URL_APP_FETCH, $app_id), $tmpfile);
         if (!$download_result) {
             logger::info('Appliction [' . $app_id . '] download failed.');
             exit;
         }
         $broken = false;
         logger::info("\nExtra from package.");
         foreach (base_package::walk($tmpfile) as $file) {
             if (!$file) {
                 $broken = true;
                 break;
             }
             logger::info($file['name']);
             base_package::extra($file, $tmpdir);
         }
         if (!$broken && file_exists($tmpdir . '/app.xml')) {
             if (!is_dir(DATA_DIR . '/backup')) {
                 utils::mkdir_p(DATA_DIR . '/backup');
             }
             utils::cp(APP_DIR . '/' . $app_id, DATA_DIR . '/backup/app.' . $app_id . '.' . time());
             utils::remove_p(APP_DIR . '/' . $app_id);
             utils::cp($tmpdir, APP_DIR . '/' . $app_id);
             utils::remove_p($tmpdir);
             $this->update_local_app_info($app_id);
             return true;
         } else {
             utils::remove_p($tmpdir);
             return false;
         }
     }
 }