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; }
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; }
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; }