global with sharing class GSurveysController { public String surveyDelete {get; set;} public String newSurveyName {get; set;} public ListallSurveys {get; set;} public String username {get; set;} public String userId {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 GSurveysController(ApexPages.StandardController stdController){ username = System.Userinfo.getUserId(); setAllSurveys(); setupSitesPicklist(); siteInfo = Site.getDomain(); } private void setupSitesPicklist(){ List sites = new SurveySitesUtil().getSiteList(); if (sites.size() > 0) { subdomain = sites[0].Subdomain; } useTopLevelDomain=false; String pathPrefix; sitesPicklist = new List(); // List sites = [select Name, Subdomain, TopLevelDomain, UrlPathPrefix from Site where Status = 'Active' ]; //setupDomain(sites); setupShowSites(sites.size()); sitesPicklist.add(new Selectoption('--SELECT SITE--',System.Label.LABS_SF_SELECTSITE )); sitesPicklist.add(new Selectoption('Internal',System.Label.LABS_SF_Internal)); for(SurveySitesUtil.SurveySiteInfo s : sites){ if(s.prefix == null) pathPrefix='EMPTY'; else pathPrefix=s.prefix; sitesPicklist.add(new Selectoption(pathPrefix, s.Name)); } } /* private void setupDomain(list sites){ String subD; String tLevelDomain; useTopLevelDomain =false; if(sites!=null && sites.size()>0){ if(sites[0].TopLevelDomain != null && sites[0].TopLevelDomain.length()>0){ subdomain = sites[0].TopLevelDomain; useTopLevelDomain=true; } else subdomain = sites[0].Subdomain; } } */ private void setupShowSites(Integer i){ if(i>0){ showAddSitesMessage = 'false'; } else{ showAddSitesMessage = 'true'; } } private void setAllSurveys(){ List surveys = [Select Id, Name from Survey__c where IsDeleted = false order by Name]; if(allSurveys == null){ allSurveys = new List(); } else{ allSurveys.clear(); } for(Survey__c s : surveys){ allSurveys.add(new miniSurvey(s.Name, s.Id)); } } private static TestMethod void testGSurveysController(){ SurveyTestingUtil tu = new SurveyTestingUtil(); Apexpages.currentPage().getParameters().put('uId', Userinfo.getUserId()); Apexpages.Standardcontroller stc; GSurveysController sc = new GSurveysController(stc); System.assert(sc.allSurveys.size()>0); } public Pagereference makeNewSurvey(){ if(newSurveyName==null){ POD=''; ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, System.Label.LABS_SF_Survey_Name_Is_Required)); return null; } if(surveySite == '--SELECT SITE--'){ POD=''; ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, System.Label.LABS_SF_Survey_Site_Is_Required)); return null; } String urlPrefix = setupUrlPrefix(surveySite); String domain = setupDomainForSurvey(POD); String urlToSave= domain+'/'+urlPrefix+'TakeSurvey?'; if (surveySite == 'Internal') { urlToSave = URL.getSalesforceBaseUrl().toExternalForm() + '/apex/' + 'TakeSurvey?'; } Survey__c s = new Survey__c(); s.Name = newSurveyName; s.URL__c = urlToSave; s.Submit_Response__c = 'empty'; s.thankYouText__c = System.Label.LABS_SF_Survey_Submitted_Thank_you; s.thankYouLink__c='http://www.salesforce.com'; try{ insert s; createAnonSurveyTaker(s.Id); return new Pagereference('/apex/SurveyManagerPage?id='+s.Id); }catch(Exception e){ return null; } } private static void createAnonSurveyTaker(String surveyId){ list sTakers = [select id from SurveyTaker__c where Survey__c = :surveyId and Contact__c = null and Case__c = null]; if(sTakers != null && sTakers.size()>0) return; SurveyTaker__c st = new SurveyTaker__c(); st.Case__c = null; st.Survey__c = surveyId; st.Contact__c = null; insert st; } 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 Pagereference doSurveyReset(){ setAllSurveys(); return null; } private static TestMethod void testMakeNewSurvey(){ SurveyTestingUtil tu = new SurveyTestingUtil(); Apexpages.currentPage().getParameters().put('uId', Userinfo.getUserId()); Apexpages.Standardcontroller stc; GSurveysController sc = new GSurveysController(stc); System.assert(sc.makeNewSurvey()==null); sc.surveySite = '--SELECT SITE--'; sc.newSurveyName = 'TestMakeNewSurvey'; system.assert(sc.makeNewSurvey()==null); sc.surveySite = 'blah'; System.assert(sc.makeNewSurvey()!=null); sc.doSurveyReset(); } public static webservice String deleteSurvey(String deleteId){ Survey__c s= [Select Id, Name from Survey__c where Id =:deleteId]; delete s; return 'true'; } private static TestMethod void testDeleteSurvey(){ SurveyTestingUtil tu = new SurveyTestingUtil(); Apexpages.currentPage().getParameters().put('uId', Userinfo.getUserId()); Apexpages.Standardcontroller stc; GSurveysController sc = new GSurveysController(stc); System.assertEquals(GSurveysController.deleteSurvey(tu.surveyId),'true'); } public Class miniSurvey{ public String sName {get; set;} public String sId {get; set;} public miniSurvey(String miniName, String miniId){ sName = miniName; sId = miniId; } } }