スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

[moodle]コースの位置を一番上へ・一番下へ移動するボタンの追加

ここでは、カテゴリに登録されているコースの順番を入れ替える機能の拡張機能を付加する方法について取り上げています。
今回追加するのは"一番上へ""一番下へ"の機能です。
デフォルトでは一つ上のコースと一つ下のコースが入れ替わる仕組みが提供されています。
この仕組みを利用して一気に上下へ移動する方法を作成します。


上下へいくためのボタンの画像は何でもいいです。(ここではtop.pngとbottom.pngとしてます。)
出来上がった画像を
.../www/moodle/pix/t
の中にいれます。

入れたら、次のコードを探してください。
//上・下へコースの順を入れ替えるアイコンを吐き出しています
if (has_capability('moodle/category:manage', $context)) {
if ($up) {
echo ''.
''.$strmoveup.'
';
} else {
echo $spacer;
}

if ($down) {
echo ''.
''.$strmovedown.'
';
} else {
echo $spacer;
}
$abletomovecourses = true;
} else {


ここを見つけたら、次のコードを $abletomovecourses = true; の前に追加します。
//先ほどのコードを真似して作成します。
//気をつけるべきはパラメータです。
//aタグ最後の方にあるパラメータ movetopとmovebottomにコースのIDを入れます。
//また、imgタグのsrcは先ほど追加した画像の名前にすることを忘れないでください。
/* 前述省略 */
if ($up) {
echo ''.
'一番上へ
';
} else {
echo $spacer;
}
if ($down) {
echo ''.
'一番下へ
';
} else {
echo $spacer;
}

$abletomovecourses = true;
} else {


さらに次のコードを探してください。
//下のコメントアウトを探すとすぐに見つかります
/// Move a course up or down
if ((!empty($moveup) or !empty($movedown)) and confirm_sesskey()) {
require_capability('moodle/category:manage', $context);
$movecourse = NULL;
$swapcourse = NULL;

// ensure the course order has no gaps and isn't at 0
fix_course_sortorder($category->id);

// we are going to need to know the range
$max = get_record_sql('SELECT MAX(sortorder) AS max, 1
FROM ' . $CFG->prefix . 'course WHERE category=' . $category->id);
$max = $max->max + 100;

if (!empty($moveup)) {
$movecourse = get_record('course', 'id', $moveup);
$swapcourse = get_record('course', 'category', $category->id,
'sortorder', $movecourse->sortorder - 1);
} else {
$movecourse = get_record('course', 'id', $movedown);
$swapcourse = get_record('course', 'category', $category->id,
'sortorder', $movecourse->sortorder + 1);
}
if ($swapcourse and $movecourse) {
// check course's category
if ($movecourse->category != $id) {
error('The course doesn\'t belong to this category');
}
// Renumber everything for robustness
begin_sql();
if (!( set_field('course', 'sortorder', $max, 'id', $swapcourse->id)
&& set_field('course', 'sortorder', $swapcourse->sortorder, 'id', $movecourse->id)
&& set_field('course', 'sortorder', $movecourse->sortorder, 'id', $swapcourse->id)
)) {
notify('Could not update that course!');
}
commit_sql();
}
}


ここの下に次のコードを追加します。
//先ほどのコードを真似して書きます。
/// Move a course top or bottom
if ((!empty($movetop) or !empty($movebottom)) and confirm_sesskey()) {
require_capability('moodle/category:manage', $context);
$movecourse = NULL;
$swapcourses = NULL;

// ensure the course order has no gaps and isn't at 0
fix_course_sortorder($category->id);

//入れ替える際にデータをよけておくスペースを取得します
$max = get_record_sql('SELECT MAX(sortorder) AS max, 1
FROM ' . $CFG->prefix . 'course WHERE category=' . $category->id);
$max = $max->max + 100;

print_r('max:'.$max.'
');

//SQLによりDBから自分と入れ替わるデータを取得します
$sql = NULL;
if (!empty($movetop)) {
//movetopの処理
//sortorderが自分より上のものを取得する
$movecourse = get_record('course', 'id', $movetop);

$sql =
'SELECT id,sortorder
FROM ' .$CFG->prefix. 'course
WHERE category=' .$category->id.
' AND sortorder <' .$movecourse->sortorder.
' ORDER BY sortorder ASC';
} else {
//movebottomの処理
//sortorderが自分より下のものを取得する
$movecourse = get_record('course', 'id', $movebottom);

$sql =
'SELECT id,sortorder
FROM ' .$CFG->prefix. 'course
WHERE category=' .$category->id.
' AND sortorder >' .$movecourse->sortorder.
' ORDER BY sortorder DESC';
}
$swapcourses = get_records_sql($sql);

//入れ替え開始
if ($swapcourses and $movecourse) {
// check course's category
if ($movecourse->category != $id) {
error('The course doesn\'t belong to this category');
}
$targetcourse = $movecourse;
begin_sql();
foreach ($swapcourses as $swapcourse) {
set_field('course', 'sortorder', $swapcourse->sortorder, 'id', $targetcourse->id);
$targetcourse = $swapcourse;
}
set_field('course', 'sortorder', $movecourse->sortorder, 'id', $targetcourse->id);
commit_sql();
}
}


これで完了です。
試しに操作して、データベースの値が正しいか確認してください。(テーブル名は mdl_course です)
このエントリーをはてなブックマークに追加

tag : moodle version 1.9.19+ コース course 一番 移動 編集

コメントの投稿

非公開コメント

Translation


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。