Files
globelus.pl/autoload/front/factory/class.GlobelusCv.php
2024-11-11 15:28:20 +01:00

315 lines
14 KiB
PHP

<?php
namespace front\factory;
class GlobelusCv
{
const cv_list_limit = 10;
public static function cv_count( $visible_categories, $keyword = '', $countries = '', $availability = '', $categories = '', $voivodeships = '', $id_position = '' )
{
global $mdb;
$visible_categories = array_merge( $visible_categories, [ 0 ] );
if ( $availability )
$filtr .= 'AND status_of_availability = ' . (int)$availability . ' ';
if ( $keyword )
$filtr .= 'AND ( '
. 'bez_pl_diakrytycznych( LOWER(position) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. 'OR '
. 'bez_pl_diakrytycznych( LOWER(other_information) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. 'OR '
. 'bez_pl_diakrytycznych( LOWER(name) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. 'OR '
. 'bez_pl_diakrytycznych( LOWER(surname) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. ') ';
if ( is_array( $countries ) and count( $countries ) )
$filtr .= 'AND gcc1.country_id IN (' . implode( ',', $countries ) . ') ';
if ( is_array( $categories ) and count( $categories ) )
$filtr .= 'AND gcc.category_id IN (' . implode( ',', $categories ) . ') ';
if ( is_array( $voivodeships ) and count( $voivodeships ) )
$filtr .= 'AND gcv.id_voivodeship IN (' . implode( ',', $voivodeships ) . ') ';
if ( $id_position )
$filtr .= 'AND id_position = ' . (int)$id_position . ' ';
$sql = 'SELECT COUNT(0) FROM ('
. 'SELECT '
. 'gu.id '
. 'FROM '
. 'globelus_users AS gu '
. 'INNER JOIN globelus_candidates_data AS gcd ON gcd.user_id = gu.id '
. 'INNER JOIN globelus_candidates_categories AS gcc ON gcc.user_id = gu.id ';
if ( is_array( $voivodeships ) and count( $voivodeships ) )
$sql .= 'INNER JOIN globelus_candidates_voivodeships AS gcv ON gcv.id_user = gu.id ';
if ( $id_position )
$sql .= 'INNER JOIN globelus_proposed_candidates AS gpc ON gpc.candidate_id = gu.id ';
$sql .= 'LEFT JOIN globelus_candidates_positions AS gcp ON gcp.user_id = gu.id '
. 'LEFT JOIN globelus_candidates_countries as gcc1 ON gcc1.user_id = gu.id '
. 'WHERE '
. 'gu.type = 0 '
. 'AND '
. 'gu.status = 1 '
. 'AND '
. 'gu.profile_completed = 1 '
. 'AND '
. 'gu.visible = 1 '
. 'AND '
. 'gu.active_to >= \'' . date( 'Y-m-d' ). '\' '
. 'AND '
. 'gcc.category_id IN ( 0,' . implode( ',', $visible_categories ) . ') '
. $filtr
. 'GROUP BY '
. 'gu.id ) '
. 'AS q1';
$result = $mdb -> query( $sql ) -> fetch();
return $result[0];
}
public static function prev_profile( $user_id, $visible_categories, $keyword = '', $countries = '', $availability = '', $categories = '', $voivodeships = '', $id_position = '' )
{
global $mdb;
$visible_categories = array_merge( $visible_categories, [ 0 ] );
if ( $availability )
$filtr .= 'AND status_of_availability = ' . (int)$availability . ' ';
if ( $keyword )
$filtr .= 'AND ( '
. 'bez_pl_diakrytycznych( LOWER(position) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. 'OR '
. 'bez_pl_diakrytycznych( LOWER(other_information) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. 'OR '
. 'bez_pl_diakrytycznych( LOWER(name) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. 'OR '
. 'bez_pl_diakrytycznych( LOWER(surname) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. ') ';
if ( is_array( $countries ) and count( $countries ) )
$filtr = 'AND gcc1.country_id IN (' . implode( ',', $countries ) . ') ';
if ( is_array( $categories ) and count( $categories ) )
$filtr = 'AND gcc.category_id IN (' . implode( ',', $categories ) . ') ';
if ( $id_position )
$filtr .= 'AND id_position = ' . (int)$id_position . ' ';
$sql = 'SELECT '
. 'gu.id, name, surname, '
. 'IF ( gcd.last_refresh IS NULL, register_date, gcd.last_refresh ) AS date_active '
. 'FROM '
. 'globelus_users AS gu '
. 'INNER JOIN globelus_candidates_data AS gcd ON gcd.user_id = gu.id '
. 'INNER JOIN globelus_candidates_categories AS gcc ON gcc.user_id = gu.id ';
if ( $id_position )
$sql .= 'INNER JOIN globelus_proposed_candidates AS gpc ON gpc.candidate_id = gu.id ';
if ( is_array( $voivodeships ) and count( $voivodeships ) )
$sql .= 'INNER JOIN globelus_candidates_voivodeships AS gcv ON gcv.id_user = gu.id ';
$sql .= 'LEFT JOIN globelus_candidates_positions AS gcp ON gcp.user_id = gu.id '
. 'LEFT JOIN globelus_candidates_countries as gcc1 ON gcc1.user_id = gu.id '
. 'WHERE '
. 'gu.type = 0 '
. 'AND '
. 'gu.status = 1 '
. 'AND '
. 'gu.profile_completed = 1 '
. 'AND '
. 'gu.visible = 1 '
. 'AND '
. 'gu.active_to >= \'' . date( 'Y-m-d' ). '\' '
. 'AND '
. 'gcc.category_id IN ( 0,' . implode( ',', $visible_categories ) . ') '
. $filtr
. 'GROUP BY '
. 'gu.id '
. 'ORDER BY '
. 'highlight DESC, date_active DESC';
$results = $mdb -> query( $sql ) -> fetchAll( \PDO::FETCH_ASSOC );
if ( is_array( $results ) and count( $results ) )
{
for ( $i = 0; $i < count( $results ); $i++ )
{
if ( $results[$i]['id'] == $user_id and isset( $results[$i-1]['id'] ) )
return '/kandydat/' . $results[$i-1]['id'] . '/' . \S::seo( $results[$i-1]['surname'] . ' ' . $results[$i-1]['name'] );
}
}
return false;
}
public static function next_profile( $user_id, $visible_categories, $keyword = '', $countries = '', $availability = '', $categories = '', $voivodeships = '', $id_position = '' )
{
global $mdb;
$visible_categories = array_merge( $visible_categories, [ 0 ] );
if ( $availability )
$filtr .= 'AND status_of_availability = ' . (int)$availability . ' ';
if ( $keyword )
$filtr .= 'AND ( '
. 'bez_pl_diakrytycznych( LOWER(position) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. 'OR '
. 'bez_pl_diakrytycznych( LOWER(other_information) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. 'OR '
. 'bez_pl_diakrytycznych( LOWER(name) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. 'OR '
. 'bez_pl_diakrytycznych( LOWER(surname) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. ') ';
if ( is_array( $countries ) and count( $countries ) )
$filtr .= 'AND gcc1.country_id IN (' . implode( ',', $countries ) . ') ';
if ( is_array( $categories ) and count( $categories ) )
$filtr .= 'AND gcc.category_id IN (' . implode( ',', $categories ) . ') ';
if ( is_array( $voivodeships ) and count( $voivodeships ) )
$filtr .= 'AND gcv.id_voivodeship IN (' . implode( ',', $voivodeships ) . ') ';
if ( $id_position )
$filtr .= 'AND id_position = ' . (int)$id_position . ' ';
$sql = 'SELECT '
. 'gu.id, name, surname, '
. 'IF ( gcd.last_refresh IS NULL, register_date, gcd.last_refresh ) AS date_active '
. 'FROM '
. 'globelus_users AS gu '
. 'INNER JOIN globelus_candidates_data AS gcd ON gcd.user_id = gu.id '
. 'INNER JOIN globelus_candidates_categories AS gcc ON gcc.user_id = gu.id ';
if ( is_array( $voivodeships ) and count( $voivodeships ) )
$sql .= 'INNER JOIN globelus_candidates_voivodeships AS gcv ON gcv.id_user = gu.id ';
if ( $id_position )
$sql .= 'INNER JOIN globelus_proposed_candidates AS gpc ON gpc.candidate_id = gu.id ';
$sql .= 'LEFT JOIN globelus_candidates_positions AS gcp ON gcp.user_id = gu.id '
. 'LEFT JOIN globelus_candidates_countries as gcc1 ON gcc1.user_id = gu.id '
. 'WHERE '
. 'gu.type = 0 '
. 'AND '
. 'gu.status = 1 '
. 'AND '
. 'gu.profile_completed = 1 '
. 'AND '
. 'gu.visible = 1 '
. 'AND '
. 'gu.active_to >= \'' . date( 'Y-m-d' ). '\' '
. 'AND '
. 'gcc.category_id IN ( 0,' . implode( ',', $visible_categories ) . ') '
. $filtr
. 'GROUP BY '
. 'gu.id '
. 'ORDER BY '
. 'highlight DESC, date_active DESC';
$results = $mdb -> query( $sql ) -> fetchAll( \PDO::FETCH_ASSOC );
if ( is_array( $results ) and count( $results ) )
{
for ( $i = 0; $i < count( $results ); $i++ )
{
if ( $results[$i]['id'] == $user_id and isset( $results[$i+1]['id'] ) )
return '/kandydat/' . $results[$i+1]['id'] . '/' . \S::seo( $results[$i+1]['surname'] . ' ' . $results[$i+1]['name'] );
}
}
return false;
}
public static function cv_list( $start = 0, $limit = 2, $visible_categories, $keyword = '', $countries = '', $availability = '', $categories = '', $voivodeships = '', $id_position = '' )
{
global $mdb;
$visible_categories = array_merge( $visible_categories, [ 0 ] );
if ( $start < 1 )
$start = 0;
else
$start--;
if ( $availability )
$filtr .= 'AND status_of_availability = ' . (int)$availability . ' ';
if ( $keyword )
$filtr .= 'AND ( '
. 'bez_pl_diakrytycznych( LOWER(position) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. 'OR '
. 'bez_pl_diakrytycznych( LOWER(other_information) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. 'OR '
. 'bez_pl_diakrytycznych( LOWER(name) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. 'OR '
. 'bez_pl_diakrytycznych( LOWER(surname) ) LIKE \'%' . strtolower( preg_replace( '/[^\s\p{L}]/u','', \front\factory\Globelus::noPL( $keyword ) ) ) . '%\' '
. ') ';
if ( is_array( $countries ) and count( $countries ) )
$filtr = 'AND gcc1.country_id IN (' . implode( ',', $countries ) . ') ';
if ( is_array( $categories ) and count( $categories ) )
$filtr = 'AND gcc.category_id IN (' . implode( ',', $categories ) . ') ';
if ( is_array( $voivodeships ) and count( $voivodeships ) )
$filtr = 'AND gcv.id_voivodeship IN (' . implode( ',', $voivodeships ) . ') ';
if ( $id_position )
$filtr .= 'AND id_position = ' . (int)$id_position . ' ';
$sql = 'SELECT '
. 'gu.id, name, surname, phone, email, sex, date_of_birth, highlight, register_date, gcd.last_refresh, ';
if ( is_array( $voivodeships ) and count( $voivodeships ) )
$sql .= 'id_voivodeship, ';
$sql .= 'IF ( gcd.last_refresh IS NULL, register_date, gcd.last_refresh ) AS date_active '
. 'FROM '
. 'globelus_users AS gu '
. 'INNER JOIN globelus_candidates_data AS gcd ON gcd.user_id = gu.id '
. 'INNER JOIN globelus_candidates_categories AS gcc ON gcc.user_id = gu.id ';
if ( is_array( $voivodeships ) and count( $voivodeships ) )
$sql .= 'INNER JOIN globelus_candidates_voivodeships AS gcv ON gcv.id_user = gu.id ';
if ( $id_position )
$sql .= 'INNER JOIN globelus_proposed_candidates AS gpc ON gpc.candidate_id = gu.id ';
$sql .= 'LEFT JOIN globelus_candidates_positions AS gcp ON gcp.user_id = gu.id '
. 'LEFT JOIN globelus_candidates_countries as gcc1 ON gcc1.user_id = gu.id '
. 'WHERE '
. 'gu.type = 0 '
. 'AND '
. 'gu.status = 1 '
. 'AND '
. 'gu.profile_completed = 1 '
. 'AND '
. 'gu.visible = 1 '
. 'AND '
. 'gu.active_to >= \'' . date( 'Y-m-d' ). '\' '
. 'AND '
. 'gcc.category_id IN ( 0, ' . implode( ',', $visible_categories ) . ') '
. $filtr
. 'GROUP BY '
. 'gu.id '
. 'ORDER BY '
. 'highlight DESC, date_active DESC '
. 'LIMIT ' . ( $start * $limit ) . ',' . $limit;
$results = $mdb -> query( $sql ) -> fetchAll( \PDO::FETCH_ASSOC );
if ( is_array( $results ) ) foreach ( $results as $row )
{
$cv = $row;
$cv['positions'] = \front\factory\GlobelusCandidates::candidate_positions( $row['id'] );
$cv['categories'] = \front\factory\GlobelusCandidates::candidate_categories( $row['id'] );
$cv_list[] = $cv;
}
return $cv_list;
}
}