• Admin User 5417
  • 0 Points
  • Member since 2016

  • Chatter
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 2
  • 0
I'm trying to create a visual force page that has only 1 line for getting the contact name.
<apex:page sidebar="false" showHeader="false" cache="false" standardStylesheets="false" docType="html-5.0" standardController="Contact" > 
<apex:pageBlock >
 <h1>Hello {!Contact.name}</h1> 

This page is in a SF.com site that i'v created.
the problem is that i'm getting an unauthorized message that public user cant access for this page. It happens because i'm trying to access the contact object. I believe its admin configuration.
Can someone help me with that by writing the steps for getting public access for this page and the contact object?
Go to ->
Do that
and so ...
Note! please don't send any URL referrals for this, Thanx :)
I'v created a class in sandbox, and it works well, but when i'm tring to deploy it to production, i get a low code covarage. I tried everything i know but cat find a solution, Heres the code, Any help?
public Class CandidateFileUploads_Ver1{

public String parentId ;
public String idxVal {get;set;}
public Map<String, Attachment> attachments {get;set;}
public Map<String, Attachment> attachmentsDup {get;set;}

public Boolean validateUser {get;set;}
public String multipulDocs {get;set;}
public String userMessage {get;set;}

private static final Map<String, String> descriptionNameMap = new Map<String, String>{
'Upload a scan of the Passport'=>'Passport',
'Upload a Resume (CV)'=>'Resume (CV)'};

private static final Map<String, String> descriptionCheckFieldMap = new Map<String, String>{
'Upload a scan of the Passport'=>'Passport_Attached__c',
'Upload a Resume (CV)'=>'CV_Attached__c'};

public CandidateFileUploads_Ver1(ApexPages.StandardController controller){

    idxVal = '';
    validateUser = true;
    multipulDocs = System.Label.multiple_docs;
    userMessage = '';

    attachments = new Map<String, Attachment>();       
    attachmentsDup = new Map<String, Attachment>();  

    parentId = System.currentPageReference().getParameters().get('Id');
    //parentId = '0034E00000FVJzA';
    List<Attachment> existingAttachments = fetchAllAttachments(parentId);//get all attachements for thew user

    for(String key :descriptionNameMap.keySet()){
        String kokp = descriptionCheckFieldMap.get(key);
        attachments.put(key.toLowerCase(), new Attachment(parentId=parentId, Description=key, body=null,Name = kokp )) ;

    for(Attachment attach :existingAttachments){
        attach.body = null;
        attachments.put(attach.Description.toLowerCase(), attach);             

 public void checkUserValid(){
    String hours = System.Label.hours;
    String whitelist = System.Label.whitelist;
    ID pId = System.currentPageReference().getParameters().get('Id');
    Boolean validateUser = true;
    String userMessage;

    Contact parenter = new Contact(Id=pId);
     // Validate Proccess status: get proccess string status
            String getStatus = parenter.Process_Status__c;
            String[] whitelistArr = whitelist.split(',');// split proccess string

             Boolean checkWhiteList = false;
             for(String val : whitelistArr){
                 if(val == getStatus) {
                     checkWhiteList = true;

             if(validateUser != checkWhiteList){
                 validateUser = false;
                 userMessage = System.Label.error_not_premitted;

    //Validate Dates
            //Datetime  getLinktimestamp = (Datetime) contactSObject.get('linktimestamp__c');
            Datetime  getLinktimestamp = parenter.linktimestamp__c;
            Datetime  getValidTime = getLinktimestamp.addHours(Integer.valueof(hours.trim())); //add 48 hours
            Datetime timeNow = System.now();

             if(getValidTime < timeNow){//if if more then 48 hours
                 validateUser = false;
                 userMessage = System.Label.error_expired;

 public Datetime  getLinktimestamp(){
    ID pId = System.currentPageReference().getParameters().get('Id');
    Datetime  accts = [SELECT linktimestamp__c FROM Contact WHERE Id=:pId].linktimestamp__c;
    return accts;

public List<Contact> contactObj(){
    ID pId = System.currentPageReference().getParameters().get('Id');

    sObject mySObject =[SELECT linktimestamp__c,Process_Status__c FROM Contact WHERE Id=:pId];
    //Datetime llli = s.linktimestamp__c;
    String strObjectName = String.valueOf( mySObject.get('linktimestamp__c') );

    List<Contact> obj = [SELECT linktimestamp__c,Process_Status__c FROM Contact WHERE Id=:pId];
    return obj;

public void uploadAttachment(){     
    List<Attachment> uploads = new List<Attachment>() ;
    List<Attachment> deletes = new List<Attachment>() ;

        for(integer i = 0 ; i < attachments.values().size() ; i++){

            Attachment attach = attachments.values()[i] ;
            if(attach.parentId == NULL){
                        attach.parentId = System.currentPageReference().getParameters().get('Id');
            //this is a file that was uploaded now
            if(attach.body != NULL){
                //remove current attachement before uploading a new one
                if(attach.Id != NULL){

                attach.Name = renameFile(attach.Name, attach.Description);
                uploads.add(attach) ;

            delete deletes ;

            for(Attachment atchmnt :uploads){
                atchmnt.Id = null;   

            insert uploads;

            Contact parent = new Contact(Id=parentId);

            for(Attachment attach :getUpdatedAttachments(uploads).values()){
                attach.body = null;
                attachments.put(attach.Description.toLowerCase(), attach);

                parent.put(descriptionCheckFieldMap.get(attach.Description), true);                    

            update parent;

            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.info,'Attachment upload Successfully');

    catch(exception e){
        ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR,'An Error occured when uploading attachment');

public void removeRow(){
    Attachment a = attachments.get(idxVal.toLowerCase());

    Contact parent = new Contact(Id=parentId);
    parent.put(descriptionCheckFieldMap.get(a.Description), false); 

    delete a;
    update parent;

    system.debug('attachments before: ' + attachments);
    attachments.put(a.Description.toLowerCase(), new Attachment(parentId = parentId, description = a.description, body=null));
    system.debug('attachments after: ' + attachments);

private static String renameFile(String fileName, String description){
    String newName = descriptionNameMap.get(description);
    if(String.isNotBlank(fileName) && fileName.contains('.')){
        newName += fileName.substring(fileName.lastIndexOf('.'), fileName.length());

    return newName;

private static Map<String,Attachment> getUpdatedAttachments(List<Attachment> attachList){

    Map<String,Attachment> attMap = new Map<String,Attachment>();

    for(Attachment att : [SELECT Id,Name,Description
                                      FROM Attachment
                                      WHERE Id = :attachList]){
        attMap.put(att.Description.toLowerCase(), att) ;       

    return attMap;

public List<Attachment> fetchAllAttachments(String parentId){

    return [SELECT Id,Name,Description,parentId
            FROM Attachment 
            WHERE ParentId =: parentId 
            AND Description IN :descriptionNameMap.keySet()];