Drupal7 ユーザー毎にDISK容量制限をかける

Events happening in the community are now at Drupal community events on www.drupal.org.
redboxhosting's picture

現在、drupal7にてユーザー毎にDiskQuotaをかけ、さらに特定のアクションでQuota上限を変更したいと考えております。

単純なQuotaをかけるだけであれば、以下のUser Disk Quotaモジュールで実装できました。
https://www.drupal.org/project/user_disk_quota

しかし、こちらでは特定のアクションを行った際、値を変更するということが標準機能では難しそうです。

一番ベストなのはRulesモジュールで特定のアクションを判定し、User Quotaの値を変更できればベストなのですが、このようなアクションを実装する手段があるかどうかみなさまからアドバイス頂けると助かります。

宜しくお願い致します。

Comments

考えられるアプローチは次の 2

hgoto's picture

考えられるアプローチは次の 2 通りかと思います。

  1. コントリビュートモジュールの組み合わせと設定で解決する
  2. ( 1 では難しいので)カスタムコードで解決する

1 については私も User Disk Quota の UI とコードを確認してみました。結果として、そのようなインタフェースは提供されていませんでしたので、、 1 での解決はちょっと難しいかと思います。。ご要件を満たすぴったりのモジュールもないようです。ユーザーごとの quota が各ユーザーオブジェクトのプロパティにセットされてさえいれば Rules で扱えるのですが、残念ながらそのようにはなっていないようです(コントリビュートのしどころですね)。。

2 についてですが、 2 の中でまた 3 つほどのアプローチが考えられるかと思います。いずれも User Disk Quota を使い、足りない部分だけを補います。

  • A: Rules を使う。ご認識のとおりアクションだけが足りないのでカスタムコードでオリジナルのアクションを作って補う。
  • B: Rules を使う。モジュールは作らず、 PHP filter モジュールを有効にして rule action で PHP を選択し User Disk Quote の関数を叩くコードを書き入れる。
  • C: Rules を使わず hook 関数を実装してすべてハードコーディングで実現する。

私なら A で進めたくなる気がしますが最適な方法は詳細の状況にもよるかと思います。

あまり解決にはつながらないコメントで申し訳ありません。。ご参考にしていただけますと幸いです。

redboxhosting's picture

いつもアドバイスありがとうございます!

私もモジュールの組み合わせで可能かどうか色々探しましたが、難しそうでした。
このような利用方法はあまり一般的ではないのかもしれません..

2について私でも実装出来そうなのは Bかなと考えています。

現在User Disk Quotaのたたくべき関数(恐らくDBInsertする部分)をRulesに組み込むことを検討しています。

Aのほうが実装としては簡単そう?ですがやはりまだなれていないせいもあり、イメージがつかめません。

ひとまず少し強引ですが実装ができましたら改めてご報告できればと考えています!

hgoto's picture

ご丁寧にお返事くださりありがとうございます。

そうですね、まずは A でやられてみて、できたら B に移行するというのがよいかもしれません!

ちょっと的外れなアイデアになるかもしれませんが、コードを触らない別のアプローチとしてロールを使うのもありかもしれないと思いました。具体的には

  • Disk Quota が異なる複数のロールをあらかじめ用意しておいて Rules でロールを切り替える形で Disk Quota を変える。

という形です。 Disk Quota が個人によって変わるのではなく「ライト」「スタンダード」「プレミアム」といった形で固定のパターンがある場合はこのアプローチでもよいかもしれません。

ただ、こちらはロールを Disk Quota のためだけに乱用する形になるので後々メンテナンスがしづらくなるようにも思います。。

「最終的にこう解決した!」などまたご共有いただけますと幸いです。

redboxhosting's picture

ありがとうございます。 実はご提案頂きましたロールベースの設定は既に行っておりました。。

予め複数の決められた容量のロールを作っておき、ルールでイベント毎にロールを変更していくような運用です。

こちらであれば以下のようなモジュールの組み合わせだけで実装可能でした。
※フラグモジュールはリンクをクリックした場合などのアクションと連携させる場合は必要でした。

フラグ
https://www.drupal.org/project/flag

ルール
https://www.drupal.org/project/rules

しかし、仰るとおりあとあとのメンテナンスが大変になることと、設定に制約があることからなんとかユーザーベースでQuotaを変更できないかと模索しておりました。

少しお時間がかかるかとおもいますが、解決した際はご報告させて頂きます!

宜しくお願いします。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: