'; print_r($s); echo ''; } else { var_dump($s); } 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 .= '';
}
}
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 . ' |
' . $a_link_tag_start . '' . $job_title . '
公司名稱:' . $job->getCompany() . '
公司地點:' . $job->getPlace() . '
刊登日期:' . $job->getDatePost() . '
|
' . $job_type . '
' . $job_salary . '
更新:' . substr($job->getDateMod(), 0, -3) . '
有效至:' . $job->getDateExpired() . '
|