]> git.mjollnir.org Git - s9y.git/commitdiff
more work on breakfast!
authorPenny Leach <mjollnir@titania.local>
Sun, 18 Jun 2006 08:56:08 +0000 (20:56 +1200)
committerPenny Leach <penny@catalyst.net.nz>
Tue, 8 Apr 2008 00:03:42 +0000 (12:03 +1200)
include/breakfast.inc.php
include/tpl/htaccess_rewrite.tpl
plugins/serendipity_plugin_breakfast/admin.inc.php
plugins/serendipity_plugin_breakfast/lib.php
plugins/serendipity_plugin_breakfast/serendipity_plugin_breakfast.php
templates/sgn/style.css

index e09b4a54d1b16fa072c135fd2793742e945a67e4..bdcab4549fe77003249a7224b0983ddb972662dd 100644 (file)
@@ -1,8 +1,66 @@
 <?php
-$serendipity['smarty']->assign('content_message','
-<h3 class="serendipity_date">breakfast</h3>');
+require_once(S9Y_INCLUDE_PATH.'/plugins/serendipity_plugin_breakfast/lib.php');
+$cafe = 0;
+if (!empty($_REQUEST['cafe'])) {
+    $cafe = $_REQUEST['cafe'];
+}
+$person = 0;
+if (!empty($_REQUEST['person'])) {
+    $person = $_REQUEST['person'];
+}
 
+$meal = 0;
+if (!empty($_REQUEST['meal'])) {
+    $meal = $_REQUEST['meal'];
+}
+$date = 0;
+if (!empty($_REQUEST['date'])) {
+    $date = $_REQUEST['date'];
+}
 
+$output = '<h3 class="serendipity_date">breakfast</h3>
+<p>For some time, I have been going out for weekly Sunday breakfast with a group of people that ranges somewhere between 5 and 10 in number.  After awhile, we decided we needed some sort of rating system.  Since I already sometimes <a href="http://she.geek.nz/archives/198-breakfast-with-mischief-bad-group.html">write</a> <a href="http://she.geek.nz/archives/228-aro-cafe.html">about</a> <a href="http://she.geek.nz/archives/240-highlights-of-the-weekend.html">breakfast</a> here already, I thought I would make it more official and write a s9y plugin for it.</p>
+<p>So here it is:</p>
+<p>So far, you can check out the most recent breakfast only</p>';
+/*
+<p><form action="?" method="post">Filter by: '.breakfast_cafe_dropdown($cafe).', '.breakfast_people_dropdown($person).', '.breakfast_meal_dropdown($meal).', '.breakfast_date_dropdown($date).'<input type="submit" value="Go!" /></form></p>
+<p><a href="?">Or, just the most recent breakfast</a></p>';
 
 
+if (empty($cafe) && empty($person) && empty($meal) && empty($date)) { // just the most recent
+*/
+    $latest = breakfast_get_complete();
+/*
+} else {
+    $latest = breakfast_get_complete(false,$date,$cafe,$person,$meal);
+}
+*/
+$dates = array_keys($latest);
+$latest = $latest[$dates[0]];
+$output .= '<p><b>Most recent breakfast</b>: '.$latest['cafe'].' on '.$latest['nicedate'].' with '.$latest['num'].' people</p>
+    '.((!empty($latest['overallcomment'])) ? '<p>'.$latest['overallcomment'].'</p>' : '').'
+    <table cellpadding="2" cellspacing="1" bgcolor="black" class="data">';
+$categories = array();
+$tabledata = '';
+foreach ($latest['attendees'] as $person) {
+    $tabledata .= '<tr><td>'.((!empty($person['alias'])) ? $person['alias'] : $person['name']).'</td><td>'.$person['meal'].'</td>';
+    foreach ($person['scores'] as $category => $score) {
+        if (!array_key_exists($category,$categories)) {
+            $categories[$category] = $score['weight'];
+        }
+        $tabledata .= '<td>'.$score['score'].'</td>';
+    }
+    $tabledata .= '<td>'.$person['totals']['scores'].'%</td>';
+    $tabledata.= '</tr>';
+    if (!empty($person['comment'])) {
+        $tabledata .= '<tr><td colspan="'.(count($categories)+3).'">'.$person['comment'].'</td></tr>';
+    }
+}
+$output .= '<tr><td colspan="2">';
+foreach ($categories as $cat => $weight) {
+    $output .= '<td>'.$cat.' ('.$weight.')</td>';
+}
+$output .= '<td>Total</td></tr></tr>'.$tabledata.'</table>';
+
+$serendipity['smarty']->assign('content_message',$output);
 ?>
index 4c7704ae1c2eddb9d12579ffa6363f5df5765897..22e85442b13ac38316f2bd3224464ea88233718f 100644 (file)
@@ -28,7 +28,7 @@ RewriteRule ^{PAT_CSS} {indexFile}?url=/$1 [L,QSA]
 RewriteRule ^index\.(html?|php.+) {indexFile}?url=index.html [L,QSA]
 RewriteRule ^htmlarea/(.*) htmlarea/$1 [L,QSA]
 RewriteRule ^{PAT_ABOUT} {indexFile}?url=/{PAT_ABOUT}/ [L,QSA]
-RewriteRule ^{PAT_BREAKFAST} {indexFile}?url=/{PAT_BREAKFAST}/ [L,QSA]
+RewriteRule ^{PAT_BREAKFAST}/?(.*) {indexFile}?url=/{PAT_BREAKFAST}/$1 [L,QSA]
 RewriteRule (.*\.html?) {indexFile}?url=/$1 [L,QSA]
 
 <Files *.tpl.php>
index 15ec87485880c9fc9a926059355aa2c89d80d8be..dc9e88e5df7087d0d8d222e981b0521bdb7a3de6 100644 (file)
@@ -91,7 +91,7 @@ echo '
              $personid = $_GET['person'.$i];
          }
          if (!empty($_GET['meal_free'.$i])) {
-             $sql = 'INSERT INTO mbg_meal (cafe, name) VALUES ('.$cafeid.',\''.$_GET['meal_free'.$i].'\');';
+             $sql = 'INSERT INTO mbg_meal (name) VALUES (\''.$_GET['meal_free'.$i].'\');';
              serendipity_db_query($sql);
              $mealid = serendipity_db_insert_id();
          } else {
index bca5978318b913ff213e6d0b4f794ef2f284bee4..98caaeecf8b0b4325cf4e1cdfef2210573eb45c6 100644 (file)
@@ -4,13 +4,17 @@ if (IN_serendipity !== true) {
 }
 
 
-function breaKfast_cafe_dropdown() {
+function breaKfast_cafe_dropdown($selected=0) {
     $output = '
     <select name="cafe">
         <option value="0">-- Cafe --</option>';
     $results = serendipity_db_query('SELECT * FROM mbg_cafe');
     foreach ($results as $r) {
-        $output .='<option value="'.$r['id'].'">'.$r['name'].'</option>';
+        $s = '';
+        if ($r['id'] == $selected) {
+            $s = 'selected="selected"';
+        }
+        $output .='<option value="'.$r['id'].'" '.$s.'>'.$r['name'].'</option>';
     }                              
     $output .= '</select>';
     return $output;
@@ -29,16 +33,54 @@ function breakfast_person_dropdown($count) {
     $output .= '</select>';
     return $output;
 }
+
+function breakfast_people_dropdown($selected=0) {
+    static $people;
+    if (empty($people)) {
+        $people = serendipity_db_query('SELECT * FROM mbg_person');        
+    }
+    $output = '
+    <select name="person">
+        <option value="0">-- Person --</option>';
+    foreach ($people as $person) {
+        $s = '';
+        if ($person['id'] == $selected) {
+            $s = 'selected="selected"';
+        }
+        $output .= '<option value="'.$person['id'].'" '.$s.'>'.((!empty($person['alias'])) ? $person['alias'] : $person['name']).'</option>';
+    }                              
+    $output .= '</select>';
+    return $output;
+}
+
 function breakfast_menu_dropdown($count) {
     static $menu;
     if (empty($menu)) {
-        $menu = serendipity_db_query('SELECT m.id,m.name,c.name as cafe FROM mbg_meal m LEFT JOIN mbg_cafe c ON m.cafe = c.id'); 
+        $menu = serendipity_db_query('SELECT m.id,m.name FROM mbg_meal m'); 
     }
     $output = '
     <select name="meal'.$count.'">
         <option value="0">-- Meal --</option>';
     foreach ($menu as $item) {
-        $output .= '<option value="'.$item['id'].'">'.((!empty($item['cafe'])) ? '('.$item['cafe'].')' : '').$item['name'].'</option>';
+        $output .= '<option value="'.$item['id'].'">'.$item['name'].'</option>';
+    }                              
+    $output .= '</select>';
+    return $output;
+}
+function breakfast_meal_dropdown($selected=0) {
+    static $menu;
+    if (empty($menu)) {
+        $menu = serendipity_db_query('SELECT m.id,m.name FROM mbg_meal m'); 
+    }
+    $output = '
+    <select name="meal'.$count.'">
+        <option value="0">-- Meal --</option>';
+    foreach ($menu as $item) {
+        $s = '';
+        if ($item['id'] == $selected) {
+            $s = 'selected="selected"';
+        }
+        $output .= '<option value="'.$item['id'].'" '.$s.'>'.$item['name'].'</option>';
     }                              
     $output .= '</select>';
     return $output;
@@ -56,51 +98,126 @@ function breakfast_scoring_dropdowns($count) {
         }
     }
     return $output;
-    
+}
+function breakfast_date_dropdown($selected=0) {
+    $dates = serendipity_db_query('SELECT e.date,c.name from mbg_event e JOIN mbg_cafe c ON e.cafe = c.id ORDER BY e.date DESC');
+    $output = '
+    <select name="date">
+        <option value="0">-- Date --</option>';
+    foreach ($dates as $date) {
+        $s = '';
+        if ($date['date'] == $selected) {
+            $s = 'selected="selected"';
+        }
+        $output .= '<option value="'.$date['date'].'">'.date('j F Y',$date['date']).' ('.$date['name'].')</option>';
+    }
+    $output .= '</select>';
+    return $output;
 }
 
-function breakfast_get_latest() {
-    $sql = 'SELECT c.name, e.date, e.id as event, count(a.id) as num FROM mbg_cafe c 
-            JOIN mbg_event e ON e.cafe = c.id 
-            JOIN mbg_attendee a ON a.event = e.id GROUP BY a.event';
-    if (!$latest = serendipity_db_query($sql,true)) {
+function breakfast_get_complete($latest=true,$date=0,$cafe=0,$person=0,$meal=0) {
+    $sql = breakfast_generate_sql($latest,$date,$cafe,$person,$meal);
+    if (!$latest = serendipity_db_query($sql)) {
         return false;
     }
-    $sql = 'SELECT p.name,p.alias,m.name as meal, a.id FROM mbg_attendee a JOIN mbg_person p ON a.person = p.id JOIN mbg_meal m ON a.ate = m.id 
-            WHERE a.event = '.$latest['event'].' ORDER BY rand() LIMIT 1';
-    $latest['random'] = serendipity_db_query($sql,true);
-    $sql = 'SELECT s.score,c.weight,c.category FROM mbg_score s JOIN mbg_category c ON s.category = c.id WHERE s.attendee = '.$latest['random']['id'];
-    $latest['random']['scores'] = serendipity_db_query($sql);
-    $sql = 'SELECT sum(s.score) as score, sum(c.weight) as weight FROM mbg_score s 
-            JOIN mbg_category c ON s.category = c.id 
-            JOIN mbg_attendee a ON s.attendee = a.id WHERE a.event = '.$latest['event'].' GROUP BY s.attendee';
-    $totals = serendipity_db_query($sql);
-    $num = 0;
-    $grandtotal = 0;
-    $min = 100;
-    $max = 0;
-    $thistotal = 0;
-    foreach ($totals as $total) {
-        if ($total['weight'] != 100) {
-            $thistotal = (($total['score']/$total['weight']) * 100);
-            $grandtotal += $thistotal;
+
+    // get the categories, we need them
+    $categories = serendipity_db_query('SELECT * FROM mbg_category');
+    $cattemplate = array();
+    foreach ($categories as $cat) {
+        $cattemplate[$cat['category']] = array();
+    }
+    // what has to be distinct is the event, we have to attach all other stuff to that... 
+    $events = array();
+    $lastperson = null;
+    foreach ($latest as $event) {
+        if (!array_key_exists($event['date'],$events)) {
+            $events[$event['date']] = array();
+            $events[$event['date']]['attendees'] = array();
+            $events[$event['date']]['cafe'] = $event['cafe'];
+            $events[$event['date']]['overallcomment'] = $event['overallcomment'];
+            $events[$event['date']]['nicedate'] = date('j F Y',$event['date']);
+            $events[$event['date']]['totals'] = array();
+            $events[$event['date']]['totals']['scores'] = 0;
+            $events[$event['date']]['totals']['min'] = 100;
+            $events[$event['date']]['totals']['max'] = 0;
+            $events[$event['date']]['totals']['num'] = 0;
+        }
+        if (!array_key_exists($event['person'],$events[$event['date']]['attendees'])) {
+            $events[$event['date']]['attendees'][$event['person']] = array();
+            $events[$event['date']]['attendees'][$event['person']]['name'] = $event['person'];
+            $events[$event['date']]['attendees'][$event['person']]['alias'] = $event['alias'];
+            $events[$event['date']]['attendees'][$event['person']]['meal'] = $event['meal'];
+            $events[$event['date']]['attendees'][$event['person']]['scores'] = $cattemplate;
+            $events[$event['date']]['attendees'][$event['person']]['totals'] = array();
+            $events[$event['date']]['attendees'][$event['person']]['totals']['scores'] = 0;
+            $events[$event['date']]['attendees'][$event['person']]['totals']['weights'] = 0;
+            $events[$event['date']]['attendees'][$event['person']]['ate'] = $event['meal'];
+            $events[$event['date']]['attendees'][$event['person']]['comment'] = $event['comment'];
+        }
+        $events[$event['date']]['attendees'][$event['person']]['scores'][$event['category']] = array();
+        $events[$event['date']]['attendees'][$event['person']]['scores'][$event['category']]['weight'] = $event['weight'];
+        $events[$event['date']]['attendees'][$event['person']]['scores'][$event['category']]['score'] = $event['score'];
+        $events[$event['date']]['attendees'][$event['person']]['totals']['scores'] +=  $event['score'];
+        $events[$event['date']]['attendees'][$event['person']]['totals']['weights'] +=  $event['weight'];
+        
+    }
+
+    // now just make up the totals and we're done!
+    foreach ($events as $date => $event) {
+        $events[$date]['num'] = count($events[$date]['attendees']);
+        foreach ($event['attendees'] as $person => $attendee) {
+            if ($attendee['totals']['weights'] != 100) {
+                $events[$date]['attendees'][$person]['totals']['unweighted'] = $attendee['totals']['scores'];
+                $events[$date]['attendees'][$person]['totals']['scores'] = ceil(($attendee['totals']['scores']/$attendee['totals']['weights'])*100);
+            }
+            $events[$date]['totals']['scores'] += $events[$date]['attendees'][$person]['totals']['scores'];
+            $events[$date]['totals']['num']++;
+            if ($events[$date]['attendees'][$person]['totals']['scores'] < $events[$date]['totals']['min']) {
+                $events[$date]['totals']['min'] = $events[$date]['attendees'][$person]['totals']['scores'];
+            }
+            if ($events[$date]['attendees'][$person]['totals']['scores'] > $events[$date]['totals']['max']) {
+                $events[$date]['totals']['max'] = $events[$date]['attendees'][$person]['totals']['scores'];
+            }
+        }
+    }
+    return $events;
+}
+
+function breakfast_generate_sql($latest=true,$date=0,$cafe=0,$person=0,$meal=0) {
+    $sql = 'SELECT c.name as cafe, e.date as date, e.comment as overallcomment,
+            e.id as event,p.name as person, p.alias as alias, a.comment as comment,
+            m.name as meal,s.score as score,cat.category as category, cat.weight as weight
+            FROM mbg_cafe c 
+            JOIN mbg_event e ON e.cafe = c.id 
+            JOIN mbg_attendee a ON a.event = e.id 
+            JOIN mbg_person p ON a.person = p.id
+            JOIN mbg_score s ON s.attendee = a.id
+            JOIN mbg_category cat ON s.category = cat.id
+            JOIN mbg_meal m ON a.ate = m.id
+            ';
+    if (!empty($latest)) {
+        $sql .= ' WHERE e.date = (SELECT max(date) FROM mbg_event)';
+    } else {
+        $w = false;
+        if (!empty($meal)) {
+            $sql .= ((empty($w)) ? ' WHERE ' : ' AND '). 'a.ate = '.$meal;
+            $w = true;
         }
-        else {
-            $grandtotal += $total['score'];
-            $thistotal = $total['score'];
+        if (!empty($person)) {
+            $sql .= ((empty($w)) ? ' WHERE ' : ' AND '). 'a.person = '.$person;
+            $w = true;
         }
-        $num++;
-        if ($thistotal < $min) {
-            $min = $thistotal;
+        if (!empty($date)) {
+            $sql .= ((empty($w)) ? ' WHERE ' : ' AND '). 'e.date = '.$date;
+            $w = true;
         }
-        if ($thistotal > $max) {
-            $max = $thistotal;
+        if (!empty($cafe)) {
+            $sql .= ((empty($w)) ? ' WHERE ' : ' AND ').' c.id = '.$cafe;
+            $w = true;
         }
     }
-    $latest['total'] = $grandtotal/$num;
-    $latest['min'] = $min;
-    $latest['max'] = $max;
-    return $latest;
+    return $sql .' ORDER BY e.date DESC';
 }
 
 ?>
\ No newline at end of file
index ea9388354f7dd2b576378f13d72ddab4b24dbdf2..c9f7b645ec322f1ca16869d6b4f4af4bf67f8154 100644 (file)
@@ -31,9 +31,12 @@ class serendipity_plugin_breakfast extends serendipity_plugin
     }
 
     function generate_content(&$title) {
-        if (!$latest = breakfast_get_latest()) {
+        if (!$latest = breakfast_get_complete()) {
             return false;
         }
+        $dates = array_keys($latest);
+        $latest = $latest[$dates[0]];
+        $attendee = $latest['attendees'][array_rand($latest['attendees'])];
         $title = $this->title;
         echo '
 <table>
@@ -41,38 +44,31 @@ class serendipity_plugin_breakfast extends serendipity_plugin
     <td colspan="2" nowrap="nowrap"><b>Most recent breakfast:</b></td>
   </tr>
   <tr>
-    <td colspan="2">'.$latest['name'].' on '.date('j F Y',$latest['date']).' with '.$latest['num'].' people</td>
+    <td colspan="2">'.$latest['cafe'].' on '.$latest['nicedate'].' with '.$latest['num'].' people</td>
   </tr>
   <tr>
-    <td colspan="2"><b>'.((!empty($latest['random']['alias'])) ? $latest['random']['alias'] : $latest['random']['name'])
-            .' had \''.$latest['random']['meal'].'\':</b></td>
+    <td colspan="2"><b>'.((!empty($attendee['alias'])) ? $attendee['alias'] : $attendee['name'])
+            .' had \''.$attendee['meal'].'\':</b></td>
   </tr>';
-        $total = 0;
-        $totalweight = 0;
-        foreach ($latest['random']['scores'] as $score) {
+        foreach ($attendee['scores'] as $category => $score) {
             echo '  <tr>
-    <td>'.$score['category'].':</td><td>'.$score['score'].'/'.$score['weight'].'</td>
+    <td>'.$category.':</td><td>'.$score['score'].'/'.$score['weight'].'</td>
   </tr>';
-            $total += $score['score'];
-            $totalweight += $score['weight'];
-        }
-        if ($totalweight != 100) {
-            $total = ($total/$totalweight) * 100;
         }
         echo '  <tr>
-    <td>Total</td><td>'.$total.'%</td>
+    <td>Total</td><td>'.$attendee['totals']['scores'].'%</td>
   </tr>
   <tr>
     <td colspan="2"><b>The group gave:</td>
   </tr>
   <tr>
-    <td>Min:</td><td>'.$latest['min'].'%</td>
+    <td>Min:</td><td>'.$latest['totals']['min'].'%</td>
   </tr>
   <tr>
-    <td>Max:</td><td>'.$latest['max'].'%</td>
+    <td>Max:</td><td>'.$latest['totals']['max'].'%</td>
   </tr>
   <tr>
-    <td>Avergage:</td><td>'.$latest['total'].'%</td>
+    <td>Avergage:</td><td>'.ceil($latest['totals']['scores']/$latest['totals']['num']).'%</td>
   </tr>
   <tr>
       <td nowrap="nowrap" colspan="2"><a href="/breakfast/">What the hell is this?</a></td>
@@ -124,7 +120,6 @@ class serendipity_plugin_breakfast extends serendipity_plugin
 );',
                    'CREATE TABLE mbg_meal (
        id int(10) not null auto_increment,
-       cafe int(10),
        name varchar(50),
        PRIMARY KEY (id)
 );',
index 794f6de03899800b9800d6b9e38d6e7d76c26b67..f5a4c6d45d0ae179c43a52827cbeead36a614ffa 100644 (file)
@@ -472,4 +472,9 @@ div.serendipity_freetag_taglist {
  color:#999999;
 }
 
-
+.data td {
+ background-color:white;
+}
+.data th {
+ background-color:white;
+}