ID, 'website', true));
return get_speaker_website($ret);
}
function get_speaker_website($website) {
$ret = trim($website ?? "");
$ret_upper = strtoupper($ret);
if (strpos($ret_upper, 'https://N/A') !== false || strpos($ret_upper, 'HTTPS://N/A') !== false || strpos($ret_upper, 'N/A') !== false) {
$ret = '';
}
return $ret;
/*$ret = trim($website);
if (stripos($ret,'https://N/A')===0 or stripos($ret,'N/A')===0) {
$ret = '';
}
return $ret;*/
}
function get_agenda_room($is_at_speaker_page = false) {
$a = array(
array('room' => '', 'building' => '國際會議廳'), //R0 - International Conference Hall
array('room' => '', 'building' => 'R1 - 1st Conference Room'),
array('room' => '', 'building' => 'R2 - 2nd Conference Room'),
array('room' => '', 'building' => 'R3 - 1st Conference Room
(學術活動中心 2 樓)'),
array('room' => '', 'building' => 'R4 - Flat Presentation Room
(學術活動中心 2 樓)'),
#array('', 'Online Track 3'),
#array('遠距會議室 R3', '人文社會科學館'),
##array('第一會議室 A1', '學術活動中心'),
);
if ($is_at_speaker_page) {
$ret = [];
foreach ($a as $v) {
$ret[] = $v['building'];
}
return $ret;
}
return $a;
}
function display_speaker_box($v, $conf = '', $imgsrc = '', $name = '', $talk_title = '') { // $v is $post
$speaker_id = get_speaker_id_by_post_name($v);
if ($conf === '') {
$conf = strtoupper($speaker->conf);
}
if ($imgsrc === '') {
$imgsrc = get_speaker_photo_imgsrc(
$speaker_id + 0
);
}
if ($name === '') {
$name = substr($v->post_title, 0, strpos($v->post_title, ' -'));
}
if (0 && $talk_title === '') {
$name = substr($v->post_title, 0, strpos($v->post_title, ' -'));
if ($name) {
$talk_title = trim(str_replace($name . ' -', '', $v->post_title));
}
}
$box = '
';
$box .= '
';
$box .= '
';
$box .= '
';
$box .= display_post_tags($v);
$post_content = $v->post_content;
if (strpos($post_content, 'N/A') === 0) {
$post_content = '';
}
$post_content = pangu($post_content);
$box .= '
' . $post_content . '
';
$box .= '
more ';
$box .= '
';
$box .= '
'; //.box
return $box;
}
function get_speaker_id_by_post_name($v) {
global $wpdb;
$speaker_id = strpos($v->post_name, 'speaker-') === 0 ? str_replace('speaker-', '', $v->post_name) : '';
if ($speaker_id === '') {
$tmp = $wpdb->get_row('SELECT * FROM ' . TBL_SPEAKERS . ' WHERE anchor="' . $v->post_name . '"');
$speaker_id = $tmp->id;
}
return $speaker_id;
}
function get_post_by_anchor($anchor) {
global $wpdb;
$post = $wpdb->get_row('SELECT * FROM ' . $wpdb->prefix . 'posts WHERE post_name="' . $anchor . '"');
return $post;
}
function display_talk_title($talk_title, $speaker = NULL) {
$ret = str_replace('’', "'", trim($talk_title ?? ""));
if ($speaker and $speaker->talk_lang) {
$lang = $speaker->talk_lang;
$ret = ('mandarin' === strtolower($lang) ? '🀄' : '🌐') . ' ' . $ret;
$can_playback = strtolower($speaker->can_playback);
$ret = ($can_playback === 'yes' ? '▶️ ' : ($can_playback ? '🛑 ' : '')) . $ret;
// If the speaker has not been decided, then do not show the title.
if (strpos($ret, "題目") !== false) {
$ret = "";
}
}
return $ret;
}
function _get_topic_speaker_title($title) {
$title_origin = $title;
$title_attrtitle = ' title="' . $title_origin . '"';
$title_style = array();
$title_split = mbStringToArray($title);
$title_wordcount = 0;
$need_truncate_title = count($title_split) >= 23;
$title = implode('', array_slice($title_split, 0, 23));
$title_style = $title_style ? ' style="' . implode(';', $title_style) . '"' : '';
if ($title != $title_origin) {
$title .= '...';
}
return array('title_attrtitle' => $title_attrtitle, 'title' => $title, 'title_style' => $title_style, 'title_origin' => $title_origin);
}
function get_speaker_img_filename_from_upload($speaker_id, $upload_file_name) {
$ext = explode('.', $upload_file_name);
$ext = $ext[count($ext) - 1];
$s = $speaker_id . '~datasci!CONF';
// echo"\n\ns=";echo$s;
$ret = md5($s);
$ret = substr($ret, 0, 8) . '.' . $ext;
// echo"\n\nret=";echo$ret;
return $ret;
}
function get_speaker_photo_imgsrc(
$speaker_id,
$ary_allow_photo_ext = array('png', 'jpg', 'jpeg', 'PNG', 'JPG', 'JPEG')
) {
$imgsrc = 'speaker.png'; //default
foreach ($ary_allow_photo_ext as $ext) {
$img_fn = get_speaker_img_filename_from_upload($speaker_id, '__.' . $ext);
if (file_exists(IMG_SPEAKER_DIR . $img_fn)) {
$imgsrc = $img_fn;
break;
}
}
$imgsrc = IMG_SPEAKER_URL . $imgsrc . (IS_DEV ? '?' . time() : '?' . date('md') . '13');
return $imgsrc;
}
function setup_speaker_data($wpdb, $type = 'TOPIC', $day = '') {
if ($type == 'TOPIC') {
$sql_exclude_special = ' AND id NOT IN (' . SPECIAL_SPEAKER_ID1 . ',' . SPECIAL_SPEAKER_ID2 . ',' . SPECIAL_SPEAKER_ID3 . ',' . SPECIAL_SPEAKER_ID4 . ') ';
$sql = 'SELECT * FROM ' . TBL_SPEAKERS . ' WHERE `hide`=0 AND `conf` NOT IN ("DSK", "AIK") ' . $sql_exclude_special . ' ORDER BY `sort`, `name2` ASC'; # need exclude keynote-speakers ids
} elseif ($type == 'KEYNOTE') {
$sql = 'SELECT * FROM ' . TBL_SPEAKERS . ' WHERE `hide`=0 AND `conf` IN ("DSK","AIK") ORDER BY CASE WHEN id=3 THEN 1 WHEN id=67 THEN 2 WHEN id=4 THEN 3 WHEN id=14 THEN 4 WHEN id=37 THEN 5 WHEN id=69 THEN 6 END;';
} elseif ($type == 'ALL') {
$day = strval($day);
$where_day_str = $day != "0" ? ' and `day`=' . $day : "";
$sql = 'SELECT speakers.* FROM ' . TBL_SPEAKERS . ' as speakers LEFT JOIN agenda ON agenda.speaker_id REGEXP concat("(^|\\\+)",speakers.id,"($|\\\+)") WHERE `hide`=0' . $where_day_str . ';'; //and `day`='.$day.'
} else { // SPECIAL
$sql = 'SELECT * FROM ' . TBL_SPEAKERS . ' WHERE `hide`=0 AND id IN (' . SPECIAL_SPEAKER_ID1 . ',' . SPECIAL_SPEAKER_ID2 . ',' . SPECIAL_SPEAKER_ID3 . ',' . SPECIAL_SPEAKER_ID4 . ') ORDER BY CASE WHEN id=' . SPECIAL_SPEAKER_ID1 . ' THEN 1 WHEN id=' . SPECIAL_SPEAKER_ID2 . ' THEN 2 WHEN id=' . SPECIAL_SPEAKER_ID3 . ' THEN 3 WHEN id=' . SPECIAL_SPEAKER_ID4 . ' THEN 5 END;';
}
$a = $wpdb->get_results($sql);
$ary_allow_photo_ext = array('png', 'PNG', 'jpg', 'JPG', 'jpeg', 'JPEG');
// echo $sql;
return array('ary_allow_photo_ext' => $ary_allow_photo_ext, 'a' => $a);
}
function mbStringToArray($string) { // http://php.net/manual/en/function.mb-split.php
$strlen = mb_strlen($string);
while ($strlen) {
$array[] = mb_substr($string, 0, 1, "UTF-8");
$string = mb_substr($string, 1, $strlen, "UTF-8");
$strlen = mb_strlen($string);
}
return $array;
}
function is_valid_link($link, $is_auto_add_http_to_check) {
if (strpos($link, '://N/A') !== false) {
return false;
}
$b = filter_var($link, FILTER_VALIDATE_URL);/*
|| filter_var($link, FILTER_FLAG_SCHEME_REQUIRED)
|| filter_var($link, FILTER_FLAG_HOST_REQUIRED)
|| filter_var($link, FILTER_FLAG_PATH_REQUIRED)
|| filter_var($link, FILTER_FLAG_QUERY_REQUIRED);*/
if (isset($_GET['testwebsite'])) {
var_dump($link);
var_dump($b);
}
if (!$b && $is_auto_add_http_to_check) {
$b = $b || filter_var('http://' . $link, FILTER_VALIDATE_URL);
}
return $b;
}
function get_browser_type() { //
https: //stackoverflow.com/questions/5302302/php-if-internet-explorer-6-7-8-or-9
$browser = '';
$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
if (preg_match('~(?:msie ?|trident.+?; ?rv: ?)(\d+)~', $ua, $matches)) $browser = 'ie' . $matches[1];
elseif (preg_match('~(safari|chrome|firefox)~', $ua, $matches)) $browser = $matches[1];
return $browser;
}
function isDomainAvailible($domain) { // https://css-tricks.com/snippets/php/check-if-website-is-available/
//check, if a valid url is provided
if (!filter_var($domain, FILTER_VALIDATE_URL)) {
return false;
}
//initialize curl
$curlInit = curl_init($domain);
curl_setopt($curlInit, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curlInit, CURLOPT_HEADER, true);
curl_setopt($curlInit, CURLOPT_NOBODY, true);
curl_setopt($curlInit, CURLOPT_RETURNTRANSFER, true);
//get answer
$response = curl_exec($curlInit);
curl_close($curlInit);
if ($response) return true;
return false;
}
function pangu($text) { // copy from https://github.com/Rakume/pangu.php/blob/master/pangu.php
$cjk = '' .
'\x{2e80}-\x{2eff}' .
'\x{2f00}-\x{2fdf}' .
'\x{3040}-\x{309f}' .
'\x{30a0}-\x{30ff}' .
'\x{3100}-\x{312f}' .
'\x{3200}-\x{32ff}' .
'\x{3400}-\x{4dbf}' .
'\x{4e00}-\x{9fff}' .
'\x{f900}-\x{faff}';
$patterns = array(
'cjk_quote' => array(
'([' . $cjk . '])(["\'])',
'$1 $2'
),
'quote_cjk' => array(
'(["\'])([' . $cjk . '])',
'$1 $2'
),
'fix_quote' => array(
'(["\']+)(\s*)(.+?)(\s*)(["\']+)',
'$1$3$5'
),
'cjk_hash' => array(
'([' . $cjk . '])(#(\S+))',
'$1 $2'
),
'hash_cjk' => array(
'((\S+)#)([' . $cjk . '])',
'$1 $3'
),
'cjk_operator_ans' => array(
'([' . $cjk . '])([A-Za-z0-9])([\+\-\*\/=&\\|<>])',
'$1 $2 $3'
),
'ans_operator_cjk' => array(
'([\+\-\*\/=&\\|<>])([A-Za-z0-9])([' . $cjk . '])',
'$1 $2 $3'
),
'bracket' => array(
array(
'([' . $cjk . '])([<\[\{\(]+(.*?)[>\]\}\)]+)([' . $cjk . '])',
'$1 $2 $4'
),
array(
'cjk_bracket' => array(
'([' . $cjk . '])([<>\[\]\{\}\(\)])',
'$1 $2'
),
'bracket_cjk' => array(
'([<>\[\]\{\}\(\)])([' . $cjk . '])',
'$1 $2'
)
)
),
'fix_bracket' => array(
'([<\[\{\(]+)(\s*)(.+?)(\s*)([>\]\}\)]+)',
'$1$3$5'
),
'cjk_ans' => array(
'([' . $cjk . '])([A-Za-z0-9`@&%\=\$\^\*\-\+\\/|\\\])',
'$1 $2'
),
'ans_cjk' => array(
'([A-Za-z0-9`~!%&=;\|\,\.\:\?\$\^\*\-\+\/\\\])([' . $cjk . '])',
'$1 $2'
)
);
foreach ($patterns as $key => $value) {
if ($key === 'bracket') {
$old = $text;
$new = preg_replace('/' . $value[0][0] . '/iu', $value[0][1], $text);
$text = $new;
if ($old === $new) {
foreach ($value[1] as $value) {
$text = preg_replace('/' . $value[0] . '/iu', $value[1], $text);
}
}
continue;
}
$text = preg_replace('/' . $value[0] . '/iu', $value[1], $text);
}
$text = str_replace("\\", '', $text);
preg_match_all('/http[.\/\-\:a-zA-Z0-9]+/', $text, $m);
if ($m and is_array($m)) {
foreach ($m as $mm) {
if ($mm and is_array($mm)) {
foreach ($mm as $v) {
$domain = explode('//', $v)[1];
if (strpos($domain, '/') !== false) {
$domain = explode('/', $domain)[0];
}
$text = str_replace($v, '[' . $domain . ' 連結]', $text);
}
}
}
}
return $text;
}
function get_manual_agenda_from_googlesheet() {
require_once 'google_apiclient/vendor/autoload.php';
$client = new Google_Client();
$client->setAuthConfig("/data/www/google_service_account_key__+-?e1/aia-courses-d87ec0f4cbdf.json");
$client->addScope(Google_Service_Sheets::SPREADSHEETS);
$service = new Google_Service_Sheets($client);
$spreadsheetId = '1lEcwlj1uIuxWLtfKY1xqcY3OTVMmbZZ864gNuwcP7Tk';
$range = '臨時_agenda!L2';
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$values = $response->getValues();
return $values;
}