Jump to content

pconkie

Frog Community Genius
  • Posts

    591
  • Joined

  • Last visited

Everything posted by pconkie

  1. I've done a widget called "Check List" - I'm using it to keep track of learning objectives (no we don't have FrogProgress). but it could be used for lots of other things too. Faster and easier for the typical member of staff than FrogForms. Contribute permission required for students to submit their data to the teacher. Here is a 30 second video showing a new list of learning objectives being created (most of us have these lists already in word / excel, so wanted to literally be able to paste them all into frog in one go). new list.mp4 Here is a student filling a list in: fill out.mp4 Finally, needed a way of analysing all of the student responses. Here is a frog app called "Check Lists" which allows you to pick your list and review the submitted responses. No video because of real student names / pictures (blanked out on image below). I've borrowed heavily from the Frog Markbook for this part...
  2. If you find the uuid of the student profile group you could use one of the group apis to return all students. You might need to call a second api to get the specific details about the student you want (can’t remember what attributes are returned in the group api) but you can do this in batches rather than one at a time. You will have to go deep into promises and asynchronous code for this - argh!
  3. Since we are nominated for a sharing award... Here is our options form not letting students pick the same subject more than once 2021-02-16 14-37-29.mp4 And here is the code that does it: <style> a.disabled { pointer-events: none; cursor: default; background-color:#999 !important; } </style> <script> var $form; var that = this; var values = []; setTimeout(function() { var $site = that.element.closest(".sites-site-content"); $form = $site.find("div[data-name='Widget.Forms']"); $form.off("select"); $form.off("input[type=radio]"); $form.on("change", "select", function() { addAlltoArr(); checkArr(); }); $form.on("change", "input[type=radio]", function() { addAlltoArr(); checkArr(); }); }, 2000); function addAlltoArr() { values = []; $form.find("select").each(function() { if (this.value != "") { values.push(this.value); } }); var selected = $form.find("input[type='radio']:checked"); if (selected.length > 0) { selected.each(function() { values.push($(this).val()); }); } } function checkArr() { if (hasDuplicates(values)) { alert("You have chosen the same subject twice.\nYou will not be able to save your choices until you fix this.") $form.find("#submit_form").addClass("disabled"); } else { $form.find("#submit_form").removeClass("disabled"); } } function hasDuplicates(array) { var valuesSoFar = Object.create(null); for (var i = 0; i < array.length; ++i) { var value = array[i]; if (value in valuesSoFar) { return true; } valuesSoFar[value] = true; } return false; } </script>
  4. I changing it to a single submission with no editing and told parents to make sure they were sure before submitting! Of course we have had some emails asking for changes already, but so far this has been minimal.
  5. Added a html widget below the form. Added code to that widget to do the extra validation checks not built into frog forms. Would have been a nice solution had not the editing of frog forms been broken. Must have missed that announcement from frog...
  6. Need to check, but this might break frog seats too
  7. Sorry @Graham Quince I’m still not sure what constitutes a duplicate? Is it that you will not allow a record with the same user_uuid, target_uuid and alias? If so please don’t do this! Kids tend to get into trouble more than once! We are using one data store record per behaviour incident. Actually we use alias for the subject, but still, kids tend to get into trouble more than once per subject. At least a year of work is in jeopardy here! This allowed us to finally break free of sims and build our own behaviour system without any constraints. I can send you some example records for the developers to have a look?
  8. How are you defining ‘duplicate’ Graham? Which fields have to be the same? We have moved our entire behaviour system to frog and would like to be reassured that this change won’t break it. Thanks.
  9. Thanks. As long as you don't have to enter a CAPTCHA!
  10. Actually not just annoying, embarrassing when you have to explain the reason to parents.
  11. Thanks @ADTbut the data viewer doesn't have the same validation as that which we have added to the form. Annoying. I could have done this in frog code, google or MS forms if I had know!!!
  12. This is the error behind the scenes But when I take off "single form submission" they get to submit the form over and over again rather then edit their existing submission.
  13. @Graham Quince What does a single submission form setting mean. I want to know if i have set this correctly.
  14. There is a problem with this @Graham Quince The form forces them to choose different subjects. The dataviewer doesn't. For example we don't want them to pick Sociology twice or even three times!
  15. Thanks Graham. What's Access Control?
  16. @Graham Quinceforgot to tag you.
  17. Firstly please be aware that I couldn't raise this as a ticket since there is an issue with the captcha on the helpdesk site. No captcha displayed means no captcha can be entered which means no ticket can be sent. More urgently than this is that we have just told 300 parents to use a frog form for choosing GCSE options. We told them that they could save the form and come back to it later to make changes using the EDIT button. However this appears to be broken. Please can you fix this ASAP! See attached video. 2021-02-04 09-01-56.mp4
  18. Unfortunately not as simple as installing the widget in frog. There is another server to contend with, whether this is the SIMS server or something else. So lots of additional and sometime quite complicated set-up on the third party. Maybe one day I will have enough time to write some instructions!!
  19. <style> body { background: #000; } .lightrope { text-align: center; white-space: nowrap; overflow: hidden; position: absolute; z-index: 1; margin: -15px 0 0 0; padding: 0; pointer-events: none; width: 100%; } .lightrope li { position: relative; animation-fill-mode: both; animation-iteration-count: infinite; list-style: none; margin: 0; padding: 0; display: block; width: 12px; height: 28px; border-radius: 50%; margin: 20px; display: inline-block; background: rgba(0, 247, 165, 1); box-shadow: 0px 4.6666666667px 24px 3px rgba(0, 247, 165, 1); animation-name: flash-1; animation-duration: 2s; } .lightrope li:nth-child(2n+1) { background: rgba(0, 255, 255, 1); box-shadow: 0px 4.6666666667px 24px 3px rgba(0, 255, 255, 0.5); animation-name: flash-2; animation-duration: 0.4s; } .lightrope li:nth-child(4n+2) { background: rgba(247, 0, 148, 1); box-shadow: 0px 4.6666666667px 24px 3px rgba(247, 0, 148, 1); animation-name: flash-3; animation-duration: 1.1s; } .lightrope li:nth-child(odd) { animation-duration: 1.8s; } .lightrope li:nth-child(3n+1) { animation-duration: 1.4s; } .lightrope li:before { content: ""; position: absolute; background: #222; width: 10px; height: 9.3333333333px; border-radius: 3px; top: -4.6666666667px; left: 1px; } .lightrope li:after { content: ""; top: -14px; left: 9px; position: absolute; width: 52px; height: 18.6666666667px; border-bottom: solid #222 2px; border-radius: 50%; } .lightrope li:last-child:after { content: none; } .lightrope li:first-child { margin-left: -40px; } @keyframes flash-1 { 0%, 100% { background: rgba(0, 247, 165, 1); box-shadow: 0px 4.6666666667px 24px 3px rgba(0, 247, 165, 1); } 50% { background: rgba(0, 247, 165, 0.4); box-shadow: 0px 4.6666666667px 24px 3px rgba(0, 247, 165, 0.2); } } @keyframes flash-2 { 0%, 100% { background: rgba(0, 255, 255, 1); box-shadow: 0px 4.6666666667px 24px 3px rgba(0, 255, 255, 1); } 50% { background: rgba(0, 255, 255, 0.4); box-shadow: 0px 4.6666666667px 24px 3px rgba(0, 255, 255, 0.2); } } @keyframes flash-3 { 0%, 100% { background: rgba(247, 0, 148, 1); box-shadow: 0px 4.6666666667px 24px 3px rgba(247, 0, 148, 1); } 50% { background: rgba(247, 0, 148, 0.4); box-shadow: 0px 4.6666666667px 24px 3px rgba(247, 0, 148, 0.2); } } </style> <ul class="lightrope"> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul>
  20. We have several third party integrations of varying complexity all working well with frog. A few examples: 1. Current printing balance pulled from our printer server. Runs on demand. Uses frog data store as a fall back in case print server becomes unavailable. 2. Who is absent today? Update for the frog seating plan just loaded pulled live from the sims server. 3. Haven’t done your register? An annoying but can’t fail to ignore frog notification if you haven’t done your register 20 minutes into each lesson. Again pulled live from sims server. 4. Attendance letter requests. One or more of 5 different letters can be requested for one or more students via a custom attendance portal in frog. The letter mail merge file is created in frog but as there is limited address/parental information in frog it queries sims on the fly to add the missing information before invoking word to start the merge. My main piece of advice: for data going into frog consider using JSON format rather than csv. JavaScript natively understands this format. You can use a .js file as a container for this to defeat any cross origin issues. Good luck with your idea.
  21. I agree with these points, plus: Changes to css files currently require the project to be re-deployed to take effect (this didn’t used to be the case). While frogcode now loads a lot faster than before, if you open a project and then another before the files for the first have appeared you end up with the files for both projects inside the second folder. The toast notification that the project has been saved gets in the way of the run button! No search/find facility or ability to collapse/expand sections of code.
  22. Thanks @Graham Quince. Could somebody take a look at my api call then? Maybe @adamw will know what the error message means?
  23. Also., I was trying to install it because sometimes you get error messages in the staging environment that go away when it is installed. Since I haven't been able to check if the error persists when installed could somebody please take a look at this and let me know if they spot the problem? Frog.Model.api('dataviewer.gettable', { content_uuid: "BDA1BE902003E668FAF13F901358DF0BE4D3796C62C9C508", //What is this? Do I need it? current_user_only: false, form_uuid: this.form_uuid, limit: 5, offset: 0, sort_dir: "DESC", sort_field: "date", filters: [{field_name: uuid, value: value}] }).done(function(resp) { console.log(resp); }.bind(this)).fail(function(e) { var error = JSON.parse(e.responseText); var error_msg = error.response.message + "<BR/>Failed to get timetable data" this.hideLoader(); this.modal("There has been an error", error_msg, "pc-modal", null, false); }.bind(this)); The error message is 4000: missing module for table. Thank you
  24. Can somebody take a look at my server to see if they get the same thing? I have a forgcode widget called "forms advanced". I've just tried to install it a couple of times. The installation does not give an error but the widget does not install either!
×
×
  • Create New...