示例#1
0
文件: Import.php 项目: swk/bluebox
 public static function package($path)
 {
     Package_Message::log('debug', 'Attempting to import package ' . $path);
     $filename = basename($path);
     if (self::is_url($path)) {
         $path = Package_Import_Remote::fetch($path);
     }
     $importPath = MODPATH . pathinfo($path, PATHINFO_FILENAME);
     if (!class_exists('ZipArchive')) {
         $return = FALSE;
         Package_Message::log('debug', 'Attempting to unzip with: /usr/bin/unzip ' . $path . ' -d ' . MODPATH);
         @system('/usr/bin/unzip ' . $path . ' -d ' . $importPath, $return);
         if ($return !== 0) {
             throw new Package_Import_Exception('System does not have zip archive support or could not extract ' . $path);
         }
     } else {
         Package_Message::log('debug', 'Attempting to unzip with: ZipArchive->open(' . $path . ', ZIPARCHIVE::CHECKCONS)');
         $zip = new ZipArchive();
         if (!($error = $zip->open($path, ZIPARCHIVE::CHECKCONS))) {
             switch ($error) {
                 case ZIPARCHIVE::ER_EXISTS:
                     throw new Package_Import_Exception('Package archive already exists: ' . $error);
                 case ZIPARCHIVE::ER_INCONS:
                     throw new Package_Import_Exception('Consistency check on the package archive failed: ' . $error);
                 case ZIPARCHIVE::ER_INVAL:
                     throw new Package_Import_Exception('Invalid argument while opening package archive: ' . $error);
                 case ZIPARCHIVE::ER_MEMORY:
                     throw new Package_Import_Exception('Memory allocation failure while opening package archive: ' . $error);
                 case ZIPARCHIVE::ER_NOENT:
                     throw new Package_Import_Exception('Could not locate package archive: ' . $error);
                 case ZIPARCHIVE::ER_NOZIP:
                     throw new Package_Import_Exception('Package archive is not a zip: ' . $error);
                 case ZIPARCHIVE::ER_OPEN:
                     throw new Package_Import_Exception('Cant open package archive: ' . $error);
                 case ZIPARCHIVE::ER_READ:
                     throw new Package_Import_Exception('Package archive read error: ' . $error);
                 case ZIPARCHIVE::ER_SEEK:
                     throw new Package_Import_Exception('Package archive seek error: ' . $error);
                 default:
                     throw new Package_Import_Exception('Unknown error while opening package archive: ' . $error);
             }
         }
         if (is_dir($importPath)) {
             throw new Package_Import_Exception('Import path `' . $importPath . '` already exists');
         }
         if (!@$zip->extractTo($importPath)) {
             throw new Package_Import_Exception('Failed to extract package archive ' . $filename . ' or no permissions to unzip to ' . MODPATH);
         }
         $zip->close();
     }
     kohana::log('debug', 'Dynamically adding `' . $importPath . '` to kohana');
     $loadedModules = Kohana::config('core.modules');
     $modules = array_unique(array_merge($loadedModules, array($importPath)));
     Kohana::config_set('core.modules', $modules);
     Package_Catalog::disableRemote();
     Package_Catalog::buildCatalog();
     Package_Catalog::enableRemote();
     return $importPath;
 }
示例#2
0
 protected function submitReport($report)
 {
     $valid = TRUE;
     $validation = Bluebox_Controller::$validation;
     if (empty($report['issue'])) {
         $validation->add_error('report[issue]', 'Please describe the issue');
         $valid = FALSE;
     }
     if (empty($report['while'])) {
         $validation->add_error('report[while]', 'Please describe the cause');
         $valid = FALSE;
     }
     if (empty($report['contact'])) {
         $validation->add_error('report[contact]', 'Please provide a method to contact you');
         $valid = FALSE;
     }
     if (empty($report['error'])) {
         $validation->add_error('report[error]', 'Please provide the error message');
         $valid = FALSE;
     }
     if (!$valid) {
         return FALSE;
     }
     if (!empty($report['log'])) {
         $filename = Kohana::log_directory() . date('Y-m-d') . '.log' . EXT;
         $offset = -150 * 120;
         $rs = @fopen($filename, 'r');
         $report['log'] = '';
         if ($rs !== FALSE) {
             fseek($rs, $offset, SEEK_END);
             fgets($rs);
             while (!feof($rs)) {
                 $buffer = fgets($rs);
                 $report['log'] .= htmlspecialchars($buffer . "\n");
             }
             fclose($rs);
         }
     }
     $allowStats = Kohana::config('core.anonymous_statistics');
     if (!empty($allowStats)) {
         $report['anonymous_id'] = Kohana::config('core.anonymous_id');
         Package_Catalog::disableRemote();
         Package_Catalog::buildCatalog();
         $report['catalog'] = Package_Catalog::getPackageList();
     }
     try {
         $errorCollector = Kohana::config('errorreporter.collector');
         $this->do_post_request($errorCollector, $report);
     } catch (Exception $e) {
         message::set($e->getMessage());
         $this->returnQtipAjaxForm(NULL);
         return FALSE;
     }
     return TRUE;
 }
示例#3
0
文件: Remote.php 项目: swk/bluebox
 public function createRepo()
 {
     Package_Catalog::disableRemote();
     $repoCatalog = Package_Catalog::getCatalog();
     foreach ($repoCatalog as $key => &$package) {
         unset($package['configure_class']);
         unset($package['directory']);
         unset($package['upgrades']);
         unset($package['downgrades']);
         unset($package['datastore_id']);
         unset($package['status']);
     }
     header('Content-type: text/xml');
     echo self::toXml($repoCatalog);
     flush();
     die;
 }