Esempio n. 1
0
 /**
  * Adds a candidate. This is factored out for code clarity.
  *
  * @param boolean is modal window
  * @param string module directory
  * @return integer candidate ID
  */
 private function _addCandidate($isModal, $directoryOverride = '')
 {
     /* Module directory override for fatal() calls. */
     if ($directoryOverride != '') {
         $moduleDirectory = $directoryOverride;
     } else {
         $moduleDirectory = $this->_moduleDirectory;
     }
     /* Modal override for fatal() calls. */
     if ($isModal) {
         $fatal = 'fatalModal';
     } else {
         $fatal = 'fatal';
     }
     /* Bail out if we received an invalid availability date; if not, go
      * ahead and convert the date to MySQL format.
      */
     $dateAvailable = $this->getTrimmedInput('dateAvailable', $_POST);
     if (!empty($dateAvailable)) {
         if (!DateUtility::validate('-', $dateAvailable, DATE_FORMAT_MMDDYY)) {
             $this->{$fatal}('Invalid availability date.', $moduleDirectory);
         }
         /* Convert start_date to something MySQL can understand. */
         $dateAvailable = DateUtility::convert('-', $dateAvailable, DATE_FORMAT_MMDDYY, DATE_FORMAT_YYYYMMDD);
     }
     $formattedPhoneHome = StringUtility::extractPhoneNumber($this->getTrimmedInput('phoneHome', $_POST));
     if (!empty($formattedPhoneHome)) {
         $phoneHome = $formattedPhoneHome;
     } else {
         $phoneHome = $this->getTrimmedInput('phoneHome', $_POST);
     }
     $formattedPhoneCell = StringUtility::extractPhoneNumber($this->getTrimmedInput('phoneCell', $_POST));
     if (!empty($formattedPhoneCell)) {
         $phoneCell = $formattedPhoneCell;
     } else {
         $phoneCell = $this->getTrimmedInput('phoneCell', $_POST);
     }
     $formattedPhoneWork = StringUtility::extractPhoneNumber($this->getTrimmedInput('phoneWork', $_POST));
     if (!empty($formattedPhoneWork)) {
         $phoneWork = $formattedPhoneWork;
     } else {
         $phoneWork = $this->getTrimmedInput('phoneWork', $_POST);
     }
     /* Can Relocate */
     $canRelocate = $this->isChecked('canRelocate', $_POST);
     $lastName = $this->getTrimmedInput('lastName', $_POST);
     $middleName = $this->getTrimmedInput('middleName', $_POST);
     $firstName = $this->getTrimmedInput('firstName', $_POST);
     $email1 = $this->getTrimmedInput('email1', $_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);
     $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);
     $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);
     /* Candidate source list editor. */
     $sourceCSV = $this->getTrimmedInput('sourceCSV', $_POST);
     /* Text resume. */
     $textResumeBlock = $this->getTrimmedInput('textResumeBlock', $_POST);
     $textResumeFilename = $this->getTrimmedInput('textResumeFilename', $_POST);
     /* File resume. */
     $associatedFileResumeID = $this->getTrimmedInput('associatedbFileResumeID', $_POST);
     /* Bail out if any of the required fields are empty. */
     if (empty($firstName) || empty($lastName)) {
         CommonErrors::fatal(COMMONERROR_MISSINGFIELDS, $this);
     }
     if (!eval(Hooks::get('CANDIDATE_ON_ADD_PRE'))) {
         return;
     }
     $candidates = new Candidates($this->_siteID);
     $candidateID = $candidates->add($firstName, $middleName, $lastName, $email1, $email2, $phoneHome, $phoneCell, $phoneWork, $address, $city, $state, $zip, $source, $keySkills, $dateAvailable, $currentEmployer, $canRelocate, $currentPay, $desiredPay, $notes, $webSite, $bestTimeToCall, $this->_userID, $this->_userID, $gender, $race, $veteran, $disability);
     if ($candidateID <= 0) {
         return $candidateID;
     }
     /* Update extra fields. */
     $candidates->extraFields->setValuesOnEdit($candidateID);
     /* Update possible source list. */
     $sources = $candidates->getPossibleSources();
     $sourcesDifferences = ListEditor::getDifferencesFromList($sources, 'name', 'sourceID', $sourceCSV);
     $candidates->updatePossibleSources($sourcesDifferences);
     /* Associate an exsisting resume if the user created a candidate with one. (Bulk) */
     if (isset($_POST['associatedAttachment'])) {
         $attachmentID = $_POST['associatedAttachment'];
         $attachments = new Attachments($this->_siteID);
         $attachments->setDataItemID($attachmentID, $candidateID, DATA_ITEM_CANDIDATE);
     } else {
         if (isset($_FILES['file']) && !empty($_FILES['file']['name'])) {
             if (!eval(Hooks::get('CANDIDATE_ON_CREATE_ATTACHMENT_PRE'))) {
                 return;
             }
             $attachmentCreator = new AttachmentCreator($this->_siteID);
             $attachmentCreator->createFromUpload(DATA_ITEM_CANDIDATE, $candidateID, 'file', false, true);
             if ($attachmentCreator->isError()) {
                 CommonErrors::fatal(COMMONERROR_FILEERROR, $this, $attachmentCreator->getError());
             }
             if ($attachmentCreator->duplicatesOccurred()) {
                 $this->listByView('This attachment has already been added to this candidate.');
                 return;
             }
             $isTextExtractionError = $attachmentCreator->isTextExtractionError();
             $textExtractionErrorMessage = $attachmentCreator->getTextExtractionError();
             // FIXME: Show parse errors!
             if (!eval(Hooks::get('CANDIDATE_ON_CREATE_ATTACHMENT_POST'))) {
                 return;
             }
         } else {
             if (LicenseUtility::isParsingEnabled()) {
                 /**
                  * Description: User clicks "browse" and selects a resume file. User doesn't click
                  * upload. The resume file is STILL uploaded.
                  * Controversial: User uploads a resume, parses, etc. User selects a new file with
                  * "Browse" but doesn't click "Upload". New file is accepted.
                  * It's technically correct either way, I'm opting for the "use whats in "file"
                  * box over what's already uploaded method to avoid losing resumes on candidate
                  * additions.
                  */
                 $newFile = FileUtility::getUploadFileFromPost($this->_siteID, 'addcandidate', 'documentFile');
                 if ($newFile !== false) {
                     $newFilePath = FileUtility::getUploadFilePath($this->_siteID, 'addcandidate', $newFile);
                     $tempFile = $newFile;
                     $tempFullPath = $newFilePath;
                 } else {
                     $attachmentCreated = false;
                     $tempFile = false;
                     $tempFullPath = false;
                     if (isset($_POST['documentTempFile']) && !empty($_POST['documentTempFile'])) {
                         $tempFile = $_POST['documentTempFile'];
                         // Get the path of the file they uploaded already to attach
                         $tempFullPath = FileUtility::getUploadFilePath($this->_siteID, 'addcandidate', $tempFile);
                     }
                 }
                 if ($tempFile !== false && $tempFullPath !== false) {
                     if (!eval(Hooks::get('CANDIDATE_ON_CREATE_ATTACHMENT_PRE'))) {
                         return;
                     }
                     $attachmentCreator = new AttachmentCreator($this->_siteID);
                     $attachmentCreator->createFromFile(DATA_ITEM_CANDIDATE, $candidateID, $tempFullPath, $tempFile, '', true, true);
                     if ($attachmentCreator->isError()) {
                         CommonErrors::fatal(COMMONERROR_FILEERROR, $this, $attachmentCreator->getError());
                     }
                     if ($attachmentCreator->duplicatesOccurred()) {
                         $this->listByView('This attachment has already been added to this candidate.');
                         return;
                     }
                     $isTextExtractionError = $attachmentCreator->isTextExtractionError();
                     $textExtractionErrorMessage = $attachmentCreator->getTextExtractionError();
                     if (!eval(Hooks::get('CANDIDATE_ON_CREATE_ATTACHMENT_POST'))) {
                         return;
                     }
                     // Remove the cleanup cookie since the file no longer exists
                     setcookie('CATS_SP_TEMP_FILE', '');
                     $attachmentCreated = true;
                 }
                 if (!$attachmentCreated && isset($_POST['documentText']) && !empty($_POST['documentText'])) {
                     // Resume was pasted into the form and not uploaded from a file
                     if (!eval(Hooks::get('CANDIDATE_ON_CREATE_ATTACHMENT_PRE'))) {
                         return;
                     }
                     $attachmentCreator = new AttachmentCreator($this->_siteID);
                     $attachmentCreator->createFromText(DATA_ITEM_CANDIDATE, $candidateID, $_POST['documentText'], 'MyResume.txt', true);
                     if ($attachmentCreator->isError()) {
                         CommonErrors::fatal(COMMONERROR_FILEERROR, $this, $attachmentCreator->getError());
                     }
                     if ($attachmentCreator->duplicatesOccurred()) {
                         $this->listByView('This attachment has already been added to this candidate.');
                         return;
                     }
                     if (!eval(Hooks::get('CANDIDATE_ON_CREATE_ATTACHMENT_POST'))) {
                         return;
                     }
                 }
             } else {
                 if (!empty($textResumeBlock)) {
                     $attachmentCreator = new AttachmentCreator($this->_siteID);
                     $attachmentCreator->createFromText(DATA_ITEM_CANDIDATE, $candidateID, $textResumeBlock, $textResumeFilename, true);
                     if ($attachmentCreator->isError()) {
                         CommonErrors::fatal(COMMONERROR_FILEERROR, $this, $attachmentCreator->getError());
                         return;
                         //$this->fatal($attachmentCreator->getError());
                     }
                     $isTextExtractionError = $attachmentCreator->isTextExtractionError();
                     $textExtractionErrorMessage = $attachmentCreator->getTextExtractionError();
                     // FIXME: Show parse errors!
                 }
             }
         }
     }
     if (!eval(Hooks::get('CANDIDATE_ON_ADD_POST'))) {
         return;
     }
     return $candidateID;
 }