public with sharing class viewShareSurveyComponentController { public Id surveyId {get; set{ this.surveyId = value; init(); } } public Survey__c mySurvey {get;set;} public List urlType {get;set;} public String selectedURLType {get;set;} public String POD {get; set;} public List sitesPicklist {get; set;} public String surveySite {get; set;} public String showAddSitesMessage {get; set;} private String subdomain; private boolean useTopLevelDomain; public String siteInfo {get; set;} public String surveyURL{ get{ if (selectedURLType == 'Email Link, Anonymous' || selectedURLType == 'Chatter') { return 'id=' + surveyId + '&cId=none&caId=none'; } else if (selectedURLType == 'Email Link w/ Contact Merge') { return 'id=' + surveyId + '&cId={!Contact.Id}&caId=none'; } else { return 'id=' + surveyId + '&cId={!Contact.Id}&caId={!Case.id}'; } } set; } public String surveyURLBase{ get{ if(surveySite == '--SELECT SITE--'){ POD=''; return null; } String urlPrefix = setupUrlPrefix(surveySite); String domain = setupDomainForSurvey(POD); String urlToSave= domain+'/'+urlPrefix+'TakeSurvey?'; if (surveySite == 'Internal' || selectedURLType == 'Chatter') { urlToSave = URL.getSalesforceBaseUrl().toExternalForm() + '/apex/' + 'TakeSurvey?'; } return urlToSave; } set; } public viewShareSurveyComponentController() { urlType = new List(); urlType.add(new SelectOption('Email Link w/ Contact Merge',System.Label.LABS_SF_Email_Link_w_Contact_Merge)); urlType.add(new SelectOption('Email Link w/ Contact & Case Merge',System.Label.LABS_SF_Email_Link_w_Contact_Case_Merge)); urlType.add(new SelectOption('Email Link, Anonymous',System.Label.LABS_SF_Email_Link_Anonymous)); urlType.add(new SelectOption('Chatter',System.Label.LABS_SF_Chatter)); selectedURLType = 'Chatter'; setupPOD(); setupSitesPicklist(); siteInfo = Site.getDomain(); init(); } private void setupPOD() { String urlToSplit = URL.getSalesforceBaseUrl().toExternalForm(); List splitURL = urlToSplit.split('\\.'); Integer loc = -1; Integer i; for (i = 0; i < splitURL.size(); i++) { if(splitURL.get(i) == 'visual' || splitURL.get(i) == 'salesforce'){ loc = i - 1; break; } } if (loc == -1) { pod = 'NO_POD'; return; } if(splitURL.get(loc + 1)=='visual') { pod = splitURL.get(loc); } else { pod = 'NO_POD'; } } private void setupSitesPicklist(){ List sites = new SurveySitesUtil().getSiteList(); if (sites.size() > 0) { subdomain = sites[0].Subdomain; } useTopLevelDomain=false; String pathPrefix; sitesPicklist = new List(); sitesPicklist.add(new Selectoption('Internal',System.Label.LABS_SF_Internal)); for(SurveySitesUtil.SurveySiteInfo current : sites){ if(current.prefix == null) pathPrefix='EMPTY'; else pathPrefix=current.prefix; sitesPicklist.add(new Selectoption(pathPrefix, current.Name)); } surveySite = 'Internal'; } private String setupDomainForSurvey(String pod){ if(pod != 'NO_POD' && !useTopLevelDomain && checkSubdomain(subdomain)){ return 'http://'+subdomain+'.'+pod+'.force.com'; } else if(pod != 'NO_POD' && useTopLevelDomain && checkSubdomain(subdomain)){ return 'http://'+subdomain+'.'+pod; } else if(useTopLevelDomain) { return 'http://'+subdomain; } else{ return 'http://'+subdomain+'.force.com'; } } private boolean checkSubdomain(String subdomain){ if(subdomain == null) return false; else if (subdomain.contains('developer-edition')) return true; else return false; } private String setupUrlPrefix(String site){ if(site == null || site=='EMPTY') return ''; else return site+'/'; } public void init() { if (surveyId != null) { mySurvey = [Select Id, Name, Survey_Header__c, thankYouText__c, thankYouLink__c, URL__c FROM Survey__c where Id=:surveyId]; } } private static testmethod void testShareSurvey() { Survey__c mySurvey = new Survey__c(); mySurvey.Submit_Response__c = 'empty'; insert mySurvey; viewShareSurveyComponentController vss = new viewShareSurveyComponentController(); vss.surveyId = mySurvey.Id; vss.selectedURLType = 'Chatter'; System.assertEquals(URL.getSalesforceBaseUrl().toExternalForm() + '/apex/' + 'TakeSurvey?', vss.surveyURLBase); System.assertEquals('id=' + mySurvey.Id + '&cId=none&caId=none', vss.surveyURL); vss.selectedURLType = 'Email Link w/ Contact Merge'; System.assertEquals('id=' + mySurvey.Id + '&cId={!Contact.Id}&caId=none', vss.surveyURL); vss.selectedURLType = 'Email Link w/ Contact & Case Merge'; System.assertEquals('id=' + mySurvey.Id + '&cId={!Contact.Id}&caId={!Case.id}', vss.surveyURL); System.assertEquals(true, vss.checkSubdomain('test.developer-edition.salesforce')); System.assertEquals(false, vss.checkSubdomain(null)); System.assertEquals(false, vss.checkSubdomain('test.salesforce.com')); System.assertEquals('', vss.setupUrlPrefix('EMPTY')); vss.surveySite = '--SELECT SITE--'; System.assertEquals(null, vss.surveyURLBase); } }