カレンダーを使い易く

Re: カレンダーを使い易く

- Tatsuya Shirai の投稿
返信数: 0
7月4日に報告した修正を行うことで,(イベントの存在しない日も)月単位表示のカレンダーの日付をクリックすることで一日単位表示のカレンダーにジャンプし,イベントを容易に追加できるようになりました.

さらに以下の修正を行うことで,フロントページやコース内に表示されている小さな月単位表示のカレンダー(以下,miniカレンダー)の日付も一日単位表示のカレンダーにジャンプできるようになります.

もう少し詳しく説明します.以前の修正は,miniカレンダー上部の”2007年11月”といった年月文字列部分をクリックすると表示される(比較的大きな)月単位表示のカレンダーに対しての修正でした.しかし,実は圧倒的にminiカレンダーの使用頻度の方が高い.わざわざ月単位表示のカレンダーに移動する手間を省きたい.

調べてみると,miniカレンダーの日付部分も,月単位表示カレンダーとほぼ同じで,イベントの設定されていない日の日付部分は単なる文字表示,イベントの設定されている日の日付部分は(ハイパーリンクではなく)ポップアップウィンドウによるイベント表示(各イベントをクリックすると一日単位表示のカレンダーにジャンプ)になっていました.したがって,イベントの設定されていない日の日付部分を先日の修正同様にハイパーリンクにするだけで,一応,OKでした.

一安心して,使い始めてみたのですが,直ぐに不具合に気付きました.”今日”です.”今日”の日付はイベントが設定されていなくてもポップアップウィンドウが表示されます.このポップアップウィンドウが邪魔で,ハイパーリンク化した日付をクリックできません怒り. ポップアップが表示されるまでのタイムラグを利用して素早くクリックすれば...可能は可能ですが,若さが必要です.

そこで2箇所目の修正は,”今日”にイベントが設定していない場合に表示されるポップアップの”イベントなし”というイベントに,一日単位表示のカレンダーへのハイパーリンクを張りました.

miniカレンダーの修正は,moodle/calendar/lib.php中のfunction calendar_get_mini()に対して行います.

(A) イベントの設定されていない日付に,一日単位表示のカレンダーへのハイパーリンクを張る. : 270行近辺
// Class and cell content
if(isset($typesbyday[$day]['startglobal'])) {
$class .= ' event_global';
}
else if(isset($typesbyday[$day]['startcourse'])) {
$class .= ' event_course';
}
else if(isset($typesbyday[$day]['startgroup'])) {
$class .= ' event_group';
}
else if(isset($typesbyday[$day]['startuser'])) {
$class .= ' event_user';
}
$cell = '<a href="'.$dayhref.'" '.$popup.'>'.$day.'</a>';
}
else {
// $cell = $day;
$dayhref = calendar_get_link_href(CALENDAR_URL.'view.php?view=day'.$morehref.'&amp;', $day, $m, $y);
$cell = '<a href="'.$dayhref.'">'.$day.'</a>';
}

(B) イベントの設定されていない”今日”の日付のポップアップウィンドウに表示される”イベントなし”に,一日単位表示のカレンダーへのハイパーリンクを張る.: 295行近辺
// Special visual fx for today
//Accessibility: hidden text for today, and popup.
if($display->thismonth && $day == $d) {
$class .= ' today';
$today = get_string('today', 'calendar').' '.userdate(time(), get_string('strftimedayshort'));

if(! isset($eventsbyday[$day])) {
// $class .= ' eventnone';
// $popup = calendar_get_popup(true, false);
// $cell = '<a href="#" '.$popup.'>'.$day.'</a>';
$dayhref = calendar_get_link_href(CALENDAR_URL.'view.php?view=day'.$morehref.'&amp;', $day, $m, $y);
$popupcontent = '<div><a href="'.$dayhref.'">'.get_string('eventnone', 'calendar').'</a></div>';
$popup = calendar_get_popup(false, time(), $popupcontent);
$cell = '<a href="'.$dayhref.'" '.$popup.'>'.$day.'</a>';
}
$cell = get_accesshide($today.' ').$cell;
}

どうでしょう.
かなりカレンダーへのイベントの追加が楽になったと思います.
何か不具合は無いでしょうか?
ちょっと心配なのは,サイトイベント,ユーザイベントはともかくとして,コースイベントがどういう扱いになるのか?という点です.コースから飛んだ場合は良いとして,フロントページから一日単位表示のカレンダーへ辿り着いたとして,そこでコースイベントを追加したらどうなるのか?

これはいま検証してみました.フロントページから一日単位表示のカレンダーへジャンプして,新しいイベントを追加する際は,”イベントの種類”にコースイベントが表示されず,サイトイベントとユーザーイベントの二つのみが表示されました.一応,正常に機能しているようです.