Masudaです。
ブロックの練習を兼ねまして、カレンダー一括流し込みブロックを作成しました。
Moodleのお作法やPHPについても無知の状態で作成しておりますので、
もし、よろしければお作法等のご教授をして頂ければと思います。
基本的な機能としては、
・専用ブロックから、CSVをアップロードできます。
・CSVに書くことができる情報は、「日付」、「イベントタイトル」、「イベントの詳細」のみです。
・現在、サイトイベントのみに対応しております。
・「期間なし」のみの対応となっております。
今後の予定として、
・SimpleTestのファイルアップロードの確認方法を勉強し、テストを追加する。
・SimpleTestのDBを絡めたテストの方法を勉強し、テストを追加する。
・「日付」、「イベントタイトル」、「イベントの詳細」以外の事前設定項目を
ソースに直に埋めていますが、ブロックのコンフィグ等に待避させる。
・一度インポートしたイベントはインポートしないようにする(イベントタイトルにて判断予定)
一日も早い完成と公開を期待しています。できれば4月になる前に。国民の休日ファイルも一緒の公開ですとモアベター^^)v
------------------------------
あと、こちらのTrackerはウォッチされていますか? 実は私はウォッチを設定しておきながら、目を通していません^^; 横着。。。
http://tracker.moodle.org/browse/MDL-16660
完成とまではいきませんが、
第一段階としてご提示致します。
2010年度分の祝日CSVも合わせてアップさせて頂きました。
問題点、使用感、そして、Moodleのブロックとしてはここは間違っているなどを教えて頂いて、
Moodle利用者の腕を磨きたいと思います。
------------------------------
あと、こちらのTrackerはウォッチされていますか? 実は私はウォッチを設定しておきながら、目を通していません^^; 横着。。。
http://tracker.moodle.org/browse/MDL-16660
ウォッチしていませんでした。
さっそくウオッチ設定して目を通しておきますね!
公開させて頂いてまもなくで申し訳ございませんが、バグ修正をさせて頂きます。
イベントをインサートする際に、addslashes() でエスケープを実施していない旧バージョンを
アップしてしまいました。
混乱を招いてもうしわけないのですが、こちらをご利用ください。
ご報告楽しみにしております。
今後の勉強のため、よろしくない箇所等ございましたら、
きびしくお願いします!
後、度々で申し訳ございませんが、
Zipをした際に、ReadMEの説明と異なるフォルダ構造に
なっておりましたので、修正したものをUP致します。
私は同等の機能を「サイト管理ブロック」に項目を追加して実現しようと考えていました。実はサイト管理ブロックに項目を追加するのは意外と簡単です。
この方法ですと、管理者以外はカレンダーにイベントを一括書き込みできないことが保障されて安心である反面、Moodleのソースに手を入れなくてはならない上に、コースイベントの追加まで管理者の手を煩わすことになります。
ブロックで実現するという発想は全くありませんでした。
ブロックでしたら各コースの教師がコースイベントを一括書き込みできるなど、長所が多いですね。是非ともコースイベントへの対応をお願いします。
ただ、権限についての仕様策定をしっかりと行う必要がありますね。でも、その権限についてはカレンダーブロックのソースが参考になりそうです。そのユーザが書き込み可能なイベントの種類を取得し、それに応じて入力するイベントの種類の選択肢(ボタン)を変えていますよね。
とりあえずブロックのインストールのみ行いました.
気になったのはフォルダ構成です.オリジナルは以下の通りです.
calendar_batch_import_20100323_01.zip
/calendar_batch_import
/blocks
block_calendar_batch_import.php
config_instance.html
inputfile_form.php
view_select_file.php
/classes
CalendarBatchManager.php
CalendarEditer.php
EventInitializeHelper.php
EventInitializeHelperImSource.php
lib.php
/simpletest
Schedules.csv
testCalendarBatchManager.php
testCalendarEditor.php
testEventInitialzeHelperImSource.php
/lang
/ja_utf8
block_calendar_batch_import.php
2919年度祝日.csv
readme.txt
これよりも以下のような構造の方が良いと思います.
calendar_batch_import_20100323_01.zip
/blocks
/calendar_batch_import
block_calendar_batch_import.php
config_instance.html
inputfile_form.php
view_select_file.php
/classes
CalendarBatchManager.php
CalendarEditer.php
EventInitializeHelper.php
EventInitializeHelperImSource.php
lib.php
/simpletest
Schedules.csv
testCalendarBatchManager.php
testCalendarEditor.php
testEventInitialzeHelperImSource.php
/lang
/ja_utf8
block_calendar_batch_import.php
2919年度祝日.csv
readme.txt
そしてblocksの下にあるcalendar_batch_importフォルダをmoodle/blocksフォルダーにコピーするだけでOKです.言語パックもここから検索してくれます.
構成を入れ替えたzip書庫を貼付します.
一括登録したイベントを一括あるいは選択的に削除する機能について.
Moodleのデータベースを見てみました.
mdl_eventというテーブルがイベントのテーブルですね.
一括登録する際に,このidをファイルに出力できないでしょうか.場所はmoodledata/tempの下に直接出力するか,あるいはcalendar_batch_importというフォルダをmoodledataの下に作成.ファイル名はcal_bat_imp_20100401145030_uid1.logのように一括読み込みを行った日時とする.さらに流し込みを行ったユーザのユーザーIDも付加しておくと良いかも知れません.あとで削除を行う際に他人のインポートしたイベントを消せないですよね.勿論,管理者はどのユーザIDのファイルでも開ける,と.
現在の「流し込み開始」以外に「登録済みのイベントを削除する」というボタンを追加する.クリックされるとウィンドウが開き,そのユーザが削除可能な一括流し込みされたログファイルの一覧(ファイル名を元にしてユーザフレンドリーな文字列に変換されたリンク)が表示される.そして一つのリンクをクリックすると,選択されたログファイルに記録されているidを元にしてデータベースからイベント一覧を読み出し,チェックボックス付きのリストで表示される.すべて選択/すべて解除,のリンクも追加.そして選択されたイベントを削除するための「選択されたイベントを削除」ボタンを押すと,そのidをもつイベントがデータベースから削除される.削除されなかったイベントのidだけを読み込んだログファイルに上書き(全て削除したならばファイルを削除)して処理終了.
勝手に仕様を考えましたが,このようなインタフェースで,特にイベントのidを独自のログファイルに書き出すことで,自由に一括流し込みを行ったイベントを削除できるような気がします.
あまり詳しくは調べていないのですが.
データベース中のイベント(mdl_event)のテーブルを見てみると,eventtypeという項があります.
手元のデータベースを見てみると,空かdue, openか,あと,0と1という数値も入っています.なんでしょうね,これは.
moodle/calendar/event.phpの中の$eventtypeとは別のようですね.
ソースを見てみたのですが,このeventtypeの項を利用しているところが見当たりません.
ああ,なるほど.
assignmentやchatなどのモジュールによって追加されたイベントの場合に活用されているようですね.assignmentの場合はdue,chatの場合は0や1,quizやlessonでopenが入力されていますね.割と勝手に使っていいフィールドのように見えます.なお,calendar/event.phpのfunction validate_form()で引数として渡された登録/更新用データベースのレコードデータの正当性をチェックしていますが,eventtypeはスルーですね.
ということはです,単なるカレンダーのイベントとして記録する際に,ここに'holiday'などのデータを記録することできたりしませんか.そうすればカレンダーを表示する際に日付に色をつけることが可能ですね.ちょっと危険な賭けですが.
#でも考えてみたら,このカレンダー.少なくとも土曜日は青,日曜日は赤くらいに日付の色を変えたいですね.
ちなみに5月1日のメーデーというのは国民の祝日?
今年は丁度,土曜日でお休みですが.
http://ja.wikipedia.org/wiki/%E5%9B%BD%E6%B0%91%E3%81%AE%E4%BC%91%E6%97%A5
http://www.astroarts.co.jp/news/2009/02/02calendar/index-j.shtml
まず1行だけのファイルで読み込み成功.
2行だけのファイルでの読み込みも成功.いいですねー.
さて,残りも読み込み成功.完璧です!
とりあえず当方の環境ではイベント名の頭に H: を付けて読み込ませました.
ケアレスミスです^^). ”インポートできかった予定一覧”
もしエラーが無かった場合は表示しないか,エラーはありませんでした,や,すべてインポートできました.と表示されると心地よいですね.
インポート成功した祝日については,
1:2010/1/11, H:成人の日->
処理終了
のように表示されますが,この頭のナンバーは(1)や[1]のように括弧で括った方が分かりやすいですね.あと処理終了を -> の右に出すのは難しいでしょうか.
カレンダーの土日および祝日に色を付けることについては以下のディスカッションに派生します.
こちらは完成しましたよ!
http://moodle.org/mod/forum/discuss.php?d=147179
コースイベント,ユーザイベントへの対応を楽しみにしています!