では,パッチその1です.
これはMoodleにモバイルモードを付加するためのものです.モバイルモードをOn/Offするには,
- 画面下に表示される切り替えスイッチを押す.
- moodle/mobile/index.php あるいは moodle/mobile_my/index.phpにアクセスしてログインする.(これはモバイルOnかつ設定を初期化)
- moodle/index.php?mobile=on,moodle/index.php?mobile=off,あるいはmoodle/my/index.php?mobile=on,moodle/my/index.php?mobile=offにアクセスしてログインする.(これはモバイルOn/Off可能)
の3つの方法を用意しました.でも実は2と3はほぼ同じです.2で何をしているかというと,単に3をmobile=onでリダイレクトしているだけです.
技術的には,クッキーを設定し,かつ画面をリロードするためにJavaScriptを追加してある程度のことです(moodle/mobile/mobile_cookie.js).ゼロから勉強したので随分と苦労しました.
必須の変更は,lib/javascript.phpとlib/weblib.phpの修正とmobile/mobile_cookie.jsとmobile/lib.phpの追加です.2,3のログイン方法を使わないならばindex.php,my/index.phpの修正とmobile/index.php,mobile_my/index.phpの追加は必要ありません.
まだMoodle1.8は確認していませんが,多分,ほぼ同じ修正でOKだと思います.
lib/javascript.php:赤い行を追加
<script type="text/javascript" src="<?php echo $CFG->httpswwwroot ?>/lib/javascript-static.js"></script>
<script type="text/javascript" src="<?php echo $CFG->httpswwwroot ?>/lib/javascript-mod.php"></script>
<script type="text/javascript" src="<?php echo $CFG->httpswwwroot ?>/lib/overlib/overlib.js"></script>
<script type="text/javascript" src="<?php echo $CFG->httpswwwroot ?>/lib/overlib/overlib_cssstyle.js"></script>
<script type="text/javascript" src="<?php echo $CFG->httpswwwroot ?>/lib/cookies.js"></script>
<script type="text/javascript" src="<?php echo $CFG->httpswwwroot ?>/lib/ufo.js"></script>
<script type="text/javascript" src="<?php echo $CFG->httpswwwroot ?>/mobile/mobile_cookie.js"></script>
<script type="text/javascript" defer="defer">
weblib.php
モバイルモードのOn/Off用のボタンをフッターに追加
(a) 46行近辺
/// We are going to uses filterlib functions here
require_once("$CFG->libdir/filterlib.php");
require_once("$CFG->libdir/ajax/ajaxlib.php");
// ここから追加
require_once("$CFG->dirroot/mobile/lib.php");
// ここまで追加
/// Constants
(b) function print_footer(), 2894行近辺
} else {
$course = get_site(); // Set course as site course by default
$homelink = '<div class="homelink"><a '.$CFG->frametarget.' href="'.$CFG->wwwroot.'/">'.get_string('home').'</a></div>';
$home = false;
}
// ここから追加
$homelink .= '<div><input type="button" value="モバイルモード';
$homelink .= (is_mobile_on()) ? 'を無効にする"' : 'に切り替える"';
$homelink .= "' onclick='";
if (is_mobile_on()) {
$homelink .= 'mobile_cookie_kill_and_reload("on");';
} else {
$homelink .= 'mobile_cookie_set_and_reload("on", "on");';
}
$homelink .= "'></div>";
// ここまで追加
/// Set up some other navigation links (passed from print_header by ugly hack)
$menu = isset($THEME->menu) ? str_replace('navmenu', 'navmenufooter', $THEME->menu) : '';
$title = isset($THEME->title) ? $THEME->title : '';
$button = isset($THEME->button) ? $THEME->button : '';
$heading = isset($THEME->heading) ? $THEME->heading : '';
$navigation = isset($THEME->navigation) ? $THEME->navigation : '';
$navmenulist = isset($THEME->navmenulist) ? $THEME->navmenulist : '';
mobile/mobile_cookie.js
mobileフォルダを作成し,その中にmobile_cookie.jsというファイルを新規作成する.
// クッキーの設定と画面のリロード(クッキーの有効期限は30日)
function mobile_cookie_set_and_reload(name, value) {
var mbc = new cookie("mobile_" + name, value, 30, "/", "", "");
mbc.set();
window.location.reload();
}
// クッキーの削除と画面のリロード
function mobile_cookie_kill_and_reload(name) {
var mbc = new cookie("mobile_" + name, "", "", "/", "", "");
mbc.kill();
window.location.reload();
}
mobile/lib.php
mobileフォルダ内にlib.phpというファイルを新規作成する.
<?php
// (Shirai054): モバイルモード機能の追加 (2008/03/20)
// モバイル端末向けのクッキーを設定する.
function mobile_cookie($name, $value = false) {
// $_SESSION["mobile_$name"] = $value;
return setcookie("mobile_$name", $value, time()+60*60*24*30, "/", $CFG->wwwroot);
}
// モバイル端末向けの設定(クッキー)を初期化する.
function mobile_on() {
$status = mobile_cookie('on', 'on');
$status &= mobile_cookie('courseViewColumn', 'middle');
return $status;
}
// モバイル端末向けの設定(クッキー)を削除する.
function mobile_off() {
$status = mobile_cookie('on');
$status &= mobile_cookie('courseViewColumn');
return $status;
}
// モバイルモードがOnかOffか (戻り値: true / false)
function is_mobile_on() {
return (isset($_COOKIE['mobile_on']) && $_COOKIE['mobile_on'] == 'on');
}
// コースで表示するカラムを返す (戻り値: 'left', 'middle', 'right', 'all' or false)
function courseViewColumn() {
if (isset($_COOKIE['mobile_courseViewColumn'])) return ($_COOKIE['mobile_courseViewColumn']);
return false;
}
?>
index.php
if (get_moodle_cookie() == '') {
set_moodle_cookie('nobody'); // To help search for cookies on login page
}
if (!empty($USER->id)) {
add_to_log(SITEID, 'course', 'view', 'view.php?id='.SITEID, SITEID);
}
if (empty($CFG->langmenu)) {
$langmenu = '';
} else {
$currlang = current_language();
$langs = get_list_of_languages();
$langlabel = get_accesshide(get_string('language'));
$langmenu = popup_form($CFG->wwwroot .'/index.php?lang=', $langs, 'chooselang', $currlang, '', '', '', true, 'self', $langlabel);
}
// ここから追加
switch (optional_param("mobile", false, PARAM_RAW)) {
case 'on':
require_once("$CFG->dirroot/mobile/lib.php");
mobile_on();
break;
case 'off':
require_once("$CFG->dirroot/mobile/lib.php");
mobile_off();
break;
default:
break;
}
// ここまで追加
$PAGE = page_create_object(PAGE_COURSE_VIEW, SITEID);
$pageblocks = blocks_setup($PAGE);
$editing = $PAGE->user_is_editing();
my/index.php
if (isguest()) {
$wwwroot = $CFG->wwwroot.'/login/index.php';
if (!empty($CFG->loginhttps)) {
$wwwroot = str_replace('http:','https:', $wwwroot);
}
print_header($mymoodlestr);
notice_yesno(get_string('noguest', 'my').'<br /><br />'.get_string('liketologin'),
$wwwroot, $CFG->wwwroot);
print_footer();
die();
}
$edit = optional_param('edit', -1, PARAM_BOOL);
$blockaction = optional_param('blockaction', '', PARAM_ALPHA);
// ここから追加
switch (optional_param("mobile", false, PARAM_RAW)) {
case 'on':
require_once("$CFG->dirroot/mobile/lib.php");
mobile_on();
break;
case 'off':
require_once("$CFG->dirroot/mobile/lib.php");
mobile_off();
break;
default:
break;
}
// ここまで追加
$PAGE = page_create_instance($USER->id);
$pageblocks = blocks_setup($PAGE,BLOCKS_PINNED_BOTH);
mobile/index.php
以下の内容のファイルをindex.phpとして作成する.
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: ../index.php?mobile=on");
?>
mobile_my/index.php
mobile_myフォルダを作成し,以下の内容のファイルをindex.phpとして作成する.
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: ../my/index.php?mobile=on");
?>
修正および新規作成したファイルをZIP書庫として添付します.