Exemplo n.º 1
0
 private function onApplyToJobOrder($siteID, $candidateID = false)
 {
     $jobOrders = new JobOrders($siteID);
     $careerPortalSettings = new CareerPortalSettings($siteID);
     if (!$this->isRequiredIDValid('ID', $_POST)) {
         CommonErrors::fatal(COMMONERROR_BADINDEX, $this, 'Invalid job order ID.');
         return;
     }
     $jobOrderID = $_POST['ID'];
     $jobOrderData = $jobOrders->get($jobOrderID);
     if (!isset($jobOrderData['public']) || $jobOrderData['public'] == 0) {
         CommonErrors::fatal(COMMONERROR_BADINDEX, $this, 'The specified job order could not be found.');
         return;
     }
     $lastName = $this->getTrimmedInput('lastName', $_POST);
     $middleName = $this->getTrimmedInput('middleName', $_POST);
     $firstName = $this->getTrimmedInput('firstName', $_POST);
     $email = $this->getTrimmedInput('email', $_POST);
     $email2 = $this->getTrimmedInput('email2', $_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);
     $phone = $this->getTrimmedInput('phone', $_POST);
     $phoneHome = $this->getTrimmedInput('phoneHome', $_POST);
     $phoneCell = $this->getTrimmedInput('phoneCell', $_POST);
     $bestTimeToCall = $this->getTrimmedInput('bestTimeToCall', $_POST);
     $keySkills = $this->getTrimmedInput('keySkills', $_POST);
     $extraNotes = $this->getTrimmedInput('extraNotes', $_POST);
     $employer = $this->getTrimmedInput('employer', $_POST);
     $gender = $this->getTrimmedInput('eeogender', $_POST);
     $race = $this->getTrimmedInput('eeorace', $_POST);
     $veteran = $this->getTrimmedInput('eeoveteran', $_POST);
     $disability = $this->getTrimmedInput('eeodisability', $_POST);
     if (empty($firstName)) {
         CommonErrors::fatal(COMMONERROR_MISSINGFIELDS, $this, 'First Name is a required field - please have your administrator edit your templates to include the first name field.');
     }
     if (empty($lastName)) {
         CommonErrors::fatal(COMMONERROR_MISSINGFIELDS, $this, 'Last Name is a required field - please have your administrator edit your templates to include the last name field.');
     }
     if (empty($email)) {
         CommonErrors::fatal(COMMONERROR_MISSINGFIELDS, $this, 'E-Mail address is a required field - please have your administrator edit your templates to include the email field.');
     }
     if (empty($source)) {
         $source = 'Online Careers Website';
     }
     $users = new Users(CATS_ADMIN_SITE);
     $automatedUser = $users->getAutomatedUser();
     /* Find if another user with same e-mail exists. If so, update the user
      * to contain the new information.
      */
     $candidates = new Candidates($siteID);
     /**
      * Save basic information in a cookie in case the site is using registration to
      * process repeated postings, etc.
      */
     $fields = array('firstName', 'lastName', 'email', 'address', 'city', 'state', 'zip', 'phone', 'phoneHome', 'phoneCell');
     $storedVal = '';
     foreach ($fields as $field) {
         eval('$tmp = sprintf(\'"%s"="%s"\', $field, urlencode($' . $field . '));');
         $storedVal .= $tmp;
     }
     // Store their information for an hour only (about 1 session), if they return they can log in again and
     // specify "remember me" which stores it for 2 weeks.
     @setcookie($this->getCareerPortalCookieName($siteID), $storedVal, time() + 60 * 60);
     if ($candidateID !== false) {
         $candidate = $candidates->get($candidateID);
         // Candidate exists and registered. Update their profile with new values (if provided)
         $candidates->update($candidateID, $candidate['isActive'] ? true : false, $firstName, $middleName, $lastName, $email, $email2, $phoneHome, $phoneCell, $phone, $address, $city, $state, $zip, $source, $keySkills, '', $employer, '', '', '', $candidate['notes'], '', $bestTimeToCall, $automatedUser['userID'], $automatedUser['userID'], $gender, $race, $veteran, $disability);
         /* Update extra feilds */
         $candidates->extraFields->setValuesOnEdit($candidateID);
     } else {
         // Lookup the candidate by e-mail, use that candidate instead if found (but don't update profile)
         $candidateID = $candidates->getIDByEmail($email);
     }
     if ($candidateID === false || $candidateID < 0) {
         /* New candidate. */
         $candidateID = $candidates->add($firstName, $middleName, $lastName, $email, $email2, $phoneHome, $phoneCell, $phone, $address, $city, $state, $zip, $source, $keySkills, '', $employer, '', '', '', 'Candidate submitted these notes with first application: ' . "\n\n" . $extraNotes, '', $bestTimeToCall, $automatedUser['userID'], $automatedUser['userID'], $gender, $race, $veteran, $disability);
         /* Update extra fields. */
         $candidates->extraFields->setValuesOnEdit($candidateID);
     }
     // If the candidate was added and a questionnaire exists for the job order
     if ($candidateID > 0 && ($questionnaireID = $jobOrderData['questionnaireID'])) {
         $questionnaireLib = new Questionnaire($siteID);
         // Perform any actions specified by the questionnaire
         $questionnaireLib->doActions($questionnaireID, $candidateID, $_POST);
     }
     $fileUploaded = false;
     /* Upload resume (no questionnaire) */
     if (isset($_FILES['file']) && !empty($_FILES['file']['name'])) {
         $attachmentCreator = new AttachmentCreator($siteID);
         $attachmentCreator->createFromUpload(DATA_ITEM_CANDIDATE, $candidateID, 'file', false, true);
         if ($attachmentCreator->isError()) {
             CommonErrors::fatal(COMMONERROR_FILEERROR, $this, $attachmentCreator->getError());
             return;
         }
         $duplicatesOccurred = $attachmentCreator->duplicatesOccurred();
         $isTextExtractionError = $attachmentCreator->isTextExtractionError();
         $textExtractionErrorMessage = $attachmentCreator->getTextExtractionError();
         // FIXME: Show parse errors!
         $fileUploaded = true;
         $resumePath = $attachmentCreator->getNewFilePath();
     } else {
         if (isset($_POST['file']) && !empty($_POST['file'])) {
             $resumePath = '';
             $newFilePath = FileUtility::getUploadFilePath($siteID, 'careerportaladd', $_POST['file']);
             if ($newFilePath !== false) {
                 $attachmentCreator = new AttachmentCreator($siteID);
                 $attachmentCreator->createFromFile(DATA_ITEM_CANDIDATE, $candidateID, $newFilePath, false, '', true, true);
                 if ($attachmentCreator->isError()) {
                     CommonErrors::fatal(COMMONERROR_FILEERROR, $this, $attachmentCreator->getError());
                     return;
                 }
                 $duplicatesOccurred = $attachmentCreator->duplicatesOccurred();
                 $isTextExtractionError = $attachmentCreator->isTextExtractionError();
                 $textExtractionErrorMessage = $attachmentCreator->getTextExtractionError();
                 // FIXME: Show parse errors!
                 $fileUploaded = true;
                 $resumePath = $attachmentCreator->getNewFilePath();
             }
         }
     }
     $pipelines = new Pipelines($siteID);
     $activityEntries = new ActivityEntries($siteID);
     /* Is the candidate already in the pipeline for this job order? */
     $rs = $pipelines->get($candidateID, $jobOrderID);
     if (count($rs) == 0) {
         /* Attempt to add the candidate to the pipeline. */
         if (!$pipelines->add($candidateID, $jobOrderID)) {
             CommonErrors::fatal(COMMONERROR_RECORDERROR, $this, 'Failed to add candidate to pipeline.');
         }
         // FIXME: For some reason, pipeline entries like to disappear between
         //        the above add() and this get(). WTF?
         $rs = $pipelines->get($candidateID, $jobOrderID);
         if (isset($rs['candidateJobOrderID'])) {
             $pipelines->updateRatingValue($rs['candidateJobOrderID'], -1);
         }
         $newApplication = true;
     } else {
         $newApplication = false;
     }
     /* Build activity note. */
     if (!$newApplication) {
         $activityNote = 'User re-applied through candidate portal';
     } else {
         $activityNote = 'User applied through candidate portal';
     }
     if ($fileUploaded) {
         if (!$duplicatesOccurred) {
             $activityNote .= ' <span style="font-weight: bold;">and' . ' attached a new resume (<a href="' . $resumePath . '">Download</a>)</span>';
         } else {
             $activityNote .= ' and attached an existing resume (<a href="' . $resumePath . '">Download</a>)';
         }
     }
     if (!empty($extraNotes)) {
         $activityNote .= '; added these notes: ' . $extraNotes;
     }
     /* Add the activity note. */
     $activityID = $activityEntries->add($candidateID, DATA_ITEM_CANDIDATE, ACTIVITY_OTHER, $activityNote, $automatedUser['userID'], $jobOrderID);
     /* Send an E-Mail describing what happened. */
     $emailTemplates = new EmailTemplates($siteID);
     $candidatesEmailTemplateRS = $emailTemplates->getByTag('EMAIL_TEMPLATE_CANDIDATEAPPLY');
     if (!isset($candidatesEmailTemplateRS['textReplaced']) || empty($candidatesEmailTemplateRS['textReplaced']) || $candidatesEmailTemplateRS['disabled'] == 1) {
         $candidatesEmailTemplate = '';
     } else {
         $candidatesEmailTemplate = $candidatesEmailTemplateRS['textReplaced'];
     }
     /* Replace e-mail template variables. */
     /* E-Mail #1 - to candidate */
     $stringsToFind = array('%CANDFIRSTNAME%', '%CANDFULLNAME%', '%JBODOWNER%', '%JBODTITLE%', '%JBODCLIENT%');
     $replacementStrings = array($firstName, $firstName . ' ' . $lastName, $jobOrderData['ownerFullName'], $jobOrderData['title'], $jobOrderData['companyName']);
     $candidatesEmailTemplate = str_replace($stringsToFind, $replacementStrings, $candidatesEmailTemplate);
     $emailContents = $candidatesEmailTemplate;
     if (!empty($emailContents)) {
         $careerPortalSettings->sendEmail($automatedUser['userID'], $email, CAREERS_CANDIDATEAPPLY_SUBJECT, $emailContents);
     }
     /* E-Mail #2 - to owner */
     $candidatesEmailTemplateRS = $emailTemplates->getByTag('EMAIL_TEMPLATE_CANDIDATEPORTALNEW');
     if (!isset($candidatesEmailTemplateRS['textReplaced']) || empty($candidatesEmailTemplateRS['textReplaced']) || $candidatesEmailTemplateRS['disabled'] == 1) {
         $candidatesEmailTemplate = '';
     } else {
         $candidatesEmailTemplate = $candidatesEmailTemplateRS['textReplaced'];
     }
     // FIXME: This will break if 'http' is elsewhere in the URL.
     $uri = str_replace('employment', '', $_SERVER['REQUEST_URI']);
     $uri = str_replace('http://', 'http', $uri);
     $uri = str_replace('//', '/', $uri);
     $uri = str_replace('http', 'http://', $uri);
     $uri = str_replace('/careers', '', $uri);
     /* Replace e-mail template variables. */
     $stringsToFind = array('%CANDFIRSTNAME%', '%CANDFULLNAME%', '%JBODOWNER%', '%CANDOWNER%', '%JBODTITLE%', '%JBODCLIENT%', '%CANDCATSURL%', '%JBODID%', '%JBODCATSURL%');
     $replacementStrings = array($firstName, $firstName . ' ' . $lastName, $jobOrderData['ownerFullName'], $jobOrderData['ownerFullName'], $jobOrderData['title'], $jobOrderData['companyName'], '<a href="http://' . $_SERVER['HTTP_HOST'] . substr($uri, 0, strpos($uri, '?')) . '?m=candidates&amp;a=show&amp;candidateID=' . $candidateID . '">' . 'http://' . $_SERVER['HTTP_HOST'] . substr($uri, 0, strpos($uri, '?')) . '?m=candidates&amp;a=show&amp;candidateID=' . $candidateID . '</a>', $jobOrderData['jobOrderID'], '<a href="http://' . $_SERVER['HTTP_HOST'] . substr($uri, 0, strpos($uri, '?')) . '?m=joborders&amp;a=show&amp;jobOrderID=' . $jobOrderData['jobOrderID'] . '">' . 'http://' . $_SERVER['HTTP_HOST'] . substr($uri, 0, strpos($uri, '?')) . '?m=joborders&amp;a=show&amp;jobOrderID=' . $jobOrderData['jobOrderID'] . '</a>');
     $candidatesEmailTemplate = str_replace($stringsToFind, $replacementStrings, $candidatesEmailTemplate);
     $emailContents = $candidatesEmailTemplate;
     if (!empty($emailContents)) {
         $careerPortalSettings->sendEmail($automatedUser['userID'], $jobOrderData['owner_email'], CAREERS_OWNERAPPLY_SUBJECT, $emailContents);
         if ($jobOrderData['owner_email'] != $jobOrderData['recruiter_email']) {
             $careerPortalSettings->sendEmail($automatedUser['userID'], $jobOrderData['recruiter_email'], CAREERS_OWNERAPPLY_SUBJECT, $emailContents);
         }
     }
 }