Automation init...3
This commit is contained in:
parent
d1f462bce3
commit
d6b6e71661
@ -15,25 +15,28 @@ $routes->addPlaceholder('uuid', '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}
|
||||
//2. Config/Filters.php -> $aliases = ['authFilter' => AuthFilter::class]
|
||||
|
||||
$routes->get('/', 'Home::index');
|
||||
$routes->group('crawler', ['namespace' => 'App\Controllers\Crawler'], function ($routes) {
|
||||
$routes->cli('yamap/crawling', 'YamapController::crawling');
|
||||
$routes->cli('yamap/crawling/(:any)', 'YamapController::crawling/$1');
|
||||
$routes->cli('yamap/small_image', 'YamapController::small_image');
|
||||
$routes->cli('yamap/small_image/(:any)', 'YamapController::small_image/$1');
|
||||
});
|
||||
|
||||
$routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'authFilter:manager'], function ($routes) {
|
||||
$routes->get('/', 'Home::index');
|
||||
$routes->group('user', function ($routes) {
|
||||
$routes->get('', 'UserController::index');
|
||||
});
|
||||
});
|
||||
|
||||
$routes->group('yamap', ['namespace' => 'App\Controllers\Yamap'], function ($routes) {});
|
||||
$routes->group('mangboard', ['namespace' => 'App\Controllers\Mangboard'], function ($routes) {
|
||||
$routes->group('user', function ($routes) {
|
||||
$routes->get('/', 'UserController::index');
|
||||
$routes->cli('point/(:alpha)/(:num)', 'UserController::point/$1/$2');
|
||||
$routes->cli('point/(:alpha)/(:num)/(:any)', 'UserController::point/$1/$2/$3');
|
||||
$routes->cli('level', 'UserController::level');
|
||||
$routes->cli('level/(:alpha)/(:num)', 'UserController::level/$1/$2');
|
||||
$routes->cli('check_level', 'UserController::check_level');
|
||||
$routes->cli('check_level/(:alpha)', 'UserController::check_level/$1');
|
||||
});
|
||||
$routes->group('crawler', function ($routes) {
|
||||
$routes->cli('yamap', 'CrawlerController::yamap');
|
||||
$routes->cli('yamap/(:any)', 'CrawlerController::yamap/$1');
|
||||
});
|
||||
$routes->group('image', function ($routes) {
|
||||
$routes->cli('yamap', 'ImageController::yamap');
|
||||
$routes->cli('yamap/(:any)', 'ImageController::yamap/$1');
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,38 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers\Crawler;
|
||||
namespace App\Controllers\Mangboard;
|
||||
|
||||
use App\Controllers\CommonController;
|
||||
use App\Libraries\MyCrawler\YamapLibrary as MyCrawler;
|
||||
use App\Libraries\MyUtil\ImageLibrary;
|
||||
|
||||
class YamapController extends CommonController
|
||||
class CrawlerController extends CommonController
|
||||
{
|
||||
public function small_image(...$params)
|
||||
{
|
||||
try {
|
||||
$fullPath = WRITEPATH . "uploads" . DIRECTORY_SEPARATOR . getenv('yamap.storage.upload.path');
|
||||
$image = new ImageLibrary();
|
||||
if (in_array("debug", $params)) {
|
||||
$image->setDebug(true);
|
||||
}
|
||||
$image->setSourcePath($fullPath);
|
||||
$image->setDestinationPath($fullPath);
|
||||
foreach ($image->getFilesByExtentionType($image->getSourcePath()) as $file) {
|
||||
//저장파일명
|
||||
$fileInfos = pathinfo($image->getDestinationPath() . DIRECTORY_SEPARATOR . $file, PATHINFO_ALL);
|
||||
$dstFile = $fileInfos['filename'] . "_small." . $fileInfos['extension'];
|
||||
$image->setDestinationFile($dstFile);
|
||||
$image->create($file);
|
||||
}
|
||||
log_message("notice", "Crawler->" . __FUNCTION__ . " 작업이 완료되었습니다.");
|
||||
return "완료되었습니다.";
|
||||
} catch (\Exception $e) {
|
||||
log_message("error", $e->getMessage());
|
||||
return $e->getMessage();
|
||||
}
|
||||
}
|
||||
public function crawling(...$params): string
|
||||
public function yamap(...$params): string
|
||||
{
|
||||
try {
|
||||
$crawler = new MyCrawler();
|
||||
@ -65,18 +40,19 @@ class YamapController extends CommonController
|
||||
} else {
|
||||
$max_limit = count($items);
|
||||
}
|
||||
$i = 0;
|
||||
$i = 1;
|
||||
foreach ($items as $item) {
|
||||
if ($i <= $max_limit) {
|
||||
if ($i < $max_limit) {
|
||||
try {
|
||||
log_message("notice", "게시물 {$i}번째 {$item["nickname"]} 작업시작");
|
||||
//3. DetailPage 처리 : bbs_view > div.contents 가진 객체를 찾아서 처리
|
||||
$fileEntitys = $crawler->detailPage($item["detail_url"]);
|
||||
//4.망보드 일반게시판에 게시물 등록 처리
|
||||
if (count($fileEntitys)) {
|
||||
$crawler->createBoard($item, $fileEntitys);
|
||||
}
|
||||
$i++;
|
||||
log_message("notice", "게시물 {$i}번째 {$item["nickname"]} 작업완료.");
|
||||
$i++;
|
||||
} catch (\Exception $e) {
|
||||
log_message("debug", $e->getMessage());
|
||||
}
|
||||
34
app/Controllers/Mangboard/ImageController.php
Normal file
34
app/Controllers/Mangboard/ImageController.php
Normal file
@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers\Mangboard;
|
||||
|
||||
use App\Controllers\CommonController;
|
||||
use App\Libraries\MyUtil\ImageLibrary;
|
||||
|
||||
class ImageController extends CommonController
|
||||
{
|
||||
public function yamap(...$params)
|
||||
{
|
||||
try {
|
||||
$fullPath = WRITEPATH . "uploads" . DIRECTORY_SEPARATOR . getenv('yamap.storage.upload.path');
|
||||
$image = new ImageLibrary();
|
||||
if (in_array("debug", $params)) {
|
||||
$image->setDebug(true);
|
||||
}
|
||||
$image->setSourcePath($fullPath);
|
||||
$image->setDestinationPath($fullPath);
|
||||
foreach ($image->getFilesByExtentionType($image->getSourcePath()) as $file) {
|
||||
//저장파일명
|
||||
$fileInfos = pathinfo($image->getDestinationPath() . DIRECTORY_SEPARATOR . $file, PATHINFO_ALL);
|
||||
$dstFile = $fileInfos['filename'] . "_small." . $fileInfos['extension'];
|
||||
$image->setDestinationFile($dstFile);
|
||||
$image->create($file);
|
||||
}
|
||||
log_message("notice", "Crawler->" . __FUNCTION__ . " 작업이 완료되었습니다.");
|
||||
return "완료되었습니다.";
|
||||
} catch (\Exception $e) {
|
||||
log_message("error", $e->getMessage());
|
||||
return $e->getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -28,24 +28,50 @@ class UserController extends CommonController
|
||||
public function point(string $id, string $point, string $sign = "+"): string
|
||||
{
|
||||
try {
|
||||
$entity = $this->getModel()->getEntityByID($id);
|
||||
if ($entity === null) {
|
||||
throw new \Exception("해당 ID{$id}는 사용자가 존재하지 않습니다.");
|
||||
$entity = is_numeric($id) ? $this->getModel()->getEntityByPK(intval($id)) : $this->getModel()->getEntityByID($id);
|
||||
if (!$entity) {
|
||||
throw new \Exception("해당 {$id}의 회원이 없습니다.");
|
||||
}
|
||||
$this->getModel()->setPoint($id, intval($point), $sign);
|
||||
return "완료되었습니다.";
|
||||
$this->getModel()->setPoint($entity, intval($point), $sign);
|
||||
return __FUNCTION__ . " 작업이 완료되었습니다.";
|
||||
} catch (\Exception $e) {
|
||||
log_message("error", $e->getMessage());
|
||||
return $e->getMessage();
|
||||
}
|
||||
}
|
||||
public function level(): string
|
||||
public function level(string $id, string $level): string
|
||||
{
|
||||
try {
|
||||
$userModel = new UserModel();
|
||||
$userModel->setLevel();
|
||||
$entity = is_numeric($id) ? $this->getModel()->getEntityByPK(intval($id)) : $this->getModel()->getEntityByID($id);
|
||||
if (!$entity) {
|
||||
throw new \Exception("해당 {$id}의 회원이 없습니다.");
|
||||
}
|
||||
$this->getModel()->setLevel($entity, intval($level));
|
||||
log_message("notice", "Mangboard->level 작업이 완료되었습니다.");
|
||||
return "완료되었습니다.";
|
||||
return __FUNCTION__ . " 작업이 완료되었습니다.";
|
||||
} catch (\Exception $e) {
|
||||
log_message("error", $e->getMessage());
|
||||
return $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
public function check_level($id = false): string
|
||||
{
|
||||
try {
|
||||
if (!$id) {
|
||||
foreach ($this->getModel()->getEntitys() as $entity) {
|
||||
$level = $this->getModel->checkLevel($entity);
|
||||
$this->getModel()->setLevel($entity, intval($level));
|
||||
}
|
||||
} else {
|
||||
$entity = is_numeric($id) ? $this->getModel()->getEntityByPK(intval($id)) : $this->getModel()->getEntityByID($id);
|
||||
if (!$entity) {
|
||||
throw new \Exception("해당 {$id}의 회원이 없습니다.");
|
||||
}
|
||||
$level = $this->getModel->checkLevel($entity);
|
||||
$this->getModel()->setLevel($entity, intval($level));
|
||||
}
|
||||
return __FUNCTION__ . " 작업이 완료되었습니다.";
|
||||
} catch (\Exception $e) {
|
||||
log_message("error", $e->getMessage());
|
||||
return $e->getMessage();
|
||||
|
||||
@ -46,9 +46,14 @@ abstract class MyCrawlerLibrary extends CommonLibrary
|
||||
list($fileName, $content) = $this->getMySocket()->download($node->attr($options["attr"]));
|
||||
$entitys[] = $this->getMyStorage()->save($fileName, $mediaType, $content, $file_sequence);
|
||||
$file_sequence++;
|
||||
log_message("notice", __FUNCTION__ . " {$mediaType} 작업 완료");
|
||||
log_message("notice", __FUNCTION__ . " MediaType->{$mediaType} 작업 완료");
|
||||
} catch (\Exception $e) {
|
||||
log_message("warning", "\n---" . __FUNCTION__ . "--\n" . $e->getMessage() . "\n-----------------------------------------\n");
|
||||
log_message("warning", sprintf(
|
||||
"\n---%s,MediaType->%s 오류---\n%s\n-----------------------------------------\n",
|
||||
__FUNCTION__,
|
||||
$mediaType,
|
||||
$e->getMessage()
|
||||
));
|
||||
}
|
||||
}
|
||||
return $entitys;
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
namespace App\Libraries\MyCrawler;
|
||||
|
||||
use App\Libraries\MySocket\WebLibrary as MySocketLibrary;
|
||||
use App\Libraries\MyStorage\MangboardLibrary as MyStorageLibrary;
|
||||
use App\Libraries\MyStorage\Mangboard\FileLibrary as MyStorageLibrary;
|
||||
use App\Models\Mangboard\UserModel;
|
||||
use App\Models\Mangboard\BoardModel;
|
||||
use App\Entities\Mangboard\BoardEntity;
|
||||
@ -91,6 +91,7 @@ class YamapLibrary extends MyCrawlerLibrary
|
||||
if (!count($items)) {
|
||||
throw new \Exception("Target URL이 없습니다.");
|
||||
}
|
||||
log_message("notice", __FUNCTION__ . " 작업 완료");
|
||||
return $items;
|
||||
}
|
||||
|
||||
@ -100,7 +101,9 @@ class YamapLibrary extends MyCrawlerLibrary
|
||||
//3. Image 처리
|
||||
$fileEntitys = $this->download("image", $crawler, ["tag" => "img", "attr" => "src"]);
|
||||
//4. Video(mp4) 처리
|
||||
return $this->download("video", $crawler, ["tag" => "video", "attr" => "src"], $fileEntitys);
|
||||
$fileEntitys = $this->download("video", $crawler, ["tag" => "video", "attr" => "src"], $fileEntitys);
|
||||
log_message("notice", __FUNCTION__ . " 작업 완료");
|
||||
return $fileEntitys;
|
||||
}
|
||||
|
||||
public function createBoard(array $item, array $fileEntitys): BoardEntity
|
||||
@ -132,7 +135,7 @@ class YamapLibrary extends MyCrawlerLibrary
|
||||
//망보드 게시판에 등록
|
||||
$entity = $this->getBoardModel()->create($entity);
|
||||
//망보드 파일관리툴에 등록된 파일게시물에 등록한 게시판번호 수정하기
|
||||
$this->getMyStorage()->setBoardPID($fileEntitys, $entity->getPK());
|
||||
$this->getMyStorage()->setBoardPID($fileEntitys, intval($entity->getPK()));
|
||||
log_message("notice", __FUNCTION__ . " 작업 완료");
|
||||
return $entity;
|
||||
}
|
||||
|
||||
@ -74,7 +74,7 @@ class FileLibrary extends MyStorageLibrary
|
||||
$entity->setSize(filesize($saveFilePath));
|
||||
$entity->setSequence($file_sequence);
|
||||
$entity->setMediaHTML($this->getMediaTag($mediaType, $entity));
|
||||
log_message("notice", __FUNCTION__ . " {$file_sequence}번째 " . $entity->getTitle() . " 작업 완료");
|
||||
log_message("notice", __FUNCTION__ . " 원본 {$file_sequence}번째 " . $entity->getTitle() . " 작업 완료");
|
||||
return $entity;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
<?php
|
||||
|
||||
namespace App\Libraries\MyStorage;
|
||||
namespace App\Libraries\MyStorage\Mangboard;
|
||||
|
||||
use App\Libraries\MyStorage\FileLibrary as MyStorageLibrary;
|
||||
use App\Libraries\MyUtil\ImageLibrary;
|
||||
use App\Libraries\MyStorage\FileLibrary;
|
||||
use App\Models\Mangboard\FileModel;
|
||||
use App\Entities\Mangboard\UserEntity;
|
||||
use App\Entities\Mangboard\FileEntity;
|
||||
|
||||
class MangboardLibrary extends FileLibrary
|
||||
class FileLibrary extends MyStorageLibrary
|
||||
{
|
||||
private $_user = null;
|
||||
private $_boardName = "";
|
||||
@ -77,8 +77,18 @@ class MangboardLibrary extends FileLibrary
|
||||
return new FileEntity();
|
||||
}
|
||||
|
||||
//망보드 Board Table생성 후 관련된 mb_files Table에 Board번호를 넣기 위함
|
||||
public function setBoardPID(array $fileEntitys, int $board_pid): void
|
||||
{
|
||||
foreach ($fileEntitys as $fileEntity) {
|
||||
$formDatas['board_pid'] = $board_pid;
|
||||
$this->getModel()->modify($fileEntity, $formDatas);
|
||||
}
|
||||
log_message("notice", __FUNCTION__ . " 작업 완료");
|
||||
}
|
||||
|
||||
private function create_small_image(FileEntity $entity, string $file, int $width = 480, int $height = 319): FileEntity
|
||||
//작은이미지 생성
|
||||
private function save_small_image(FileEntity $entity, string $file, int $width = 480, int $height = 319): FileEntity
|
||||
{
|
||||
$fullPath = WRITEPATH . $this->getUploadPath() . DIRECTORY_SEPARATOR . $this->getPath();
|
||||
$image = new ImageLibrary();
|
||||
@ -89,24 +99,50 @@ class MangboardLibrary extends FileLibrary
|
||||
$fileInfos = pathinfo($image->getDestinationPath() . DIRECTORY_SEPARATOR . $file, PATHINFO_ALL);
|
||||
$dstFile = $fileInfos['filename'] . "_small." . $fileInfos['extension'];
|
||||
$image->setDestinationFile($dstFile);
|
||||
//작은이미지 생성후 목적지 Path와 파일명을 다시 file_path에 넣는다.
|
||||
$result = $image->create($file, $width, $height);
|
||||
//개인적인 생각방식
|
||||
// if ($result) {
|
||||
// //URL이 되기때문에 /로 넣어야함
|
||||
// //작은이미지 생성후 목적지 Path와 파일명을 다시 file_path에 넣는다. URL이 되기때문에 /로 넣어야함
|
||||
// $entity->setPath(sprintf(
|
||||
// "/%s/%s/%s",
|
||||
// $this->getUploadPath(),
|
||||
// $entity->getPath(),
|
||||
// $image->getDestinationFile()
|
||||
// ));
|
||||
// } else {
|
||||
// //원본이미지 생성후 목적지 Path와 파일명을 다시 file_path에 넣는다. URL이 되기때문에 /로 넣어야함
|
||||
// $entity->setPath(sprintf(
|
||||
// "/%s/%s/%s",
|
||||
// $this->getUploadPath(),
|
||||
// $entity->getPath(),
|
||||
// $entity->getTitle()
|
||||
// ));
|
||||
// }
|
||||
//개인적인 생각방식
|
||||
//
|
||||
//망보드 방식
|
||||
//mb_files에서 file_path가 망보드 게시판 파일관리에서 image로 표시되어 file_path+file_name로 설정
|
||||
//원본이미지 생성후 목적지 Path와 파일명을 다시 file_path에 넣는다. URL이 되기때문에 /로 넣어야함
|
||||
$entity->setPath(sprintf(
|
||||
"/%s/%s/%s",
|
||||
$this->getUploadPath(),
|
||||
$entity->getPath(),
|
||||
$entity->getTitle()
|
||||
));
|
||||
//망보드 방식
|
||||
log_message("notice", sprintf(
|
||||
"%s %s번째:%s 작업 완료",
|
||||
__FUNCTION__,
|
||||
$entity->getSequence(),
|
||||
$entity->getPath()
|
||||
));
|
||||
return $entity;
|
||||
}
|
||||
|
||||
//망보드 파일관리 table에 등록
|
||||
private function create_db(FileEntity $entity, int $file_sequence): FileEntity
|
||||
private function save_db(FileEntity $entity): FileEntity
|
||||
{
|
||||
// log_message("notice", __FUNCTION__ . " {$file_sequence}번째 작업 시작");
|
||||
// log_message("notice", sprintf("%s %s번째 작업 시작",__FUNCTION__ ,$entity->getSequence()));
|
||||
$entity->user_pid = $this->getUser()->getPK();
|
||||
$entity->user_name = $this->getUser()->getTitle();
|
||||
$entity->board_name = $this->getBoardName();
|
||||
@ -117,34 +153,17 @@ class MangboardLibrary extends FileLibrary
|
||||
$entity->file_description = "Filedata";
|
||||
// log_message("debug", "\n-----Entity Value-----\n" . var_export($entity->toArray(), true) . "\n---------------------------\n");
|
||||
$entity = $this->getModel()->create($entity);
|
||||
log_message("notice", __FUNCTION__ . " {$file_sequence}번째 작업 완료");
|
||||
log_message("notice", sprintf(
|
||||
"%s %s번째 작업 완료",
|
||||
__FUNCTION__,
|
||||
$entity->getSequence()
|
||||
));
|
||||
return $entity;
|
||||
}
|
||||
public function save(string $fileName, string $mediaType, string $content, int $file_sequence): FileEntity
|
||||
{
|
||||
$entity = parent::save($fileName, $mediaType, $content, $file_sequence);
|
||||
//mb_files에서 file_path가 망보드 게시판 파일관리에서 image로 표시되어 file_path+file_name로 설정
|
||||
//원본이미지 생성후 목적지 Path와 파일명을 다시 file_path에 넣는다.
|
||||
//URL이 되기때문에 /로 넣어야함
|
||||
$entity->setPath(sprintf(
|
||||
"/%s/%s/%s",
|
||||
$this->getUploadPath(),
|
||||
$entity->getPath(),
|
||||
$entity->getTitle()
|
||||
));
|
||||
//작은이미지 생성
|
||||
$entity = $this->create_small_image($entity, $fileName);
|
||||
return $this->create_db($entity, $file_sequence);
|
||||
}
|
||||
public function setBoardPID(array $fileEntitys, int $board_pid)
|
||||
{
|
||||
//망보드 파일관리툴에 등록된 파일게시물에 등록한 게시판번호 수정하기
|
||||
foreach ($fileEntitys as $fileEntity) {
|
||||
$fileEntity->board_pid = $board_pid;
|
||||
//수정시 mb_files에서 file_path가 변경하지 못하게 하기위함
|
||||
$this->getModel()->setFields($this->getModel()->getFields("except", ['file_path']));
|
||||
$this->getModel()->modify($fileEntity);
|
||||
}
|
||||
log_message("notice", __FUNCTION__ . " 작업 완료");
|
||||
$entity = $this->save_small_image($entity, $fileName);
|
||||
return $this->save_db($entity);
|
||||
}
|
||||
}
|
||||
@ -139,7 +139,14 @@ class ImageLibrary extends MyUtilLibrary
|
||||
$this->save($this->getDestinationPath() . DIRECTORY_SEPARATOR . $this->getDestinationFile());
|
||||
// 메모리 해제
|
||||
$this->destroy();
|
||||
log_message("notice", __FUNCTION__ . " Image 작업 완료");
|
||||
log_message("debug", sprintf(
|
||||
"%s %s->%s(W:%s,H:%s) 작업완료)",
|
||||
__FUNCTION__,
|
||||
$file,
|
||||
$this->getDestinationFile(),
|
||||
$width,
|
||||
$height
|
||||
));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -46,10 +46,9 @@ abstract class CommonModel extends Model
|
||||
protected $afterDelete = [];
|
||||
|
||||
private $_action = DB_ACTION["CREATE"];
|
||||
protected function __construct(array $fields)
|
||||
protected function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->setFields($fields);
|
||||
}
|
||||
abstract public function getTitleField(): string;
|
||||
|
||||
@ -65,9 +64,9 @@ abstract class CommonModel extends Model
|
||||
{
|
||||
return $this->_action = $action;
|
||||
}
|
||||
final public function getFields(string $key = "", $fields = []): array
|
||||
final public function getFields(string $key = ""): array
|
||||
{
|
||||
$this->allowedFields = array_filter(
|
||||
$allowedFields = array_filter(
|
||||
$this->allowedFields,
|
||||
function ($value) use (&$key, &$fields) {
|
||||
if ($key == 'except') {
|
||||
@ -79,7 +78,7 @@ abstract class CommonModel extends Model
|
||||
}
|
||||
}
|
||||
);
|
||||
return $this->allowedFields;
|
||||
return $allowedFields;
|
||||
}
|
||||
final public function setFields(array $fields): void
|
||||
{
|
||||
@ -112,8 +111,10 @@ abstract class CommonModel extends Model
|
||||
$rules[$field] = "required|string";
|
||||
break;
|
||||
case "passwd":
|
||||
$rules[$field] = $this->getAction() == DB_ACTION["CREATE"] ? "required|trim|string" : "if_exist|trim|string";
|
||||
$rules["confirmpassword"] = $this->getAction() == DB_ACTION["CREATE"] ? "required|trim|string|matches[passwd]" : "if_exist|trim|string|matches[passwd]";
|
||||
$rules[$field] = $this->getAction() == DB_ACTION["CREATE"] ? "required" : "if_exist" . "|trim|string";
|
||||
break;
|
||||
case "confirmpassword":
|
||||
$rules["confirmpassword"] = $this->getAction() == DB_ACTION["CREATE"] ? "required" : "if_exist" . "|trim|string|matches[passwd]";
|
||||
break;
|
||||
case "email":
|
||||
$rules[$field] = "if_exist|trim|valid_email";
|
||||
@ -143,16 +144,14 @@ abstract class CommonModel extends Model
|
||||
}
|
||||
|
||||
//create , modify 직전 작업용 작업
|
||||
protected function convertEntityData($entity, $field): mixed
|
||||
final protected function convertEntityData(string $field, array $formDatas): string|int
|
||||
{
|
||||
if ($entity->$field === null) {
|
||||
return $entity;
|
||||
}
|
||||
switch ($field) {
|
||||
case $this->getPKField():
|
||||
if ($entity->$field === null) {
|
||||
//$formDatas에 전달된 값이 없는경우
|
||||
if (!array_key_exists($field, $formDatas)) {
|
||||
$randomBytes = bin2hex(random_bytes(32));
|
||||
$entity->$field = sprintf(
|
||||
$value = sprintf(
|
||||
'%08s-%04s-%04x-%04x-%12s',
|
||||
substr($randomBytes, 0, 8),
|
||||
substr($randomBytes, 8, 4),
|
||||
@ -160,59 +159,70 @@ abstract class CommonModel extends Model
|
||||
substr($randomBytes, 16, 4),
|
||||
substr($randomBytes, 20, 12)
|
||||
);
|
||||
} else {
|
||||
$value = $formDatas[$field];
|
||||
}
|
||||
break;
|
||||
case "passwd":
|
||||
$entity->$field = password_hash($entity->$field, PASSWORD_DEFAULT);
|
||||
$value = password_hash($formDatas[$field], PASSWORD_DEFAULT);
|
||||
break;
|
||||
case "confirmpassword":
|
||||
$value = password_hash($formDatas[$field], PASSWORD_DEFAULT);
|
||||
break;
|
||||
case "content":
|
||||
$entity->$field = htmlentities($entity->$field, ENT_QUOTES);
|
||||
$value = htmlentities($formDatas[$field], ENT_QUOTES);
|
||||
break;
|
||||
default:
|
||||
$value = $formDatas[$field];
|
||||
break;
|
||||
}
|
||||
return $entity;
|
||||
return $value;
|
||||
}
|
||||
|
||||
private function save_process($entity): mixed
|
||||
{
|
||||
//변경이 필요한 Field 재정의
|
||||
foreach ($this->getFields() as $field) {
|
||||
$entity = $this->convertEntityData($entity, $field);
|
||||
}
|
||||
//최종 변경사항이 있으면 저장
|
||||
if ($entity->hasChanged()) {
|
||||
if (!$this->save($entity)) {
|
||||
log_message("error", __FUNCTION__ . "에서 호출:" . $this->getLastQuery());
|
||||
log_message("error", implode("\n", $this->errors()));
|
||||
throw new \Exception(__FUNCTION__ . " 오류 발생.\n" . $this->getLastQuery() . "\n" . var_dump($this->errors(), true));
|
||||
throw new \Exception(sprintf(
|
||||
"\n------%s SQL오류-----\n%s\n%s\n------------------------------\n",
|
||||
__FUNCTION__,
|
||||
$this->getLastQuery(),
|
||||
var_export($this->errors(), true)
|
||||
));
|
||||
}
|
||||
} else {
|
||||
throw new \Exception(__FUNCTION__ . " 오류 발생.\n 기존정보와 동일하여 수정되지 않았습니다.");
|
||||
}
|
||||
return $entity;
|
||||
}
|
||||
final protected function create_process($entity): mixed
|
||||
final protected function create_process($entity, array $formDatas): mixed
|
||||
{
|
||||
$this->setAction(DB_ACTION['CREATE']);
|
||||
//Field에 맞는 Validation Rule 재정의
|
||||
$this->setValidationRules($this->getFieldRules($this->getFields()));
|
||||
//수동입력인경우
|
||||
$pkField = $this->getPKField();
|
||||
if (!$this->useAutoIncrement && $entity->$pkField === null) {
|
||||
$entity = $this->convertEntityData($entity, $this->getPKField());
|
||||
$this->setAction(DB_ACTION['CREATE']);
|
||||
$this->setValidationRules($this->getFieldRules($this->allowedFields));
|
||||
|
||||
//저장하기 전에 데이터 값 변경이 필요한 Field
|
||||
foreach (array_keys($formDatas) as $field) {
|
||||
$entity->$field = $this->convertEntityData($field, $formDatas);
|
||||
}
|
||||
$entity = $this->save_process($entity);
|
||||
//primaryKey가 자동입력이면
|
||||
if ($this->useAutoIncrement) {
|
||||
$pkField = $this->getPKField();
|
||||
$entity->$pkField = $this->getInsertID();
|
||||
}
|
||||
// log_message("debug", $this->getTable() . " CREATE 작업 완료");
|
||||
return $entity;
|
||||
}
|
||||
final protected function modify_process($entity): mixed
|
||||
final protected function modify_process($entity, array $formDatas): mixed
|
||||
{
|
||||
$this->setAction(DB_ACTION['MODIFY']);
|
||||
//Field에 맞는 Validation Rule 재정의
|
||||
$this->setValidationRules($this->getFieldRules($this->getFields()));
|
||||
$this->setAction(DB_ACTION['MODIFY']);
|
||||
$this->setValidationRules($this->getFieldRules($this->allowedFields));
|
||||
|
||||
//저장하기 전에 데이터 값 변경이 필요한 Field
|
||||
foreach (array_keys($formDatas) as $field) {
|
||||
$entity->$field = $this->convertEntityData($field, $formDatas);
|
||||
}
|
||||
$this->save_process($entity);
|
||||
// log_message("debug", $this->getTable() . " MODIFY 작업 완료");
|
||||
return $entity;
|
||||
|
||||
@ -71,24 +71,24 @@ class BoardModel extends CommonModel
|
||||
// protected $table = 'mb_board_free';
|
||||
protected $primaryKey = 'pid';
|
||||
protected $returnType = BoardEntity::class;
|
||||
protected $allowedFields = [
|
||||
"gid",
|
||||
"title",
|
||||
"user_pid",
|
||||
"user_id",
|
||||
"user_name",
|
||||
"level",
|
||||
"data_type",
|
||||
"editor_type",
|
||||
"image_path",
|
||||
"reg_date",
|
||||
"hit",
|
||||
"content"
|
||||
];
|
||||
public function __construct(string $table)
|
||||
{
|
||||
$this->table = $table;
|
||||
$fields = [
|
||||
"gid",
|
||||
"title",
|
||||
"user_pid",
|
||||
"user_id",
|
||||
"user_name",
|
||||
"level",
|
||||
"data_type",
|
||||
"editor_type",
|
||||
"image_path",
|
||||
"reg_date",
|
||||
"hit",
|
||||
"content"
|
||||
];
|
||||
parent::__construct($fields);
|
||||
parent::__construct();
|
||||
}
|
||||
public function getTitleField(): string
|
||||
{
|
||||
@ -136,14 +136,16 @@ class BoardModel extends CommonModel
|
||||
}
|
||||
|
||||
//create용
|
||||
public function create(BoardEntity $entity): BoardEntity
|
||||
public function create(BoardEntity $entity, array $formDatas = []): BoardEntity
|
||||
{
|
||||
return $this->create_process($entity);
|
||||
$entity = $this->create_process($entity, $formDatas);
|
||||
//입력후 PID값을 GID값에 넣어주기 위함
|
||||
return $this->modify($entity, ['gid' => intval($entity->getPK())]);
|
||||
}
|
||||
|
||||
//modify용
|
||||
public function modify(BoardEntity $entity): BoardEntity
|
||||
public function modify(BoardEntity $entity, array $formDatas): BoardEntity
|
||||
{
|
||||
return $this->modify_process($entity);
|
||||
return $this->modify_process($entity, $formDatas);
|
||||
}
|
||||
}
|
||||
|
||||
@ -35,25 +35,25 @@ class FileModel extends CommonModel
|
||||
protected $table = 'mb_files';
|
||||
protected $primaryKey = 'pid';
|
||||
protected $returnType = FileEntity::class;
|
||||
protected $allowedFields = [
|
||||
"user_pid",
|
||||
"user_name",
|
||||
"board_pid",
|
||||
"board_name",
|
||||
"table_name",
|
||||
"file_name",
|
||||
"file_path",
|
||||
"file_type",
|
||||
"file_caption",
|
||||
"file_alt",
|
||||
"file_description",
|
||||
"file_size",
|
||||
"file_sequence",
|
||||
"reg_date"
|
||||
];
|
||||
public function __construct()
|
||||
{
|
||||
$fields = [
|
||||
"user_pid",
|
||||
"user_name",
|
||||
"board_pid",
|
||||
"board_name",
|
||||
"table_name",
|
||||
"file_name",
|
||||
"file_path",
|
||||
"file_type",
|
||||
"file_caption",
|
||||
"file_alt",
|
||||
"file_description",
|
||||
"file_size",
|
||||
"file_sequence",
|
||||
"reg_date"
|
||||
];
|
||||
parent::__construct($fields);
|
||||
parent::__construct();
|
||||
}
|
||||
public function getTitleField(): string
|
||||
{
|
||||
@ -101,28 +101,24 @@ class FileModel extends CommonModel
|
||||
return $this->getEntity();
|
||||
}
|
||||
|
||||
final protected function convertEntityData($entity, $field): mixed
|
||||
{
|
||||
if ($entity->$field === null) {
|
||||
return $entity;
|
||||
}
|
||||
switch ($field) {
|
||||
default:
|
||||
$entity = parent::convertEntityData($entity, $field);
|
||||
break;
|
||||
}
|
||||
return $entity;
|
||||
}
|
||||
// protected function convertEntityData(string $field, array $formDatas): string|int
|
||||
// {
|
||||
// switch ($field) {
|
||||
// default:
|
||||
// $value = parent::convertEntityData($field, $formDatas);
|
||||
// break;
|
||||
// }
|
||||
// return $value;
|
||||
// }
|
||||
|
||||
//create용
|
||||
public function create(FileEntity $entity): FileEntity
|
||||
public function create(FileEntity $entity, array $formDatas = []): FileEntity
|
||||
{
|
||||
return $this->create_process($entity);
|
||||
return $this->create_process($entity, $formDatas);
|
||||
}
|
||||
|
||||
//modify용
|
||||
public function modify(FileEntity $entity): FileEntity
|
||||
public function modify(FileEntity $entity, array $formDatas): FileEntity
|
||||
{
|
||||
return $this->modify_process($entity);
|
||||
return $this->modify_process($entity, $formDatas);
|
||||
}
|
||||
}
|
||||
|
||||
@ -99,18 +99,18 @@ class UserModel extends CommonModel
|
||||
protected $table = 'mb_users';
|
||||
protected $primaryKey = 'pid';
|
||||
protected $returnType = UserEntity::class;
|
||||
protected $allowedFields = [
|
||||
"user_id",
|
||||
"passwd",
|
||||
"user_name",
|
||||
"user_email",
|
||||
"user_state",
|
||||
"user_level",
|
||||
"user_point"
|
||||
];
|
||||
public function __construct()
|
||||
{
|
||||
$fields = [
|
||||
"user_id",
|
||||
"passwd",
|
||||
"user_name",
|
||||
"user_email",
|
||||
"user_state",
|
||||
"user_level",
|
||||
"user_point"
|
||||
];
|
||||
parent::__construct($fields);
|
||||
parent::__construct();
|
||||
}
|
||||
public function getTitleField(): string
|
||||
{
|
||||
@ -151,12 +151,12 @@ class UserModel extends CommonModel
|
||||
return $this->getEntity();
|
||||
}
|
||||
|
||||
private function checkLevel(UserEntity $entity): UserEntity
|
||||
private function getLevelByPoint(UserEntity $entity): int
|
||||
{
|
||||
//Admin용 Level로는 변경불가
|
||||
if ($entity->getLevel() == getenv('mangboard.admin.level')) {
|
||||
// throw new \Exception("Admin용 Level을 변경하실수 없습니다.\n");
|
||||
return $entity;
|
||||
log_message("notice", "Admin용 Level을 변경하실수 없습니다.");
|
||||
return $entity->getLevel();
|
||||
}
|
||||
|
||||
//사용자 Point별 Level 계산
|
||||
@ -175,24 +175,11 @@ class UserModel extends CommonModel
|
||||
$level = getenv('mangboard.user.level.max') < $level ? getenv('mangboard.user.level.max') : $level;
|
||||
}
|
||||
// echo "point:" . $entity->getPoint() . ",level:" . $level . "\n";
|
||||
|
||||
//기존정보와 Level값이 다르면 저장
|
||||
if ($entity->getLevel() != $level) {
|
||||
$old_level = $entity->getLevel();
|
||||
$entity->setLevel($level);
|
||||
$entity = $this->modify($entity);
|
||||
log_message("notice", __FUNCTION__ . "=>{$entity}의 Level이 {$old_level}에서 {$entity->getLevel()}로 변경되었습니다.");
|
||||
}
|
||||
return $entity;
|
||||
return $level;
|
||||
}
|
||||
|
||||
public function setPoint($id, int $point, $sign = '+'): UserEntity
|
||||
public function setPoint(UserEntity $entity, int $point, $sign = '+'): UserEntity
|
||||
{
|
||||
$entity = is_numeric($id) ? $this->getEntityByPK(intval($id)) : $this->getEntityByID($id);
|
||||
if (!$entity) {
|
||||
throw new \Exception("해당 회원[{$id}]이 없습니다.");
|
||||
}
|
||||
|
||||
switch ($sign) {
|
||||
case '-':
|
||||
if ($point < $point) {
|
||||
@ -210,30 +197,31 @@ class UserModel extends CommonModel
|
||||
|
||||
//기존정보와 Point값이 다르면 저장
|
||||
if ($entity->getPoint() != $point) {
|
||||
$old_point = $entity->getPoint();
|
||||
$entity->setPoint($point);
|
||||
$entity = $this->modify($entity);
|
||||
log_message("notice", __FUNCTION__ . "=>{$entity}의 Point가 {$old_point}에서 {$entity->getPoint()}로 변경되었습니다.");
|
||||
$formDatas = ["point" => $point];
|
||||
$entity = $this->modify($entity, $formDatas);
|
||||
log_message("notice", __FUNCTION__ . "=>{$entity->getTitle()}님의 Point가 {$entity->getPoint()}에서 {$point}로 변경되었습니다.");
|
||||
}
|
||||
return $this->checkLevel($entity);
|
||||
return $this->setLevel($entity, $this->getLevelByPoint($entity));
|
||||
}
|
||||
public function setLevel(): void
|
||||
public function setLevel(UserEntity $entity, int $level): UserEntity
|
||||
{
|
||||
foreach ($this->getEntitys() as $entity) {
|
||||
$entity = $this->checkLevel($entity);
|
||||
log_message("debug", __FUNCTION__ . "=>[{$entity}] 회원님의 Level은 {$entity->getLevel()} 입니다.");
|
||||
//기존정보와 Level값이 다르면 저장
|
||||
if ($entity->getLevel() != $level) {
|
||||
$formDatas = ["level" => $level];
|
||||
$entity = $this->modify($entity, $formDatas);
|
||||
log_message("notice", __FUNCTION__ . "=>{$entity->getTitle()}님의 Level이 {$entity->getLevel()}에서 {$level}로 변경되었습니다.");
|
||||
}
|
||||
return $entity;
|
||||
}
|
||||
|
||||
//create용
|
||||
public function create(UserEntity $entity): UserEntity
|
||||
public function create(UserEntity $entity, array $formDatas = []): UserEntity
|
||||
{
|
||||
return $this->create_process($entity);
|
||||
return $this->create_process($entity, $formDatas);
|
||||
}
|
||||
|
||||
//modify용
|
||||
public function modify(UserEntity $entity): UserEntity
|
||||
public function modify(UserEntity $entity, array $formDatas): UserEntity
|
||||
{
|
||||
return $this->modify_process($entity);
|
||||
return $this->modify_process($entity, $formDatas);
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,17 +10,16 @@ class SNSUserModel extends CommonModel
|
||||
protected $table = 'sns_users';
|
||||
protected $primaryKey = 'uid';
|
||||
protected $returnType = SNSUSerEntity::class;
|
||||
protected $allowedFields = [
|
||||
"id",
|
||||
"name",
|
||||
"email",
|
||||
"detail",
|
||||
"status"
|
||||
];
|
||||
public function __construct()
|
||||
{
|
||||
$fields = [
|
||||
"id",
|
||||
"passwd",
|
||||
"name",
|
||||
"email",
|
||||
"detail",
|
||||
"status"
|
||||
];
|
||||
parent::__construct($fields);
|
||||
parent::__construct();
|
||||
}
|
||||
public function getTitleField(): string
|
||||
{
|
||||
@ -56,14 +55,14 @@ class SNSUserModel extends CommonModel
|
||||
}
|
||||
|
||||
//create용
|
||||
public function create(SNSUSerEntity $entity): SNSUSerEntity
|
||||
public function create(SNSUSerEntity $entity, array $formDatas = []): SNSUSerEntity
|
||||
{
|
||||
return $this->create_process($entity);
|
||||
return $this->create_process($entity, $formDatas);
|
||||
}
|
||||
|
||||
//modify용
|
||||
public function modify(SNSUSerEntity $entity): SNSUSerEntity
|
||||
public function modify(SNSUSerEntity $entity, array $formDatas): SNSUSerEntity
|
||||
{
|
||||
return $this->modify_process($entity);
|
||||
return $this->modify_process($entity, $formDatas);
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,19 +10,19 @@ class UserModel extends CommonModel
|
||||
protected $table = 'users';
|
||||
protected $primaryKey = 'uid';
|
||||
protected $returnType = UserEntity::class;
|
||||
protected $allowedFields = [
|
||||
"id",
|
||||
"passwd",
|
||||
"name",
|
||||
"email",
|
||||
"pohne",
|
||||
"mobild",
|
||||
"role",
|
||||
"status"
|
||||
];
|
||||
public function __construct()
|
||||
{
|
||||
$fields = [
|
||||
"id",
|
||||
"passwd",
|
||||
"name",
|
||||
"email",
|
||||
"pohne",
|
||||
"mobild",
|
||||
"role",
|
||||
"status"
|
||||
];
|
||||
parent::__construct($fields);
|
||||
parent::__construct();
|
||||
}
|
||||
public function getTitleField(): string
|
||||
{
|
||||
@ -70,14 +70,14 @@ class UserModel extends CommonModel
|
||||
}
|
||||
|
||||
//create용
|
||||
public function create(UserEntity $entity): UserEntity
|
||||
public function create(UserEntity $entity, array $formDatas = []): UserEntity
|
||||
{
|
||||
return $this->create_process($entity);
|
||||
return $this->create_process($entity, $formDatas);
|
||||
}
|
||||
|
||||
//modify용
|
||||
public function modify(UserEntity $entity): UserEntity
|
||||
public function modify(UserEntity $entity, array $formDatas): UserEntity
|
||||
{
|
||||
return $this->modify_process($entity);
|
||||
return $this->modify_process($entity, $formDatas);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user