トップ 大会組織一覧 ブロック・支部 ユーザー管理 EOF; }elseif($mode == "org"){ $icon = "icon-flag"; $name = $session['org_name']; $submenu = <<< EOF EOF; }elseif($mode == "print"){ $icon = "icon-print"; $name = $session['name']; $submenu = <<< EOF EOF; }else{ $icon = "flaticon-team"; $name = $session['team_name']; $submenu = <<< EOF EOF; } if($title){ $page_title = $title." - ".$site_title; }else{ $page_title = $site_title; } $header = <<< EOF {$page_title} {$script} EOF; header("Content-Type: text/html; charset=utf-8"); echo $header; } //ログイン画面用ヘッダー出力 function disp_login_header($title = "", $script = ""){ $session = sessionCheck(); if($session){ $redirect_url = HOME_URL; header('Location: ' . $redirect_url); exit; } $home_url = BASE_URL; $site_title = SITE_TITLE; $mode = MAIN_DIR; $type = SUB_DIR; $site_title = PAGE_TITLE; if($title){ $page_title = $title." - ".$site_title; }else{ $page_title = $site_title; } $header = <<< EOF {$page_title} {$script} EOF; header("Content-Type: text/html; charset=utf-8"); echo $header; } //フッター出力 function disp_footer(){ session_start(); $error_msg = ""; $error_script = ""; $success_msg = ""; $success_script = ""; if(isset($_SESSION[SESSION_NAME]['ERRORMSG'])){ $error = $_SESSION[SESSION_NAME]['ERRORMSG']; foreach($error as $text){ $error_msg .= ''; } unset($_SESSION[SESSION_NAME]['ERRORMSG']); $error_script = <<< EOF EOF; } if(isset($_SESSION[SESSION_NAME]['SUCCESSMSG'])){ $success = $_SESSION[SESSION_NAME]['SUCCESSMSG']; foreach($success as $text){ $success_msg .= ''; } unset($_SESSION[SESSION_NAME]['SUCCESSMSG']); $success_script = <<< EOF EOF; } $year = date("Y"); $footer = <<< EOF {$error_script} {$success_script} EOF; echo $footer; } //ページング生成 function output_paging($page, $page_size, $total_page, $total_count, $params = array()){ $param = ""; if($params){ unset($params['page']); $param = "&".http_build_query($params); $param = rtrim($param, "&"); } print( ''); } function &get_crypt_blowfish(){ static $singleton; if(empty($singleton)){ include_once(dirname(__FILE__) . '/Crypt/Blowfish.php'); $singleton = new Crypt_Blowfish(ENCRYPT_KEY); } return $singleton; } /** * 可逆的な暗号化をする * * @param string $str 平文 * @return string 暗号文 */ function t_encrypt($str){ if(!$str) return ''; $bf =& get_crypt_blowfish(); $str = $bf->encrypt($str); //base64 $str = base64_encode($str); return $str; } /** * 可逆的な暗号を復号化する * * @param string $str 暗号文 * @return string 平文 */ function t_decrypt($str){ if(!$str) return ''; //base64 $str = base64_decode($str); $bf =& get_crypt_blowfish(); return rtrim($bf->decrypt($str)); } //セッションチェック function sessionCheck(){ $COOKIE_NAME = COOKIE_NAME; if(isset($_COOKIE[$COOKIE_NAME])){ if($COOKIE_NAME == BASE_SESSION_NAME."_COOKIE_TEAM"){ list($id, $pw, $org) = explode(",", $_COOKIE[$COOKIE_NAME]); }else{ list($id, $pw) = explode(",", $_COOKIE[$COOKIE_NAME]); } $id = t_decrypt($id); if(!$id && !$pw){ return false; } }else{ return false; } if($COOKIE_NAME == BASE_SESSION_NAME."_COOKIE_ORG"){ if($id && $pw){ $ret = get_organizer4login($id, $pw); if($ret){ return $ret; }else{ return false; } } }elseif($COOKIE_NAME == BASE_SESSION_NAME."_COOKIE_TEAM"){ if($id && $pw){ $ret = get_team4login($id, $pw, $org); if($ret){ return $ret; }else{ return false; } } }else{ if($id && $pw){ $ret = get_user4login($id, $pw); if($ret){ if(MAIN_DIR == "admin"){ if($ret['admin_flag']){ return $ret; }else{ return false; } }else{ return $ret; } }else{ return false; } } } if(isset($_SESSION[SESSION_NAME])){ return $_SESSION[SESSION_NAME]; }else{ return false; } } //エラーメッセージ表示 function err_msg_disp($err_msg = ""){ echo '
'; if($err_msg && is_array($err_msg)){ foreach($err_msg as $value){ echo "".rawurldecode($value)."
"; } }elseif($err_msg){ echo "".rawurldecode($err_msg)."
"; }else{ echo ""; } echo '
'; return true; } //メッセージ表示 function msg_disp($msg = ""){ echo '
'; if($msg && is_array($msg)){ foreach($msg as $value){ echo "".rawurldecode($value)."
"; } }elseif($msg){ echo "".rawurldecode($msg)."
"; }else{ echo ""; } echo '
'; return true; } function raw_json_encode($input){ return preg_replace_callback( '/\\\\u([0-9a-zA-Z]{4})/', function ($matches){ return mb_convert_encoding(pack('H*',$matches[1]),'UTF-8','UTF-16'); }, json_encode($input) ); } //指定フォーマットで日付返却 function edit_date_format($date = "", $format = ""){ if(!$date){ $date = date("Y-m-d H:i:s"); } if(!$format){ $format = "Y年n月j日 H時i分s秒"; } return date($format, strtotime($date)); } //西暦から和暦へ変換(配列返却) function convGtJDate($src){ list($year, $month, $day) = explode('/', $src); if(!@checkdate($month, $day, $year) || $year < 1869 || strlen($year) !== 4 || strlen($month) !== 2 || strlen($day) !== 2) return false; $date = str_replace('/', '', $src); if($date >= 19890108){ $gengo = '平成'; $wayear = $year - 1988; } elseif($date >= 19261225){ $gengo = '昭和'; $wayear = $year - 1925; } elseif($date >= 19120730){ $gengo = '大正'; $wayear = $year - 1911; }else{ $gengo = '明治'; $wayear = $year - 1868; } switch ($wayear){ case 1: $wayear = '元年'; $wadate = array( "gengo" => $gengo, "year" => $wayear, "month" => $month, "day" => $day ); break; default: $wadate = array( "gengo" => $gengo, "year" => sprintf("%02d", $wayear), "month" => $month, "day" => $day ); } return $wadate; } //西暦から和暦へ変換(文字列返却) function convGtJDateString($src){ list($year, $month, $day) = explode('/', $src); if(!@checkdate($month, $day, $year) || $year < 1869 || strlen($year) !== 4 || strlen($month) !== 2 || strlen($day) !== 2) return false; $date = str_replace('/', '', $src); if($date >= 19890108){ $gengo = '平成'; $wayear = $year - 1988; } elseif($date >= 19261225){ $gengo = '昭和'; $wayear = $year - 1925; } elseif($date >= 19120730){ $gengo = '大正'; $wayear = $year - 1911; }else{ $gengo = '明治'; $wayear = $year - 1868; } switch ($wayear){ case 1: $wayear = '元年'; $wadate = array( "gengo" => $gengo, "year" => $wayear, "month" => $month."月", "day" => $day."日" ); break; default: $wadate = array( "gengo" => $gengo, "year" => sprintf("%02d", $wayear)."年", "month" => $month."月", "day" => $day."日" ); } return $wadate['gengo'].$wadate['year'].$wadate['month'].$wadate['day']; } //和暦から西暦へ変換 function convJtGDate($src){ $a = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '0'); $g = mb_substr($src, 0, 2, 'UTF-8'); array_unshift($a, $g); if(($g !== '明治' && $g !== '大正' && $g !== '昭和' && $g !== '平成') || (str_replace($a, '', $src) !== '年月日' && str_replace($a, '', $src) !== '元年月日')) return false; $y = strtok(str_replace($g, '', $src), '年月日'); $m = strtok('年月日'); $d = strtok('年月日'); if(mb_strpos($src, '元年') !== false) $y = 1; if($g === '平成') $y += 1988; elseif($g === '昭和') $y += 1925; elseif($g === '大正') $y += 1911; elseif($g === '明治') $y += 1868; if(strlen($y) !== 4 || strlen($m) !== 2 || strlen($d) !== 2 || !@checkdate($m, $d, $y)) return false; return $y.'/'.$m.'/'.$d; } //誕生日から年齢計算 function output_age4birthday($birthday){ $search = array('/', '-'); $birthday = str_replace($search, "", $birthday); $age = (int)((date("Ymd") - $birthday)/10000); return $age; } //和暦から西暦へ変換(年のみ) function convJtGYear($src){ $g = mb_substr($src, 0, 2, 'UTF-8'); $y = strtok(str_replace($g, '', $src), '年月日'); if($g === '平成') $y += 1988; elseif($g === '昭和') $y += 1925; elseif($g === '大正') $y += 1911; elseif($g === '明治') $y += 1868; return $y; } //指定日から何日経過したか取得 function get_late_date($date){ $day = explode("-", $date); $yy = $day['0']; $mm = $day['1']; $dd = $day['2']; $today = mktime(0, 0, 0, gmdate("m"), gmdate("d"), gmdate("Y")); $start = mktime(0, 0, 0, $mm, $dd, $yy); $result = (int)(($today - $start) / 86400); return $result; } //住所から緯度経度取得 function get_gps_from_address($address = ""){ $res = array(); $req = 'http://maps.google.com/maps/api/geocode/xml'; $req .= '?address='.urlencode($address); $req .= '&sensor=false'; $xml = simplexml_load_file($req) or die('XML parsing error'); if($xml->status == 'OK'){ $location = $xml->result->geometry->location; $res['lat'] = (string)$location->lat[0]; $res['lng'] = (string)$location->lng[0]; } return $res; } //郵便番号から都道府県取得 function get_postcode_address($postcode){ $url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=false&language=ja&address=".$postcode; $googleMapsApiData = json_decode(@file_get_contents($url), true); //APIから正しくデータを取得できたかチェック if($googleMapsApiData->status !== 'OK'){ $state = FALSE; $result = $this->massage->get_msg('get_address_1'); }else{ //都道府県を取得 $addressArray = $googleMapsApiData->results[0]->address_components; unset($addressArray[0]); array_pop($addressArray); $addressArray = array_reverse($addressArray); $result = $addressArray[0]->long_name; } return $result; } //現在のURLを返す function now_url(){ return (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; } //二つの日付が何日間離れているか取得 function day_diff($date1, $date2){ // 日付をUNIXタイムスタンプに変換 $timestamp1 = strtotime($date1); $timestamp2 = strtotime($date2); // 何秒離れているかを計算 $seconddiff = abs($timestamp2 - $timestamp1); // 日数に変換 $daydiff = $seconddiff / (60 * 60 * 24); if($timestamp1 > $timestamp2){ $daydiff = $daydiff * -1; } // 戻り値 return $daydiff; } //多次元配列を検索 function array_search_recursive($search_element, $array){ if($array){ $recursive_func = function ($search_element, $array) use (&$recursive_func){ foreach ($array as $key => $value){ if(is_array($value)){ if($recursive_func($search_element, $value) !== false) return $key; } if($search_element == $value) return $key; } return false; }; return $recursive_func($search_element, $array); }else{ return ""; } } //メール署名生成 function get_mail_signature(){ $adminName = SITE_TITLE; $adminMail = ADMIN_MAIL; $signature = <<< EOF ※このメールは送信専用のため返信されても内容を確認することができません。 EOF; return $signature; } //パスワード再発行メール本文生成 function reset_password_mailbody($session){ $signature = get_mail_signature(); $admin_name = PAGE_TITLE; $url = HOME_URL."login.php?s=".$session; $mode = MAIN_DIR; if($mode == "admin" || $mode == "print"){ $limit_date = get_user_reissue4limit($session); }elseif($mode == "org"){ $limit_date = get_organizer_reissue4limit($session); }elseif($mode == "team"){ $limit_date = get_team_reissue4limit($session); } $content = <<< EOF いつもご利用ありがとうございます。 {$admin_name}からお知らせです。 パスワードの再設定手続きが行われました。 *このメールは[{$limit_date}まで有効]です。 1.下記URLへアクセスしていただくと、パスワードの再設定画面が表示されます。 2.表示されたパスワード再設定画面で新しいパスワードを設定してください {$url} ―――――――――――――――――――――――――――――――――――――― ※こちらのメールに心当たりの無い方は、このままこのメールを削除してください。 ―――――――――――――――――――――――――――――――――――――― {$signature} EOF; return $content; } // ファイル名渡したら配列返すラッパー関数 function readXlsx($readFile, $sheet_name, $redirect_url = ""){ // ライブラリファイルの読み込み (パス指定し直す) require_once dirname(__FILE__) . '/lib/PHPExcel/Classes/PHPExcel.php'; require_once dirname(__FILE__) . '/lib/PHPExcel/Classes/PHPExcel/IOFactory.php'; $readFile = EXCEL_DIR . $readFile; // ファイルの存在チェック if(!file_exists($readFile)){ session_start(); unset($_SESSION[SESSION_NAME]); $_SESSION[SESSION_NAME]['ERRORMSG'][] = mb_convert_encoding($readFile. "が見つかりません。", "UTF-8", "auto"); header('Location: ' . $redirect_url); exit; } $path_parts = pathinfo($readFile); $extension = $path_parts['extension']; if($extension == "xls"){ $reader = PHPExcel_IOFactory::createReader('Excel5'); }elseif($extension == "xlsx"){ $reader = PHPExcel_IOFactory::createReader('Excel2007'); } // xlsxをPHPExcelに食わせる $objPExcel = $reader->load($readFile); //シート数取得 $sheets_count = $objPExcel->getSheetCount(); for($i = 0;$i < $sheets_count;$i++){ //シート取得 $objPExcel->setActiveSheetIndex($i); $sheet = $objPExcel->getActiveSheet(); //シート名取得 $active_sheet = $sheet->getTitle(); if(mb_convert_encoding($sheet->getTitle(), "utf8", "auto") == $sheet_name){ $active_index = $i; } } $objPExcel->setActiveSheetIndex($active_index); // 配列形式で返す $data = $objPExcel->getActiveSheet()->toArray(null, true, true, true); /* $arr = array(); foreach($data as $row => $arrCol){ foreach($arrCol as $col => $val){ $arr[$col][$row] = $val; } } mb_convert_variables("SJIS", "auto", $data); */ return $data; } function get_last_key($array){ end($array); return key($array); } function address_split($address){ preg_match('/(東京都|北海道|(?:京都|大阪)府|.{6,9}県)((?:四日市|廿日市|野々市|臼杵|かすみがうら|つくばみらい|いちき串木野)市|(?:杵島郡大町|余市郡余市|高市郡高取)町|.{3,12}市.{3,12}区|.{3,9}区|.{3,15}市(?=.*市)|.{3,15}市|.{6,27}町(?=.*町)|.{6,27}町|.{9,24}村(?=.*村)|.{9,24}村)(.*)/', $address, $matches); return $matches; } function conv_special_char($subject){ //変換前の文字 $search = Array('Ⅰ','Ⅱ','Ⅲ','Ⅳ','Ⅴ','Ⅵ','Ⅶ','Ⅷ','Ⅸ','Ⅹ','①','②','③','④','⑤','⑥','⑦','⑧','⑨','⑩','№','㈲','㈱'); //変換後の文字 $replace = Array('I','II','III','IV','V','VI','VII','VIII','IX','X','1','2','3','4','5','6','7','8','9','10','No.','(有)','(株)'); $ret = str_replace($search, $replace, $subject); return $ret; } ?>