X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=e-DoKo.git;a=blobdiff_plain;f=include%2Ffunctions.php;h=b476f6de7eb8e6ab151908c61db6c24359edade2;hp=cb784575d783fc344077c3db9d8d78cbe1964433;hb=65de9655c6002bbfee76f1c3c45b312615fb375a;hpb=14f6017a5b84d70320bde9d6e074ea8ac948a85e diff --git a/include/functions.php b/include/functions.php index cb78457..b476f6d 100644 --- a/include/functions.php +++ b/include/functions.php @@ -1,5 +1,5 @@ +/* Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Arun Persaud * * This file is part of e-DoKo. * @@ -106,101 +106,106 @@ define("CARDS_GAMEOVER", 5); /* show all cards from everyone (looking at some function mymail($uid,$gameid=0,$type,$message) { - global $EmailName,$WIKI; + global $EmailName,$WIKI,$PREF; - /* do we send the email right away or save it in the database? */ - $send_now = 1; - - /* add standard header and footer */ - $subject = "$EmailName "; - if($gameid) - $game = DB_format_gameid($gameid); - else - $game = ''; - - switch($type) + /* uid can be either a single uid or an array, convert everything to + * an array, so that we can loop over it */ + if(!is_array($uid)) { - case GAME_CANCELED: - $subject.=sprintf(_("Game %s canceled"),$game); - break; - case GAME_CANCELED_POVERTY: - $subject.=sprintf(_("Game %s canceled (poverty not resolved)"),$game); - break; - case GAME_CANCELED_TIMEOUT: - $subject.=sprintf(_("Game %s canceled (timed out)"),$game); - break; - case GAME_YOUR_TURN: - $subject.=sprintf(_("A card has been played in game %s"),$game); - break; - case GAME_READY: - $subject.=sprintf(_("Ready, set, go... (game %s)"),$game); - break; - case GAME_POVERTY: - $subject.=sprintf(_("Poverty (game %s)"),$game); - break; - case GAME_DPOVERTY: - $subject.=sprintf(_("Double poverty (game %s)"),$game); - break; - case GAME_OVER: - $subject.=sprintf(_("Game over (game %s)"),$game); - break; - case GAME_RECOVERY: - $subject.=_("Recovery"); - break; - case GAME_REMINDER: - $subject.=sprintf(_("Reminder: game %s it's your turn"),$game); - break; - case GAME_NEW: - $subject.=sprintf(_("You are invited to a game of DoKo (game %s)"),$game); - break; - default: - $subject.=sprintf(_("Problem with email, contact admin (errorcode %d)"),$gameid); + $to_uid=$uid; + $uid = array(); + $uid[]=$to_uid; } - /* standard goodbye */ - $footer = "\nHave a nice day\n". - " your E-Doko service department\n\n". - "-- \n". - "You can change your mail delivery mode in the preference menu.\n". - 'web: http://doko.nubati.net '. - "help, bugs, etc.: $WIKI"; - - if(is_array($uid)) - { - /* send email to more than one person */ - - $header = "Hello all\n\n"; - - foreach($uid as $user) - { - $all[] = DB_get_email('userid',$user); - } - $To = implode(",",$all); - } - else + foreach($uid as $user) { - /* standard greeting */ - $name = DB_get_name('userid',$uid); - $header = "Hello $name\n\n"; + /* do we send the email right away or save it in the database? */ + $send_now = 1; - $To = DB_get_email('userid',$uid); + $name = DB_get_name('userid',$user); + $To = DB_get_email('userid',$user); /* check if user wants email right away or if we should save it in * the database for later delivery */ - $PREF = DB_get_PREF($uid); - if( $PREF['digest'] != 'digest-off' ) - $send_now = 0; - } + $uidPREF = DB_get_PREF($user); + if( $uidPREF['digest'] != 'digest-off' ) + $send_now = 0; + /* use local language */ + set_language($uidPREF['language']); - if($send_now) - sendmail($To,$subject,$header.$message.$footer); - else - { - /* store email in database */ - DB_digest_insert_email($To,$message,$type,$gameid); + $header = sprintf(_('Hello %s'),$name); + $header .= "\n\n"; + + /* add standard header and footer */ + $subject = "$EmailName "; + if($gameid) + $game = DB_format_gameid($gameid); + else + $game = ''; + + switch($type) + { + case GAME_CANCELED: + $subject.=sprintf(_('Game %s canceled'),$game); + break; + case GAME_CANCELED_POVERTY: + $subject.=sprintf(_('Game %s canceled (poverty not resolved)'),$game); + break; + case GAME_CANCELED_TIMEOUT: + $subject.=sprintf(_('Game %s canceled (timed out)'),$game); + break; + case GAME_YOUR_TURN: + $subject.=sprintf(_('A card has been played in game %s'),$game); + break; + case GAME_READY: + $subject.=sprintf(_('Ready, set, go... (game %s)'),$game); + break; + case GAME_POVERTY: + $subject.=sprintf(_('Poverty (game %s)'),$game); + break; + case GAME_DPOVERTY: + $subject.=sprintf(_('Double poverty (game %s)'),$game); + break; + case GAME_OVER: + $subject.=sprintf(_('Game over (game %s)'),$game); + break; + case GAME_RECOVERY: + $subject.=_('Recovery'); + break; + case GAME_REMINDER: + $subject.=sprintf(_("Reminder: game %s it's your turn"),$game); + break; + case GAME_NEW: + $subject.=sprintf(_('You are invited to a game of DoKo (game %s)'),$game); + break; + default: + $subject.=sprintf(_('Problem with email, contact admin (errorcode %d)'),$gameid); + } + + /* standard goodbye */ + $footer = "\n"._('Have a nice day')."\n "._('your E-Doko service department'). + "\n\n". + "-- \n". + _('You can change your mail delivery mode in the preference menu.'). + "\n". + _('web').': http://doko.nubati.net '. + _('help, bugs, etc.').": $WIKI"; + + if($send_now) + sendmail($To,$subject,$header.$message.$footer); + else + { + /* store email in database */ + DB_digest_insert_email($To,$message,$type,$gameid); + } } + + /* reset language to original user*/ + set_language($PREF['language']); + + return; } function sendmail($To,$Subject,$message) @@ -213,6 +218,10 @@ function sendmail($To,$Subject,$message) if(isset($EMAIL_REPLY)) $header .= "From: e-DoKo daemon <$EMAIL_REPLY>\r\n"; + $header .= "Content-Type: text/plain; charset = \"UTF-8\";\r\n"; + $header .= "Content-Transfer-Encoding: 8bit\r\n"; + $header .= "\r\n"; + if($debug) { /* display email on screen, @@ -223,15 +232,12 @@ function sendmail($To,$Subject,$message) "$1", $message); echo "
To: $To
"; - if($header != "") - echo $header."
"; + echo $header."
"; echo "Subject: $Subject
$message
\n"; } else - if($header != "") - mail($To,$Subject,$message,$header); - else - mail($To,$Subject,$message); + mail($To,$Subject,$message,$header); + return; } @@ -979,23 +985,22 @@ function can_call($what,$hash) function display_table_begin () { - global $gameid, $GT, $debug,$INDEX,$defaulttimezone,$session; - global $RULES,$GAME,$gametype; - - $result = DB_query("SELECT User.fullname as name,". - " Hand.position as position, ". - " User.id, ". - " Hand.party as party, ". - " Hand.sickness as sickness, ". - " Hand.point_call, ". - " User.last_login, ". - " Hand.hash, ". - " User.timezone, ". - " User.email ". - "FROM Hand ". - "LEFT JOIN User ON User.id=Hand.user_id ". - "WHERE Hand.game_id='".$gameid."' ". - "ORDER BY position ASC"); + global $gameid; + + $result = DB_query('SELECT User.fullname as name,'. + ' Hand.position as position,'. + ' User.id,'. + ' Hand.party as party,'. + ' Hand.sickness as sickness,'. + ' Hand.point_call,'. + ' User.last_login,'. + ' Hand.hash,'. + ' User.timezone,'. + ' User.email'. + ' FROM Hand'. + ' LEFT JOIN User ON User.id=Hand.user_id'. + ' WHERE Hand.game_id='.DB_quote_smart($gameid). + ' ORDER BY position ASC'); $row0 = DB_fetch_array($result); $row1 = DB_fetch_array($result); @@ -1011,25 +1016,26 @@ function display_table_begin () return; } + + function display_table_end () { - global $gameid, $GT, $debug,$INDEX,$defaulttimezone,$session; - global $RULES,$GAME,$gametype; - - $result = DB_query("SELECT User.fullname as name,". - " Hand.position as position, ". - " User.id, ". - " Hand.party as party, ". - " Hand.sickness as sickness, ". - " Hand.point_call, ". - " User.last_login, ". - " Hand.hash, ". - " User.timezone, ". - " User.email ". - "FROM Hand ". - "LEFT JOIN User ON User.id=Hand.user_id ". - "WHERE Hand.game_id='".$gameid."' ". - "ORDER BY position ASC"); + global $gameid; + + $result = DB_query('SELECT User.fullname as name,'. + ' Hand.position as position,'. + ' User.id,'. + ' Hand.party as party,'. + ' Hand.sickness as sickness,'. + ' Hand.point_call,'. + ' User.last_login,'. + ' Hand.hash,'. + ' User.timezone,'. + ' User.email'. + ' FROM Hand'. + ' LEFT JOIN User ON User.id=Hand.user_id'. + ' WHERE Hand.game_id='.DB_quote_smart($gameid). + ' ORDER BY position ASC'); $row0 = DB_fetch_array($result); $row1 = DB_fetch_array($result); @@ -1047,8 +1053,8 @@ function display_single_user($r,$start=0) { /* start=1, mark starting player, default=0, so the player on the left is not marked */ - global $gameid, $GT, $debug,$INDEX,$defaulttimezone,$session; - global $RULES,$GAME,$gametype; + global $gameid, $debug,$INDEX,$defaulttimezone; + global $RULES,$GAME, $gametype_raw; $name = $r[0]; $pos = $r[1]; @@ -1081,8 +1087,8 @@ function display_single_user($r,$start=0) $stop = substr($vacation[1],0,10); $comment = $vacation[2]; - $title = "begin: $start end: $stop $comment"; - echo " $gravatar (on vacation until $stop) \n"; + $title = _("begin:")." $start "._("end:")." $stop $comment"; + echo " $gravatar "._("(on vacation until $stop)")." \n"; } else echo " $gravatar \n"; @@ -1090,11 +1096,11 @@ function display_single_user($r,$start=0) echo" \n"; /* add hints for poverty, wedding, solo, etc */ - if( $gametype != "solo") + if( $gametype_raw != "solo") if( $RULES["schweinchen"]=="both" && $GAME["schweinchen-who"]==$hash ) echo " Schweinchen.
"; - if($GT=="poverty" && $party=="re") + if($gametype_raw=="poverty" && $party=="re") if($sickness=="poverty" || ($RULES['lowtrump']=='poverty' && $sickness=='lowtrump')) { $userhash = DB_get_hash_from_gameid_and_userid($gameid,$user); @@ -1111,7 +1117,7 @@ function display_single_user($r,$start=0) echo " \n"; - if($GT=="dpoverty") + if($gametype_raw=="dpoverty") if($party=="re") if($sickness=="poverty" || ($RULES['lowtrump']=='poverty' && $sickness=='lowtrump')) { @@ -1145,28 +1151,31 @@ function display_single_user($r,$start=0) echo " \" title=\"poverty2 partner\" />\n"; - if($GT=="wedding" && $party=="re") + if($gametype_raw=="wedding" && $party=="re") if($sickness=="wedding") echo " \"wedding\"\n"; else echo " \n"; - if( (strpos($GT,"solo")!==false) && $party=="re") + if( $gametype_raw=='solo' && $party=="re") { - if(strpos($GT,"queen")!==false) + $solotype = DB_get_solo_by_gameid($gameid); + $GT = get_display_gametype($gameid); + + if($solotype=='queen') echo " \"$GT\"\n"; - else if(strpos($GT,"jack")!==false) + else if($solotype=='jack') echo " \"$GT\"\n"; - else if(strpos($GT,"club")!==false) + else if($solotype=='club') echo " \"$GT\"\n"; - else if(strpos($GT,"spade")!==false) + else if($solotype=='spade') echo " \"$GT\"\n"; - else if(strpos($GT,"heart")!==false) + else if($solotype=='heart') echo " \"$GT\"\n"; - else if(strpos($GT,"trumpless")!==false) + else if($solotype=='trumpless') echo " \"$GT\"\n"; - else if(strpos($GT,"trump")!==false) + else if($solotype=='trump') echo " \"$GT\"\n"; } @@ -1203,15 +1212,15 @@ function display_single_user($r,$start=0) switch($wins) { case 0: - echo "#tricks 0"; break; + echo _('#tricks 0'); break; case 1: - echo "#tricks 1"; break; + echo _('#tricks 1'); break; case 2: case 3: case 4: - echo "#tricks few"; break; + echo _('#tricks few'); break; default: - echo "#tricks many"; break; + echo _('#tricks many'); break; } echo "\n"; echo " \n"; @@ -1225,18 +1234,18 @@ function display_user_menu($id, $skiphash=NULL) if($skiphash) $result = DB_query("SELECT Hand.hash,Hand.game_id,Game.player from Hand". " LEFT JOIN Game On Hand.game_id=Game.id". - " WHERE Hand.user_id='$id'". - " AND Hand.hash!='$skiphash'". + " WHERE Hand.user_id=".DB_quote_smart($id). + " AND Hand.hash!=".DB_quote_smart($skiphash). " AND ( Game.player='$id' OR ISNULL(Game.player) )". " AND ( Game.status='pre' OR Game.status='play' )". " ORDER BY Game.session" ); else - $result = DB_query("SELECT Hand.hash,Hand.game_id,Game.player from Hand". - " LEFT JOIN Game On Hand.game_id=Game.id". - " WHERE Hand.user_id='$id'". - " AND ( Game.player='$id' OR ISNULL(Game.player) )". + $result = DB_query('SELECT Hand.hash,Hand.game_id,Game.player from Hand'. + ' LEFT JOIN Game On Hand.game_id=Game.id'. + ' WHERE Hand.user_id='.DB_quote_smart($id). + ' AND ( Game.player='.DB_quote_smart($id).' OR ISNULL(Game.player) )'. " AND ( Game.status='pre' OR Game.status='play' )". - " ORDER BY Game.session" ); + ' ORDER BY Game.session' ); $i=0; while( $r = DB_fetch_array($result)) @@ -1287,8 +1296,8 @@ function generate_score_table($session) $player_party = array(); /* get player id from the first game */ - $result = DB_query("SELECT user_id from Hand". - " WHERE Hand.game_id=".$gameids[0][0]); + $result = DB_query('SELECT user_id from Hand'. + ' WHERE Hand.game_id='.DB_quote_smart($gameids[0][0])); while( $r = DB_fetch_array($result)) $player[$r[0]] = 0; @@ -1304,18 +1313,18 @@ function generate_score_table($session) foreach($player as $id=>$points) { $party = $player_party[$id][$i][0]; - if($party == "re") - if($gametype=="solo") + if($party == 're') + if($gametype=='solo') $player[$id] += 3*$re_score; else $player[$id] += $re_score; - else if ($party == "contra") + else if ($party == 'contra') $player[$id] -= $re_score; } $score[$i]['gameid'] = $gameid[0] ; $score[$i]['players'] = $player; $score[$i]['points'] = abs($re_score); - $score[$i]['solo'] = ($gametype=="solo"); + $score[$i]['solo'] = ($gametype=='solo'); $i++; } @@ -1444,7 +1453,7 @@ function format_score_table_ascii($score) /* truncate table if we have too many games */ $max = sizeof($score); - if($max>6) $output.=" (table truncated to last 6 games)\n"; + if($max>6) $output.=" "._("(table truncated to last 6 games)")."\n"; /* output header */ foreach($score[0]['players'] as $id=>$points) @@ -1572,7 +1581,7 @@ function check_vacation($userid) { /* get start date */ $result = DB_query_array("SELECT value FROM User_Prefs". - " WHERE user_id='$userid' AND pref_key='vacation start'" ); + " WHERE user_id=".DB_quote_smart($userid)." AND pref_key='vacation start'" ); if($result) $start = $result[0]; else @@ -1580,7 +1589,7 @@ function check_vacation($userid) /* get end date */ $result = DB_query_array("SELECT value FROM User_Prefs". - " WHERE user_id='$userid' AND pref_key='vacation stop'" ); + " WHERE user_id=".DB_quote_smart($userid)." AND pref_key='vacation stop'" ); if($result) $stop = $result[0]; else @@ -1588,7 +1597,7 @@ function check_vacation($userid) /* get comment */ $result = DB_query_array("SELECT value FROM User_Prefs". - " WHERE user_id='$userid' AND pref_key='vacation comment'" ); + " WHERE user_id=".DB_quote_smart($userid)." AND pref_key='vacation comment'" ); if($result) $comment = $result[0]; else @@ -1699,4 +1708,94 @@ function verify_password($email, $password) return 3; } +/* language functions */ +function detectlanguage() +{ + /* read out browser's prefered language, taken from php-manual*/ + $langcode = explode(";", $_SERVER['HTTP_ACCEPT_LANGUAGE']); + $langcode = explode(",", $langcode['0']); + return $langcode['0']; +} + +function set_language($l,$type='lang') +{ + if($type=='uid') + { + $userPREF = DB_get_PREF($l); + $l = $userPREF['language']; + }; + + switch($l) + { + case 'de': + putenv("LC_ALL=de_DE"); + setlocale(LC_ALL, "de_DE"); + break; + default: + putenv("LC_ALL=en_US"); + setlocale(LC_ALL, "en_US"); + break; + } + + // Specify location of translation tables + bindtextdomain("edoko", "./locale"); + bind_textdomain_codeset("edoko", 'UTF-8'); + // Choose domain + textdomain("edoko"); + + return; +} + +function get_display_gametype($gameid) +{ + /* return a readable string that can be displayed to show the game type + * this means hiding silent solo from the user + */ + + $gametype = DB_get_gametype_by_gameid($gameid); + + if ($gametype == 'normal') + $GT = _('normal'); + else if($gametype=='solo') + { + $solotype = DB_get_solo_by_gameid($gameid); + + switch($solotype) + { + case 'trumpless': + $GT = _('trumpless solo'); + break; + case 'jack': + $GT = _('jack solo'); + break; + case 'queen': + $GT = _('queen solo'); + break; + case 'trump': + $GT = _('trump solo'); + break; + case 'club': + $GT = _('club solo'); + break; + case 'spade': + $GT = _('spade solo'); + break; + case 'heart': + $GT = _('heart solo'); + break; + case 'silent': + $GT = _('normal'); /* this is change compared to $gametype */ + break; + } + } + else if ($gametype == 'wedding') + $GT = _('wedding'); + else if ($gametype == 'poverty') + $GT = _('poverty'); + else if ($gametype == 'dpoverty') + $GT = _('double poverty'); + + return $GT; +} + ?>