diff --git a/lib/helpers.php b/lib/helpers.php index 8bc6c20..dd11448 100644 --- a/lib/helpers.php +++ b/lib/helpers.php @@ -235,24 +235,24 @@ function entry_date($entry, $user) { function default_drink_options() { return [ - 'Coffee', - 'Beer', - 'Cocktail', - 'Tea', - 'Mimosa', - 'Latte', - 'Champagne' + ['title'=>'Coffee','subtitle'=>'','type'=>'drink'], + ['title'=>'Beer','subtitle'=>'','type'=>'drink'], + ['title'=>'Cocktail','subtitle'=>'','type'=>'drink'], + ['title'=>'Tea','subtitle'=>'','type'=>'drink'], + ['title'=>'Mimosa','subtitle'=>'','type'=>'drink'], + ['title'=>'Latte','subtitle'=>'','type'=>'drink'], + ['title'=>'Champagne','subtitle'=>'','type'=>'drink'] ]; } function default_food_options() { return [ - 'Burrito', - 'Banana', - 'Pizza', - 'Soup', - 'Tacos', - 'Mac and Cheese' + ['title'=>'Burrito','subtitle'=>'','type'=>'eat'], + ['title'=>'Banana','subtitle'=>'','type'=>'eat'], + ['title'=>'Pizza','subtitle'=>'','type'=>'eat'], + ['title'=>'Soup','subtitle'=>'','type'=>'eat'], + ['title'=>'Tacos','subtitle'=>'','type'=>'eat'], + ['title'=>'Mac and Cheese','subtitle'=>'','type'=>'eat'] ]; } @@ -274,7 +274,8 @@ function query_user_nearby_options($type, $user_id, $latitude, $longitude) { GROUP BY content, round(gc_distance(latitude, longitude, :latitude, :longitude) / '.$bin_size.') /* group by 1km buckets */ ORDER BY round(gc_distance(latitude, longitude, :latitude, :longitude) / '.$bin_size.'), COUNT(1) DESC /* order by distance and frequency */ ) AS tmp - WHERE num > 2 /* only include things that have been used more than 2 times in this bucket */ + WHERE num >= 1 /* only include things that have been used more than 2 times in this bucket */ + AND dist < 1000 GROUP BY content /* group by name again */ ORDER BY SUM(num) DESC /* order by overall frequency */ LIMIT 6 @@ -394,48 +395,35 @@ function get_entry_options($user_id, $latitude=null, $longitude=null) { $longitude = $last_longitude; } + $num_options = 6; + if($latitude) { $drinks = query_user_nearby_options('drink', $user_id, $latitude, $longitude); } // If there's no nearby data (like if the user isn't including location) then return the most frequently used ones instead - if(count($drinks) == 0) { - $drinks = query_user_frequent_options('drink', $user_id); + if(count($drinks) < $num_options) { + $frequent_drinks = query_user_frequent_options('drink', $user_id); + $drinks = array_merge($drinks, $frequent_drinks); } // If there's less than 4 options available, fill the list with the default options - $num_options = 6; - if(count($drinks) < 6) { - $default = default_drink_options(); - while(count($drinks) < 6) { - $next = array_shift($default); - if(!in_array(['title'=>$next,'type'=>'drink'], $drinks)) { - $drinks[] = [ - 'title' => $next, - 'subtitle' => query_last_eaten($user_id, 'drink', $next), - 'type' => 'drink' - ]; - } - } + if(count($drinks) < $num_options) { + $default_drinks = default_drink_options(); + $drinks = array_merge($drinks, $default_drinks); } + $drinks = array_slice($drinks, 0, $num_options); if($latitude) { $food = query_user_nearby_options('eat', $user_id, $latitude, $longitude); } if(count($food) == 0) { - $food = query_user_frequent_options('eat', $user_id); + $frequent_food = query_user_frequent_options('eat', $user_id); + $food = array_merge($food, $frequent_food); } if(count($food) < $num_options) { - $default = default_food_options(); - while(count($food) < $num_options) { - $next = array_shift($default); - if(!in_array(['title'=>$next,'type'=>'eat'], $food)) { - $food[] = [ - 'title' => $next, - 'subtitle' => query_last_eaten($user_id, 'eat', $next), - 'type' => 'eat' - ]; - } - } + $default_food = default_food_options(); + $food = array_merge($food, $default_food); } + $food = array_slice($food, 0, $num_options); $options = [