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(); } print_r($trackFile); $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, ) ); $wayPoints = array(); $tracks = array(); $latlngs = array(); $tracksCounter = 1; 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, ) ); } 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' => '', ) ); $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, ) ); } } } } } App::redirect('/tracks'); } }