/**
     * Show prognosis for a given distance
     * @param double $distance
     */
    protected function showPrognosis($distance)
    {
        $PB = new PersonalBest($distance);
        $PBTime = $PB->exists() ? Duration::format($PB->seconds()) : '-';
        $Prognosis = new Duration($this->Prognosis->inSeconds($distance));
        $Distance = new Distance($distance);
        $Pace = new Pace($Prognosis->seconds(), $distance, Pace::MIN_PER_KM);
        echo '<p>
				<span class="right">
					' . sprintf(__('<small>from</small> %s <small>to</small> <strong>%s</strong>'), $PBTime, $Prognosis->string(Duration::FORMAT_AUTO, 0)) . '
					<small>(' . $Pace->valueWithAppendix() . ')</small>
				</span>
				<strong>' . $Distance->string(Distance::FORMAT_AUTO, 1) . '</strong>
			</p>';
    }
 /**
  * Init calculations
  */
 protected function runCalculations()
 {
     foreach ($this->Distances as $km) {
         $Prognosis = $this->PrognosisObject->inSeconds($km);
         $PB = new PersonalBest($km, DB::getInstance(), false);
         $PB->lookupWithDetails();
         $VDOTprognosis = new VDOT();
         $VDOTprognosis->fromPace($km, $Prognosis);
         $VDOTpb = new VDOT();
         $VDOTpb->fromPace($km, $PB->seconds());
         $PacePrognosis = new Pace($Prognosis, $km, Pace::MIN_PER_KM);
         $PacePB = new Pace($PB->seconds(), $km, Pace::MIN_PER_KM);
         $DateWithLink = Ajax::trainingLink($PB->activityId(), date('d.m.Y', $PB->timestamp()), true);
         $this->Prognoses[] = array('distance' => Distance::format($km, $km <= 3), 'prognosis' => Duration::format($Prognosis), 'prognosis-pace' => $PacePrognosis->valueWithAppendix(), 'prognosis-vdot' => $VDOTprognosis->uncorrectedValue(), 'diff' => !$PB->exists() ? '-' : ($PB->seconds() > $Prognosis ? '+ ' : '- ') . Duration::format(abs(round($PB->seconds() - $Prognosis))), 'diff-class' => $PB->seconds() > $Prognosis ? 'plus' : 'minus', 'pb' => $PB->seconds() > 0 ? Duration::format($PB->seconds()) : '-', 'pb-pace' => $PB->seconds() > 0 ? $PacePB->valueWithAppendix() : '-', 'pb-vdot' => $PB->seconds() > 0 ? $VDOTpb->uncorrectedValue() : '-', 'pb-date' => $PB->seconds() > 0 ? $DateWithLink : '-');
     }
 }
 /**
  * Display comparison for all years for personal bests
  */
 private function displayPersonalBestYears()
 {
     $year = array();
     $dists = array();
     $kms = is_array($this->Configuration()->value('pb_distances')) ? $this->Configuration()->value('pb_distances') : array(3, 5, 10, 21.1, 42.2);
     foreach ($kms as $km) {
         $dists[$km] = array('sum' => 0, 'pb' => INFINITY);
     }
     if ($this->RaceContainer->num() == 0) {
         return;
     }
     foreach ($this->RaceContainer->allRaces() as $wk) {
         $wk['y'] = date('Y', $wk['time']);
         if (!isset($year[$wk['y']])) {
             $year[$wk['y']] = $dists;
             $year[$wk['y']]['sum'] = 0;
             $year['sum'] = 0;
         }
         $year[$wk['y']]['sum']++;
         foreach ($kms as $km) {
             if ($km == $wk['distance']) {
                 $year[$wk['y']][$km]['sum']++;
                 if ($wk['s'] < $year[$wk['y']][$km]['pb']) {
                     $year[$wk['y']][$km]['pb'] = $wk['s'];
                 }
             }
         }
     }
     echo '<table class="fullwidth zebra-style">';
     echo '<thead>';
     echo '<tr>';
     echo '<th></th>';
     $Years = array_keys($year);
     sort($Years);
     foreach ($Years as $y) {
         if ($y != 'sum') {
             echo '<th>' . $y . '</th>';
         }
     }
     echo '</tr>';
     echo '</thead>';
     echo '<tbody>';
     PersonalBest::activateStaticCache();
     PersonalBest::lookupDistances($kms);
     foreach ($kms as $km) {
         echo '<tr class="r"><td class="b">' . (new Distance($km))->stringAuto(true, 1) . '</td>';
         foreach ($Years as $key) {
             $y = $year[$key];
             if ($key != 'sum') {
                 if ($y[$km]['sum'] != 0) {
                     $PB = new PersonalBest($km);
                     $distance = Duration::format($y[$km]['pb']);
                     if ($PB->seconds() == $y[$km]['pb']) {
                         $distance = '<strong>' . $distance . '</strong>';
                     }
                     echo '<td>' . $distance . ' <small>' . $y[$km]['sum'] . 'x</small></td>';
                 } else {
                     echo '<td><em><small>---</small></em></td>';
                 }
             }
         }
         echo '</tr>';
     }
     echo '<tr class="top-spacer no-zebra r">';
     echo '<td class="b">' . __('In total') . '</td>';
     foreach ($Years as $key) {
         if ($key != 'sum') {
             echo '<td>' . $year[$key]['sum'] . 'x</td>';
         }
     }
     echo '</tr>';
     echo '</tbody>';
     echo '</table>';
 }
Beispiel #4
0
 public function testMultiLookupWithDetailsForIdenticalResults()
 {
     PersonalBest::activateStaticCache();
     $date1 = mktime(12, 0, 0, 6, 1, 2010);
     $date2 = mktime(12, 0, 0, 6, 2, 2010);
     $first = $this->insert(1.0, 180, $date1);
     $second = $this->insert(1.0, 180, $date2);
     $this->assertEquals(1, PersonalBest::lookupDistances(array(1.0), $this->PDO, true));
     $PDO = new \PDO('sqlite::memory:');
     $PB = new PersonalBest(1, $PDO, true, true);
     $this->assertEquals(180, $PB->seconds());
     $this->assertEquals($date1, $PB->timestamp());
     $this->assertEquals($first, $PB->activityId());
 }
 /**
  * Init calculations
  */
 protected function runCalculations()
 {
     if (!$this->PrognosisObject->isValid()) {
         return;
     }
     foreach ($this->Distances as $km) {
         $Prognosis = $this->PrognosisObject->inSeconds($km);
         $PB = new PersonalBest($km, DB::getInstance(), false);
         $PB->lookupWithDetails();
         $VDOTprognosis = new VDOT();
         $VDOTprognosis->fromPace($km, $Prognosis);
         $VDOTpb = new VDOT();
         $VDOTpb->fromPace($km, $PB->seconds());
         $PacePrognosis = new Pace($Prognosis, $km, SportFactory::getSpeedUnitFor(Configuration::General()->runningSport()));
         $PacePB = new Pace($PB->seconds(), $km, SportFactory::getSpeedUnitFor(Configuration::General()->runningSport()));
         $DateWithLink = Ajax::trainingLink($PB->activityId(), date('d.m.Y', $PB->timestamp()), true);
         $this->Prognoses[] = array('distance' => (new Distance($km))->stringAuto(), 'prognosis' => Duration::format($Prognosis), 'prognosis-pace' => $PacePrognosis->valueWithAppendix(), 'prognosis-vdot' => $VDOTprognosis->uncorrectedValue(), 'diff' => !$PB->exists() ? '-' : ($PB->seconds() > $Prognosis ? '+ ' : '- ') . Duration::format(abs(round($PB->seconds() - $Prognosis))), 'diff-class' => $PB->seconds() > $Prognosis ? 'plus' : 'minus', 'pb' => $PB->seconds() > 0 ? Duration::format($PB->seconds()) : '-', 'pb-pace' => $PB->seconds() > 0 ? $PacePB->valueWithAppendix() : '-', 'pb-vdot' => $PB->seconds() > 0 ? $VDOTpb->uncorrectedValue() : '-', 'pb-date' => $PB->seconds() > 0 ? $DateWithLink : '-');
     }
 }
    /**
     * Show prognosis for a given distance
     * @param double $distance
     */
    protected function showPrognosis($distance)
    {
        $PB = new PersonalBest($distance);
        $PB->lookupWithDetails();
        $PBTime = $PB->exists() ? Duration::format($PB->seconds()) : '-';
        $PBString = $PB->exists() ? Ajax::trainingLink($PB->activityId(), $PBTime, true) : $PBTime;
        $Prognosis = new Duration($this->Prognosis->inSeconds($distance));
        $Distance = new Distance($distance);
        $Pace = new Pace($Prognosis->seconds(), $distance, SportFactory::getSpeedUnitFor(Configuration::General()->runningSport()));
        echo '<p>
				<span class="right">
					' . sprintf(__('<small>from</small> %s <small>to</small> <strong>%s</strong>'), $PBString, $Prognosis->string(Duration::FORMAT_AUTO, 0)) . '
					<small>(' . $Pace->valueWithAppendix() . ')</small>
				</span>
				<strong>' . $Distance->stringAuto(true, 1) . '</strong>
			</p>';
    }