Example #1
0
/**
 * Sets up the editing lock
 *
 * @param object $lock
 * @param string $ouwiki
 */
function ouwiki_print_editlock($lock, $ouwiki)
{
    global $DB, $PAGE;
    // Prepare the warning about lock without JS...
    $a = new StdClass();
    $a->now = userdate(time(), get_string('strftimetime'));
    $a->minutes = (int) (OUWIKI_LOCK_NOJS / 60);
    $a->deadline = userdate(time() + $a->minutes * 60, get_string('strftimetime'));
    $nojswarning = get_string('nojswarning', 'ouwiki', $a);
    $nojsstart = '<p class="ouw_nojswarning">';
    // Put in the AJAX for keeping the lock, if on a supported browser
    $ie = check_browser_version('MSIE', 6.0);
    $ff = check_browser_version('Gecko', 20051106);
    $op = check_browser_version('Opera', 9.0);
    $sa = check_browser_version('Safari', 412);
    $ch = check_browser_version('Chrome', 14);
    $js = $ie || $ff || $op || $sa || $ch;
    if ($js) {
        $nojsdisabled = get_string('nojsdisabled', 'ouwiki');
        $nojs = $nojsstart . $nojsdisabled . ' ' . $nojswarning . '<img src="nojslock.php?lockid=' . $lock->id . '" alt=""/></p>';
        $PAGE->requires->yui2_lib(array('yahoo', 'event', 'connection'));
        $strlockcancelled = ouwiki_javascript_escape(get_string('lockcancelled', 'ouwiki'));
        $intervalms = OUWIKI_LOCK_RECONFIRM * 1000;
        $timeoutscript = '';
        if ($ouwiki->timeout) {
            $countdownurgent = ouwiki_javascript_escape(get_string('countdownurgent', 'ouwiki'));
            $timeoutscript = "var ouw_countdownto = (new Date()).getTime()+1000*{$ouwiki->timeout};\n                    var ouw_countdowninterval=setInterval(function() {\n                    var countdown=document.getElementById('ouw_countdown');\n                    var timeleft=ouw_countdownto-(new Date().getTime());\n                    if (timeleft < 0) {\n                        clearInterval(ouw_countdowninterval);\n                        document.forms['mform1'].elements['save'].click();\n                        return;\n                    }\n                    if(timeleft<2*60*1000) {\n                        var urgent=document.getElementById('ouw_countdownurgent');\n                        if(!urgent.firstChild) {\n                            urgent.appendChild(document.createTextNode(\"" . $countdownurgent . "\"));\n                            countdown.style.fontWeight='bold';\n                            countdown.style.color='red';\n                        }\n                    }\n                    var minutes=Math.floor(timeleft/(60*1000));\n                    var seconds=Math.floor(timeleft/1000) - minutes*60;\n                    var text=minutes+':';\n                    if(seconds<10) text+='0';\n                    text+=seconds;\n                    while(countdown.firstChild) {\n                        countdown.removeChild(countdown.firstChild);\n                    }\n                    countdown.appendChild(document.createTextNode(text));\n                },500);\n            ";
        }
        print "<script type='text/javascript'>\n            var intervalID;\n            function handleResponse(o) {\n                if(o.responseText=='cancel') {\n                    document.forms['mform1'].elements['id_preview'].disabled=true;\n                    document.forms['mform1'].elements['id_save'].disabled=true;\n                    clearInterval(intervalID);\n                    alert(\"{$strlockcancelled}\");\n                }\n            }\n            function handleFailure(o) {\n                // Ignore for now\n            }\n            intervalID=setInterval(function() {\n                YAHOO.util.Connect.asyncRequest('POST','confirmlock.php',\n                    {success:handleResponse,failure:handleFailure},'lockid={$lock->id}');\n                },{$intervalms});\n            {$timeoutscript}\n            </script>\n            <noscript>\n            {$nojs}\n            </noscript>\n        ";
    } else {
        // If they have a non-supported browser, update the lock time right now without
        // going through the dodgy image method, to reserve their 15-minute slot.
        // (This means it will work for Lynx, for instance.)
        print $nojsstart . get_string('nojsbrowser', 'ouwiki') . ' ' . $nojswarning . '.</p>';
        $lock->seenat = time() + OUWIKI_LOCK_NOJS;
        $DB->update_record('ouwiki_locks', $lock);
    }
}
if (class_exists('ouflags') && ou_get_is_mobile()) {
    $usehtmleditor = false;
}
// This is a bit evil. What happens is we print the plaintext version of the format (in case
// they have javascript off) then set the content to the original version if they have JS on
// and are using the editor.
print_textarea($usehtmleditor, 30, 100, 0, 0, 'content', ouwiki_xhtml_to_plain($existing));
print '</td></tr></table>
<input type="hidden" id="ouw_format" name="format" value="1" />
<input type="hidden" name="sesskey" value="' . sesskey() . '" />
<input type="submit" id="ouw_save" name="save" value="' . get_string('savechanges') . '" />
<input type="submit" id="ouw_preview" name="preview" value="' . get_string('preview', 'ouwiki') . '" />
<input type="submit" name="cancel" value="' . get_string('cancel') . '" />';
if ($usehtmleditor) {
    print '
<script type="text/javascript">
document.getElementById("edit-content").value="' . ouwiki_javascript_escape($existing) . '";
document.getElementById("ouw_format").value="0";
var button1 = document.getElementById("ouw_save"), button2 = document.getElementById("ouw_preview");
var fn = function() { setTimeout(function() { button1.disabled = true; button2.disabled = true; }, 0); };
button1.onclick = fn;
button2.onclick = fn;
</script>
';
}
print '</form>';
if ($usehtmleditor) {
    use_html_editor();
}
// Footer
ouwiki_print_footer($course, $cm, $subwiki, $pagename);