diff options
-rw-r--r-- | controllers/controllers.php | 60 | ||||
-rw-r--r-- | views/new-exercise.php | 77 |
2 files changed, 137 insertions, 0 deletions
diff --git a/controllers/controllers.php b/controllers/controllers.php index b1d96c4..4feba3f 100644 --- a/controllers/controllers.php +++ b/controllers/controllers.php @@ -1085,3 +1085,63 @@ $app->post('/weight', function() use($app) { ))); } }); + + +function create_exercise(&$user, $activity, $minutes, $heartrate, $published) { + $micropub_request = array( + 'type' => ['h-entry'], + 'properties' => [ + 'workout' => [[ + 'type' => ['h-workout'], + 'properties' => [ + 'activity' => [$activity], + 'duration' => [[ + 'type' => ['h-measure'], + 'properties' => [ + 'num' => [($minutes*60)], + 'unit' => ['second'] + ], + ]], + 'heartrate' => [[ + 'type' => 'h-measure', + 'properties' => [ + 'num' => [$heartrate], + 'unit' => ['bpm'], + ] + ]] + ] + ]] + ] + ); + try { + $date = new DateTime($published); + $micropub_request['properties']['published'] = [$date->format('c')]; + } catch(Exception $e) { + } + $r = micropub_post_for_user($user, $micropub_request, null, true); + + return $r; +} + +$app->get('/exercise', function() use($app){ + if($user=require_login($app)) { + render('new-exercise', array( + 'title' => 'New Exercise', + )); + } +}); + +$app->post('/exercise', function() use($app) { + if($user=require_login($app)) { + $params = $app->request()->params(); + + $r = create_exercise($user, $params['activity'], $params['minutes'], $params['heartrate'], $params['published']); + $location = $r['location']; + + $app->response()['Content-type'] = 'application/json'; + $app->response()->body(json_encode(array( + 'location' => $location, + 'error' => $r['error'] + ))); + } +}); diff --git a/views/new-exercise.php b/views/new-exercise.php new file mode 100644 index 0000000..4a451ca --- /dev/null +++ b/views/new-exercise.php @@ -0,0 +1,77 @@ + <div class="narrow"> + <?= partial('partials/header') ?> + + <div style="clear: both;" class="notice-pad"> + <div class="alert alert-success hidden" id="test_success"><strong>Success! </strong><a href="" id="post_href">View your post</a></div> + <div class="alert alert-danger hidden" id="test_error"><strong>Something went wrong!</strong><br>Your Micropub endpoint indicated that something went wrong creating the post.</div> + </div> + + <form style="margin-top: 20px;" id="weight_form"> + + <div class="form-group"> + <label for="exercise_activity">Activity</label> + <select id="exercise_activity" class="form-control"> + <option value="indoor-cycling">Indoor Cycling</option> + </select> + </div> + + <div class="form-group"> + <label for="exercise_minutes">Minutes</label> + <input type="number" id="exercise_minutes" class="form-control"> + </div> + + <div class="form-group"> + <label for="exercise_heartrate">Avg Heart Rate</label> + <input type="number" id="exercise_heartrate" class="form-control"> + </div> + + <div class="form-group"> + <label for="date">Date and Time</label> + <input type="text" id="date" class="form-control" value="<?= date('Y-m-d H:i:s') ?>"> + </div> + + <div style="float: right; margin-top: 6px;"> + <button class="btn btn-success" id="btn_post">Post</button> + </div> + </form> + + <div style="clear: both;"></div> + + </div> +<script> +$(function(){ + + var d = new Date(); + var tzOffset = tz_seconds_to_offset(d.getTimezoneOffset() * 60 * -1); + $("#date").val( $("#date").val() + " " + tzOffset); + + $("#btn_post").click(function(){ + $("#btn_post").addClass("loading disabled"); + + $.post("/exercise", { + activity: $("#exercise_activity").val(), + minutes: $("#exercise_minutes").val(), + heartrate: $("#exercise_heartrate").val(), + published: $("#date").val() + }, function(response){ + if(response.location != false) { + + $("#test_success").removeClass('hidden'); + $("#test_error").addClass('hidden'); + $("#post_href").attr("href", response.location); + + window.location = response.location; + } else { + $("#test_success").addClass('hidden'); + $("#test_error").removeClass('hidden'); + if(response.error_details) { + $("#test_error").text(response.error_details); + } + $("#btn_post").removeClass("loading disabled"); + } + + }); + return false; + }); +}); +</script> |