public function GET() { $policy = new Policy_LoggedIn($this->app); $app = Config::get('app'); $userid = $policy->getData(); $request = $this->app->request(); if (!$userid) { throw new Exception_Api("Unable to authenticate."); } $days_back = trim($request->get('days_back')); if (!is_numeric($days_back) && $days_back != 'all' && $days_back != 'ytd') { throw new Exception_Api('Missing or invalid days_back field.'); } $mapper = new Mapper_Settings(); $mapper->updateSettingForUserid($userid, 'default_view', $days_back); $settings = $mapper->getFilteredSettingsByUserid($userid); $serverDateTimeZone = new DateTimeZone($app->default_timezone); $userDateTimeZone = new DateTimeZone($settings['timezone']); $serverDateTime = new DateTime("now", $serverDateTimeZone); $userDateTime = new DateTime("now", $userDateTimeZone); $tzDiff = $userDateTime->getOffset() - $serverDateTime->getOffset(); $tzDiff = $tzDiff / (60 * 60); $weight_mapper = new Mapper_Weight(); $weights = $weight_mapper->getWeightsForUser($userid, $days_back); $formatted_weights = array(); foreach ($weights as $weight) { $formatted_weights[] = array('date' => $weight['create_time'], 'weight' => $weight['weight'], 'comment' => htmlentities($weight['comment'])); } return array('data' => $formatted_weights, 'units' => $app->weight_units, 'tz_offset' => $tzDiff); }
public static function getStatsForUser($userid, $days_back) { $weight_mapper = new Mapper_Weight(); $weights = $weight_mapper->getWeightsForUser($userid, $days_back); if (!$weights) { return array('avg' => 'N/A', 'min' => 'N/A', 'max' => 'N/A', 'change_weight' => 'N/A', 'change_per_day' => 'N/A', 'change_per_week' => 'N/A', 'change_per_month' => 'N/A', 'raw_change' => 0); } $total = 0; $min = (double) $weights[0]['weight']; $max = (double) $weights[0]['weight']; foreach ($weights as $weight) { $currWeight = (double) $weight['weight']; $total += $currWeight; if ($currWeight > $max) { $max = $currWeight; } if ($currWeight < $min) { $min = $currWeight; } } $avg = $total / count($weights); $changeWeight = 'N/A'; $changePerDay = 'N/A'; $changePerWeek = 'N/A'; $changePerMonth = 'N/A'; $rawChangePerDay = 0; if (count($weights) > 1) { $startWeight = $weights[count($weights) - 1]; $endWeight = $weights[0]; $diffWeight = $endWeight['weight'] - $startWeight['weight']; $diffTime = $endWeight['create_time'] - $startWeight['create_time']; $diffDays = ceil($diffTime / (60 * 60 * 24)); $changeWeight = round($diffWeight, 1); $changePerDay = $diffWeight / $diffDays; $changePerWeek = $changePerDay * 7; $changePerMonth = $changePerDay * 30.5; $rawChangePerDay = $changePerDay; $changePerDay = round($changePerDay, 1); $changePerWeek = round($changePerWeek, 1); $changePerMonth = round($changePerMonth, 1); } return array('avg' => round($avg, 1), 'min' => $min, 'max' => $max, 'change_weight' => $changeWeight, 'change_per_day' => $changePerDay, 'change_per_week' => $changePerWeek, 'change_per_month' => $changePerMonth, 'raw_change' => $rawChangePerDay); }
public function GET() { $policy = new Policy_LoggedIn($this->app); $policy->ensure(); $userid = $policy->getData(); $date = date('n.j.Y'); header("Content-type: text/csv"); header("Content-disposition: attachment; filename=weights-{$date}.csv"); $mapper = new Mapper_Weight(); $weights = $mapper->getWeightsForUser($userid, 'all'); echo "Date,Weight,Comment\n"; foreach ($weights as $weight) { $time = date('F j Y g:i a', $weight['create_time']); echo $time . "," . $weight['weight']; if ($weight['comment']) { echo ',' . self::escapeCSVValue($weight['comment']); } echo "\n"; } }