src/Services/ApplicationService.php
public function getRequiredFields($jobId)
    {
        $job = $this->_jobApiService->getJob($jobId, true);
        $jobHash = JsonHelper::decodeToHash($job);
        $requiredFields = array();
        
        foreach ($jobHash['questions'] as $question) {
            if ($question['required']) {
                $questionFields = array();
                foreach ($question['fields'] as $field) {
                    $questionFields[] = $field['name'];
                }
                $requiredFields[$question['label']] = $questionFields;
            }
        }
        
        return $requiredFields;
    }
public function getRequiredFields($jobId)
    {
        $job = $this->_jobApiService->getJob($jobId, true);
        $jobHash = JsonHelper::decodeToHash($job);
        $requiredFields = array();
        
        foreach ($jobHash['questions'] as $question) {
            if ($question['required']) {
                $questionFields = array();
                foreach ($question['fields'] as $field) {
                    $questionFields[] = $field['name'];
                }
                $requiredFields[$question['label']] = $questionFields;
            }
        }
        
        return $requiredFields;
    }
Given a job id, make a requrest to the Greenhouse API for those questions and build an associative
array indexed on the human-readable name containing an array of the indices that must be set.  The
array is due to the fact that one  required question can have one of two things required.  For example,
if first name, last name, and resume are required, your response would look like this:

<code>
array(
'First Name' => array('first_name'),
'Last Name'  => array('last_name'),
'Resume'     => array('resume', 'resume_text')
);
</code>

Where either resume or resume_text must have a value.

@params  number  $jobId      A Greenhouse job id.
@returns Array
@throws  GreenhouseAPIResponseException if getJob returns a non-200 response.