getName();
echo'
';
echo $KEYCLOAK_USER->getEmail();
echo'
';
echo $KEYCLOAK_USER->getId();
echo'
';
}
//*/
}
function is_ajax_request() {
return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
}
function curl_post_request($url, $ary_data, $is_json_request = false) {
$ch = curl_init();
$a = array();
foreach ($ary_data as $k => $v) {
$a[] = $k . '=' . $v;
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, implode('&', $a));
// In real life you should use something like:
// curl_setopt($ch, CURLOPT_POSTFIELDS,
// http_build_query(array('postvar1' => 'value1')));
// Receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if ($is_json_request) {
//Set the content type to application/json # https://thisinterestsme.com/sending-json-via-post-php/
curl_setopt($ch, CURLOPT_HEADER, false);
$payload = json_encode($ary_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($payload)
));
}
$server_output = curl_exec($ch);
curl_close($ch);
return $server_output;
}
function is_aia_staff_openid_email($email) {
}
function _convert_number2sortable($s) {
foreach (
array(
'二十' => 20,
'十九' => 19,
'十八' => 18,
'十七' => 17,
'十六' => 16,
'十五' => 15,
'十四' => 14,
'十三' => 13,
'十二' => 12,
'十一' => 11,
'十' => 10,
'九' => '09',
'八' => '08',
'七' => '07',
'六' => '06',
'五' => '05',
'四' => '04',
'三' => '03',
'二' => '02',
'一' => '01',
) as $k => $v
) {
if (strpos($s, $k) === false) {
continue;
}
$s = str_replace($k, $v, $s);
}
return $s;
}
function normalize_aia_email($email, $need_care_valid_or_not = true) {
if ($need_care_valid_or_not and !filter_var($email, FILTER_VALIDATE_EMAIL)) {
var_dump($email);
die('invalid AIAcademy email');
}
return trim(strtolower($email));
}
function get_datetime_weekday($date) {
$dw = str_replace(array(' ', "\n", "\r"), '', shell_exec('date -d"' . $date . '" "+%w"'));
return $dw;
}
function is_weekday_sunday($dw) {
$dw = (int)$dw;
return $dw === 0;
}
function fix_post_data($_POST_VALUE) { // tested on chrome
if (is_int($_POST_VALUE) or is_float($_POST_VALUE)) {
return $_POST_VALUE;
}
if (is_string($_POST_VALUE)) {
return stripslashes($_POST_VALUE);
} else {
if (is_array($_POST_VALUE)) {
foreach ($_POST_VALUE as $k => $v) {
$_POST_VALUE[$k] = fix_post_data($v);
}
}
}
return $_POST_VALUE;
}
function now($format = 'Y-m-d H:i:s') { // %Y-%m-%d %H:%M:%S
// 保存當前時區
//$originalTimeZone = date_default_timezone_get();
// 設定時區為台北時間
// date_default_timezone_set('Asia/Taipei');
$time = date($format);
// 恢復原始時區
// date_default_timezone_set($originalTimeZone);
return $time;
// 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."'");
// #if($is_remove_new_line_break){
// $ret = str_replace(array("\r","\n"),'',$ret);
// #}
// return$ret;
}
function ajax_response($code, $data, $msg = '') {
return array('code' => $code, 'msg' => $msg, 'data' => $data);
}
function is_aia_student_login() { // 20180712 So far, only for mgr-students
return isset($_SESSION['aia_student_school_no']) && $_SESSION['aia_student_school_no'];
}
function get_aia_student_school_no() { // 20180712
return isset($_SESSION['aia_student_school_no']) ? $_SESSION['aia_student_school_no'] : '';
}
function can_view_content() {
if (get_aia_student_school_no()) {
return true;
} # 20180712 added this line
global $KEYCLOAK_USER;
if (!$KEYCLOAK_USER) {
$KEYCLOAK_USER = get_keycloak_user_by_session_or_cache();
}
$user = wp_get_current_user();
return (isset($KEYCLOAK_USER) && $KEYCLOAK_USER) || strpos($user->user_login, 'student') === 0 || $user->user_login;
}
function get_dates_diff($date1, $date2) {
$datetime1 = date_create($date1); # or use new DateTime($date1);
$datetime2 = date_create($date2);
$interval = date_diff($datetime1, $datetime2);
return $interval;
}
define('WEB_URL', '/');
define('STUDENT_MGR_URL', WEB_URL . 'mgr/');
define('HR_WEB_URL', WEB_URL . 'hr/');
define('ENTER_LOGS_URL', WEB_URL . 'enter_logs/');
define('ENTER_LOGS_JS_URL', ENTER_LOGS_URL . 'js/');
define('ENTER_LOGS_JS_VENDOR_URL', ENTER_LOGS_JS_URL . 'vendors/');
define('ENTER_LOGS_JQUERY_UI_URL', ENTER_LOGS_JS_VENDOR_URL . 'jquery-ui-1.12.1.custom/');
define('ENTER_LOGS_ADMIN_URL', ENTER_LOGS_URL . 'admin/');
define('ENTER_LOGS_ADMIN_LIB_URL', ENTER_LOGS_ADMIN_URL . 'lib/');
define('ENTER_LOGS_DASHBOARD_URL', ENTER_LOGS_URL . 'dashboard/');
define('ENTER_LOGS_DASHBOARD_LIB_URL', ENTER_LOGS_DASHBOARD_URL . 'lib/');
define('LIVE_DOMAIN', 'class.aiacademy.tw');
define('LIVE_DOMAIN_WITH_WWW', 'class.aiacademy.tw');
define('IS_HTTPS', stripos($_SERVER['SERVER_PROTOCOL'], 'https') === true);
define('LIVE_DOMAIN_WITH_PROTOCOL', 'https://' . LIVE_DOMAIN);
function get_override_or_append_GET($ary_for_override_or_append) {
$a = $_GET; // default
if (!$a) {
$a = $ary_for_override_or_append;
} else {
foreach ($ary_for_override_or_append as $k => $v) {
$a[$k] = $v;
}
}
return $a;
}
function getCourseCalendarHtmlFromGoogleSpreadsheet($url) {
$gid = explode('&gid=', $url)[1];
$doc = explode('/', $url)[5];
$cache = '';
$fn = __DIR__ . '/cache4calendar/' . $doc . '```' . $gid . '.cache';
$s = 'no content...';
if (file_exists($fn)) {
$s = file_get_contents($fn);
}
/*if(strpos($s, 'C.S')===false or strpos($s,'C.L')===false){
$s = getHtml($url);
}*/
return $s;
}
function getHtml($url, $post = null) {
if (isset($GLOBALS[$url])) {
# echo'from memory--'.strlen($GLOBALS[$url]).'--'.$url.'
';
return $GLOBALS[$url];
}
# start to try to use db cache value
$WP_OPTION_KEY_BEFORE_MD5 = 'getHtml::' . $url;
$WP_OPTION_KEY = md5($WP_OPTION_KEY_BEFORE_MD5);
$DATE_FORMAT = 'Y-m-d H:i:s';
$opt_val = get_option($WP_OPTION_KEY);
if ($opt_val) {
$create_time = substr($opt_val, 0, strpos($opt_val, '@'));
$now = date($DATE_FORMAT);
$interval = get_dates_diff($create_time, $now);
if ($interval->y === 0 && $interval->m === 0 && $interval->d === 0 && $interval->h === 0 && $interval->i < 1) {
$val = substr($opt_val, strpos($opt_val, '@') + 1);
# echo'from db--'.strlen($val).'--'.$url.'
';
$GLOBALS[$url] = $val;
return $val;
}
}
# realtime get
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
if (!empty($post)) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
$result = curl_exec($ch);
curl_close($ch);
#
// echo'insert memory for '.$url.'--'.strlen($result).'--'.$WP_OPTION_KEY.'--'.$WP_OPTION_KEY.'_before_md5';
$GLOBALS[$url] = $result;
update_option($WP_OPTION_KEY, date($DATE_FORMAT) . '@' . $result);
update_option($WP_OPTION_KEY . '_before_md5', $WP_OPTION_KEY_BEFORE_MD5);
return $result;
}
#######
define('LECTURER_NAME', 'lecturer');
define('LECTURER_URI_PREFIX', '/' . LECTURER_NAME . '/');
if (strpos($_SERVER['REQUEST_URI'], LECTURER_URI_PREFIX) === 0 and strlen($_SERVER['REQUEST_URI']) > strlen(LECTURER_URI_PREFIX)) {
$a = explode('/', $_SERVER['REQUEST_URI']);
$html = getHtml('https://' . LIVE_DOMAIN . WEB_URL . $a[2] . '/?nc');
die($html
. '' #debug mark
);
}
/**
* WordPress 基本設定檔。
*
* 本檔案包含以下設定選項: MySQL 設定、資料表前綴、
* 私密金鑰、WordPress 語言設定以及 ABSPATH。如需更多資訊,請
* 前往 {@link http://codex.wordpress.org/Editing_wp-config.php 編輯
* wp-config.php} Codex 頁面。或者向您的空間提供商諮詢關於 MySQL 設定資訊。
*
* 這個檔案用於安裝程式自動生成 wp-config.php 設定檔。
* 您不需要將它用於您的網站,可以手動複製這個檔案,
* 並重新命名為 "wp-config.php",然後輸入相關訊息。
*
* @package WordPress
*/
define('ROOT_PATH', dirname(__FILE__) . '/');
$DB_USER_PWD_FILE = ROOT_PATH . 'db_user_pwd.php';
if (!file_exists($DB_USER_PWD_FILE) or (isset($db_user) and !$db_user) or (isset($db_pwd) and !$db_pwd) or (isset($db_name) and !$db_name)) {
// ** MySQL 設定 - 您可以從主機服務提供商獲取相關資訊。 ** //
/** WordPress 的資料庫名稱,請更改 "database_name_here" */
define('DB_NAME', 'class_aiacademy_tw');
/** MySQL 資料庫使用者名稱,請更改 "username_here" */
define('DB_USER', 'root');
/** MySQL 資料庫密碼,請更改 "password_here" */
define('DB_PASSWORD', 'swC651121!#');
} else {
require_once $DB_USER_PWD_FILE;
define('DB_NAME', $db_name);
/** MySQL database username */
define('DB_USER', $db_user);
/** MySQL database password */
define('DB_PASSWORD', $db_pwd);
}
/** MySQL 主機位址 */
define('DB_HOST', 'mysql8');
/** 建立資料表時預設的文字編碼 */
define('DB_CHARSET', 'utf8mb4');
/** 資料庫對照型態。如果不確定請勿更改。 */
define('DB_COLLATE', 'utf8_unicode_ci');
/**#@+
* 認證唯一金鑰設定。
*
* 將這些更改為不同的唯一字串或符號。
* 您可以使用 {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org 私密金鑰服務} 來自動產生。
* 您可於任何時候修改這些字串讓 Cookies 失效。這將會強制所有使用者必須重新登入。
*
* @since 2.6.0
*/
/*
define('AUTH_KEY', 'A%+E/S1/]p%(#tAX!mm$Nmx?; dFq|7XZ)B@nl=80b4lx$g$5n_|{CroI*u*O+jd');
define('SECURE_AUTH_KEY', 'vFTqk2t$8@q*gyfbjP&V)^j1S}&bP,_(yiO6o^y`bDOQ4Vl)yHDMR;qn[ l.PTIH');
define('LOGGED_IN_KEY', 'O]Q ud l`^&-0)tQQvDD1]JR/V=FtUXr) y5?:a;ohBb6V^Q!4 [kk`eK(ez!Bj5');
define('NONCE_KEY', 'u.(ihOLvw!yog=}5MqQ`zk6$PqAPj|r`trIpYgyXpx_m~!1:;bQE(B1vMjb9Wez$');
define('AUTH_SALT', '$,?rk8vm1GN5SA`M&anLDw8vi=yCTr-,XSvoP+5~)&0GXk9LlMIq{r=ivWI_t/>_');
define('SECURE_AUTH_SALT', 'GpOjf|!0nnjN{8PF[bl@}-x#0QqBh2cfdhq)(j9K<*vXb[@?_.(z WDd2GJr!z0m');
define('LOGGED_IN_SALT', '(CGLK!-Q7?YggmYnGC&_0`t#TArVdg[Te7`@X56m3gg2.JRPjYi8SEO_w[');
define('NONCE_SALT', '~@&qrSG;8v._YnyqScHVuHTq!DOPojPFSwnceZ?j53$f3X]h[bYCc*:>ObAF m)nn1UO`D3@*{Eq1_@!Hw>W2Tq');
define('LOGGED_IN_KEY', 'HmG&btcn;,-xCi-vYTM@ajiekgJv?,/#}.A<[kw9*b&,||>:Y{O=-7o,[Yd$Y`1Q');
define('NONCE_KEY', 'sW1parent);
return $video_cat_area_code;
}
function get_video_cat_joinno($cat_id = 0) {
$cat_id = $cat_id ? $cat_id : get_query_var('cat') + 0;
$cur_cat = get_category($cat_id);
$tmp = explode('-', $cur_cat->slug);
return $tmp[count($tmp) - 1];
}
define('HOME_PAGE_ID', 4);
function d() {
}
function dd() {
}
function is_facebook_bot() {
return isset($_SERVER['HTTP_USER_AGENT']) && strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'facebook') !== false;
}
function is_twitter_bot() {
return isset($_SERVER['HTTP_USER_AGENT']) && strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'twitter') !== false;
}
function is_google_bot() {
return isset($_SERVER['HTTP_USER_AGENT']) && strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'google') !== false;
}
function is_bot() {
$b = isset($_SERVER['HTTP_USER_AGENT']) && (
strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'bot') !== false
|| is_google_bot()
|| is_facebook_bot()
|| is_twitter_bot()
);
return $b;
}
function need_og_tags() {
return is_facebook_bot() || is_twitter_bot(); # https://dev.twitter.com/cards/getting-started#crawling
}
function need_twitter_card_tags() {
return is_twitter_bot();
}
function my_safe_html($s, $ary_allow = array()) {
foreach ($ary_allow as $k => $v) {
$s = str_replace($k, $v, $s);
}
$s = htmlspecialchars($s);
foreach ($ary_allow as $k => $v) {
$s = str_replace($v, $k, $s);
}
return $s;
}
function safe_db_value($s) {
return str_replace(array('=', '--', ';', '"', "'"), '', $s);
}
function str_replace_first($from, $to, $content) { # https://stackoverflow.com/questions/1252693/using-str-replace-so-that-it-only-acts-on-the-first-match
$from = '/' . preg_quote($from, '/') . '/';
return preg_replace($from, $to, $content, 1);
}
function auto_add_target_blank($content) {
preg_match_all('/]+>/i', $content, $m);
foreach ($m as $k => $v) {
foreach ($v as $k2 => $v2) {
#echo $k.'--'.$k2.'--'. htmlspecialchars($v2);
if (strpos($v2, ' href="http') !== false and strpos($v2, $_SERVER['SERVER_NAME']) === false and strpos($v2, 'target="_blank"') === false) {
$content = str_replace($v2, substr($v2, 0, strlen($v2) - 1) . ' target="_blank">', $content);
}
}
}
return $content;
}
function imgsrc_rm_domain($imgsrc) {
$b = false;
$a = array($_SERVER['SERVER_NAME'], LIVE_DOMAIN, LIVE_DOMAIN_WITH_WWW);
$a = array_unique($a);
foreach ($a as $domain) {
if (strpos($imgsrc, $domain) !== false) {
$b = $domain;
break;
}
}
if ($b) {
list($tmp, $imgsrc) = explode($b, $imgsrc);
}
return $imgsrc;
}
function get_attribute_value_in_one_tag($tag_html, $attr = 'src') {
preg_match('/ ' . $attr . '=".+?"/i', $tag_html, $m);
return str_replace(array(' ' . $attr . '="', '"'), '', $m[0]);
}
function get_all_imgsrc($html) {
preg_match_all('/ src=".*?"/', $html, $m);
$ret = array();
if ($m) {
foreach ($m[0] as $v) {
$v = str_replace(' src=', '', $v);
$v = substr($v, 1);
$v = substr($v, 0, strlen($v) - 1);
$ret[] = $v;
}
}
return $ret;
}
function display_img($imgsrc, $attr = '', $need_lazy_loading = true) {
if ($attr and strpos($attr, ' ') !== 0) {
$attr = ' ' . $attr;
}
$img = '
';
if (!$need_lazy_loading) {
return $img;
}
return ''
. implode(' data-original=', explode(' src=', $img, 2)) #https://stackoverflow.com/questions/1252693/
;
}
function get_featured_imgsrc($post_id, $ary_size_conf = array(320, 320)) {
$imgsrc = '';
$html_thumb = get_the_post_thumbnail($post_id, $ary_size_conf);
$thumb = preg_match('/ src=".*?"/', $html_thumb, $m);
if (isset($m[0]) && $m[0] != '') {
$imgsrc = str_replace(array('"', " src="), '', $m[0]);
}
return $imgsrc;
}
$ary_frontend_modules_config = array(
// https://github.com/kazzkiq/balloon.css/blob/master/balloon.css
// 'balloon'=>array('CSS'=>$IS_PC ? array(CSS_URL.'balloon.css') : array()) // using Javascript dynamic loading
/*
*/
'bootstrap' => array(
'CSS' => array(BOOTSTRAP_URL . 'css/bootstrap.min.css', BOOTSTRAP_URL . 'css/bootstrap-theme.min.css'),
'JS' => array(BOOTSTRAP_URL . 'js/bootstrap.min.js')
),
'bootstrap_daterangepicker' => array(
'CSS' => array(
BS_DATERANGEPICKER_URL . 'daterangepicker.css'
),
'JS' => array(
BS_DATERANGEPICKER_URL . 'moment.min.js',
BS_DATERANGEPICKER_URL . 'daterangepicker.js',
//
// 'https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js', // lt IE9
// 'https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js', // lt IE9
)
),
'base' => array('CSS' => array(CSS_URL . 'base.css' . FE_VER)),
'lazyload' => array('JS' => array(JS_URL . 'lazyload.js')),
'banner' => array('CSS' => array(CSS_URL . 'banner.css'), 'JS' => array(JS_URL . 'banner.js')),
'fonts' => array('CSS' => array(CSS_URL . 'fonts.css')),
'animations' => array('CSS' => array(CSS_URL . 'animations.css')),
);
array_unshift(
$ary_frontend_modules_config['bootstrap_daterangepicker']['CSS'],
$ary_frontend_modules_config['bootstrap']['CSS'][0],
$ary_frontend_modules_config['bootstrap']['CSS'][1]
);
array_unshift(
$ary_frontend_modules_config['bootstrap_daterangepicker']['JS'],
$ary_frontend_modules_config['bootstrap']['JS'][0]
);
function get_frontend_by_page_id($page_id, $type) {
$ary_conf = array(
'439' => array('CSS' => CSS_URL . 'articles-of-association.css', 'JS' => JS_URL . 'articles-of-association.js')
);
$ret = '';
if (isset($ary_conf[$page_id]) and isset($ary_conf[$page_id][$type]) and $ary_conf[$page_id][$type]) {
$asset = $ary_conf[$page_id][$type];
if ($type == 'JS') {
$ret .= '';
} else {
$ret .= '';
}
}
return $ret;
}
function collect_frontend_assets($ary_frontend_modules) {
global $ary_frontend_modules_config;
$ary_CSS = $ary_JS = array();
foreach ($ary_frontend_modules as $module) {
$assets = $ary_frontend_modules_config[$module];
foreach (array('JS', 'CSS') as $type) {
// if(!is_array($assets[$type])){var_dump($assets[$type]);continue;}
if (!isset($assets[$type]) or !is_array($assets[$type])) {
continue;
}
foreach ($assets[$type] as $url) {
if (!in_array($url, ${'ary_' . $type})) {
array_push(${'ary_' . $type}, $url);
}
}
}
}
return array('CSS' => $ary_CSS, 'JS' => $ary_JS);
}
function get_css_js_assets_handle($css_js_relative_url) {
if (strpos($css_js_relative_url, '?') !== false) {
list($css_js_relative_url, $_) = explode('?', $css_js_relative_url);
}
$css_js_relative_url = str_replace('/', '-', $css_js_relative_url);
$css_js_relative_url = str_replace('.', '_', $css_js_relative_url);
$handle = 'ZZZ' . $css_js_relative_url;
return $handle;
}
function load_css_assets($ary_css, $launch_css_path = '') {
if (!is_array($ary_css)) {
var_dump($ary_css);
return;
}
if ($launch_css_path) {
array_push($ary_css, $launch_css_path);
}
foreach ($ary_css as $v) {
if ($v) {
// echo'';
wp_enqueue_style(get_css_js_assets_handle($v), $v);
}
}
}
function load_js_assets($ary_js, $launch_js_path = '') {
if (!is_array($ary_js)) {
var_dump($ary_js);
return;
}
if ($launch_js_path) {
array_push($ary_js, $launch_js_path);
}
foreach ($ary_js as $v) {
if ($v) {
// echo'';
wp_enqueue_script(get_css_js_assets_handle($v), $v);
}
}
}
function get_customize_field_post_meta($post_id, $is_force_convert_to_string) {
$a = get_post_meta($post_id);
$ret = array();
foreach ($a as $k => $v) {
if (substr($k, 0, 1) === '_') {
continue;
}
if ($is_force_convert_to_string) {
$ret[$k] = is_array($v) && count($v) > 0 ? $v[0] : '';
} else {
$ret[$k] = $v;
}
}
return $ret;
}
function get_uri_without_querystring() {
$uri = $_SERVER['REQUEST_URI'];
if (strpos($uri, '?') !== false) {
list($uri,) = explode('?', $uri);
}
return $uri;
}
function get_sql_limit($page, $pagesize) {
if ($page == 1) {
return ' LIMIT ' . $pagesize;
}
return ' LIMIT ' . (($page - 1) * $pagesize) . ', ' . $pagesize;
}
function display_date($date, $find = '-', $to = '/') {
$s = str_replace($find, $to, $date);
return $s;
}
function convert_num2day($num) {
$a = array('?', '一', '二', '三', '四', '五', '六', '日');
return isset($a[$num]) ? $a[$num] : '---';
}
function get_video_title($post, $video_cat_area_code, $video_cat_joinno) {
$debug = isset($_GET['deb']);
$title_prefix = '';
$s = get_post_meta($post->ID, 'limit_at_join_no_and_place', true);
if ($s) {
$a = explode(',', $s);
foreach ($a as $_) {
list($course_date, $area_code, $join_no) = explode('-', $_);
if (
$area_code == $video_cat_area_code /*lowercase*/
and $join_no == $video_cat_joinno
) {
$title_prefix = $course_date; # for student
break;
}
}
if ($title_prefix == '') { ## for /wp-admin/
if ($debug) {
$title_prefix = $s;
} else {
$title_prefix = explode('-', $a[0]);
$title_prefix = $title_prefix[0];
}
}
}
return ($title_prefix ? $title_prefix . ' ' : '') . $post->post_title . ($debug ? 'debug=' . $video_cat_area_code : '');
}
function bread($uri) {
$ret = ' 首頁';
if (is_category()) {
$cat_id = get_query_var('cat') + 0;
$ret .= '' . get_cat_name($cat_id) . '';
} elseif (is_single()) {
global $post;
$cats = get_the_category();
$IS_LECTURER_CAT = $IS_VIDEO_CAT = false;
$v = $cats[0];
if ($v->cat_ID == LECTURER_CAT_ID) {
$IS_LECTURER_CAT = true;
}
if ($IS_LECTURER_CAT) {
$ret .= '全部師資';
} elseif ($IS_VIDEO_CAT) {
$ary_video_cats_parent = array();
$ary_video_cats_parent[TAIPEI_AREA_CODE] = TP_TECH_VIDEO_CAT_ID;
$ary_video_cats_parent[HSINCHU_AREA_CODE] = HC_TECH_VIDEO_CAT_ID;
$ary_video_cats_parent[TAICHUNG_AREA_CODE] = TC_TECH_VIDEO_CAT_ID;
$ary_video_cats_parent[SOUTH_AREA_CODE] = ST_TECH_VIDEO_CAT_ID;
foreach ($cats as $c) {
if (in_array($c->parent, $ary_video_cats_parent)) {
$IS_VIDEO_CAT = true;
}
$tmp = explode('-', $c->slug);
if (
$c->parent === $ary_video_cats_parent[$video_cat_area_code]
and $tmp[count($tmp) - 1] == $video_cat_joinno
) {
$v = $c;
}
}
$ret .= '' . $v->cat_name . '';
}
if ($IS_VIDEO_CAT) {
$post_title = get_video_title($post, $video_cat_area_code, $video_cat_joinno);
} else {
$post_title = $post->post_title;
}
$ret .= '' . $post_title . '';
} else { // start not-single
$define_names = get_post_meta(HOME_PAGE_ID, 'bread_names_by_nodejs_crontab', true);
if (!$define_names) { # avoid nodejs/crontab disable
$define_names = get_post_meta(HOME_PAGE_ID, 'bread_names', true);
}
$define_names = explode("\n", $define_names);
$ary_define_names = array();
foreach ($define_names as $v) {
$_ = explode('=', $v);
$ary_define_names[$_[0]] = $_[1];
}
$paths = get_post_meta(HOME_PAGE_ID, 'bread_paths_by_nodejs_crontab', true);
if (!$paths) { # avoid nodejs/crontab disable
$paths = get_post_meta(HOME_PAGE_ID, 'bread_paths', true);
}
$ary_paths = explode("\n", $paths);
#
$slug = '';
foreach (explode('/', $uri) as $v) {
if ($v) {
$slug = $v;
} #get the last one post_name
}
$slug = str_replace("\r", '', $slug);
#
foreach ($ary_paths as $v) {
if (strlen($v) <= 1) {
continue;
}
$_ = explode('<', $v);
$_0 = str_replace("\r", '', $_[0]);
#if(isset($_GET['ee'])){echo$slug.'--'.$_0;var_dump($slug==$_0);echo'
';}
if ($slug == $_0) {
$count_ = count($_);
for ($i = $count_ - 1; $i > 0; $i--) {
$href = str_replace("\r", '', $_[$i]);
$ret .= '' . $ary_define_names[$href] . '';
}
$ret .= '' . $ary_define_names[$slug] . '';
break;
}
}
} //end not-single
return '' . $ret . '
';
}
define('TBL_EXAM', 'exam'); # might rename to exam_answer
define('TBL_EXAM_SCORE', 'exam_score'); # might rename to exam_answer_score
define('TBL_AM_I_STUDENT', 'am_i_student');
define('TBL_SUBSCRIBE', $table_prefix . '_subscribe');
define('TBL_SUBSCRI_HISTORY', $table_prefix . '_subscri_history');
/* 設定完成,請儲存檔案。然後開始 Blogging 吧! */
// error_reporting(E_ALL);
// ini_set('display_errors', 1);
/** WordPress 目錄的絕對路徑。 */
if (!defined('ABSPATH'))
define('ABSPATH', dirname(__FILE__) . '/');
define('MMR_CACHE_DIR', ABSPATH . 'fe'); # front-end
define('MMR_CACHE_URL', '/fe');
define('COMPETITION201803_OPEN_DATETIME', '2018-04-02 13:00');
define('TBL_COMPETITION_UPLOAD', 'competition_upload');
define('TBL_COMPETITION_TEAM', 'competition_team');
define('TBL_COMPETITION_MEMBER', 'competition_member');
define('COMPETITION_MAX_UPLOAD_TIMES', 25);
define('COMPETITION_DATA_FILEPATH', ABSPATH . '/competition_data/201803ans.csv'); #official
define('COMPETITION_TEAM_DATA_FILEPATH', ABSPATH . '/competition_data/team/'); #team
define('COMPETITION_TEAM_DATA_URI', WEB_URL . 'competition_data/team/');
function get_competition_team_members($team_id = '') {
global $wpdb;
$where = $team_id ? ' AND team_id=' . $team_id : '';
$ret = $wpdb->get_results('SELECT * FROM ' . TBL_COMPETITION_MEMBER . ' INNER JOIN ' . TBL_COMPETITION_TEAM . ' USING(team_id) WHERE 1 ' . $where);
return $ret;
}
function get_competition_team_name($school_no, $key = '') {
global $wpdb;
$where = ' AND school_no="' . $school_no . '"';
$ret = $wpdb->get_row('SELECT * FROM ' . TBL_COMPETITION_MEMBER . ' INNER JOIN ' . TBL_COMPETITION_TEAM . ' USING(team_id) WHERE 1' . $where);
if (!$key) {
return $ret;
} elseif ($key == 'team_id') {
return $ret->team_id;
} elseif ($key == 'team_name') {
return $ret->team_name;
}
}
if (0 and isset($_GET['amp'])) {
die('
Hello, AMP world.
');
}
//check cache START
function get_keycloak_login_cache_cookie_value($string_keycloak_user) {
return md5('academy---' . $string_keycloak_user . '---AI');
}
function get_keycloak_login_cache_row($cookie_value) {
global $wpdb;
$sql = 'SELECT * FROM ' . TBL_KEYCLOAK_LOGIN_CACHE . ' WHERE cookie_value="' . $cookie_value . '" AND create_datetime>=((NOW() - INTERVAL 30 DAY))';
$row = $wpdb->get_row($sql);
return $row;
}
function get_keycloak_user_by_session_or_cache() {
#var_dump($_SESSION['keycloak_user']); echo'
'; var_dump($_COOKIE[KEYCLOAK_COOKIE_KEY]);
// Session
if (isset($_SESSION['keycloak_user']) and $_SESSION['keycloak_user']) {
// die(unserialize($_SESSION['keycloak_user']));
$data_unserialize = unserialize($_SESSION['keycloak_user']);
// return unserialize($_SESSION['keycloak_user']);
if ($_SERVER['REMOTE_ADDR'] == '61.222.27.93') {
// print_r($data_unserialize);
// die("###end###");
}
return $data_unserialize;
}
// Cookie
if (isset($_COOKIE[KEYCLOAK_COOKIE_KEY]) and $_COOKIE[KEYCLOAK_COOKIE_KEY]) {
$cookie_value = $_COOKIE[KEYCLOAK_COOKIE_KEY];
$row = get_keycloak_login_cache_row($cookie_value);
if ($row and $row->keycloak_user) {
return unserialize(base64_decode($row->keycloak_user));
}
}
return null;
}
// // Save user into DB
// $ALSO_UPDATE_CACHEandDB_START_TIME = false; // unknow 100% Spec/Goal. Set `false` for current.
// $cookie_value=null;
// if(isset($_SESSION['keycloak_user']) and $_SESSION['keycloak_user']){ // from session
// $cookie_value = get_keycloak_login_cache_cookie_value($_SESSION['keycloak_user']);
// }elseif($ALSO_UPDATE_CACHEandDB_START_TIME){ // from cache
// $_keycloak_user_from_cache = serialize(get_keycloak_login_cache_row());
// if($_keycloak_user_from_cache){
// $cookie_value = get_keycloak_login_cache_cookie_value($_keycloak_user_from_cache);
// }
// }
// $bool = ((isset($_SESSION['keycloak_user']) and $_SESSION['keycloak_user']) # <--- means ONLY ADD/UPDATE while just loginned
// or $ALSO_UPDATE_CACHEandDB_START_TIME);
// #var_dump($bool);var_dump($cookie_value);
// if($bool){
// setcookie(KEYCLOAK_COOKIE_KEY, $cookie_value, time()+2678400); // 1 month
// $_keycloak_user = serialize(get_keycloak_user_by_session_or_cache());
// #var_dump($_keycloak_user); #var_dump($cookie_value);
// $row = get_keycloak_login_cache_row($cookie_value);
// if($row){
// $wpdb->update(TBL_KEYCLOAK_LOGIN_CACHE,
// array('create_datetime'=>shell_exec("date '+%Y-%m-%d %H:%M:%S'"), 'keycloak_user'=>base64_encode($_keycloak_user)),
// array('cookie_value'=>$cookie_value));
// }else{
// $wpdb->insert(TBL_KEYCLOAK_LOGIN_CACHE, array(
// 'cookie_value'=>$cookie_value,
// 'create_datetime'=>shell_exec("date '+%Y-%m-%d %H:%M:%S'"),
// 'keycloak_user'=>base64_encode($_keycloak_user),
// ));
// }
// }
// $uri = $_SERVER['REQUEST_URI'];
// $uri_without_querystring = explode('?',$uri)[0];
// $is_whitelist_no_need_student_login = false;
// $ary_bypass_uri = array(
// '/stedglogin',
// '/enter_logs',
// '/wp-admin',
// '/wp-login.php',
// '/tools/vimeo/',
// '/staff/',
// STUDENT_MGR_URL,
// '/exam/',
// '/notification/',
// '/vote/',
// '/aigc2023-ddmc',
// '/wp-content/themes/bridge/css/custom_css.php',
// '/wp-content/themes/bridge/css/style_dynamic.php',
// '/wp-content/themes/bridge/css/style_dynamic_responsive.php',
// '/wp-content/themes/bridge/js/default_dynamic.php',
// HR_WEB_URL
// );
// $ary_bypass_uri[] = '/student';
// $ary_bypass_uri[] = '/api/v2';
// $ary_bypass_uri[] = '/api';
// foreach($ary_bypass_uri as$uri){
// if(strpos($uri_without_querystring, $uri)===0){$is_whitelist_no_need_student_login=true;break;}
// }
// if($is_whitelist_no_need_student_login || $uri_without_querystring==='' || $uri_without_querystring==='/'
// || (isset($_GET['door_key']) && $_GET['door_key']==='sadfoiweuSLKJKLIOSFewS12148978090232lajslf')
// ){
// //do nothing
// }else{
// if(!can_view_content()){
// $KEYCLOAK_USER = get_keycloak_user_by_session_or_cache();
// # mgr can access class now.
// #if(is_mgr_student($KEYCLOAK_USER)){
// # header('location:http://video.aiacademy.tw/?cannot_access_class');
// # exit;
// #}
// die('');
// #die('');
// }
// }
$need_login_data = preg_match(AIA_CALENDAR_URL_PATTERN, $_SERVER['REQUEST_URI']) === 1;
foreach (array('/competition-upload', '/competition-upload-history', '/competition-result') as $v) {
if (strpos($_SERVER['REQUEST_URI'], $v) === 0) {
$need_login_data = true;
break;
}
}
# 20180327 START IBM Competition
// $u = wp_get_current_user();
// $user_login = ($u->user_login);
// if(in_array($user_login, array('fareastone','ibm')) and strpos($_SERVER['REQUEST_URI'], WEB_URL.'competition')!==0 and strpos($_SERVER['REQUEST_URI'], WEB_URL.'wp-admin')!==0 and $_SERVER['REQUEST_URI']!=='/' and strpos($_SERVER['REQUEST_URI'], '/wp-login.php')!==0){
// die('Not allow for this username.');
// }
# 20180327 END IBM Competition
#implement cache
$USE_CACHE = !isset($_GET['nc']); #nc means no_Vcache
if (
$USE_CACHE and !$need_login_data
and false # <-- because everypage need correct window.studentUserName
) {
define('VCACHE_FOLDER_NAME', 'Vcache-aiaaia');
$uri = $_SERVER['REQUEST_URI'];
$a = explode('?', $uri); #while development
$uri = $a[0];
if ($uri === '' || $uri === '/') {
$filename = 'DO-NOT-CACHE-AT-HOME'; #'index';
} else {
if (substr($uri, 0, 1) === '/') {
$uri = substr($uri, 1);
}
if (substr($uri, -1) === '/') {
$uri = substr($uri, 0, -1);
}
$filename = str_replace('/', '---', $uri);
}
$cache_file = __DIR__ . '/' . VCACHE_FOLDER_NAME . '/' . $filename;
if (file_exists($cache_file)) {
$html = file_get_contents($cache_file);
if ($html) {
die($html);
}
}
}
function get_string_by_tmpl($str_tmpl, $dict = array()) {
$ret = $str_tmpl;
foreach ($dict as $k => $v) {
$ret = str_replace('{{' . $k . '}}', $dict[$k], $ret);
}
$ret = preg_replace('/{{.*?}}/', '', $ret);
return $ret;
}
function _get_week_day($date, $is_display_chinese_number = true) {
$w = date('w', strtotime($date));
if ($is_display_chinese_number) {
$A = array('日', '一', '二', '三', '四', '五', '六');
return $A[$w];
}
return $w;
}
function post_request($url, $ary_data, $referer = '') { # http://www.jonasjohn.de/snippets/php/post-request.htm
// Convert the data array into URL Parameters like a=b&foo=bar etc.
$data = http_build_query($ary_data);
// parse the given URL
$url = parse_url($url);
if ($url['scheme'] != 'http') {
die('Error: Only HTTP request are supported !');
}
// extract host and path:
$host = $url['host'];
$path = $url['path'];
// open a socket connection on port 80 - timeout: 30 sec
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if ($fp) {
// send the request headers:
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
if ($referer != '')
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: " . strlen($data) . "\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);
$result = '';
while (!feof($fp)) {
// receive the results of the request
$result .= fgets($fp, 128);
}
} else {
return array(
'status' => 'err',
'error' => "$errstr ($errno)"
);
}
// close the socket connection:
fclose($fp);
// split the result header from the content
$result = explode("\r\n\r\n", $result, 2);
$header = isset($result[0]) ? $result[0] : '';
$content = isset($result[1]) ? $result[1] : '';
// return as structured array:
return array(
'status' => 'ok',
'header' => $header,
'content' => $content
);
}
/** 設定 WordPress 變數和包含的檔案。 */
require_once(ABSPATH . 'wp-settings.php');
// define('FS_METHOD', 'direct');
// define('WP_MEMORY_LIMIT', '256M');
// define('WP_MAX_MEMORY_LIMIT', '256M');
//set php debug by ini_set
// if (
// strpos($_SERVER['HTTP_HOST'], 'dev') !== false
// ) {
// ini_set('display_errors', 1);
// ini_set('display_startup_errors', 1);
// error_reporting(E_ALL);
// }
// require_once __DIR__ . '/../student/app/Helpers/get_laravel_auth_status.php';
// require_once $_SERVER['DOCUMENT_ROOT'] . '/../student/app/Helpers/get_laravel_auth_status.php';