Ejemplo n.º 1
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'));
 }
Ejemplo n.º 2
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()));
 }
Ejemplo n.º 3
0
 /**
  * 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;
 }
Ejemplo n.º 4
0
 /**
  * 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);
 }
Ejemplo n.º 5
0
    /**
     * 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 . '&nbsp;m</span>
			</div>
			<div class="w50 double-height-right">
				<label>&rArr; ' . __('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();
    }
Ejemplo n.º 6
0
 /**
  * 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);
 }
Ejemplo n.º 7
0
 /**
  * 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();
 }
Ejemplo n.º 8
0
 /**
  * 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());
 }
Ejemplo n.º 9
0
 /**
  * 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));
 }
Ejemplo n.º 10
0
 /**
  * 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();
 }
Ejemplo n.º 11
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);
 }
Ejemplo n.º 12
0
 /**
  * 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.'));
     }
 }
Ejemplo n.º 13
0
 /**
  * Display formular
  */
 protected function displayForm()
 {
     $Form = new Form();
     if (!$this->Context->activity()->splits()->isEmpty()) {
         if ($this->handmadeLapsDiffer()) {
             $Form->activateHandmadeDifference();
         }
         $Form->activateHandmadeInfo();
     }
     $Form->display();
 }
Ejemplo n.º 14
0
 /**
  * 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>';
     }
 }
Ejemplo n.º 15
0
    /**
     * 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>&raquo; ' . __('correct now') . '</strong></a>
				</p>');
        }
        $Fieldset->display();
    }
Ejemplo n.º 16
0
    /**
     * 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">';
    }
Ejemplo n.º 17
0
    /**
     * 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>&raquo; ' . $text . '</strong></a>';
        }
        $Fieldset->setHtmlCode('<p class="info block" id="gps-results">' . $textInfo . '</p>
			<p class="info block">' . implode('<br>', $Links) . '</p>');
        $Fieldset->display();
    }
Ejemplo n.º 18
0
 /**
  * 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'));
 }
Ejemplo n.º 19
0
 /**
  * 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'));
 }
Ejemplo n.º 20
0
 /**
  * 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());
 }
Ejemplo n.º 21
0
 /**
  * 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());
 }
Ejemplo n.º 22
0
 /**
  * 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'));
 }
Ejemplo n.º 23
0
 /**
  * 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());
 }
Ejemplo n.º 24
0
<?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')) {
Ejemplo n.º 25
0
 /**
  * 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());
 }
Ejemplo n.º 26
0
 /**
  * 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());
 }
Ejemplo n.º 27
0
 /**
  * @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);
 }