NEW FEATURE: vacation support
authorArun Persaud <arun@nubati.net>
Sat, 31 Jan 2009 05:05:32 +0000 (21:05 -0800)
committerArun Persaud <arun@nubati.net>
Sat, 31 Jan 2009 05:05:32 +0000 (21:05 -0800)
users can specify a vacation start and end date and a message. Once they are on vacation their name will be shown in a different color at the table and on the user page (in case it is their turn).

css/standard018.css [moved from css/standard017.css with 99% similarity]
include/db.php
include/functions.php
include/output.php
include/preferences.php
include/user.php

similarity index 99%
rename from css/standard017.css
rename to css/standard018.css
index c9524d8b98c8e65a812100f43326a5f40cf83cdb..d1eeb2575a4532858702a6e7ce0cf34b98989284 100644 (file)
@@ -570,7 +570,7 @@ table.stats th { border-bottom: solid 0.2em #000 }
   text-align: center;
 }
 
-.login fieldset {
+fieldset {
   border: 2px solid #000;
   padding: 0.5em 0.5em 0.75em;
   background-color: #eee;
@@ -594,4 +594,9 @@ table.stats th { border-bottom: solid 0.2em #000 }
 
 .newbiehint {
     background-color: #fee;
+}
+
+.vacation {
+    color: #666;
+    background-color: #fc3;
 }
\ No newline at end of file
index 27d639ebe3a7da832a7a30a55bccf33b4cc6ea25..b8bcea80141a8595a5fc7e4ea578f8e6de4e02c7 100644 (file)
@@ -763,6 +763,29 @@ function DB_get_PREF($myid)
   else
     $PREF['open_for_games']='yes';
 
+  /* Vacation start */
+  $r = DB_query_array("SELECT value FROM User_Prefs".
+                     " WHERE user_id='$myid' AND pref_key='vacation start'" );
+  if($r)
+    $PREF['vacation_start'] = $r[0];
+  else
+    $PREF['vacation_start'] = NULL;
+
+  /* Vacation stop */
+  $r = DB_query_array("SELECT value FROM User_Prefs".
+                     " WHERE user_id='$myid' AND pref_key='vacation stop'" );
+  if($r)
+    $PREF['vacation_stop'] = $r[0];
+  else
+    $PREF['vacation_stop'] = NULL;
+
+  /* Vacation comment */
+  $r = DB_query_array("SELECT value FROM User_Prefs".
+                     " WHERE user_id='$myid' AND pref_key='vacation comment'" );
+  if($r)
+    $PREF['vacation_comment'] = $r[0];
+  else
+    $PREF['vacation_comment'] = "";
 
   return $PREF;
 }
index 044c6c718c286e3c97cf5b358ac89d34ba337d1c..b4c344d244e436946d830bdc95c722491a7d15f4 100644 (file)
@@ -767,10 +767,22 @@ function display_table ()
       $timenow   = strtotime(date("Y-m-d H:i:s"));
 
       echo "  <div class=\"table".($pos-1)."\">\n";
-      if(!$debug)
-       echo "   $name \n";
+
+      if($debug)
+       echo "   <a href=\"".$INDEX."?action=game&amp;me=".$hash."\">";
+      if($vacation = check_vacation($user))
+       {
+         $start   = $vacation[0];
+         $stop    = substr($vacation[1],0,10);
+         $comment = $vacation[2];
+
+             $title = "begin: $start  end: $stop $comment";
+             echo "   <span class=\"vacation\" title=\"$title\">$name (on vacation until $stop)</span> \n";
+       }
       else
-       echo "   <a href=\"".$INDEX."?action=game&amp;me=".$hash."\">$name</a>\n";
+       echo "   $name \n";
+      if($debug)
+       echo"</a>\n";
 
       /* add hints for poverty, wedding, solo, etc */
       if( $gametype != "solo")
@@ -1162,5 +1174,38 @@ function getCache($cacheFile, $expireTime)
   return false;
 }
 
+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'" );
+  if($result)
+    $start = $result[0];
+  else
+    return NULL;
+
+  /* get end date */
+  $result = DB_query_array("SELECT value FROM User_Prefs".
+                    " WHERE user_id='$userid' AND pref_key='vacation stop'" );
+  if($result)
+    $stop = $result[0];
+  else
+    return NULL;
+
+  /* get comment */
+  $result = DB_query_array("SELECT value FROM User_Prefs".
+                    " WHERE user_id='$userid' AND pref_key='vacation comment'" );
+  if($result)
+    $comment = $result[0];
+  else
+    $comment = '';
+
+  /* check if user is on vacation. TODO: use user's timezone */
+  if( (time() - strtotime($start) >0) &&
+      (strtotime($stop) - time()  >0))
+    return array ($start,$stop,$comment);
+  else
+    return NULL;
+}
 
 ?>
index 485daf99227f6c11bd1135899b6549055175cc87..6823b4db6ae33f628cfe8e0c068b32824188a607 100644 (file)
@@ -298,7 +298,7 @@ function output_header()
      <title>e-Doko</title>
      <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" />
      <link rel="shortcut icon" type="image/x-icon" href="pics/edoko-favicon.png" />
-     <link rel="stylesheet" type="text/css" href="css/standard017.css" />
+     <link rel="stylesheet" type="text/css" href="css/standard018.css" />
      <script type="text/javascript" src="include/game.js"> </script>
   </head>
 <body onload="high_last();">
index 6557330f32825e50b7c3732989bfdad727b82193..a319130da2bafab1392e85740c1c26ec3c04fdf5 100644 (file)
@@ -7,7 +7,7 @@ if(!isset($HOST))
 
 $name  = $_SESSION["name"];
 $email = DB_get_email('name',$name);
-$myid = DB_get_userid('email',$email);
+$myid  = DB_get_userid('email',$email);
 if(!$myid)
   return;
 
@@ -33,6 +33,79 @@ DB_update_user_timestamp($myid);
  * update the database and track changes with a variable, so that
  * we can later highlight the changed value
  */
+if(myisset('vacation_start','vacation_stop','vacation_comment'))
+  {
+    $vacation_start   = $_REQUEST['vacation_start'].' 00:00:00';
+    $vacation_stop    = $_REQUEST['vacation_stop'].' 23:59:59';
+    $vacation_comment = $_REQUEST['vacation_comment'];
+
+    /* check if everything is valid */
+    if(!strtotime($vacation_start))
+      $changed_vacation = -1;
+    if(!strtotime($vacation_stop))
+      $changed_vacation = -1;
+
+    /* test if we should delete the entry */
+    if($vacation_start == '- 00:00:00')
+      {
+       $result = DB_query("DELETE FROM User_Prefs".
+                          " WHERE user_id='$myid' AND pref_key='vacation start'" );
+       $result = DB_query("DELETE FROM User_Prefs".
+                          " WHERE user_id='$myid' AND pref_key='vacation stop'" );
+       $result = DB_query("DELETE FROM User_Prefs".
+                          " WHERE user_id='$myid' AND pref_key='vacation comment'" );
+       $changed_vacation = 1;
+      }
+    /* change in database if format is ok */
+    else if($changed_vacation>=0)
+      {
+       /* only change if different from current value */
+       if($vacation_start!=$PREF['vacation_start'])
+         {
+           $result = DB_query("SELECT * from User_Prefs".
+                              " WHERE user_id='$myid' AND pref_key='vacation start'" );
+           if( DB_fetch_array($result))
+             $result = DB_query("UPDATE User_Prefs SET value=".DB_quote_smart($vacation_start).
+                                " WHERE user_id='$myid' AND pref_key='vacation start'" );
+           else
+             $result = DB_query("INSERT INTO User_Prefs VALUES(NULL,'$myid','vacation start',".
+                                DB_quote_smart($vacation_start).")");
+
+           $changed_vacation = 1;
+         }
+
+       /* same for the stop date */
+       if($vacation_stop!=$PREF['vacation_stop'])
+         {
+           $result = DB_query("SELECT * from User_Prefs".
+                              " WHERE user_id='$myid' AND pref_key='vacation stop'" );
+           if( DB_fetch_array($result))
+             $result = DB_query("UPDATE User_Prefs SET value=".DB_quote_smart($vacation_stop).
+                                " WHERE user_id='$myid' AND pref_key='vacation stop'" );
+           else
+             $result = DB_query("INSERT INTO User_Prefs VALUES(NULL,'$myid','vacation stop',".
+                                DB_quote_smart($vacation_stop).")");
+
+           $changed_vacation = 1;
+         }
+
+       /* does the user want to add a comment? */
+       if($vacation_comment!=$PREF['vacation_comment'])
+         {
+           $result = DB_query("SELECT * from User_Prefs".
+                              " WHERE user_id='$myid' AND pref_key='vacation comment'" );
+           if( DB_fetch_array($result))
+             $result = DB_query("UPDATE User_Prefs SET value=".DB_quote_smart($vacation_comment).
+                                " WHERE user_id='$myid' AND pref_key='vacation comment'" );
+           else
+             $result = DB_query("INSERT INTO User_Prefs VALUES(NULL,'$myid','vacation comment',".
+                                DB_quote_smart($vacation_comment).")");
+
+           $changed_vacation = 1;
+         }
+      }
+  }
+
 if(myisset("timezone"))
   {
     $newtimezone = $_REQUEST['timezone'];
@@ -174,8 +247,28 @@ echo "  <form action=\"index.php?action=prefs\" method=\"post\">\n";
 echo "  <h2>Your settings are</h2>\n";
 echo "    <fieldset>\n";
 echo "    <legend>Game-related</legend>\n";
-
 echo "      <table>\n";
+
+echo "        <tr><td>Vacation:             </td>\n";
+if($PREF['vacation_start'])
+  $value = substr($PREF['vacation_start'],0,10);
+ else
+   $value = '';
+echo "            <td>start:<input type=\"text\" id=\"vacation_start\" name=\"vacation_start\" size=\"10\" maxlength=\"10\" value=\"$value\" /></td>\n";
+if($PREF['vacation_stop'])
+  $value = substr($PREF['vacation_stop'],0,10);
+ else
+   $value = '';
+echo "            <td>stop:<input type=\"text\" id=\"vacation_stop\" name=\"vacation_stop\" size=\"10\" maxlength=\"10\" value=\"$value\" /></td>\n";
+if($PREF['vacation_comment'])
+  $value = $PREF['vacation_comment'];
+else
+  $value = '';
+echo "            <td>comment:<input type=\"text\" id=\"vacation_comment\" name=\"vacation_comment\" size=\"10\" maxlength=\"50\" value=\"$value\" />";
+if($changed_vacation == 1) echo "changed";
+if($changed_vacation == -1) echo "wrong date format";
+echo "</td></tr>\n";
+echo "<tr><td></td><td>use YYYY-MM-DD</td><td>use '-'  in start field to unset vacation</td></tr>\n";
 echo "        <tr><td>Notification:          </td><td>\n";
 echo "          <select id=\"notify\" name=\"notify\" size=\"1\">\n";
 if($PREF['email']=="emailaddict")
index 3b5303c2cf4a73fc2b8b3fa02dc249ea327f1612..6cc96370bac78718f1e1a8510cecd5be7213e339 100644 (file)
@@ -107,6 +107,15 @@ else
 
        /* display all games the user has played */
        echo "<div class=\"user\">";
+
+       if($myvacation = check_vacation($myid))
+         {
+           $vac_start   = $myvacation[0];
+           $vac_stop    = $myvacation[1];
+           $vac_comment = $myvacation[2];
+           echo "<p class=\"vacation\">Enjoy your vacation (don't forgot to change your settings once you're back). Between $vac_start and $vac_stop other users will see the following message: $vac_comment.</p>\n";
+         }
+
        echo "<h4>These are all your games:</h4>\n";
        /* output legend */
        echo "<p>Session: <br />\n";
@@ -164,10 +173,20 @@ else
                  {
                    $name = DB_get_name('userid',$r[3]);
                    $gameid = $r[1];
+                   /* check if we need to send out a reminder */
                    if(DB_get_reminder($r[3],$gameid)==0)
                      if(time()-strtotime($r[2]) > 60*60*24*7)
                        echo "<a href=\"$INDEX?action=reminder&amp;me=".$r[0]."\">Send a reminder.</a>";
-                   echo "(it's $name's turn)\n";
+
+                   /* check vacaction status of this user */
+                   if($vacation=check_vacation($r[3]))
+                     {
+                       $stop = substr($vacation[1],0,10);
+                       $title = 'begin:'.substr($vacation[0],0,10).' end:'.$vacation[1].' '.$vacation[2];
+                       echo "(it's <span class=\"vacation\" title=\"$title\">$name's (on vacation until $stop)</span> turn)\n";
+                     }
+                   else
+                     echo "(it's $name's turn)\n";
                  };
                if(time()-strtotime($r[2]) > 60*60*24*30)
                  echo "<a href=\"$INDEX?action=cancel&amp;me=".$r[0]."\">Cancel?</a>".