Example #1
0
 /**
  * AJAX:
  *   This function is called by the javascript progress bar page (step 2) of the
  *   mass resume importer. It parses the resume set in $_POST and saves the
  *   results to a temporary session.
  */
 public function massImportDocument()
 {
     // Find the files the user has uploaded and put them in an array
     if (isset($_SESSION['CATS']) && !empty($_SESSION['CATS'])) {
         $siteID = $_SESSION['CATS']->getSiteID();
     } else {
         echo 'Fail';
         return;
     }
     if (isset($_GET['name'])) {
         $name = $_GET['name'];
     } else {
         echo 'Fail';
         return;
     }
     if (isset($_GET['realName'])) {
         $realName = $_GET['realName'];
     } else {
         echo 'Fail';
         return;
     }
     if (isset($_GET['ext'])) {
         $ext = $_GET['ext'];
     } else {
         echo 'Fail';
         return;
     }
     if (isset($_GET['cTime'])) {
         $cTime = intval($_GET['cTime']);
     } else {
         echo 'Fail';
         return;
     }
     if (isset($_GET['type'])) {
         $type = intval($_GET['type']);
     } else {
         echo 'Fail';
         return;
     }
     if (!isset($_SESSION['CATS_PARSE_TEMP'])) {
         $_SESSION['CATS_PARSE_TEMP'] = array();
     }
     $mp = array('name' => $name, 'realName' => $realName, 'ext' => $ext, 'type' => $type, 'cTime' => $cTime);
     $doc2text = new DocumentToText();
     $pu = new ParseUtility();
     if (LicenseUtility::isParsingEnabled()) {
         $parsingEnabled = true;
     } else {
         $parsingEnabled = false;
     }
     if ($doc2text->convert($name, $type) === false) {
         $mp['success'] = false;
         $_SESSION['CATS_PARSE_TEMP'][] = $mp;
         echo 'Fail';
         return;
     }
     $contents = $doc2text->getString();
     // Decode things like _rATr to @ so the parser can accurately find things
     $contents = DatabaseSearch::fulltextDecode($contents);
     if ($parsingEnabled) {
         switch ($type) {
             case DOCUMENT_TYPE_DOC:
                 $contents = str_replace('|', "\n", $contents);
                 $contents = str_replace(' ? ', "\n", $contents);
                 break;
         }
         while (strpos($contents, '  ') !== false) {
             $contents = str_replace('  ', ' ', $contents);
         }
     }
     $mp['contents'] = $contents;
     if ($parsingEnabled) {
         $parseData = $pu->documentParse($realName, strlen($contents), 'application/text', $contents);
         $mp['parse'] = $parseData;
     }
     $mp['success'] = true;
     $_SESSION['CATS_PARSE_TEMP'][] = $mp;
     echo 'Ok';
     return;
 }
Example #2
0
 public function checkParsingFunctions()
 {
     if (LicenseUtility::isParsingEnabled()) {
         if (isset($_POST['documentText'])) {
             $contents = $_POST['documentText'];
         } else {
             $contents = '';
         }
         // Retain all field data since this isn't done over AJAX (yet)
         $fields = array('firstName' => $this->getTrimmedInput('firstName', $_POST), 'middleName' => $this->getTrimmedInput('middleName', $_POST), 'lastName' => $this->getTrimmedInput('lastName', $_POST), 'email1' => $this->getTrimmedInput('email1', $_POST), 'email2' => $this->getTrimmedInput('email2', $_POST), 'phoneHome' => $this->getTrimmedInput('phoneHome', $_POST), 'phoneCell' => $this->getTrimmedInput('phoneCell', $_POST), 'phoneWork' => $this->getTrimmedInput('phoneWork', $_POST), 'address' => $this->getTrimmedInput('address', $_POST), 'city' => $this->getTrimmedInput('city', $_POST), 'state' => $this->getTrimmedInput('state', $_POST), 'zip' => $this->getTrimmedInput('zip', $_POST), 'source' => $this->getTrimmedInput('source', $_POST), 'keySkills' => $this->getTrimmedInput('keySkills', $_POST), 'currentEmployer' => $this->getTrimmedInput('currentEmployer', $_POST), 'currentPay' => $this->getTrimmedInput('currentPay', $_POST), 'desiredPay' => $this->getTrimmedInput('desiredPay', $_POST), 'notes' => $this->getTrimmedInput('notes', $_POST), 'canRelocate' => $this->getTrimmedInput('canRelocate', $_POST), 'webSite' => $this->getTrimmedInput('webSite', $_POST), 'bestTimeToCall' => $this->getTrimmedInput('bestTimeToCall', $_POST), 'gender' => $this->getTrimmedInput('gender', $_POST), 'race' => $this->getTrimmedInput('race', $_POST), 'veteran' => $this->getTrimmedInput('veteran', $_POST), 'disability' => $this->getTrimmedInput('disability', $_POST), 'documentTempFile' => $this->getTrimmedInput('documentTempFile', $_POST), 'isFromParser' => true);
         /**
          * User is loading a resume from a document. Convert it to a string and paste the contents
          * into the textarea field on the add candidate page after validating the form.
          */
         if (isset($_POST['loadDocument']) && $_POST['loadDocument'] == 'true') {
             // Get the upload file from the post data
             $newFileName = FileUtility::getUploadFileFromPost($this->_siteID, 'addcandidate', 'documentFile');
             if ($newFileName !== false) {
                 // Get the relative path to the file (to perform operations on)
                 $newFilePath = FileUtility::getUploadFilePath($this->_siteID, 'addcandidate', $newFileName);
                 $documentToText = new DocumentToText();
                 $doctype = $documentToText->getDocumentType($newFilePath);
                 if ($documentToText->convert($newFilePath, $doctype)) {
                     $contents = $documentToText->getString();
                     if ($doctype == DOCUMENT_TYPE_DOC) {
                         $contents = str_replace('|', "\n", $contents);
                     }
                     // Remove things like _rDOTr for ., etc.
                     $contents = DatabaseSearch::fulltextDecode($contents);
                 } else {
                     $contents = @file_get_contents($newFilePath);
                     $fields['binaryData'] = true;
                 }
                 // Save the short (un-pathed) name
                 $fields['documentTempFile'] = $newFileName;
                 if (isset($_COOKIE['CATS_SP_TEMP_FILE']) && ($oldFile = $_COOKIE['CATS_SP_TEMP_FILE']) != '' && strcasecmp($oldFile, $newFileName)) {
                     // Get the safe, old file they uploaded and didn't use (if exists) and delete
                     $oldFilePath = FileUtility::getUploadFilePath($this->_siteID, 'addcandidate', $oldFile);
                     if ($oldFilePath !== false) {
                         @unlink($oldFilePath);
                     }
                 }
                 // Prevent users from creating more than 1 temp file for single parsing (sp)
                 setcookie('CATS_SP_TEMP_FILE', $newFileName, time() + 60 * 60 * 24 * 7);
             }
             if (isset($_POST['parseDocument']) && $_POST['parseDocument'] == 'true' && $contents != '') {
                 // ...
             } else {
                 return array($contents, $fields);
             }
         }
         /**
          * User is parsing the contents of the textarea field on the add candidate page.
          */
         if (isset($_POST['parseDocument']) && $_POST['parseDocument'] == 'true' && $contents != '') {
             $pu = new ParseUtility();
             if ($res = $pu->documentParse('untitled', strlen($contents), '', $contents)) {
                 if (isset($res['first_name'])) {
                     $fields['firstName'] = $res['first_name'];
                 } else {
                     $fields['firstName'] = '';
                 }
                 if (isset($res['last_name'])) {
                     $fields['lastName'] = $res['last_name'];
                 } else {
                     $fields['lastName'] = '';
                 }
                 $fields['middleName'] = '';
                 if (isset($res['email_address'])) {
                     $fields['email1'] = $res['email_address'];
                 } else {
                     $fields['email1'] = '';
                 }
                 $fields['email2'] = '';
                 if (isset($res['us_address'])) {
                     $fields['address'] = $res['us_address'];
                 } else {
                     $fields['address'] = '';
                 }
                 if (isset($res['city'])) {
                     $fields['city'] = $res['city'];
                 } else {
                     $fields['city'] = '';
                 }
                 if (isset($res['state'])) {
                     $fields['state'] = $res['state'];
                 } else {
                     $fields['state'] = '';
                 }
                 if (isset($res['zip_code'])) {
                     $fields['zip'] = $res['zip_code'];
                 } else {
                     $fields['zip'] = '';
                 }
                 if (isset($res['phone_number'])) {
                     $fields['phoneHome'] = $res['phone_number'];
                 } else {
                     $fields['phoneHome'] = '';
                 }
                 $fields['phoneWork'] = $fields['phoneCell'] = '';
                 if (isset($res['skills'])) {
                     $fields['keySkills'] = str_replace("\n", ' ', str_replace('"', '\'\'', $res['skills']));
                 }
             }
             return array($contents, $fields);
         }
     }
     return false;
 }
Example #3
0
 public static function getParsingStatus()
 {
     $license = new License();
     //if (!eval(Hooks::get('PARSER_ENABLE_CHECK'))) return;
     if (!defined('PARSING_ENABLED') || !PARSING_ENABLED) {
         return false;
     }
     $pu = new ParseUtility();
     $status = $pu->status(LICENSE_KEY);
     if (!$status || !is_array($status) || !count($status)) {
         return false;
     }
     return $status;
 }
Example #4
0
 private function careersPage()
 {
     global $careerPage;
     /* Get information on what site we are in, our environment, etc. */
     $site = new Site(-1);
     $siteID = $site->getFirstSiteID();
     if (!eval(Hooks::get('CAREERS_SITEID'))) {
         return;
     }
     /*
     if (!eval(Hooks::get('CAREERS_IS_ENABLED'))) return;
     if (!file_exists('modules/asp') && !LicenseUtility::isProfessional())
     {
         CommonErrors::fatal(COMMONERROR_INVALIDMODULE, $this, 'Career Portal');
     }
     */
     $siteRS = $site->getSiteBySiteID($siteID);
     if (!isset($siteRS['name'])) {
         die('An error has occurred:  No site exists with this site name.');
     }
     $siteName = $siteRS['name'];
     /* Get information on the current template. */
     $careerPortalSettings = new CareerPortalSettings($siteID);
     $careerPortalSettingsRS = $careerPortalSettings->getAll();
     $templateName = $careerPortalSettingsRS['activeBoard'];
     $enabled = $careerPortalSettingsRS['enabled'];
     if ($enabled == 0) {
         // FIXME: Generate valid XHTML error pages. Create an error/fatal method!
         die('<html><body><!-- Job Board Disabled --></body></html>');
     }
     if (isset($_GET['templateName'])) {
         $templateName = $_GET['templateName'];
     }
     $template = $careerPortalSettings->getTemplate($templateName);
     /* At this point the entire template is loaded, we just need to add data to the
        template for the specific page. */
     /* Get all public job orders for this site. */
     $jobOrders = new JobOrders($siteID);
     $rs = $jobOrders->getAll(JOBORDERS_STATUS_ACTIVE, -1, -1, -1, false, true);
     $useCookie = true;
     // Get the get or post page request
     $p = isset($_GET['p']) ? $_GET['p'] : '';
     $p = isset($_POST['p']) ? $_POST['p'] : $p;
     // Get the get or post sub-page request
     $pa = isset($_GET['pa']) ? $_GET['pa'] : '';
     $pa = isset($_POST['pa']) ? $_POST['pa'] : $pa;
     $isRegistrationEnabled = $careerPortalSettingsRS['candidateRegistration'];
     switch ($pa) {
         case 'logout':
             if ($isRegistrationEnabled) {
                 // Remove the saved information cookie
                 setcookie($this->getCareerPortalCookieName($siteID), '');
                 $useCookie = false;
             }
             break;
         case 'updateProfile':
             if ($isRegistrationEnabled) {
                 $p = 'registeredCandidateProfile';
             }
             break;
     }
     if ($p == 'showAll') {
         $template['Content'] = $template['Content - Search Results'];
         $template['Content'] = str_replace('<numberOfSearchResults>', count($rs), $template['Content']);
         $template['Content'] = str_replace('<registeredCandidate>', $useCookie && $isRegistrationEnabled ? $this->getRegisteredCandidateBlock($siteID, $template['Content - Candidate Registration']) : '', $template['Content']);
         if ($careerPortalSettingsRS['allowBrowse'] == 1) {
             /* Legacy. */
             $template['Content'] = str_replace('<searchResultsTableUnformatted>', $this->getResultsTable($rs, $careerPortalSettingsRS, true), $template['Content']);
             while (strpos($template['Content'], '<searchResultsTable') !== false) {
                 $searchResultsTablePosition = strpos($template['Content'], '<searchResultsTable');
                 $temp = substr($template['Content'], $searchResultsTablePosition + strlen('<searchResultsTable'));
                 $searchResultsTableParameters = trim(substr($temp, 0, strpos($temp, '>') - 1));
                 $tableHTML = $this->getResultsTable($rs, $careerPortalSettingsRS, false, $searchResultsTableParameters);
                 $template['Content'] = substr($template['Content'], 0, $searchResultsTablePosition - 1) . $tableHTML . substr($temp, strpos($temp, '>') + 1);
             }
         } else {
             $template['Content'] = str_replace('<searchResultsTable>', 'Sorry, Job Listings have been disabled by the ' . $siteName . ' administrator.', $template['Content']);
         }
     } else {
         if ($p == 'search') {
         } else {
             if ($p == 'registeredCandidateProfile' && $isRegistrationEnabled) {
                 $content = $template['Content - Candidate Profile'];
                 // Get information about the candidate from the cookie
                 $fields = $this->getCookieFields($siteID);
                 $candidate = $this->ProcessCandidateRegistration($siteID, $template['Content - Candidate Registration'], $fields);
                 if ($candidate === false) {
                     echo '<html><body>You have not registered yet.  Please wait while we direct you to the job list...<script>setTimeout("document.location.href=\'?m=careers&&p=showAll\';", 1500);</script></body></html>';
                     die;
                 }
                 // Get the candidate's latest resume attachment (if exists)
                 $attachmentsLib = new Attachments($siteID);
                 $attachments = $attachmentsLib->getAll(DATA_ITEM_CANDIDATE, $candidate['candidateID']);
                 $latestDate = 0;
                 $latestAttachment = false;
                 foreach ($attachments as $attachment) {
                     if (preg_match('/^([0-9]{2})-([0-9]{2})-([0-9]{2}) \\(([0-9]{2}):([0-9]{2}):([0-9]{2}) [A-Z]{2}\\)$/', $attachment['dateCreated'], $matches)) {
                         $epoch = strtotime(strval($matches[1]) . '/' . strval($matches[2]) . '/' . strval($matches[3]));
                         if ($epoch > $latestDate) {
                             $latestDate = $epoch;
                             $latestAttachment = $attachment['attachmentID'];
                         }
                     }
                 }
                 // Get their latest resume
                 if ($latestAttachment !== false) {
                     $candidatesLib = new Candidates($siteID);
                     $myResume = $candidatesLib->getResume($latestAttachment);
                 }
                 /* Replace input fields. */
                 $content = str_replace('<input-firstName>', '<input name="firstName" id="firstName" class="inputBoxName" value="' . $candidate['firstName'] . '" />', $content);
                 $content = str_replace('<input-lastName>', '<input name="lastName" id="lastName" class="inputBoxName" value="' . $candidate['lastName'] . '" />', $content);
                 $content = str_replace('<input-address>', '<textarea name="address" class="inputBoxArea">' . $candidate['address'] . '</textarea>', $content);
                 $content = str_replace('<input-city>', '<input name="city" id="city" class="inputBoxNormal" value="' . $candidate['city'] . '" />', $content);
                 $content = str_replace('<input-state>', '<input name="state" id="state" class="inputBoxNormal" value="' . $candidate['state'] . '" />', $content);
                 $content = str_replace('<input-zip>', '<input name="zip" id="zip" class="inputBoxNormal" value="' . $candidate['zip'] . '" />', $content);
                 $content = str_replace('<input-phoneWork>', '<input name="phoneWork" id="phoneWork" class="inputBoxNormal" value="' . $candidate['phoneWork'] . '" />', $content);
                 $content = str_replace('<input-email1>', '<input name="email1" id="email1" class="inputBoxNormal" value="' . $candidate['email1'] . '" />', $content);
                 $content = str_replace('<input-phoneHome>', '<input name="phoneHome" id="phoneHome" class="inputBoxNormal" value="' . $candidate['phoneHome'] . '" />', $content);
                 $content = str_replace('<input-phoneCell>', '<input name="phoneCell" id="phoneCell" class="inputBoxNormal" value="' . $candidate['phoneCell'] . '" />', $content);
                 $content = str_replace('<input-bestTimeToCall>', '<input name="bestTimeToCall" id="bestTimeToCall" class="inputBoxNormal" value="' . $candidate['bestTimeToCall'] . '" />', $content);
                 $content = str_replace('<input-keySkills>', '<input name="keySkills" id="keySkills" class="inputBoxNormal" value="' . $candidate['keySkills'] . '" />', $content);
                 $content = str_replace('<input-source>', '<input name="source" id="source" class="inputBoxNormal" value="' . $candidate['source'] . '" />', $content);
                 $content = str_replace('<input-currentEmployer>', '<input name="currentEmployer" id="currentEmployer" class="inputBoxNormal" value="' . $candidate['currentEmployer'] . '" />', $content);
                 $content = str_replace('<input-resume>', '<strong>My Resume</strong><br />' . '<textarea name="resumeContents" class="inputBoxArea" style="width: 400px; height: 200px;" readonly>' . ($latestAttachment !== false ? DatabaseSearch::fulltextDecode($myResume['text']) : '') . '</textarea>' . '<br /><br /><strong>Upload new resume:</strong><br /> ' . '<input type="file" name="file" id="file" type="file" class="inputBoxFile" size="45" />', $content);
                 $content = str_replace('<input-submit>', '<input type="submit" name="submitButton" id="submitButton" class="submitButton" onclick="document.getElementById(\'submitButton\').disabled=true;" value="Save Profile" style="width: 150px;" />', $content);
                 $content = sprintf('<form name="updateForm" id="updateForm" enctype="multipart/form-data" method="post" ' . 'action="%s?m=careers&p=onRegisteredCandidateProfile&attachmentID=%d">', CATSUtility::getIndexName(), $latestAttachment ? $latestAttachment : -1) . $content . '</form>' . (isset($_GET[$id = 'isPostBack']) && !strcmp($_GET[$id], 'yes') ? '<script language="javascript" type="text/javascript">setTimeout(\'alert("Your changes have been saved!")\',25);</script>' : '');
                 $template['Content'] = $content;
             } else {
                 if ($p == 'onRegisteredCandidateProfile' && $isRegistrationEnabled) {
                     // Get information about the candidate from the cookie
                     $fields = $this->getCookieFields($siteID);
                     $candidate = $this->ProcessCandidateRegistration($siteID, $template['Content - Candidate Registration'], $fields, true);
                     if ($candidate === false) {
                         echo '<html><body>You have not registered yet.  Please wait while we direct you to the job list...<script>setTimeout("document.location.href=\'?m=careers&&p=showAll\';", 1500);</script></body></html>';
                         die;
                     }
                     // Get the fields (if included in the template) to update
                     $fields = array('firstName', 'lastName', 'email1', 'phoneHome', 'phoneCell', 'phoneWork', 'address', 'city', 'state', 'zip', 'keySkills', 'currentEmployer', 'bestTimeToCall');
                     $fieldValues = array();
                     foreach ($fields as $field) {
                         if (isset($_POST[$field]) && $_POST[$field] != '') {
                             eval('$' . $field . ' = trim($_POST[\'' . $field . '\']);');
                             $fieldValues[$field] = $_POST[$field];
                         } else {
                             eval('$' . $field . ' = $candidate[\'' . $field . '\'];');
                             $fieldValues[$field] = $candidate[$field];
                         }
                     }
                     // Get the attachment to replace (if exists)
                     $attachmentID = isset($_GET[$id = 'attachmentID']) ? $_GET[$id] : -1;
                     $attachmentID = $attachmentID != -1 ? $attachmentID : false;
                     $attachmentsLib = new Attachments($siteID);
                     $candidatesLib = new Candidates($siteID);
                     // Update the candidate's information
                     $candidatesLib->update($candidate['candidateID'], $candidate['isActive'] ? true : false, $firstName, $candidate['middleName'], $lastName, $email1, $email1, $phoneHome, $phoneCell, $phoneWork, $address, $city, $state, $zip, $candidate['source'], $keySkills, $candidate['dateAvailable'], $currentEmployer, $candidate['canRelocate'], $candidate['currentPay'], $candidate['desiredPay'], $candidate['notes'], $candidate['webSite'], $bestTimeToCall, $candidate['owner'], $candidate['isHot'] ? true : false, $email1, $email1, $candidate['eeoGender'], $candidate['eeoEthnicType'], $candidate['eeoVeteranType'], $candidate['eeoDisabilityStatus']);
                     $uploadResume = FileUtility::getUploadFileFromPost($siteID, 'careerportaladd', 'file');
                     if ($uploadResume !== false) {
                         $uploadPath = FileUtility::getUploadFilePath($siteID, 'careerportaladd', $uploadResume);
                         if ($uploadPath !== false) {
                             // Replace most current resume with new uploaded resume
                             $attachmentsLib->delete($attachmentID, true);
                             $attachmentCreator = new AttachmentCreator($siteID);
                             $attachmentCreator->createFromFile(DATA_ITEM_CANDIDATE, $candidate['candidateID'], $uploadPath, false, '', true, true);
                         }
                     }
                     // Set the cookie again, since some information used to verify may be changed
                     $storedVal = '';
                     foreach ($fieldValues as $tag => $tagData) {
                         $storedVal .= sprintf('"%s"="%s"', urlencode($tag), urlencode($tagData));
                     }
                     @setcookie($this->getCareerPortalCookieName($siteID), $storedVal, time() + 60 * 60 * 24 * 7 * 2);
                     $template['Content'] = '<div id="careerContent"><br /><br /><h1>Please wait while you are redirected to your updated profile...</h1></div>';
                     CATSUtility::transferRelativeURI('m=careers&p=showAll&pa=updateProfile&isPostBack=yes');
                 } else {
                     if ($p == 'candidateRegistration' && $isRegistrationEnabled) {
                         $content = $template['Content - Candidate Registration'];
                         $jobID = intval($_GET['ID']);
                         $jobOrderData = $jobOrders->get($jobID);
                         $js = '';
                         $content = str_replace(array('<applyContent>', '</applyContent>'), '', $content);
                         $content = str_replace('<input-submit>', '<input type="submit" id="submitButton" name="submitButton" value="Continue to Application" />', $content);
                         $content = str_replace('<input-new>', '<input type="radio" id="isNewYes" name="isNew" value="yes" onchange="isCandidateRegisteredChange();" checked />', $content);
                         $content = str_replace('<input-registered>', '<input type="radio" id="isNewNo" name="isNew" value="no" onchange="isCandidateRegisteredChange();" />', $content);
                         $content = str_replace('<input-rememberMe>', '<input type="checkbox" id="rememberMe" name="rememberMe" value="yes" checked />', $content);
                         $content = str_replace('<title>', $jobOrderData['title'], $content);
                         // Process html-ish fields like <input-firstName> into the proper form
                         $content = preg_replace('/\\<input\\-([A-Za-z0-9]+)\\>/', '<input type="text" class="inputBoxNormal" style="width: 270px;" name="$1" id="$1" onfocus="onFocusFormField(this)" />', $content);
                         if (count($fields = $this->getCookieFields($siteID))) {
                             $js = '<script language="javascript" type="text/javascript">' . "\n" . 'function populateSavedFields() { var obj; obj = document.getElementById(\'isNewNo\'); ' . 'if (obj) { obj.checked = true; enableFormFields(true); } ' . "\n";
                             foreach ($fields as $tagName => $tagValue) {
                                 $js .= sprintf('if (obj = document.getElementById(\'%s\')) obj.value = \'%s\';%s', urldecode($tagName), str_replace("'", "\\'", urldecode($tagValue)), "\n");
                             }
                             $js .= "}\n</script>\n";
                         }
                         // Insert the form block
                         $content = sprintf('%s<form name="register" id="register" method="post" onsubmit="return validateCandidateRegistration()" ' . 'action="%s?m=careers&p=applyToJob&ID=%d">' . '<input type="hidden" name="applyToJobSubAction" value="processLogin" />', $js, CATSUtility::getIndexName(), $jobID) . $content . '<script>enableFormFields(false); ' . ($js != '' ? 'populateSavedFields();' : '') . '</script></form>';
                         $template['Content'] = $content;
                     } else {
                         if ($p == 'applyToJob' || isset($_POST[$id = 'applyToJobSubAction']) && $_POST[$id] != '') {
                             // Pre-populations
                             $firstName = isset($_POST[$id = 'firstName']) ? $_POST[$id] : '';
                             $lastName = isset($_POST[$id = 'lastName']) ? $_POST[$id] : '';
                             $address = isset($_POST[$id = 'address']) ? $_POST[$id] : '';
                             $city = isset($_POST[$id = 'city']) ? $_POST[$id] : '';
                             $state = isset($_POST[$id = 'state']) ? $_POST[$id] : '';
                             $zip = isset($_POST[$id = 'zip']) ? $_POST[$id] : '';
                             $phone = isset($_POST[$id = 'phone']) ? $_POST[$id] : '';
                             $email = isset($_POST[$id = 'email']) ? $_POST[$id] : '';
                             $phoneHome = isset($_POST[$id = 'phoneHome']) ? $_POST[$id] : '';
                             $phoneCell = isset($_POST[$id = 'phoneCell']) ? $_POST[$id] : '';
                             $bestTimeToCall = isset($_POST[$id = 'bestTimeToCall']) ? $_POST[$id] : '';
                             $email2 = isset($_POST[$id = 'email2']) ? $_POST[$id] : '';
                             $emailconfirm = isset($_POST[$id = 'emailconfirm']) ? $_POST[$id] : '';
                             $keySkills = isset($_POST[$id = 'keySkills']) ? $_POST[$id] : '';
                             $source = isset($_POST[$id = 'source']) ? $_POST[$id] : '';
                             $employer = isset($_POST[$id = 'employer']) ? $_POST[$id] : '';
                             // for <input-resumeUploadPreview>
                             $resumeContents = isset($_POST[$id = 'resumeContents']) ? $_POST[$id] : '';
                             $resumeFileLocation = isset($_POST[$id = 'file']) ? $_POST[$id] : '';
                             // for returning candidates
                             $candidateID = -1;
                             if ($isRegistrationEnabled) {
                                 // Check if the user is registered and logged in
                                 $cookieFields = $this->getCookieFields($siteID);
                                 $candidate = $this->ProcessCandidateRegistration($siteID, $template['Content - Candidate Registration'], $cookieFields, true);
                                 if ($candidate !== false) {
                                     // The candidate is registered
                                     $firstName = $candidate['firstName'];
                                     $lastName = $candidate['lastName'];
                                     $address = $candidate['address'];
                                     $city = $candidate['city'];
                                     $state = $candidate['state'];
                                     $zip = $candidate['zip'];
                                     $phone = $candidate['phoneWork'];
                                     $phoneHome = $candidate['phoneHome'];
                                     $phoneCell = $candidate['phoneCell'];
                                     $email = $candidate['email1'];
                                     $email2 = $candidate['email2'];
                                     $emailconfirm = $email;
                                     $keySkills = $candidate['keySkills'];
                                     $source = $candidate['source'];
                                     $employer = $candidate['currentEmployer'];
                                     $candidateID = $candidate['candidateID'];
                                 }
                             }
                             /**
                              * SUB-ACTIONS
                              * These actions are called as postbacks, such as loading a resume file into the
                              * "contents" textarea on the application page. All post data remains intact and
                              * re-populates the fields giving the illusion of AJAX.
                              */
                             if (isset($_POST[$id = 'applyToJobSubAction']) && strlen($subAction = $_POST[$id])) {
                                 // Check if a candidate has registered and has indicated it
                                 if (!strcmp($subAction, 'processLogin') && isset($_POST['isNew']) && !strcmp($_POST['isNew'], 'no') && $isRegistrationEnabled) {
                                     $candidate = $this->ProcessCandidateRegistration($siteID, $template['Content - Candidate Registration']);
                                     if ($candidate !== false) {
                                         // Rewrite here, I'll fix it later
                                         $firstName = $candidate['firstName'];
                                         $lastName = $candidate['lastName'];
                                         $address = $candidate['address'];
                                         $city = $candidate['city'];
                                         $state = $candidate['state'];
                                         $zip = $candidate['zip'];
                                         $phone = $candidate['phoneWork'];
                                         $phoneHome = $candidate['phoneHome'];
                                         $phoneCell = $candidate['phoneCell'];
                                         $email = $candidate['email1'];
                                         $email2 = $candidate['email2'];
                                         $emailconfirm = $email;
                                         $keySkills = $candidate['keySkills'];
                                         $source = $candidate['source'];
                                         $employer = $candidate['currentEmployer'];
                                         $candidateID = $candidate['candidateID'];
                                     }
                                 }
                                 // Check if a file has been uploaded, if so populate the contents textarea
                                 if (($uploadFile = FileUtility::getUploadFileFromPost($siteID, 'careerportaladd', 'resumeFile')) !== false) {
                                     $uploadFilePath = FileUtility::getUploadFilePath($siteID, 'careerportaladd', $uploadFile);
                                     if ($uploadFilePath !== false) {
                                         $d2t = new DocumentToText();
                                         $docType = $d2t->getDocumentType($uploadFilePath);
                                         if ($d2t->convert($uploadFilePath, $docType) !== false) {
                                             $resumeContents = $d2t->getString();
                                             // Remove nasty things like _rATr in favor of @
                                             $resumeContents = DatabaseSearch::fulltextDecode($resumeContents);
                                         } else {
                                             $resumeContents = 'Unable to load your resume contents. Your resume will ' . 'still be uploaded and attached to your application.';
                                         }
                                         $resumeFileLocation = $uploadFile;
                                     }
                                 }
                                 if (!strcmp($subAction, 'resumeParse')) {
                                     // Check if the resume contents need to be parsed (user clicked parse contents button)
                                     if (LicenseUtility::isParsingEnabled()) {
                                         $pu = new ParseUtility();
                                         $fileName = isset($uploadFile) ? $uploadFile : '';
                                         $res = $pu->documentParse($fileName, strlen($resumeContents), '', $resumeContents);
                                         if (is_array($res) && !empty($res)) {
                                             if (isset($res[$id = 'first_name']) && $res[$id] != '' && $firstName == '') {
                                                 $firstName = $res[$id];
                                             }
                                             if (isset($res[$id = 'last_name']) && $res[$id] != '' && $lastName == '') {
                                                 $lastName = $res[$id];
                                             }
                                             if (isset($res[$id = 'us_address']) && $res[$id] != '' && $address == '') {
                                                 $address = $res[$id];
                                             }
                                             if (isset($res[$id = 'city']) && $res[$id] != '' && $city == '') {
                                                 $city = $res[$id];
                                             }
                                             if (isset($res[$id = 'state']) && $res[$id] != '' && $state == '') {
                                                 $state = $res[$id];
                                             }
                                             if (isset($res[$id = 'zip_code']) && $res[$id] != '' && $zip == '') {
                                                 $zip = $res[$id];
                                             }
                                             if (isset($res[$id = 'email_address']) && $res[$id] != '' && $email == '') {
                                                 $email = $res[$id];
                                                 $email2 = $res[$id];
                                                 $emailconfirm = $res[$id];
                                             }
                                             if (isset($res[$id = 'phone_number']) && $res[$id] != '' && $phone == '') {
                                                 $phone = $res[$id];
                                             }
                                             if (isset($res[$id = 'skills']) && $res[$id] != '' && $keySkills == '') {
                                                 $keySkills = $res[$id];
                                             }
                                         }
                                     }
                                 }
                             }
                             $template['Content'] = $template['Content - Apply for Position'];
                             // Force integer
                             // FIXME: Input validation, and use isRequiredIDValid() to check for / force integer.
                             $jobID = intval(isset($_GET['ID']) ? $_GET['ID'] : $_POST['ID']);
                             $jobOrderData = $jobOrders->get($jobID);
                             if (!isset($jobOrderData['public']) || $jobOrderData['public'] == 0) {
                                 // FIXME: Generate valid XHTML error pages. Create an error/fatal method!
                                 echo '<html><body>This position is no longer available.  Please wait while we direct you to the job list...<script>setTimeout("document.location.href=\'?m=careers&&p=showAll\';", 1500);</script></body></html>';
                                 die;
                             }
                             /* Make JavaScript validation rules. */
                             $validator = $this->_makeApplyValidator($template);
                             /* Translate required fields into normal fields for replacement. */
                             $template['Content'] = str_replace(' req>', '>', $template['Content']);
                             /* Get the attachment (friendly) file name is there is an attachment uploaded */
                             if ($resumeFileLocation != '') {
                                 $attachmentHTML = '<div style="height: 20px; background-color: #e0e0e0; margin: 5px 0 0px 0; ' . 'padding: 0 3px 0 5px; font-size: 11px;"> ' . '<img src="images/parser/attachment.gif" border="0" style="padding-top: 3px;" /> ' . 'Attachment: <span style="font-weight: bold;">' . $resumeFileLocation . '</span> ' . '</div> ';
                             } else {
                                 $attachmentHTML = '';
                             }
                             /* Replace input fields. */
                             $template['Content'] = str_replace('<jobid>', $jobID, $template['Content']);
                             $template['Content'] = str_replace('<title>', $jobOrderData['title'], $template['Content']);
                             $template['Content'] = str_replace('<input-firstName>', '<input name="firstName" id="firstName" class="inputBoxName" value="' . $firstName . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-lastName>', '<input name="lastName" id="lastName" class="inputBoxName" value="' . $lastName . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-address>', '<textarea name="address" class="inputBoxArea">' . $address . '</textarea>', $template['Content']);
                             $template['Content'] = str_replace('<input-city>', '<input name="city" id="city" class="inputBoxNormal" value="' . $city . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-state>', '<input name="state" id="state" class="inputBoxNormal" value="' . $state . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-zip>', '<input name="zip" id="zip" class="inputBoxNormal" value="' . $zip . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-phone>', '<input name="phone" id="phone" class="inputBoxNormal" value="' . $phone . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-email>', '<input name="email" id="email" class="inputBoxNormal" value="' . $email . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-phone-home>', '<input name="phoneHome" id="phoneHome" class="inputBoxNormal" value="' . $phoneHome . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-phone-cell>', '<input name="phoneCell" id="phoneCell" class="inputBoxNormal" value="' . $phoneCell . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-best-time-to-call>', '<input name="bestTimeToCall" id="bestTimeToCall" class="inputBoxNormal" value="' . $bestTimeToCall . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-email2>', '<input name="email2" id="email2" class="inputBoxNormal" value="' . $email2 . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-emailconfirm>', '<input name="emailconfirm" id="emailconfirm" class="inputBoxNormal" value="' . $emailconfirm . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-keySkills>', '<input name="keySkills" id="keySkills" class="inputBoxNormal" value="' . $keySkills . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-source>', '<input name="source" id="source" class="inputBoxNormal" value="' . $source . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-employer>', '<input name="employer" id="employer" class="inputBoxNormal" value="' . $employer . '" />', $template['Content']);
                             $template['Content'] = str_replace('<input-resumeUpload>', '<input type="file" id="resume" name="file" class="inputBoxFile" />', $template['Content']);
                             $template['Content'] = str_replace('<input-resumeUploadPreview>', '<input type="hidden" id="applyToJobSubAction" name="applyToJobSubAction" value="" /> ' . '<input type="hidden" id="file" name="file" value="' . $resumeFileLocation . '" /> ' . '<input type="file" id="resumeFile" name="resumeFile" class="inputBoxFile" size="30" onchange="resumeLoadCheck();" /> ' . '<input type="button" id="resumeLoad" name="resumeLoad" value="Upload" onclick="resumeLoadFile();" disabled /><br /> ' . $attachmentHTML . '<textarea id="resumeContents" name="resumeContents" class="inputBoxArea" onmousemove="resumeContentsChange(this);" ' . 'onchange="resumeContentsChange(this);" onmousedown="resumeContentsChange(this);" ' . 'style="width: 410px; height: 150px;">' . $resumeContents . '</textarea><br /> ' . (LicenseUtility::isParsingEnabled() ? '<br /><div style="text-align: right;">' . '<input type="button" value="Populate Fields ->" id="resumePopulate" onclick="resumeParse();" ' . (strlen($resumeContents) ? '' : 'disabled') . ' />' : ''), $template['Content']);
                             $template['Content'] = str_replace('<input-extraNotes>', '<textarea name="extraNotes" id="extraNotes" class="inputBoxArea" maxlength="450" onkeyup="mlength=this.getAttribute ? parseInt(this.getAttribute(\'maxlength\')) : \'\'; if (this.getAttribute && this.value.length>(mlength+7)) { alert(\'Sorry, you may only enter \'+mlength+\' characters into the extra notes.\');} if (this.getAttribute && this.value.length>mlength) {this.value=this.value.substring(0,mlength); this.scrollTop = this.scrollHeight;}">' . (isset($_POST[$id = 'extraNotes']) ? $_POST[$id] : '') . '</textarea>', $template['Content']);
                             $template['Content'] = str_replace('<submit', '<input type="submit" class="submitButton"', $template['Content']);
                             /* EEO inputs. */
                             $template['Content'] = str_replace('<input-eeo-race>', '<select name="eeorace" id="eeorace" class="inputBoxNormal" />
                                                                     <option value="">----</option>
                                                                     <option value="1">American Indian</option>
                                                                     <option value="2">Asian or Pacific Islander</option>
                                                                     <option value="3">Hispanic or Latino</option>
                                                                     <option value="4">Non-Hispanic Black</option>
                                                                     <option value="5">Non-Hispanic White</option>
                                                                 </select>', $template['Content']);
                             $template['Content'] = str_replace('<input-eeo-gender>', '<select name="eeogender" id="eeogender" class="inputBoxNormal" />
                                                                     <option value="">----</option>
                                                                     <option value="m">Male</option>
                                                                     <option value="f">Female</option>
                                                                 </select>', $template['Content']);
                             $template['Content'] = str_replace('<input-eeo-veteran>', '<select name="eeoveteran" id="eeoveteran" class="inputBoxNormal" />
                                                                     <option value="">----</option>
                                                                     <option value="1">Male</option>
                                                                     <option value="2">Eligible Veteran</option>
                                                                     <option value="3">Disabled Veteran</option>
                                                                     <option value="4">Eligible and Disabled</option>
                                                                 </select>', $template['Content']);
                             $template['Content'] = str_replace('<input-eeo-disability>', '<select name="eeodisability" id="eeodisability" class="inputBoxNormal" />
                                                                     <option value="">----</option>
                                                                     <option value="No">No</option>
                                                                     <option value="Yes">Yes</option>
                                                                 </select>', $template['Content']);
                             /* Extra field inputs. */
                             $candidates = new Candidates($siteID);
                             $extraFieldsForCandidates = $candidates->extraFields->getValuesForAdd();
                             foreach ($extraFieldsForCandidates as $ef) {
                                 if (isset($ef['careersAddHTML'])) {
                                     $template['Content'] = str_replace('<input-extraField-' . urlencode($ef['fieldName']) . '>', $ef['careersAddHTML'], $template['Content']);
                                 } else {
                                     $template['Content'] = str_replace('<input-extraField-' . urlencode($ef['fieldName']) . '>', $ef['addHTML'], $template['Content']);
                                 }
                             }
                             /* This is kindof a hack, but basically, we have to put the
                              * validation code / form below inside the <td>, which is contained
                              * in the template, as they aren't allowed in <tr>s.
                              * NOTE: Continue to use ungreedy matching or this will break!
                              */
                             if (preg_match('/^.*?(<td.*?>)/i', $template['Content'], $matches)) {
                                 $startTD = $matches[1];
                                 $template['Content'] = preg_replace('/^.*?(?:<td.*?>)/i', '', $template['Content']);
                             } else {
                                 $startTD = '';
                             }
                             if (preg_match('/(<\\/td>).*?$/i', $template['Content'], $matches)) {
                                 $endTD = $matches[1];
                                 $template['Content'] = preg_replace('/(?:<\\/td>).*?$/i', '', $template['Content']);
                             } else {
                                 $endTD = '';
                             }
                             if (strpos($template['Content'], '<catsform>') === false) {
                                 $template['Content'] = $startTD . "\n" . $validator . "\n" . '<form name="applyToJobForm" id="applyToJobForm" action="' . CATSUtility::getIndexName() . '?m=careers&amp;p=onApplyToJobOrder" ' . 'enctype="multipart/form-data" method="post" onsubmit="return applyValidate();">' . '<input type="hidden" name="ID" value="' . $jobID . '">' . '<input type="hidden" name="candidateID" value="' . $candidateID . '">' . $template['Content'] . '</form>' . "\n" . $endTD;
                             } else {
                                 $template['Content'] = $startTD . "\n" . $validator . "\n" . str_replace('<catsform>', '<form name="applyToJobForm" id="applyToJobForm" action="' . CATSUtility::getIndexName() . '?m=careers&amp;p=onApplyToJobOrder" ' . 'enctype="multipart/form-data" method="post" onsubmit="return applyValidate();">' . '<input type="hidden" name="ID" value="' . $jobID . '">' . '<input type="hidden" name="candidateID" value="' . $candidateID . '">', $template['Content']) . "\n" . $endTD;
                             }
                         } else {
                             if ($p == 'onApplyToJobOrder') {
                                 if (!$this->isRequiredIDValid('ID', $_POST)) {
                                     // FIXME: Generate valid XHTML error pages. Create an error/fatal method!
                                     echo '<html><body>This position is invalid or no longer available. Please wait while we direct you to the job list...<script>setTimeout("document.location.href=\'?m=careers&&p=showAll\';", 1500);</script></body></html>';
                                     die;
                                 }
                                 // Check if this is a returning candidate
                                 $candidateID = isset($_POST['candidateID']) ? intval($_POST['candidateID']) : -1;
                                 if ($candidateID == -1) {
                                     $candidateID = false;
                                 }
                                 /**
                                  * Applicant has completed their application, check to see if a questionnaire
                                  * is tied to this job order. If so, present it.
                                  */
                                 $jobID = intval($_POST['ID']);
                                 $jobOrderData = $jobOrders->get($jobID);
                                 $questionnaireLib = new Questionnaire($siteID);
                                 $questionnaireID = $jobOrderData['questionnaireID'];
                                 if ($questionnaireID) {
                                     $questionnaire = $questionnaireLib->get($questionnaireID);
                                     if (!is_array($questionnaire) || empty($questionnaire)) {
                                         $questionnaireID = false;
                                     }
                                 }
                                 // Check for postback (if the applicant has completed the questionnaire) or if no questionnaire exists
                                 if (isset($_GET[$id = 'questionnairePostBack']) && $_GET[$id] == '1' || !$questionnaireID) {
                                     // Continue on our merry way
                                     $this->onApplyToJobOrder($siteID, $candidateID);
                                     $jobOrderData = $jobOrders->get($jobID);
                                     if (!isset($jobOrderData['public']) || $jobOrderData['public'] == 0) {
                                         // FIXME: Generate valid XHTML error pages. Create an error/fatal method!
                                         echo '<html><body>This position is no longer available.  Please wait while we direct you to the job list...<script>setTimeout("document.location.href=\'?m=careers&&p=showAll\';", 1500);</script></body></html>';
                                         die;
                                     }
                                     $template['Content'] = $template['Content - Thanks for your Submission'];
                                     $template['Content'] = str_replace('<title>', $jobOrderData['title'], $template['Content']);
                                     $template['Content'] = str_replace('<a-jobDetails>', '<a href="' . CATSUtility::getIndexName() . '?m=careers' . (isset($_GET['templateName']) ? '&templateName=' . urlencode($_GET['templateName']) : '') . '&p=showJob&ID=' . $_POST['ID'] . '">', $template['Content']);
                                 } else {
                                     ob_start();
                                     // get questions/answers
                                     $questions = $questionnaireLib->getQuestions($questionnaireID);
                                     $this->_template->assign('isModal', true);
                                     $this->_template->assign('questionnaireID', $questionnaireID);
                                     $this->_template->assign('data', $questionnaire);
                                     $this->_template->assign('questions', $questions);
                                     $this->_template->display('./modules/settings/CareerPortalQuestionnaireShow.tpl');
                                     $buffer = ob_get_contents();
                                     ob_end_clean();
                                     $formData = '<form name="postQuestionnaire" id="postQuestionnaire" ' . 'enctype="multipart/form-data" method="post" action="' . CATSUtility::getIndexName() . '?m=careers&p=onApplyToJobOrder' . '&questionnairePostBack=1">' . "\n" . $this->capturePostData($siteID);
                                     // Collect all of the post data and resubmit it as hidden elements
                                     $buffer = $formData . $buffer;
                                     $template['Content'] = str_replace('<questionnaire>', $buffer, $template['Content - Questionnaire']);
                                     $template['Content'] = str_replace('<submit', '<input type="submit" class="submitButton"', $template['Content']) . '</form>';
                                 }
                             } else {
                                 if ($p == 'showJob') {
                                     $template['Content'] = $template['Content - Job Details'];
                                     $jobID = $_GET['ID'];
                                     /* Filter out non numeric characters */
                                     for ($i = 0; $i < strlen($jobID); $i++) {
                                         if (ord(substr($jobID, $i, 1)) < ord('0') || ord(substr($jobID, $i, 1)) > ord('9')) {
                                             $jobID = str_replace(substr($jobID, $i, 1), '*', $jobID);
                                         }
                                     }
                                     $jobID = str_replace('*', '', $jobID);
                                     /* Force integer */
                                     $jobID = $jobID * 1;
                                     $jobOrderData = $jobOrders->get($jobID);
                                     if (!isset($jobOrderData['public']) || $jobOrderData['public'] == 0) {
                                         echo '<html><body>This position is no longer available.  Please wait while we direct you to the job list...<script>setTimeout("document.location.href=\'?m=careers&&p=showAll\';", 1500);</script></body></html>';
                                         die;
                                     }
                                     $template['Content'] = str_replace('<registeredCandidate>', $useCookie && $isRegistrationEnabled ? $this->getRegisteredCandidateBlock($siteID, $template['Content - Candidate Registration']) : '', $template['Content']);
                                     $template['Content'] = str_replace('<title>', $jobOrderData['title'], $template['Content']);
                                     $template['Content'] = str_replace('<city>', $jobOrderData['city'], $template['Content']);
                                     $template['Content'] = str_replace('<openings>', $jobOrderData['openings'], $template['Content']);
                                     $template['Content'] = str_replace('<state>', $jobOrderData['state'], $template['Content']);
                                     $template['Content'] = str_replace('<type>', $jobOrders->typeCodeToString($jobOrderData['type']), $template['Content']);
                                     $template['Content'] = str_replace('<created>', $jobOrderData['dateCreated'], $template['Content']);
                                     $template['Content'] = str_replace('<recruiter>', $jobOrderData['recruiterFullName'], $template['Content']);
                                     $template['Content'] = str_replace('<companyName>', $jobOrderData['companyName'], $template['Content']);
                                     $template['Content'] = str_replace('<contactName>', $jobOrderData['contactFullName'], $template['Content']);
                                     $template['Content'] = str_replace('<contactPhone>', $jobOrderData['contactWorkPhone'], $template['Content']);
                                     $template['Content'] = str_replace('<contactEmail>', $jobOrderData['contactEmail'], $template['Content']);
                                     $template['Content'] = str_replace('<description>', $jobOrderData['description'], $template['Content']);
                                     $template['Content'] = str_replace('<rate>', nl2br($jobOrderData['maxRate']), $template['Content']);
                                     $template['Content'] = str_replace('<salary>', nl2br($jobOrderData['salary']), $template['Content']);
                                     $template['Content'] = str_replace('<daysOld>', nl2br($jobOrderData['daysOld']), $template['Content']);
                                     $isRegistered = $this->isCandidateRegistered($siteID, $template['Content - Candidate Registration']);
                                     // If candidate registration is enabled, ask them if they would like to log in first
                                     if ($isRegistrationEnabled && !$isRegistered) {
                                         $template['Content'] = str_replace('<a-applyToJob', '<a href="' . CATSUtility::getIndexName() . '?m=careers' . (isset($_GET['templateName']) ? '&templateName=' . urlencode($_GET['templateName']) : '') . '&p=candidateRegistration&ID=' . $jobID . '"', $template['Content']);
                                     } else {
                                         $template['Content'] = str_replace('<a-applyToJob', '<a href="' . CATSUtility::getIndexName() . '?m=careers' . (isset($_GET['templateName']) ? '&templateName=' . urlencode($_GET['templateName']) : '') . '&p=applyToJob&ID=' . $jobID . '"', $template['Content']);
                                     }
                                     $jobOrders = new JobOrders($siteID);
                                     $extraFieldsForJobOrders = $jobOrders->extraFields->getValuesForShow($jobID);
                                     foreach ($extraFieldsForJobOrders as $ef) {
                                         $template['Content'] = str_replace('<extraField-' . urlencode($ef['fieldName']) . '>', $ef['display'], $template['Content']);
                                     }
                                 } else {
                                     if ($p == 'searchResults') {
                                     } else {
                                         $template['Content'] = $template['Content - Main'];
                                         $template['Content'] = str_replace('<registeredCandidate>', $useCookie && $isRegistrationEnabled ? $this->getRegisteredCandidateBlock($siteID, $template['Content - Candidate Registration']) : '', $template['Content']);
                                         $isRegistered = $useCookie ? $this->isCandidateRegistered($siteID, $template['Content - Candidate Registration']) : false;
                                         if ($isRegistrationEnabled) {
                                             // postback
                                             if (isset($_GET[$id = 'postback']) && !strcmp($_GET[$id], 'yes')) {
                                                 $candidate = $this->ProcessCandidateRegistration($siteID, $template['Content - Candidate Registration']);
                                                 if ($candidate === false) {
                                                     $isRegistered = false;
                                                     // Error Message
                                                     $template['Content'] = str_replace('<registeredLoginTitle>', '<h1 style="color: #800000;">No applicants were ' . 'found matching your criteria.</h1><h3>Once you apply to any of our positions, you will automatically ' . 'be registered.<br /><br />', $template['Content']);
                                                 } else {
                                                     $isRegistered = true;
                                                 }
                                             }
                                             if (!$isRegistered) {
                                                 // If they're not logged on but registration is enabled, give them the opportunity to
                                                 $content = $template['Content - Candidate Registration'];
                                                 $js = '';
                                                 $content = str_replace(array('<registeredLoginTitle>', '</registeredLoginTitle>'), '', $content);
                                                 $content = str_replace('<applyContent>', '<div style="display: none;">', $content);
                                                 $content = str_replace('</applyContent>', '</div>', $content);
                                                 $content = str_replace('<input-submit>', '<input type="submit" id="submitButton" name="submitButton" value="Login" />', $content);
                                                 $content = str_replace('<input-new>', '<input type="hidden" id="isNewNo" name="isNew" value="no" />', $content);
                                                 $content = str_replace('<input-registered>', '', $content);
                                                 $content = str_replace('<input-rememberMe>', '<input type="checkbox" id="rememberMe" name="rememberMe" value="yes" checked />', $content);
                                                 $content = str_replace('<title>', '', $content);
                                                 // Process html-ish fields like <input-firstName> into the proper form
                                                 $content = preg_replace('/\\<input\\-([A-Za-z0-9]+)\\>/', '<input type="text" class="inputBoxNormal" style="width: 270px;" name="$1" id="$1" onfocus="onFocusFormField(this)" />', $content);
                                                 // Insert the form block
                                                 $content = sprintf('<form name="login" id="login" method="post" onsubmit="return validateCandidateRegistration()" ' . 'action="%s?postback=yes">', CATSUtility::getIndexName()) . $content . '<script>enableFormFields(true);</script></form>';
                                                 $template['Content'] = str_replace('<registeredLogin>', $content, $template['Content']);
                                             } else {
                                                 $template['Content'] = str_replace('<registeredLoginTitle>', '<div style="display: none;">', $template['Content']);
                                                 $template['Content'] = str_replace('</registeredLoginTitle>', '</div>', $template['Content']);
                                                 $template['Content'] = str_replace(array('<registeredCandidate>', '<registeredLogin>'), '', $template['Content']);
                                             }
                                         } else {
                                             $template['Content'] = str_replace('<registeredLoginTitle>', '<div style="display: none;">', $template['Content']);
                                             $template['Content'] = str_replace('</registeredLoginTitle>', '</div>', $template['Content']);
                                             $template['Content'] = str_replace(array('<registeredCandidate>', '<registeredLogin>'), '', $template['Content']);
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     $indexName = CATSUtility::getIndexName();
     foreach ($template as $index => $data) {
         $template[$index] = str_replace('<a-LinkMain>', '<a href="' . $indexName . '?m=careers' . (isset($_GET['templateName']) ? '&templateName=' . urlencode($_GET['templateName']) : '') . '">', $template[$index]);
         $template[$index] = str_replace('<a-LinkSearch>', '<a href="' . $indexName . '?m=careers' . (isset($_GET['templateName']) ? '&templateName=' . urlencode($_GET['templateName']) : '') . '&amp;p=search">', $template[$index]);
         $template[$index] = str_replace('<a-ListAll>', '<a href="' . $indexName . '?m=careers' . (isset($_GET['templateName']) ? '&templateName=' . urlencode($_GET['templateName']) : '') . '&amp;p=showAll">', $template[$index]);
         $template[$index] = str_replace('<siteName>', $siteName, $template[$index]);
         $template[$index] = str_replace('<numberOfOpenPositions>', count($rs), $template[$index]);
         /* Hacks for loading from a nonstandard root directory. */
         if (isset($careerPage) && $careerPage == true) {
             $template[$index] = str_replace('"images/', '"../images/', $template[$index]);
             $template[$index] = str_replace('\'images/', '\'../images/', $template[$index]);
             $template[$index] = str_replace('<rssURL>', '../rss/', $template[$index]);
         } else {
             $template[$index] = str_replace('<rssURL>', 'rss/', $template[$index]);
         }
     }
     $this->_template->assign('template', $template);
     $this->_template->assign('siteName', $siteName);
     if (!eval(Hooks::get('CAREERS_PAGE_BOTTOM'))) {
         return;
     }
     if ($careerPortalSettingsRS['useCATSTemplate'] != '') {
         $this->_template->display($careerPortalSettingsRS['useCATSTemplate']);
     } else {
         $this->_template->display('./modules/careers/Blank.tpl');
     }
 }