Ticket #3775 (closed enhancement: fixed)

Opened 8 years ago

Last modified 8 years ago

画像アップロード容量制限機能

Reported by: BW Assigned to: BW
Priority: major Milestone: OpenPNE2.13.8
Component: 指定しない Version: 2.14.x
Keywords: Cc:

Description (Last modified by kudo)

■概要

  • アルバム以外の日記、トピック等も容量制限を設定できるようする

■仕様

1.管理できる画像のカテゴリは以下のようになる
 1)日記系
  * 日記・日記コメント
 2)コミュニティ系
  * トピック、イベント、トピックコメント、イベントコメント
 3)アルバム
  * アルバム
 4)その他
  * プロフィール、メッセージ、グループ(biz)、施設(biz)、コミュニティ表紙、アルバム表紙

2.管理者が管理画面にて、メンバーがアップロードする画像の総容量を、以下の単位で制限できるようにする
  設定できる総容量の単位はMBで、整数値のみとする
 1)メンバーがアップロードできる総容量
 2)日記系でアップロードできる総容量
 3)コミュニティ系でアップロードできる総容量
 4)アルバムでアップロードできる総容量

 5)その他は総容量の設定は行わず、1)が設定されている時のみ、以下の計算で求める
  5) = 1) - 2) - 3) - 4)

 ※0または空白が設定された場合、そのカテゴリでの容量制限はされないものとする
  * 1)を0に指定した場合、2)~4)のカテゴリ毎のみ制限される
  * 1)が設定されている場合で2)~4)に0を設定した場合、設定されたカテゴリは
    5)のその他として扱われる

3.管理者が管理画面にて、現状のカテゴリ別の画像容量を、確認できるようにする

4.ユーザホーム上で、現在アップロードしている画像の総容量を、メンバー自身が確認できるようにする

5.メンバーが画像をアップロードする際、2.で制限されている容量を超えていないかチェックする
  *超えていないければ、アップロード可能とし、従来通り投稿処理を続行する
  *超えている場合、アップロードNGとし、投稿そのものをエラーとして、処理する(投稿画面に戻る)

6.2.の制限が設定されていない場合、従来通り無制限でアップロード可能とする

7.管理者がアップロードした画像については、管理対象外とする

8.トピックやコメントなどの添付画像は、メンバーが退会しても画像は残るため、
  これらの画像は「容量制限では管理されない画像」となる

  ※コミュニティの場合、コミュニティ管理者が変更する場合がある。
   コミュニティ管理者が変更したとしても、コミュニティ作成時に指定した画像は
   作成者のものとして計上される。
   (画像容量の計上するメンバーを、新しいコミュニティ管理者には切り替えず、
    アップロードしたメンバーのままとする)

■修正内容

(1) 管理画面
  1)管理画面に、「画像容量制限設定」ページを追加(edit_image_limit)
   (a) 1)の画面に「全体画像 制限容量」の項目を設ける
     変数名:OPENPNE_IMAGE_USER_LIMIT 初期値:0
   (b) 1)の画面に「アルバム 制限容量」の項目を設ける
     変数名:OPENPNE_ALBUM_LIMIT 初期値:0 (既存の変数使用)
   (c) 1)の画面に「日記 制限容量」の項目を設ける
     変数名:OPENPNE_IMAGE_DIARY_LIMIT 初期値:0
   (d) 1)の画面に「コミュニティ 制限容量」の項目を設ける
     変数名:OPENPNE_IMAGE_COMMU_LIMIT 初期値:0
   (e) 1)のページに既存の「アルバム容量制限設定」が統合されるため、
     管理画面のリンクを「アルバム容量制限設定」のページから1)のページへ置き換える

  2)管理画面に、「カテゴリ別容量表示」ページを追加(image_analysis_category)
   (a) 2)の画面にファイルサイズ管理テーブル[ c_image_size ]のカテゴリ毎の
      合計ファイルサイズと一人当たりの平均値を表示させる

(2) ユーザ画面
  1)容量制限が設定されていた場合、現在の使用量を既存のユーザホームに表示する

(3) DB
  1)ユーザがアップロードした画像のファイルサイズを管理するテーブルを新設[ c_image_size ]
  2)一時ファイルを保存するテーブル [ c_tmp_image ] に、ファイルサイズも保存されるようにする
   OPENPNE_TMP_IMAGE_DB=true の場合、画像データは、[ c_tmp_image ] から [ c_image ]
   へコピーするが、このタイミングではファイルサイズが取得できないため、[ c_tmp_image ] に
   ファイルサイズを持たせる

(4)投稿時の確認画面表示時
  1)現在の総容量を取得する関数を新設(db_image_get_image_filesize())
  2) 1)の関数を利用して、アップロード可能かどうかチェックする関数を新設
    util_image_check_add_image_upload(),util_image_check_change_image_upload()) 
  3) 2)を利用し、アップロード可否の判断を行うようにする

(5)登録時
    1)一時ファイルを[ c_tmp_image ] に登録する際、ファイルサイズも登録されるようにする
    2)[c_image_size]にレコード登録を行う関数を追加
     (db_image_insert_c_image_size())
    3)[ c_image ] に画像データを登録する際、[ c_image_size ] にファイルサイズを登録していく
      OPENPNE_TMP_IMAGE_DB=true の場合、[ c_tmp_image ] から取得する
     OPENPNE_TMP_IMAGE_DB=false の場合、filesize(ファイル) で取得する
    4)携帯からのメール投稿時の画像情報を取得する際、ファイルサイズも取得できるようにする
    5)携帯からのメール投稿時にも総容量をチェックする
     *制限値を超えていない場合OKとし、[ c_image_size ] にファイルサイズを登録する
     *制限を越えている場合エラーとし、エラーメッセージを返すようにする

(6)削除時
  1)[ c_image ] からの削除と同タイミングで、[c_image_size]からも削除する
  2)メッセージの削除の場合、[ c_image ] から削除されないため、
   [c_image_size]のみ削除して、容量管理対象外とする

(7)退会時
  1)従来の退会処理の最後で、[ c_image_size ]から退会者のレコードを削除する
   退会処理時に削除される画像と削除されない画像があるため、削除されない画像に関する分を削除する
   以下に、削除される画像と削除されない画像を示す
投稿種別 削除対象
日記
日記コメント △(日記作成者が退会の場合)
コミュニティ表紙 △(コミュニティが自分1人の場合のみ)
トピック △(コミュニティが自分1人の場合のみ)
イベント △(コミュニティが自分1人の場合のみ)
トピックコメント △(コミュニティが自分1人の場合のみ)
イベントコメント △(コミュニティが自分1人の場合のみ)
アルバム表紙
アルバム
メッセージ ×
プロフィール
施設 ×
グループ △(グループが自分1人の場合のみ)
   上記表の○については、退会処理の延長で削除されるが、△の注釈に該当しない場合と
   ×については画像は削除されないため、[ c_image_size ]から情報のみを削除する

(8)アルバム
  1)従来の、アルバム容量チェック用関数内部で(4)の関数をコールするように変更する

(9) SQL文
CREATE TABLE `c_image_size` (
    `c_image_size_id` int(11) NOT NULL auto_increment,
    `filename` text NOT NULL,
    `c_member_id` int(11) NOT NULL default '0',
    `filesize`   int(11) NOT NULL default '0',
    `image_category` enum('album','diary','commu','other') NOT NULL default 'other',
    `r_datetime` datetime NOT NULL default '0000-00-00 00:00:00',
    PRIMARY KEY  (`c_image_size_id`),
    KEY `c_member_id` (`c_member_id`),
    KEY `c_member_id_image_category`(`c_member_id`,`image_category`),
    KEY `filename` (`filename`(100))
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

ALTER TABLE c_tmp_image ADD COLUMN filesize int(11) NOT NULL DEFAULT '0';

(10) 懸念事項
  * グループ編集時、元画像を [ c_image ]から削除していないため、
    元画像のレコードは残り続けてしまう。
    施設編集時と同様に元画像のレコードを削除する必要があると思われる。

(11) ソース
OpenPNE2.13.6ベースで作成

■関連情報

Attachments

アップロード容量制限テストケース.xls (311.5 kB) - added by BW on 04/02/09 16:35:18.

Change History

04/02/09 16:21:50 changed by BW

04/02/09 16:24:08 changed by BW

r11197でアップロード容量制限機能バグ修正+管理画面にカテゴリ別容量表示ページ追加しました。

04/02/09 16:29:20 changed by BW

2.13.7がリリースされたらマージして、携帯版アルバムに対応する予定です。

04/02/09 16:35:18 changed by BW

  • attachment アップロード容量制限テストケース.xls added.

04/02/09 16:37:11 changed by BW

実施したテスト結果を送付しました。

04/15/09 14:00:57 changed by kiwa

  • milestone set to OpenPNE2.13.8.

ありがとうございます!テストケースまでとはとっても助かります。2.13.8で取り込み検討しましょう。

04/15/09 14:35:01 changed by kiwa

  • priority changed from minor to major.

04/17/09 21:50:20 changed by urabe

  • owner changed from nobody to urabe.
  • status changed from new to assigned.

04/20/09 11:51:27 changed by urabe

  • keywords set to 2009.4.20 確認中.

r11363 でトランクにマージしました。

(follow-up: ↓ 12 ) 04/22/09 16:18:22 changed by Shintani@

  • keywords changed from 2009.4.20 確認中 to 2009.4.20 差し戻し.

動作確認いたしました

問題点

  • 日記編集時において、合計画像容量が制限容量を上回る場合でも編集できてしまう。
  • 日記コメントにおいて、合計画像容量が制限容量を上回る場合でもコメントできてしまう。
  • 写真容量 使用状況 において、アルバム・にっきの使用量が正しく表示されない。

以上の事を確認お願いします。

04/24/09 17:50:57 changed by BW

取り込み検討していただきありがとうございます。
携帯版アルバム対応は、別チケット#3858で対応いたします。

04/28/09 15:27:52 changed by kawahara

r11516

アップデートSQLのファイル名の連番・バージョンを変更しました。

(in reply to: ↑ 9 ) 04/30/09 19:50:02 changed by imamura623

  • keywords deleted.
  • owner changed from urabe to BW.
  • version set to 2.13.x.
  • status changed from assigned to new.

* 日記編集時において、合計画像容量が制限容量を上回る場合でも編集できてしまう。
* 日記コメントにおいて、合計画像容量が制限容量を上回る場合でもコメントできてしまう。
* 写真容量 使用状況 において、アルバム・にっきの使用量が正しく表示されない。

上記の問題点については下記チケットについて対応いたします。

04/30/09 19:50:20 changed by imamura623

  • status changed from new to closed.
  • resolution set to fixed.

本チケットにつきましてはこれで修正完了とし閉じます。

05/25/09 10:58:09 changed by kudo

  • description changed.