<?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);
?>
}
-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;
$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;
}
}
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
}
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>
<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>
);',
'CREATE TABLE mbg_meal (
id int(10) not null auto_increment,
- cafe int(10),
name varchar(50),
PRIMARY KEY (id)
);',