From e706ea14541e94f0d9568f0cced5f6c6eaa7b99c Mon Sep 17 00:00:00 2001
From: Moritz Scheider <moritzschneider@bluewin.ch>
Date: Sat, 3 Jun 2017 15:46:20 +0200
Subject: [PATCH] Added field selection_strategy to events

---
 tools/events.tool | 414 ++++++++++++++++++++++++----------------------
 1 file changed, 220 insertions(+), 194 deletions(-)

diff --git a/tools/events.tool b/tools/events.tool
index 31b45de..3dd8538 100644
--- a/tools/events.tool
+++ b/tools/events.tool
@@ -47,7 +47,7 @@
                         <div class="input-group date" id="time_start">
                             <input type="text" class="form-control" />
                             <span class="input-group-addon">
-                    <span class="glyphicon-calendar glyphicon"></span>
+                                <span class="glyphicon-calendar glyphicon"></span>
                             </span>
                         </div>
                     </div>
@@ -58,7 +58,7 @@
                         <div class="input-group date" id="time_end">
                             <input type="text" class="form-control" />
                             <span class="input-group-addon">
-                    <span class="glyphicon-calendar glyphicon"></span>
+                                <span class="glyphicon-calendar glyphicon"></span>
                             </span>
                         </div>
                     </div>
@@ -69,7 +69,7 @@
                         <div class="input-group date" id="time_advertising_start">
                             <input type="text" class="form-control" />
                             <span class="input-group-addon">
-                    <span class="glyphicon-calendar glyphicon"></span>
+                                <span class="glyphicon-calendar glyphicon"></span>
                             </span>
                         </div>
                     </div>
@@ -80,7 +80,7 @@
                         <div class="input-group date" id="time_advertising_end">
                             <input type="text" class="form-control" />
                             <span class="input-group-addon">
-                    <span class="glyphicon-calendar glyphicon"></span>
+                                <span class="glyphicon-calendar glyphicon"></span>
                             </span>
                         </div>
                     </div>
@@ -107,7 +107,7 @@
                         <div class="input-group date" id="time_register_start">
                             <input type="text" class="form-control" />
                             <span class="input-group-addon">
-                    <span class="glyphicon-calendar glyphicon"></span>
+                                <span class="glyphicon-calendar glyphicon"></span>
                             </span>
                         </div>
                     </div>
@@ -118,7 +118,7 @@
                         <div class="input-group date" id="time_register_end">
                             <input type="text" class="form-control" />
                             <span class="input-group-addon">
-                    <span class="glyphicon-calendar glyphicon"></span>
+                                <span class="glyphicon-calendar glyphicon"></span>
                             </span>
                         </div>
                     </div>
@@ -165,6 +165,22 @@
                         <textarea type="text" class="form-control" rows="3" id="additional_fields"></textarea>
                     </div>
 
+                    <label for="selection-strategy">Selection strategy</label>
+                    <fieldset class="form-group" id="selection-strategy">
+                        <div class="form-check">
+                            <label class="form-check-label">
+                                <input type="radio" class="form-check-input" name="selection-strategy-radio" id="selection-strategy-radio1" value="fcfs" checked>
+                                first come first serve
+                            </label>
+                        </div>
+                        <div class="form-check">
+                            <label class="form-check-label">
+                                <input type="radio" class="form-check-input" name="selection-strategy-radio" id="selection-strategy-radio2" value="manual">
+                                manual
+                            </label>
+                        </div>
+                    </fieldset>
+
                     <div class="form-group">
                         <label for="img_infoscreen">Infoscreen Image</label>
                         <input type="file" id="img_infoscreen" name="myFile"/>
@@ -248,9 +264,9 @@
     }
 </style>
 
-<script type="text/javascript">
+    <script type="text/javascript">
     var events = {
-        API_url: 'https://amiv-apidev.vsos.ethz.ch',
+        API_url: 'https://amiv-api.ethz.ch',
         somethingChanged: false,
         showInTable: ['title_de', 'time_start', 'show_website', 'spots', 'signup_count'],
         curEventData: null,
@@ -399,9 +415,15 @@
                     $("#" + booleanEventData[i]).prop('checked', ret[booleanEventData[i]]);
                 }
 
+                //radios
+                if (ret['selection_strategy'] == "fcfs")
+                    $('#selection-strategy-radio1').prop('checked', true);
+                else if (ret['selection_strategy'] == "manual")
+                    $('#selection-strategy-radio2').prop('checked', true);
 
                 //edge cases (signup required is inverted)
-                $('#signup-required').prop('checked', !ret['signup-required']);
+                if (ret['spots'] == 0)
+                    $('#signup-required').prop('checked', true);
 
                 //add additional (immutable) data to the modal
                 additionalInfo = {
@@ -460,7 +482,7 @@
                     'Update': {
                         type: 'success',
                         close: false
-                            //callback
+                        //callback
                     }
                 }
             });
@@ -471,12 +493,12 @@
             var newEvent = {
                 data: {}
             };
-	    if ($("#title_de") !== "")
-		newEvent["data"]["title_de"] = $("#title_de").val();
-	    if ($("#description_de") !== "")
-		newEvent["data"]["description_de"] = $("#description_de").val();
-	    if ($("#catchphrase_de") !== "")
-		newEvent["data"]["catchphrase_de"] = $("#catchphrase_de").val();
+            if ($("#title_de") !== "")
+                newEvent["data"]["title_de"] = $("#title_de").val();
+            if ($("#description_de") !== "")
+                newEvent["data"]["description_de"] = $("#description_de").val();
+            if ($("#catchphrase_de") !== "")
+                newEvent["data"]["catchphrase_de"] = $("#catchphrase_de").val();
 
             if (!($("#time_start").data("DateTimePicker").date() == null)) {
                 newEvent["data"]["time_start"] = $("#time_start").data("DateTimePicker").date().toISOString().split('.')[0]+"Z";
@@ -522,9 +544,8 @@
             } else {
             }
 
-           
-	    if ($("#location").val() !== "")
-		newEvent["data"]["location"] = $("#location").val();
+            if ($("#location").val() !== "")
+                newEvent["data"]["location"] = $("#location").val();
 
             if (!($("#price").val() === ""))
                 newEvent["data"]["price"] = Math.floor((parseFloat($("#price").val()) * 100));
@@ -533,17 +554,22 @@
             newEvent["data"]["show_infoscreen"] = $("#show_infoscreen").is(':checked');
             newEvent["data"]["show_announce"] = $("#show_announce").is(':checked');
             newEvent["data"]["priority"] = parseInt($("#priority").val());
-	    if ($("#additional_fields").val() !== "")
-		newEvent["data"]["additional_fields"] = $("#additional_fields").val();
-
-	    if ($("#title_en").val !== "")
-		newEvent["data"]["title_en"] = $("#title_en").val();
-	    if ($("#description_en").val !== "")
-		newEvent["data"]["description_en"] = $("#description_en").val();
-	    if ($("#catchphrase_en").val !== "")
-		newEvent["data"]["catchphrase_en"] = $("#catchphrase_en").val();
-
-	    var imageData = ['img_infoscreen', 'img_thumbnail', 'img_poster', 'img_banner'];
+            if ($("#additional_fields").val() !== "")
+                newEvent["data"]["additional_fields"] = $("#additional_fields").val();
+
+            if ($('#selection-strategy-radio1').is(":checked"))
+                newEvent['data']['selection_strategy'] = "fcfs";
+            else if($('#selection-strategy-radio2').is(":checked"))
+                newEvent['data']['selection_strategy'] = "manual";
+
+            if ($("#title_en").val !== "")
+                newEvent["data"]["title_en"] = $("#title_en").val();
+            if ($("#description_en").val !== "")
+                newEvent["data"]["description_en"] = $("#description_en").val();
+            if ($("#catchphrase_en").val !== "")
+                newEvent["data"]["catchphrase_en"] = $("#catchphrase_en").val();
+
+            var imageData = ['img_infoscreen', 'img_thumbnail', 'img_poster', 'img_banner'];
             for (i = 0; i < imageData.length; i++){
                 if ($('#' + imageData[i])[0].files[0] != undefined)
                     newEvent["data"][imageData[i]] = $('#' + imageData[i])[0].files[0];
@@ -558,7 +584,7 @@
                     else {
                         console.log(ret);
                         curEventData = ret;
-			tools.log('Event Added', 's');
+                        tools.log('Event Added', 's');
                         $('#event-modal').modal('hide');
                         $("#event-modal-form").trigger('reset');
                         events.get();
@@ -574,9 +600,9 @@
                     if (!ret.hasOwnProperty('_status') || ret['_status'] != 'OK')
                         tools.log(JSON.stringify(ret.responseJSON['_issues']), 'e');
                     else {
-			console.log(ret);
+                        console.log(ret);
                         curEventData = ret;
-			tools.log('Event Added', 's');
+                        tools.log('Event Added', 's');
                         $('#event-modal').modal('hide');
                         $("#event-modal-form").trigger('reset');
                         events.get();
@@ -587,185 +613,185 @@
     }
 
 
-    //setting up the date time picker
-    $(function() {
-        $('#time_start').datetimepicker({
-            locale: "de",
-            sideBySide: true
-        });
-
-        $('#time_end').datetimepicker({
-            locale: "de",
-            useCurrent: false, //Important! See issue #1075aa
-            sideBySide: true
-        });
-
-        $('#time_advertising_start').datetimepicker({
-            locale: "de",
-            sideBySide: true
-        });
-
-        $('#time_advertising_end').datetimepicker({
-            locale: "de",
-            useCurrent: false, //Important! See issue #1075aa
-            sideBySide: true
-        });
-
-        $('#time_register_start').datetimepicker({
-            locale: "de",
-            sideBySide: true
-        });
-        $('#time_register_end').datetimepicker({
-            locale: "de",
-            useCurrent: false, //Important! See issue #107534
-            sideBySide: true
-        });
-        $("#time_register_start").on("dp.change", function(e) {
-            $('#time_register_end').data("DateTimePicker").minDate(e.date);
-        });
-        $("#time_register_end").on("dp.change", function(e) {
-            $('#time_register_start').data("DateTimePicker").maxDate(e.date);
-        });
-        $("#time_advertising_start").on("dp.change", function(e) {
-            $('#time_advertising_end').data("DateTimePicker").minDate(e.date);
-        });
-        $("#time_advertising_end").on("dp.change", function(e) {
-            $('#time_advertising_start').data("DateTimePicker").maxDate(e.date);
-        });
-        $("#time_start").on("dp.change", function(e) {
-            $('#time_end').data("DateTimePicker").minDate(e.date);
-        });
-        $("#time_end").on("dp.change", function(e) {
-            $('#time_start').data("DateTimePicker").maxDate(e.date);
-        });
+//setting up the date time picker
+$(function() {
+    $('#time_start').datetimepicker({
+        locale: "de",
+        sideBySide: true
+    });
+
+    $('#time_end').datetimepicker({
+        locale: "de",
+        useCurrent: false, //Important! See issue #1075aa
+        sideBySide: true
     });
 
-    $('#signup-required').click(function() {
-        $('#no-signup-limit').attr('disabled', this.checked);
-        $('#spots').attr('disabled', this.checked);
-        $('#time_register_end>input').attr('disabled', this.checked);
-        $('#time_register_start>input').attr('disabled', this.checked);
+    $('#time_advertising_start').datetimepicker({
+        locale: "de",
+        sideBySide: true
     });
 
-    $('#no-signup-limit').click(function() {
-        $('#spots').attr('disabled', this.checked);
+    $('#time_advertising_end').datetimepicker({
+        locale: "de",
+        useCurrent: false, //Important! See issue #1075aa
+        sideBySide: true
     });
 
-    $('#event-modal').on('hidden.bs.modal', function () {
-  // do something…
-        $('#event-modal img').attr('src', '');
-        $("#event-modal-form").trigger('reset');
-    })
+    $('#time_register_start').datetimepicker({
+        locale: "de",
+        sideBySide: true
+    });
+    $('#time_register_end').datetimepicker({
+        locale: "de",
+        useCurrent: false, //Important! See issue #107534
+        sideBySide: true
+    });
+    $("#time_register_start").on("dp.change", function(e) {
+        $('#time_register_end').data("DateTimePicker").minDate(e.date);
+    });
+    $("#time_register_end").on("dp.change", function(e) {
+        $('#time_register_start').data("DateTimePicker").maxDate(e.date);
+    });
+    $("#time_advertising_start").on("dp.change", function(e) {
+        $('#time_advertising_end').data("DateTimePicker").minDate(e.date);
+    });
+    $("#time_advertising_end").on("dp.change", function(e) {
+        $('#time_advertising_start').data("DateTimePicker").maxDate(e.date);
+    });
+    $("#time_start").on("dp.change", function(e) {
+        $('#time_end').data("DateTimePicker").minDate(e.date);
+    });
+    $("#time_end").on("dp.change", function(e) {
+        $('#time_start').data("DateTimePicker").maxDate(e.date);
+    });
+});
+
+$('#signup-required').click(function() {
+    $('#no-signup-limit').attr('disabled', this.checked);
+    $('#spots').attr('disabled', this.checked);
+    $('#time_register_end>input').attr('disabled', this.checked);
+    $('#time_register_start>input').attr('disabled', this.checked);
+});
+
+$('#no-signup-limit').click(function() {
+    $('#spots').attr('disabled', this.checked);
+});
+
+$('#event-modal').on('hidden.bs.modal', function () {
+    // do something…
+    $('#event-modal img').attr('src', '');
+    $("#event-modal-form").trigger('reset');
+})
 
 // tools in the top bar
-    tools.ui.menu({
-        '<span class="glyphicon glyphicon-plus"  data-toggle="tooltip" aria-hidden="true" title="Create new Event" data-placement="bottom"></span>': {
-            callback: events.createEvent
-        },
-        '<span class="glyphicon glyphicon-refresh" aria-hidden="true"  data-toggle="tooltip" title="Refresh" data-placement="bottom"></span>': {
-            callback: events.get
-        },
-        '<span class="glyphicon glyphicon-arrow-left" aria-hidden="true"></span>': {
-            callback: events.page.dec
-        },
-        '<span class="events-cur-page-cont" aria-hidden="true"></span> / <span class="events-page-max-cont" aria-hidden="true"></span>': {
-            callback: function() {
-                tools.modal({
-                    head: 'Go To Page:',
-                    body: '<div class="form-group"><input type="number" value="' + events.page.cur() + '" class="form-control events-go-page"></div>',
-                    button: {
-                        'Go': {
-                            type: 'success',
-                            close: true,
-                            callback: function() {
-                                events.page.set($('.events-go-page').val());
-                            },
-                        }
+tools.ui.menu({
+    '<span class="glyphicon glyphicon-plus"  data-toggle="tooltip" aria-hidden="true" title="Create new Event" data-placement="bottom"></span>': {
+        callback: events.createEvent
+    },
+    '<span class="glyphicon glyphicon-refresh" aria-hidden="true"  data-toggle="tooltip" title="Refresh" data-placement="bottom"></span>': {
+        callback: events.get
+    },
+    '<span class="glyphicon glyphicon-arrow-left" aria-hidden="true"></span>': {
+        callback: events.page.dec
+    },
+    '<span class="events-cur-page-cont" aria-hidden="true"></span> / <span class="events-page-max-cont" aria-hidden="true"></span>': {
+        callback: function() {
+            tools.modal({
+                head: 'Go To Page:',
+                body: '<div class="form-group"><input type="number" value="' + events.page.cur() + '" class="form-control events-go-page"></div>',
+                button: {
+                    'Go': {
+                        type: 'success',
+                        close: true,
+                        callback: function() {
+                            events.page.set($('.events-go-page').val());
+                        },
                     }
-                });
-            }
-        },
-        '<span class="glyphicon glyphicon-arrow-right" aria-hidden="true"></span>': {
-            callback: events.page.inc
-        },
-        '<span class="glyphicon glyphicon-sort" aria-hidden="true" data-toggle="tooltip" title="Sort" data-placement="bottom"></span>': {
-            callback: function() {
-                var tmp = '<div class="form-group"><select class="form-control events-sort-select">';
-                var cur = events.sort.cur();
-                ['_id', 'title_de', 'description_de', 'time_start', 'time_register_start', 'time_end', 'time_register_end', 'show_website', 'show_announce', 'show_infoscreen', 'price', '_updated', 'location'].forEach(function(i) {
-                    tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>&#8673; ' + i + '</option>';
-                    tmp += '<option value="-' + i + '"' + (('-' + i == cur) ? ' selected' : '') + '>&#8675; ' + i + '</option>';
-                });
-                tmp += '</select></div>';
-                tools.modal({
-                    head: 'Sort',
-                    body: tmp,
-                    button: {
-                        'Sort': {
-                            type: 'success',
-                            close: true,
-                            callback: function() {
-                                events.sort.set($('.events-sort-select').val());
-                            }
+                }
+            });
+        }
+    },
+    '<span class="glyphicon glyphicon-arrow-right" aria-hidden="true"></span>': {
+        callback: events.page.inc
+    },
+    '<span class="glyphicon glyphicon-sort" aria-hidden="true" data-toggle="tooltip" title="Sort" data-placement="bottom"></span>': {
+        callback: function() {
+            var tmp = '<div class="form-group"><select class="form-control events-sort-select">';
+            var cur = events.sort.cur();
+            ['_id', 'title_de', 'description_de', 'time_start', 'time_register_start', 'time_end', 'time_register_end', 'show_website', 'show_announce', 'show_infoscreen', 'price', '_updated', 'location'].forEach(function(i) {
+                tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>&#8673; ' + i + '</option>';
+                tmp += '<option value="-' + i + '"' + (('-' + i == cur) ? ' selected' : '') + '>&#8675; ' + i + '</option>';
+            });
+            tmp += '</select></div>';
+            tools.modal({
+                head: 'Sort',
+                body: tmp,
+                button: {
+                    'Sort': {
+                        type: 'success',
+                        close: true,
+                        callback: function() {
+                            events.sort.set($('.events-sort-select').val());
                         }
                     }
+                }
 
-                });
-            }
-        },
-        '<span class="glyphicon glyphicon-search" aria-hidden="true" data-toggle="tooltip" title="Search" data-placement="bottom"></span>': {
-            callback: function() {
-                var tmp = '<div class="form-group"><select class="form-control events-search-select">';
-                var cur = events.search.cur();
-                if (cur === null || cur == '')
-                    cur = '';
-                else
-                    cur = cur.split('==')[1];
-                ['_id', 'title_de', 'description_de', 'title_en', 'description_en', 'time_start', 'time_register_start', 'time_end', 'time_register_end', 'show_website', 'show_announce', 'show_infoscreen', 'price', '_updated', 'location']
+            });
+        }
+    },
+    '<span class="glyphicon glyphicon-search" aria-hidden="true" data-toggle="tooltip" title="Search" data-placement="bottom"></span>': {
+        callback: function() {
+            var tmp = '<div class="form-group"><select class="form-control events-search-select">';
+            var cur = events.search.cur();
+            if (cur === null || cur == '')
+                cur = '';
+            else
+                cur = cur.split('==')[1];
+            ['_id', 'title_de', 'description_de', 'title_en', 'description_en', 'time_start', 'time_register_start', 'time_end', 'time_register_end', 'show_website', 'show_announce', 'show_infoscreen', 'price', '_updated', 'location']
                 .forEach(
                     function(i) {
                         tmp += '<option value="' + i + '"' + ((i == cur) ? ' selected' : '') + '>' + i + '</option>';
                     });
-                tmp += '</select><br><input type="text" value="' + cur + '" class="form-control events-search-val"></div>';
-                tools.modal({
-                    head: 'Search',
-                    body: tmp,
-                    button: {
-                        'Clear': {
-                            type: 'warning',
-                            close: true,
-                            callback: events.search.clr,
-                        },
-                        'Search': {
-                            type: 'success',
-                            close: true,
-                            callback: function() {
-                                events.search.set($('.events-search-select').val(), $('.events-search-val').val());
-                            }
-                        },
-                    }
-                })
-            }
+            tmp += '</select><br><input type="text" value="' + cur + '" class="form-control events-search-val"></div>';
+            tools.modal({
+                head: 'Search',
+                body: tmp,
+                button: {
+                    'Clear': {
+                        type: 'warning',
+                        close: true,
+                        callback: events.search.clr,
+                    },
+                    'Search': {
+                        type: 'success',
+                        close: true,
+                        callback: function() {
+                            events.search.set($('.events-search-select').val(), $('.events-search-val').val());
+                        }
+                    },
+                }
+            })
         }
+    }
+});
+
+if (events.page.cur() === null || isNaN(events.page.cur()))
+    events.page.set(1);
+else
+    events.page.set(events.page.cur());
+
+$(document).ready(function() {
+    $('[data-toggle="tooltip"]').tooltip();
+    $('#event-modal-form').on('keyup change', 'input, select, textarea, span ', function(){
+        console.log('changed shit');
+        events.somethingChanged = true;
     });
+});
 
-    if (events.page.cur() === null || isNaN(events.page.cur()))
-        events.page.set(1);
-    else
-        events.page.set(events.page.cur());
-
-    $(document).ready(function() {
-        $('[data-toggle="tooltip"]').tooltip();
-        $('#event-modal-form').on('keyup change', 'input, select, textarea, span ', function(){
-            console.log('changed shit');
-            events.somethingChanged = true;
-        });
-    });
-
-    function setNullIfEmpty(formData) {
-        if (formData === "") {
-            return null;
-        }
-        return formData;
+function setNullIfEmpty(formData) {
+    if (formData === "") {
+        return null;
     }
+    return formData;
+}
 </script>
-- 
GitLab