id) { App::redirect('/'); } self::$layout = 'layouts/page.php'; self::addStyle('/css/style.css?ver=' . App::getConfig('version')); self::addStyle('/css/pageStyle.css?ver=' . App::getConfig('version')); self::addScript('/js/jquery-2.1.0.min.js'); self::addScript('/js/jquery-ui-1.10.4.custom.min.js'); self::addScript('/js/bootstrap.min.js'); self::addStyle('/css/bootstrap.min.css'); self::addStyle('/css/bootstrap-theme.min.css'); } function actionIndex() { $trips = Trips::model()->getAll(array('where' => '`owner` = ?'), array(App::$user->id)); self::render('/tracks/index.php', array( 'trips' => $trips, )); } function actionFiles() { $files = TrackFiles::model()->getAll(array('where' => '`owner` = :owner'), array('owner' => App::$user->id)); self::render('/tracks/files.php', array( 'files' => $files, )); } function actionUploadfile() { $temp = pathinfo($_FILES['file']['name']); $filename = $_FILES['file']['name']; $extension = strtolower($temp['extension']); $uploaddir = App::getBasedir() . 'tracks/'; if ($extension !== 'gpx') { App::error404('Неизвестный тип'); } $tmp = TrackFiles::model()->add(array( 'owner' => App::$user->id, 'name' => 'Трек ' . date('d-m-Y H:i:s'), 'filename' => $filename, 'createdAt' => date('c'), )); $newName = 'track' . $tmp->id . '.' . $extension; if (!move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $newName)) { App::error404(); } App::redirect('/tracks/files'); } function actionImportgpx() { $id = (int) App::getParam('id'); if (!$id) { App::error404(); } $trackFile = TrackFiles::model()->getByPK($id); if ($trackFile->isEmpty() || $trackFile->owner != App::$user->id) { App::error404(); } $gpxObject = simplexml_load_file(App::getBasedir() . 'tracks/track' . $trackFile->id . '.gpx'); $trip = Trips::model()->add( array( 'name' => isset($gpxObject->metadata->name) ? (string) $gpxObject->metadata->name : 'Track', 'createdAt' => isset($gpxObject->metadata->time) ? $gpxObject->metadata->time : date('c'), 'owner' => App::$user->id, 'distance' => 0, 'description' => 'Трек сздан ' . date('d-m-Y H:i') . ' из файла ' . $trackFile->filename, 'status' => Trips::STATUS_PRIVATE, ) ); $distance = 0; $wayPoints = array(); $tracks = array(); $latlngs = array(); $tracksCounter = 1; $tracksCount = $tptCount = $wptCount = 0; foreach ($gpxObject as $key => $block) { if ($key == 'wpt') { if (empty($block)) { continue; } $wayPoint = WayPoints::model()->add( array( 'tripId' => $trip->id, 'lat' => floatval($block['lat']), 'lng' => floatval($block['lon']), 'alt' => 0, 'speed' => 0, 'createdAt' => $block->time, 'name' => (string) $block->name, 'description' => (string) $block->desc, ) ); $wptCount++; } if ($key == 'trk') { if (empty($block->trkseg)) { continue; } foreach ($block->trkseg as $trkpt) { if ($trkpt) { $track = Tracks::model()->add( array( 'tripId' => $trip->id, 'name' => (string) $block->name ? (string) $block->name : 'Фрагмент трека №' . $tracksCounter, 'distance' => 0, 'description' => '', ) ); $distanceTmp = 0; $prevPoint = array(); $tracksCounter++; $trackPoints = array(); foreach ($trkpt as $tpt) { $trackPoint = TrackPoints::model()->add( array( 'trackId' => $track->id, 'lat' => floatval($tpt['lat']), 'lng' => floatval($tpt['lon']), 'alt' => isset($tpt->ele) ? floatval($tpt->ele) : 0, 'createdAt' => isset($tpt->time) ? $tpt->time : date('c'), 'speed' => 0, ) ); if ($prevPoint) { $distanceTmp += Geo::distance($prevPoint, array('lat' => floatval($tpt['lat']), 'lng' => floatval($tpt['lon']))); } $prevPoint = array( 'lat' => floatval($tpt['lat']), 'lng' => floatval($tpt['lon']), ); $tptCount++; } $distance += $distanceTmp; $track->distance = $distanceTmp; $track->save(); } } $tracksCount++; } } $trip->distance = $distance; $trip->save(); $trackFile->tracksCount = $tracksCount; $trackFile->tptCount = $tptCount; $trackFile->wptCount = $wptCount; $trackFile->distance = $distance; $trackFile->save(); App::redirect('/tracks'); } }