カレンダー一括流し込みブロック

カレンダー一括流し込みブロック

- Kouta Masuda の投稿
返信数: 19
いつもお世話になっております。
Masudaです。

ブロックの練習を兼ねまして、カレンダー一括流し込みブロックを作成しました。
Moodleのお作法やPHPについても無知の状態で作成しておりますので、
もし、よろしければお作法等のご教授をして頂ければと思います。

基本的な機能としては、
・専用ブロックから、CSVをアップロードできます。
・CSVに書くことができる情報は、「日付」、「イベントタイトル」、「イベントの詳細」のみです。
・現在、サイトイベントのみに対応しております。
・「期間なし」のみの対応となっております。


今後の予定として、
・SimpleTestのファイルアップロードの確認方法を勉強し、テストを追加する。
・SimpleTestのDBを絡めたテストの方法を勉強し、テストを追加する。
・「日付」、「イベントタイトル」、「イベントの詳細」以外の事前設定項目を
ソースに直に埋めていますが、ブロックのコンフィグ等に待避させる。
・一度インポートしたイベントはインポートしないようにする(イベントタイトルにて判断予定)


最大評点: お役立ち度: ★★★★★★★ (2)
Kouta Masuda への返信

Re: カレンダー一括流し込みブロック

- Tatsuya Shirai の投稿
なぜか放置されて来たこの問題に、光明が差しましたね。

一日も早い完成と公開を期待しています。できれば4月になる前に。国民の休日ファイルも一緒の公開ですとモアベター^^)v
------------------------------
あと、こちらのTrackerはウォッチされていますか? 実は私はウォッチを設定しておきながら、目を通していません^^; 横着。。。
http://tracker.moodle.org/browse/MDL-16660
最大評点: お役立ち度: ★★★★★★★ (2)
Tatsuya Shirai への返信

Re: カレンダー一括流し込みブロック

- Kouta Masuda の投稿
Masudaです。
完成とまではいきませんが、
第一段階としてご提示致します。
2010年度分の祝日CSVも合わせてアップさせて頂きました。

問題点、使用感、そして、Moodleのブロックとしてはここは間違っているなどを教えて頂いて、
Moodle利用者の腕を磨きたいと思います。

------------------------------
あと、こちらのTrackerはウォッチされていますか? 実は私はウォッチを設定しておきながら、目を通していません^^; 横着。。。
http://tracker.moodle.org/browse/MDL-16660

ウォッチしていませんでした。
さっそくウオッチ設定して目を通しておきますね!


Kouta Masuda への返信

Re: カレンダー一括流し込みブロック

- Kouta Masuda の投稿
Masudaです。

公開させて頂いてまもなくで申し訳ございませんが、バグ修正をさせて頂きます。
イベントをインサートする際に、addslashes() でエスケープを実施していない旧バージョンを
アップしてしまいました。

混乱を招いてもうしわけないのですが、こちらをご利用ください。


最大評点: お役立ち度: ★★★★★★★ (1)
Kouta Masuda への返信

Re: カレンダー一括流し込みブロック

- Tatsuya Shirai の投稿

いま,システムの改変中なので試すことができません.

とても楽しみなのですが,結果報告はもう少しお待ち下さい.

Tatsuya Shirai への返信

Re: カレンダー一括流し込みブロック

- Kouta Masuda の投稿
ありがとうございます。
ご報告楽しみにしております。
今後の勉強のため、よろしくない箇所等ございましたら、
きびしくお願いします!

後、度々で申し訳ございませんが、
Zipをした際に、ReadMEの説明と異なるフォルダ構造に
なっておりましたので、修正したものをUP致します。


Kouta Masuda への返信

Re: カレンダー一括流し込みブロック

- Tatsuya Shirai の投稿
依然として出張先からです。

私は同等の機能を「サイト管理ブロック」に項目を追加して実現しようと考えていました。実はサイト管理ブロックに項目を追加するのは意外と簡単です。

この方法ですと、管理者以外はカレンダーにイベントを一括書き込みできないことが保障されて安心である反面、Moodleのソースに手を入れなくてはならない上に、コースイベントの追加まで管理者の手を煩わすことになります。

ブロックで実現するという発想は全くありませんでした。

ブロックでしたら各コースの教師がコースイベントを一括書き込みできるなど、長所が多いですね。是非ともコースイベントへの対応をお願いします。

ただ、権限についての仕様策定をしっかりと行う必要がありますね。でも、その権限についてはカレンダーブロックのソースが参考になりそうです。そのユーザが書き込み可能なイベントの種類を取得し、それに応じて入力するイベントの種類の選択肢(ボタン)を変えていますよね。
Kouta Masuda への返信

Re: カレンダー一括流し込みブロック

- Tatsuya Shirai の投稿

 とりあえずブロックのインストールのみ行いました.

 気になったのはフォルダ構成です.オリジナルは以下の通りです.

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書庫を貼付します.

Tatsuya Shirai への返信

Re: カレンダー一括流し込みブロック

- Tatsuya Shirai の投稿

 一括登録したイベントを一括あるいは選択的に削除する機能について.

 Moodleのデータベースを見てみました.
 mdl_eventというテーブルがイベントのテーブルですね.

 一括登録する際に,このidをファイルに出力できないでしょうか.場所はmoodledata/tempの下に直接出力するか,あるいはcalendar_batch_importというフォルダをmoodledataの下に作成.ファイル名はcal_bat_imp_20100401145030_uid1.logのように一括読み込みを行った日時とする.さらに流し込みを行ったユーザのユーザーIDも付加しておくと良いかも知れません.あとで削除を行う際に他人のインポートしたイベントを消せないですよね.勿論,管理者はどのユーザIDのファイルでも開ける,と.

 現在の「流し込み開始」以外に「登録済みのイベントを削除する」というボタンを追加する.クリックされるとウィンドウが開き,そのユーザが削除可能な一括流し込みされたログファイルの一覧(ファイル名を元にしてユーザフレンドリーな文字列に変換されたリンク)が表示される.そして一つのリンクをクリックすると,選択されたログファイルに記録されているidを元にしてデータベースからイベント一覧を読み出し,チェックボックス付きのリストで表示される.すべて選択/すべて解除,のリンクも追加.そして選択されたイベントを削除するための「選択されたイベントを削除」ボタンを押すと,そのidをもつイベントがデータベースから削除される.削除されなかったイベントのidだけを読み込んだログファイルに上書き(全て削除したならばファイルを削除)して処理終了.

 勝手に仕様を考えましたが,このようなインタフェースで,特にイベントのidを独自のログファイルに書き出すことで,自由に一括流し込みを行ったイベントを削除できるような気がします.

Tatsuya Shirai への返信

Re: カレンダー一括流し込みブロック

- Kouta Masuda の投稿
なるほど、とても参考になります。

やっぱり、流しっぱなしでは、何かと不便なのでこのあたりは
追加していきたいと思います。

Tatsuya Shirai への返信

Re: カレンダー一括流し込みブロック

- Tatsuya Shirai の投稿

 いま現在はブロックをフロントページにしか配置できませんね.
 これをコースを編集する権限をもつ全てのコースに配置できるようにできないでしょうか.

 将来的に管理者以外の教師でもコースイベントを一括読み込みできるようにする際には必要になる機能です.早めに実装した方が,バグの発見が容易です.

Tatsuya Shirai への返信

Re: カレンダー一括流し込みブロック

- Kouta Masuda の投稿
そうです。
今現在は、管理者のみに、かつサイトトップにできるようにしてあります。

これは、当方の運用のルールなのですが、、

将来的にはこのあたりをコンフィグで変更できればいいかなぁと、
漠然と考えています。
Tatsuya Shirai への返信

休日という概念

- Tatsuya Shirai の投稿

 あまり詳しくは調べていないのですが.

 データベース中のイベント(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'などのデータを記録することできたりしませんか.そうすればカレンダーを表示する際に日付に色をつけることが可能ですね.ちょっと危険な賭けですが.

#でも考えてみたら,このカレンダー.少なくとも土曜日は青,日曜日は赤くらいに日付の色を変えたいですね.

Tatsuya Shirai への返信

Re: 休日という概念

- Tatsuya Shirai の投稿

 もう少し大人しいhackとしては,イベント名の頭に'H:勤労感謝の日'のように'H:'が付いていたら休日とする,というやり方もありですね.実際に表示する際には'H:'は取り除いてしまえば良い.

 'H:'がイヤならば'\H:'のように'\'を入れたりすれば良いですが,気をつけないとエスケープされちゃいそうですね.

 とりあえずfs_moodleでは'H:'(パラメータで変更可能)としてみましょうか.


 方針が決まったので,これから一括流し込みを試させて頂きます.

Tatsuya Shirai への返信

Re: 休日という概念

- Tatsuya Shirai の投稿

 まず1行だけのファイルで読み込み成功.

 2行だけのファイルでの読み込みも成功.いいですねー.

 さて,残りも読み込み成功.完璧です!

 とりあえず当方の環境ではイベント名の頭に H: を付けて読み込ませました.


ケアレスミスです^^).  ”インポートできかった予定一覧”

 もしエラーが無かった場合は表示しないか,エラーはありませんでした,や,すべてインポートできました.と表示されると心地よいですね.

 インポート成功した祝日については,

1:2010/1/11, H:成人の日->

処理終了

のように表示されますが,この頭のナンバーは(1)や[1]のように括弧で括った方が分かりやすいですね.あと処理終了を -> の右に出すのは難しいでしょうか.

Tatsuya Shirai への返信

Re: 休日という概念

- Tatsuya Shirai の投稿

カレンダーの土日および祝日に色を付けることについては以下のディスカッションに派生します.

http://moodle.org/mod/forum/discuss.php?d=147179

Tatsuya Shirai への返信

Re: 休日という概念

- Tatsuya Shirai の投稿

 こちらは完成しましたよ!
 http://moodle.org/mod/forum/discuss.php?d=147179

 コースイベント,ユーザイベントへの対応を楽しみにしています!

Tatsuya Shirai への返信

Re: 休日という概念

- Kouta Masuda の投稿
すばらしいです!

完成おめでとうございます。
コースイベント、ユーザイベント化、そして、期間への対応をしていきたいと思います。
なんとか、今週か来週末にはリリースできるといいのですが、、、

Tatsuya Shirai への返信

Re: カレンダー一括流し込みブロック

- Kouta Masuda の投稿
お返事が遅れてすいません。

フォルダ構造について、とても参考になりました。
ありがとうございます!