public static function from_upload(array $data, $key_mode = false)
 {
     $create = array();
     $file = $data['file'];
     $user = $data['user'];
     if ($key_mode) {
         $keys = collect(function ($key) {
             return $key->key;
         }, Pki::find('all', array('select' => '`key`', 'conditions' => array('user_id' => $user->id))));
         $sig = $data['sig'];
         if (!static::verify($file, $sig, $keys)) {
             throw new NimbleException('Invalid package signature');
         }
     }
     $package_data = new PackageExtractor($file);
     if ($user->pear_farm_url() !== $package_data->data['channel']) {
         throw new Exception('Package channel ' . $package_data->data['channel'] . ' does not match ' . $user->pear_farm_url());
     }
     $name = $package_data->data['name'];
     $version = $package_data->data['version']['release'];
     $stability = $package_data->data['stability']['release'];
     if (!Package::exists(array('name' => $name, 'user_id' => $user->id))) {
         $package = new Package(array('name' => $name, 'user_id' => $user->id, 'category_id' => Category::find_by_name('Default')->id));
     } else {
         $package = Package::find('first', array('conditions' => array('name' => $name, 'user_id' => $user->id)));
     }
     if (!$package->new_record && Version::exists(array('version' => $version, 'package_id' => $package->id))) {
         throw new NimbleException("There is already a {$version}. You cannot replace existing packages. Please bump the version number and try again." . " You can delete a version from the web interface if needed.");
     }
     $package->move_uploaded_file($file, $version);
     $type = VersionType::find_by_name($stability);
     $package->versions = array(array('raw_xml' => $package_data->get_package_xml(), 'version' => $version, 'meta' => serialize($package_data->data), 'version_type_id' => $type->id, 'summary' => $package_data->data['summary'], 'description' => $package_data->data['description'], 'min_php' => $package_data->data['dependencies']['required']['php']['min']));
     $package->save();
     return $package;
 }
 public function packagesinfo()
 {
     $this->category = Category::find_by_name($_GET['name']);
     $this->packages = Package::find('all', array('conditions' => array('category_id' => $this->category->id, 'user_id' => $this->user->id)));
     $date = DateHelper::from_db($this->packages->first()->updated_at);
     $date = date(DATE_RFC822, $date);
     $this->header("Last-Modified: {$date}");
 }
 public function packagesinfo()
 {
     $this->category = Category::find_by_name($_GET['name']);
     $this->packages = Package::find('all', array('conditions' => array('category_id' => $this->category->id, 'user_id' => $this->user->id)));
 }