全体に公開した予定は、全員が編集・削除できてしまう
参加者に公開にした予定は、参加者全員が編集・削除できてしまう
参加者を自分だけにして登録するとその予定は自分のスケジュールにしか表示されない
全体に公開はするけど、編集・削除は作成者のみ、というのができないとグループウェアとしてはマズイのでは?
まぁ、無料のオープンソースだから仕方ないか。。。
予定に対するパーミッションを判断しているのは、DBに保存された「public_flag」で、制限がかかるのは[private]の値が入っている予定のみ。という設定になっているみたい。
制限といっても、予定そのものが表示されるかされないかだけで、編集削除に対する制限ではない。
仕方がないので、自分でなんとかしてみよう。
予定の「編集・削除」は登録者のみとしたいので、方法としては、DBへの書き込み制御をするか、「編集・削除」ボタンを表示させないか、という方法になると思う。
DBへの書き込み制御を行うとSQLいじったりするだろうから、バージョンアップに弱くなると考えて、後者を選択。
「予定の詳細」を表示させたときに、現在のログインユーザーのIDを取得して、表示されている予定の登録者IDと比較するこで制御しようと考えた。
「予定の詳細」ページは[webapp_biz]-[modules]-[templates]-「fh_biz_schedule_view.tpl」を元に表示されている。
ここで、予定の作成者(登録者)のIDは既に「$schedule.c_member」に格納されていることがわかる。
あとどうやってログインユーザーのIDを取得するかということになる。
このページへ各種の値を送り込んでいるのは、[webapp_biz]-[modules]-[biz]-[page]-「fh_schedule_view.php」なので、ここに変数を設定し、tplへ送り込めるようにする。
適当な位置に $this -> set('user_id',$u); と書き込む
これで、tpl側で「$user_id」として値を取得できるので、「fh_biz_schedule_view.tpl」を編集します。
83行目あたりにある「修正する」ボタンと「削除する」ボタンの[t_form_block]を以下の分岐条件でくくる。
({if intval($schedule.c_member_id) == intval($user_id)})
修正する
削除する
({/if})
なぜ、intvalなのかというと、ここではこうしないと値が取れない場合が出たため。原因は不明。
たぶんユーザーIDの取得は他にいい方法あるのだろうが、詳しくないのでこれでヨシとしておこいう。
また、他のページにある「予定の追加」ボタンもIDによって表示させる、させないの条件分岐が必要になってくる。
1.月間スケジュールを表示するページ
2.マイフレンドをクリックしたときに表示されるページ
1に関しては修正方法は同じです。
[webapp_biz]-[modules]-[biz]-「biz_schedule_calender.php」に $this->set('user_id',$u); を追加する。 [webapp_biz]-[modules]-[biz]-「biz_schedule_calender.tpl」の14行目あたりの「予定を追加する」ボタンの記述を条件分岐で囲む2に関しては、smartyが絡んでくるので次回で記録しておきます。