/** * Store a newly created resource in storage. * * @return Response */ public function store() { $validation = Validator::make(Input::all(), ['duration' => 'required | integer', 'pace' => 'required | integer', 'dog_friendliness' => 'required | integer', 'comments' => 'required']); if ($validation->fails()) { return Redirect::back()->withInput()->withErrors($validation->messages()); } $walk = new Walk(); $duration = Input::get('duration'); $dog_friendliness = Input::get('dog_friendliness'); $pace = Input::get('pace'); $comments = Input::get('comments'); $start = new DateTime(); $start->setTimezone(new DateTimeZone('America/New_York')); $dateInterval = new DateInterval('PT' . $duration . 'M'); $finish = date_add($start, $dateInterval); $walk->start = $start; $walk->finish = $finish; $walk->host_id = Auth::user()->id; $walk->dog_friendliness = $dog_friendliness; $walk->pace = $pace; $walk->comments = $comments; if ($walk->save()) { return Redirect::route('walk.index'); } }
/** * Returns the walk specified by the walkid parameter in the get string. * Loads it from the database if necessary. */ public function getWalk() { if (!$this->fetchedWalk) { // TODO: Check user has permission to view this walk $this->walk = Walk::getSingle(JRequest::getInt("walkid", 0, "get")); $this->fetchedWalk = true; } return $this->walk; }
public function getWalks() { // If we have a custom walk list, return that if (isset($this->walkList)) { return $this->walkList; } // Otherwise, get the default data switch (JRequest::getInt("initialView")) { case 0: default: return array(); case 1: // Get this leader's record $leader = Leader::fromJoomlaUser(JFactory::getUser()->id); if (!empty($leader)) { return Walk::getWalksBySuggester($leader); } else { return array(); } } }
function canEdit($walkOrID) { if (JFactory::getUser()->authorise("walk.editall", "com_swg_walklibrary")) { return true; } else { if (!JFactory::getUser()->authorise("walk.editown", "com_swg_walklibrary")) { return false; } else { if (is_numeric($walkOrID)) { $walk = Walk::getSingle($walkOrID); } else { if ($walkOrID instanceof Walk) { $walk = $walkOrID; } } if (empty($walk)) { throw new InvalidArgumentException("Invalid walk or ID"); } return $walk->suggestedBy == Leader::fromJoomlaUser(JFactory::getUser()->id); } } }
public function pay_walker() { $walk_id = Input::get('walk_id'); $amount = Input::get('amount'); $walk = Walk::find($walk_id); $walk->is_paid = 1; $walk->amount = $amount; $walk->save(); return Redirect::to('/admin/walk/map/' . $walk_id); }
public function updItem($data) { $this->walk->save(); }
public function cancel_walk() { if (Request::isMethod('post')) { $walk_id = Input::get('walk_id'); $token = Input::get('token'); $walker_id = Input::get('id'); $validator = Validator::make(array('walk_id' => $walk_id, 'token' => $token, 'walker_id' => $walker_id), array('walk_id' => 'required|integer', 'token' => 'required', 'walker_id' => 'required|integer')); if ($validator->fails()) { $error_messages = $validator->messages()->all(); $response_array = array('success' => false, 'error' => 'Invalid Input', 'error_code' => 401, 'error_messages' => $error_messages); $response_code = 200; } else { $is_admin = $this->isAdmin($token); if ($walker_data = $this->getWalkerData($walker_id, $token, $is_admin)) { // check for token validity if (is_token_active($walker_data->token_expiry) || $is_admin) { // Do necessary operations if ($walk = Walk::find($walk_id)) { if ($walk->walker_id == $walker_id) { if ($walk->is_walk_started == 0) { $walk->walker_id = 0; $walk->is_confirmed = 0; $walk->save(); $response_array = array('success' => true); $response_code = 200; } else { $response_array = array('success' => false, 'error' => 'Walk Already Started', 'error_code' => 416); $response_code = 200; } } else { $response_array = array('success' => false, 'error' => 'Walk ID doesnot matches with Walker ID', 'error_code' => 407); $response_code = 200; } } else { $response_array = array('success' => false, 'error' => 'Walk ID Not Found', 'error_code' => 408); $response_code = 200; } } else { $response_array = array('success' => false, 'error' => 'Token Expired', 'error_code' => 405); $response_code = 200; } } else { if ($is_admin) { $response_array = array('success' => false, 'error' => 'Walker ID not Found', 'error_code' => 410); } else { $response_array = array('success' => false, 'error' => 'Not a valid token', 'error_code' => 406); } $response_code = 200; } } } $response = Response::json($response_array, $response_code); return $response; }
<?php // No direct access to this file defined('_JEXEC') or die('Restricted access'); // What type of event to we want? // TODO: Probably shouldn't return anything that isn't OK to publish - this is publicly accessible. $id = JRequest::getVar('id', null, "get", "INTEGER"); if (!isset($id)) { jexit("ID must be specified"); } include_once JPATH_BASE . "/swg/Models/Walk.php"; $result = Walk::getSingle($id); echo $result->jsonEncode(); die;
public function __get($name) { // Load connected objects from the database as needed switch ($name) { case "meetPoint": $this->meetPoint = new WalkMeetingPoint($this->meetPointId, $this->start, $this->meetPlaceTime); break; case "leader": $this->leader = Leader::getLeader($this->leaderId); if (!empty($this->leaderName)) { $this->leader->setDisplayName($this->leaderName); } break; case "backmarker": $this->backmarker = Leader::getLeader($this->backmarkerId); if (!empty($this->backmarkerName)) { $this->backmarker->setDisplayName($this->backmarkerName); } break; case "walk": return Walk::getSingle($this->walkid); case "track": // Load the track if we don't have it already // TODO: Only try once, and catch exceptions if (!isset($this->track)) { $this->loadTrack(); } return $this->track; case "distance": // If we don't have a (real) distance set, convert the (estimated) miles into metres and give that break; // If the walk is circular, return the equivalent start point // If the walk is circular, return the equivalent start point case "endPlaceName": case "endLatLng": case "endGridRef": if ($this->isLinear) { return $this->{$name}; } else { $var = "start" . substr($name, 3); return $this->{$var}; } } return $this->{$name}; // TODO: What params should be exposed? }
$route = Route::loadSingle($routeid); if (!empty($route)) { print $route->jsonEncode(); jexit(); } } // If we get here, we failed to load a route. // Get a route for a walkinstance (this means getting the walk) if (isset($walkinstanceid)) { $f = SWG::walkInstanceFactory(); $walk = $f->getSingle($walkinstanceid); } // Get the route for a particular walk if walkid is set if (isset($walkid)) { include_once JPATH_BASE . "/swg/Models/Walk.php"; $walk = Walk::getSingle($walkid); } if (isset($walk)) { $routes = Route::loadForWalkable($walk, true, $type, 1); // TODO: Support logged routes if (!empty($routes)) { $result = $routes[0]; } else { $result = false; } // Error condition - notify caller there are no routes available } if ($result instanceof SWGBaseModel) { echo $result->jsonEncode(); } else { echo json_encode($result);
public static function getSingle($id) { $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select("*"); $query->from("walks"); $query->where(array("ID = " . intval($id))); $db->setQuery($query); $res = $db->query(); if ($db->getNumRows($res) == 1) { $walk = new Walk(); $walk->fromDatabase($db->loadAssoc()); return $walk; } else { return null; } }
<?php define("_JEXEC", true); define("JPATH_BASE", "/home/peter/swg/website/public_html"); require_once "../swg.php"; include_once "../Models/Walk.php"; $walk = new Walk(); $route = new Route($walk); $route->readGPX(DOMDocument::loadXML(file_get_contents($argv[1]))); $walk->setRoute($route); echo "Distance: " . $walk->miles . " miles (" . $walk->distanceGrade . ")\n"; if ($walk->isLinear) { echo "Linear"; } else { echo "Circular"; } echo "\n"; echo "Start: " . $walk->startGridRef . " (" . $walk->startPlaceName . ")\n"; echo "End: " . $walk->endGridRef . " (" . $walk->endPlaceName . ")\n"; $route->save();
/** * Loads a route from the database from its ID * @param int $id Route ID to load * @param Walkable $w Walk to attach this route to, if the object already exists. A new one will be created if not. * @throws InvalidArgumentException If walkable passed in does not match walkable set in database */ public static function loadSingle($id, Walkable $w = null) { $id = (int) $id; $db =& JFactory::getDBO(); // First, get the route's general data $query = $db->getQuery(true); $query->select("*"); $query->from("routes"); $query->where(array("routeid = " . $id)); $db->setQuery($query); $res = $db->query(); if ($db->getNumRows($res) == 0) { return null; } $dbArr = $db->loadAssoc(); $wiFactory = SWG::walkInstanceFactory(); // If we've been given a Walkable, make sure it matches the one on the route // It's OK to load a route for a WalkInstance on a Walk, and vice-versa if ($w != null) { if ($w instanceof Walk) { if ($dbArr['walkid'] != $w->id) { // Try to load a matching walkInstance if (!empty($dbArr['walkinstanceid'])) { $wi = $wiFactory->getSingle($dbArr['walkinstanceid']); if ($wi->walkid != $w->id) { throw new InvalidArgumentException("Loaded route is for WalkInstance " . $wi->id . ", Walk " . $wi->walkid . " (does not match Walk " . $w->id . ")"); } } else { throw new InvalidArgumentException("Loaded route is for Walk " . $dbArr['walkid'] . " (does not match Walk " . $w->id . ")"); } } } else { if ($dbArr['walkinstanceid'] != $w->id && $dbArr['walkid'] != $w->walkid) { throw new InvalidArgumentException("Loaded route is not for given WalkInstance"); } } } else { // Load the Walkable if (empty($dbArr['walkinstanceid'])) { // A Walk $w = Walk::getSingle($dbArr['walkid']); } else { // A WalkInstance $w = $wiFactory->getSingle($dbArr['walkinstanceid']); } } // Create the route object $rt = new Route($w); // TODO: uploadedby/time, length, ascent // Load the basic route properties $rt->id = $id; $rt->distance = $dbArr['length']; $rt->ascent = $dbArr['ascent']; $rt->uploadedBy = $dbArr['uploadedby']; // TODO: Load the actual user? Also, uploadedby should be a Joomla user, not a Leader $rt->uploadedDateTime = strtotime($dbArr['uploadeddatetime']); $rt->visibility = (int) $dbArr['visibility']; $rt->type = (int) $dbArr['type']; // Set all the waypoints $query = $db->getQuery(true); $query->select('*'); $query->from("routepoints"); $query->where(array("routeid = " . $id)); $query->order("sequenceid ASC"); $db->setQuery($query); $res = $db->query(); // Joomla can't be arsed to support/provide documentation for fetching individual rows like EVERYTHING ELSE DOES $megaArray = $db->loadAssocList("sequenceid"); foreach ($megaArray as $i => $dbArr) { $wp = new Waypoint(); $wp->osRef = new OSRef($dbArr['easting'], $dbArr['northing']); $wp->altitude = $dbArr['altitude']; $wp->time = $dbArr['datetime']; $rt->setWaypoint($i, $wp); } return $rt; }
/** * Performs a search with the current parameters */ public function search() { $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select("*"); $query->from("walks"); if (isset($this->name)) { $query->where("walkName LIKE '" . $db->escape($this->name)) . "'"; } if (isset($this->grade)) { // An array of grade combinations in database format. These are imploded with an OR. $grades = array(); foreach ($this->grade as $grade) { $grades[] = "(difficultygrade = '" . $grade['difficulty'] . "' AND distancegrade = '" . $grade['distance'] . "')"; } $query->where("(" . implode(" OR ", $grades) . ")"); } else { if (isset($this->distanceGrade)) { $query->where("distancegrade IN (" . implode(",", $this->distanceGrade) . ")"); } if (isset($this->difficultyGrade)) { $query->where("difficultygrade IN (" . implode(",", $this->difficultyGrade) . ")"); } } // TODO: Length (miles) // Location (general area) if (isset($this->location)) { $query->where("location IN (" . implode(",", $this->location) . ")"); } if (isset($this->isLinear)) { $query->where("islinear = " . $this->isLinear); } // TODO: Start grid ref // TODO: End grid ref if (isset($this->description)) { $query->where("routedescription LIKE '" . $db->escape($this->description)) . "'"; } if (isset($this->information)) { $query->where("information LIKE '" . $db->escape($this->information)) . "'"; } if (isset($this->dogFriendly)) { $query->where("dogfriendly = " . $this->dogFriendly); } if (isset($this->childFriendly)) { $query->where("childfriendly = " . $this->childFriendly); } // TODO: Transport by car/public if (isset($this->transportByCar)) { $query->where("transportbycar = " . $this->transportByCar); } if (isset($this->transportPublic)) { $query->where("transportpublic = " . $this->transportPublic); } if (isset($this->textPublic)) { $query->where("(walkname LIKE '%" . $db->escape($this->textPublic) . "%' OR routedescription LIKE '%" . $db->escape($this->textPublic) . "%')"); } if (isset($this->textAll)) { $query->where("(walkname LIKE '%" . $db->escape($this->textAll) . "%' OR routedescription LIKE '%" . $db->escape($this->textAll) . "%' OR information LIKE '%" . $db->escape($this->textAll) . "%')"); } // Suggested by if (isset($this->suggestedBy)) { $query->where("suggestedby = " . $this->suggestedBy->id); } // TODO: Sorting $db->setQuery($query); $cursor = $db->query(); // TODO: Filtering // Return results as array of walks $results = array(); $walkData = $db->loadAssocList(); foreach ($walkData as $row) { $walk = new Walk(); $walk->fromDatabase($row); $results[] = $walk; } return $results; }