/**
  * Return some cumulative stats for events matching the current filters
  * Stats returned depend on the specific factory
  * @return array[]
  */
 public function cumulativeStats()
 {
     $db = JFactory::getDBO();
     $query = $db->getQuery(true);
     $query->select(array("COUNT(1) AS count", "SUM(miles) AS sum_miles", "AVG(miles) AS mean_miles", "SUM(\n\t\t\t\tCASE \n\t\t\t\t\tWHEN distance IS NOT NULL THEN distance\n\t\t\t\t\tELSE (miles*" . UnitConvert::getUnit(UnitConvert::Mile, 'factor') . ")\n\t\t\t\tEND\n\t\t\t) AS sum_distance", "AVG(\n\t\t\t\tCASE \n\t\t\t\t\tWHEN distance IS NOT NULL THEN distance\n\t\t\t\t\tELSE (miles*" . UnitConvert::getUnit(UnitConvert::Mile, 'factor') . ")\n\t\t\t\tEND\n\t\t\t) AS mean_distance"));
     $this->applyFilters($query);
     $db->setQuery($query);
     return $db->loadAssoc();
 }
Exemplo n.º 2
0
echo $this->form->getLabel("file");
echo $this->form->getInput("file");
?>
	
	<input name="upload" type="submit" class="submit gpx-upload" value="Upload" />

<?php 
if (isset($this->wi)) {
    ?>
	<div id="map" style="width:100%;height:400px;"></div>
<?php 
}
?>
	
	<?php 
if ($this->gotTrack) {
    ?>
		<p>Uploaded a track with <?php 
    echo $this->track->numWaypoints();
    ?>
 waypoints (<?php 
    echo UnitConvert::displayDistance($this->track->getDistance(), UnitConvert::Metre, UnitConvert::Mile);
    ?>
).
		Please check the route on the map, and click Save if it's OK.
			<input name="submit" type="submit" class="submit" value="Save" />
		</p>
	<?php 
}
?>
</form>
Exemplo n.º 3
0
 /**
  * Checks if the route given is valid for a particular WalkInstance
  * * The date must be the same
  * * The start place must be within 1km of the planned start
  * * The end place must be within 1km of the planned end
  * * The length must be between 0.5 and 2 times the planned length
  * (there is no check of start *time*)
  * @param WalkInstance $w Walk to check against
  * @return bool True if route matches walk
  */
 public function checkAgainstWalk(WalkInstance $w, &$reason = "", &$reasonDetail = "")
 {
     $start = $this->getWaypoint(0);
     $end = $this->getWaypoint($this->numWaypoints() - 1);
     if (strftime("%F", $start->time) != strftime("%F", $w->start)) {
         $reason = "Route was recorded on a different day from the walk";
         $reasonDetail = "Timestamp of route is " . strftime("%d-%m-%Y", $start->time) . ", walk was on " . strftime("%d-%m-%Y", $w->start);
         return false;
     }
     $plannedDistance = UnitConvert::distance($w->miles, UnitConvert::Mile, UnitConvert::Metre);
     if ($this->distance < $plannedDistance * 0.5 || $this->distance > $plannedDistance * 2) {
         $reason = "Route distance doesn't match the walk";
         $reasonDetail = "Route distance is " . $this->distance . "m, planned walk distance was " . $plannedDistance . "m";
         return false;
     }
     $plannedStart = new Waypoint();
     $plannedStart->latLng = $w->startLatLng;
     if ($start->distanceTo($plannedStart) > 1000) {
         $reason = "Start location doesn't match planned walk";
         $reasonDetail = "Start location of recorded track is " . $start->osRef->toSixFigureString() . ", should be " . $w->startGridRef;
         return false;
     }
     $plannedEnd = new Waypoint();
     $plannedEnd->latLng = $w->endLatLng;
     if ($end->distanceTo($plannedEnd) > 1000) {
         $reason = "End location doesn't match planned walk";
         $reasonDetail = "End location of recorded track is " . $end->osRef->toSixFigureString() . ", should be " . $w->endGridRef;
         return false;
     }
     return true;
 }
				<span class="rating">
					<?php 
    echo $event->distanceGrade . $event->difficultyGrade;
    ?>
				</span>
				<span class="distance">
				(<?php 
    // No space after bracket
    if (empty($event->distance)) {
        $inDist = $event->miles;
        $inUnit = UnitConvert::Mile;
    } else {
        $inDist = $event->distance;
        $inUnit = UnitConvert::Metre;
    }
    echo str_replace(".0", "", UnitConvert::displayDistance($inDist, $inUnit, UnitConvert::Mile)) . "<span class='unit2'>, " . UnitConvert::displayDistance($inDist, $inUnit, UnitConvert::Kilometre) . "</span>";
    ?>
)
			</p>
			<time datetime="<?php 
    echo date("H:iO", $event->estimateFinishTime());
    ?>
" class="dtend date"></time>
		<?php 
} elseif ($event instanceof Social) {
    ?>
			<time datetime="<?php 
    echo date("H:iO", $event->end);
    ?>
" class="dtend date"></time>
		<?php 
Exemplo n.º 5
0
 /**
  * Outputs arrays of user stats
  * @param JUser $user 			User to get stats for. Default is current user.
  * @param int 	$distanceUnits	Convert distance units to this unit. Includes unit suffix, abbreviated - intended for display
  */
 static function getStats($user = null, $distanceUnits = null)
 {
     // Get attended walks
     if (!isset($user)) {
         $user = JFactory::getUser();
     }
     $wiFact = SWG::WalkInstanceFactory();
     $wiFact->reset();
     $wiFact->endDate = Event::DateEnd;
     $wiFact->addAttendee($user->id);
     $soFact = SWG::SocialFactory();
     $soFact->reset();
     $soFact->endDate = Event::DateEnd;
     $soFact->addAttendee($user->id);
     $weFact = SWG::WeekendFactory();
     $weFact->reset();
     $weFact->endDate = Event::DateEnd;
     $weFact->addAttendee($user->id);
     // TODO: Put into loops
     $startDates = array('alltime' => 0, 'year' => 365, '3month' => 90, 'month' => 30);
     foreach ($startDates as $period => $days) {
         if (empty($days)) {
             $start = 0;
         } else {
             $start = time() - $days * 86400;
         }
         $wiFact->startDate = $start;
         $weFact->startDate = $start;
         $soFact->startDate = $start;
         $walkData = $wiFact->cumulativeStats();
         $socials[$period] = $soFact->cumulativeStats();
         $weekend[$period] = $weFact->cumulativeStats();
         // Stats for all-day walks (walks starting at or before 14:00)
         $wiFact->startTimeMax = 14 * 3600;
         $dayWalkData = $wiFact->cumulativeStats();
         $wiFact->startTimeMax = null;
         // TODO: Check this doesn't fail for non-leaders: should say "0"
         $wiFact->leader = Leader::fromJoomlaUser($user->id);
         if (!empty($wiFact->leader)) {
             $ledData = $wiFact->cumulativeStats();
         } else {
             $ledData = array("count" => 0, "sum_miles" => 0);
         }
         // Convert walk units if needed
         if (isset($distanceUnits)) {
             $walkData['sum_miles'] = UnitConvert::displayDistance($walkData['sum_miles'], UnitConvert::Mile, $distanceUnits, false);
             $walkData['mean_miles'] = UnitConvert::displayDistance($walkData['mean_miles'], UnitConvert::Mile, $distanceUnits, false);
             $walkData['sum_distance'] = UnitConvert::displayDistance($walkData['sum_distance'], UnitConvert::Metre, $distanceUnits, false);
             $walkData['mean_distance'] = UnitConvert::displayDistance($walkData['mean_distance'], UnitConvert::Metre, $distanceUnits, false);
             $dayWalkData['sum_miles'] = UnitConvert::displayDistance($dayWalkData['sum_miles'], UnitConvert::Mile, $distanceUnits, false);
             $dayWalkData['mean_miles'] = UnitConvert::displayDistance($dayWalkData['mean_miles'], UnitConvert::Mile, $distanceUnits, false);
             $dayWalkData['sum_distance'] = UnitConvert::displayDistance($dayWalkData['sum_distance'], UnitConvert::Metre, $distanceUnits, false);
             $dayWalkData['mean_distance'] = UnitConvert::displayDistance($dayWalkData['mean_distance'], UnitConvert::Metre, $distanceUnits, false);
             if (!empty($wiFact->leader)) {
                 $ledData['sum_miles'] = UnitConvert::displayDistance($ledData['sum_miles'], UnitConvert::Mile, $distanceUnits, false);
                 $ledData['mean_miles'] = UnitConvert::displayDistance($ledData['mean_miles'], UnitConvert::Mile, $distanceUnits, false);
                 $ledData['sum_distance'] = UnitConvert::displayDistance($ledData['sum_distance'], UnitConvert::Metre, $distanceUnits, false);
                 $ledData['mean_distance'] = UnitConvert::displayDistance($ledData['mean_distance'], UnitConvert::Metre, $distanceUnits, false);
             }
         }
         $walks[$period] = $walkData;
         $dayWalks[$period] = $dayWalkData;
         $led[$period] = $ledData;
         $wiFact->leader = null;
         // Note: this is AFTER the conversions, we check if the leader is set in there
     }
     return array('walks' => $walks, 'daywalks' => $dayWalks, 'led' => $led, 'socials' => $socials, 'weekends' => $weekend);
 }