/** * 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. **/ jQuery(document).ready(function($){ var form = $("#public_cloud_form"); if(form.length > 0){ //main form validation //main form form.marketplace_type_header(); $("#components_form").components(); $("#hypervisors_form").hypervisors(); $("#guest_os_form").guest_os(); $("#videos-form").videos(); $("#support-channels-form").support_channels(); $("#additional-resources-form").additional_resources(); $("#data-centers-form").datacenter_locations(); $('#pricing_schema_form').pricing_schemas(); //if we are editing data, load it ... if(typeof(public_cloud)!=='undefined'){ //populate form and widgets $("#company_id",form).val(public_cloud.company_id); $("#company_id").trigger("chosen:updated"); $("#name",form).val(public_cloud.name); $("#overview",form).val(public_cloud.overview); $("#call_2_action_uri",form).val(public_cloud.call_2_action_uri); if(public_cloud.active){ $('#active',form).prop('checked',true); } else{ $('#active',form).prop('checked',false); } //this is a draft if (typeof(public_cloud.live_service_id) != 'undefined') { $("#id",form).val(public_cloud.id); $("#live_id",form).val(public_cloud.live_service_id); } else { //its not a draft is the live version, so we remove the id and set the live_service_id $("#live_id",form).val(public_cloud.id); $('.publish-public-cloud').prop('disabled',true); } //reload widgets $("#components_form").components('load',public_cloud.capabilities); if(public_cloud.capabilities.length>0){ $('#pricing_schema_form').pricing_schemas('load',public_cloud.capabilities[0].pricing_schemas); } $("#hypervisors_form").hypervisors('load',public_cloud.hypervisors); $("#guest_os_form").guest_os('load',public_cloud.guest_os); $("#videos-form").videos('load',public_cloud.videos); $("#support-channels-form").support_channels('load',public_cloud.regional_support); $("#additional-resources-form").additional_resources('load',public_cloud.additional_resources); $("#data-centers-form").datacenter_locations('load',public_cloud.data_centers); } $('.save-public-cloud').click(function(event){ var button = $(this); if(button.prop('disabled')){ return false; } event.preventDefault(); event.stopPropagation(); var form_validator = form.marketplace_type_header('getFormValidator'); form_validator.settings.ignore = ".add-comtrol"; var is_valid = form.valid(); if(!is_valid) return false; form_validator.resetForm(); var additional_resources = $("#additional-resources-form").additional_resources('serialize'); var regional_support = $("#support-channels-form").support_channels('serialize'); var capabilities = $("#components_form").components('serialize'); var guest_os = $("#guest_os_form").guest_os('serialize'); var hyper_visors = $("#hypervisors_form").hypervisors('serialize'); var videos = $("#videos-form").videos('serialize'); var data_centers = $("#data-centers-form").datacenter_locations('serialize'); var pricing_schemas = $("#pricing_schema_form").pricing_schemas('serialize'); if(additional_resources !== false && regional_support !== false && capabilities !== false && guest_os !== false && hyper_visors !== false && videos !== false && data_centers !== false && pricing_schemas !== false ){ ajaxIndicatorStart('saving data.. please wait..'); //create public_cloud object and POST it var public_cloud = {}; public_cloud.id = parseInt($("#id",form).val()); public_cloud.live_service_id = parseInt($("#live_id",form).val()); public_cloud.company_id = parseInt($("#company_id",form).val()); public_cloud.name = $("#name",form).val(); public_cloud.overview = $("#overview",form).val(); public_cloud.call_2_action_uri = $("#call_2_action_uri",form).val(); public_cloud.active = $('#active',form).is(":checked"); public_cloud.videos = videos; public_cloud.hypervisors = hyper_visors; public_cloud.guest_os = guest_os; public_cloud.capabilities = capabilities; for(var i in public_cloud.capabilities){ var c = public_cloud.capabilities[i]; c.pricing_schemas = pricing_schemas; } public_cloud.regional_support = regional_support; public_cloud.additional_resources = additional_resources; public_cloud.data_centers = data_centers; public_cloud.published = 0; var type = public_cloud.id > 0 ?'PUT':'POST'; $('.save-public-cloud').prop('disabled',true); $(this).geocoding({ requests:public_cloud.data_centers.locations, buildGeoRequest:function(location){ var restrictions = { locality: location.city, country:location.country }; if(location.state!=''){ restrictions.administrativeArea = location.state; } var request = {componentRestrictions:restrictions}; return request; }, postProcessRequest:function(location, lat, lng){ location.lat = lat; location.lng = lng; }, processFinished:function(){ $.ajax({ type: type, url: 'api/v1/marketplace/public-clouds', data: JSON.stringify(public_cloud), contentType: "application/json; charset=utf-8", dataType: "json", success: function (data,textStatus,jqXHR) { $('.publish-public-cloud').prop('disabled',false); $('.save-public-cloud').prop('disabled',false); window.location = listing_url; ajaxIndicatorStop(); }, error: function (jqXHR, textStatus, errorThrown) { ajaxIndicatorStop(); $('.save-public-cloud').prop('disabled',false); ajaxError(jqXHR, textStatus, errorThrown); } }); }, cancelProcess:function(){ ajaxIndicatorStop(); $('.save-public-cloud').prop('disabled',false); }, errorMessage:function(location){ return 'data center location: address ( city:'+location.city+',state: '+location.state+', country:'+location.country+' )'; } }); } return false; }); $('.preview-public_cloud').click(function(event){ var button = $(this); if(button.prop('disabled')){ return false; } event.preventDefault(); event.stopPropagation(); var form_validator = form.marketplace_type_header('getFormValidator'); form_validator.settings.ignore = ".add-comtrol"; var is_valid = form.valid(); if(!is_valid) return false; form_validator.resetForm(); var additional_resources = $("#additional-resources-form").additional_resources('serialize'); var regional_support = $("#support-channels-form").support_channels('serialize'); var capabilities = $("#components_form").components('serialize'); var guest_os = $("#guest_os_form").guest_os('serialize'); var hyper_visors = $("#hypervisors_form").hypervisors('serialize'); var videos = $("#videos-form").videos('serialize'); var data_centers = $("#data-centers-form").datacenter_locations('serialize'); var pricing_schemas = $("#pricing_schema_form").pricing_schemas('serialize'); var is_pdf = $(this).hasClass('pdf'); if(additional_resources !== false && regional_support !== false && capabilities !== false && guest_os !== false && hyper_visors !== false && videos !== false && data_centers !== false && pricing_schemas !== false ){ ajaxIndicatorStart('saving data.. please wait..'); //create public_cloud object and POST it var public_cloud = {}; public_cloud.id = parseInt($("#id",form).val()); public_cloud.live_service_id = parseInt($("#live_id",form).val()); public_cloud.company_id = parseInt($("#company_id",form).val()); public_cloud.name = $("#name",form).val(); public_cloud.overview = $("#overview",form).val(); public_cloud.call_2_action_uri = $("#call_2_action_uri",form).val(); public_cloud.active = $('#active',form).is(":checked"); public_cloud.videos = videos; public_cloud.hypervisors = hyper_visors; public_cloud.guest_os = guest_os; public_cloud.capabilities = capabilities; for(var i in public_cloud.capabilities){ var c = public_cloud.capabilities[i]; c.pricing_schemas = pricing_schemas; } public_cloud.regional_support = regional_support; public_cloud.additional_resources = additional_resources; public_cloud.data_centers = data_centers; public_cloud.published = 0; var type = public_cloud.id > 0 ?'PUT':'POST'; $('.save-public-cloud').prop('disabled',true); $(this).geocoding({ requests:public_cloud.data_centers.locations, buildGeoRequest:function(location){ var restrictions = { locality: location.city, country:location.country }; if(location.state!=''){ restrictions.administrativeArea = location.state; } var request = {componentRestrictions:restrictions}; return request; }, postProcessRequest:function(location, lat, lng){ location.lat = lat; location.lng = lng; }, processFinished:function(){ $.ajax({ type: type, url: 'api/v1/marketplace/public-clouds', data: JSON.stringify(public_cloud), contentType: "application/json; charset=utf-8", dataType: "json", success: function (data,textStatus,jqXHR) { $('.publish-public-cloud').prop('disabled',false); $('.save-public-cloud').prop('disabled',false); ajaxIndicatorStop(); var draft_id = (public_cloud.id > 0) ? public_cloud.id : data; $("#id",form).val(draft_id); if (is_pdf) { window.location = product_url+'/'+draft_id+'/draft_pdf'; } else { window.open(product_url+'/'+draft_id+'/draft_preview','_blank'); } }, error: function (jqXHR, textStatus, errorThrown) { ajaxIndicatorStop(); $('.save-public-cloud').prop('disabled',false); ajaxError(jqXHR, textStatus, errorThrown); } }); }, cancelProcess:function(){ ajaxIndicatorStop(); $('.save-public-cloud').prop('disabled',false); }, errorMessage:function(location){ return 'data center location: address ( city:'+location.city+',state: '+location.state+', country:'+location.country+' )'; } }); } return false; }); $('.publish-public-cloud').click(function(event){ var button = $(this); if(button.prop('disabled')){ return false; } event.preventDefault(); event.stopPropagation(); var form_validator = form.marketplace_type_header('getFormValidator'); form_validator.settings.ignore = ".add-comtrol"; var is_valid = form.valid(); if(!is_valid) return false; form_validator.resetForm(); var additional_resources = $("#additional-resources-form").additional_resources('serialize'); var regional_support = $("#support-channels-form").support_channels('serialize'); var capabilities = $("#components_form").components('serialize'); var guest_os = $("#guest_os_form").guest_os('serialize'); var hyper_visors = $("#hypervisors_form").hypervisors('serialize'); var videos = $("#videos-form").videos('serialize'); var data_centers = $("#data-centers-form").datacenter_locations('serialize'); var pricing_schemas = $("#pricing_schema_form").pricing_schemas('serialize'); if(additional_resources !== false && regional_support !== false && capabilities !== false && guest_os !== false && hyper_visors !== false && videos !== false && data_centers !== false && pricing_schemas !== false ){ ajaxIndicatorStart('saving data.. please wait..'); //create public_cloud object and POST it var public_cloud = {}; public_cloud.id = parseInt($("#id",form).val()); public_cloud.live_service_id = parseInt($("#live_id",form).val()); public_cloud.company_id = parseInt($("#company_id",form).val()); public_cloud.name = $("#name",form).val(); public_cloud.overview = $("#overview",form).val(); public_cloud.call_2_action_uri = $("#call_2_action_uri",form).val(); public_cloud.active = $('#active',form).is(":checked"); public_cloud.videos = videos; public_cloud.hypervisors = hyper_visors; public_cloud.guest_os = guest_os; public_cloud.capabilities = capabilities; for(var i in public_cloud.capabilities){ var c = public_cloud.capabilities[i]; c.pricing_schemas = pricing_schemas; } public_cloud.regional_support = regional_support; public_cloud.additional_resources = additional_resources; public_cloud.data_centers = data_centers; public_cloud.published = 0; var url = 'api/v1/marketplace/public-clouds/'+public_cloud.live_service_id; $('.publish-public-cloud').prop('disabled',true); $(this).geocoding({ requests:public_cloud.data_centers.locations, buildGeoRequest:function(location){ var restrictions = { locality: location.city, country:location.country }; if(location.state!=''){ restrictions.administrativeArea = location.state; } var request = {componentRestrictions:restrictions}; return request; }, postProcessRequest:function(location, lat, lng){ location.lat = lat; location.lng = lng; }, processFinished:function(){ $.ajax({ type: 'PUT', url: url, data: JSON.stringify(public_cloud), contentType: "application/json; charset=utf-8", dataType: "json", success: function (data,textStatus,jqXHR) { window.location = listing_url; ajaxIndicatorStop(); }, error: function (jqXHR, textStatus, errorThrown) { ajaxIndicatorStop(); $('.publish-public-cloud').prop('disabled',false); ajaxError(jqXHR, textStatus, errorThrown); } }); }, cancelProcess:function(){ ajaxIndicatorStop(); $('.publish-public-cloud').prop('disabled',false); }, errorMessage:function(location){ return 'data center location: address ( city:'+location.city+',state: '+location.state+', country:'+location.country+' )'; } }); } return false; }); } });