コード例 #1
0
 /**
  * Set content right
  */
 protected function setRightContent()
 {
     if ($this->Context->trackdata()->has(Trackdata\Object::CADENCE)) {
         if ($this->Context->activity()->sportid() == Runalyze\Configuration::General()->runningSport()) {
             $Cadence = new Cadence\Running();
         } else {
             $Cadence = new Cadence\General();
         }
         $Plot = new Activity\Plot\Cadence($this->Context);
         $this->addRightContent('cadence', $Cadence->label(), $Plot);
     }
     if ($this->Context->activity()->sportid() == Runalyze\Configuration::General()->runningSport() && $this->Context->trackdata()->has(Trackdata\Object::TIME) && $this->Context->trackdata()->has(Trackdata\Object::DISTANCE) && $this->Context->trackdata()->has(Trackdata\Object::CADENCE)) {
         $Plot = new Activity\Plot\StrideLength($this->Context);
         $this->addRightContent('stridelength', __('Stride length plot'), $Plot);
     }
     if ($this->Context->trackdata()->has(Trackdata\Object::VERTICAL_OSCILLATION)) {
         $Plot = new Activity\Plot\VerticalOscillation($this->Context);
         $this->addRightContent('verticaloscillation', __('Oscillation plot'), $Plot);
     }
     if ($this->Context->trackdata()->has(Trackdata\Object::VERTICAL_RATIO)) {
         $Plot = new Activity\Plot\VerticalRatio($this->Context);
         $this->addRightContent('verticalratio', __('Vertical ratio'), $Plot);
     }
     if ($this->Context->trackdata()->has(Trackdata\Object::GROUNDCONTACT)) {
         $Plot = new Activity\Plot\GroundContact($this->Context);
         $this->addRightContent('groundcontact', __('Ground contact plot'), $Plot);
     }
 }
コード例 #2
0
ファイル: class.Splits.php プロジェクト: 9x/Runalyze
 /**
  * Create from array
  * @param array $array
  */
 private function createFromArray($array)
 {
     $this->asArray = array();
     $factor = $this->transformDistanceUnit ? Runalyze\Configuration::General()->distanceUnitSystem()->distanceToKmFactor() : 1;
     // TODO escaping
     if (isset($array['km']) && isset($array['time'])) {
         foreach ($array['km'] as $i => $km) {
             $this->asArray[] = array('km' => $km * $factor, 'time' => $array['time'][$i], 'active' => !isset($array['active']) || isset($array['active']) && isset($array['active'][$i]) && $array['active'][$i]);
         }
     }
 }
コード例 #3
0
 /**
  * Init data
  */
 protected function initData()
 {
     $this->paceUnit = $this->Context->sport()->paceUnit();
     $Zones = $this->computeZones();
     $hrMax = Runalyze\Configuration::Data()->HRmax();
     $Pace = new Pace(0, 1, $this->paceUnit);
     $HR = new HeartRate(0, Runalyze\Context::Athlete());
     foreach ($Zones as $paceInSeconds => $Info) {
         if ($Info['time'] > parent::MINIMUM_TIME_IN_ZONE) {
             $Pace->setTime($paceInSeconds);
             $HR->setBPM($Info['time'] > 0 ? $Info['hr'] / $Info['time'] : 0);
             $this->Data[] = array('zone' => $paceInSeconds == 0 ? __('faster') : '> ' . $Pace->valueWithAppendix(), 'time' => $Info['time'], 'distance' => $Info['distance'], 'average' => $HR->asBPM() > 0 ? $HR->string() : '-');
         }
     }
 }
コード例 #4
0
    /**
     * @return string
     */
    protected function getEquipmentTypeCode()
    {
        $Code = '
			<table class="fullwidth zebra-style c">
				<thead>
					<tr>
						<th>' . __('Name') . '</th>
						<th>' . __('Type') . '</th>
						<th>' . __('max.') . Runalyze\Configuration::General()->distanceUnitSystem()->distanceUnit() . '</th>
						<th>' . __('max. Time') . '</th>
						<th>' . __('Sports') . '</th>
						<th>' . __('delete') . ' ' . $this->getDeleteIcon() . '</th>
					</tr>
				</thead>
				<tbody>';
        $Sports = $this->Model->allSports();
        $Types = $this->Model->allEquipmentTypes();
        $Types[] = new EquipmentType\Entity();
        foreach ($Types as $Type) {
            $isNew = !$Type->hasID();
            $id = $isNew ? -1 : $Type->id();
            $delete = $isNew ? '' : '<input type="checkbox" class="delete-checkbox" name="equipmenttype[delete][' . $id . ']">';
            $sportIDs = $isNew ? array() : $this->Model->sportForEquipmentType($id, true);
            $MaxDistance = new Distance($Type->maxDistance());
            $Code .= '
					<tr class="' . ($isNew ? ' unimportant' : '') . '">
						<td><input type="text" class="middle-size" name="equipmenttype[name][' . $id . ']" value="' . $Type->name() . '"></td>
						<td><select name="equipmenttype[input][' . $id . ']"">
								<option value="' . EquipmentType\Entity::CHOICE_SINGLE . '" ' . HTML::Selected(!$Type->allowsMultipleValues()) . '>' . __('Single choice') . '</option>
								<option value="' . EquipmentType\Entity::CHOICE_MULTIPLE . '" ' . HTML::Selected($Type->allowsMultipleValues()) . '>' . __('Multiple choice') . '</option>
							</select></td>
						<td><span class="input-with-unit"><input type="text" class="small-size" name="equipmenttype[max_km][' . $id . ']" value="' . round($MaxDistance->valueInPreferredUnit()) . '"><label class="input-unit">' . $MaxDistance->unit() . '</label></span></td>
						<td><input type="text" class="small-size" name="equipmenttype[max_time][' . $id . ']" value="' . ($Type->maxDuration() > 0 ? Duration::format($Type->maxDuration()) : '') . '" placeholder="d hh:mm:ss"></td>
						<td><input name="equipmenttype[sportid_old][' . $id . ']" type="hidden" value="' . implode(',', $sportIDs) . '">
							<select name="equipmenttype[sportid][' . $id . '][]" class="middle-size" multiple>';
            foreach ($Sports as $Sport) {
                $Code .= '<option value="' . $Sport->id() . '"' . HTML::Selected(in_array($Sport->id(), $sportIDs)) . '>' . $Sport->name() . '</option>';
            }
            $Code .= '</select></td>
						<td>' . $delete . '</td>
					</tr>';
        }
        $Code .= '
			</tbody>
		</table>';
        return $Code;
    }
コード例 #5
0
 /**
  * Constructor
  */
 public function __construct()
 {
     $this->timerStart = 1;
     $this->WeekStart = Runalyze\Configuration::General()->weekStart();
     if (Request::param('y') == self::LAST_6_MONTHS) {
         $this->timerEnd = 26;
     } else {
         if (Request::param('y') == self::LAST_12_MONTHS) {
             $yearEnd = date('Y') - 1;
         } else {
             $yearEnd = (int) Request::param('y');
         }
         $this->timerEnd = date("W", mktime(0, 0, 0, 12, 28, $yearEnd));
         // http://de.php.net/manual/en/function.date.php#49457
     }
     parent::__construct();
 }
コード例 #6
0
 /**
  * @return array
  */
 protected function computeZones()
 {
     // TODO
     // - move this a calculation class
     // - make zones configurable
     $Zones = array();
     $hrMax = Runalyze\Configuration::Data()->HRmax();
     $hasDistance = $this->Context->trackdata()->has(Trackdata\Entity::DISTANCE);
     $Distribution = new TimeSeriesForTrackdata($this->Context->trackdata(), Trackdata\Entity::HEARTRATE, $hasDistance ? array(Trackdata\Entity::DISTANCE) : array());
     $Data = $Distribution->data();
     foreach ($Distribution->histogram() as $bpm => $seconds) {
         $hf = $this->zoneFor($bpm, $hrMax);
         if (!isset($Zones[$hf])) {
             $Zones[$hf] = array('time' => $seconds, 'distance' => $hasDistance ? $Data[$bpm][Trackdata\Entity::DISTANCE] : 0);
         } else {
             $Zones[$hf]['time'] += $seconds;
             $Zones[$hf]['distance'] += $hasDistance ? $Data[$bpm][Trackdata\Entity::DISTANCE] : 0;
         }
     }
     ksort($Zones, SORT_NUMERIC);
     return $Zones;
 }
コード例 #7
0
 /**
  * Parse all post values
  */
 public function parsePostData()
 {
     $Sports = SportFactory::AllSports();
     $Sports[] = array('id' => -1);
     foreach ($Sports as $Data) {
         $id = $Data['id'];
         $columns = array('name', 'img', 'short', 'kcal', 'HFavg', 'distances', 'speed', 'power', 'outside', 'main_equipmenttypeid');
         $values = array($_POST['sport']['name'][$id], $_POST['sport']['img'][$id], $_POST['sport']['short'][$id], $_POST['sport']['kcal'][$id], $_POST['sport']['HFavg'][$id], isset($_POST['sport']['distances'][$id]), $_POST['sport']['speed'][$id], isset($_POST['sport']['power'][$id]), isset($_POST['sport']['outside'][$id]), $_POST['sport']['main_equipmenttypeid'][$id]);
         if (isset($_POST['sport']['delete'][$id]) && $id != Runalyze\Configuration::General()->runningSport()) {
             DB::getInstance()->deleteByID('sport', (int) $id);
         } elseif ($Data['id'] != -1) {
             DB::getInstance()->update('sport', $id, $columns, $values);
         } elseif (strlen($_POST['sport']['name'][$id]) > 2) {
             Db::getInstance()->insert('sport', $columns, $values);
         }
     }
     SportFactory::reInitAllSports();
     Ajax::setReloadFlag(Ajax::$RELOAD_DATABROWSER);
 }
コード例 #8
0
    /**
     * Display table
     */
    public function displayTable()
    {
        if (is_null($this->Equipment)) {
            $this->initTableData();
        }
        echo '<table id="list-of-all-equipment" class="fullwidth zebra-style">
			<thead>
				<tr>
					<th class="{sorter: \'x\'} small">' . __('x-times') . '</th>
					<th>' . __('Name') . '</th>
					<th class="{sorter: \'germandate\'} small">' . __('since') . '</th>
					<th class="{sorter: \'distance\'}">&Oslash; ' . Runalyze\Configuration::General()->distanceUnitSystem()->distanceUnit() . '</th>
					<th>&Oslash; ' . __('Pace') . '</th>
					<th class="{sorter: \'distance\'} small"><small>' . __('max.') . '</small> ' . Runalyze\Configuration::General()->distanceUnitSystem()->distanceUnit() . '</th>
					<th class="small"><small>' . __('min.') . '</small> ' . __('Pace') . '</th>
					<th class="{sorter: \'resulttime\'}">' . __('Time') . '</th>
					<th class="{sorter: \'distance\'}">' . __('Distance') . '</th>
					<th>' . __('Notes') . '</th>
				</tr>
			</thead>
			<tbody>';
        if (!empty($this->Equipment)) {
            foreach ($this->Equipment as $data) {
                $Object = new Model\Equipment\Object($data);
                $in_use = $Object->isInUse() ? '' : ' unimportant';
                $Pace = new Pace($Object->duration(), $Object->distance());
                $MaxPace = new Pace($data['pace_in_s'], 1);
                echo '<tr class="' . $in_use . ' r" style="position: relative">
					<td class="small">' . $data['num'] . 'x</td>
					<td class="b l">' . SearchLink::to('equipmentid', $Object->id(), $Object->name()) . '</td>
					<td class="small">' . $this->formatData($Object->startDate()) . '</td>
					<td>' . ($data['num'] != 0 ? Distance::format($Object->distance() / $data['num']) : '-') . '</td>
					<td>' . ($Object->duration() > 0 ? $Pace->asMinPerKm() . '/km' : '-') . '</td>
					<td class="small">' . Distance::format($data['dist']) . '</td>
					<td class="small">' . $MaxPace->asMinPerKm() . '/km' . '</td>
					<td>' . Duration::format($Object->duration()) . '</td>
					<td>' . Distance::format($Object->totalDistance()) . '</td>
					<td class="small">' . $Object->notes() . '</td>
				</tr>';
            }
        } else {
            echo '<tr><td colspan="9">' . __('You don\'t have any shoes') . '</td></tr>';
        }
        echo '</tbody>';
        echo '</table>';
        Ajax::createTablesorterFor("#list-of-all-equipment", true);
    }
コード例 #9
0
ファイル: global.cleanup.php プロジェクト: n0rthface/Runalyze
echo 'Start to clean accounts ';
$_POST = array(Runalyze\Plugin\Tool\DatabaseCleanup\JobGeneral::ENDURANCE => true, Runalyze\Plugin\Tool\DatabaseCleanup\JobGeneral::MAX_TRIMP => true, Runalyze\Plugin\Tool\DatabaseCleanup\JobGeneral::VDOT => true, Runalyze\Plugin\Tool\DatabaseCleanup\JobGeneral::VDOT_CORRECTOR => true, Runalyze\Plugin\Tool\DatabaseCleanup\JobLoop::ELEVATION => true, Runalyze\Plugin\Tool\DatabaseCleanup\JobLoop::JD_POINTS => true, Runalyze\Plugin\Tool\DatabaseCleanup\JobLoop::TRIMP => true, Runalyze\Plugin\Tool\DatabaseCleanup\JobLoop::VDOT => true);
/**
 * Run single cleanups
 */
$Accounts = $PDO->query('
	SELECT
		id
	FROM `' . PREFIX . 'account`
	WHERE `cleanup`=0');
$AccountUpdate = $PDO->prepare('UPDATE `' . PREFIX . 'account` SET `cleanup`=1 WHERE `id`=?');
while ($Account = $Accounts->fetch()) {
    GlobalCleanupAccount::$ID = $Account['id'];
    DB::getInstance()->setAccountID($Account['id']);
    Runalyze\Context::reset();
    Runalyze\Configuration::loadAll($Account['id']);
    ShoeFactory::reInitAllShoes();
    $JobLoop = new Runalyze\Plugin\Tool\DatabaseCleanup\JobLoop();
    $JobLoop->run();
    $JobGeneral = new Runalyze\Plugin\Tool\DatabaseCleanup\JobGeneral();
    $JobGeneral->run();
    if (OUTPUT) {
        echo $Account['id'] . ':' . EOL;
        echo implode(EOL, $JobLoop->messages());
        echo implode(EOL, $JobGeneral->messages());
        echo EOL . EOL;
    }
    $AccountUpdate->execute(array($Account['id']));
    echo '.' . (CLI ? '' : ' ');
}
/**