summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--controllers/controllers.php60
-rw-r--r--views/new-exercise.php77
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>