toArray();
$school_no = isset($ARY_KEYCLOAK_USER['preferred_username']) ? $ARY_KEYCLOAK_USER['preferred_username'] : '';
$row = get_competition_team_name($school_no);
$team_name = $row ? $row->team_name : '';
$team_id = $row ? $row->team_id : '';
if($_FILES){
if(!$_FILES['myfile']){
die('請選擇要上傳的 csv 檔案。');
}
#$upload_count_today = $wpdb->get_var('SELECT COUNT(upload_id) FROM '.TBL_COMPETITION_UPLOAD. ' WHERE team_id='.$team_id.' AND create_datetime LIKE "'.now('Y-m-d ').'%"');
$sql = 'SELECT * FROM '.TBL_COMPETITION_UPLOAD. ' WHERE team_id='.$team_id;#.' AND create_datetime LIKE "'.now('Y-m-d ').'%"';
$upload_count_today = 0; $now_ = str_replace(array("\n","\r"),'',now('Y-m-d'));
foreach( $wpdb->get_results($sql) as$v){ if(strpos($v->create_datetime, $now_)===0){$upload_count_today++;} }
if($upload_count_today>=COMPETITION_MAX_UPLOAD_TIMES){
die('同一隊伍中,一天只能上傳 ' . COMPETITION_MAX_UPLOAD_TIMES . ' 次,請次日再上傳。回上頁');
}
$origin_filename = $_FILES['myfile']['name'];
$create_datetime = now('Y-m-d H:i:s');
$myfile_name = md5('201803competition_'.$origin_filename.'_competition201803' . $create_datetime);
$tmp_filename = $_FILES['myfile']['tmp_name'];
$is_valid_data_content = true;
if($tmp_filename and file_exists($tmp_filename)){
$tmp_content=file_get_contents($tmp_filename);
if(!$tmp_content){
echo 'error:666';
$is_valid_data_content = false;
}else{
$ary_upload_user_id = array();
$a = preg_split("/(\r\n|\n|\r)/",$tmp_content);
foreach($a as$row){
$v = explode(',',$row);
$v0 = $v[0];
$v1 = $v[1];#date
if($v0 and 1===preg_match('/^[0-9]+$/',$v0) and $v1=='2018-03-16'){
if(0===preg_match('/^[0-9\.]+$/',$v[2]) || count(explode('.',$v[2]))>2){die('y 欄位必須是數字: '.$row);}
$ary_upload_user_id[] = $v0+0;
}
}
#
sort($ary_upload_user_id);
#
if(!count($ary_upload_user_id)){
echo 'error:666';
$is_valid_data_content = false;
}else{
foreach($ary_upload_user_id as$k=>$v){
if($v!=$ary_user_ids_MUST[$k]){
echo 'error:555';
$is_valid_data_content = false;
break;
}
}
} // if-else
} // if-else
}
if(!$is_valid_data_content){die('資料有誤。請與官方資料比對 USER_ID 欄位,沒有缺一也沒有多一,並且 2018-03-16 共 '.count($ary_user_ids_MUST).' 筆。(不可使用 2018.03.16 2018/03/16 其它日期格式)');}
$target_filename = COMPETITION_TEAM_DATA_FILEPATH.$myfile_name . '.csv';
if(!move_uploaded_file($tmp_filename, $target_filename )){
//fail
die('上傳失敗,請聯絡 ta@aiacademy.tw'
#. $tmp_filename . ' to ' . $target_filename
);
$is_success = false;
}else{
//success
#step1: 50%publish 50%private
$a = preg_split("/(\r\n|\n|\r)/", file_get_contents(COMPETITION_DATA_FILEPATH));
$ary_official_data1 = array();
$ary_official_data2 = array();
foreach($a as$k=>$row){
$v = explode(',', $row);
if(0===preg_match('/^[0-9]+$/',$v[0])){continue;}
$key = $v[0].$v[1];
$val = $v[2];
if($k<=$HALF_of_ary_user_ids_MUST-1
+1 # because the first row is fields head, not data.
){
$ary_official_data1[$key] = $val; #key is {userid}{2018-03-16}; value is float
}else{
$ary_official_data2[$key] = $val; #key is {userid}{2018-03-16}; value is float
}
}
if(count($ary_official_data1)!=count($ary_official_data2)){
#echo count($ary_official_data1);echo'
'; echo count($ary_official_data2);echo'
';echo$HALF_of_ary_user_ids_MUST;
die('官方資料有誤,ERROR: 123。');
}
$a = preg_split("/(\r\n|\n|\r)/",$tmp_content);
$ary_upload_data1 = array();
$ary_upload_data2 = array();
foreach($a as$k=>$row){
$v = explode(',',$row);
if(0===preg_match('/^[0-9]+$/',$v[0])){continue;}
$key = $v[0].$v[1];
$key = $v[0].$v[1];
$val = $v[2];
if($k<=$HALF_of_ary_user_ids_MUST-1
+1 # because the first row is fields head, not data.
){
$ary_upload_data1[$key] = $val; #key is {userid}{date}; value is float
}else{
$ary_upload_data2[$key] = $val; #key is {userid}{date}; value is float
}
}
if(count($ary_upload_data1)!=count($ary_upload_data2)){
die('上傳的資料有誤,請確認第一行為欄位而非資料,請確認資料數共'.count($ary_user_ids_MUST).'筆,請確認共'.(count($ary_user_ids_MUST)+1).'行(含欄位),ERROR: 456。');
}
#step2: calculate publish score / private score
foreach(range(1,2)as$V){
$ary_official_data = ${'ary_official_data'.$V};
$ary_upload_data = ${'ary_upload_data'.$V};
$ary_diff_then_pow = array();
foreach($ary_upload_data as$idx=>$val){
$ary_diff_then_pow[] = pow($ary_upload_data[$idx] - $ary_official_data[$idx], 2);
}
$mean = array_sum($ary_diff_then_pow) / count($ary_diff_then_pow);
$score = pow($mean,0.5);
if($V==1){
$publish_score = $score;
}elseif($V==2){
$private_score = $score;
}
}
#step3: insert publish score / private score
$ary_insert = array(
'team_id'=>$team_id,
'team_name'=>$team_name,
'who_upload'=>$school_no,
'upload_original_filename'=>$origin_filename,
'upload_filepath'=>$myfile_name,
'publish_score'=>$publish_score,
'private_score'=>$private_score,
'create_datetime'=>$create_datetime);
$wpdb->insert(TBL_COMPETITION_UPLOAD, $ary_insert);
$is_success = true;
}
}
$can_upload_date = '2018.03.29 00:00';
$can_upload_date_end = '2018.03.31 17:00';
$now = now('Y.m.d H:i');
$can_upload = ($now>=$can_upload_date && $now<=$can_upload_date_end) || isset($_GET['chuan_test_upload']);
get_header(); ?>