'; print_r($s); echo ''; } else { var_dump($s); } echo '
'; if ($d) { exit; } } $is_datasci_tw = strpos($_SERVER['SERVER_NAME'], 'datasci.tw') !== false; define('AIACADEMY_LIVE_DOMAIN', 'jobs.aiacademy.tw'); define('AIACADEMY_LIVE_LINK', 'https://jobs.aiacademy.tw/'); # with protocol & slash define('LIVE_DOMAIN_NAME', $is_datasci_tw ? 'jobs.datasci.tw' : AIACADEMY_LIVE_DOMAIN); define('LOGO_URI', '/img/logo.svg'); define('IS_LIVE_SERVER', $_SERVER['SERVER_NAME'] === LIVE_DOMAIN_NAME); define('IS_HTTPS', $_SERVER['SERVER_PORT'] == 443 || (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')); $ip = $_SERVER['REMOTE_ADDR']; define('IS_OPEN_SKILL_FEATURE', true); define('IS_OPEN_STILL_VISIBLE_AFTER_OWNER_EDIT_JOB_FEATURE', true); define('IS_OPEN_MORE_EMAIL_NOTIFY', true); define('RESUME_FOLDER_ABS_PATH', $_SERVER['DOCUMENT_ROOT'] . '/application/'); define('RESUME_URI_PREFIX', 'https://' . $_SERVER['SERVER_NAME'] . '/application/'); define('RESUME_FILE_SUFFIX_DIVIDER', '-'); define('DEFAULT_JOB_PAGESIZE_AT_HOME', 10); define('SCHOOL_NO_PREFIX_REGEXP', '/[ABJE][MT][0-9]{3}/i'); define('CORP_LOGO_ABS_PATH', $_SERVER['DOCUMENT_ROOT'] . '/job_logo_crop/'); define('CAN_USE_TOOLS_JOBS_HTML_USER_IDS', '429'); #split by "," define('ADMIN_VERIFY_JOB', 1); define('ADMIN_UNVERIFY_JOB', 2); define('ADMIN_VISIBLE_JOB', 3); define('ADMIN_INVISIBLE_JOB', 4); define('ADMIN_TRASH_JOB', 5); define('OWNER_VERIFY_JOB', 51); # when owner=admin define('OWNER_UNVERIFY_JOB', 52); # when owner=admin define('OWNER_VISIBLE_JOB', 53); define('OWNER_INVISIBLE_JOB', 54); define('OWNER_TRASH_JOB', 55); # 20181115note: owner CANNOT trash job define('SYS_INVISIBLE_JOB', 101); define('USER_APPLY_JOB', 200); define('SYSTEM_USER_ID', 0); define('SYS_SEND_VERIFY_TO_OWNER_EMAIL', 1001); define('SYS_SEND_UNVERIFY_TO_OWNER_EMAIL', 1002); define('SYS_SEND_VISIBLE_TO_OWNER_EMAIL', 1003); define('SYS_SEND_INVISIBLE_TO_OWNER_EMAIL', 1004); define('SYS_SEND_TRASH_TO_OWNER_EMAIL', 1005); define('SYS_SEND_EXPIRED_TO_OWNER_EMAIL', 1006); define('FEMALE_VAL', 'F'); define('MALE_VAL', 'M'); define('NOTPROVIDE_VAL', 'N'); function get_key4changing_expired_day($job_id, $owner_user_id) { return md5('AIA' . $job_id . 'Jobs-From20190130' . $owner_user_id); } function get_select_opt($type) { $a = []; if ('GENDER' == $type) { $a = [ [NOTPROVIDE_VAL, '保留'], [MALE_VAL, '男'], [FEMALE_VAL, '女'], ]; } return $a; } function display_text($type, $key) { $a = array(); if ('GENDER' == $type) { $a[MALE_VAL] = '男'; $a[FEMALE_VAL] = '女'; $a[NOTPROVIDE_VAL] = '保留'; } $s = isset($a[$key]) ? $a[$key] : $key; return $s; } define('BROWSE_COUNDT_BURING_TIME', 60); define('JOB_MODIFICATIONS_SPLIT', '```'); define('_ROOT_DIR_', __DIR__ . '/../'); define('_LOGS_DIR_', _ROOT_DIR_ . 'logs/'); define('LIB_DIR', _ROOT_DIR_ . 'lib/'); define('WEB_URL', '/'); define('IMG_URL', WEB_URL . 'img/'); define('DIST_URL', WEB_URL . 'dist/'); define('SEMANTIC_URL', DIST_URL . 'semantic2.4/'); define('FE_VER', '?3'); define('JQUERY_SRC', DIST_URL . 'jquery-3.1.1.js'); define('TOOLS_VIEW_PATH', 'tools/'); // define('RESEND_JOB_NOTIFY_EMAIL', WEB_URL.'resend_job_notify_email'); define('JOBS_WITHOUT_OWNERID_URL', WEB_URL . 'jobs_without_ownerid'); define('WAIT4VERIFY_URL', WEB_URL . 'wait4verify'); define('REMEBER_LOGIN_TIME', 2592000); // 30 * 24 * 60 * 60 (after 30days) define('LOGIN_URL', '/login'); define('ADMIN_DASHBOARD_URL', '/jobs/dashboard/admin'); define('ADMIN_JOB_EDIT_POSTING_URL', '/jobs/admin/edit'); define('ADMIN_JOB_EDIT_URL', '/jobs/admin/edit/%s'); # %s job_id define('URLQUERY_HASH4VERIFY_KEY', 'hash4verify'); define('INPUT_NAME_HASH4VERIFY', 'hash4verify'); define('ADMIN_JOB_EDIT_URL_WITH_VERIFY_HASH', ADMIN_JOB_EDIT_URL . '?' . URLQUERY_HASH4VERIFY_KEY . '=%s'); define('OWNER_DASHBOARD_URL', '/jobs/dashboard'); define('GUEST_ONE_JOB_URL', '/jobs/%s'); # %s job_id define('AJAX_URL', WEB_URL . 'ajax/'); define('AJAX_MOVE2TRASH_URL', AJAX_URL . 'move2trash'); define('AJAX_JOBVERIFY_URL', AJAX_URL . 'job_verify'); define('AJAX_JOBSHOW_URL', AJAX_URL . 'job_show'); define('AJAX_CODE_SUCC', 0); define('AJAX_CODE_ERROR', 999); define('AJAX_CODE_INCORRECT_CAPTCHA', 6); define('AJAX_CODE_ONLY_FOR_ADMIN', 5); define('IS_DEV', strpos($_SERVER['SERVER_NAME'], '.dev') !== false); define('NOTIFY_USER_EMAIL_ADDRESS_FOR_DEV', 'ben.wang@sted.tw'); //wig@sted.tw define('JOB_VERIFY_OPEN', 1); define('JOB_VERIFY_CLOSE', 0); define('JOB_VISIBLE_SHOW', 1); define('JOB_VISIBLE_HIDE', 0); define('JOB_TRASH_IN', 1); define('JOB_TRASH_OUT', 0); define('USER_ID_SESS_KEY', 'user_id'); define('LOGIN_TOKEN_COOKIE_KEY', 'g'); // just a short&meaningless cooke name define('NOTIFY_READY_EXPIRED_JOB_AFTER_DAYS', 3); function is_company_list_page($queryparams) { return isset($queryparams['company']) && empty($queryparams['company']); } function replace_by_dic($string_tmpl, $dictionary) { $s = $string_tmpl; foreach ($dictionary as $k => $v) { $s = str_replace('{' . $k . '}', $v, $s); } return $s; } function get_job_sql_query($use_at = '') { $IS_TOOLS_JOBS_HTML = $use_at = 'tools/jobs_html'; $DEVELOPER_USER_ID = isset($_GET['show_dev_jobs']) ? array(-1) : array(38, 163, 164, 170, 171, 256, 257, 258); #sql $job_query = "SELECT j.id , j.submit_count , j.logo_url , j.logo_path , j.job_title , j.company_depart , j.company , j.place , t.job_type , c.category , j.salary_text , j.salary_mon_min , j.salary_mon_max {more_select} , e.experience from jobs j join job_type t on (t.id = j.job_type_id) join category c on (c.id = j.category_id) join experience e on (e.id = j.experience_id) join users u on (u.id = j.owener_id) where j.visible=1 and j.owener_id NOT IN (" . implode(',', $DEVELOPER_USER_ID) . ") and j.verify=1 and j.date_expired >= '" . date("Y-m-d") . "'"; $more_select = ''; if ($IS_TOOLS_JOBS_HTML) { $more_select = ', j.owener_id, u.name, u.school_no'; } $job_query = str_replace('{more_select}', $more_select, $job_query); return $job_query; } function display_input_radio($a, $input_name, $cur_val = '', $html_id = '') { return ''; # not completed. $inputs = ''; foreach ($a as $v) { $inputs .= '
'; } return '' . $inputs . ''; } function display_input_select($a, $input_name, $cur_val = '', $html_id = '') { $opt = ''; foreach ($a as $v) { $opt .= ''; } return '' . $opt . ''; } function now($format = 'Y-m-d H:i:s') { // %Y-%m-%d %H:%M:%S foreach (array('Y' => '%Y', 'm' => '%m', 'd' => '%d', 'H' => '%H', 'i' => '%M', 's' => '%S') as $k => $v) { $format = str_replace($k, $v, $format); } $ret = shell_exec("date '+" . $format . "'"); return trim($ret); } function check_captcha($captcha, $is_ajax_response = false) { include_once __DIR__ . '/../lib/securimage/securimage.php'; $securimage = new Securimage(); if (!$securimage->check($captcha)) { $msg = 'fail, please enter correct captcha code. 失敗了,請輸入正確的驗證碼.'; #if(IS_DEVELOPER){$msg.=$captcha.'----------'.array_keys($_SESSION['securimage_code_value']);} if ($is_ajax_response) { die(json_encode(array('code' => AJAX_CODE_INCORRECT_CAPTCHA, 'msg' => $msg))); } die('' . $msg . '回上一頁'); } } function send_mail_by_proxy_base($email_to, $email_subject, $email_content, $email_from = 'no-reply@aiacademy.tw', $email_from_name = '台灣人工智慧學校人才媒合平台', $ary_bccemail = array()) { #deprecated if (is_array($email_to)) { $email_to = implode('`', $email_to); } $url = 'http://smartdonor.tw/send_email_proxy/send_it.php'; $data = array( 'key' => 'asdewioTxzvlk', 'subject' => $email_subject, 'content' => $email_content, 'email_from' => $email_from, 'email_from_name' => $email_from_name, 'email_to' => $email_to ); if ($ary_bccemail) { $data['bcc'] = implode('`', $ary_bccemail); } $ch = curl_init($url); # Form data string $postString = http_build_query($data, '', '&'); # Setting our options curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postString); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); # Get the response $response = curl_exec($ch); curl_close($ch); return strpos($response, 'SUCC') !== false; } // end send_mail_by_proxy_base function send_mail_base($email_to, $email_subject, $email_content, $email_from = 'no-reply@aiacademy.tw', $email_from_name = '台灣人工智慧學校人才媒合平台', $ary_bccemail = array()) { #deprecated return send_mail_by_proxy_base($email_to, $email_subject, $email_content, $email_from, $email_from_name, $ary_bccemail); mb_internal_encoding('UTF-8'); $mail = new PHPMailer; $mail->CharSet = 'utf-8'; ini_set('default_charset', 'UTF-8'); $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'smtp.mailgun.org'; // Specify main and backup SMTP servers $mail->SMTPAuth = true; // Enable SMTP authentication #$mail->Username = 'postmaster@mail.aiacademy.tw'; // SMTP username from https://mailgun.com/cp/domains $mail->Username = 'postmaster@aiacademy.tw'; // SMTP username from https://mailgun.com/cp/domains #$mail->Password = '73a096e5d43db41d3328b49df8a54c90-913a5827-fdb6ebc3'; // SMTP password from https://mailgun.com/cp/domains $mail->Password = '6786f1acbefe8915bedb6a00ef529bd5-28d78af2-d18cc338'; #$mail->SMTPSecure = 'ssl'; // Enable encryption, 'ssl' also accepted $mail->SMTPSecure = 'tls'; // Enable encryption, 'ssl' also accepted #$mail->Port = 465; $mail->Port = 587; $mail->IsHTML(true); $mail->From = $email_from; $mail->FromName = $email_from_name; if (is_string($email_to)) { $mail->addAddress($email_to); // Add a recipient } elseif (is_array($email_to)) { foreach ($email_to as $_email) { $mail->addAddress($_email); } } foreach ($ary_bccemail as $bcc_email) { $mail->addBCC($bcc_email, encoding('CC信箱')); // Add a recipient } $mail->WordWrap = 50; // Set word wrap to 50 characters $mail->isHTML(true); $mail->Subject = encoding($email_subject); $mail->Body = $email_content; file_put_contents( _LOGS_DIR_ . 'send_mail.log', implode( "\n\n", array( is_array($email_to) ? implode(',', $email_to) : $email_to, $email_from, $email_from_name, $email_subject, implode('`', $ary_bccemail), $email_content ) ) . "\n\n\n\n\n", FILE_APPEND | LOCK_EX ); return $mail->send(); } function get_job_detail_href($job_id) { return 'https://jobs.aiacademy.tw/jobs/' . $job_id; } function get_owner_job_edit_href($job_id, $key1 = '') { return 'https://jobs.aiacademy.tw/jobs/edit/' . $job_id . ($key1 ? '?key1=' . $key1 : ''); } function send_ready_expired_job_to_owner_email($ary_jobs, $user_mapper) { $ary_emails = array(); #key is owner_email, value is job_meta_data foreach ($ary_jobs as $job) { $owner_user_id = $job->get_owener_id(); if (!isset($ary_emails[$owner_user_id])) { $ary_emails[$owner_user_id] = array(); } $ary_emails[$owner_user_id][] = array($job->getJobTitle(), $job->getDateExpired(), $job->getId(), $owner_user_id); } #echo'
'; print_r($ary_emails);
    //
    foreach (array_keys($ary_emails) as $user_id) {
        $user = $user_mapper->getUserById($user_id);
        $ary_emails[$user->getEmail()] = $ary_emails[$user_id];
        unset($ary_emails[$user_id]);
    }
    #print_r($ary_emails);exit;
    //
    foreach ($ary_emails as $owner_email => $job_meta) {
        if (IS_DEV) {
            $owner_email = 'ben.wang@sted.tw'; //wei@sted.tw
        }
        $subj = '[jobs.aiacademy.tw] ' . NOTIFY_READY_EXPIRED_JOB_AFTER_DAYS . '日後就過期的職缺 (於' . date('Y.m.d') . '提醒)';
        $content = '

您可以: 到本站延長職缺過期日(詳見步驟);如不需延長,該職缺在過期後,網站上就看不到該職缺。


'; foreach ($job_meta as $meta) { $job_title = $meta[0]; $date_expired = $meta[1]; $job_id = $meta[2]; $owner_user_id = $meta[3]; $key1 = get_key4changing_expired_day($job_id, $owner_user_id); $content .= '【' . $job_title . '】 將於 ' . $date_expired . ' 過期 --- 延長過期日

'; } $content .= '
以上訊息由 台灣人工智慧學校人才媒合平台 提供。如有任何問題或建議,歡迎隨時來信與我們聯絡 jobs@aiacademy.tw'; send_mail_base(array($owner_email, 'richie.tsai@sted.tw', 'ben.wang@sted.tw','cltsai@sted.tw', NOTIFY_USER_EMAIL_ADDRESS_FOR_DEV), $subj, $content); } } function send_job_verified_by_admin_to_owner_email($user_email, $job, $jobhistory_mapper = null) { $subj = '[通知] 您的【' . $job->getJobTitle() . '】職缺發佈【已通過】審核,可至 ' . get_job_detail_href($job->getId()) . ' 查看'; $content = '您的【' . $job->getJobTitle() . '】職缺發佈【已通過】審核,您可在職缺到期日前選擇上架顯示下架暫時隱藏。'; if (IS_DEV) { $user_email = NOTIFY_USER_EMAIL_ADDRESS_FOR_DEV; } send_mail_base($user_email, $subj, $content); if ($jobhistory_mapper) { $jobhistory_mapper->save($job->getId(), SYSTEM_USER_ID, SYS_SEND_VERIFY_TO_OWNER_EMAIL); } } function send_job_unverified_by_admin_to_owner_email($user_email, $job, $jobhistory_mapper = null) { $subj = '[通知] 您的【' . $job->getJobTitle() . '】職缺發佈【未通過】審核'; $content = 'We are sorry, 您的【' . $job->getJobTitle() . '】職缺發佈【未通過】審核。'; if (IS_DEV) { $user_email = NOTIFY_USER_EMAIL_ADDRESS_FOR_DEV; } send_mail_base($user_email, $subj, $content); if ($jobhistory_mapper) { $jobhistory_mapper->save($job->getId(), SYSTEM_USER_ID, SYS_SEND_UNVERIFY_TO_OWNER_EMAIL); } } function send_job_visible_by_admin_to_owner_email($user_email, $job, $jobhistory_mapper = null) { $subj = '[通知] 您的【' . $job->getJobTitle() . '】職缺由管理員上架顯示了'; $content = '您的【' . $job->getJobTitle() . '】職缺由管理員上架顯示了,可至 ' . get_job_detail_href($job->getId()) . ' 查看'; if (IS_DEV) { $user_email = NOTIFY_USER_EMAIL_ADDRESS_FOR_DEV; } send_mail_base($user_email, $subj, $content); if ($jobhistory_mapper) { $jobhistory_mapper->save($job->getId(), SYSTEM_USER_ID, SYS_SEND_VISIBLE_TO_OWNER_EMAIL); } } function send_job_unvisible_by_admin_to_owner_email($user_email, $job, $jobhistory_mapper = null) { $subj = '[通知] 您的【' . $job->getJobTitle() . '】職缺由管理員下架不顯示了'; $content = '您的【' . $job->getJobTitle() . '】職缺由管理員下架不顯示了'; if (IS_DEV) { $user_email = NOTIFY_USER_EMAIL_ADDRESS_FOR_DEV; } send_mail_base($user_email, $subj, $content); if ($jobhistory_mapper) { $jobhistory_mapper->save($job->getId(), SYSTEM_USER_ID, SYS_SEND_INVISIBLE_TO_OWNER_EMAIL); } } function send_job_trash_by_admin_to_owner_email($user_email, $job, $jobhistory_mapper = null) { $subj = '[通知] 您的【' . $job->getJobTitle() . '】職缺由管理員移至垃圾桶了'; $content = '您的【' . $job->getJobTitle() . '】職缺由管理員移至垃圾桶了'; if (IS_DEV) { $user_email = NOTIFY_USER_EMAIL_ADDRESS_FOR_DEV; } send_mail_base($user_email, $subj, $content); if ($jobhistory_mapper) { $jobhistory_mapper->save($job->getId(), SYSTEM_USER_ID, SYS_SEND_TRASH_TO_OWNER_EMAIL); } } function send_notify_expired_jobs_to_owner_email($user_email, $job, $jobhistory_mapper = null) { /* echo($user_email); echo$subj; echo$content; echo'----';*/ $subj = '[通知] 您在【' . get_job_detail_href($job->getId()) . '】發布的職缺已因超過您當初設定的過期日自動下架。'; $content = '下架職缺:' . $job->getJobTitle() . '
'; $content .= '起初發布日:' . $job->getDatePost() . '
'; $content .= '過期日:' . $job->getDateExpired() . '
'; $content .= '
歡迎 登入 本站並至後台 設定上架。'; if (IS_DEV) { $user_email = NOTIFY_USER_EMAIL_ADDRESS_FOR_DEV; } send_mail_base($user_email, $subj, $content); if ($jobhistory_mapper) { $jobhistory_mapper->save($job->getId(), SYSTEM_USER_ID, SYS_SEND_EXPIRED_TO_OWNER_EMAIL); } } function send_job_added_or_edited_mail($type, $job_id, $changed_result, $this_db) { #<--$changed_result might be NOT array as default. $changed_result = $changed_result ?? array(); # get all admins $jobs_mapper = new JobsMapper($this_db); $job = $jobs_mapper->getJobById($job_id); if ($job and isset($job[0])) { $job = $job[0]; } $IS_ADD = $type == '_ADD_'; $IS_UPDATE = $type == '_UPDATE_' || !$IS_ADD; $add_or_update = $IS_ADD ? '新增' : '更新'; $email_content = '請確定已登入 ' . $_SERVER['SERVER_NAME'] . ',再點擊 職缺 job_id=' . $job_id . '
' . '或
進入(總校13F IP)快速審核頁
'; if ($IS_ADD) { $ary_job_content = array(); if ($job) { $ary_job_content = array( 'ID編號: ' . $job->getId(), '標題: ' . $job->getJobTitle(), '公司: ' . $job->getCompany(), '公司部門: ' . $job->getCompanyDepart(), '地點: ' . $job->getPlace(), '工作類型: ' . $job->getJobType(), '經驗需求: ' . $job->getExperience(), '職務分類: ' . $job->getCategory(), '工作內容描述: ' . $job->getJobDescription(), '網址: ' . $job->getWebsite(), '薪資: ' . get_salary_str($job), '最低薪資: ' . $job->get_salary_mon_min(), '最高薪資: ' . $job->get_salary_mon_max(), '發佈者ID: ' . $job->get_owener_id(), '發佈者名稱: ' . $job->get_owener_name(), '發佈者email: ' . $job->get_owener_email(), '職缺新增時間: ' . $job->getDatePost(), '職缺過期日: ' . $job->getDateExpired(), ); } $email_content .= implode('

', $ary_job_content); } elseif ($IS_UPDATE) { // $email_content .= '


' . str_replace(JOB_MODIFICATIONS_SPLIT, '


', $changed_result['content']); $email_content .= display_job_diff_content($changed_result['content']); } $email_subject = '【職缺' . $add_or_update . '通知信】' . ($job ? ' ' . $job->getJobTitle() . ' ' : '') . 'job_id=' . $job_id . ' ' . LIVE_DOMAIN_NAME; $email_to = array(); if (IS_DEV) { $email_to[] = 'ben.wang@sted.tw'; //'wei@sted.tw' } else { $email_to[] = 'ben.wang@sted.tw'; //'wei@sted.tw' if ($IS_ADD) { $email_to[] = 'richie.tsai@sted.tw'; } //,dh@sted.tw } if (IS_DEV) { $email_to = NOTIFY_USER_EMAIL_ADDRESS_FOR_DEV; } return send_mail_base($email_to, $email_subject, $email_content); } function is_admin_login($_this_session, $_this_db) { $login_user = $_this_session->get('login'); if ($login_user and isset($login_user['email']) and $login_user['email']) { $sql = "SELECT * FROM `users` WHERE `email`='" . $login_user['email'] . "'"; $stmt = $_this_db->query($sql); $row = $stmt->fetch(); if ($row['authority'] == 1) { return true; } } return false; } function is_admin_login_simple() { # simple way to check return isset($_SESSION['verify']) && $_SESSION['verify'] == 1; } function ajax_response($ary) { die(json_encode($ary)); } function display_js_const() { $ret = 'window.CONST={WEB_URL:"' . WEB_URL . '",AJAX_CODE:{WRONG_CAPTCHA:' . AJAX_CODE_INCORRECT_CAPTCHA . ',SUCC:' . AJAX_CODE_SUCC . ',ERROR:' . AJAX_CODE_ERROR . ',ONLY4ADMIN:' . AJAX_CODE_ONLY_FOR_ADMIN . '},ajaxMove2TrashUrl:"' . AJAX_MOVE2TRASH_URL . '",' . 'ajaxJobVerify:"' . AJAX_JOBVERIFY_URL . '",' . 'ajaxJobShow:"' . AJAX_JOBSHOW_URL . '",' . '};'; $is_admin = is_admin_login_simple(); if ($is_admin) { $ret .= 'window.CONST=$.extend(window.CONST,{ADMIN_DASHBOARD_URL:"' . ADMIN_DASHBOARD_URL . '"});'; } return $ret; } function function_when_job_add_or_update($type, $_this, $_this_db, $_this_session, $parameters) { $is_admin_login = is_admin_login($_this_session, $_this_db); if ($type == '_UPDATE_') { $jobs = $parameters['jobs']; $changed_result = $parameters['changed_result']; // save changed data in JobDiffNotificationMapper if ($changed_result['is_changed']) { $job_diff_notification_mapper = new JobDiffNotificationMapper($_this_db); $job_diff_notification_mapper->save($jobs->getId(), $job_diff_notification_mapper::JOB_DIFF_TYPE_UPDATE, $changed_result['content']); } return $is_admin_login ? true : send_job_added_or_edited_mail($type, $jobs->getId(), $changed_result, $_this_db); } elseif ($type == '_ADD_') { $insert_id = $parameters['insert_id']; $job_diff_notification_mapper = new JobDiffNotificationMapper($_this_db); $job_diff_notification_mapper->save($insert_id, $job_diff_notification_mapper::JOB_DIFF_TYPE_ADD); return $is_admin_login ? true : send_job_added_or_edited_mail($type, $insert_id, array(), $_this_db); } } function get_salary_str($job) { $s = $job->get_salary_text(); if ($s) { return $s; } else { return '依能力經驗面議'; } $salary_mon_max = $job->get_salary_mon_max(); $salary_mon_min = $job->get_salary_mon_min(); $salary_str = ''; if ($salary_mon_max && $salary_mon_max > $salary_mon_min) { $salary_str = '月薪 NT$' . number_format($salary_mon_min) . ' - NT$' . number_format($salary_mon_max); } else { $salary_str = '月薪 NT$' . number_format($salary_mon_min) . ' 起,依能力經驗面議'; } return $salary_str; } function get_verify_job_hash($job_id, $owner_email) { return md5('verifylink_' . $job_id . '_' . $owner_email . '_JOB'); } function get_verify_job_hash_link($job_id, $owner_email) { $hash = get_verify_job_hash($job_id, $owner_email); return sprintf(ADMIN_JOB_EDIT_URL_WITH_VERIFY_HASH, $job_id, $hash); } function is_correct_job_hash($job_id, $owner_email, $test_hash) { return $test_hash === get_verify_job_hash($job_id, $owner_email); } function remove_cookie($key_name) { if (isset($_COOKIE[$key_name])) { unset($_COOKIE[$key_name]); setcookie($key_name, '', -1); } } function setup_user_session($this_session, $user_name, $user_email, $user_md5_pwd, $user_authority, $user_id) { $this_session->set('login', ['name' => $user_name, 'email' => $user_email, 'pwd' => $user_md5_pwd]); $this_session->set('verify', $user_authority); $this_session->set(USER_ID_SESS_KEY, $user_id); } function get_logintoken($user_id, $logined_time) { $ua = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; return sha1(md5('jobdata' . $ua . '#' . $user_id . '#' . $logined_time . 'datasci.tw')); } function display_howto_job_category() { $put_new_color_after_original_color = ' ' . 'green'; return ''; } function display_flash_messages($flash_messages) { $ret = ''; if (isset($flash_messages) and $flash_messages) { foreach ($flash_messages as $k => $v) { $ret .= '
' . implode('

', $v) . '
'; } } return $ret; } function display_job_logo_2fields($job) { ?>
^ (若此欄位有填,則前台將優先顯示 這個圖片,而不使用上圖的圖片)
getLogoPath(); $web_path = $job->getLogoPath(true); if (is_file($file_path)) { $a_tag_start = ''; $a_tag_end = ''; echo '
Logo 預覽:' . $a_tag_start . $job->getLogoPath() . $a_tag_end . ' ' . $a_tag_start . '' . $a_tag_end . '
'; } ?>
驗證碼圖片 換另一張圖
getCompanyDepart(); $job_card_base_style = 'min-height: 0;background: #FFF;padding: 0;border: none;border-radius: .28571429rem;box-shadow: 0 1px 3px 0 #D4D4D5, 0 0 0 1px #D4D4D5; max-width: 100%;position: relative;display: flex;flex-direction: column; min-height: 0;background: #FFF;padding: 0;border: none;border-radius: .28571429rem;box-shadow: 0 1px 3px 0 #D4D4D5, 0 0 0 1px #D4D4D5;'; if ($IS_AT_INDEX) { $href = '/jobs/' . $job->getId(); } elseif ($IS_AT_INDEX_GROUPBY_COMPANY) { $href = '?company=' . $job->getCompany(); } elseif ($IS_AT_DASHBOARD) { $href = '/jobs/edit/' . $job->getId(); $edit_job_url = $href; } elseif ($IS_AT_ADMIN_DASHBOARD) { $href = '/jobs/admin/edit/' . $job->getId(); } elseif ($IS_EDM_JOBS_HTML) { $href = 'https://' . AIACADEMY_LIVE_DOMAIN . '/jobs/' . $job->getId(); } $logo_imgsrc = ''; if ($job->getLogoUrl()) { foreach (array('.jpg', '.png', '.jpeg', '.gif') as $_) { if (strpos($job->getLogoUrl(), $_) !== false) { $logo_imgsrc = $job->getLogoUrl(); } } } if (!$logo_imgsrc) { $logo_value = $job->getLogoPath(); $logo_imgsrc = ($IS_EDM_JOBS_HTML ? 'https://' . AIACADEMY_LIVE_DOMAIN : '') . ($logo_value ? $job->getLogoPath(true) : IMG_URL . 'default_job_logo.png'); } if ($IS_EDM_JOBS_HTML) { $s = ''; $a_link_tag_start = ''; $job_type = '
' . $job->getJobType() . '
'; $job_salary = '薪資:' . get_salary_str($job) . ''; $job_title = $job->getJobTitle(); # if use base64, open me to override $logo_imgsrc....... # $logo_base64 = get_img_base64(CORP_LOGO_ABS_PATH . $job->getLogoPath()); # $logo_imgsrc = $logo_base64; $s .= '
' . $a_link_tag_start . '' . $job_title . ' ' . $a_link_tag_start . '' . $job_title . '
公司名稱:' . $job->getCompany() . '
公司地點:' . $job->getPlace() . '
刊登日期:' . $job->getDatePost() . '
' . $job_type . '
' . $job_salary . '
更新:' . substr($job->getDateMod(), 0, -3) . '
有效至:' . $job->getDateExpired() . '
'; return $s; } $ary_style = []; if ((string)$job->getVisible() === '0') { # To consider $job->getVisible() would be NULL at home-index list. $ary_style[] = 'background:#ccc'; } ?>
class="ui card job_card"> ' . $job->getCompany() . ' Logo'; $content_base_style = ' style="position:absolute;top:5px;left:130px;padding:0;right:2px;bottom:0;border-top:0;flex-grow:0;-moz-box-flex:0;-webkit-box-flex:0;box-flex:0;"'; ?> getJobType()) { case '全職': $color = 'green'; break; case '兼職': $color = 'black'; break; case '實習': $color = 'red'; break; default: $color = 'gray'; break; } ?>
getJobType() ?>
getVisible()) == 1 ? '上架' : '下架' ?>
getVerify()) == 1 ? '審核通過' : '審核中' ?>
getCompany() . ($dept ? ' ' . $dept : '') ?> getJobTitle() ?>
getCompany() . ($dept ? ' ' . $dept : '') ?> getJobTitle() ?>
getJobTitle() ?>
公司名稱:getCompany(); if ($IS_AT_INDEX_GROUPBY_COMPANY) { echo ' (' . $job->getJobnumInCompany() . ' 筆職缺)'; } ?>
公司地點:getPlace() ?>
    getPlace(), '經驗需求:' . $job->getExperience(), '薪資範圍:' . get_salary_str($job), '職務分類:' . $job->getCategory() ); } elseif ($IS_AT_DASHBOARD) { $ary_li = array( '公司名稱:' . $job->getCompany(), '薪資範圍:' . get_salary_str($job), '刊登日期:' . $job->getDatePost(), '收到 ' . $job->getSubmitCount() . ' 封履歷', '更新時間:' . $job->getDateMod(), ); } elseif ($IS_AT_ADMIN_DASHBOARD) { $ary_li = array( '公司名稱:' . $job->getCompany(), '薪資範圍:' . get_salary_str($job) . '', '公司地點:' . $job->getPlace(), '更新時間:' . $job->getDateMod(), '刊登日期:' . $job->getDatePost(), '有效日期:' . $job->getDateExpired(), '收到 ' . $job->getSubmitCount() . ' 封履歷', '張貼人:' . $job->get_owener_email() . ' [ ' . $job->get_owener_name() . ' ]' ); } foreach ($ary_li as $li) { echo '
  • ' . $li . '
  • '; } ?>
編緝 預覽前台 編緝 預覽前台

' . str_replace( JOB_MODIFICATIONS_SPLIT, '


', $content ); return $ret; } function display_close_site_msg() { # 20170802 Add if (date('YmdH') >= '2017080916') { return ''; } $style = 'position:fixed;bottom:0;left:0;right:0;z-index:9999;'; return '
本站預計在 2017/8/9 (三) 14:00~16:00 關機維護,並預計在當日 16:01 後開機再運作,造成不便,敬請見諒,感謝您的合作。
'; } function sanitize_output($buffer) { #https://stackoverflow.com/questions/6225351/how-to-minify-php-page-html-output #$buffer = str_replace(array("\n","\r","\t"),'',$buffer); $search = array( '/\>[^\S ]+/s', // strip whitespaces after tags, except space '/[^\S ]+\/' // Remove HTML comments ); $replace = array( '>', '<', '\\1', '' ); $buffer = preg_replace($search, $replace, $buffer); return $buffer; } function ary2dbstr($ary) { if (!$ary) { return ''; } $X = '`'; $s = implode($X, $ary); if (substr($s, 0, 1) !== $X) { $s = $X . $s; } if (substr($s, -1) !== $X) { $s .= $X; } return $s; } function display_skill_fields($apply_id, $apply, $skills, $ary_nonofficial_skills) { ?>
get_skill()); foreach ($skills as $skill): $_skill_id = $skill->getId(); $html_id = 'skill_' . $_skill_id; $checked = in_array($_skill_id, $ary_skill_ids) ? ' checked' : ''; ?>
value="" />
get_knowhow()); foreach ($knowhows as $knowhow): $_knowhow_id = $knowhow->getId(); $html_id = 'knowhow_' . $_knowhow_id; $checked = in_array($_knowhow_id, $ary_knowhow_ids) ? ' checked' : ''; ?>
value="" />
getJobById($job_id); if ($auto_pick_index_0 and isset($job[0])) { return $job[0]; } return $job; } function _ajax_response_of_job_which_is_changed_with_one_field($request, $this_db, $change_what, $this_session) { $data = $request->getParsedBody(); $job_id = isset($data['job_id']) && $data['job_id'] > 0 ? $data['job_id'] + 0 : 0; $is_verify_hash_correct = false; if (isset($data[INPUT_NAME_HASH4VERIFY])) { $job = __get_job(array('id' => $job_id), $this_db)[0]; $is_verify_hash_correct = is_correct_job_hash( $job_id, $job->get_owener_email(), $data[INPUT_NAME_HASH4VERIFY] ); } $is_admin = is_admin_login_simple(); if (!$is_admin and !$is_verify_hash_correct) { ajax_response(array('code' => AJAX_CODE_ONLY_FOR_ADMIN)); } $jobhistory_mapper = new JobHistoryMapper($this_db); $user_mapper = new UserMapper($this_db); $user_id = $this_session->get('user_id'); if (!$user_id) { $user_id = -1; // if using hash4verify } $user_email = $this_session->get('login')['email']; $jobs_mapper = new JobsMapper($this_db); $jobs = $jobs_mapper->getJobById($job_id)[0]; switch ($change_what) { case 'TRASH': $result = set_trash_decorator($jobs_mapper, $jobhistory_mapper, $user_mapper, $jobs, $user_id); break; case 'VISIBLE': if (!isset($data['visible'])) { ajax_response(array('code' => AJAX_CODE_ERROR, 'msg' => 'invalid visible parameter/value')); } #$result = $jobs_mapper->set_visible($jobs, $data['visible']==1 ? true : false, true); $result = set_visible_decorator($jobs_mapper, $jobhistory_mapper, $user_mapper, $jobs, $user_id, $data); break; case 'VERIFY': if (!isset($data['verify'])) { ajax_response(array('code' => AJAX_CODE_ERROR, 'msg' => 'invalid verify parameter/value')); } #$result = $jobs_mapper->set_verify($jobs, $data['verify']==1 ? true : false, true); $result = set_verify_decorator($jobs_mapper, $jobhistory_mapper, $user_mapper, $jobs, $user_id, $data); break; default: ajax_response(array('code' => AJAX_CODE_ERROR, 'msg' => 'invalid job method.')); break; } if (isset($result['success']) and $result['success']) { ajax_response(array( 'code' => AJAX_CODE_SUCC, 'msg' => $result['success'], 'flag' => $is_verify_hash_correct, 'data' => $data //<-- debug )); } $res = array('code' => AJAX_CODE_ERROR); if ($result['error']) { $res['msg'] = $result['error']; } ajax_response($res); } ?>