Jump to content

adamw

Former Frog Staff
  • Posts

    515
  • Joined

  • Last visited

Everything posted by adamw

  1. Just a quick sneak peek for you guys. Here are a few reference images of what we're working on. Note however that these images are mock-ups (as the real thing is still very much in development at the moment and doesn't have any data in it to show - so a screenshot would look very underwhelming! Please bear in mind that this is very much work in progress, and is subject to change - indeed, some of the things in these images have already changed in the development version as compared to these, but this should give you an idea of where we're heading. Any questions / suggestions let us know! @ADT @johnmorris01 Adam
  2. adamw

    Analytics

    At the moment, I don't think there is - but I will bring it up here with people, because it does seem like something that would be very useful for schools to be able to see.
  3. Try adding: data-width="100%" to the a tag. Something like this: <script type="text/javascript"> if (typeof twttr ==="undefined") { // <![CDATA[ !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs"); // ]]> } </script> <a class="twitter-timeline" data-height="550" data-width="100%" data-dnt="true" href="https://twitter.com/KennetSchool" data-widget-id="431011823488204800">Tweets by @KennetSchool</a> <script>if (typeof twttr != "undefined") twttr.widgets.load();</script>
  4. adamw

    FDP DataStore

    Do you have a link to the widget on the public site so I can have a look? What does the widget do?
  5. adamw

    FDP DataStore

    @pconkie Okay, so I replicated the call on my side, using your params, and it threw a missing argument exception, because it's expecting a user_uuid to associated this data against. The errors must be suppressed on live boxes and that's why you didn't see that - which is kinda annoying I imagine (I'll look into it). In the meantime, the following code works: FrogOS.fdp({ url: 'datastore/create', path: '/api/fdp/2/', type: 'POST', data: { target_uuid: this.uuid, data: '12345', alias: 'test', user_uuid: FrogOS.getUser().uuid } }).done(function(response) { // Do things console.log("done"); console.log(response); }).fail(function(e) { // Report Error console.log("failed"); }); Have a go with that, and let me know if you have any other issues. The data-store stuff was used for a very specific purpose in Frog - but I made it into an FDP endpoint so that people would be able to experiment with it. It's possible that there's some strange behaviour still lingering about in the code. Thanks!
  6. adamw

    FDP DataStore

    @pconkie - I'll have to have a look at the logs on your server and see why you're getting a 500 error - which usually indicates a code problem. If it was a permissions error then I'd expect the response to tell you as much. What is the target uuid? A user uuid? I'm off work this week, but I'm back in on Monday, so can look at it then for you. Or if @Simon Law has a few moments I'm sure he'd have a look. (He likes to find all the bugs in my code.) Adam
  7. adamw

    FDP DataStore

    Try: FrogOS.fdp({ url: 'datastore/create', path: '/api/fdp/2/', type: 'POST', data: { target_uuid: 'abcdef', data: '12345', alias: 'test' } }).done(function(response) { // Do things console.log("done"); console.log(response); }).fail(function(e) { // Report Error console.log("failed"); }); Note: you'll get an error telling you that 'abcdef' is not a valid frog uuid.
  8. adamw

    FDP DataStore

    Hi @pconkie Sorry for the delay: In your case, you could do a datastore,get call with the params you want to check, to see if you get any data back. If not, you could create a new data-store entry. I think at the moment, if you send another create with the same params, it'll just add another data-store row. Depending on how you want to use this, then that may be fine.
  9. @Graham Quince Whilst not a direct answer to your question, we have some upcoming changes in the next release that may give you another and possibly easier way to do this. If all goes to plan, the next release will contain the ability to edit entries already submitted to forms via the data-viewer and the ability to filter data in the data-viewer. So, this means - (using your example): create a form which staff fill in for absence requests, The form is configured to send an email to their line manager (we have something else coming that might make this even easier - more details to come) and tick the new option that says 'send email to submitting user' when adding the form to the page The staff member fills out the form which sends an email to their line manager. The user gets a copy of this form .The line manager visits the site, uses the data-viewer (which can now be embedded in a widget) - filters all the responses by either person or status (pending, approved / rejected) The manager then edits the entry and selects a response and presses save The user gets an email with the updated response. I've not tested this exact scenario, but I think it should be doable. The next release should be happening over the summer and before the new school year.
  10. @Chris Goluch @Graham Quince Sorry it's taken me so long to see this, I've been busy beavering away at the shiny new things. I think what @Chris Goluch may find useful is the datastore in our FDP endpoints. We've not really mentioned these before because they are still in a state of flux, but they should go some way towards the things you mentioned. FDP/2/datastore - which has the following methods available: (get, create, createMany, update, updateMany, delete) - I'll see if I can dig out some documentation for you to use. Basically, it allows you to store some data against a uuid / user and then use that data as you see fit. Now, because of how this is currently being used, it was more aimed at storing preferences, though you can store large data structures. The upshot of this, is that you should not put any confidential information into here, as others may be able to get to it. The rules around who can see what goes as follows. If you use a widget uuid, then only people who have contribute rights the site the widget is on can create data-store entries for that widget. To get data-store entries for a widet uuid that is on a site, you only need view rights to that site. When it comes to editing data-store entries, you can always edit ones that you own (created) but to edit other peoples you need the correct roles enabled. (Unless the permissions you have on the site have changed to deny you access) So, what does this all mean? It means you can store data, but at the moment it's insecure. I do have a plan to introduce a 'private' flag, which will allow you to lock down data on a per-user basis, but we haven't needed that yet, so it's not been added. Using the datastore I think it should be possible to create a message system or a voting system, along with other things. In future, if the private flag is added, then it would expand the possibilities. Hope this helps. /** * @api {get} /datastore/get Get Datastore entries * @apiVersion 2.0.0 * @apiName get * @apiGroup datastore * * @apiDescription Allows you to get datastore entries saved against users / target uuids. If the target_uuid is a widget on a site, then only people who have view rights or higher can get datastore entries. * * @apiParam {String} target_uuid the uuid against which you wish to get data (e.g. for a widget this.options.content_uuid) * @apiParam {String} data the data you are looking for * @apiParam {String} user_uuid the uuid of the user that this data is associated with (defaults to current user if this param is not passed) * @apiParam {String} alias the alias for this data, e.g. student.locker_number * * @apiSuccessExample Success-Response: * * { * "status": "ok", * "response": { * "uuid": "3AAA219B200C62F048936FD4E58368084607079CA9DD69C1", * "target_uuid": "36712DA5200286BDD0DECF4D1ABEE602B1A4C0ACF0987992", * "user_uuid": "332B044A2000570E940A2FEB71F4F0011971AB7CA10B3032", * "alias": "student.locker_number", * "data": "A4578B", * "created_by": "332B044A2000570E940A2FEB71F4F0011971AB7CA10B3032", * "created_on": 1512127146, * "updated_on": null, * "updated_by": null * } * */ /** * @api {post} /datastore/create Create Datastore entries * @apiVersion 2.0.0 * @apiName create * @apiGroup datastore * * @apiDescription Allows you to create datastore entries saved against users / target uuids If the target_uuid is a widget on a site, then only people who have contribute rights or higher can create datastore entries. * * @apiParam {String} target_uuid the uuid against which you wish to associate the data (e.g. for a widget this.options.content_uuid) * @apiParam {String} data the data you want to store * @apiParam {String} user_uuid the uuid of the user that this data is associated with (defaults to current user if this param is not passed) * @apiParam {String} alias the alias for this data, this can be anything you want, and is to help you differentiate the data. For example: 'student.locker_number, student.random_data' max (255 chars) * * @apiSuccessExample Success-Response: * * { * "status": "ok", * "response": { * "uuid": "3AAA219B200C62F048936FD4E58368084607079CA9DD69C1", * "target_uuid": "36712DA5200286BDD0DECF4D1ABEE602B1A4C0ACF0987992", * "user_uuid": "332B044A2000570E940A2FEB71F4F0011971AB7CA10B3032", * "alias": "student.locker_number", * "data": "A4578B", * "created_by": "332B044A2000570E940A2FEB71F4F0011971AB7CA10B3032", * "created_on": 1512127146, * "updated_on": null, * "updated_by": null * } * */ /** * @api {post} /datastore/update Update Datastore entries * @apiVersion 2.0.0 * @apiName update * @apiGroup datastore * * @apiDescription Allows you to update datastore entries saved against users / target uuids. If the target_uuid is a widget on a site, then only people who have contribute rights or higher can update datastore entries. * * @apiParam {string} The uuid of the entry you wish to update <strong>(Required)</strong> * @apiParam {String} target_uuid the uuid against which you wish to associate the data (e.g. for a widget this.options.content_uuid) * @apiParam {String} data the data you want to store * @apiParam {String} user_uuid the uuid of the user that this data is associated with (defaults to current user if this param is not passed) * @apiParam {String} alias the alias for this data, this can be anything you want, and is to help you differentiate the data. For example: 'student.locker_number, student.random_data' max (255 chars) * * @apiSuccessExample Success-Response: * * { * "status": "ok", * "response": { * "uuid": "3AAA219B200C62F048936FD4E58368084607079CA9DD69C1", * "target_uuid": "36712DA5200286BDD0DECF4D1ABEE602B1A4C0ACF0987992", * "user_uuid": "332B044A2000570E940A2FEB71F4F0011971AB7CA10B3032", * "alias": "student.locker_number", * "data": "A4578B", * "created_by": "332B044A2000570E940A2FEB71F4F0011971AB7CA10B3032", * "created_on": 1512127146, * "updated_on": null, * "updated_by": null * } * */ /** * @api {post} /datastore/delete delete Datastore entries * @apiVersion 2.0.0 * @apiName delete * @apiGroup datastore * * @apiDescription Allows you to delete datastore entries. Data store entries are found based on the params you send, and delete if you have the correct permissions. * * @apiParam {string} The uuid of the entry you wish to delete * @apiParam {String} target_uuid <strong>optional</strong> the uuid against which you wish to associate the data (e.g. for a widget this.options.content_uuid) * @apiParam {String} data the data you want to delete <strong>optional</strong> * @apiParam {String} user_uuid the uuid of the user that this data is associated with (defaults to current user if this param is not passed) <strong>optional</strong> * @apiParam {String} alias the alias for this data <strong>optional</strong> * * @apiSuccessExample Success-Response: * * { * "status": "ok", * "response": { * true * } * */
  11. adamw

    Email Class

    The second option sounds like a good workaround. You'd need a form for each class group though - some of the form improvements we're looking into may help with this in the future, but for now, this seems like a good way to do it. To make it easier you could have your school network admin people set up an email group for each class - (if they don't already have one), so you'd only need to add one address to the form.
  12. Right, so I've found the problem, It's a tiny thing and I'll try and get it into the next release - basically there's a container that displays the status message (live in x days, expired etc) - which takes up some space if the width of the noticeboard is below a certain size. You have the noticeboard in a smaller bucket, which is why you are seeing it, but other people don't.
  13. Hmmm, do you have any HTML widgets with custom CSS on the page or anything like that?
  14. It could be due to the existing notices being copied and pasted from somewhere? Perhaps a word document or an email? It could have picked up some extra-characters which are causing the spacing issues. If you create a new one from scratch and type the entry in, does it do the same?
  15. FDP/2/User/GetChildren - pass the parent uuid as a param and you will get back a list of all the children that the parent is associated with. Then, FDP/2/Group/Memberships - pass the uuid of the child selected and you will get all the groups that child is a member of. You could streamline step1, because we already have a select user widget, and if used by a parent it only shows their current children. Will that get you what you need?
  16. There might be something you could do on individual pages to change it using a HTML widget, but at the moment there is no way of making this change globally. I have heard some talk in the office regarding how we might go about adding the ability for a school to alter the terminology used across the platform from a central location - but nothing concrete yet. Best plan would be to stick it in as an idea on the portal and get it some votes to increase its visibility! I'll also mention it to the guys and gals over here
  17. adamw

    Disk Space

    The quickest way at the moment would be to give the service desk a quick call / email. I'm sure they'll be able to get that info to you
  18. Yup! That makes a lot more sense to me now
  19. @pconkie Looks neat - How do you read it? Is each column a day and a coloured block indicates that home learning was set on that day for the selected subject?
  20. I'll have to dig into the code and have a look, but off the top of my head, you could try listening for the 'app.resize' trigger,. it's possible that it get's fired when you push the min/max button. As for the width... I'll have to get back to you on that, probably some jquery to get the calculated width of the new element. @Graham Quince may know a sneaky way?
  21. You could do something similar here by placing the file on a network drive that the student has access to and by creating a simple FrogCode widget. This depends on how secure you would want this to be - for example, putting the files on frogweb would allow anyone access to those documents. So another student could access a PDF that was not meant for them, if they figure out another students UPN number. Putting it on a network drive would have the advantage of being able to use normal AD permissions to prevent unauthorized access. Of course, if these documents are in no way confidential, then the Frog3 solution would be ideal @gbligh if we had a bit more information on the nature of these documents we may be able to come up with a solution between us all
  22. Depends on where these PDF files live, and how secure you want it to be? What happens if you ever need to update / change / remove this file? If they're on your network then my suggestion: - Create a folder on one of your network drives, inside this folder, create a new folder for each student. Set the permissions on each folder so that only that student can have access to it. - In frog, create a site with a network files widget and point it at the above folder - Share this site to all students Students now will be able to see that folder, but only access their own. Not sure if you can do clever network stuff to hide folders from people who don't have access to them? Option 2, you could use frog, upload all the PDF's to your admin account and then use - 'Send copy to' to send a copy of the file to each student. Option 3, as option 1, but create the folders in Frog. Option 4., if the PDF's are named with something that identified the student, such as their UPN, create a widget that builds a URL to the file that lives on your network. You';d still have to sort the permissions out, to stop someone from changing the URL and getting access to other peoples files. Option 5, Linked documents in SIMS + linked document widget in Frog? Not sure if SIMS allows you to upload a PDF and we've never tried importing them manually, so that's a bit of a guess. Frog 3 was awesome, but FrogLearn is more accessible. It's a balancing act, and we're working hard on making it easy for staff to quickly create things to improve teaching and learning, whilst still giving the advanced users something to get their teeth into. FrogCode helps with this quite a bit.
  23. I'd have to check, but I think that was found and fixed - so an upcoming beta patch should have the fix in it.
  24. adamw

    Google verification

    I think there's two options for validating you are the owner of the site, one is to upload the file google gives you and the other is to set a code in one of the meta-tags. I'm assuming that this option does the latter. Though I've never had to use it personally, so without looking into it - that's a bit of a guess
  25. Sounds like you could build a widget in Frog that handles both the adding of points and the displaying of the data - unless you're required to keep this data in SIMS? Not sure how much work creating the widget would be - seems like it could have a bit of complexity.
×
×
  • Create New...