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(); ?>

上傳成功!!

請先組隊,才可上傳資料。有問題請至 MatterMost 此頻道反應

Hi, 【】隊的, 歡迎上傳資料:

注意:
  • PS1: 第一row必須為【欄位】,同官方資料
  • PS2: 一個【隊伍】一天只能上傳
  • PS3: y 欄位必須為數值欄位
  • PS4: 必須含有 筆 user_id 2018-03-16 的筆數
  • PS5: 日期 2018-03-16 需緊連半型逗號【,】,不可有空白
  • 上傳範例: 201803example.csv (請用【文字編緝器】開啟,勿用【Excel】開啟)
  • 若遇上傳問題,請至 MatterMost 此頻道反應

請等待,系統將在 '.$can_upload_date . ' ~ '.$can_upload_date_end.' 開放上傳。(現在時間: '.now('Y.m.d H:i').')
';} ?> get_results($sql) as$v){ if(strpos($v->create_datetime, $now_)===0){$upload_count_today++;} } ?> 今日已上傳次數/同隊每日可上傳次數: /
'; echo now($f).'
'; }*/ ?>