/** * @param string $strPackageName * @param string $strUsername * @param boolean $blnGzCompress * @return string */ public function DownloadPackage($strPackageName, $strUsername, $blnGzCompress) { $objPerson = Person::LoadByUsername($strUsername); $objPackage = Package::Load($this->GetPackageId($strPackageName)); if (!$objPerson) { return null; } if (!$objPackage) { return null; } $objPackageContribution = PackageContribution::LoadByPackageIdPersonId($objPackage->Id, $objPerson->Id); if (!$objPackageContribution) { return null; } if (!$objPackageContribution->CurrentPackageVersion) { return null; } $objPackageContribution->CurrentPackageVersion->DownloadCount++; $objPackageContribution->CurrentPackageVersion->Save(); $objPackageContribution->RefreshStats(); if ($blnGzCompress) { $strPath = $objPackageContribution->CurrentPackageVersion->GetFilePathCompressed(); } else { $strPath = $objPackageContribution->CurrentPackageVersion->GetFilePath(); } header('Content-Length: ' . filesize($strPath)); return file_get_contents($strPath); }
/** * Posts a new version of this package for a given person. * @param Person $objPerson * @param string $strQpmXml * @param QDateTime $dttPostDate optional, uses Now() if not specified * @return PackageContribution */ public function PostContributionVersion(Person $objPerson, $strQpmXml, QDateTime $dttPostDate = null) { // Get PackageContribution $objContribution = PackageContribution::LoadByPackageIdPersonId($this->intId, $objPerson->Id); // Parse the QPM XML try { $objQpmXml = new SimpleXMLElement($strQpmXml); } catch (Exception $objExc) { throw new Exception('Invalid QPM Schema'); } // Compress the XML $strQpmXmlCompressed = gzencode($strQpmXml, 9); // Validate the XML $strQpmVersion = (string) $objQpmXml['version']; if ($strQpmVersion != '1.0') { throw new Exception('Invalid QPM Schema Version: ' . $strQpmVersion); } // Pull out the rest of the data and validate it all $strPackageName = (string) $objQpmXml->package['name']; $strPackageUsername = (string) $objQpmXml->package['user']; $intVersionNumber = (string) $objQpmXml->package['version']; $strQcodoVersionNumber = (string) $objQpmXml->package['qcodoVersion']; $strNotes = (string) $objQpmXml->package->notes; $intNewFileCount = count($objQpmXml->package->newFiles->children()); $intChangedFileCount = count($objQpmXml->package->changedFiles->children()); if ($strPackageName != $this->Token) { throw new Exception('Invalid QPM Package Name: ' . $strPackageName); } if ($strPackageUsername != $objPerson->Username) { throw new Exception('Invalid QPM Package User: '******'Invalid QPM Package Version: ' . $intVersionNumber); } } else { if ($intVersionNumber != 1) { throw new Exception('Invalid QPM Package Version: ' . $intVersionNumber); } } preg_match('/[0-9]+\\.[0-9]+\\.[0-9]+/', $strQcodoVersionNumber, $arrMatches); if ($arrMatches[0] != $strQcodoVersionNumber) { throw new Exception('Invalid Qcodo Version Number in QpmXml: ' . $strQcodoVersionNumber); } // Create PackageContribution (if none exists) if (!$objContribution) { $objContribution = new PackageContribution(); $objContribution->Package = $this; $objContribution->Person = $objPerson; $objContribution->Save(); } $objVersion = new PackageVersion(); $objVersion->PackageContribution = $objContribution; $objVersion->Notes = $strNotes; $objVersion->QcodoVersion = $strQcodoVersionNumber; $objVersion->NewFileCount = $intNewFileCount; $objVersion->ChangedFileCount = $intChangedFileCount; $objVersion->PostDate = $dttPostDate ? $dttPostDate : QDateTime::Now(); $objVersion->DownloadCount = 0; $objVersion->VersionNumber = $intVersionNumber; $objVersion->Save(); $objContribution->CurrentPackageVersion = $objVersion; $objContribution->CurrentPostDate = $objVersion->PostDate; $objContribution->RefreshStats(); $this->LastPostDate = $objVersion->PostDate; $this->LastPostedByPerson = $objPerson; $this->Save(); $objVersion->SaveFile($strQpmXml, $strQpmXmlCompressed); $this->PackageCategory->RefreshStats(); return $objContribution; }
$objPackageCategories = PackageCategory::QueryArray(QQ::NotEqual(QQN::PackageCategory()->Token, 'issues')); while (QDataGen::DisplayWhileTask('Generating QPM Packages...', GENERATE_QPM)) { $objPackage = new Package(); $objPackage->PackageCategory = QDataGen::GenerateFromArray($objPackageCategories); $objPackage->Name = QDataGen::GenerateTitle(1, 3); $objPackage->Token = Package::SanitizeForToken($objPackage->Name); while (Package::LoadByToken($objPackage->Token)) { $objPackage->Name = QDataGen::GenerateTitle(1, 3); $objPackage->Token = Package::SanitizeForToken($objPackage->Name); } $objPackage->Description = QDataGen::GenerateContent(rand(1, 3), 20, 80); $objPackage->Save(); $objPackage->CreateTopicAndTopicLink(Person::Load(rand(1, $intMaxPersonId))); $intContributionCount = rand(1, 10); for ($intContribution = 0; $intContribution < $intContributionCount; $intContribution++) { while (PackageContribution::LoadByPackageIdPersonId($objPackage->Id, $objPerson->Id)) { $objPerson = Person::Load(rand(1, $intMaxPersonId)); } $intVersionCount = rand(1, 4); $dttEndRange = QDataGen::GenerateDateTime($dttStartDate, QDateTime::Now()); $dttEndRange = QDataGen::GenerateDateTime($dttStartDate, $dttEndRange); $dttEndRange = QDataGen::GenerateDateTime($dttStartDate, $dttEndRange); $dttPostDate = QDataGen::GenerateDateTime($dttStartDate, $dttEndRange); for ($intVersion = 0; $intVersion < $intVersionCount; $intVersion++) { // Randomize a Qcodo Version $strQcodoVersion = rand(0, 99) . '.' . rand(0, 99) . '.' . rand(0, 99); $strQcodoVersionType = rand(0, 1) ? 'Development' : 'Stable'; // Randomize a New and Changed file count $intNewFileCount = rand(0, 10); $intChangedFileCount = rand(0, 10); // Randomize Notes