'bad', 'msg' => \S::lang( 'rejestracja-blad-ogolny' ) ]; if ( $mdb -> count( 'globelus_users', [ 'email' => $email ] ) ) return $result = [ 'status' => 'bad', 'msg' => 'Mamy juz Twój adres w naszej bazie, jeśli nie pamiętasz hasła do swojego konta kliknij tutaj.' ]; /* obsługa cv */ $allowed_mime_types = \front\factory\Globelus::cv_allowed_mime_types(); if ( $cv_file['tmp_name'] and $cv_file["size"] > 5242880 ) return $result = [ 'status' => 'bad', 'msg' => \S::lang( 'plik-cv-jest-zbyt-duzy' ) ]; if ( $cv_file['tmp_name'] and !$cv_error and !in_array( $cv_file["type"], $allowed_mime_types ) ) return $result = [ 'status' => 'bad', 'msg' => \S::lang( 'cv-niedozwolony-format-pliku' ) ]; /* obsługa avatarów */ $allowed_mime_types = \front\factory\Globelus::avatar_allowed_mime_types(); if ( $avatar_file['tmp_name'] and $avatar_file["size"] > 1048576 ) return $result = [ 'status' => 'bad', 'msg' => \S::lang( 'plik-zdjecie-jest-zbyt-duzy' ) ]; if ( $avatar_file['tmp_name'] and !$avatar_error and !in_array( $avatar_file["type"], $allowed_mime_types ) ) return $result = [ 'status' => 'bad', 'msg' => \S::lang( 'zdjecie-niedozwolony-format-pliku' ) ]; $hash = md5( time() . $email ); $register_date = date('Y-m-d H:i:s'); $password = md5( time() ); $mdb -> insert( 'globelus_users', [ 'email' => $email, 'password' => md5( $register_date . $password ), 'hash' => $hash, 'type' => 0, 'user_agremment_profile' => 1, 'user_agremment_marketing' => 1, 'register_date' => $register_date, 'active_to' => date( 'Y-m-d', strtotime( '+90 days', time() ) ), 'auto_create' => 0, 'status' => 1, 'profile_completed' => 1, 'visible' => 1 ] ); $user_id = $mdb -> id(); $mdb -> insert( 'globelus_candidates_data', [ 'user_id' => $user_id, 'name' => $name, 'surname' => $surname, 'date_of_birth' => $date_of_birth ? date( 'Y-m-d', strtotime( $date_of_birth ) ) : null, 'sex' => $sex === '' ? null : $sex, 'phone' => $phone, 'experience_abroad' => $experience_abroad === '' ? null : $experience_abroad, 'status_of_availability' => $status_of_availability, 'date_of_availability' => $date_of_availability, 'accommodation' => $accommodation === '' ? null : $accommodation, 'driving_license' => $driving_license === '' ? null : $driving_license, 'own_car' => $own_car === '' ? null : $own_car, 'inexperience' => $inexperience == 'on' ? 1 : 0, 'other_information' => $other_information ] ); $mdb -> update( 'globelus_users', [ 'profile_completed' => 1 ], [ 'id' => $user_id ] ); /* doświadczenie */ if ( !$inexperience ) { for ( $i = 0; $i < count( $positions ); $i++ ) { if ( $positions[$i] ) $mdb -> insert( 'globelus_candidates_positions', [ 'user_id' => $user_id, 'id_position' => $positions[$i], 'experience' => $positions_experience[$i] ] ); } } /* języki */ for ( $i = 0; $i < count( $languages ); $i++ ) { if ( $languages[$i] and $languages_experience[$i] ) $mdb -> insert( 'globelus_candidates_languages', [ 'user_id' => $user_id, 'language' => $languages[$i], 'experience' => $languages_experience[$i] ] ); } /* kraje */ for ( $i = 0; $i < count( $countries ); $i++ ) { if ( $countries[$i] and !$mdb -> count( 'globelus_candidates_countries', [ 'AND' => [ 'user_id' => $user_id, 'country_id' => $countries[$i] ] ] ) ) $mdb -> insert( 'globelus_candidates_countries', [ 'user_id' => $user_id, 'country_id' => $countries[$i], ] ); } /* wojewodztwa */ for ( $i = 0; $i < count( $voivodeships ); $i++ ) { if ( $voivodeships[$i] and !$mdb -> count( 'globelus_candidates_voivodeships', [ 'AND' => [ 'id_user' => $user_id, 'id_voivodeship' => $voivodeships[$i] ] ] ) ) $mdb -> insert( 'globelus_candidates_voivodeships', [ 'id_user' => $user_id, 'id_voivodeship' => $voivodeships[$i], ] ); } /* branże */ for ( $i = 0; $i < count( $categories ); $i++ ) { if ( $categories[$i] and !$mdb -> count( 'globelus_candidates_categories', [ 'AND' => [ 'user_id' => $user_id, 'category_id' => $categories[$i] ] ] ) ) $mdb -> insert( 'globelus_candidates_categories', [ 'user_id' => $user_id, 'category_id' => $categories[$i], ] ); } if ( $cv_file['tmp_name'] and !$cv_error ) { $cv_hash = \front\factory\GlobelusCandidates::cv_hash( $user_id ); $dir = 'files/cv/' . $cv_hash{0} . '/' . $cv_hash{1} . '/'; if ( !is_dir( $dir ) ) mkdir( $dir , 0755 , true ); $info = new \SplFileInfo( $cv_file['name'] ); $file_ext = $info -> getExtension(); move_uploaded_file( $cv_file['tmp_name'], $dir . $cv_hash ); $mdb -> update( 'globelus_candidates_data', [ 'cv_extension' => $file_ext ], [ 'user_id' => $user_id ] ); } if ( $avatar_file['tmp_name'] and !$avatar_error ) { $avatar_hash = \front\factory\GlobelusCandidates::avatar_hash( $user_id ); $dir = 'files/avatars/' . $avatar_hash{0} . '/' . $avatar_hash{1} . '/'; if ( !is_dir( $dir ) ) mkdir( $dir , 0755 , true ); $info = new \SplFileInfo( $avatar_file['name'] ); $file_ext = $info -> getExtension(); move_uploaded_file( $avatar_file['tmp_name'], $dir . $avatar_hash ); $mdb -> update( 'globelus_candidates_data', [ 'avatar_extension' => $file_ext ], [ 'user_id' => $user_id ] ); } $text = $settings['newsletter_header']; $text .= \front\factory\Newsletter::get_template( '#globelus-potwierdzenie-automatycznej-rejestracji' ); $text .= '

' . \S::lang( 'rejestracja-kandydat-ostrzezenie' ) . '

'; $text .= $settings['newsletter_footer_1']; $settings['ssl'] ? $base = 'https' : $base = 'http'; $regex = "-(]+src\s*=\s*['\"])(((?!'|\"|https?://).)*)(['\"][^>]*>)-i"; $text = preg_replace( $regex, "$1" . $base . "://" . $_SERVER['SERVER_NAME'] . "$2$4", $text ); $regex = "-(]+href\s*=\s*['\"])(((?!'|\"|https?://).)*)(['\"][^>]*>)-i"; $text = preg_replace( $regex, "$1" . $base . "://" . $_SERVER['SERVER_NAME'] . "$2$4", $text ); $text = str_replace( '[LOGIN]', $email, $text ); $text = str_replace( '[HASLO]', $password, $text ); $send = \S::send_email( $email, \S::lang( 'potwierdzenie-rejestracji-konta-w-portalu' ) . ' GLOBELUS.PL', $text ); \front\factory\GlobelusUser::signin( null, null, null, null, $hash ); return $result = [ 'status' => 'ok', 'msg' => 'Twoje konto zostało założone. Dane do logowania zostały wysłane na podany adres email.' ]; } public static function candidate_categories( $user_id ) { global $mdb; return $mdb -> query( 'SELECT ' . 'name ' . 'FROM ' . 'globelus_adverts_categories AS gac ' . 'INNER JOIN globelus_candidates_categories AS gcc ON gcc.category_id = gac.id ' . 'WHERE ' . 'gcc.user_id = ' . (int)$user_id ) -> fetchAll( \PDO::FETCH_ASSOC ); } public static function candidate_positions( $user_id ) { global $mdb; return $mdb -> select( 'globelus_candidates_positions', [ 'position', 'experience', 'id_position' ], [ 'user_id' => $user_id ] ); } public static function avatar_extension( $user_id ) { global $mdb; return $mdb -> get( 'globelus_candidates_data', 'avatar_extension', [ 'user_id' => $user_id ] ); } public static function avatar_url( $user_id ) { $avatar_hash = \front\factory\GlobelusCandidates::avatar_hash( $user_id ); return $file_name = 'files/avatars/' . $avatar_hash{0} . '/' . $avatar_hash{1} . '/' . $avatar_hash; } public static function avatar( $user_id, $token ) { if ( $_SESSION['tokens'][$token] ) { $avatar_hash = \front\factory\GlobelusCandidates::avatar_hash( $user_id ); $extension = \front\factory\GlobelusCandidates::avatar_extension( $user_id ); $file_name = 'files/avatars/' . $avatar_hash{0} . '/' . $avatar_hash{1} . '/' . $avatar_hash; if ( file_exists( $file_name ) ) { switch( $extension ): case "png": $ctype="image/png"; break; case "jpeg": case "jpg": $ctype="image/jpeg"; break; default: endswitch; header( 'Content-Type: ' . $ctype ); readfile( $file_name ); exit; } } } public static function cv_tmp_download( $answer_id, $token ) { global $mdb; if ( $_SESSION['tokens'][$token] ) { $cv_info = $mdb -> get( 'globelus_adverts_answers', [ 'cv', 'cv_extension' ], [ 'id' => $answer_id ] ); if ( file_exists( $cv_info['cv'] ) ) { $tmp_filename = "cv." . $cv_info['cv_extension']; $file_name = $cv_info['cv']; header("Content-type: application/pdf"); header("Content-type: octet-stream"); header( "Content-Disposition: attachment; filename=$tmp_filename" ); header( "Content-Length: " . filesize( $file_name ) ); readfile( $file_name ); exit; } } } public static function profile_visits_increase( $candidate_id, $firm_id ) { global $mdb; $mdb -> insert( 'globelus_candidates_visits', [ 'candidate_id' => $candidate_id, 'firm_id' => $firm_id ] ); return $mdb -> update( 'globelus_users', [ 'visits[+]' => 1 ], [ 'id' => $candidate_id ] ); } public static function adverts_list( $user_id ) { global $mdb; return $mdb -> query( 'SELECT ' . 'ga.title, ga.date_add, ga.user_id, ga.id, gc.name AS country, ga.city, firm_name_profile, gac.name AS category, text ' . 'FROM ' . 'globelus_adverts AS ga ' . 'INNER JOIN globelus_candidates_adverts AS gca ON gca.advert_id = ga.id ' . 'LEFT JOIN globelus_countries AS gc ON gc.id = ga.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 ' . 'gca.user_id = ' . (int)$user_id . ' ' . 'AND ' . 'ga.visible = 1 ' . 'ORDER BY ' . 'ga.date_add DESC' ) -> fetchAll( \PDO::FETCH_ASSOC ); } public static function answers_list( $user_id ) { global $mdb; return $mdb -> query( 'SELECT ' . 'ga.title, gaa.date_add, gaa.text, displayed, ga.user_id, ga.id ' . 'FROM ' . 'globelus_adverts AS ga ' . 'INNER JOIN globelus_adverts_answers AS gaa ON gaa.advert_id = ga.id ' . 'WHERE ' . 'gaa.user_id = ' . (int)$user_id . ' ' . 'AND ' . 'ga.visible = 1 ' . 'ORDER BY ' . 'gaa.date_add DESC' ) -> fetchAll( \PDO::FETCH_ASSOC ); } public static function cv_extension( $user_id ) { global $mdb; return $mdb -> get( 'globelus_candidates_data', 'cv_extension', [ 'user_id' => $user_id ] ); } public static function avatar_hash( $user_id ) { return md5( 'files/avatars/' . $user_id . '/' ); } public static function cv_hash( $user_id ) { return md5( 'files/cv/' . $user_id . '/' ); } public static function cv_url( $user_id ) { $cv_hash = \front\factory\GlobelusCandidates::cv_hash( $user_id ); return $file_name = 'files/cv/' . $cv_hash{0} . '/' . $cv_hash{1} . '/' . $cv_hash; } public static function cv_download( $user_id, $token ) { if ( $_SESSION['tokens'][$token] ) { $cv_hash = \front\factory\GlobelusCandidates::cv_hash( $user_id ); $extension = \front\factory\GlobelusCandidates::cv_extension( $user_id ); $file_name = 'files/cv/' . $cv_hash{0} . '/' . $cv_hash{1} . '/' . $cv_hash; if ( file_exists( $file_name ) ) { $tmp_filename = "cv." . $extension; header("Content-type: octet-stream"); header( "Content-Disposition: attachment; filename=$tmp_filename" ); header( "Content-Length: " . filesize( $file_name ) ); readfile( $file_name ); exit; } } } public static function profile_disable( $user_id ) { global $mdb; return $mdb -> update( 'globelus_users', [ 'visible' => 0 ], [ 'id' => $user_id ] ); } public static function profile_enable( $user_id, $email = '' ) { global $mdb, $lang, $settings; if ( !$mdb -> get( 'globelus_users', 'visible_mail', [ 'id' => $user_id ] ) and $email ) { $text = $settings['newsletter_header']; $text .= \front\factory\Newsletter::get_template( '#twoj-profil-jest-juz-widoczny' ); $text .= $settings['newsletter_footer_1']; $settings['ssl'] ? $base = 'https' : $base = 'http'; $regex = "-(]+src\s*=\s*['\"])(((?!'|\"|https?://).)*)(['\"][^>]*>)-i"; $text = preg_replace( $regex, "$1" . $base . "://" . $_SERVER['SERVER_NAME'] . "$2$4", $text ); $regex = "-(]+href\s*=\s*['\"])(((?!'|\"|https?://).)*)(['\"][^>]*>)-i"; $text = preg_replace( $regex, "$1" . $base . "://" . $_SERVER['SERVER_NAME'] . "$2$4", $text ); $send = \S::send_email( $email, $lang['mail-profil-jest-juz-widoczny'], $text ); $mdb -> update( 'globelus_users', [ 'visible_mail' => 1 ], [ 'id' => $user_id ] ); } return $mdb -> update( 'globelus_users', [ 'visible' => 1 ], [ 'id' => $user_id ] ); } public static function profile_extend( $user_id, $active_to ) { global $mdb; $active_diff = \S::date_diff( date( 'Y-m-d H:i:s' ), date( 'Y-m-d H:i:s', strtotime( $active_to ) ), 60 * 60 * 24 ); if ( $active_diff <= 7 ) { $mdb -> update( 'globelus_users', [ 'active_to' => date( 'Y-m-d', strtotime( '+90 days', strtotime( $active_to ) ) ), 'mail_expiration' => 0, 'mail_expired' => 0, 'mail_delete' => 0, 'mail_delete_date' => null, ], [ 'id' => $user_id ] ); return true; } return false; } public static function profile_refresh( $user_id, $last_refresh ) { global $mdb; $refresh_diff = \S::date_diff( date( 'Y-m-d H:i:s', strtotime( $last_refresh ) ), date( 'Y-m-d H:i:s' ), 60 * 60 * 24 ); if ( $refresh_diff >= 5 ) { $mdb -> update( 'globelus_candidates_data', [ 'last_refresh' => date( 'Y-m-d H:i:s' ) ], [ 'user_id' => $user_id ] ); return true; } return false; } public static function datą_save( $user_id, $name, $surname, $date_of_birth, $sex, $phone, $experience_abroad, $status_of_availability, $date_of_availability, $accommodation, $driving_license, $own_car, $positions, $positions_experience, $inexperience, $countries, $voivodeships, $languages, $languages_experience, $other_information, $categories, $cv_file, $avatar_file ) { global $mdb, $lang; if ( $data_id = $mdb -> get( 'globelus_candidates_data', 'id', [ 'user_id' => $user_id ] ) ) $mdb -> update( 'globelus_candidates_data', [ 'name' => $name, 'surname' => $surname, 'date_of_birth' => $date_of_birth ? date( 'Y-m-d', strtotime( $date_of_birth ) ) : null, 'sex' => $sex === '' ? null : $sex, 'phone' => $phone, 'experience_abroad' => $experience_abroad === '' ? null : $experience_abroad, 'status_of_availability' => $status_of_availability, 'date_of_availability' => $date_of_availability, 'accommodation' => $accommodation === '' ? null : $accommodation, 'driving_license' => $driving_license === '' ? null : $driving_license, 'own_car' => $own_car === '' ? null : $own_car, 'inexperience' => $inexperience == 'on' ? 1 : 0, 'other_information' => $other_information ], [ 'id' => $data_id ] ); else $mdb -> insert( 'globelus_candidates_data', [ 'user_id' => $user_id, 'name' => $name, 'surname' => $surname, 'date_of_birth' => $date_of_birth ? date( 'Y-m-d', strtotime( $date_of_birth ) ) : null, 'sex' => $sex === '' ? null : $sex, 'phone' => $phone, 'experience_abroad' => $experience_abroad === '' ? null : $experience_abroad, 'status_of_availability' => $status_of_availability, 'date_of_availability' => $date_of_availability, 'accommodation' => $accommodation === '' ? null : $accommodation, 'driving_license' => $driving_license === '' ? null : $driving_license, 'own_car' => $own_car === '' ? null : $own_car, 'inexperience' => $inexperience == 'on' ? 1 : 0, 'other_information' => $other_information ] ); $mdb -> update( 'globelus_users', [ 'profile_completed' => 1 ], [ 'id' => $user_id ] ); /* doświadczenie */ $mdb -> delete( 'globelus_candidates_positions', [ 'user_id' => $user_id ] ); if ( !$inexperience ) { for ( $i = 0; $i < count( $positions ); $i++ ) { if ( $positions[$i] ) $mdb -> insert( 'globelus_candidates_positions', [ 'user_id' => $user_id, 'id_position' => $positions[$i], 'experience' => $positions_experience[$i] ] ); } } /* języki */ $mdb -> delete( 'globelus_candidates_languages', [ 'user_id' => $user_id ] ); for ( $i = 0; $i < count( $languages ); $i++ ) { if ( $languages[$i] and $languages_experience[$i] ) $mdb -> insert( 'globelus_candidates_languages', [ 'user_id' => $user_id, 'language' => $languages[$i], 'experience' => $languages_experience[$i] ] ); } /* kraje */ $not_in = '0'; if ( is_array( $countries ) and !empty( $countries ) ) foreach ( $countries as $country ) { $not_in .= ',' . (int)$country; } $mdb -> query( 'DELETE FROM globelus_candidates_countries WHERE user_id = ' . (int)$user_id . ' AND country_id NOT IN (' . $not_in . ')' ); for ( $i = 0; $i < count( $countries ); $i++ ) { if ( $countries[$i] and !$mdb -> count( 'globelus_candidates_countries', [ 'AND' => [ 'user_id' => $user_id, 'country_id' => $countries[$i] ] ] ) ) $mdb -> insert( 'globelus_candidates_countries', [ 'user_id' => $user_id, 'country_id' => $countries[$i], ] ); } /* województwa */ $not_in = '0'; if ( is_array( $voivodeships ) and !empty( $voivodeships ) ) foreach ( $voivodeships as $voivodeship ) { $not_in .= ',' . (int)$voivodeship; } $mdb -> query( 'DELETE FROM globelus_candidates_voivodeships WHERE id_user = ' . (int)$user_id . ' AND id_voivodeship NOT IN (' . $not_in . ')' ); for ( $i = 0; $i < count( $voivodeships ); $i++ ) { if ( $voivodeships[$i] and !$mdb -> count( 'globelus_candidates_voivodeships', [ 'AND' => [ 'id_user' => $user_id, 'id_voivodeship' => $voivodeships[$i] ] ] ) ) $mdb -> insert( 'globelus_candidates_voivodeships', [ 'id_user' => $user_id, 'id_voivodeship' => $voivodeships[$i], ] ); } /* branże */ $not_in = '0'; if ( is_array( $categories ) and !empty( $categories ) ) foreach ( $categories as $category ) { $not_in .= ',' . (int)$category; } $mdb -> query( 'DELETE FROM globelus_candidates_categories WHERE user_id = ' . (int)$user_id . ' AND category_id NOT IN (' . $not_in . ')' ); for ( $i = 0; $i < count( $categories ); $i++ ) { if ( $categories[$i] and !$mdb -> count( 'globelus_candidates_categories', [ 'AND' => [ 'user_id' => $user_id, 'category_id' => $categories[$i] ] ] ) ) $mdb -> insert( 'globelus_candidates_categories', [ 'user_id' => $user_id, 'category_id' => $categories[$i], ] ); } /* obsługa plików CV */ $allowed_mime_types = \front\factory\Globelus::cv_allowed_mime_types(); $cv_error = false; if ( $cv_file['tmp_name'] and $cv_file["size"] > 5242880 ) { \S::set_alert_prompt( 'Informacja', $lang['plik-cv-jest-zbyt-duzy'] ); $cv_error = true; return false; } if ( $cv_file['tmp_name'] and !$cv_error and !in_array( $cv_file["type"], $allowed_mime_types ) ) { \S::set_alert_prompt( 'Informacja', $lang['cv-niedozwolony-format-pliku'] ); return false; } if ( $cv_file['tmp_name'] and !$cv_error ) { $cv_hash = \front\factory\GlobelusCandidates::cv_hash( $user_id ); $dir = 'files/cv/' . $cv_hash{0} . '/' . $cv_hash{1} . '/'; if ( !is_dir( $dir ) ) mkdir( $dir , 0755 , true ); $info = new \SplFileInfo( $cv_file['name'] ); $file_ext = $info -> getExtension(); move_uploaded_file( $cv_file['tmp_name'], $dir . $cv_hash ); $mdb -> update( 'globelus_candidates_data', [ 'cv_extension' => $file_ext ], [ 'user_id' => $user_id ] ); } /* obsługa avatarów */ $allowed_mime_types = \front\factory\Globelus::avatar_allowed_mime_types(); $avatar_error = false; if ( $avatar_file['tmp_name'] and $avatar_file["size"] > 1048576 ) { \S::set_alert_prompt( 'Informacja', $lang['plik-zdjecie-jest-zbyt-duzy'] ); $avatar_error = true; return false; } if ( $avatar_file['tmp_name'] and !$avatar_error and !in_array( $avatar_file["type"], $allowed_mime_types ) ) { \S::set_alert_prompt( 'Informacja', $lang['zdjecie-niedozwolony-format-pliku'] ); return false; } if ( $avatar_file['tmp_name'] and !$avatar_error ) { $avatar_hash = \front\factory\GlobelusCandidates::avatar_hash( $user_id ); $dir = 'files/avatars/' . $avatar_hash{0} . '/' . $avatar_hash{1} . '/'; if ( !is_dir( $dir ) ) mkdir( $dir , 0755 , true ); $info = new \SplFileInfo( $avatar_file['name'] ); $file_ext = $info -> getExtension(); move_uploaded_file( $avatar_file['tmp_name'], $dir . $avatar_hash ); $mdb -> update( 'globelus_candidates_data', [ 'avatar_extension' => $file_ext ], [ 'user_id' => $user_id ] ); } return true; } }