コード例 #1
0
ファイル: Weights.php プロジェクト: yisrael1981/weight
 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);
 }
コード例 #2
0
ファイル: Weight.php プロジェクト: yisrael1981/weight
 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);
 }
コード例 #3
0
ファイル: Export.php プロジェクト: yisrael1981/weight
 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";
     }
 }