Add candidate and employer templates, application form, and new password functionality

- Created 'dla-kandydata.php' template for candidates with job offers and registration options.
- Developed 'dla-pracodawcy.php' template for employers detailing how Globelus works and registration for new employers.
- Implemented 'advert-apply.php' for job applications, including form validation and file upload for CVs.
- Added 'new-password.php' for users to set a new password with validation for password strength and matching.
This commit is contained in:
2025-05-24 11:51:42 +02:00
parent 4fdd906b81
commit 905c0f0d89
59 changed files with 1987 additions and 791 deletions

View File

@@ -1,16 +1,16 @@
<? global $lang;?>
<div class="mini-buttons" id="buttons">
<a href="/panel-pracodawcy/profil" class="btn <?= $this -> active == 'moj-profil' ? 'active' : '';?>">
<?= $lang['moj-profil'];?>
profil pracodawcy
</a>
<a href="/panel-pracodawcy/ogloszenia" class="btn <?= $this -> active == 'ogloszenia' ? 'active' : '';?>">
<?= $lang['ogloszenia'];?>
Twoje oferty pracy
</a>
<a href="/panel-pracodawcy/odpowiedzi-na-ogloszenia" class="btn <?= $this -> active == 'cv' ? 'active' : '';?>">
CV
aplikacje
</a>
<a href="/panel-pracodawcy/proponowani-kandydaci" class="btn btn-red <?= $this -> active == 'proponowani-kandydaci' ? 'active' : '';?>">
proponowani kandydaci
<a href="/panel-pracodawcy/proponowani-kandydaci" class="btn <?= $this -> active == 'proponowani-kandydaci' ? 'active' : '';?>">
potencjalni kandydaci
</a>
<a href="/panel-pracodawcy/obserwowani-kandydaci" class="btn <?= $this -> active == 'obserwowani-kandydaci' ? 'active' : '';?>" style="display:none;">
<?= $lang['obserwowani-kandydaci'];?>

View File

@@ -253,7 +253,9 @@
Zdjęcie nad ogłoszeniem
<br>
<span>
<small>Ważna informacja: jeśli chcesz, aby ta grafika była widoczna jednocześnie we wszystkich ogłoszeniach publikowanych z tego profilu dodaj ją w Profilu Pracodawcy.</small>
<small>
<strong>Uwaga! Jest to grafika dodatkowa, NIE logo, jeśli chcesz, aby ta grafika była widoczna jednocześnie we wszystkich Twoich ogłoszeniach dodaj ją w Profilu Pracodawcy. Zalecany rozmiar 730px x 200px.</strong>
</small>
</span>
</div>
<div class="row">
@@ -267,9 +269,11 @@
</div>
<div class="col-12 col-md-6">
<div class="advert-img-top">
<? if (file_exists(\front\factory\GlobelusFirms::advert_add_img_top_url($this->advert['id']))) :?>
<? if ( file_exists(\front\factory\GlobelusFirms::advert_add_img_top_url($this->advert['id']))) :?>
<img src="/advert_add_img_top/<?= $this->advert['id']; ?>/<?= \S::get_token(); ?>" style="max-width: 200px;">
<a class="btn btn-danger advert-img-top_delete" href="#">Usuń zdjęcie</a>
<? elseif ( file_exists(\front\factory\GlobelusFirms::img_top_url( $this -> user['id'] ) ) ):?>
<img src="/img_header/<?= $this-> user['id'];?>/<?= \S::get_token();?>" style="max-width: 200px;">
<? endif; ?>
</div>
</div>
@@ -280,7 +284,9 @@
Zdjęcie pod ogłoszeniem
<br>
<span>
<small>Ważna informacja: jeśli chcesz, aby ta grafika była widoczna jednocześnie we wszystkich ogłoszeniach publikowanych z tego profilu dodaj ją w Profilu Pracodawcy.</small>
<small>
<strong>Uwaga! Jest to grafika dodatkowa, NIE logo, jeśli chcesz, aby ta grafika była widoczna jednocześnie we wszystkich Twoich ogłoszeniach dodaj ją w Profilu Pracodawcy. Zalecany rozmiar 730px x 200px.</strong>
</small>
</span>
</div>
<div class="row">
@@ -297,6 +303,8 @@
<? if (file_exists(\front\factory\GlobelusFirms::advert_add_img_bottom_url($this->advert['id']))) :?>
<img src="/advert_add_img_bottom/<?= $this->advert['id']; ?>/<?= \S::get_token(); ?>" style="max-width: 200px;">
<a class="btn btn-danger advert-img-bottom_delete" href="#">Usuń zdjęcie</a>
<? elseif (file_exists(\front\factory\GlobelusFirms::img_bottom_url($this->user['id']))) :?>
<img src="/img_bottom/<?= $this->user['id']; ?>/<?= \S::get_token(); ?>" style="max-width: 200px;">
<? endif; ?>
</div>
</div>
@@ -356,38 +364,6 @@
</div>
</div>
</div>
<div class="col-12 col-md-6">
<div class="row">
<div class="col-12">
<div class="form-group row">
<label form="contact_person2" class="col-12 col-sm-4"><?= ucfirst($lang['osoba-do-kontaktu']); ?>:</label>
<div class="col-12 col-sm-8">
<input type="text" class="form-control" name="contact_person2" value="<?= $this->advert['id'] ? htmlspecialchars($this->advert['contact_person2']) : htmlspecialchars($this->user['contact_person_2']); ?>">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="form-group row">
<label form="email2" class="col-12 col-sm-4"><?= ucfirst($lang['email']); ?>:</label>
<div class="col-12 col-sm-8">
<input type="text" class="form-control" name="email2" value="<?= $this->advert['id'] ? htmlspecialchars($this->advert['email2']) : htmlspecialchars($this->user['email_2']); ?>">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="form-group row">
<label form="phone2" class="col-12 col-sm-4"><?= ucfirst($lang['telefon']); ?>:</label>
<div class="col-12 col-sm-8">
<input type="text" class="form-control" name="phone2" value="<?= $this->advert['id'] ? htmlspecialchars($this->advert['phone2']) : htmlspecialchars($this->user['phone_2']); ?>">
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12 col-md-6">
@@ -453,31 +429,125 @@
});
$('body').on('submit', '#advert-add', function(e) {
var text = $("#text").summernote('code');
e.preventDefault();
if (document.activeElement) {
document.activeElement.blur();
}
var text = $('#text').summernote('code');
text = text.replace(/(<([^>]+)>)/ig, '');
text = text.replace(/&nbsp;/g, '');
if ($.trim(text) === '') {
$('#text').parent('.col-12').children('.note-editor').addClass('error');
$('#text').parent('.col-12').children('.editor-error').removeClass('hidden');
$('html, body').animate({
scrollTop: $('#text').parent('.col-12').children('.note-editor').offset().top
scrollTop: $('#text').parent('.col-12').children('.note-editor').offset().top - 100
}, 100);
e.preventDefault();
return;
} else {
$('#text').parent('.col-12').children('.note-editor').removeClass('error');
$('#text').parent('.col-12').children('.editor-error').addClass('hidden');
}
var work_type = $( 'select[name="work_type"]' ).val();
if ( work_type == 0 )
{
$( 'select[name="work_type"]' ).addClass( 'error' );
$( 'select[name="work_type"]' ).focus();
e.preventDefault();
var work_type = $('select[name="work_type"]').val();
if (work_type == 0) {
$('select[name="work_type"]').addClass('error').focus();
return;
} else {
$('select[name="work_type"]').removeClass('error');
}
else
{
$( 'select[name="work_type"]' ).removeClass( 'error' );
const headerInput = $('#advert-img-top')[0];
const bottomInput = $('#advert-img-bottom')[0];
const imageChecks = [];
if (headerInput && headerInput.files && headerInput.files.length) {
imageChecks.push(getImageSize(headerInput.files[0]).then(size => {
if (!isValidRatio(size)) {
throw new Error('header');
}
}));
}
if (bottomInput && bottomInput.files && bottomInput.files.length) {
imageChecks.push(getImageSize(bottomInput.files[0]).then(size => {
if (!isValidRatio(size)) {
throw new Error('bottom');
}
}));
}
Promise.allSettled(imageChecks).then(results => {
const rejected = results.find(r => r.status === 'rejected');
if (rejected) {
let scrollTarget;
let label;
if (rejected.reason.message === 'header') {
scrollTarget = $('#advert-img-top');
label = 'górny';
} else if (rejected.reason.message === 'bottom') {
scrollTarget = $('#advert-img-bottom');
label = 'dolny';
}
if (scrollTarget && scrollTarget.length) {
$('html, body').animate({
scrollTop: scrollTarget.offset().top - 100
}, 200);
}
showAlert(`Obrazek ${label} ma nieprawidłowe proporcje. Dozwolony zakres to 2.66:1 do 8:1.`);
return;
}
e.target.submit();
});
function isValidRatio({ width, height }) {
const ratio = width / height;
return ratio >= 2.6667 && ratio <= 8.0;
}
function getImageSize(file) {
return new Promise((resolve, reject) => {
const img = new Image();
img.onload = function () {
resolve({ width: this.naturalWidth, height: this.naturalHeight });
};
img.onerror = () => reject(new Error('invalid-image'));
const reader = new FileReader();
reader.onload = function (e) {
img.src = e.target.result;
};
reader.readAsDataURL(file);
});
}
function showAlert(message) {
$.alert({
title: 'Błąd',
icon: 'fa fa-exclamation',
content: message,
type: 'blue',
closeIcon: true,
closeIconClass: 'fa fa-close',
typeAnimated: true,
animation: 'opacity',
autoClose: 'confirm|10000',
columnClass: 'large',
theme: 'modern',
buttons: {
confirm: {
text: 'Zamknij',
btnClass: 'btn-blue',
keys: ['enter'],
action: function () {}
}
}
});
}
});

View File

@@ -16,7 +16,7 @@
] );?>
<div class="mini-box fluid">
<div class="title">
<?= ucfirst( $lang['moje-ogloszenia'] );?>
Twoje oferty pracy
<span class="pull-right text-danger small">
Posiadasz <?= (int)$this -> firm_points;?> pkt. <a href="/panel-pracodawcy/zakup-punktow">Doładuj konto.</a>
</span>
@@ -147,7 +147,7 @@
'td' => [ 'class' => 'g-center' ],
'db' => 'answers',
'sort' => true,
'php' => 'echo "<a href=\'/panel-pracodawcy/odpowiedzi/[id]\' class=\'btn"; if ( [answers_nondisplayed] ) echo " btn-danger "; else echo " btn-gray "; echo "pull-right\'>[answers]</a>"; '
'php' => 'echo "<a href=\'/panel-pracodawcy/odpowiedzi/[id]\' class=\'"; if ( [answers_nondisplayed] ) echo " btn-danger "; else echo " btn-gray "; echo "\'>[answers]</a>"; '
], [
'name' => 'Widoczne',
'db' => 'visible',
@@ -256,8 +256,6 @@
. 'echo "<span class=\'container-tooltip\' data-tippy-content=\'" . $title4 . "\'>" '
. '. "<a href=\'#\' class=\'advert_highlight btn btn-primary btn-sm " . $class4 . "\' advert-id=\'[id]\'>dodatkowa promocja</a>" '
. '. "</span>"; '
. 'else '
. 'echo "<a href=\'#\' class=\'advert-additional-promotion btn btn-primary btn-sm\' advert-id=\'[id]\'>dodatkowa promocja</a>"; '
//wyróżnienie - sprawdzanie czy ogłoszenie jest opublikowane
. 'if ( [disabled_by_admin] ) { '
@@ -324,24 +322,22 @@
. 'echo "<a href=\'#\' class=\'advert_main_page btn btn-primary btn-sm\' advert-id=\'[id]\'>włącz polecenie</a>"; '
. 'if ( ![disabled_by_admin] ) { '
. 'if ( \'[active_to]\' >= date( \'Y-m-d\' ) ) { '
. 'if ( [visible] ) '
. 'echo "<a href=\'#\' class=\'btn btn-sm btn-primary advert-disable\' advert-id=\'[id]\'>wyłącz ogłoszenie</a>"; '
. 'else { '
//sprawdzenie ile ktoś ma ogłoszeń
. 'if ( ' . $this -> adverts_count . ' >= ' . $globelus_settings['limit-ogloszen'] . ' ) { '
. 'if ( ' . $this -> firm_points . ' < ' . $globelus_settings['pkt-dodanie-ogloszenia-powyzej-limitu'] . ' ) { '
. 'echo "<span class=\'container-tooltip\' data-tippy-content=\'Niestety posiadasz zbyt mało punktów aby opublikować nowe ogłoszenie.\'>" '
. '. "<a href=\'#\' class=\'advert-public btn btn-primary btn-sm btn-disabled\' advert-id=\'[id]\'>publikuj</a>" '
. '. "</span>"; '
. '} else { '
. 'echo "<a href=\'#\' class=\'btn btn-sm btn-primary advert-public\' advert-id=\'[id]\'>publikuj</a>"; '
. '} '
. '} '
. 'else {'
. 'if ( [visible] ) '
. 'echo "<a href=\'#\' class=\'btn btn-sm btn-primary advert-disable\' advert-id=\'[id]\'>wyłącz ogłoszenie</a>"; '
. 'else { '
//sprawdzenie ile ktoś ma ogłoszeń
. 'if ( ' . $this -> adverts_count . ' >= ' . $globelus_settings['limit-ogloszen'] . ' ) { '
. 'if ( ' . $this -> firm_points . ' < ' . $globelus_settings['pkt-dodanie-ogloszenia-powyzej-limitu'] . ' ) { '
. 'echo "<span class=\'container-tooltip\' data-tippy-content=\'Niestety posiadasz zbyt mało punktów aby opublikować nowe ogłoszenie.\'>" '
. '. "<a href=\'#\' class=\'advert-public btn btn-primary btn-sm btn-disabled\' advert-id=\'[id]\'>publikuj</a>" '
. '. "</span>"; '
. '} else { '
. 'echo "<a href=\'#\' class=\'btn btn-sm btn-primary advert-public\' advert-id=\'[id]\'>publikuj</a>"; '
. '} '
. '} '
. 'else {'
. 'echo "<a href=\'#\' class=\'btn btn-sm btn-primary advert-public\' advert-id=\'[id]\'>publikuj</a>"; '
. '} '
. '} '
. 'echo \'<a href="/panel-pracodawcy/edytuj-ogloszenie/[id]" class="btn btn-sm btn-primary advert-edit" title="edytuj" style="font-size: 12px;">edytuj</a>\';'
. '} '
@@ -357,6 +353,10 @@
'class' => 'btn-danger multi-delete',
'label' => 'Usuń',
'url' => '/globelusFirms/multi_delete/'
], [
'class' => 'btn-primary multi-refresh',
'label' => 'Odśwież',
'url' => '/globelusFirms/multi_refresh/'
]
];
echo $grid -> draw();
@@ -371,48 +371,20 @@
<script class="footer" src="/libraries/framework/vendor/plugins/datatables/media/js/jquery.dataTables.js"></script>
<script class="footer" src="/libraries/framework/vendor/plugins/datatables/media/js/dataTables.bootstrap.js"></script>
<script class="footer" type="text/javascript">
function odmiana_slowa_ogloszenie( liczba )
{
var slowo = 'ogłoszenie';
if ( liczba == 1 ) return slowo;
if ( liczba > 1 && liczba < 5 ) return 'ogłoszenia';
if ( liczba >= 5 ) return 'ogłoszeń';
}
$( function()
{
tippy('[data-tippy-content]', {
theme: 'material'
});
$( 'body' ).on( click_event, '.advert-additional-promotion', function(e)
{
e.preventDefault();
var advert_id = $( this ).attr( 'advert-id' );
$.alert(
{
title: 'Dodatkowa promocja ogłoszenia',
icon: 'fa fa-exclamation',
content: 'Dodatkowa promocja ogłoszenia kosztuje <b><?= $globelus_settings['pkt-dodatkowa-promocja-ogloszenia'];?> punktów<\/b>, zostaną one pobrane z Twojego konta.',
closeIcon: true,
closeIconClass: 'fa fa-close',
typeAnimated: true,
animation: 'opacity',
columnClass: 'large',
theme: 'modern',
buttons:
{
cancel:
{
text: '<?= $lang['anuluj'];?>',
action: function() {}
},
confirm:
{
text: '<?= $lang['zatwierdz'];?>',
btnClass: 'btn-blue',
keys: ['enter'],
action: function()
{
document.location.href='/globelusFirms/advert_additional_promotion/advert-id=' + advert_id;
}
}
}
});
});
$( 'body' ).on( click_event, '.advert_highlight', function(e)
{
e.preventDefault();
@@ -485,6 +457,56 @@
});
});
$( 'body' ).on( click_event, '.multi-refresh', function(e)
{
e.preventDefault();
var ids = getCheckedIds( 'ogloszenia-<?= $this -> user['id'];?>' );
var points = <?= $globelus_settings['pkt-odswiezenie-ogloszenia'];?> * ids.length;
var href = $( this ).attr( 'href' );
$.alert(
{
title: 'Odświeżenie ogłoszeń',
icon: 'fa fa-exclamation',
content: 'Odświeżasz ' + ids.length + ' ' + odmiana_slowa_ogloszenie( ids.length ) + '. Z Twojego konta zostanie pobrane <b>' + points + ' punktów<\/b>.',
closeIcon: true,
closeIconClass: 'fa fa-close',
typeAnimated: true,
animation: 'opacity',
columnClass: 'large',
theme: 'modern',
buttons:
{
cancel:
{
text: '<?= $lang['anuluj'];?>',
action: function() {}
},
confirm:
{
text: '<?= $lang['zatwierdz'];?>',
btnClass: 'btn-blue',
keys: ['enter'],
action: function()
{
$.ajax({
type: 'POST',
cache: false,
url: href,
data: {
ids: ids
},
beforeSend: function() {},
success: function( data ) {
document.location.reload();
}
});
}
}
}
});
});
$( 'body' ).on( click_event, '.multi-delete', function(e)
{
var ids = getCheckedIds( 'ogloszenia-<?= $this -> user['id'];?>' );

View File

@@ -5,7 +5,7 @@
] );?>
<div class="mini-box fluid">
<div class="title">
Lista CV
Aplikacje na Twoje oferty pracy
</div>
</div>
<? if ( is_array( $this -> answers ) and count( $this -> answers ) ):?>

View File

@@ -13,86 +13,117 @@
<? if ( !$this -> user['profile_completed'] ):?>
<div class="alert alert-danger">Aby doładować konto musisz uzupełnić Swój profil. <a href="/panel-pracodawcy/profil">Przejdź do profilu</a>.</div>
<? else:?>
<div class="subtitle">
Wybierz jeden z dostępnych pakietów i zwiększ ilość posiadanych punktów.
</div>
<div class="row">
<div class="col-lg-5">
<div class="col-12">
<div class="subtitle" style="margin-bottom: 32px;">
Wybierz jeden z dostępnych pakietów i zwiększ ilość posiadanych punktów.
</div>
<div class="row">
<div class="col-12 points-prices">
<div class="content">
<div class="row">
<div class="col-12">
<a href="/panel-pracodawcy/zakup-punktow/pakiet=2"><strong><?= $this -> gsettings['pkt-pakiet-2-ilosc'];?></strong> punktów za <strong><?= number_format( $this -> gsettings['pkt-pakiet-2-cena'], 2, ',', ' ' );?></strong> zł</a>
<div class="col-12">
<div class="points_prices">
<div class="_row">
<div class="_column _header">
Pakiet
</div>
<div class="_column _header _center">
Punkty
</div>
<div class="_column _header _center">
Cena (zł)
</div>
<div class="_column _header">
Bonus (zysk Klienta)
</div>
</div>
</div>
</div>
<div class="col-12 points-prices">
<div class="content">
<div class="row">
<div class="col-12">
<a href="/panel-pracodawcy/zakup-punktow/pakiet=3"><strong><?= $this -> gsettings['pkt-pakiet-3-ilosc'];?></strong> punktów za <strong><?= number_format( $this -> gsettings['pkt-pakiet-3-cena'], 2, ',', ' ' );?></strong> zł</a>
<div class="_row" onclick="location.href='/panel-pracodawcy/zakup-punktow/pakiet=1'">
<div class="_column">
MINI
</div>
<div class="_column _center">
<?= $this -> gsettings['pkt-pakiet-1-ilosc'];?>
</div>
<div class="_column _center">
<?= number_format( $this -> gsettings['pkt-pakiet-1-cena'], 2, ',', ' ' );?> zł
</div>
<div class="_column">
-
</div>
</div>
</div>
</div>
<div class="col-12 points-prices">
<div class="content">
<div class="row">
<div class="col-12">
<a href="/panel-pracodawcy/zakup-punktow/pakiet=4"><strong><?= $this -> gsettings['pkt-pakiet-4-ilosc'];?></strong> punktów za <strong><?= number_format( $this -> gsettings['pkt-pakiet-4-cena'], 2, ',', ' ' );?></strong> zł</a>
<!-- pakiet basic -->
<div class="_row" onclick="location.href='/panel-pracodawcy/zakup-punktow/pakiet=2'">
<div class="_column">
BASIC
</div>
<div class="_column _center">
<?= $this -> gsettings['pkt-pakiet-2-ilosc'];?>
</div>
<div class="_column _center">
<?= number_format( $this -> gsettings['pkt-pakiet-2-cena'], 2, ',', ' ' );?> zł
</div>
<div class="_column">
+10 zł / 10 pkt gratis
</div>
</div>
</div>
</div>
<div class="col-12 points-prices">
<div class="content">
<div class="row">
<div class="col-12">
<a href="/panel-pracodawcy/zakup-punktow/pakiet=5"><strong><?= $this -> gsettings['pkt-pakiet-5-ilosc'];?></strong> punktów za <strong><?= number_format( $this -> gsettings['pkt-pakiet-5-cena'], 2, ',', ' ' );?></strong> zł</a>
<!-- pakiet pro -->
<div class="_row" onclick="location.href='/panel-pracodawcy/zakup-punktow/pakiet=3'">
<div class="_column">
PRO - <span>Najpopularniejszy!</span>
</div>
<div class="_column _center">
<?= $this -> gsettings['pkt-pakiet-3-ilosc'];?>
</div>
<div class="_column _center">
<?= number_format( $this -> gsettings['pkt-pakiet-3-cena'], 2, ',', ' ' );?> zł
</div>
<div class="_column">
+30 zł / 30 pkt gratis
</div>
</div>
</div>
</div>
<div class="col-12 points-prices">
<div class="content">
<div class="row">
<div class="col-12">
<a href="/panel-pracodawcy/zakup-punktow/pakiet=6"><strong><?= $this -> gsettings['pkt-pakiet-6-ilosc'];?></strong> punktów za <strong><?= number_format( $this -> gsettings['pkt-pakiet-6-cena'], 2, ',', ' ' );?></strong> zł</a>
<!-- pakiet premium -->
<div class="_row" onclick="location.href='/panel-pracodawcy/zakup-punktow/pakiet=4'">
<div class="_column">
PREMIUM - <span>+70 zł gratis!</span>
</div>
<div class="_column _center">
<?= $this -> gsettings['pkt-pakiet-4-ilosc'];?>
</div>
<div class="_column _center">
<?= number_format( $this -> gsettings['pkt-pakiet-4-cena'], 2, ',', ' ' );?> zł
</div>
<div class="_column">
+70 zł / 70 pkt gratis
</div>
</div>
</div>
</div>
<div class="col-12 points-prices">
<div class="content">
<div class="row">
<div class="col-12">
<a href="/panel-pracodawcy/zakup-punktow/pakiet=7"><strong><?= $this -> gsettings['pkt-pakiet-7-ilosc'];?></strong> punktów za <strong><?= number_format( $this -> gsettings['pkt-pakiet-7-cena'], 2, ',', ' ' );?></strong> zł</a>
<!-- pakiet vip -->
<div class="_row" onclick="location.href='/panel-pracodawcy/zakup-punktow/pakiet=5'">
<div class="_column">
VIP - <span>Najlepszy stosunek cena/jakość!</span>
</div>
</div>
</div>
</div>
<div class="col-12 points-prices">
<div class="content">
<div class="row">
<div class="col-12">
<a href="/panel-pracodawcy/zakup-punktow/pakiet=8"><strong><?= $this -> gsettings['pkt-pakiet-8-ilosc'];?></strong> punktów za <strong><?= number_format( $this -> gsettings['pkt-pakiet-8-cena'], 2, ',', ' ' );?></strong> zł</a>
<div class="_column _center">
<?= $this -> gsettings['pkt-pakiet-5-ilosc'];?>
</div>
<div class="_column _center">
<?= number_format( $this -> gsettings['pkt-pakiet-5-cena'], 2, ',', ' ' );?> zł
</div>
<div class="_column">
+180 zł / 180 pkt gratis
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-7 lg-hm">
<?=\front\view\Scontainers::scontainer( 6 );?>
</div>
</div>
<? endif;?>
<div class="row">
<div class="col-12">
<?=\front\view\Scontainers::scontainer( 5 );?>
</div>
</div>
</div>
<div class="mini-box fluid mt25">
<?=\front\view\Scontainers::scontainer( 6 );?>
</div>
<div class="mini-box fluid mt25">
<div class="row">
<div class="col-12">
<?=\front\view\Scontainers::scontainer( 5 );?>
</div>
</div>
</div>

View File

@@ -11,7 +11,7 @@
<div class="row">
<div class="col-12">
<div class="content profil">
<form method="POST" action="/globelusFirms/data_save/" enctype="multipart/form-data">
<form method="POST" action="/globelusFirms/data_save/" enctype="multipart/form-data" id="profile_edit">
<div class="step-title">
<?= $lang['pracodawca-profil-krok-1-opis']; ?>
</div>
@@ -164,8 +164,8 @@
</div>
<hr />
<div class="step-title">
Zdjęcie nad ogłoszeniem<br>
<p><span><small>Ważna informacja: ta grafika będzie widoczna jednocześnie we wszystkich ogłoszeniach publikowanych z tego profilu i zmienić ją będzie można tylko w Profilu Pracodawcy.</small></span></p>
Zdjęcie nad ogłoszeniem
<p><span><small><strong>Uwaga! Jest to grafika dodatkowa, NIE logo, będzie widoczna automatycznie we wszystkich ogłoszeniach publikowanych z tego profilu, ale w momencie dodawania ogłoszenia będzie można ją zmienić. Zalecany rozmiar 730px x 200px.</strong></small></span></p>
</div>
<div class="row">
<div class="col-12 col-md-6">
@@ -189,7 +189,13 @@
<hr />
<div class="step-title">
Zdjęcie pod ogłoszeniem
<p><span><small>Ważna informacja: ta grafika będzie widoczna jednocześnie we wszystkich ogłoszeniach publikowanych z tego profilu i zmienić ją będzie można tylko w Profilu Pracodawcy.</small></span></p>
<p>
<span>
<small>
<strong>Uwaga! Jest to grafika dodatkowa, NIE logo, będzie widoczna automatycznie we wszystkich ogłoszeniach publikowanych z tego profilu, ale w momencie dodawania ogłoszenia będzie można ją zmienić. Zalecany rozmiar 730px x 200px.</strong>
</small>
</span>
</p>
</div>
<div class="row">
<div class="col-12 col-md-6">
@@ -293,7 +299,7 @@
</div>
</div>
</div>
<hr />
<!-- <hr />
<div class="step-title">
<?= \S::lang('klauzula'); ?>
<p><span><small>Ważna informacja: klauzula będzie widoczna jednocześnie we wszystkich ogłoszeniach publikowanych z tego profilu i zmienić ją będzie można tylko w Profilu Pracodawcy.</small></span></p>
@@ -303,7 +309,7 @@
<div class="col-12">
<textarea name="clauses" id="clauses"><?= $this->g_user['clauses']; ?></textarea>
</div>
</div>
</div> -->
<div class="row">
<div class="col-12 col-md-6">
<div class="form-group row">
@@ -330,6 +336,100 @@
<script class="footer" type="text/javascript" src="/libraries/framework/vendor/plugins/datepicker/js/bootstrap-datetimepicker.js"></script>
<script class="footer" type="text/javascript" src="/plugins/selectize/js/selectize.js"></script>
<script class="footer" type="text/javascript">
// Sprawdzanie proporcji width / height
function isValidRatio({ width, height }) {
const ratio = width / height;
return ratio >= 2.6667 && ratio <= 8.0;
}
function getImageSize(file) {
return new Promise((resolve, reject) => {
const img = new Image();
img.onload = function () {
resolve({ width: this.naturalWidth, height: this.naturalHeight });
};
img.onerror = reject;
const reader = new FileReader();
reader.onload = function (e) {
img.src = e.target.result;
};
reader.readAsDataURL(file);
});
}
function showAlert(message) {
$.alert({
title: '<?= ucfirst($lang['blad']); ?>',
icon: 'fa fa-exclamation',
content: message,
type: 'blue',
closeIcon: true,
closeIconClass: 'fa fa-close',
typeAnimated: true,
animation: 'opacity',
autoClose: 'confirm|10000',
columnClass: 'large',
theme: 'modern',
buttons: {
confirm: {
text: '<?= $lang['zamknij']; ?>',
btnClass: 'btn-blue',
keys: ['enter'],
action: function () {}
}
}
});
}
$('body').on('submit', '#profile_edit', function(e) {
e.preventDefault();
const logoInput = $('#logo')[0];
const headerInput = $('#img-header')[0];
const bottomInput = $('#img-bottom')[0];
if (
logoInput &&
logoInput.files &&
logoInput.files.length &&
logoInput.files[0].size >= 125000
) {
showAlert('<?= $lang['plik-logo-jest-zbyt-duzy']; ?>');
return;
}
const imageChecks = [];
if (headerInput && headerInput.files && headerInput.files.length) {
imageChecks.push(getImageSize(headerInput.files[0]).then(size => {
if (!isValidRatio(size)) {
throw new Error('header');
}
}));
}
if (bottomInput && bottomInput.files && bottomInput.files.length) {
imageChecks.push(getImageSize(bottomInput.files[0]).then(size => {
if (!isValidRatio(size)) {
throw new Error('bottom');
}
}));
}
Promise.allSettled(imageChecks).then(results => {
const hasError = results.some(r => r.status === 'rejected');
if (hasError) {
showAlert( 'Wybrany obraz jest nieprawidłowy. Propoce obrazu muszą mieścić się w przedziale 2.66:1 i 8:1.' );
return;
}
e.target.submit();
});
});
$(function() {
$('#other_information').summernote({
height: 200,
@@ -341,7 +441,7 @@
]
});
$('#text, #clauses').summernote({
$('#text').summernote({
height: 200,
lang: 'pl-PL',
toolbar: [
@@ -355,33 +455,6 @@
]
});
$('body').on('submit', '#user-panel form', function(e) {
if ($("#user-panel form #logo")[0].files.length && !($('#user-panel form #logo')[0].files[0].size < 125000)) {
e.preventDefault();
$.alert({
title: '<?= ucfirst($lang['blad']); ?>',
icon: 'fa fa-exclamation',
content: '<?= $lang['plik-logo-jest-zbyt-duzy']; ?>',
type: 'blue',
closeIcon: true,
closeIconClass: 'fa fa-close',
typeAnimated: true,
animation: 'opacity',
autoClose: 'confirm|10000',
columnClass: 'large',
theme: 'modern',
buttons: {
confirm: {
text: '<?= $lang['zamknij']; ?>',
btnClass: 'btn-blue',
keys: ['enter'],
action: function() {}
}
}
});
}
});
$('body').on(click_event, '.input-icon .fa', function() {
$(this).parent().children('input').focus();
});
@@ -403,8 +476,8 @@
});
});
/*usuwanie loga */
$( function()
/*usuwanie loga */
$( function()
{
$( 'body' ).on( click_event, '.img_logo_delete', function()
{
@@ -459,7 +532,7 @@
});
/*usuwanie zdjecia header */
$( function()
$( function()
{
$( 'body' ).on( click_event, '.img_header_delete', function()
{
@@ -514,7 +587,7 @@ $( function()
});
/*usuwanie zdjecia bottom */
$( function()
$( function()
{
$( 'body' ).on( click_event, '.img_bottom_delete', function()
{
@@ -567,7 +640,5 @@ $( function()
});
});
});
</script>

View File

@@ -177,7 +177,7 @@
<?= $this -> g_user['other_information'];?>
</div>
</div>
<hr/>
<!--<hr/>
<div class="step-title">
<?= ucfirst( \S::lang( 'klauzula' ) );?>
<p><span><small>Ważna informacja: klauzula będzie widoczna jednocześnie we wszystkich ogłoszeniach publikowanych z tego profilu i zmienić ją będzie można tylko w Profilu Pracodawcy.</small></span></p>
@@ -186,14 +186,20 @@
<div class="col-12">
<?= $this -> g_user['clauses'];?>
</div>
</div>
</div>-->
<?
$img_header_url = \front\factory\GlobelusFirms::img_header_url( $this -> g_user['id'] );
if ( file_exists( $img_header_url ) ):?>
<hr/>
<div class="step-title">
Zdjęcie nad ogłoszeniem
<p><span><small>Ważna informacja: klauzula będzie widoczna jednocześnie we wszystkich ogłoszeniach publikowanych z tego profilu i zmienić ją będzie można tylko w Profilu Pracodawcy.</small></span></p>
<p>
<span>
<small>
<strong>Uwaga! Jest to grafika dodatkowa, NIE logo, będzie widoczna automatycznie we wszystkich ogłoszeniach publikowanych z tego profilu, ale w momencie dodawania ogłoszenia będzie można ją zmienić. Zalecany rozmiar 730px x 200px.</strong>
</small>
</span>
</p>
</div>
<div class="image_header"><img src="/img_header/<?= $this->g_user['id'];?>/<?= \S::get_token();?>"></div>
<?
@@ -205,7 +211,13 @@
<hr/>
<div class="step-title">
Zdjęcie pod ogłoszeniem
<p><span><small>Ważna informacja: klauzula będzie widoczna jednocześnie we wszystkich ogłoszeniach publikowanych z tego profilu i zmienić ją będzie można tylko w Profilu Pracodawcy.</small></span></p>
<p>
<span>
<small>
<strong>Uwaga! Jest to grafika dodatkowa, NIE logo, będzie widoczna automatycznie we wszystkich ogłoszeniach publikowanych z tego profilu, ale w momencie dodawania ogłoszenia będzie można ją zmienić. Zalecany rozmiar 730px x 200px.</strong>
</small>
</span>
</p>
</div>
<div class="image_bottom"><img src="/img_bottom/<?= $this->g_user['id'];?>/<?= \S::get_token();?>"></div>
<?

View File

@@ -4,18 +4,10 @@
<?= \Tpl::view( 'globelus/firms/_partials/menu', [
'active' => 'proponowani-kandydaci'
] );?>
<!--<div class="form-group row">
<label form="sex" class="col-12" style="text-align: left;">Wybierz ogłoszenie:</label>
<div class="col-12">
<select class="form-control" onchange="document.location.href='/panel-pracodawcy/proponowani-kandydaci?aid=' + $( this ).val();">
<option value="0">--- wszystkie ogłoszenia ---</option>
<? foreach ( $this -> adverts as $advert ):?>
<option value="<?= $advert['id'];?>" <? if ( $this -> current_advert == $advert['id'] ):?>selected="selected"<? endif;?>><?= $advert['title'];?></option>
<? endforeach;?>
</select>
</div>
</div>-->
<div class="mini-box fluid">
<div class="mini-box fluid mb15">
<div class="title">Potencjalni kandydaci</div>
</div>
<div class="mini-box fluid" style="background: none; padding: 0;">
<?
if ( is_array( $this -> candidates ) and count( $this -> candidates ) ):
foreach ( $this -> candidates as $candidate_id ):