Files
globelus.pl/autoload/front/factory/class.GlobelusAdverts.php
Jacek Pyziak 905c0f0d89 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.
2025-05-24 11:51:42 +02:00

618 lines
26 KiB
PHP

<?php
namespace front\factory;
class GlobelusAdverts
{
const advert_list_limit = 10;
static public function get_similar_adverts( $advert )
{
global $mdb;
return $mdb -> rand( 'globelus_adverts', 'id', [ 'AND' => [ 'visible' => 1, 'category_id' => $advert['category_id'], 'id[!]' => $advert['id'] ], 'LIMIT' => 5 ] );
}
public static function last_adverts( $limit = 3 )
{
global $mdb;
return $mdb -> query( 'SELECT '
. 'ga.id, title, date_add, gc.name AS country, ga.city, firm_name_profile, gac.name AS category, text, visits, ga.user_id, ga.highlight '
. 'FROM '
. 'globelus_adverts AS ga '
. 'LEFT JOIN globelus_countries AS gc ON gc.id = country_id '
. 'INNER JOIN globelus_firms_data AS gfd ON gfd.user_id = ga.user_id '
. 'LEFT JOIN globelus_adverts_categories AS gac ON gac.id = ga.category_id '
. 'WHERE '
. 'visible = 1 '
. 'AND '
. '( active_to >= \'' . date( 'Y-m-d' ) . '\' OR active_to IS NULL ) '
. 'ORDER BY '
. 'date_add DESC '
. 'LIMIT ' . $limit ) -> fetchAll( \PDO::FETCH_ASSOC );
}
public static function main_page_adverts( $limit = 5 )
{
global $mdb;
return $mdb -> query( 'SELECT '
. 'ga.id, title, date_add, gc.name AS country, ga.city, firm_name_profile, gac.name AS category, text, visits, ga.user_id, ga.highlight '
. 'FROM '
. 'globelus_adverts AS ga '
. 'LEFT JOIN globelus_countries AS gc ON gc.id = country_id '
. 'INNER JOIN globelus_firms_data AS gfd ON gfd.user_id = ga.user_id '
. 'LEFT JOIN globelus_adverts_categories AS gac ON gac.id = ga.category_id '
. 'WHERE '
. 'visible = 1 '
. 'AND '
. '( active_to >= \'' . date( 'Y-m-d' ) . '\' OR active_to IS NULL ) '
. 'AND '
. 'main_page = 1 '
. 'ORDER BY RAND() '
. 'LIMIT ' . $limit ) -> fetchAll( \PDO::FETCH_ASSOC );
}
public static function top_firms( $limit = 5 )
{
global $mdb;
return $mdb -> query( 'SELECT '
. 'gfd.user_id, gfd.firm_name_profile, COUNT(gfd.id) AS cc '
. 'FROM '
. 'globelus_firms_data AS gfd '
. 'INNER JOIN globelus_adverts AS ga ON ga.user_id = gfd.user_id '
. 'WHERE '
. 'visible = 1 '
. 'AND '
. '( active_to >= \'' . date( 'Y-m-d' ) . '\' OR active_to IS NULL ) '
. 'GROUP BY '
. 'gfd.user_id '
. 'ORDER BY '
. 'cc DESC, firm_name_profile ASC '
. 'LIMIT ' . $limit ) -> fetchAll( \PDO::FETCH_ASSOC );
}
public static function top_categories( $limit = 5 )
{
global $mdb;
return $mdb -> query( 'SELECT '
. 'gac.id, gac.name, COUNT(ga.id) AS cc '
. 'FROM '
. 'globelus_adverts_categories AS gac '
. 'INNER JOIN globelus_adverts AS ga ON ga.category_id = gac.id '
. 'WHERE '
. 'visible = 1 '
. 'AND '
. '( active_to >= \'' . date( 'Y-m-d' ) . '\' OR active_to IS NULL ) '
. 'GROUP BY '
. 'gac.id '
. 'ORDER BY '
. 'cc DESC '
. 'LIMIT ' . $limit ) -> fetchAll( \PDO::FETCH_ASSOC );
}
public static function top_countries( $limit = 5 )
{
global $mdb;
return $mdb -> query( 'SELECT '
. 'gc.id, gc.name, COUNT(ga.id) AS cc '
. 'FROM '
. 'globelus_countries AS gc '
. 'INNER JOIN globelus_adverts AS ga ON ga.country_id = gc.id '
. 'WHERE '
. 'visible = 1 '
. 'AND '
. '( active_to >= \'' . date( 'Y-m-d' ) . '\' OR active_to IS NULL ) '
. 'GROUP BY '
. 'gc.id '
. 'ORDER BY '
. 'cc DESC '
. 'LIMIT ' . $limit ) -> fetchAll( \PDO::FETCH_ASSOC );
}
public static function firms_list()
{
global $mdb;
return $mdb -> query( 'SELECT '
. 'gu.id, firm_name_profile '
. 'FROM '
. 'globelus_users AS gu '
. 'INNER JOIN globelus_firms_data AS gfd ON gfd.user_id = gu.id '
. 'WHERE '
. 'gu.type = 1 '
. 'AND '
. 'gu.status = 1 '
. 'AND '
. 'gu.profile_completed = 1 '
. 'ORDER BY '
. 'gfd.firm_name ASC ' ) -> fetchAll( \PDO::FETCH_ASSOC );
}
public static function refresh_count( $advert_id )
{
global $mdb;
return $mdb -> get( 'globelus_adverts', 'refresh_count', [ 'id' => $advert_id ] );
}
public static function last_refresh( $advert_id )
{
global $mdb;
$row = $mdb -> get( 'globelus_adverts', [ 'date_add', 'last_refresh' ], [ 'id' => $advert_id ] );
if ( $row['last_refresh'] )
return $row['last_refresh'];
else
return $row['date_add'];
}
public static function active_to( $advert_id )
{
global $mdb;
return $mdb -> get( 'globelus_adverts', 'active_to', [ 'id' => $advert_id ] );
}
public static function advert_visits_increase( $advert_id )
{
global $mdb;
return $mdb -> update( 'globelus_adverts', [ 'visits[+]' => 1 ], [ 'AND' => [ 'visible' => 1, 'id' => $advert_id ] ] );
}
public static function remove_from_favorite( $advert_id, $user_id )
{
global $mdb;
return $mdb -> delete( 'globelus_candidates_adverts', [
'AND' => [
'advert_id' => $advert_id,
'user_id' => $user_id
]
] );
}
public static function add_to_favorite( $advert_id, $user_id )
{
global $mdb;
return $mdb -> insert( 'globelus_candidates_adverts', [
'advert_id' => $advert_id,
'user_id' => $user_id
] );
}
public static function advert_title( int $advert_id )
{
global $mdb;
return $mdb -> get( 'globelus_adverts', 'title', [ 'id' => (int)$advert_id ] );
}
public static function advert_user_id( int $advert_id )
{
global $mdb;
return $mdb -> get( 'globelus_adverts', 'user_id', [ 'id' => $advert_id ] );
}
public static function send_message( $advert_id, $user_id = null, $name, $surname, $email, $phone, $text, $cv_file, $register )
{
global $mdb, $lang, $settings, $globelus_settings;
if ( $cv_file['tmp_name'] == '' and $user_id )
{
$cv = \front\factory\GlobelusCandidates::cv_url( $user_id );
$extension = \front\factory\GlobelusCandidates::cv_extension( $user_id );
}
else if ( $cv_file['tmp_name'] == '' and \S::get_session( 'advert_answer_cv' ) )
{
$cv = \S::get_session( 'advert_answer_cv' );
$extension = \S::get_session( 'advert_answer_cv_extension' );
}
else if ( $cv_file['tmp_name'] != '' )
{
$allowed_mime_types = \front\factory\Globelus::cv_allowed_mime_types();
if ( $cv_file["size"] > 5242880 )
{
\S::set_alert_prompt( 'Informacja', $lang['plik-cv-jest-zbyt-duzy'] );
return false;
}
if ( !in_array( $cv_file["type"], $allowed_mime_types ) )
{
\S::set_alert_prompt( 'Informacja', $lang['cv-niedozwolony-format-pliku'] );
return false;
}
$cv_hash = \front\factory\GlobelusCandidates::cv_hash( time() );
$dir = 'files/cv_tmp/' . $cv_hash{0} . '/' . $cv_hash{1} . '/';
if ( !is_dir( $dir ) )
mkdir( $dir , 0755 , true );
$info = new \SplFileInfo( $cv_file['name'] );
$extension = $info -> getExtension();
move_uploaded_file( $cv_file['tmp_name'], $dir . $cv_hash );
$cv = $dir . $cv_hash;
}
$mdb -> insert( 'globelus_adverts_answers', [
'advert_id' => $advert_id,
'user_id' => $user_id ? $user_id : null,
'name' => $name,
'surname' => $surname,
'email' => $email,
'phone' => $phone,
'text' => $text,
'cv' => $cv,
'cv_extension' => $extension
] );
if ( $answer_id = $mdb -> id() )
{
$text = $settings['newsletter_header'];
$text .= \front\factory\Newsletter::get_template( '#powiadomienie-o-zlozonej-aplikacji' );
$text .= $settings['newsletter_footer_1'];
$advert_title = self::advert_title( (int)$advert_id );
$advert_user_id = self::advert_user_id( (int)$advert_id );
$settings['ssl'] ? $base = 'https' : $base = 'http';
$text = str_replace( '[LINK]', $base . "://" . $_SERVER['SERVER_NAME'] . "/login-as/" . \front\factory\GlobelusUser::get_hash( $advert_user_id ) . "?return_url=" . urlencode( '/panel-pracodawcy/odpowiedzi/' . $advert_id . '/' ), $text );
$regex = "-(<img[^>]+src\s*=\s*['\"])(((?!'|\"|https?://).)*)(['\"][^>]*>)-i";
$text = preg_replace( $regex, "$1" . $base . "://" . $_SERVER['SERVER_NAME'] . "$2$4", $text );
$regex = "-(<a[^>]+href\s*=\s*['\"])(((?!'|\"|https?://).)*)(['\"][^>]*>)-i";
$text = preg_replace( $regex, "$1" . $base . "://" . $_SERVER['SERVER_NAME'] . "$2$4", $text );
$text = str_replace( '[TYTUL_OGLOSZENIA]', $advert_title, $text );
if ( $globelus_settings['maile-wysylanie'] )
\S::send_email( self::advert_email( $advert_id ), $lang['aplikacja-na-stanowisko'] . ' ' . $advert_title, $text );
if ( !$user_id )
{
\S::set_session( 'advert_answer_name', $name );
\S::set_session( 'advert_answer_surname', $surname );
\S::set_session( 'advert_answer_email', $email );
\S::set_session( 'advert_answer_phone', $phone );
\S::set_session( 'advert_answer_cv', $cv );
\S::set_session( 'advert_answer_cv_extension', $extension );
if ( $register == 'on' )
{
if ( $cv_file['tmp_name'] == '' and \S::get_session( 'advert_answer_cv' ) )
{
$cv = \S::get_session( 'advert_answer_cv' );
$extension = \S::get_session( 'advert_answer_cv_extension' );
}
$password = \front\factory\Globelus::gen_password();
\front\factory\GlobelusUser::signup( $email, $password, 0, 'on', 'off', true, $name, $surname, $phone, $cv_file, $cv, $extension, 1 );
$user_tmp_id = $mdb -> get( 'globelus_users', 'id', [ 'email' => $email ] );
$mdb -> update( 'globelus_adverts_answers', [ 'user_id' => $user_tmp_id ], [ 'id' => $answer_id ] );
$mdb -> update( 'globelus_users', [ 'profile_completed' => 1 ], [ 'id' => $user_tmp_id ] );
}
}
return true;
}
return false;
}
public static function advert_email( $advert_id )
{
global $mdb;
$email = $mdb -> get( 'globelus_adverts', 'email', [ 'id' => $advert_id ] );
if ( !$email )
$email = $mdb -> get( 'globelus_users', 'email', [ 'id' => $mdb -> get( 'globelus_adverts', 'user_id', [ 'id' => $advert_id ] ) ] );
return $email;
}
public static function adverts_count( $values, $voivodeships, $accommodation_provided )
{
global $mdb;
if ( is_array( $values['categories'] ) and count( $values['categories'] ) )
$filtr = 'AND category_id IN (' . implode( ',', $values['categories'] ) . ') ';
if ( $values['keyword'] )
$filtr .= 'AND ( '
. 'title_nopl LIKE :title_nopl '
. 'OR '
. 'firm_name_profile_nopl LIKE :firm_name_profile_nopl '
. 'OR '
. 'text_nopl LIKE :text_nopl '
. 'OR '
. 'country_nopl LIKE :country_nopl '
. 'OR '
. 'city_nopl LIKE :city_nopl '
. ') ';
if ( is_array( $values['countries'] ) and count( $values['countries'] ) == 1 and $values['countries'][0] == 75 )
$filtr .= '';
else
{
if ( is_array( $values['countries'] ) and count( $values['countries'] ) == 1 and $values['countries'][0] == 77 )
$filtr .= 'AND country_id NOT IN (1) ';
elseif ( is_array( $values['countries'] ) and count( $values['countries'] ) )
$filtr .= 'AND country_id IN (' . implode( ',', $values['countries'] ) . ') ';
}
if ( is_array( $voivodeships ) and count( $voivodeships ) )
{
if ( count( $voivodeships ) == 1 and $voivodeships[0] == 1 )
{}
else
$filtr .= 'AND id_voivodeship IN (' . implode( ',', $voivodeships ) . ') ';
}
// var_dump( $voivodeships );
switch ( $values['time'] ):
case 1: $filtr .= 'AND date_active >= \'' . date( 'Y-m-d H:i:s', strtotime( '-24 hours', time() ) ) . '\' '; break;
case 2: $filtr .= 'AND date_active >= \'' . date( 'Y-m-d H:i:s', strtotime( '-3 days', time() ) ) . '\' '; break;
case 3: $filtr .= 'AND date_active >= \'' . date( 'Y-m-d H:i:s', strtotime( '-7 days', time() ) ) . '\' '; break;
case 4: $filtr .= 'AND date_active >= \'' . date( 'Y-m-d H:i:s', strtotime( '-14 days', time() ) ) . '\' '; break;
case 5: $filtr .= 'AND date_active >= \'' . date( 'Y-m-d H:i:s', strtotime( '-1 months', time() ) ) . '\' '; break;
case 6: $filtr .= 'AND date_active >= \'' . date( 'Y-m-d H:i:s', strtotime( '-2 months', time() ) ) . '\' '; break;
endswitch;
if ( is_array( $values['work_types'] ) and ( count( $values['work_types'] ) > 1 or ( count( $values['work_types'] ) == 1 and $values['work_types'][0] != 0 ) ) )
{
$filtr_work_type = ' (';
foreach ( $values['work_types'] as $work_type )
$filtr_work_type .= ' OR work_type = ' . (int)$work_type . ' ';
$filtr_work_type .= ') ';
}
if ( (int)$values['work_type'] )
$filtr .= 'AND work_type = ' . (int)$values['work_type'] . ' ';
// if ( (int)$values['work_type'] )
// $filtr .= 'AND work_type = ' . (int)$values['work_type'] . ' ';
if ( (int)$values['salary'] )
$filtr .= 'AND salary IS NOT NULL ';
if ( (int)$values['without_language'] )
$filtr .= 'AND without_language = 1 ';
if ( (int)$values['without_experience'] )
$filtr .= 'AND without_experience = 1 ';
if ( (int)$values['for_couples'] )
$filtr .= 'AND for_couples = 1 ';
if ( (int)$values['outside_eu'] )
$filtr .= 'AND outside_ue = 1 ';
if ( (int)$values['without_driving_license'] )
$filtr .= 'AND without_driving_license = 1 ';
if ( (int)$values['travel_refund'] )
$filtr .= 'AND travel_refund = 1 ';
if ( (int)$accommodation_provided )
{
$filtr .= 'AND accommodation = 1 ';
}
/* SQL */
$sql = 'SELECT COUNT(0) '
. 'FROM ('
. 'SELECT '
. 'ga.id, title, title_nopl, date_add, gc.name AS country, gc.name_nopl AS country_nopl, ga.city, ga.city_nopl, firm_name_profile, firm_name_profile_nopl, gac.name AS category, text, text_nopl, visits, ga.user_id, ga.highlight, category_id, '
. 'ga.country_id, IF ( last_refresh IS NULL, date_add, last_refresh ) AS date_active, work_type, salary, without_language, without_experience, for_couples, from_now, outside_ue, without_driving_license, travel_refund, id_voivodeship '
. 'FROM '
. 'globelus_adverts AS ga '
. 'INNER JOIN globelus_countries AS gc ON gc.id = country_id ';
if ( is_array( $voivodeships ) and count( $voivodeships ) )
$sql .= 'INNER JOIN globelus_voivodeships AS gv ON gv.id = id_voivodeship ';
$sql .= 'INNER JOIN globelus_firms_data AS gfd ON gfd.user_id = ga.user_id '
. 'INNER JOIN globelus_adverts_categories AS gac ON gac.id = ga.category_id '
. 'WHERE '
. 'visible = 1 '
. 'AND '
. 'disabled_by_admin = 0 '
. 'AND '
. ' ( active_to >= \'' . date( 'Y-m-d' ) . '\' OR active_to IS NULL ) '
. 'AND '
. '( '
. '( last_refresh IS NULL AND date_add >= \'' . date( 'Y-m-d H:i:s', strtotime( '-6 months', time() ) ) . '\' ) '
. 'OR '
. '( last_refresh IS NOT NULL AND last_refresh >= \'' . date( 'Y-m-d', strtotime( '-6 months', time() ) ) . '\' ) '
. ') '
. ') AS q1 '
. 'WHERE '
. '1=1 '
. $filtr;
// echo $sql;
try
{
$result = $mdb -> query( $sql, [
':firm_name_profile_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%',
':title_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%',
':text_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%',
':country_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%',
':city_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%'
] ) -> fetch();
}
catch ( \Throwable $t )
{
\S::pre( $mdb -> error() );
$debug = debug_backtrace(true);
echo $debug[0]['file'] . ' | ' . $debug[0]['line'];
exit;
}
return $result[0];
}
public static function adverts_list( $values, $voivodeships, $accommodation_provided )
{
global $mdb;
if ( $values['start'] < 1 )
$values['start'] = 0;
else
$values['start']--;
if ( is_array( $values['categories'] ) and count( $values['categories'] ) )
$filtr .= 'AND category_id IN (' . implode( ',', $values['categories'] ) . ') ';
if ( $values['keyword'] )
$filtr .= 'AND ( '
. 'title_nopl LIKE :title_nopl '
. 'OR '
. 'firm_name_profile_nopl LIKE :firm_name_profile_nopl '
. 'OR '
. 'text_nopl LIKE :text_nopl '
. 'OR '
. 'country_nopl LIKE :country_nopl '
. 'OR '
. 'city_nopl LIKE :city_nopl '
. ') ';
if ( is_array( $values['countries'] ) and count( $values['countries'] ) == 1 and $values['countries'][0] == 75 )
$filtr .= '';
else
{
if ( is_array( $values['countries'] ) and count( $values['countries'] ) == 1 and $values['countries'][0] == 77 )
$filtr .= 'AND country_id NOT IN (1) ';
elseif ( is_array( $values['countries'] ) and count( $values['countries'] ) )
$filtr .= 'AND country_id IN (' . implode( ',', $values['countries'] ) . ') ';
}
if ( is_array( $voivodeships ) and count( $voivodeships ) )
{
if ( count( $voivodeships ) == 1 and $voivodeships[0] == 1 )
{}
else
$filtr .= 'AND id_voivodeship IN (' . implode( ',', $voivodeships ) . ') ';
}
switch ( $values['time'] ):
case 1: $filtr .= 'AND date_active >= \'' . date( 'Y-m-d H:i:s', strtotime( '-24 hours', time() ) ) . '\' '; break;
case 2: $filtr .= 'AND date_active >= \'' . date( 'Y-m-d H:i:s', strtotime( '-3 days', time() ) ) . '\' '; break;
case 3: $filtr .= 'AND date_active >= \'' . date( 'Y-m-d H:i:s', strtotime( '-7 days', time() ) ) . '\' '; break;
case 4: $filtr .= 'AND date_active >= \'' . date( 'Y-m-d H:i:s', strtotime( '-14 days', time() ) ) . '\' '; break;
case 5: $filtr .= 'AND date_active >= \'' . date( 'Y-m-d H:i:s', strtotime( '-1 months', time() ) ) . '\' '; break;
case 6: $filtr .= 'AND date_active >= \'' . date( 'Y-m-d H:i:s', strtotime( '-2 months', time() ) ) . '\' '; break;
endswitch;
if ( is_array( $values['work_types'] ) and ( count( $values['work_types'] ) > 1 or ( count( $values['work_types'] ) == 1 and $values['work_types'][0] != 0 ) ) )
{
$filtr_work_type = ' (';
foreach ( $values['work_types'] as $work_type )
$filtr_work_type .= ' OR work_type = ' . (int)$work_type . ' ';
$filtr_work_type .= ') ';
}
if ( (int)$values['work_type'] )
$filtr .= 'AND work_type = ' . (int)$values['work_type'] . ' ';
if ( (int)$values['salary'] )
$filtr .= 'AND salary IS NOT NULL ';
if ( (int)$values['without_language'] )
$filtr .= 'AND without_language = 1 ';
if ( (int)$values['without_experience'] )
$filtr .= 'AND without_experience = 1 ';
if ( (int)$values['for_couples'] )
$filtr .= 'AND for_couples = 1 ';
if ( (int)$values['outside_ue'] )
$filtr .= 'AND outside_ue = 1 ';
if ( (int)$values['without_driving_license'] )
$filtr .= 'AND without_driving_license = 1 ';
if ( (int)$values['travel_refund'] )
$filtr .= 'AND travel_refund = 1 ';
if ( (int)$accommodation_provided )
{
$filtr .= 'AND accommodation = 1 ';
}
if ( (int)$values['sort'] )
$order = 'date_active DESC ';
else
$order = 'highlight DESC, date_active DESC ';
/* SQL */
$sql = 'SELECT * '
. 'FROM ('
. 'SELECT '
. 'ga.id, title, title_nopl, date_add, gc.name AS country, gc.name_nopl AS country_nopl, ga.city, ga.city_nopl, firm_name_profile, firm_name_profile_nopl, gac.name AS category, text, text_nopl, visits, ga.user_id, ga.highlight, category_id, '
. 'ga.country_id, IF ( last_refresh IS NULL, date_add, last_refresh ) AS date_active, last_refresh, work_type, salary, without_language, without_experience, for_couples, from_now, overtime, overtime_quantity, accommodation, accommodation_cost, '
. 'travel_refund, outside_ue, without_driving_license, id_voivodeship '
. 'FROM '
. 'globelus_adverts AS ga '
. 'INNER JOIN globelus_countries AS gc ON gc.id = country_id ';
// jeżeli wybrano jakiekolwiek województwo
if ( is_array( $voivodeships ) and count( $voivodeships ) )
$sql .= 'INNER JOIN globelus_voivodeships AS gv ON gv.id = id_voivodeship ';
$sql .= 'INNER JOIN globelus_firms_data AS gfd ON gfd.user_id = ga.user_id '
. 'INNER JOIN globelus_adverts_categories AS gac ON gac.id = ga.category_id '
. 'WHERE '
. 'visible = 1 '
. 'AND '
. 'disabled_by_admin = 0 '
. 'AND '
. ' ( active_to >= \'' . date( 'Y-m-d' ) . '\' OR active_to IS NULL ) '
. ') AS q1 '
. 'WHERE '
. '1=1 '
. $filtr
. 'ORDER BY '
. $order
. 'LIMIT ' . ( $values['start'] * $values['limit'] ) . ',' . $values['limit'];
try
{
$results = $mdb -> query( $sql, [
':title_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%',
':firm_name_profile_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%',
':text_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%',
':country_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%',
'city_nopl' => '%' . \S::seo( $values['keyword'], true ) . '%'
] ) -> fetchAll( \PDO::FETCH_ASSOC );
}
catch ( \Throwable $t )
{
\S::pre( $mdb -> error() );
$debug = debug_backtrace(true);
echo $debug[0]['file'] . ' | ' . $debug[0]['line'];
exit;
}
return $results;
}
public static function advert_details( $advert_id )
{
global $mdb;
return $mdb -> query( 'SELECT '
. 'ga.id, title, ga.user_id, category_id, ga.country_id, ga.city, ga.region, text, contact_person, email, ga.phone, gfd.clauses, '
. 'gac.name AS category_name, gc.name AS country_name, gfd.firm_name_profile, date_add, salary, work_type, without_language, '
. 'without_experience, for_couples, from_now, accommodation, accommodation_cost, overtime, overtime_quantity, travel_refund, outside_ue, without_driving_license, ga.old, ga.visible, id_voivodeship, aplication_link, id_position '
. 'FROM '
. 'globelus_adverts AS ga '
. 'LEFT JOIN globelus_adverts_categories AS gac ON gac.id = ga.category_id '
. 'LEFT JOIN globelus_countries AS gc ON gc.id = ga.country_id '
. 'LEFT JOIN globelus_firms_data AS gfd ON gfd.user_id = ga.user_id '
. 'WHERE '
. 'ga.id = ' . (int)$advert_id ) -> fetch( \PDO::FETCH_ASSOC );
}
public static function categories( $user_categories = '' )
{
global $mdb;
return $mdb -> select( 'globelus_adverts_categories', [ 'id', 'name' ], [ 'ORDER' => [ 'name' => 'ASC' ] ] );
}
}