OK I may be missing something (a little knowledge is dangerous) but I'll
try to explain things as I understand them. Apologies if I'm stating the
blinking obvious at any point.
I have a PHP 'filter' for Moodle (and similar plugin for Mahara) which
effectively replaces a link to a data structure file, uploaded to Moodle,
with the code to display this link with JSmol. Currently, this is set up
for a subset of datatypes that JSmol?Jmol recognises (cif, cml, mcif, mol,
pdb, sdf, xyz) though is easily extended. I am now trying to add the binary
formats pdb.gz and pse.
The uploaded file links are of the form
http://site-address/moodle/pluginfile.php?/22/mod_label/intro/1crn.pdb.gz<http://site-address/moodle/pluginfile.php?/22/mod_label/intro/1crn.pdb>
and
access to the files depends on the context, user, view permissions etc of
Moodle (controlled via Moodle's pluginfile.php etc). This 'just works', in
most cases, as the filter code (in moodle/filter/jmol/filter.php) follows a
pretty standard filter template and includes/requires all the necessary
Moodle files and context variables to allow the relvant file access.
This all works nicely with text data files (mol, pdb etc) with all browsers
(IE 8 defaults to Jmol rather than JSmol). Also, works for Firefox, Opera
and Safari with the binary files (.pse. and .pdb.gz). However, this fails
with the binary files with Chrome and IE9/10. As I understand it, this is
because jsmol.php is called to handle binary-to-base64 conversion (required
for Chrome and IE) but since it is not 'aware' of the Moodle 'context',
jsmol.php is blocked from accessing the file. If I bypass/turn off the
Moodle file access permissions in 'hacky' insecure ways, then the binary
files are displayed with Chrome and IE.
One (the best?) way to fix this would be to pass all the necessary context
variables to jsmol.php such that it can access the file link.Not yet made
any progress with this and this will need a different customisation for
each CMS system (Moodle, Mahara etc).
As an alternative, I was trying to set up the binary-to-base64 conversion
'on-the-fly' within the filter.php code (i.e. without calling jsmol.php),
then load into JSmol. Hence my enquiry about the best way to do this (e.g.
using PHP file_get contents(), base64-encode() and JSmol load or load data
or whatever?). I have gleaned some understanding from scrutinising the
jsmol.php code, but not yet got this to work.
One other workaround is to switch to Jmol (which does not require
jsmol.php) rather than JSmol for the problematic browser-file combinations.
This does work (though not set up on the test server, below) but somewhat
defeats the object of using JSmol. Perhaps if all else fails...
Any suggestions most welcome!
You can see the problem on a test Moodle installation here:
http://blueliaslearning.com/moodle/
Choose the JSmol Filter Test link and select the [Login as guest] button.
All should be fine with Firefox, Safari or Opera, but not with IE 9/10 or
Chrome viewing the .pdb.gz or .pse files.
Many thanks
Geoff
> >Blocked by what? when? What has it to do with your Course Management
> >System? It's just an AJAX call to you server.
>
> >> Hi Bob
> >>
> >> Appreciate that turning binary into BASE64 is exactly what jsmol.php
> does
> >> and that in most cases it works very nicely.
> >> However, 'out-of-the-box' it is being blocked by the file APIs of the
> >> particular PHP-based CMSs.
> >> Was looking for a simple generic way to get around this.
> >>
> >> Geoff
>
>
------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
Jmol-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jmol-users