Repository
in package
uses
UnitRepositoryTrait, UnitMultiLangTrait
Tags
Table of Contents
Properties
- $unitRegistory : Registry
- ユニットレジストリ
Methods
- __construct() : mixed
- コンストラクタ
- countUnitsTrait() : int
- 指定したエントリーのユニット数をカウント
- create() : Model|null
- 追加時のユニットを作成
- createDefault() : Model|null
- 初期表示のユニットを作成
- duplicateRevisionUnits() : void
- リビジョンユニットを複製して別リビジョンに複製
- duplicateUnit() : Model
- 指定したユニットを同エントリー内に複製 階層構造には対応しておらず、親ユニットのIDを指定すると例外が発生します
- duplicateUnits() : UnitCollection
- 指定したエントリーのユニットを複製
- eagerLoadCustomUnitFields() : void
- カスタムユニットのカスタムフィールドをEagerLoad
-
eagerLoadPrimaryImageUnits()
: Model>, media: array
} - メイン画像ユニットをEagerLoad
- eagerLoadUnits() : array<int<1, max>, UnitCollection>
- ユニットデータをEagerLoad
- explodeUnitDataTrait() : array<string|int, mixed>
- ユニットのデータを分割する
- extractUnits() : UnitCollection, range: int|null}
- POSTデータからユニットを抽出
- formatMultiLangUnitDataTrait() : mixed
- ユニットのデータを多言語ユニットを考慮して整形する
- formatOrderWithInsertionTrait() : void
- 指定した順番以降のユニット並び番号を更新する
- formatOrderWithRemovalTrait() : void
- 指定した順番以降のユニット並び番号を更新する
- getRevisionIds() : array<string|int, int>
- 指定したエントリーのユニットに存在するリビジョンIDを取得
- getUnitBySortTrait() : array<string|int, mixed>|null
- 指定したエントリーとソート番号のユニットを取得
- getUnitSearchText() : string
- ユニットの検索テキストを取得
- implodeUnitDataTrait() : string
- ユニットのデータを結合する
- insertUnits() : UnitCollection
- ユニットを挿入
- loadDefaultUnit() : UnitCollection
- 初期表示ユニットをロード
- loadModel() : Model|null
- ユニットモデルをDBデータから生成
- loadModels() : UnitCollection
- ユニットモデル(配列)をDBデータから生成
- loadUnit() : Model|null
- 指定したユニットIDのモデルをロード
- loadUnitFromDBTrait() : null|array<string|int, mixed>
- ユニットをロード
- loadUnits() : UnitCollection
- 指定したエントリーからユニットをロード
- loadUnitsFromDBTrait() : array<string|int, mixed>
- データベースからエントリーのユニットをロード
- makeModel() : null|Model
- ユニットモデルを作成
- removeMultiLangUnitDelimiterTrait() : string
- 多言語ユニット用のデリミタを削除する
- removeUnit() : Model
- 1ユニット削除 階層構造には対応しておらず、親ユニットのIDを指定すると例外が発生します
- removeUnits() : UnitCollection
- 全ユニットを削除
- removeUnitsTrait() : void
- 全ユニットを削除
- removeUnitsWithReferenceCheck() : UnitCollection
- ユニットを DB から削除し、参照チェック経由で孤児ファイルのみ物理削除する。
- removeUnitTrait() : void
- 1ユニットの削除 階層構造には対応していないので、親ユニットのIDを指定しても削除されません
- saveAllUnits() : UnitCollection
- ユニットを保存
- saveAssets() : void
- ユニットのアセットを保存
- saveRevisionUnits() : UnitCollection
- リビジョンユニットを保存
- updateUnits() : UnitCollection
- ユニットを更新
- handleMultipleUnitsTrait() : array<string|int, Model>
- 保存時に1つのユニットから複数ユニットに増加できるユニットの処理 多言語ユニットの場合はマルチアップロード非対応
- collectOrphanedFilePaths() : array<string, Model|AssetProvider>
- 新コレクションから消える既存 AssetProvider ユニットのファイルパスを収集する(DELETE前に呼ぶ)。
- formatEagerLoadUnits() : array<string|int, mixed>
- ユニットをEagerLoad
- isReferencedByUnit() : bool
- 指定パスが column / column_rev テーブルのいずれかで使われているか判定する。
- removeUnreferencedUnitFiles() : void
- 参照チェック済みの孤児ファイルを物理削除する(INSERT後に呼ぶ)。
- validateRequest() : ValidatedRequest
- リクエスト内のユニットデータをバリデーション
Properties
$unitRegistory
ユニットレジストリ
protected
Registry
$unitRegistory
Methods
__construct()
コンストラクタ
public
__construct(Registry $resistry) : mixed
Parameters
- $resistry : Registry
countUnitsTrait()
指定したエントリーのユニット数をカウント
public
countUnitsTrait(int<1, max> $eid) : int
Parameters
- $eid : int<1, max>
Return values
intcreate()
追加時のユニットを作成
public
create(string $type, string $addType[, int $configIndex = 0 ]) : Model|null
Parameters
- $type : string
- $addType : string
- $configIndex : int = 0
Return values
Model|nullcreateDefault()
初期表示のユニットを作成
public
createDefault(string $type[, int $configIndex = 0 ]) : Model|null
Parameters
- $type : string
- $configIndex : int = 0
Return values
Model|nullduplicateRevisionUnits()
リビジョンユニットを複製して別リビジョンに複製
public
duplicateRevisionUnits(int $eid, int $sourceRvid, int $targetRvid) : void
Parameters
- $eid : int
- $sourceRvid : int
- $targetRvid : int
duplicateUnit()
指定したユニットを同エントリー内に複製 階層構造には対応しておらず、親ユニットのIDを指定すると例外が発生します
public
duplicateUnit(non-empty-string $unitId, int $eid[, int|null $rvid = null ]) : Model
Parameters
- $unitId : non-empty-string
- $eid : int
- $rvid : int|null = null
Return values
ModelduplicateUnits()
指定したエントリーのユニットを複製
public
duplicateUnits(int $eid, int $newEid[, int|null $rvid = null ][, int|null $newRvid = null ]) : UnitCollection
Parameters
- $eid : int
- $newEid : int
- $rvid : int|null = null
- $newRvid : int|null = null
Return values
UnitCollectioneagerLoadCustomUnitFields()
カスタムユニットのカスタムフィールドをEagerLoad
public
eagerLoadCustomUnitFields(UnitCollection $collection) : void
Parameters
- $collection : UnitCollection
eagerLoadPrimaryImageUnits()
メイン画像ユニットをEagerLoad
public
eagerLoadPrimaryImageUnits(array<string|int, mixed> $entries) : Model>, media: array}
Parameters
- $entries : array<string|int, mixed>
Return values
Model>, media: arrayeagerLoadUnits()
ユニットデータをEagerLoad
public
eagerLoadUnits(array<string|int, int> $entryIds) : array<int<1, max>, UnitCollection>
Parameters
- $entryIds : array<string|int, int>
Return values
array<int<1, max>, UnitCollection>explodeUnitDataTrait()
ユニットのデータを分割する
public
explodeUnitDataTrait(mixed $data) : array<string|int, mixed>
多言語ユニットは非推奨です。新規ユニットは多言語対応していません。
Parameters
- $data : mixed
Return values
array<string|int, mixed>extractUnits()
POSTデータからユニットを抽出
public
extractUnits([int|null $range = null ][, non-empty-string|null $primaryImageUnitId = null ]) : UnitCollection, range: int|null}
Parameters
- $range : int|null = null
- $primaryImageUnitId : non-empty-string|null = null
Return values
UnitCollection, range: int|null}formatMultiLangUnitDataTrait()
ユニットのデータを多言語ユニットを考慮して整形する
public
formatMultiLangUnitDataTrait(mixed $data[, array<string|int, mixed> &$vars = [] ][, string $name = '' ]) : mixed
多言語ユニットは非推奨です。新規ユニットは多言語対応していません。
Parameters
- $data : mixed
- $vars : array<string|int, mixed> = []
- $name : string = ''
formatOrderWithInsertionTrait()
指定した順番以降のユニット並び番号を更新する
public
formatOrderWithInsertionTrait(array{sort: positive-int, parentId: non-empty-string|null} $position, int $eid[, int|null $rvid = null ][, int $length = 1 ]) : void
新規カラム挿入に伴い、指定位置($position['sort'])を含む「以降の」カラムを後方にずらす。
>=を使用することで、挿入位置に既に存在するカラムも含めて後方に移動する。- これにより、挿入位置に確実に空きスペースを作成できる。
Parameters
- $position : array{sort: positive-int, parentId: non-empty-string|null}
- $eid : int
- $rvid : int|null = null
- $length : int = 1
formatOrderWithRemovalTrait()
指定した順番以降のユニット並び番号を更新する
public
formatOrderWithRemovalTrait(array{sort: positive-int, parentId: non-empty-string|null} $position, int $eid[, int|null $rvid = null ][, int $length = 1 ]) : void
ユニット削除に伴い、指定位置($position['sort'])を含む「以降の」カラムを前方にずらす。
>を使用することで、削除位置に既に存在するカラムも含めて前方に移動する。
Parameters
- $position : array{sort: positive-int, parentId: non-empty-string|null}
- $eid : int
- $rvid : int|null = null
- $length : int = 1
getRevisionIds()
指定したエントリーのユニットに存在するリビジョンIDを取得
public
getRevisionIds(int $eid) : array<string|int, int>
Parameters
- $eid : int
Return values
array<string|int, int>getUnitBySortTrait()
指定したエントリーとソート番号のユニットを取得
public
getUnitBySortTrait(int<1, max> $eid, int $sort) : array<string|int, mixed>|null
Parameters
- $eid : int<1, max>
- $sort : int
Return values
array<string|int, mixed>|nullgetUnitSearchText()
ユニットの検索テキストを取得
public
getUnitSearchText(int $eid) : string
Parameters
- $eid : int
Return values
stringimplodeUnitDataTrait()
ユニットのデータを結合する
public
implodeUnitDataTrait(array<string|int, string>|string $data) : string
多言語ユニットは非推奨です。新規ユニットは多言語対応していません。
Parameters
- $data : array<string|int, string>|string
Return values
stringinsertUnits()
ユニットを挿入
public
insertUnits(UnitCollection $collection, array{sort: positive-int, parentId: non-empty-string|null} $position, int $eid, int $bid) : UnitCollection
既存のユニットを保持したまま、新しいユニットを挿入します。
Parameters
- $collection : UnitCollection
-
追加するユニットのコレクション
- $position : array{sort: positive-int, parentId: non-empty-string|null}
-
挿入位置
- $eid : int
-
エントリーID
- $bid : int
-
ブログID
Tags
Return values
UnitCollection —挿入したユニットのコレクション
loadDefaultUnit()
初期表示ユニットをロード
public
loadDefaultUnit() : UnitCollection
Return values
UnitCollectionloadModel()
ユニットモデルをDBデータから生成
public
loadModel(array<string|int, mixed> $unit) : Model|null
Parameters
- $unit : array<string|int, mixed>
Return values
Model|nullloadModels()
ユニットモデル(配列)をDBデータから生成
public
loadModels(array<string|int, mixed> $units) : UnitCollection
Parameters
- $units : array<string|int, mixed>
Return values
UnitCollectionloadUnit()
指定したユニットIDのモデルをロード
public
loadUnit(non-empty-string $utid) : Model|null
Parameters
- $utid : non-empty-string
Return values
Model|nullloadUnitFromDBTrait()
ユニットをロード
public
loadUnitFromDBTrait(non-empty-string $unitId) : null|array<string|int, mixed>
Parameters
- $unitId : non-empty-string
Return values
null|array<string|int, mixed>loadUnits()
指定したエントリーからユニットをロード
public
loadUnits(int $eid[, int|null $rvid = null ][, int|null $range = null ][, array{setPrimaryImage?: bool} $options = [] ]) : UnitCollection
Parameters
- $eid : int
- $rvid : int|null = null
- $range : int|null = null
- $options : array{setPrimaryImage?: bool} = []
Return values
UnitCollectionloadUnitsFromDBTrait()
データベースからエントリーのユニットをロード
public
loadUnitsFromDBTrait(int $eid[, int|null $rvid = null ][, int|null $range = null ]) : array<string|int, mixed>
Parameters
- $eid : int
- $rvid : int|null = null
- $range : int|null = null
Return values
array<string|int, mixed>makeModel()
ユニットモデルを作成
public
makeModel(string $type) : null|Model
Parameters
- $type : string
Return values
null|ModelremoveMultiLangUnitDelimiterTrait()
多言語ユニット用のデリミタを削除する
public
removeMultiLangUnitDelimiterTrait(string $text) : string
多言語ユニットは非推奨です。新規ユニットは多言語対応していません。
Parameters
- $text : string
Return values
stringremoveUnit()
1ユニット削除 階層構造には対応しておらず、親ユニットのIDを指定すると例外が発生します
public
removeUnit(non-empty-string $unitId[, int|null $rvid = null ][, bool $withAssets = true ]) : Model
Parameters
- $unitId : non-empty-string
- $rvid : int|null = null
- $withAssets : bool = true
Return values
ModelremoveUnits()
全ユニットを削除
public
removeUnits(int $eid[, int|null $rvid = null ][, bool $withAssets = true ]) : UnitCollection
Parameters
- $eid : int
- $rvid : int|null = null
- $withAssets : bool = true
Return values
UnitCollectionremoveUnitsTrait()
全ユニットを削除
public
removeUnitsTrait(int $eid[, int|null $rvid = null ]) : void
Parameters
- $eid : int
- $rvid : int|null = null
removeUnitsWithReferenceCheck()
ユニットを DB から削除し、参照チェック経由で孤児ファイルのみ物理削除する。
public
removeUnitsWithReferenceCheck(int $eid[, int|null $rvid = null ]) : UnitCollection
承認完了時の changeRevision のように、メイン column を消して column_rev を メインに昇格する用途を想定。削除前にメインのユニットが参照していたファイルパスを 収集し、DB から削除した後、column / column_rev のいずれからも参照されなくなった ファイルだけを物理削除する。
column_rev に同じパスがあればファイルは残る(昇格後もパスを使い続けるため)。
Parameters
- $eid : int
-
エントリーID
- $rvid : int|null = null
-
リビジョンID(null でメイン column が対象)
Return values
UnitCollection —削除したユニットのコレクション
removeUnitTrait()
1ユニットの削除 階層構造には対応していないので、親ユニットのIDを指定しても削除されません
public
removeUnitTrait(non-empty-string $unitId[, int|null $rvid = null ]) : void
Parameters
- $unitId : non-empty-string
- $rvid : int|null = null
saveAllUnits()
ユニットを保存
public
saveAllUnits(UnitCollection $collection, int $eid, int $bid[, int|null $rvid = null ]) : UnitCollection
エントリーの全ユニットを更新します。既存のユニットは一旦削除され、 新しいユニットで置き換えられます。
保存前後でファイルパスが消える(行削除・差し替え)AssetProvider ユニットの 物理ファイルは、column / column_rev 両テーブルの参照チェックを経て どこからも参照されていない場合にのみ物理削除します。 これにより「作業領域のみ更新」「新バージョン保存」でメイン側が参照するファイルを 誤って削除することを自動的に防げます。
Parameters
- $collection : UnitCollection
-
保存するユニットのコレクション
- $eid : int
-
エントリーID
- $bid : int
-
ブログID
- $rvid : int|null = null
-
リビジョンID(リビジョンモードの場合のみ使用)
Tags
Return values
UnitCollection —保存したユニットのコレクション
saveAssets()
ユニットのアセットを保存
public
saveAssets(UnitCollection $collection) : void
Parameters
- $collection : UnitCollection
saveRevisionUnits()
リビジョンユニットを保存
public
saveRevisionUnits(UnitCollection $collection, int $eid, int $bid[, int|null $rvid = null ]) : UnitCollection
Parameters
- $collection : UnitCollection
- $eid : int
- $bid : int
- $rvid : int|null = null
Return values
UnitCollection —保存したユニットのコレクション
updateUnits()
ユニットを更新
public
updateUnits(UnitCollection $collection, int $eid, int $bid) : UnitCollection
Parameters
- $collection : UnitCollection
-
更新するユニットのコレクション
- $eid : int
-
エントリーID
- $bid : int
-
ブログID
Return values
UnitCollection —更新したユニットのコレクション
handleMultipleUnitsTrait()
保存時に1つのユニットから複数ユニットに増加できるユニットの処理 多言語ユニットの場合はマルチアップロード非対応
protected
handleMultipleUnitsTrait(Model $model) : array<string|int, Model>
Parameters
- $model : Model
Return values
array<string|int, Model> —元のユニットを含んでいます
collectOrphanedFilePaths()
新コレクションから消える既存 AssetProvider ユニットのファイルパスを収集する(DELETE前に呼ぶ)。
private
collectOrphanedFilePaths(UnitCollection $newCollection, int $eid, int|null $rvid) : array<string, Model|AssetProvider>
行削除だけでなく、同じユニットIDでファイルが差し替えられたケースや、 削除チェックにより空文字化されたケースも「古いパスが新コレクションに存在しない」として拾う。
Parameters
- $newCollection : UnitCollection
-
保存対象の新しいユニットコレクション
- $eid : int
-
エントリーID
- $rvid : int|null
-
リビジョンID
Return values
array<string, Model|AssetProvider> —古いパス => そのパスを持っていたユニット
formatEagerLoadUnits()
ユニットをEagerLoad
private
formatEagerLoadUnits(array<string|int, mixed> $unitsData, callable $reduce, mixed $initData) : array<string|int, mixed>
Parameters
- $unitsData : array<string|int, mixed>
- $reduce : callable
- $initData : mixed
Return values
array<string|int, mixed> —{unit: Model[], media: []}
isReferencedByUnit()
指定パスが column / column_rev テーブルのいずれかで使われているか判定する。
private
isReferencedByUnit(string $path) : bool
LIKE 検索である理由:
多言語ユニットでは複数のファイルパスが :acms_unit_delimiter: 区切りで
1 カラム(column_field_2)に詰め込まれる仕様のため、等価比較ではヒットしない。
UnitMultiLangTrait::implodeUnitDataTrait() / explodeUnitDataTrait() を参照。
副作用として以下のリスクがある:
- インデックスが効かずフルテーブルスキャンになる(参照チェックは保存の度に走るので テーブル肥大時のパフォーマンスに影響しうる)。
- 他のパスの部分文字列として誤マッチする可能性(例: "a.jpg" が "banana.jpg" に
ヒット)。現行は
uniqueString()ベースの 64 文字ハッシュパスのため実用上の 衝突はほぼないが、rawfilename設定で任意ファイル名を許容する運用では発生しうる。 誤マッチは「削除されるべきファイルが残る」側に倒れるので安全寄り。
将来の改善方針:
- 多言語ユニットのサポートを終了できれば等価比較に統一可能。
- 暫定対応するなら LIKE で粗く絞り込んだ上で
explodeUnitDataTrait()による PHP 側の厳密判定にフォールバックする方式が候補(案3)。
Parameters
- $path : string
-
検査するファイルパス(相対パス)
Return values
bool —いずれかのレコードが参照していれば true
removeUnreferencedUnitFiles()
参照チェック済みの孤児ファイルを物理削除する(INSERT後に呼ぶ)。
private
removeUnreferencedUnitFiles(array<string, Model|AssetProvider> $orphanedPaths) : void
Parameters
- $orphanedPaths : array<string, Model|AssetProvider>
-
collectOrphanedFilePaths の戻り値
validateRequest()
リクエスト内のユニットデータをバリデーション
private
validateRequest(array<string|int, mixed> $request) : ValidatedRequest
Parameters
- $request : array<string|int, mixed>