openstackweb/marketplace/code/ui/admin/OpenStackReleaseSupportedApiVersionAdminUI.php
2014-10-31 16:59:18 -03:00

106 lines
3.8 KiB
PHP

<?php
/**
* Copyright 2014 Openstack Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
final class OpenStackReleaseSupportedApiVersionAdminUI
extends DataExtension {
/**
* @param FieldList $fields
* @return FieldList|void
*/
private $versions;
public function updateCMSFields(FieldList $fields) {
$fields->removeByName('ApiVersionID');
$versions = OpenStackApiVersion::get()->map('ID', 'Version');
$ddl = new DropdownField('ApiVersionID', 'API Version', $versions);
$ddl->setEmptyString('--Select An API Version --');
$fields->insertAfter($ddl,'OpenStackComponentID');
$versions = array();
foreach(OpenStackComponent::get()->filter('SupportsVersioning',true) as $component){
foreach($component->getVersions() as $version){
if(!array_key_exists(intval($component->getIdentifier()),$versions)){
$versions[intval($component->getIdentifier())] = array();
}
array_push($versions[intval($component->getIdentifier())],array('value' => intval($version->getIdentifier()), 'text' => $version->getVersion()));
}
}
$json_data = json_encode($versions);
$script = <<<JS
<script>
var versions = {$json_data};
(function($) {
var ddl_component = $('#Form_ItemEditForm_OpenStackComponentID');
var ddl_versions = $('#Form_ItemEditForm_ApiVersionID');
ddl_component.change(function(event){
var component_id = $(this).val();
var component_versions = versions[component_id];
ddl_versions.empty(); //remove all child nodes
ddl_versions.html('');
ddl_versions.append("<option value='' selected='selected'>-- Please Select --</option>");
$.each(component_versions, function (i, item) {
ddl_versions.append($('<option>', {value: item.value,text : item.text}));
});
ddl_versions.trigger('liszt:updated');
});
var current_component = ddl_component.val();
if(current_component!=''){
var current_version = ddl_versions.val();
var component_versions = versions[current_component];
ddl_versions.empty(); //remove all child nodes
ddl_versions.html('');
ddl_versions.append("<option value='' selected='selected'>-- Please Select --</option>");
$.each(component_versions, function (i, item) {
ddl_versions.append($('<option>', {value: item.value,text : item.text}));
});
ddl_versions.val(current_version);
ddl_versions.trigger('liszt:updated');
}
})(jQuery);</script>
JS;
$fields->add(new LiteralField('js_data', $script));
$fields->removeByName('OpenStackComponentID');
//kludge; get parent id from url....
$url = preg_split('/\//', $_REQUEST['url']);
$release_id = (int)$url[8];
$ddl = new DropdownField('OpenStackComponentID', 'OpenStack Component', OpenStackComponent::get()->filter('SupportsVersioning',true)->innerJoin('OpenStackRelease_OpenStackComponents',"OpenStackRelease_OpenStackComponents.OpenStackComponentID = OpenStackComponent.ID AND OpenStackReleaseID = {$release_id} ")->map('ID','Name'));
$ddl->setEmptyString('--Select A OS Component--');
$fields->insertBefore($ddl,'ApiVersionID');
return $fields;
}
public function onBeforeWrite(){
//create group here?
parent::onBeforeWrite();
}
function getCMSValidator()
{
return $this->getValidator();
}
function getValidator()
{
$validator= new RequiredFields(array('OpenStackComponentID','ApiVersionID'));
return $validator;
}
}