public function getAllowedComponents()
 {
     $release_id = intval($this->owner->ReleaseID);
     if ($release_id > 0) {
         return OpenStackRelease::get()->byID($release_id)->OpenStackComponents();
     }
     return new ArrayList();
 }
 /**
  * @param string $name
  * @param string $release_number
  * @param DateTime $release_date
  * @param string $release_notes_url
  * @return IOpenStackRelease
  */
 public function buildOpenStackRelease($name, $release_number, DateTime $release_date, $release_notes_url)
 {
     $release = new OpenStackRelease();
     $release->setName($name);
     $release->setReleaseNumber($release_number);
     $release->setReleaseDate($release_date);
     $release->setReleaseNotesUrl($release_notes_url);
     return $release;
 }
 public function getComponentsbyRelease(SS_HTTPRequest $request)
 {
     $release_id = intval($request->param('RELEASE_ID'));
     $term = Convert::raw2sql($request->getVar('term'));
     $adoption = intval(Convert::raw2sql($request->getVar('adoption')));
     $maturity = intval(Convert::raw2sql($request->getVar('maturity')));
     $age = intval(Convert::raw2sql($request->getVar('age')));
     $sort = Convert::raw2sql($request->getVar('sort'));
     $sort_dir = '';
     if (!empty($sort)) {
         $sort = explode(':', $sort);
         $sort_dir = $sort[1];
         $sort = $sort[0];
     }
     $release = OpenStackRelease::get()->byID($release_id);
     if (is_null($release)) {
         return $this->notFound();
     }
     list($core_components, $optional_components) = $this->manager->getComponents($release, $term, $adoption, $maturity, $age, $sort, $sort_dir);
     $res = array('core_components' => $core_components, 'optional_components' => $optional_components);
     return $this->ok($res);
 }
 private function getStackAnalytics(OpenStackRelease $release)
 {
     $timeline_stats_url_template = "http://stackalytics.com/api/1.0/stats/timeline?module=%s-group&release=%s";
     $company_contrib_url_template = "http://stackalytics.com/api/1.0/stats/companies?module=%s-group&release=%s";
     $engineers_contrib_url_template = "http://stackalytics.com/api/1.0/stats/engineers?module=%s-group&release=%s";
     $components = $release->OpenStackComponents();
     foreach ($components as $c) {
         $timeline_json = null;
         $company_contrib_json = null;
         $engineers_contrib_json = null;
         $response = null;
         try {
             $response = $this->client->get(sprintf($timeline_stats_url_template, strtolower($c->CodeName), strtolower($release->Name)));
         } catch (Exception $ex) {
             SS_Log::log($ex->getMessage(), SS_Log::WARN);
         }
         if (!is_null($response) && $response->getStatusCode() === 200) {
             $body = $response->getBody();
             if (!is_null($body)) {
                 $content = $body->getContents();
                 if (!empty($content)) {
                     $timeline_json = $content;
                 }
             }
         }
         try {
             $response = $this->client->get(sprintf($company_contrib_url_template, strtolower($c->CodeName), strtolower($release->Name)));
         } catch (Exception $ex) {
             SS_Log::log($ex->getMessage(), SS_Log::WARN);
         }
         if (!is_null($response) && $response->getStatusCode() === 200) {
             $body = $response->getBody();
             if (!is_null($body)) {
                 $content = $body->getContents();
                 if (!empty($content)) {
                     $company_contrib_json = $content;
                 }
             }
         }
         try {
             $response = $this->client->get(sprintf($engineers_contrib_url_template, strtolower($c->CodeName), strtolower($release->Name)));
         } catch (Exception $ex) {
             SS_Log::log($ex->getMessage(), SS_Log::WARN);
         }
         if (!is_null($response) && $response->getStatusCode() === 200) {
             $body = $response->getBody();
             if (!is_null($body)) {
                 $content = $body->getContents();
                 if (!empty($content)) {
                     $engineers_contrib_json = $content;
                 }
             }
         }
         $components->add($c, array('ContributionsJson' => $timeline_json, 'MostActiveContributorsByCompanyJson' => $company_contrib_json, 'MostActiveContributorsByIndividualJson' => $engineers_contrib_json));
     }
 }
 public function getCurrentRelease()
 {
     $request = $this->request;
     $release_id = Convert::raw2sql($request->param('RELEASE_ID'));
     return OpenStackRelease::get()->filter('Name', ucfirst($release_id))->first();
 }
 /**
  * @param IOpenStackRelease $release
  * @return IOpenStackRelease
  */
 public function cloneRelease(IOpenStackRelease $release)
 {
     return $this->tx_manager->transaction(function () use($release) {
         $clone = OpenStackRelease::create();
         $index = '';
         $idx = 0;
         do {
             $proposed_name = $release->Name . '-CLONE' . $index;
             ++$idx;
             $index = '-' . $idx;
         } while (intval(OpenStackRelease::get()->filter('Name', $proposed_name)->count()) > 0);
         $clone->Name = $proposed_name;
         $clone->Status = 'Future';
         $clone->write();
         //components
         foreach ($release->OpenStackComponents() as $component) {
             $clone->OpenStackComponents()->add($component);
         }
         //supported apis
         foreach ($release->SupportedApiVersions() as $api) {
             $new_api = OpenStackReleaseSupportedApiVersion::create();
             $new_api->OpenStackComponentID = $api->OpenStackComponentID;
             $new_api->ApiVersionID = $api->ApiVersionID;
             $new_api->ReleaseVersion = $api->ReleaseVersion;
             $new_api->ReleaseID = $clone->ID;
             $new_api->write();
         }
         //sample configurations
         foreach ($release->SampleConfigurationTypes() as $config_type) {
             $new_config_type = OpenStackSampleConfigurationType::create();
             $new_config_type->Type = $config_type->Type;
             $new_config_type->Order = $config_type->Order;
             $new_config_type->IsDefault = $config_type->IsDefault;
             $new_config_type->write();
             foreach ($config_type->SampleConfigurations() as $sample) {
                 $new_sample = OpenStackSampleConfig::create();
                 $new_sample->Title = $sample->Title;
                 $new_sample->Summary = $sample->Summary;
                 $new_sample->Description = $sample->Description;
                 $new_sample->IsDefault = $sample->IsDefault;
                 $new_sample->Order = $sample->Order;
                 $new_sample->CuratorID = $sample->CuratorID;
                 $new_sample->ReleaseID = $clone->ID;
                 $new_sample->write();
                 foreach ($sample->RelatedNotes() as $note) {
                     $new_note = OpenStackSampleConfigRelatedNote::create();
                     $new_note->Title = $note->Title;
                     $new_note->Link = $note->Link;
                     $new_note->Order = $note->Order;
                     $new_note->write();
                     $new_sample->RelatedNotes()->add($new_note);
                 }
                 foreach ($sample->OpenStackComponents() as $sample_comp) {
                     $new_sample->OpenStackComponents()->add($sample_comp, array('Order' => $sample_comp->Order));
                 }
                 $new_config_type->SampleConfigurations()->add($new_sample);
             }
             $clone->SampleConfigurationTypes()->add($new_config_type);
         }
         return $clone;
     });
 }