Example #1
0
 public function testStaticMethod()
 {
     Configuration::General()->temperatureUnit()->set(TemperatureUnit::CELSIUS);
     $unit = ' ' . Configuration::General()->TemperatureUnit()->unit();
     $this->assertEquals('10.0' . $unit, Temperature::format(10, true, 1));
     $this->assertEquals('12.35' . $unit, Temperature::format(12.3456, true, 2));
 }
Example #2
0
 /**
  * Add to plot
  * @param \Plot $Plot
  * @param int $yAxis
  * @param boolean $addAnnotations [optional]
  */
 public function addTo(Plot &$Plot, $yAxis, $addAnnotations = true)
 {
     if (empty($this->Data)) {
         return;
     }
     parent::addTo($Plot, $yAxis, $addAnnotations);
     switch ($this->XAxis) {
         case DataCollector::X_AXIS_DISTANCE:
             $Plot->setXUnitFactor(Configuration::General()->distanceUnitSystem()->distanceToPreferredUnitFactor(), Configuration::General()->distanceUnitSystem()->distanceUnit());
             $stepSize = Configuration::General()->distanceUnitSystem()->distanceToKmFactor();
             if ($stepSize != round($stepSize)) {
                 end($this->Data);
                 $totalDistanceInKm = key($this->Data);
                 while ($totalDistanceInKm / $stepSize > 15) {
                     $stepSize *= 2;
                 }
                 while ($totalDistanceInKm / $stepSize < 4) {
                     $stepSize /= 2;
                 }
                 $Plot->Options['xaxis']['tickSize'] = $stepSize;
             }
             break;
         case DataCollector::X_AXIS_TIME:
             $Plot->setXAxisAsTime();
             $Plot->setXAxisTimeFormat("%h:%M:%S");
             $Plot->Options['xaxis']['ticks'] = 5;
             break;
         case DataCollector::X_AXIS_INDEX:
             $Plot->hideXLabels();
     }
 }
 /**
  * Parse general values
  */
 protected function parseGeneralValues()
 {
     $this->TrainingObject->setTimestamp(strtotime((string) $this->XML['StartTime']));
     if (!empty($this->XML['categoryName'])) {
         $this->guessSportID((string) $this->XML['categoryName']);
     } else {
         $this->TrainingObject->setSportid(Configuration::General()->mainSport());
     }
     if (!empty($this->XML->Duration['TotalSeconds'])) {
         $this->TrainingObject->setTimeInSeconds(round((double) $this->XML->Duration['TotalSeconds']));
     }
     if (!empty($this->XML->Distance['TotalMeters'])) {
         $this->TrainingObject->setDistance(round((double) $this->XML->Distance['TotalMeters']) / 1000);
     }
     if (!empty($this->XML->Calories['TotalCal'])) {
         $this->TrainingObject->setCalories((int) $this->XML->Calories['TotalCal']);
     }
     if (!empty($this->XML->Location['Name'])) {
         $this->TrainingObject->setRoute((string) $this->XML->Location['Name']);
     }
     if (!empty($this->XML->Weather['Temp'])) {
         $this->TrainingObject->setTemperature((int) $this->XML->Weather['Temp']);
     }
     if (!empty($this->XML->HeartRateMaximumBPM)) {
         $this->TrainingObject->setPulseMax((int) $this->XML->HeartRateMaximumBPM);
     }
     if (!empty($this->XML->HeartRateAverageBPM)) {
         $this->TrainingObject->setPulseAvg((int) $this->XML->HeartRateAverageBPM);
     }
 }
Example #4
0
 /**
  * Move Distance
  * @return bool
  */
 public function nextDistance()
 {
     if (Configuration::General()->distanceUnitSystem()->isImperial()) {
         return $this->nextMile();
     }
     return $this->nextKilometer();
 }
Example #5
0
 /**
  * Athlete
  * @return \Runalyze\Athlete
  */
 public static function Athlete()
 {
     if (!isset(self::$Objects['athlete'])) {
         self::$Objects['athlete'] = new Athlete(Configuration::General()->gender(), Configuration::Data()->HRmax(), Configuration::Data()->HRrest(), null, null, Configuration::Data()->vdot());
     }
     return self::$Objects['athlete'];
 }
 /**
  * Parse general values
  */
 protected function parseGeneralValues()
 {
     $this->TrainingObject->setTimestamp(strtotime((string) $this->XML->GeneralInformation->startDate));
     $this->TrainingObject->setCalories((int) $this->XML->GeneralInformation->calories);
     $this->TrainingObject->setSportid(Configuration::General()->mainSport());
     $this->TrainingObject->setCreatorDetails($this->findCreator());
     $this->TrainingObject->setComment((string) $this->XML->GeneralInformation->name);
 }
 /**
  * Prepare summary
  */
 protected function prepare()
 {
     $this->Title = __('All years');
     $this->Timerange = 366 * DAY_IN_S;
     $this->TimeEnd = mktime(23, 59, 59, 12, 31, date('Y'));
     $this->TimeStart = mktime(0, 0, 1, 1, 1, date('Y', START_TIME));
     $this->AdditionalColumns = 1 * ($this->Sportid == Configuration::General()->runningSport());
 }
Example #8
0
 public function testStaticMethod()
 {
     Configuration::General()->weightUnit()->set(WeightUnit::KG);
     $unit = '&nbsp;' . Configuration::General()->weightUnit()->unit();
     $this->assertEquals('10.0' . $unit, Weight::format(10, true, 1));
     $this->assertEquals('12.346' . $unit, Weight::format(12.3456, true, 3));
     $this->assertEquals('12.3', Weight::format(12.3456, false, 1));
 }
 /**
  * Parse general values
  */
 protected function parseGeneralValues()
 {
     $this->TrainingObject->setTimestamp(strtotime((string) $this->XML->DeviceLog->Header->DateTime));
     if (!empty($this->XML->DeviceLog->Header->Activity)) {
         $this->guessSportID((string) $this->XML->DeviceLog->Header->Activity);
     } else {
         $this->TrainingObject->setSportid(Configuration::General()->runningSport());
     }
 }
Example #10
0
 /**
  * Create series
  * @var \Runalyze\View\Activity\Context $context
  */
 public function __construct(Activity\Context $context)
 {
     $this->isRunning = $context->activity()->sportid() == Configuration::General()->runningSport();
     $cadence = $this->isRunning ? new CadenceUnitRunning(0) : new CadenceUnit(0);
     $this->initOptions();
     $this->initData($context->trackdata(), Trackdata::CADENCE);
     $this->initStrings($cadence);
     $this->manipulateData($cadence);
 }
Example #11
0
 /**
  * Manipulate data
  */
 protected function manipulateData()
 {
     $UnitSystem = Configuration::General()->distanceUnitSystem();
     if ($UnitSystem->isImperial()) {
         $this->Data = array_map(function ($value) {
             return $value * DistanceUnitSystem::FEET_MULTIPLIER / 1000 / 100;
         }, $this->Data);
     }
 }
Example #12
0
 /**
  * Constructor
  * @param \Runalyze\View\Activity\Context $Context
  */
 public function __construct(\Runalyze\View\Activity\Context $Context)
 {
     if ($Context->hasRoute()) {
         $upDown = '+' . ElevationBase::format($Context->route()->elevationUp(), false) . '/-' . ElevationBase::format($Context->route()->elevationDown(), false);
     } else {
         $upDown = '+' . ElevationBase::format($Context->activity()->elevation(), false) . '/-' . ElevationBase::format($Context->activity()->elevation(), false);
     }
     parent::__construct($upDown, Configuration::General()->distanceUnitSystem()->elevationUnit(), __('Elevation up/down'));
 }
Example #13
0
 /**
  * Create series
  * @var \Runalyze\View\Activity\Context $context
  */
 public function __construct(Activity\Context $context)
 {
     $this->paceUnit = $context->sport()->paceUnit();
     $this->paceInTime = $this->paceUnit == \Runalyze\Activity\Pace::MIN_PER_KM || $this->paceUnit == \Runalyze\Activity\Pace::MIN_PER_100M || $this->paceUnit == \Runalyze\Activity\Pace::MIN_PER_500M;
     $this->isRunning = $context->sport()->id() == Configuration::General()->runningSport();
     $this->initOptions();
     $this->initData($context->trackdata(), Trackdata::PACE);
     $this->manipulateData();
 }
Example #14
0
 /**
  * Create series
  * @var \Runalyze\View\Activity\Context $context
  */
 public function __construct(Activity\Context $context)
 {
     $this->paceUnit = $context->sport()->paceUnit();
     $this->paceUnitEnum = $context->sport()->paceUnitEnum();
     $this->isRunning = $context->sport()->id() == Configuration::General()->runningSport();
     $this->initOptions();
     $this->initData($context->trackdata(), Trackdata::PACE);
     $this->manipulateData();
 }
Example #15
0
 public function testWeekstartAndWeekendForSundayBug()
 {
     Configuration::General()->weekStart()->set(WeekStart::SUNDAY);
     $today = mktime(0, 0, 0, 10, 25, 2015);
     $end = mktime(23, 59, 50, 10, 31, 2015);
     $this->assertEquals($today, Time::weekstart($today));
     $this->assertEquals($today, Time::weekstart($end));
     $this->assertEquals($end, Time::weekend($today));
     $this->assertEquals($end, Time::weekend($end));
 }
Example #16
0
 /**
  * Constructor
  * @param \Runalyze\View\Activity\Context $Context
  */
 public function __construct(\Runalyze\View\Activity\Context $Context)
 {
     $Pace = clone $Context->dataview()->pace();
     if (Configuration::General()->distanceUnitSystem()->isImperial()) {
         $Pace->setUnit(new PaceUnit\MinPerMile());
     } else {
         $Pace->setUnit(new PaceUnit\MinPerKilometer());
     }
     parent::__construct($Pace->value(), $Pace->appendix(), '&oslash; ' . __('Pace'));
 }
Example #17
0
 public function testSetupFromDatabase()
 {
     DB::getInstance()->insert('training', array('sportid', 'vdot_by_time', 's', 'distance'), array(Configuration::General()->runningSport(), 60, 16 * 60 + 6, 5));
     DB::getInstance()->insert('training', array('sportid', 'vdot_by_time', 's', 'distance'), array(Configuration::General()->runningSport(), 45, 90 * 60 + 0, 21.1));
     $this->object->setupFromDatabase();
     $this->assertEquals(9 * 60 + 20, $this->object->inSeconds(3), '', 1);
     $this->assertEquals(16 * 60 + 6, $this->object->inSeconds(5), '', 1);
     $this->assertEquals(33 * 60 + 12, $this->object->inSeconds(10), '', 1);
     DB::getInstance()->exec('DELETE FROM `runalyze_training`');
 }
Example #18
0
 /**
  * Create series
  * @var \Runalyze\View\Activity\Context $context
  */
 public function __construct(Activity\Context $context)
 {
     $this->isRunning = $context->activity()->sportid() == Configuration::General()->runningSport();
     $cadence = $this->isRunning ? new Data\Cadence\Running() : new Data\Cadence\General(0);
     $this->initOptions();
     $this->initData($context->trackdata(), Trackdata::CADENCE);
     $this->initStrings($cadence);
     $this->manipulateData($cadence);
     $this->setManualAverage($cadence->useFactor($context->activity()->cadence()));
 }
Example #19
0
 /**
  * Construct laps
  */
 protected function constructLaps()
 {
     $singleDistance = Configuration::General()->distanceUnitSystem()->distanceToKmFactor();
     if ($this->Context->trackdata()->totalDistance() < $singleDistance) {
         $Distances = array($singleDistance);
     } else {
         $Distances = range($singleDistance, floor($this->Context->trackdata()->totalDistance()), $singleDistance);
     }
     $this->Laps = new Laps();
     $this->Laps->calculateFrom($Distances, $this->Context->trackdata(), $this->Context->route());
 }
Example #20
0
 /**
  * Get string to display this dataset value
  * @param \Runalyze\Dataset\Context $context
  * @return string
  */
 public function stringFor(Context $context)
 {
     if (!$context->activity()->splits()->isEmpty()) {
         if ($context->activity()->splits()->hasActiveAndInactiveLaps() || round($context->activity()->splits()->totalDistance()) != round($context->activity()->distance()) || $context->hasType() && $context->type()->id() == Configuration::General()->competitionType()) {
             $Icon = new Icon(Icon::CLOCK);
             $Icon->setTooltip($this->stringForActiveLaps($context->activity()->splits()));
             return $Icon->code();
         }
     }
     return '';
 }
Example #21
0
 /**
  * Set code
  */
 protected function setCode()
 {
     $Reader = new StringReader($this->Context->activity()->comment());
     $Splits = $this->Context->activity()->splits();
     $SplitsView = new Splits\Table($Splits, $this->Context->dataview()->pace()->unitEnum());
     $SplitsView->setDemandedPace($Reader->findDemandedPace());
     if ($this->Context->trackdata()->has(Trackdata\Entity::DISTANCE) && $this->Context->activity()->typeid() == Configuration::General()->competitionType()) {
         $SplitsView->setHalfsOfCompetition($this->computeHalfs());
     }
     $this->Code = $SplitsView->code();
 }
Example #22
0
 /**
  * Init options
  */
 protected function initOptions()
 {
     $this->Label = __('Elevation');
     $this->Color = self::COLOR;
     $this->UnitString = Configuration::General()->distanceUnitSystem()->elevationUnit();
     $this->UnitDecimals = 0;
     $this->TickSize = 10;
     $this->TickDecimals = 0;
     $this->ShowAverage = false;
     $this->ShowMaximum = true;
     $this->ShowMinimum = true;
 }
Example #23
0
 /**
  * Get the timestamp of the start of the week
  * @param int $time
  * @return int
  */
 public static function weekstart($time)
 {
     $w = date("w", $time);
     if (Configuration::General()->weekStart()->isMonday()) {
         if ($w == 0) {
             $w = 6;
         } else {
             $w -= 1;
         }
     }
     return mktime(0, 0, 0, date('m', $time), date('d', $time) - $w, date('Y', $time));
 }
Example #24
0
 public function testSetupFromDatabase()
 {
     DB::getInstance()->insert('training', array('sportid', 'vdot_by_time', 's', 'distance'), array(Configuration::General()->runningSport(), 60, 16 * 60 + 32, 5));
     DB::getInstance()->insert('training', array('sportid', 'vdot_by_time', 's', 'distance'), array(Configuration::General()->runningSport(), 45, 90 * 60 + 0, 21.1));
     $this->object->setupFromDatabase();
     $this->assertEquals(9 * 60 + 33, $this->object->inSeconds(3), '', 1);
     $this->assertEquals(16 * 60 + 32, $this->object->inSeconds(5), '', 1);
     $this->assertEquals(34 * 60 + 26, $this->object->inSeconds(10), '', 1);
     $this->assertEquals(1 * 60 * 60 + 15 * 60 + 56, $this->object->inSeconds(21.1), '', 1);
     $this->assertEquals(2 * 60 * 60 + 41 * 60 + 22, $this->object->inSeconds(42.2), '', 1);
     DB::getInstance()->exec('TRUNCATE TABLE `runalyze_training`');
 }
Example #25
0
 public function testIgnoreVDOTforNotRunning()
 {
     $this->PDO->exec('INSERT INTO `runalyze_training` (`id`, `distance`, `s`, `pulse_avg`, `sportid`, `accountid`) ' . 'VALUES (1, 10, 3600, 150, ' . (Configuration::General()->runningSport() + 1) . ', 0)');
     $_POST = array(JobLoop::VDOT => 'on', JobLoop::JD_POINTS => 'on', JobLoop::TRIMP => 'on');
     $Loop = new JobLoop();
     $Loop->run();
     $data = $this->PDO->query('SELECT * FROM `runalyze_training` WHERE `id`=1 LIMIT 1')->fetch();
     $this->assertEquals(0, $data['vdot']);
     $this->assertEquals(0, $data['vdot_by_time']);
     $this->assertEquals(0, $data['vdot_with_elevation']);
     $this->assertEquals(0, $data['jd_intensity']);
     $this->assertNotEquals(0, $data['trimp']);
 }
Example #26
0
 /**
  * Set manipulation facotr
  */
 protected function setManipulationFactor()
 {
     $this->Factor = 1;
     $this->HRmax = Configuration::Data()->HRmax();
     $this->HRrest = Configuration::Data()->HRrest();
     if (\Runalyze\Context::Athlete()->knowsMaximalHeartRate() && !Configuration::General()->heartRateUnit()->isBPM()) {
         if (\Runalyze\Context::Athlete()->knowsRestingHeartRate() && Configuration::General()->heartRateUnit()->isHRreserve()) {
             $this->Factor = false;
         } else {
             $this->Factor = 100 / Configuration::Data()->HRmax();
         }
     }
 }
Example #27
0
 public function testSetupFromDatabase()
 {
     DB::getInstance()->insert('training', array('sportid', 'vdot_by_time', 's', 'distance'), array(Configuration::General()->runningSport(), 90, 7 * 60 + 30, 3));
     DB::getInstance()->insert('training', array('sportid', 'vdot_by_time', 's', 'distance'), array(Configuration::General()->runningSport(), 60, 16 * 60 + 32, 5));
     DB::getInstance()->insert('training', array('sportid', 'vdot_by_time', 's', 'distance'), array(Configuration::General()->runningSport(), 70, 76 * 60 + 14, 21.1));
     $this->object->setMinimalDistance(4);
     $this->object->setupFromDatabase();
     $this->assertEquals(9 * 60 + 36, $this->object->inSeconds(3), '', 1);
     $this->assertEquals(16 * 60 + 32, $this->object->inSeconds(5), '', 1);
     $this->assertEquals(34 * 60 + 30, $this->object->inSeconds(10), '', 1);
     $this->assertEquals(76 * 60 + 14, $this->object->inSeconds(21.1), '', 1);
     $this->assertEquals(159 * 60 + 7, $this->object->inSeconds(42.2), '', 1);
     DB::getInstance()->exec('DELETE FROM `runalyze_training`');
 }
Example #28
0
 /**
  * Init options
  */
 protected function initOptions()
 {
     $this->Label = __('Distance');
     $this->Color = self::COLOR;
     $this->UnitString = Configuration::General()->distanceUnitSystem()->distanceUnit();
     $this->UnitDecimals = 2;
     if (Configuration::General()->distanceUnitSystem()->isImperial()) {
         $this->UnitFactor = DistanceUnitSystem::MILE_MULTIPLIER;
     }
     $this->TickSize = 10;
     $this->TickDecimals = 0;
     $this->ShowAverage = false;
     $this->ShowMaximum = false;
     $this->ShowMinimum = false;
 }
    /**
     * Initialize $this->ABCData
     */
    private function initData()
    {
        $result = DB::getInstance()->query('
			SELECT
				SUM(`abc`) as `abc`,
				SUM(1) as `num`,
				YEAR(FROM_UNIXTIME(`time`)) as `year`,
				MONTH(FROM_UNIXTIME(`time`)) as `month`
			FROM `' . PREFIX . 'training`
				WHERE `sportid`=' . Configuration::General()->runningSport() . ' AND `accountid`=' . SessionAccountHandler::getId() . '
			GROUP BY `year` DESC, `month` ASC')->fetchAll();
        foreach ($result as $dat) {
            if ($dat['abc'] > 0) {
                $this->ABCData[$dat['year']][$dat['month']] = array('abc' => $dat['abc'], 'num' => $dat['num']);
            }
        }
    }
    /**
     * Init internal array with all trainings
     */
    private function initTrainings()
    {
        $this->Query = DB::getInstance()->query('
			SELECT
				`id`,
				`time`,
				`sportid`,
				`distance`,
				`s`,
				`is_track`,
				`comment`,
				`pulse_avg`,
				`pulse_max`,
				`vdot`,
				`vdot_by_time`
			FROM `' . PREFIX . 'training`
			WHERE `pulse_avg`!=0 AND `typeid`=' . Configuration::General()->competitionType() . '
                        AND `accountid` = ' . SessionAccountHandler::getId() . '
			ORDER BY `time` DESC');
    }