From: Penny Leach Date: Sun, 18 Jun 2006 08:56:08 +0000 (+1200) Subject: more work on breakfast! X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=c3621118d8b57590dbfc82efbb3f8ca1c393f914;p=s9y.git more work on breakfast! --- diff --git a/include/breakfast.inc.php b/include/breakfast.inc.php index e09b4a5..bdcab45 100644 --- a/include/breakfast.inc.php +++ b/include/breakfast.inc.php @@ -1,8 +1,66 @@ assign('content_message',' -

breakfast

'); +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 = '

breakfast

+

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 write about breakfast here already, I thought I would make it more official and write a s9y plugin for it.

+

So here it is:

+

So far, you can check out the most recent breakfast only

'; +/* +

Filter by: '.breakfast_cafe_dropdown($cafe).', '.breakfast_people_dropdown($person).', '.breakfast_meal_dropdown($meal).', '.breakfast_date_dropdown($date).'

+

Or, just the most recent breakfast

'; +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 .= '

Most recent breakfast: '.$latest['cafe'].' on '.$latest['nicedate'].' with '.$latest['num'].' people

+ '.((!empty($latest['overallcomment'])) ? '

'.$latest['overallcomment'].'

' : '').' + '; +$categories = array(); +$tabledata = ''; +foreach ($latest['attendees'] as $person) { + $tabledata .= ''; + foreach ($person['scores'] as $category => $score) { + if (!array_key_exists($category,$categories)) { + $categories[$category] = $score['weight']; + } + $tabledata .= ''; + } + $tabledata .= ''; + $tabledata.= ''; + if (!empty($person['comment'])) { + $tabledata .= ''; + } +} +$output .= ''; +} +$output .= ''.$tabledata.'
'.((!empty($person['alias'])) ? $person['alias'] : $person['name']).''.$person['meal'].''.$score['score'].''.$person['totals']['scores'].'%
'.$person['comment'].'
'; +foreach ($categories as $cat => $weight) { + $output .= ''.$cat.' ('.$weight.')Total
'; + +$serendipity['smarty']->assign('content_message',$output); ?> diff --git a/include/tpl/htaccess_rewrite.tpl b/include/tpl/htaccess_rewrite.tpl index 4c7704a..22e8544 100644 --- a/include/tpl/htaccess_rewrite.tpl +++ b/include/tpl/htaccess_rewrite.tpl @@ -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] diff --git a/plugins/serendipity_plugin_breakfast/admin.inc.php b/plugins/serendipity_plugin_breakfast/admin.inc.php index 15ec874..dc9e88e 100644 --- a/plugins/serendipity_plugin_breakfast/admin.inc.php +++ b/plugins/serendipity_plugin_breakfast/admin.inc.php @@ -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 { diff --git a/plugins/serendipity_plugin_breakfast/lib.php b/plugins/serendipity_plugin_breakfast/lib.php index bca5978..98caaee 100644 --- a/plugins/serendipity_plugin_breakfast/lib.php +++ b/plugins/serendipity_plugin_breakfast/lib.php @@ -4,13 +4,17 @@ if (IN_serendipity !== true) { } -function breaKfast_cafe_dropdown() { +function breaKfast_cafe_dropdown($selected=0) { $output = ' '; return $output; @@ -29,16 +33,54 @@ function breakfast_person_dropdown($count) { $output .= ''; return $output; } + +function breakfast_people_dropdown($selected=0) { + static $people; + if (empty($people)) { + $people = serendipity_db_query('SELECT * FROM mbg_person'); + } + $output = ' + '; + 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 = ' '; + 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 = ' + '; 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 = ' + '; + 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 diff --git a/plugins/serendipity_plugin_breakfast/serendipity_plugin_breakfast.php b/plugins/serendipity_plugin_breakfast/serendipity_plugin_breakfast.php index ea93883..c9f7b64 100644 --- a/plugins/serendipity_plugin_breakfast/serendipity_plugin_breakfast.php +++ b/plugins/serendipity_plugin_breakfast/serendipity_plugin_breakfast.php @@ -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 ' @@ -41,38 +44,31 @@ class serendipity_plugin_breakfast extends serendipity_plugin - + - + '; - $total = 0; - $totalweight = 0; - foreach ($latest['random']['scores'] as $score) { + foreach ($attendee['scores'] as $category => $score) { echo ' - + '; - $total += $score['score']; - $totalweight += $score['weight']; - } - if ($totalweight != 100) { - $total = ($total/$totalweight) * 100; } echo ' - + - + - + - + @@ -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) );', diff --git a/templates/sgn/style.css b/templates/sgn/style.css index 794f6de..f5a4c6d 100644 --- a/templates/sgn/style.css +++ b/templates/sgn/style.css @@ -472,4 +472,9 @@ div.serendipity_freetag_taglist { color:#999999; } - +.data td { + background-color:white; +} +.data th { + background-color:white; +}
Most recent breakfast:
'.$latest['name'].' on '.date('j F Y',$latest['date']).' with '.$latest['num'].' people'.$latest['cafe'].' on '.$latest['nicedate'].' with '.$latest['num'].' people
'.((!empty($latest['random']['alias'])) ? $latest['random']['alias'] : $latest['random']['name']) - .' had \''.$latest['random']['meal'].'\':'.((!empty($attendee['alias'])) ? $attendee['alias'] : $attendee['name']) + .' had \''.$attendee['meal'].'\':
'.$score['category'].':'.$score['score'].'/'.$score['weight'].''.$category.':'.$score['score'].'/'.$score['weight'].'
Total'.$total.'%Total'.$attendee['totals']['scores'].'%
The group gave:
Min:'.$latest['min'].'%Min:'.$latest['totals']['min'].'%
Max:'.$latest['max'].'%Max:'.$latest['totals']['max'].'%
Avergage:'.$latest['total'].'%Avergage:'.ceil($latest['totals']['scores']/$latest['totals']['num']).'%
What the hell is this?