Automation/app/Libraries/MyStorage/MangboardStorage.php
2024-09-23 21:11:50 +09:00

121 lines
4.4 KiB
PHP

<?php
namespace App\Libraries\MyStorage;
use App\Traits\ImageTrait;
use App\Models\Mangboard\FileModel;
use App\Entities\Mangboard\UserEntity;
use App\Entities\Mangboard\BoardsEntity;
use App\Entities\Mangboard\BoardEntity;
class MangboardStorage extends FileStorage
{
use ImageTrait;
private $_board_name = "";
private $_user_entity = null;
private $_fileModel = null;
public function __construct(string $board_name, UserEntity $user_entity)
{
parent::__construct($board_name);
$this->_board_name = $board_name;
$this->_user_entity = $user_entity;
}
final public function getBoardName(): string
{
if ($this->_board_name === "") {
throw new \Exception("BoardName이 정의되지 않았습니다.");
}
return $this->_board_name;
}
final public function getUserEntity(): UserEntity
{
if ($this->_user_entity === null) {
throw new \Exception("UserEntity가 정의되지 않았습니다.");
}
return $this->_user_entity;
}
final protected function getFileModel(): FileModel
{
if ($this->_fileModel === null) {
$this->_fileModel = new FileModel();
}
return $this->_fileModel;
}
final public function getBasePath(): string
{
return getenv("mangboard.uploads.path");
}
final public function getUploadPath(): string
{
return parent::getUploadPath() . DIRECTORY_SEPARATOR . $this->getBasePath();
}
final public function getUploadURL(): string
{
return sprintf("/wp-content/%s/%s/%s", parent::getUploadURL(), $this->getBasePath(), $this->getBasePath());
}
final public function getHTMLTag(string $content = ""): string
{
//Board 게시판 image_path , content용 데이터 배열에 추가 후 modifyBoard에서 처리
switch ($this->getOriginMediaTag()) {
case "img":
$content = sprintf(
"<img src=\"%s/%s/%s\" alt=\"%s\">",
$this->getUploadURL(),
$this->getPath(),
$this->getOriginName(),
$this->getOriginName()
);
break;
case "video":
$content = sprintf(
"<video alt=\"%s\" controls autoplay>
<source src=\"%s/%s/%s\" type=\"%s\">
Your browser does not support the video tag.
</video>",
$this->getOriginName(),
$this->getUploadURL(),
$this->getPath(),
$this->getOriginName(),
$this->getMimeType(),
);
break;
}
log_message("debug", sprintf(
"\n--------%s--------\n%s\n--------------------\n",
__FUNCTION__,
$content
));
return $content;
}
final public function create(BoardsEntity $boards_entity, BoardEntity $board_entity, string $board_table): void
{
//File DB에 넣기
$formDatas['board_pid'] = $board_entity->getPk();
$formDatas['user_pid'] = $this->_user_entity->getPK();
$formDatas['user_name'] = $this->_user_entity->getTitle();
$formDatas['board_name'] = $boards_entity->getTitle();
$formDatas['table_name'] = $board_table;
$formDatas['file_path'] = $this->getBasePath() . DIRECTORY_SEPARATOR . $this->getPath() . DIRECTORY_SEPARATOR . $this->getOriginName();
$formDatas[FileModel::TITLE] = $this->getOriginName();
$formDatas['file_type'] = $this->getMimeType();
$formDatas['file_caption'] = $this->getOriginName();
$formDatas['file_alt'] = $this->getOriginName();
$formDatas['file_description'] = "Filedata";
$formDatas['file_size'] = $this->getFileSize();
$formDatas['file_sequence'] = $this->getOriginSequence();
$formDatas['reg_date'] = date("Y-m-d H:i:s");
$entity = $this->getFileModel()->create($formDatas);
log_message("notice", sprintf(
"%s -> %s 게시물의 %s번째:%s 파일 등록 완료",
__FUNCTION__,
$board_entity->getTitle(),
$this->getOriginSequence(),
$entity->getTitle()
));
//작은이미지 만들기
$this->create_small_ImageTrait($board_entity, $this);
}
}