/** * 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')); }
/** * 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())); }
/** * Splits are not complete * "Complete" means: all laps are active and fill total distance * * @param \Runalyze\View\Activity\Context $context * @return boolean */ protected function splitsAreNotComplete(Activity\Context $context) { if ($context->activity()->splits()->isEmpty() || $context->activity()->splits()->totalDistance() <= 0) { return false; } if ($context->activity()->splits()->hasActiveAndInactiveLaps()) { return true; } if (abs($context->activity()->splits()->totalDistance() - $context->activity()->distance()) > 0.02 * $context->activity()->distance()) { return true; } return false; }
/** * Load data * @param \Runalyze\View\Activity\Context $context */ protected function loadData(Activity\Context $context) { $Splits = $context->activity()->splits(); if ($Splits->isEmpty() || $Splits->totalDistance() <= 0) { $this->Plot->raiseError(__('There are no manual laps.')); return; } $this->readDataFromSplits($Splits, !$Splits->hasActiveLaps(2)); $num = count($this->Data); $Reader = new StringReader($context->activity()->comment()); $this->demandedPace = $Reader->findDemandedPace(); $this->achievedPace = array_sum($this->Data) / $num; $this->manipulateData($num); }
/** * Display with corrector */ protected function displayWithElevation() { if ($this->Context->hasRoute() && ($this->Context->route()->elevationUp() > 0 || $this->Context->route()->elevationDown())) { $up = $this->Context->route()->elevationUp(); $down = $this->Context->route()->elevationDown(); } else { $up = $this->Context->activity()->elevation(); $down = $up; } $Modifier = new Elevation\DistanceModifier($this->Context->activity()->distance(), $up, $down, Configuration::Vdot()); $VDOT = new JD\VDOT(0, new JD\VDOTCorrector(Configuration::Data()->vdotFactor())); $VDOT->fromPaceAndHR($Modifier->correctedDistance(), $this->Context->activity()->duration(), $this->Context->activity()->hrAvg() / Configuration::Data()->HRmax()); $Fieldset = new FormularFieldset(__('Correction: considering elevation')); $Fieldset->setHtmlCode(' <p class="warning small ' . (Configuration::Vdot()->useElevationCorrection() ? 'hide' : '') . '"> ' . __('This correction method is currently unused.') . ' </p> <div class="w50"> <label>' . __('Up/Down') . '</label> <span class="as-input">+' . $up . '/-' . $down . ' m</span> </div> <div class="w50 double-height-right"> <label>⇒ ' . __('VDOT') . '</label> <span class="as-input ' . (!Configuration::Vdot()->useElevationCorrection() ? '' : 'highlight') . '">' . $VDOT->value() . '</span> </div> <div class="w50"> <label>' . __('Influence') . '</label> <span class="as-input">' . sprintf("%+d", 1000 * $Modifier->additionalDistance()) . 'm = ' . Distance::format($Modifier->correctedDistance(), false, 3) . '</span> </div> '); $Fieldset->display(); }
/** * Create series * @var \Runalyze\View\Activity\Context $context */ public function __construct(Activity\Context $context) { $this->initOptions(); $this->initData($context->trackdata(), Trackdata::VERTICAL_OSCILLATION); $this->manipulateData(); $this->setManualAverage($context->activity()->verticalOscillation() * 0.1); }
/** * Create series * @var \Runalyze\View\Activity\Context $context */ public function __construct(Activity\Context $context) { $this->initOptions(); $this->initData($context->trackdata(), Trackdata::GROUNDCONTACT_BALANCE); $this->setManualAverage($context->activity()->groundContactBalance() / 100); $this->manipulateData(); }
/** * Create series * @var \Runalyze\View\Activity\Context $context */ public function __construct(Activity\Context $context) { $this->initOptions(); $this->initData($context->trackdata()); $this->manipulateData(); $this->setManualAverage($context->activity()->strideLength()); }
/** * Create series * @var \Runalyze\View\Activity\Context $context */ public function __construct(Activity\Context $context) { $this->setManipulationFactor(); $this->initOptions(); $this->initData($context->trackdata(), Trackdata::HEARTRATE, true); $this->manipulateData(); $this->setManualAverage(round(100 * $context->activity()->hrAvg() / $this->HRmax)); }
/** * Display shared menu */ protected function displaySharedMenu() { $User = AccountHandler::getDataForId(SharedLinker::getUserId()); $this->ToolbarLinks = array(); $this->ToolbarLinks[] = SharedLinker::getStandardLinkTo($this->Context->activity()->id(), Icon::$ATTACH); $this->ToolbarLinks[] = '<a href="shared/' . $User['username'] . '/" target="_blank">' . Icon::$TABLE . '</a>'; $this->displayHeaderMenu(); }
/** * 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); }
/** * Construct * @param \Runalyze\View\Activity\Context $context */ public function __construct(Activity\Context $context) { $this->setKey(); $this->setID($context->activity()->id()); $this->initPlot(); $this->initData($context); if (!$this->dataIsAvailable()) { $this->Plot->raiseError(__('No plot available.')); } }
/** * Display formular */ protected function displayForm() { $Form = new Form(); if (!$this->Context->activity()->splits()->isEmpty()) { if ($this->handmadeLapsDiffer()) { $Form->activateHandmadeDifference(); } $Form->activateHandmadeInfo(); } $Form->display(); }
/** * Display prev/next navigation */ protected function displayNavigation() { $prevId = Linker::prevId($this->Context->activity()->id(), $this->Context->activity()->timestamp()); $nextId = Linker::nextId($this->Context->activity()->id(), $this->Context->activity()->timestamp()); if ($prevId !== false) { echo Ajax::trainingLink($prevId, '<i class="fa fa-fw fa-chevron-left"></i>'); } else { echo '<i class="transparent-70 fa-grey fa fa-fw fa-chevron-left"></i>'; } if ($nextId !== false) { echo Ajax::trainingLink($nextId, '<i class="fa fa-fw fa-chevron-right"></i>'); } else { echo '<i class="transparent-70 fa-grey fa fa-fw fa-chevron-right"></i>'; } }
/** * Display elevation correction */ protected function displayElevationCorrection() { $Fieldset = new FormularFieldset(__('Elevation correction')); if ($this->Context->route()->elevationsCorrected()) { $Fieldset->addSmallInfo(__('Elevation data have been corrected.')); } else { $Linker = new Runalyze\View\Activity\Linker($this->Context->activity()); // TODO: add link to "reload" if correction has been done via ajax $Fieldset->setHtmlCode('<p class="warning small block" id="gps-results"> ' . __('Elevation data has not been corrected.') . '<br> <br> <a class="ajax" target="gps-results" href="' . $Linker->urlToElevationCorrection() . '"><strong>» ' . __('correct now') . '</strong></a> </p>'); } $Fieldset->display(); }
/** * Display activity data point */ protected function displayActivityDataPoint() { // TODO: Elevation? //$elevation = ... $pace = $this->TrackdataLoop->average(Model\Trackdata\Entity::PACE); echo ' <meta property="fitness:metrics:location:latitude" content="' . $this->RouteLoop->latitude() . '"> <meta property="fitness:metrics:location:longitude" content="' . $this->RouteLoop->longitude() . '"> <meta property="fitness:metrics:timestamp" content="' . date('Y-m-d\\TH:i', $this->Context->activity()->timestamp() + $this->TrackdataLoop->time()) . '"> <meta property="fitness:metrics:distance:value" content="' . $this->TrackdataLoop->distance() . '"> <meta property="fitness:metrics:distance:units" content="km"> <meta property="fitness:metrics:pace:value" content="' . $pace / 1000 . '"> <meta property="fitness:metrics:pace:units" content="s/m"> <meta property="fitness:metrics:speed:value" content="' . ($pace > 0 ? 1000 / $pace : 0) . '"> <meta property="fitness:metrics:speed:units" content="m/s">'; }
/** * Display elevation correction */ protected function displayElevationCorrection() { $Url = (new Runalyze\View\Activity\Linker($this->Context->activity()))->urlToElevationCorrection(); $Fieldset = new FormularFieldset(__('Elevation correction')); $Links = array(); if ($this->Context->route()->elevationsCorrected()) { $textInfo = __('Elevation data has been corrected.') . ($this->Context->route()->elevationsSource() != '' ? ' (' . $this->Context->route()->elevationsSource() . ')' : ''); $rawLinks = $this->getLinksForCorrectionStrategies(); } else { $textInfo = __('Elevation data has not been corrected.'); $rawLinks = array('' => __('correct now')); } foreach ($rawLinks as $urlAppendix => $text) { $Links[] = '<a class="ajax" target="gps-results" href="' . $Url . $urlAppendix . '"><strong>» ' . $text . '</strong></a>'; } $Fieldset->setHtmlCode('<p class="info block" id="gps-results">' . $textInfo . '</p> <p class="info block">' . implode('<br>', $Links) . '</p>'); $Fieldset->display(); }
/** * Constructor * @param \Runalyze\View\Activity\Context $Context */ public function __construct(\Runalyze\View\Activity\Context $Context) { parent::__construct(\Runalyze\Activity\GroundcontactBalance::format($Context->activity()->groundContactBalance(), false), '%', __('Ground Contact Balance')); }
/** * Constructor * @param \Runalyze\View\Activity\Context $Context */ public function __construct(\Runalyze\View\Activity\Context $Context) { parent::__construct(\Helper::Unknown(\Runalyze\Activity\VerticalRatio::format($Context->activity()->verticalRatio(), false), '-'), '%', __('Vertical Ratio')); }
/** * Create series * @var \Runalyze\View\Activity\Context $context */ public function __construct(Activity\Context $context) { $this->initOptions(); $this->initData($context->trackdata(), Trackdata::POWER); $this->setManualAverage($context->activity()->power()); }
/** * Create series * @var \Runalyze\View\Activity\Context $context */ public function __construct(Activity\Context $context) { $this->initOptions(); $this->initData($context->trackdata(), Trackdata::GROUNDCONTACT); $this->setManualAverage($context->activity()->groundcontact()); }
/** * Constructor * @param \Runalyze\View\Activity\Context $Context */ public function __construct(\Runalyze\View\Activity\Context $Context) { $leftRight = $Context->activity()->groundContactBalanceLeft() / 100 . 'L/' . $Context->activity()->groundContactBalanceRight() / 100 . 'R'; parent::__construct($leftRight, '%', __('Ground Contact Balance')); }
/** * Constructor * @param \Runalyze\View\Activity\Context $Context */ public function __construct(\Runalyze\View\Activity\Context $Context) { $WindDirection = $Context->activity()->weather()->windDegree(); $CardinalDirection = CardinalDirection::getDirection($WindDirection->value()); parent::__construct(\Helper::Unknown($CardinalDirection . ' / ' . $WindDirection->string(false), '-'), $WindDirection->unit(), $WindDirection->label()); }
<?php /** * File for displaying a training. * Call: call.Training.display.php?id= */ require '../inc/class.Frontend.php'; use Runalyze\Model\Activity; use Runalyze\View\Activity\Context; $Frontend = new Frontend(); $Context = new Context(Request::sendId(), SessionAccountHandler::getId()); switch (Request::param('action')) { case 'changePrivacy': $oldActivity = clone $Context->activity(); $Context->activity()->set(Activity\Entity::IS_PUBLIC, !$Context->activity()->isPublic()); $Updater = new Activity\Updater(DB::getInstance(), $Context->activity(), $oldActivity); $Updater->setAccountID(SessionAccountHandler::getId()); $Updater->update(); break; case 'delete': $Factory = Runalyze\Context::Factory(); $Deleter = new Activity\Deleter(DB::getInstance(), $Context->activity()); $Deleter->setAccountID(SessionAccountHandler::getId()); $Deleter->setEquipmentIDs($Factory->equipmentForActivity(Request::sendId(), true)); $Deleter->delete(); echo '<div class="panel-content"><p id="submit-info" class="error">' . __('The activity has been removed') . '</p></div>'; echo '<script>Runalyze.Statistics.resetUrl();Runalyze.reloadContent();</script>'; exit; break; } if (!Request::param('silent')) {
/** * Constructor * @param \Runalyze\View\Activity\Context $Context */ public function __construct(\Runalyze\View\Activity\Context $Context) { $Distance = new \Runalyze\Activity\Distance($Context->activity()->distance()); parent::__construct(\Helper::Unknown(round($Distance->valueInPreferredUnit(), 2), '-'), $Distance->unit(), $Distance->label()); }
/** * Constructor * @param \Runalyze\View\Activity\Context $Context */ public function __construct(\Runalyze\View\Activity\Context $Context) { $humidity = $Context->activity()->weather()->humidity(); parent::__construct(\Helper::Unknown($humidity->string(false), '-'), $humidity->unit(), $humidity->label()); }
/** * @param \Runalyze\View\Activity\Context $context * @param int $offset * @return \Runalyze\Calculation\NightDetector $this-reference */ public function setFromContext(Context $context, $offset = 0) { if (!$context->hasRoute()) { $this->Value = null; return $this; } return $this->setFromEntities($context->activity(), $context->route(), $offset); }