/** * Removes a candidate and all associated records from the system. * * @param integer Candidate ID to delete. * @return void */ public function delete($candidateID) { /* Delete the candidate from candidate. */ $sql = sprintf("DELETE FROM\n candidate\n WHERE\n candidate_id = %s\n AND\n site_id = %s", $this->_db->makeQueryInteger($candidateID), $this->_siteID); $this->_db->query($sql); $history = new History($this->_siteID); $history->storeHistoryDeleted(DATA_ITEM_CANDIDATE, $candidateID); /* Delete pipeline entries from candidate_joborder. */ $sql = sprintf("DELETE FROM\n candidate_joborder\n WHERE\n candidate_id = %s\n AND\n site_id = %s", $this->_db->makeQueryInteger($candidateID), $this->_siteID); $this->_db->query($sql); /* Delete pipeline history from candidate_joborder_status_history. */ $sql = sprintf("DELETE FROM\n candidate_joborder_status_history\n WHERE\n candidate_id = %s\n AND\n site_id = %s", $this->_db->makeQueryInteger($candidateID), $this->_siteID); $this->_db->query($sql); /* Delete from saved lists. */ $sql = sprintf("DELETE FROM\n saved_list_entry\n WHERE\n data_item_id = %s\n AND\n site_id = %s\n AND\n data_item_type = %s", $this->_db->makeQueryInteger($candidateID), $this->_siteID, DATA_ITEM_CANDIDATE); $this->_db->query($sql); /* Delete attachments. */ $attachments = new Attachments($this->_siteID); $attachmentsRS = $attachments->getAll(DATA_ITEM_CANDIDATE, $candidateID); foreach ($attachmentsRS as $rowNumber => $row) { $attachments->delete($row['attachmentID']); } /* Delete extra fields. */ $this->extraFields->deleteValueByDataItemID($candidateID); }
private function createBackup() { if ($this->_realAccessLevel < ACCESS_LEVEL_SA) { CommonErrors::fatal(COMMONERROR_PERMISSION, $this); return; //$this->fatal(ERROR_NO_PERMISSION); } /* Attachments */ $attachments = new Attachments(CATS_ADMIN_SITE); $attachmentsRS = $attachments->getAll(DATA_ITEM_COMPANY, $_SESSION['CATS']->getSiteCompanyID()); foreach ($attachmentsRS as $index => $data) { $attachmentsRS[$index]['fileSize'] = fileUtility::sizeToHuman(filesize($data['retrievalURLLocal']), 2, 1); } $this->_template->assign('active', $this); $this->_template->assign('subActive', 'Administration'); $this->_template->assign('attachmentsRS', $attachmentsRS); $this->_template->display('./modules/settings/Backup.tpl'); }
private function show() { /* Bail out if we don't have a valid company ID. */ if (!$this->isRequiredIDValid('companyID', $_GET)) { $this->listByView('Invalid company ID.'); return; } $companyID = $_GET['companyID']; $companies = new Companies($this->_siteID); $data = $companies->get($companyID); /* Bail out if we got an empty result set. */ if (empty($data)) { $this->listByView('The specified company ID could not be found.'); return; } /* We want to handle formatting the city and state here instead * of in the template. */ $data['cityAndState'] = StringUtility::makeCityStateString($data['city'], $data['state']); /* * Replace newlines with <br />, fix HTML "special" characters, and * strip leading empty lines and spaces. */ $data['notes'] = trim(nl2br(htmlspecialchars($data['notes'], ENT_QUOTES))); /* Chop $data['notes'] to make $data['shortNotes']. */ if (strlen($data['notes']) > self::NOTES_MAXLEN) { $data['shortNotes'] = substr($data['notes'], 0, self::NOTES_MAXLEN); $isShortNotes = true; } else { $data['shortNotes'] = $data['notes']; $isShortNotes = false; } /* Hot companies [can] have different title styles than normal companies. */ if ($data['isHot'] == 1) { $data['titleClass'] = 'jobTitleHot'; } else { $data['titleClass'] = 'jobTitleCold'; } /* Link to Google Maps for this address */ if (!empty($data['address']) && !empty($data['city']) && !empty($data['state'])) { $data['googleMaps'] = '<a href="http://maps.google.com/maps?q=' . urlencode($data['address']) . '+' . urlencode($data['city']) . '+' . urlencode($data['state']); /* Google Maps will find an address without Zip. */ if (!empty($data['zip'])) { $data['googleMaps'] .= '+' . $data['zip']; } $data['googleMaps'] .= '" target=_blank><img src="images/google_maps.gif" style="border: none;" class="absmiddle" /></a>'; } else { $data['googleMaps'] = ''; } /* Attachments */ $attachments = new Attachments($this->_siteID); $attachmentsRS = $attachments->getAll(DATA_ITEM_COMPANY, $companyID); foreach ($attachmentsRS as $rowNumber => $attachmentsData) { /* Show an attachment icon based on the document's file type. */ $attachmentIcon = strtolower(FileUtility::getAttachmentIcon($attachmentsRS[$rowNumber]['originalFilename'])); $attachmentsRS[$rowNumber]['attachmentIcon'] = $attachmentIcon; } /* Job Orders for this company */ $jobOrders = new JobOrders($this->_siteID); $jobOrdersRS = $jobOrders->getAll(JOBORDERS_STATUS_ALL, -1, $companyID, -1); if (!empty($jobOrdersRS)) { foreach ($jobOrdersRS as $rowIndex => $row) { /* Convert '00-00-00' dates to empty strings. */ $jobOrdersRS[$rowIndex]['startDate'] = DateUtility::fixZeroDate($jobOrdersRS[$rowIndex]['startDate']); /* Hot jobs [can] have different title styles than normal * jobs. */ if ($jobOrdersRS[$rowIndex]['isHot'] == 1) { $jobOrdersRS[$rowIndex]['linkClass'] = 'jobLinkHot'; } else { $jobOrdersRS[$rowIndex]['linkClass'] = 'jobLinkCold'; } $jobOrdersRS[$rowIndex]['recruiterAbbrName'] = StringUtility::makeInitialName($jobOrdersRS[$rowIndex]['recruiterFirstName'], $jobOrdersRS[$rowIndex]['recruiterLastName'], false, LAST_NAME_MAXLEN); $jobOrdersRS[$rowIndex]['ownerAbbrName'] = StringUtility::makeInitialName($jobOrdersRS[$rowIndex]['ownerFirstName'], $jobOrdersRS[$rowIndex]['ownerLastName'], false, LAST_NAME_MAXLEN); } } /* Contacts for this company */ $contacts = new Contacts($this->_siteID); $contactsRS = $contacts->getAll(-1, $companyID); $contactsRSWC = null; if (!empty($contactsRS)) { foreach ($contactsRS as $rowIndex => $row) { /* Hot contacts [can] have different title styles than normal contacts. */ if ($contactsRS[$rowIndex]['isHot'] == 1) { $contactsRS[$rowIndex]['linkClass'] = 'jobLinkHot'; } else { $contactsRS[$rowIndex]['linkClass'] = 'jobLinkCold'; } if (!empty($contactsRS[$rowIndex]['ownerFirstName'])) { $contactsRS[$rowIndex]['ownerAbbrName'] = StringUtility::makeInitialName($contactsRS[$rowIndex]['ownerFirstName'], $contactsRS[$rowIndex]['ownerLastName'], false, LAST_NAME_MAXLEN); } else { $contactsRS[$rowIndex]['ownerAbbrName'] = 'None'; } if ($contactsRS[$rowIndex]['leftCompany'] == 0) { $contactsRSWC[] = $contactsRS[$rowIndex]; } else { $contactsRS[$rowIndex]['linkClass'] = 'jobLinkDead'; } } } /* Add an MRU entry. */ $_SESSION['CATS']->getMRU()->addEntry(DATA_ITEM_COMPANY, $companyID, $data['name']); /* Get extra fields. */ $extraFieldRS = $companies->extraFields->getValuesForShow($companyID); /* Get departments. */ $departmentsRS = $companies->getDepartments($companyID); /* Is the user an admin - can user see history? */ if ($this->_accessLevel < ACCESS_LEVEL_DEMO) { $privledgedUser = false; } else { $privledgedUser = true; } $this->_template->assign('active', $this); $this->_template->assign('data', $data); $this->_template->assign('attachmentsRS', $attachmentsRS); $this->_template->assign('departmentsRS', $departmentsRS); $this->_template->assign('extraFieldRS', $extraFieldRS); $this->_template->assign('isShortNotes', $isShortNotes); $this->_template->assign('jobOrdersRS', $jobOrdersRS); $this->_template->assign('contactsRS', $contactsRS); $this->_template->assign('contactsRSWC', $contactsRSWC); $this->_template->assign('privledgedUser', $privledgedUser); $this->_template->assign('companyID', $companyID); if (!eval(Hooks::get('CLIENTS_SHOW'))) { return; } $this->_template->display('./modules/companies/Show.tpl'); }
/** * Removes a company and all associated records from the system. * * @param integer Company ID * @return void */ public function delete($companyID) { /* Delete the company. */ $sql = sprintf("DELETE FROM\n company\n WHERE\n company_id = %s\n AND\n site_id = %s", $companyID, $this->_siteID); $this->_db->query($sql); $history = new History($this->_siteID); $history->storeHistoryDeleted(DATA_ITEM_COMPANY, $companyID); /* Find associated contacts. */ $sql = sprintf("SELECT\n contact_id AS contactID\n FROM\n contact\n WHERE\n company_id = %s\n AND\n site_id = %s", $companyID, $this->_siteID); $contactsRS = $this->_db->getAllAssoc($sql); /* Find associated job orders. */ $sql = sprintf("SELECT\n joborder_id AS jobOrderID\n FROM\n joborder\n WHERE\n company_id = %s\n AND\n site_id = %s", $companyID, $this->_siteID); $jobOrdersRS = $this->_db->getAllAssoc($sql); /* Find associated attachments. */ $attachments = new Attachments($this->_siteID); $attachmentsRS = $attachments->getAll(DATA_ITEM_COMPANY, $companyID); /* Delete associated contacts. */ $contacts = new Contacts($this->_siteID); foreach ($contactsRS as $rowIndex => $row) { $contacts->delete($row['contactID']); } /* Delete associated job orders. */ $jobOrders = new JobOrders($this->_siteID); foreach ($jobOrdersRS as $rowIndex => $row) { $jobOrders->delete($row['jobOrderID']); } /* Delete associated attachments. */ foreach ($attachmentsRS as $rowNumber => $row) { $attachments->delete($row['attachmentID']); } /* Delete from saved lists. */ $sql = sprintf("DELETE FROM\n saved_list_entry\n WHERE\n data_item_id = %s\n AND\n site_id = %s\n AND\n data_item_type = %s", $this->_db->makeQueryInteger($companyID), $this->_siteID, DATA_ITEM_COMPANY); $this->_db->query($sql); /* Delete extra fields. */ $this->extraFields->deleteValueByDataItemID($companyID); }
public 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 Not Active</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 /> ' . ( // If parsing is enabled, add the image link for it 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&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&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']) : '').'&p=search">', $template[$index]); $template[$index] = str_replace('<a-ListAll>', '<a href="'.$indexName.'?m=careers'.(isset($_GET['templateName']) ? '&templateName='.urlencode($_GET['templateName']) : '').'&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.php'); } }
private function show() { /* Is this a popup? */ if (isset($_GET['display']) && $_GET['display'] == 'popup') { $isPopup = true; } else { $isPopup = false; } /* Bail out if we don't have a valid candidate ID. */ if (!$this->isRequiredIDValid('jobOrderID', $_GET)) { /* FIXME: fatalPopup()? */ CommonErrors::fatal(COMMONERROR_BADINDEX, $this, 'Invalid job order ID.'); } $jobOrderID = $_GET['jobOrderID']; $jobOrders = new JobOrders($this->_siteID); $data = $jobOrders->get($jobOrderID); /* Bail out if we got an empty result set. */ if (empty($data)) { CommonErrors::fatal(COMMONERROR_BADINDEX, $this, 'The specified job order ID could not be found.'); } if ($data['isAdminHidden'] == 1 && $this->_accessLevel < ACCESS_LEVEL_MULTI_SA) { $this->listByView('This Job Order is hidden - only a CATS Administrator can unlock the Job Order.'); return; } /* We want to handle formatting the city and state here instead of in * the template. */ $data['cityAndState'] = StringUtility::makeCityStateString($data['city'], $data['state']); $data['description'] = trim($data['description']); $data['notes'] = trim($data['notes']); /* Determine the Job Type Description */ $data['typeDescription'] = $jobOrders->typeCodeToString($data['type']); /* Convert '00-00-00' dates to empty strings. */ $data['startDate'] = DateUtility::fixZeroDate($data['startDate']); /* Hot jobs [can] have different title styles than normal jobs. */ if ($data['isHot'] == 1) { $data['titleClass'] = 'jobTitleHot'; } else { $data['titleClass'] = 'jobTitleCold'; } if ($data['public'] == 1) { $data['public'] = '<img src="images/public.gif" height="16" ' . 'width="16" title="This Job Order is marked as Public." />'; } else { $data['public'] = ''; } $attachments = new Attachments($this->_siteID); $attachmentsRS = $attachments->getAll(DATA_ITEM_JOBORDER, $jobOrderID); foreach ($attachmentsRS as $rowNumber => $attachmentsData) { /* Show an attachment icon based on the document's file type. */ $attachmentIcon = strtolower(FileUtility::getAttachmentIcon($attachmentsRS[$rowNumber]['originalFilename'])); $attachmentsRS[$rowNumber]['attachmentIcon'] = $attachmentIcon; } $careerPortalSettings = new CareerPortalSettings($this->_siteID); $careerPortalSettingsRS = $careerPortalSettings->getAll(); if ($careerPortalSettingsRS['enabled'] == 1) { $careerPortalEnabled = true; } else { $careerPortalEnabled = false; } /* Add an MRU entry. */ $_SESSION['CATS']->getMRU()->addEntry(DATA_ITEM_JOBORDER, $jobOrderID, $data['title']); if ($this->_accessLevel < ACCESS_LEVEL_DEMO) { $privledgedUser = false; } else { $privledgedUser = true; } /* Get extra fields. */ $extraFieldRS = $jobOrders->extraFields->getValuesForShow($jobOrderID); $pipelineEntriesPerPage = $_SESSION['CATS']->getPipelineEntriesPerPage(); $sessionCookie = $_SESSION['CATS']->getCookie(); /* Get pipeline graph. */ $graphs = new graphs(); $pipelineGraph = $graphs->miniJobOrderPipeline(450, 250, array($jobOrderID)); /* Get questionnaire information (if exists) */ $questionnaireID = false; $questionnaireData = false; $careerPortalURL = false; $isPublic = false; if ($careerPortalEnabled && $data['public']) { $isPublic = true; if ($data['questionnaireID']) { $questionnaire = new Questionnaire($this->_siteID); $q = $questionnaire->get($data['questionnaireID']); if (is_array($q) && !empty($q)) { $questionnaireID = $q['questionnaireID']; $questionnaireData = $q; } } } $careerPortalSettings = new CareerPortalSettings($this->_siteID); $cpSettings = $careerPortalSettings->getAll(); if (intval($cpSettings['enabled'])) { $careerPortalURL = CATSUtility::getAbsoluteURI() . 'careers/'; } $this->_template->assign('active', $this); $this->_template->assign('isPublic', $isPublic); $this->_template->assign('questionnaireID', $questionnaireID); $this->_template->assign('questionnaireData', $questionnaireData); $this->_template->assign('careerPortalURL', $careerPortalURL); $this->_template->assign('data', $data); $this->_template->assign('extraFieldRS', $extraFieldRS); $this->_template->assign('attachmentsRS', $attachmentsRS); $this->_template->assign('pipelineEntriesPerPage', $pipelineEntriesPerPage); $this->_template->assign('pipelineGraph', $pipelineGraph); $this->_template->assign('jobOrderID', $jobOrderID); $this->_template->assign('isPopup', $isPopup); $this->_template->assign('careerPortalEnabled', $careerPortalEnabled); $this->_template->assign('privledgedUser', $privledgedUser); $this->_template->assign('sessionCookie', $_SESSION['CATS']->getCookie()); if (!eval(Hooks::get('JO_SHOW'))) { return; } $this->_template->display('./modules/joborders/Show.tpl'); }
public function show() { /* Bail out if we don't have a valid candidate ID. */ if (!$this->isRequiredIDValid('jobOrderID', $_GET)) { /* FIXME: fatalPopup()? */ CommonErrors::fatal(COMMONERROR_BADINDEX, $this, 'Invalid job order ID.'); } $jobOrderID = $_GET['jobOrderID']; $jobOrders = new JobOrders($this->_siteID); $data = $jobOrders->get($jobOrderID); /* Bail out if we got an empty result set. */ if (empty($data)) { CommonErrors::fatal(COMMONERROR_BADINDEX, $this, 'The specified job order ID could not be found.'); } if ($data['is_admin_hidden'] == 1 && $this->_accessLevel < ACCESS_LEVEL_MULTI_SA) { $this->listByView('This Job Order is hidden - only a CATS Administrator can unlock the Job Order.'); return; } /* We want to handle formatting the city and state here instead of in * the template. */ $data['cityAndState'] = StringUtility::makeCityStateString( $data['city'], $data['state'] ); /** * if ownertype is group, override the user full name */ if($data['ownertype']>0) { $sql="select * from auieo_groups where id={$data['owner']}"; $objDB=DatabaseConnection::getInstance(); $row=$objDB->getAssoc($sql); if($row) { $data["ownerFullName"]=$row["groupname"]; } } $data['description'] = trim($data['description']); $data['notes'] = trim($data['notes']); /* Determine the Job Type Description */ $data['typeDescription'] = $jobOrders->typeCodeToString($data['type']); /* Convert '00-00-00' dates to empty strings. */ $data['startDate'] = DateUtility::fixZeroDate( $data['startDate'] ); /* Hot jobs [can] have different title styles than normal jobs. */ if ($data['is_hot'] == 1) { $data['titleClass'] = 'jobTitleHot'; } else { $data['titleClass'] = 'jobTitleCold'; } if ($data['public'] == 1) { $data['public'] = '<img src="images/public.gif" height="16" ' . 'width="16" title="This Job Order is marked as Public." />'; } else { $data['public'] = ''; } $attachments = new Attachments($this->_siteID); $attachmentsRS = $attachments->getAll( DATA_ITEM_JOBORDER, $jobOrderID ); foreach ($attachmentsRS as $rowNumber => $attachmentsData) { /* Show an attachment icon based on the document's file type. */ $attachmentIcon = strtolower( FileUtility::getAttachmentIcon( $attachmentsRS[$rowNumber]['originalFilename'] ) ); $attachmentsRS[$rowNumber]['attachmentIcon'] = $attachmentIcon; } $careerPortalSettings = new CareerPortalSettings($this->_siteID); $careerPortalSettingsRS = $careerPortalSettings->getAll(); if ($careerPortalSettingsRS['enabled'] == 1) { $careerPortalEnabled = true; } else { $careerPortalEnabled = false; } /* Add an MRU entry. */ $_SESSION['CATS']->getMRU()->addEntry( DATA_ITEM_JOBORDER, $jobOrderID, $data['title'] ); if ($this->_accessLevel < ACCESS_LEVEL_DEMO) { $privledgedUser = false; } else { $privledgedUser = true; } /* Get extra fields. */ $extraFieldRS = $jobOrders->extraFields->getValuesForShow($jobOrderID); $pipelineEntriesPerPage = $_SESSION['CATS']->getPipelineEntriesPerPage(); $sessionCookie = $_SESSION['CATS']->getCookie(); /* Get pipeline graph. */ $graphs = new graphs(); $pipelineGraph = $graphs->miniJobOrderPipeline(450, 250, array($jobOrderID)); /* Get questionnaire information (if exists) */ $questionnaireID = false; $questionnaireData = false; $careerPortalURL = false; $isPublic = false; if ($careerPortalEnabled && $data['public']) { $isPublic = true; if ($data['questionnaire_id']) { $questionnaire = new Questionnaire($this->_siteID); $q = $questionnaire->get($data['questionnaire_id']); if (is_array($q) && !empty($q)) { $questionnaireID = $q['questionnaireID']; $questionnaireData = $q; } } } $careerPortalSettings = new CareerPortalSettings($this->_siteID); $cpSettings = $careerPortalSettings->getAll(); if (intval($cpSettings['enabled'])) { $careerPortalURL = CATSUtility::getAbsoluteURI() . 'careers/'; } //$sql="select * from auieo_fields where site_id={$this->_siteID} and tablename='joborder' and presence!=1"; //$db=DatabaseConnection::getInstance(); //$arrAssoc=$db->getAllAssoc($sql); $adminHidden=""; if ($data['is_admin_hidden'] == 1) { $adminHidden = "<p class='warning'>This Job Order is hidden. Only CATS Administrators can view it or search for it. To make it visible by the site users, click <a href='index.php?m=joborders&a=administrativeHideShow&jobOrderID={$jobOrderID}&state=0' style='font-weight:bold;'>Here.</a></p>"; } $strFrozen=""; if (isset($frozen)) { $strFrozen = "<table style='font-weight:bold; border: 1px solid #000; background-color: #ffed1a; padding:5px; margin-bottom:7px;' width='100%' id='candidateAlreadyInSystemTable'> <tr> <td class='tdVertical' style='width:100%;'> This Job Order is {$this->data['status']} and can not be modified. "; if ($this->accessLevel >= ACCESS_LEVEL_EDIT) { $strFrozen = $strFrozen . " <a id='edit_link' href='index.php?m=joborders&a=edit&jobOrderID={$this->jobOrderID}'> <img src='images/actions/edit.gif' width='16' height='16' class='absmiddle' alt='edit' border='0' /> Edit </a> the Job Order to make it Active. "; } $strFrozen = $strFrozen . " </td> </tr> </table> "; } $public=""; if ($isPublic) { $public = "<div style='background-color: #E6EEFE; padding: 10px; margin: 5px 0 12px 0; border: 1px solid #728CC8;'> <b>This job order is public"; if ($careerPortalURL === false) { $public = $public . ".</b>"; } else { $public = $public . " and will be shown on your "; if ($_SESSION['CATS']->getAccessLevel() >= ACCESS_LEVEL_SA){ $public = $public . " <a style='font-weight: bold;' href='{$careerPortalURL}'>Careers Website</a>. "; } else { $public = $public . " Careers Website. "; } $public = $public . "</b> "; } if ($questionnaireID !== false) { $public = $public . "<br />Applicants must complete the '<i>{$questionnaireData['title']}</i>' (<a href='index.php?m=settings&a=careerPortalQuestionnaire&questionnaireID={$questionnaireID}'>edit</a>) questionnaire when applying."; } else { $public = $public . "<br />You have not attached any "; if ($_SESSION['CATS']->getAccessLevel() >= ACCESS_LEVEL_SA) { $public = $public . "<a href='index.php?m=settings&a=careerPortalSettings'>Questionnaires</a>."; } else { $public = $public . "Questionnaires."; } } $public = $public . "</div>"; } $ACCESS_LEVEL_EDIT_BUTTON=""; if ($this->_accessLevel >= ACCESS_LEVEL_EDIT) { $ACCESS_LEVEL_EDIT_BUTTON = "<a id='edit_link' href='index.php?m=joborders&a=edit&jobOrderID={$jobOrderID}'> <img src='images/actions/edit.gif' width='16' height='16' class='absmiddle' alt='edit' border='0' /> Edit </a>"; } $ACCESS_LEVEL_DELETE_BUTTON=""; if ($this->_accessLevel >= ACCESS_LEVEL_DELETE) { $ACCESS_LEVEL_DELETE_BUTTON = "<a id='delete_link' href='index.php?m=joborders&a=delete&jobOrderID={$jobOrderID}' onclick=\"javascript:return confirm('Delete this job order?');\"> <img src='images/actions/delete.gif' width='16' height='16' class='absmiddle' alt='delete' border='0' /> Delete </a>"; } $ACCESS_LEVEL_MULTI_SA_BUTTON=""; if ($this->_accessLevel >= ACCESS_LEVEL_MULTI_SA) { if ($data['is_admin_hidden'] == 1) { $ACCESS_LEVEL_MULTI_SA_BUTTON = "<a href='index.php?m=joborders&a=administrativeHideShow&jobOrderID={$jobOrderID}&state=0'> <img src='images/resume_preview_inline.gif' width='16' height='16' class='absmiddle' alt='delete' border='0' /> Administrative Show </a>"; } else { $ACCESS_LEVEL_MULTI_SA_BUTTON = "<a href='index.php?m=joborders&a=administrativeHideShow&jobOrderID={$jobOrderID}&state=1'> <img src='images/resume_preview_inline.gif' width='16' height='16' class='absmiddle' alt='delete' border='0' /> Administrative Hide </a>"; } } $ACCESS_LEVEL_EDIT_CONSIDER=""; if ($this->_accessLevel >= ACCESS_LEVEL_EDIT) { $ACCESS_LEVEL_EDIT_CONSIDER = "<a href='#' onclick=\"showPopWin('index.php?m=joborders&a=considerCandidateSearch&jobOrderID={$jobOrderID}', 820, 550, null); return false;\"> <img src='images/consider.gif' width='16' height='16' class='absmiddle' alt='add candidate' border='0' /> Add Candidate to This Job Order Pipeline </a>"; } $this->_template->assign('active', $this); $this->_template->assign('public', $public); $this->_template->assign('ACCESS_LEVEL_EDIT_BUTTON', $ACCESS_LEVEL_EDIT_BUTTON); $this->_template->assign('ACCESS_LEVEL_DELETE_BUTTON', $ACCESS_LEVEL_DELETE_BUTTON); $this->_template->assign('ACCESS_LEVEL_MULTI_SA_BUTTON', $ACCESS_LEVEL_MULTI_SA_BUTTON); $this->_template->assign('ACCESS_LEVEL_EDIT_CONSIDER', $ACCESS_LEVEL_EDIT_CONSIDER); $this->_template->assign('questionnaireID', $questionnaireID); $this->_template->assign('questionnaireData', $questionnaireData); $this->_template->assign('careerPortalURL', $careerPortalURL); $this->_template->assign('data', $data); $this->_template->assign('frozen', $strFrozen); $this->_template->assign('adminHidden',$adminHidden); $this->_template->assign('extraFieldRS', $extraFieldRS); $this->_template->assign('attachmentsRS', $attachmentsRS); $this->_template->assign('pipelineEntriesPerPage', $pipelineEntriesPerPage); $this->_template->assign('pipelineGraph', $pipelineGraph); $this->_template->assign('jobOrderID', $jobOrderID); $this->_template->assign('careerPortalEnabled', $careerPortalEnabled); $this->_template->assign('privledgedUser', $privledgedUser); $this->_template->assign('sessionCookie', $_SESSION['CATS']->getCookie()); //$this->_template->assign('fields_detail',$arrAssoc); if (!eval(Hooks::get('JO_SHOW'))) return; /* Is this a popup? */ if (isset($_GET['display']) && $_GET['display'] == 'popup') { $this->_template->display('./modules/joborders/show_popup.php'); $isPopup = true; } else { $this->_template->display('./modules/joborders/Show.php'); $isPopup = false; } }
private function onShowQuestionnaire() { $candidateID = isset($_GET[$id = 'candidateID']) ? $_GET[$id] : false; $title = isset($_GET[$id = 'questionnaireTitle']) ? urldecode($_GET[$id]) : false; $printOption = isset($_GET[$id = 'print']) ? $_GET[$id] : ''; $printValue = !strcasecmp($printOption, 'yes') ? true : false; if (!$candidateID || !$title) { CommonErrors::fatal(COMMONERROR_BADINDEX); } $candidates = new Candidates($this->_siteID); $cData = $candidates->get($candidateID); $questionnaire = new Questionnaire($this->_siteID); $qData = $questionnaire->getCandidateQuestionnaire($candidateID, $title); $attachment = new Attachments($this->_siteID); $attachments = $attachment->getAll(DATA_ITEM_CANDIDATE, $candidateID); if (!empty($attachments)) { $resume = $candidates->getResume($attachments[0]['attachmentID']); $this->_template->assign('resumeText', str_replace("\n", "<br \\>\n", htmlentities(DatabaseSearch::fulltextDecode($resume['text'])))); $this->_template->assign('resumeTitle', htmlentities($resume['title'])); } $this->_template->assign('active', $this); $this->_template->assign('candidateID', $candidateID); $this->_template->assign('title', $title); $this->_template->assign('cData', $cData); $this->_template->assign('qData', $qData); $this->_template->assign('print', $printValue); $this->_template->display('./modules/candidates/Questionnaire.tpl'); }