diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 821edbe..98ebada 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -21,11 +21,6 @@ $routes->group('admin', ['namespace' => 'App\Controllers\Admin', 'filter' => 'au $routes->get('', 'UserController::index'); }); }); -$routes->group('crawler', ['namespace' => 'App\Controllers'], function ($routes) { - $routes->cli('yamap', 'CrawlerController::yamap'); - $routes->cli('yamap/(:alphanum)/(:any)', 'CrawlerController::yamap/$1/$2'); - $routes->cli('yamap/(:alphanum)/(:any)/(:any)', 'CrawlerController::yamap/$1/$2/$3'); -}); $routes->group('mangboard', ['namespace' => 'App\Controllers\Mangboard'], function ($routes) { $routes->group('user', function ($routes) { $routes->get('/', 'UserController::index'); @@ -35,8 +30,9 @@ $routes->group('mangboard', ['namespace' => 'App\Controllers\Mangboard'], functi $routes->cli('check_level', 'UserController::check_level'); $routes->cli('check_level/(:alpha)', 'UserController::check_level/$1'); }); - $routes->group('image', function ($routes) { - $routes->cli('yamap', 'ImageController::yamap'); - $routes->cli('yamap/(:any)', 'ImageController::yamap/$1'); + $routes->group('craawler', function ($routes) { + $routes->cli('yamap/(:alpha)', 'CrawlerController::yamap/$1'); + $routes->cli('yamap/(:alpha)/(:any)', 'CrawlerController::yamap/$1/$2'); + $routes->cli('yamap/(:alpha)/(:alphanum)/(:any)', 'CrawlerController::yamap/$1/$2/$3'); }); }); diff --git a/app/Controllers/Admin/UserController.php b/app/Controllers/Admin/UserController.php index e27a833..6ee6a38 100644 --- a/app/Controllers/Admin/UserController.php +++ b/app/Controllers/Admin/UserController.php @@ -17,7 +17,7 @@ class UserController extends CommonController public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger) { parent::initController($request, $response, $logger); - $this->session = $this->login_check(); + $this->session = $this->loginCheck_AuthTrait(); } private function getModel(): UserModel { diff --git a/app/Controllers/CrawlerController.php b/app/Controllers/Mangboard/CrawlerController.php similarity index 66% rename from app/Controllers/CrawlerController.php rename to app/Controllers/Mangboard/CrawlerController.php index 1225d14..409f7bc 100644 --- a/app/Controllers/CrawlerController.php +++ b/app/Controllers/Mangboard/CrawlerController.php @@ -1,23 +1,23 @@ login(getenv("mangboard.host.url"), $id, $password); //2. 필요한 로그인한 사용자정보,Socket,Storage 정의후 Crawler에게 전달. - $crawler = new MyCrawler(); + $crawler = new YamapCrawler($category); $crawler->setUserEntity($user_entity); $crawler->setDebug($debug === "true" ? true : false); $crawler->execute(); diff --git a/app/Controllers/Mangboard/ImageController.php b/app/Controllers/Mangboard/ImageController.php deleted file mode 100644 index ab6e9ab..0000000 --- a/app/Controllers/Mangboard/ImageController.php +++ /dev/null @@ -1,34 +0,0 @@ -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(); - } - } -} diff --git a/app/Libraries/Mangboard/BoardLibrary.php b/app/Libraries/Mangboard/BoardLibrary.php index 4c8b3cc..e17c3d4 100644 --- a/app/Libraries/Mangboard/BoardLibrary.php +++ b/app/Libraries/Mangboard/BoardLibrary.php @@ -2,18 +2,20 @@ namespace App\Libraries\Mangboard; +use App\Libraries\CommonLibrary; use App\Models\Mangboard\BoardModel; use App\Entities\Mangboard\UserEntity; use App\Entities\Mangboard\BoardsEntity; use App\Entities\Mangboard\BoardEntity; -class BoardLibrary +class BoardLibrary extends CommonLibrary { private $_model = null; private $_boards_entity = null; private $_user_entity = null; public function __construct(BoardsEntity $boards_entity, UserEntity $user_entity) { + parent::__construct(); $this->_boards_entity = $boards_entity; $this->_user_entity = $user_entity; } @@ -33,7 +35,8 @@ class BoardLibrary { return $this->_user_entity; } - public function create(int $cnt, array $listInfo, array $file_librarys): BoardEntity + + public function createByCrawler(int $cnt, array $listInfo, array $storages): BoardEntity { $formDatas = []; //미디어관련정보 entity에 넣기 @@ -48,11 +51,11 @@ class BoardLibrary $formDatas['editor_type'] = "S"; $formDatas['image_path'] = ""; $formDatas['content'] = ""; - foreach ($file_librarys as $file_library) { + foreach ($storages as $storage) { if ($formDatas['image_path'] == "") { - $formDatas['image_path'] = sprintf("%s/%s", $file_library->getPath(), $file_library->getOriginName()); + $formDatas['image_path'] = sprintf("%s/%s/%s", $storage->getBasePath(), $storage->getPath(), $storage->getOriginName()); } - $formDatas['content'] .= $file_library->getHTMLTag(); + $formDatas['content'] .= $storage->getHTMLTag(); } //망보드 게시판에 등록 if ($formDatas['content'] == "") { @@ -65,10 +68,6 @@ class BoardLibrary )); } $entity = $this->getModel()->create($formDatas); - //망보드 파일관리툴 등록 - foreach ($file_librarys as $file_library) { - $file_library->createByBoardLibrary($entity, $cnt, $listInfo); - } log_message("notice", sprintf( "%s=>%s번째 %s => %s 등록 완료", __FUNCTION__, diff --git a/app/Libraries/Mangboard/BoardsLibrary.php b/app/Libraries/Mangboard/BoardsLibrary.php index 136bf48..f3675d7 100644 --- a/app/Libraries/Mangboard/BoardsLibrary.php +++ b/app/Libraries/Mangboard/BoardsLibrary.php @@ -2,19 +2,21 @@ namespace App\Libraries\Mangboard; +use App\Libraries\CommonLibrary; use App\Models\Mangboard\BoardsModel; use App\Entities\Mangboard\UserEntity; use App\Entities\Mangboard\BoardsEntity; -class BoardsLibrary +class BoardsLibrary extends CommonLibrary { private $_model = null; private $_entity = null; - private $_board_name = null; + private $_category = null; private $_user_entity = null; - public function __construct(string $board_name, UserEntity $uer_entity) + public function __construct(string $category, UserEntity $uer_entity) { - $this->_board_name = $board_name; + parent::__construct(); + $this->_category = $category; $this->_user_entity = $uer_entity; } public function getModel(): BoardsModel @@ -27,14 +29,14 @@ class BoardsLibrary public function getEntity(): BoardsEntity { if ($this->_entity === null) { - $this->_entity = $this->getModel()->getEntityByID($this->getBoardName()); + $this->_entity = $this->getModel()->getEntityByID("board_" . $this->getCategory()); } return $this->_entity; } //---------------------------------------------------------------------// - public function getBoardName(): string + public function getCategory(): string { - return $this->_board_name; + return $this->_category; } public function getUserEntity(): UserEntity { diff --git a/app/Libraries/Mangboard/File/ImageLibrary.php b/app/Libraries/Mangboard/File/ImageLibrary.php deleted file mode 100644 index 6934353..0000000 --- a/app/Libraries/Mangboard/File/ImageLibrary.php +++ /dev/null @@ -1,41 +0,0 @@ -getSourcePath() . DIRECTORY_SEPARATOR . $file_name, PATHINFO_EXTENSION); - if (!$this->isFileType($file_ext)) { - throw new \Exception("{$file_name} Image 형식파일이 아닙니다."); - } - //저장할 디렉토리 생성 - $this->makeDirectory($this->getDestinationPath()); - // 이미지 파일 로드 - $this->load($this->getSourcePath() . DIRECTORY_SEPARATOR . $file_name); - // 200x200으로 이미지 크기 조정 - $this->resize($width, $height); - // 파일 저장 - $this->save($this->getDestinationPath() . DIRECTORY_SEPARATOR . $this->getDestinationFile()); - // 메모리 해제 - $this->destroy(); - log_message("debug", sprintf( - "%s %s->%s(W:%s,H:%s) 작업완료)", - __FUNCTION__, - $file_name, - $this->getDestinationFile(), - $width, - $height - )); - return $file_name; - } catch (\Exception $e) { - log_message("warning", $e->getMessage()); - return false; - } - } -} diff --git a/app/Libraries/Mangboard/FileLibrary.php b/app/Libraries/Mangboard/FileLibrary.php index 1a6d9e0..9d5ce53 100644 --- a/app/Libraries/Mangboard/FileLibrary.php +++ b/app/Libraries/Mangboard/FileLibrary.php @@ -2,21 +2,24 @@ namespace App\Libraries\Mangboard; +use App\Libraries\CommonLibrary; +use App\Libraries\MyStorage\MangboardStorage; use App\Models\Mangboard\FileModel; -use App\Libraries\Mangboard\File\ImageLibrary; -use App\Libraries\MyStorage\FileLibrary as MyStorageLibrary; use App\Entities\Mangboard\UserEntity; +use App\Entities\Mangboard\FileEntity; use App\Entities\Mangboard\BoardsEntity; use App\Entities\Mangboard\BoardEntity; -class FileLibrary extends MyStorageLibrary +class FileLibrary extends CommonLibrary { private $_model = null; private $_boards_entity = null; private $_user_entity = null; - public function __construct(string $path) + public function __construct(BoardsEntity $boards_entity, UserEntity $user_entity) { - parent::__construct($path); + parent::__construct(); + $this->_boards_entity = $boards_entity; + $this->_user_entity = $user_entity; } public function getModel(): FileModel { @@ -27,116 +30,55 @@ class FileLibrary extends MyStorageLibrary } public function getBoardsEntity(): BoardsEntity { - if ($this->_boards_entity === null) { - throw new \Exception("Board Library가 정의되지 않았습니다."); - } return $this->_boards_entity; } - public function setBoardsEntity(BoardsEntity $boards_entity): void - { - $this->_boards_entity = $boards_entity; - } - public function setUserEntity(UserEntity $user_entity): void - { - $this->_user_entity = $user_entity; - } public function getUserEntity(): UserEntity { - if ($this->_user_entity === null) { - throw new \Exception("User Entity가 정의되지 않았습니다."); - } return $this->_user_entity; } - final public function getHTMLTag(string $content = ""): string + public function create(BoardEntity $board_entity, MangboardStorage $storage): FileEntity { - //Board 게시판 image_path , content용 데이터 배열에 추가 후 modifyBoard에서 처리 - switch ($this->getOrintginType()) { - case "image": - $content = sprintf( - "\"%s\"", - getenv("mangboard.uloads.url"), - $this->getPath(), - $this->getOriginName(), - $this->getOriginName() - ); - break; - case "video": - $content = sprintf( - "", - $this->getOriginName(), - getenv("mangboard.uloads.url"), - $this->getPath(), - $this->getOriginName(), - $this->getMimeType(), - ); - break; - } - log_message("debug", sprintf( - "\n--------%s--------\n%s\n--------------------\n", - __FUNCTION__, - $content - )); - return $content; + //파일관리 table에 등록 + $formDatas = []; + //Board PID 넣기 + $formDatas['board_pid'] = $board_entity->getPk(); + $formDatas['user_pid'] = $this->getUserEntity()->getPK(); + $formDatas['user_name'] = $this->getUserEntity()->getTitle(); + $formDatas['board_name'] = $this->getBoardsEntity()->getTitle(); + $formDatas['table_name'] = $this->getModel()->getTable(); + $formDatas['file_path'] = $storage->getBasePath() . DIRECTORY_SEPARATOR . $storage->getPath() . DIRECTORY_SEPARATOR . $storage->getOriginName(); + $formDatas['file_name'] = $storage->getOriginName(); + $formDatas['file_type'] = $storage->getMimeType(); + $formDatas['file_caption'] = $storage->getOriginName(); + $formDatas['file_alt'] = $storage->getOriginName(); + $formDatas['file_description'] = "Filedata"; + $formDatas['file_size'] = $storage->getFileSize(); + $formDatas['file_sequence'] = $storage->getOriginSequence(); + $formDatas['reg_date'] = date("Y-m-d H:i:s"); + return $this->getModel()->create($formDatas); } - public function createByBoardLibrary(BoardEntity $board_entity, int $cnt, array $listInfos): void + public function createByCrawler(BoardEntity $board_entity, array $storages): void { try { - //파일관리 table에 등록 - $formDatas = []; - //Board PID 넣기 - $formDatas['board_pid'] = $board_entity->getPk(); - $formDatas['user_pid'] = $this->getUserEntity()->getPK(); - $formDatas['user_name'] = $this->getUserEntity()->getTitle(); - $formDatas['board_name'] = $this->getBoardsEntity()->getTitle(); - $formDatas['table_name'] = $this->getModel()->getTable(); - $formDatas['file_path'] = sprintf("%s/%s", $this->getPath(), $this->getOriginName()); - $formDatas['file_name'] = $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->getModel()->create($formDatas); - log_message("notice", sprintf( - "게시물 %s번째[%s]의 %s번째용 파일 등록 완료", - $cnt, - $listInfos['title'], - __FUNCTION__, - $this->getOriginSequence() - )); + foreach ($storages as $storage) { + $entity = $this->create($board_entity, $storage); + log_message("notice", sprintf( + "%s -> %s 게시물의 %s번째:%s 파일 등록 완료", + __FUNCTION__, + $board_entity->getTitle(), + $storage->getOriginSequence(), + $entity->getTitle() + )); + } } catch (\Exception $e) { log_message("notice", sprintf( - "\n---%s 게시물 %s번째[%s]의 %s번째용 파일 등록 오류---\n%s\n--------------------------------\n", + "\n---%s -> %s 게시물의 %s번째:%s 파일 등록 오류---\n%s\n--------------------------------\n", __FUNCTION__, - $cnt, - $listInfos['title'], - __FUNCTION__, - $this->getOriginSequence(), + $board_entity->getTitle(), + $storage->getOriginSequence(), + $storage->getOriginName(), $e->getMessage() )); } } - private function save_smallImage(): string - { - $imageLibrary = new ImageLibrary(); - $fullPath = WRITEPATH . $this->getUploadPath() . DIRECTORY_SEPARATOR . $this->getPath(); - $imageLibrary->setDebug($this->getDebug()); - $imageLibrary->setSourcePath($fullPath); - $imageLibrary->setDestinationPath($fullPath); - //작은이미지생성후 Path/파일명 넣기 - $fileInfos = pathinfo($imageLibrary->getDestinationPath() . DIRECTORY_SEPARATOR . $this->getOriginName(), PATHINFO_ALL); - $imageLibrary->setDestinationFile($fileInfos['filename'] . "_small." . $fileInfos['extension']); - return $imageLibrary->create($this->getOriginName()); - } - public function save(): static - { - parent::save(); - $this->save_smallImage(); - return $this; - } } diff --git a/app/Libraries/Mangboard/ImageLibrary.php b/app/Libraries/Mangboard/ImageLibrary.php new file mode 100644 index 0000000..85e2fed --- /dev/null +++ b/app/Libraries/Mangboard/ImageLibrary.php @@ -0,0 +1,68 @@ +getFullPath() . DIRECTORY_SEPARATOR . $storage->getOriginName(), PATHINFO_ALL); + $target_file_name = sprintf("%s_%s.%s", $fileInfo['filename'], $target, $fileInfo['extension']); + + if (!$this->isFileType_FileTrait($fileInfo['extension'])) { + throw new \Exception("{$storage->getOriginName()} Image 형식파일이 아닙니다."); + } + // 이미지 파일 로드 + $this->load_ImageTrait($storage->getFullPath() . DIRECTORY_SEPARATOR . $storage->getOriginName()); + // 200x200으로 이미지 크기 조정 + $this->resize_ImageTrait($width, $height); + // 파일 저장 + $this->save_ImageTrait($storage->getFullPath() . DIRECTORY_SEPARATOR . $target_file_name); + // 메모리 해제 + $this->destroy_ImageTrait(); + log_message("debug", sprintf( + "%s %s->%s(W:%s,H:%s) 작업완료)", + __FUNCTION__, + $storage->getOriginName(), + $target_file_name, + $width, + $height + )); + return $target_file_name; + } + public function createByCrawler(BoardEntity $board_entity, array $storages): void + { + try { + foreach ($storages as $storage) { + $file_name = $this->create($storage); + log_message("notice", sprintf( + "%s -> %s 게시물의 %s번째:%s 작은이미지 생성 완료", + __FUNCTION__, + $board_entity->getTitle(), + $storage->getOriginSequence(), + $file_name + )); + } + } catch (\Exception $e) { + log_message("notice", sprintf( + "\n---%s -> %s 게시물의 %s번째:%s 작은이미지 생성 오류---\n%s\n--------------------------------\n", + __FUNCTION__, + $board_entity->getTitle(), + $storage->getOriginSequence(), + $storage->getOriginName(), + $e->getMessage() + )); + } + } +} diff --git a/app/Libraries/Mangboard/UserLibrary.php b/app/Libraries/Mangboard/UserLibrary.php index 4181adb..60442bf 100644 --- a/app/Libraries/Mangboard/UserLibrary.php +++ b/app/Libraries/Mangboard/UserLibrary.php @@ -2,14 +2,17 @@ namespace App\Libraries\Mangboard; -use App\Libraries\MySocket\WebLibrary as MySocketLibrary; use App\Models\Mangboard\UserModel; use App\Entities\Mangboard\UserEntity; +use App\Libraries\CommonLibrary; -class UserLibrary extends MySocketLibrary +class UserLibrary extends CommonLibrary { private $_user_model = null; - public function __construct() {} + public function __construct() + { + parent::__construct(); + } public function getUserModel(): UserModel { if ($this->_user_model === null) { diff --git a/app/Libraries/MyAuth/GoogleLibrary.php b/app/Libraries/MyAuth/GoogleAuth.php similarity index 94% rename from app/Libraries/MyAuth/GoogleLibrary.php rename to app/Libraries/MyAuth/GoogleAuth.php index 67f38ec..4db5e04 100644 --- a/app/Libraries/MyAuth/GoogleLibrary.php +++ b/app/Libraries/MyAuth/GoogleAuth.php @@ -2,12 +2,12 @@ namespace App\Libraries\MyAuth; -use App\Libraries\MySocket\GoogleLibrary as MySocketLibrary; +use App\Libraries\MySocket\Web\GoogleSocket; use App\Libraries\MyAuthLibrary; use App\Entities\UserEntity; use App\Entities\SNSUserEntity; -class GoogleLibrary extends MyAuthLibrary +class GoogleAuth extends MyAuthLibrary { private $_mySocket = null; private $_site = "GOOGLE"; @@ -16,10 +16,10 @@ class GoogleLibrary extends MyAuthLibrary parent::__construct(); } - public function getMySocket(): MySocketLibrary + public function getMySocket(): GoogleSocket { if ($this->_mySocket === null) { - $this->_mySocket = new MySocketLibrary(getenv('yamap.host.url')); + $this->_mySocket = new GoogleSocket(getenv('yamap.host.url')); } return $this->_mySocket; } diff --git a/app/Libraries/MyAuth/LocalLibrary.php b/app/Libraries/MyAuth/LocalAuth.php similarity index 95% rename from app/Libraries/MyAuth/LocalLibrary.php rename to app/Libraries/MyAuth/LocalAuth.php index 0f33f3c..361b407 100644 --- a/app/Libraries/MyAuth/LocalLibrary.php +++ b/app/Libraries/MyAuth/LocalAuth.php @@ -5,7 +5,7 @@ namespace App\Libraries\MyAuth; use App\Libraries\MyAuthLibrary; use App\Entities\UserEntity; -class LocalLibrary extends MyAuthLibrary +class LocalAuth extends MyAuthLibrary { public function __construct() { diff --git a/app/Libraries/MyCrawler/YamapLibrary.php b/app/Libraries/MyCrawler/YamapCrawler.php similarity index 76% rename from app/Libraries/MyCrawler/YamapLibrary.php rename to app/Libraries/MyCrawler/YamapCrawler.php index 5dc1c1a..fc57ba0 100644 --- a/app/Libraries/MyCrawler/YamapLibrary.php +++ b/app/Libraries/MyCrawler/YamapCrawler.php @@ -4,46 +4,57 @@ namespace App\Libraries\MyCrawler; use App\Libraries\MyCrawlerLibrary; -use App\Libraries\MySocket\WebLibrary as MySocketLibrary; -use App\Libraries\Mangboard\FileLibrary as MyStorageLibrary; +use App\Libraries\MySocket\WebSocket; +use App\Libraries\MyStorage\MangboardStorage; use App\Libraries\Mangboard\BoardsLibrary; use App\Libraries\Mangboard\BoardLibrary; +use App\Libraries\Mangboard\FileLibrary; +use App\Libraries\Mangboard\ImageLibrary; use App\Entities\Mangboard\UserEntity; use Symfony\Component\DomCrawler\Crawler; use App\Traits\FileTrait; -class YamapLibrary extends MyCrawlerLibrary +class YamapCrawler extends MyCrawlerLibrary { use FileTrait; + private $_mySocket = null; + private $_myStorage = null; + private $_storages = []; + private $_category = ""; private $_user_entity = null; private $_boards_library = null; private $_board_library = null; - private $_file_librarys = []; - public function __construct() + private $_file_library = null; + private $_image_library = null; + public function __construct(string $category) { parent::__construct(); + $this->_category = $category; } - final protected function getMySocket(): mixed + public function getMySocket() { if ($this->_mySocket === null) { - $this->_mySocket = new MySocketLibrary(getenv('yamap.host.url')); + $this->_mySocket = new WebSocket(getenv('yamap.host.url')); } return $this->_mySocket; } - final protected function getMyStorage(): mixed + public function getMyStorage() { if ($this->_myStorage === null) { - $this->_myStorage = new MyStorageLibrary(getenv('yamap.storage.upload.path')); - $this->_myStorage->setBoardsEntity($this->getBoardsLibrary()->getEntity()); - $this->_myStorage->setUserEntity($this->getUserEntity()); + $this->_myStorage = new MangboardStorage($this->getCategory()); } return $this->_myStorage; } public function getBoardsLibrary(): BoardsLibrary { + // $test = $this->getBoard(); + // echo "TEST:{$test}\n"; + // $temp = getenv("mangboard.storage.{$this->getBoard()}.name"); + // echo "Temp:{$temp}\n"; + // exit; if ($this->_boards_library === null) { $this->_boards_library = new BoardsLibrary( - getenv('yamap.storage.board.name'), + $this->getCategory(), $this->getUserEntity() ); } @@ -59,6 +70,23 @@ class YamapLibrary extends MyCrawlerLibrary } return $this->_board_library; } + public function getFileLibrary(): FileLibrary + { + if ($this->_file_library === null) { + $this->_file_library = new FileLibrary( + $this->getBoardsLibrary()->getEntity(), + $this->getUserEntity() + ); + } + return $this->_file_library; + } + public function getImageLibrary(): ImageLibrary + { + if ($this->_image_library === null) { + $this->_image_library = new ImageLibrary(); + } + return $this->_image_library; + } public function getUserEntity(): UserEntity { if ($this->_user_entity === null) { @@ -66,18 +94,25 @@ class YamapLibrary extends MyCrawlerLibrary } return $this->_user_entity; } - public function setUserEntity(UserEntity $_user_entity): void + public function setUserEntity(UserEntity $user_entity): void { - $this->_user_entity = $_user_entity; + $this->_user_entity = $user_entity; + } + public function getCategory(): string + { + if ($this->_category == "") { + throw new \Exception("저장할 Category가 정의되지 않았습니다."); + } + return $this->_category; } - private function save(int $file_sequence, string $mediaType, string $file_name, string $content): void { + log_message("debug", __FUNCTION__ . " 원본파일 {$file_name} 작업 시작"); $this->getMyStorage()->setOriginName($file_name); $this->getMyStorage()->setOriginContent($content); $this->getMyStorage()->setOriginType($mediaType); $this->getMyStorage()->setOriginSequence($file_sequence); - $this->_file_librarys[] = $this->getMyStorage()->save(); + $this->_storages[] = $this->getMyStorage()->save(); } //Yamap ViewPage의 이미지나영상데이터가 있으면 Dodownload 한다. private function download(string $mediaType, string $url): array @@ -89,7 +124,7 @@ class YamapLibrary extends MyCrawlerLibrary $file_name = array_pop($file_names); $temps = explode(".", $file_name); $file_ext = array_pop($temps); - if (!$this->isFileType($file_ext, $mediaType)) { + if (!$this->isFileType_FileTrait($file_ext, $mediaType)) { throw new \Exception("파일명 형식이 {$mediaType}가 아닙니다"); } $content = $this->getMySocket()->getContent($url); @@ -99,7 +134,7 @@ class YamapLibrary extends MyCrawlerLibrary private function mediaContent(array $urls): void { $file_sequence = 1; - $this->_file_librarys = []; //CreateBoard에서 사용을 위해 DetailPage마다 초기화 + $this->_storages = []; //CreateBoard에서 사용을 위해 DetailPage마다 초기화 foreach ($urls as $mediaType => $url) { try { list($file_name, $content) = $this->download($mediaType, $url); @@ -115,7 +150,7 @@ class YamapLibrary extends MyCrawlerLibrary )); } } - if (!count($this->_file_librarys)) { + if (!count($this->_storages)) { throw new \Exception("Download된 Content가 없습니다."); } } @@ -182,7 +217,7 @@ class YamapLibrary extends MyCrawlerLibrary 'hit' => 1, ]; } else { - $listInfos = $this->mainPage(getenv("yamap.list.url")); + $listInfos = $this->mainPage(getenv("yamap.list.url." . $this->getCategory())); } //Limit가 0이면 $listInfos 갯수만큼 다하고, LIMIT 갯수 혹은 item의 갯수중 작은수만큼 한다. $max_limit = intval(getenv("yamap.list.max_limit")); @@ -198,7 +233,9 @@ class YamapLibrary extends MyCrawlerLibrary log_message("notice", "게시물 {$i}번째 {$listInfo["nickname"]} 작업시작"); $this->mediaContent($this->detailPage($listInfo)); //File DB 및 Board DB 등록작업 - $this->getBoardLibrary()->create($i, $listInfo, $this->_file_librarys); + $board_entity = $this->getBoardLibrary()->createByCrawler($i, $listInfo, $this->_storages); + $this->getFileLibrary()->createByCrawler($board_entity, $this->_storages); + $this->getImageLibrary()->createByCrawler($board_entity, $this->_storages); log_message("notice", "게시물 {$i}번째 {$listInfo["nickname"]} 작업완료."); $i++; } catch (\Exception $e) { diff --git a/app/Libraries/MyCrawlerLibrary.php b/app/Libraries/MyCrawlerLibrary.php index 4ea8e76..8052ae5 100644 --- a/app/Libraries/MyCrawlerLibrary.php +++ b/app/Libraries/MyCrawlerLibrary.php @@ -7,15 +7,13 @@ use Symfony\Component\DomCrawler\Crawler; abstract class MyCrawlerLibrary extends CommonLibrary { - protected $_mySocket = null; - protected $_myStorage = null; protected function __construct() { parent::__construct(); } + abstract public function getMySocket(); + abstract public function getMyStorage(); abstract public function execute(): void; - abstract protected function getMySocket(): mixed; - abstract protected function getMyStorage(): mixed; final protected function getSelector(string $content, string $tag): Crawler { $crawler = new Crawler($content); diff --git a/app/Libraries/MySocket/Web/CloudflareLibrary.php b/app/Libraries/MySocket/Web/CloudflareSocket.php similarity index 92% rename from app/Libraries/MySocket/Web/CloudflareLibrary.php rename to app/Libraries/MySocket/Web/CloudflareSocket.php index 64521b9..d5357db 100644 --- a/app/Libraries/MySocket/Web/CloudflareLibrary.php +++ b/app/Libraries/MySocket/Web/CloudflareSocket.php @@ -4,9 +4,9 @@ namespace App\Libraries\MySocket\Web; use Cloudflare\API\Auth\APIKey; use Cloudflare\API\Adapter\Guzzle; -use App\Libraries\MySocket\WebLibrary as MySocketLibrary; +use App\Libraries\MySocket\WebSocket; -class CloudflareLibrary extends MySocketLibrary +class CloudflareSocket extends WebSocket { private static int $_request_count = 1; private static int $_request_max = 100; diff --git a/app/Libraries/MySocket/Web/GoogleLibrary.php b/app/Libraries/MySocket/Web/GoogleSocket.php similarity index 94% rename from app/Libraries/MySocket/Web/GoogleLibrary.php rename to app/Libraries/MySocket/Web/GoogleSocket.php index 3acf3f6..b6e8521 100644 --- a/app/Libraries/MySocket/Web/GoogleLibrary.php +++ b/app/Libraries/MySocket/Web/GoogleSocket.php @@ -2,9 +2,9 @@ namespace App\Libraries\MySocket\Web; -use App\Libraries\MySocket\WebLibrary as MySocketLibrary; +use App\Libraries\MySocket\WebSocket; -class GoogleLibrary extends MySocketLibrary +class GoogleSocket extends WebSocket { private $_client = null; private $_session = null; diff --git a/app/Libraries/MySocket/WebLibrary.php b/app/Libraries/MySocket/WebSocket.php similarity index 98% rename from app/Libraries/MySocket/WebLibrary.php rename to app/Libraries/MySocket/WebSocket.php index 800f718..257f30f 100644 --- a/app/Libraries/MySocket/WebLibrary.php +++ b/app/Libraries/MySocket/WebSocket.php @@ -6,7 +6,7 @@ use GuzzleHttp\Cookie\CookieJar; use GuzzleHttp\Client; use App\Libraries\MySocketLibrary; -class WebLibrary extends MySocketLibrary +class WebSocket extends MySocketLibrary { private $_client = null; private $_cookieJar = null; diff --git a/app/Libraries/MyStorage/FileLibrary.php b/app/Libraries/MyStorage/FileStorage.php similarity index 50% rename from app/Libraries/MyStorage/FileLibrary.php rename to app/Libraries/MyStorage/FileStorage.php index f2bd9d7..368dbf1 100644 --- a/app/Libraries/MyStorage/FileLibrary.php +++ b/app/Libraries/MyStorage/FileStorage.php @@ -5,10 +5,9 @@ namespace App\Libraries\MyStorage; use App\Libraries\MyStorageLibrary; use App\Traits\FileTrait; -class FileLibrary extends MyStorageLibrary +class FileStorage extends MyStorageLibrary { use FileTrait; - private $_uploadPath = "uploads"; private $_path = ""; private $_mimeType = ""; private $_fileSize = 0; @@ -19,14 +18,25 @@ class FileLibrary extends MyStorageLibrary parent::__construct(); $this->_path = $path; } - final public function getUploadPath(): string - { - return $this->_uploadPath; - } final public function getPath(): string { return $this->_path; } + public function getUploadPath(): string + { + return "uploads"; + } + final public function getFullPath(): string + { + $full_path = WRITEPATH . $this->getUploadPath() . DIRECTORY_SEPARATOR . $this->getPath(); + $this->mkdir_FileTrait($full_path); + return $full_path; + } + public function getUploadURL(): string + { + return "uploads"; + } + final public function getMimeType(): string { return $this->_mimeType; @@ -42,30 +52,30 @@ class FileLibrary extends MyStorageLibrary public function save(): static { - $fullPath = WRITEPATH . $this->getUploadPath() . DIRECTORY_SEPARATOR . $this->getPath(); - $this->makeDirectory($fullPath); - $saveFilePath = $fullPath . DIRECTORY_SEPARATOR . $this->getOriginName(); + // log_message("notice", __FUNCTION__ . " 원본파일 {$this->getOriginName()} 작업 시작 2"); + $save_file = $this->getFullPath() . DIRECTORY_SEPARATOR . $this->getOriginName(); + log_message("debug", __FUNCTION__ . " {$save_file} 작업 시작"); //중복된 파일명인지 확인후 새로운 이름으로 저장 - if (file_exists($saveFilePath)) { - switch (getenv("mangboard.uloads.file.collision")) { + if (file_exists($save_file)) { + switch (getenv("mangboard.uploads.file.collision")) { case "unique": - $saveFile = $this->getUniqueFilename($fullPath, $this->getOriginName()); - $saveFilePath = $fullPath . DIRECTORY_SEPARATOR . $saveFile; - log_message("notice", __FUNCTION__ . "파일명 변경 : 원본파일 {$this->getOriginName()}->저장파일 {$saveFile}"); - $this->setOriginName($saveFile); + $file_name = $this->getUniqueName_FileTrait($this->getFullPath(), $this->getOriginName()); + log_message("notice", __FUNCTION__ . "파일명 변경 : 원본파일 {$this->getOriginName()}->저장파일 {$file_name}"); + $this->setOriginName($file_name); + $save_file = $this->getFullPath() . DIRECTORY_SEPARATOR . $this->getOriginName(); break; case "notallow": default: - throw new \Exception(__FUNCTION__ . "{$saveFilePath}는 이미 존재하는 파일입니다."); + throw new \Exception(__FUNCTION__ . "{$this->getOriginName()}는 이미 존재하는 파일입니다."); // break; } } //원본이미지 저장 - if (!file_put_contents($saveFilePath, $this->getOriginContent())) { - throw new \Exception(__FUNCTION__ . " 파일저장 실패:{$saveFilePath}"); + if (!file_put_contents($save_file, $this->getOriginContent())) { + throw new \Exception(__FUNCTION__ . " 파일저장 실패:{$save_file}"); } - $this->_mimeType = mime_content_type($saveFilePath); - $this->_fileSize = filesize($saveFilePath); + $this->_mimeType = mime_content_type($save_file); + $this->_fileSize = filesize($save_file); log_message("notice", __FUNCTION__ . " 원본파일 {$this->getOriginName()} 작업 완료"); return $this; } diff --git a/app/Libraries/MyStorage/MangboardStorage.php b/app/Libraries/MyStorage/MangboardStorage.php new file mode 100644 index 0000000..6d29a3a --- /dev/null +++ b/app/Libraries/MyStorage/MangboardStorage.php @@ -0,0 +1,67 @@ +getBasePath(); + } + public function getUploadURL(): string + { + return sprintf("/wp-content/%s/%s", parent::getUploadURL(), $this->getBasePath()); + } + public function getModel(): FileModel + { + if ($this->_model === null) { + return $this->_model = new FileModel(); + } + return $this->_model; + } + final public function getHTMLTag(string $content = ""): string + { + //Board 게시판 image_path , content용 데이터 배열에 추가 후 modifyBoard에서 처리 + switch ($this->getOrintginType()) { + case "image": + $content = sprintf( + "\"%s\"", + $this->getUploadURL(), + $this->getPath(), + $this->getOriginName(), + $this->getOriginName() + ); + break; + case "video": + $content = sprintf( + "", + $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; + } +} diff --git a/app/Libraries/MyUtil/ImageLibrary.php b/app/Libraries/MyUtil/ImageLibrary.php deleted file mode 100644 index 6d70005..0000000 --- a/app/Libraries/MyUtil/ImageLibrary.php +++ /dev/null @@ -1,125 +0,0 @@ -_srcPath; - } - final public function setSourcePath(string $srcPath): void - { - $this->_srcPath = $srcPath; - } - final public function getDestinationPath(): string - { - return $this->_dstPath; - } - final public function setDestinationPath(string $dstPath): void - { - $this->_dstPath = $dstPath; - } - final public function getDestinationFile(): string - { - return $this->_dstFile; - } - final public function setDestinationFile(string $dstFile): void - { - $this->_dstFile = $dstFile; - } - - final public function getWidth() - { - return imagesx($this->_image); - } - // 이미지의 현재 높이를 반환하는 메소드 - final public function getHeight() - { - return imagesy($this->_image); - } - // 이미지 파일을 로드하는 메소드 - final protected function load($file) - { - $imageInfo = getimagesize($file); - $this->_imageType = $imageInfo[2]; - switch ($this->_imageType) { - case IMAGETYPE_JPEG: - $this->_image = imagecreatefromjpeg($file); - break; - case IMAGETYPE_GIF: - $this->_image = imagecreatefromgif($file); - break; - case IMAGETYPE_PNG: - $this->_image = imagecreatefrompng($file); - break; - case IMAGETYPE_WEBP: - $this->_image = imagecreatefromwebp($file); - break; - } - } - // 이미지 크기를 지정된 너비, 높이로 변경하는 메소드 - final protected function resize($width, $height) - { - $newImage = imagecreatetruecolor($width, $height); - imagecopyresampled($newImage, $this->_image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); - $this->_image = $newImage; - } - // 이미지 비율을 유지하면서 크기를 조정하는 메소드 - final protected function resizeToWidth($width) - { - $ratio = $width / $this->getWidth(); - $height = $this->getHeight() * $ratio; - $this->resize($width, $height); - } - final protected function resizeToHeight($height) - { - $ratio = $height / $this->getHeight(); - $width = $this->getWidth() * $ratio; - $this->resize($width, $height); - } - final protected function scale($scale) - { - $width = $this->getWidth() * ($scale / 100); - $height = $this->getHeight() * ($scale / 100); - $this->resize($width, $height); - } - // 이미지를 저장하는 메소드 - final protected function save($file, $imageType = IMAGETYPE_WEBP, $compression = 75) - { - switch ($imageType) { - case IMAGETYPE_JPEG: - imagejpeg($this->_image, $file, $compression); - break; - case IMAGETYPE_GIF: - imagegif($this->_image, $file); - break; - case IMAGETYPE_PNG: - imagepng($this->_image, $file); - break; - case IMAGETYPE_WEBP: - default: - imagewebp($this->_image, $file, $compression); - break; - } - } - // 메모리 해제를 위한 메소드 - final protected function destroy() - { - imagedestroy($this->_image); - } -} diff --git a/app/Traits/AuthTrait.php b/app/Traits/AuthTrait.php index 0906d0a..cd8bbfa 100644 --- a/app/Traits/AuthTrait.php +++ b/app/Traits/AuthTrait.php @@ -4,7 +4,7 @@ namespace App\Traits; trait AuthTrait { - final public function login_check(): array + final protected function loginCheck_AuthTrait(): array { //사용자 기본 Role 지정 $session[SESSION_NAMES['ISLOGIN']] = false; diff --git a/app/Traits/FileTrait.php b/app/Traits/FileTrait.php index d575ff1..05cdbf5 100644 --- a/app/Traits/FileTrait.php +++ b/app/Traits/FileTrait.php @@ -4,16 +4,16 @@ namespace App\Traits; trait FileTrait { - final public function makeDirectory(string $path) + final protected function mkdir_FileTrait(string $path) { if (!is_dir($path)) { - if (!mkdir($path)) { + if (!mkdir($path, 0644, true)) { throw new \Exception("디렉토리 생성 실패:{$path}"); } } } - final public function isFileType(string $file_ext, $type = "image"): bool + final protected function isFileType_FileTrait(string $file_ext, $type = "image"): bool { switch ($type) { case "audio": @@ -31,21 +31,21 @@ trait FileTrait } //디렉토리에 속한 파일 List - final public function getFilesByExtentionType(string $path, string $type = "image"): array + final protected function getFiles_FileTrait(string $path, string $type = "image"): array { // 디렉토리에서 파일 목록 가져오기 $files = []; foreach (scandir($path) as $file_name) { // 확장자가 이미지 형식인지 확인 $file_ext = pathinfo($path . DIRECTORY_SEPARATOR . $file_name, PATHINFO_EXTENSION); - if ($this->isFileType($file_ext, $type)) { + if ($this->isFileType_FileTrait($file_ext, $type)) { $files[] = $file_name; } } return $files; } - final public function getUniqueFilename($path, $file_name) + final protected function getUniqueName_FileTrait($path, $file_name) { $fileExtension = pathinfo($file_name, PATHINFO_EXTENSION); $fileBaseName = pathinfo($file_name, PATHINFO_FILENAME); diff --git a/app/Traits/ImageTrait.php b/app/Traits/ImageTrait.php new file mode 100644 index 0000000..9ab1853 --- /dev/null +++ b/app/Traits/ImageTrait.php @@ -0,0 +1,100 @@ +_image); + } + // 이미지의 현재 높이를 반환하는 메소드 + final protected function getHeight_ImageTrait() + { + return imagesy($this->_image); + } + // 이미지 파일을 로드하는 메소드 + final protected function load_ImageTrait($file) + { + $imageInfo = getimagesize($file); + $this->_imageType = $imageInfo[2]; + switch ($this->_imageType) { + case IMAGETYPE_JPEG: + $this->_image = imagecreatefromjpeg($file); + break; + case IMAGETYPE_GIF: + $this->_image = imagecreatefromgif($file); + break; + case IMAGETYPE_PNG: + $this->_image = imagecreatefrompng($file); + break; + case IMAGETYPE_WEBP: + $this->_image = imagecreatefromwebp($file); + break; + } + } + // 이미지 크기를 지정된 너비, 높이로 변경하는 메소드 + final protected function resize_ImageTrait($width, $height) + { + $newImage = imagecreatetruecolor($width, $height); + imagecopyresampled( + $newImage, + $this->_image, + 0, + 0, + 0, + 0, + $width, + $height, + $this->getWidth_ImageTrait(), + $this->getHeight_ImageTrait() + ); + $this->_image = $newImage; + } + // 이미지 비율을 유지하면서 크기를 조정하는 메소드 + final protected function resizeToWidth_ImageTrait($width) + { + $ratio = $width / $this->getWidth_ImageTrait(); + $height = $this->getHeight_ImageTrait() * $ratio; + $this->resize_ImageTrait($width, $height); + } + final protected function resizeToHeight_ImageTrait($height) + { + $ratio = $height / $this->getHeight_ImageTrait(); + $width = $this->getWidth_ImageTrait() * $ratio; + $this->resize_ImageTrait($width, $height); + } + final protected function scale($scale) + { + $width = $this->getWidth_ImageTrait() * ($scale / 100); + $height = $this->getHeight_ImageTrait() * ($scale / 100); + $this->resize_ImageTrait($width, $height); + } + // 이미지를 저장하는 메소드 + final protected function save_ImageTrait($file, $imageType = IMAGETYPE_WEBP, $compression = 75) + { + switch ($imageType) { + case IMAGETYPE_JPEG: + imagejpeg($this->_image, $file, $compression); + break; + case IMAGETYPE_GIF: + imagegif($this->_image, $file); + break; + case IMAGETYPE_PNG: + imagepng($this->_image, $file); + break; + case IMAGETYPE_WEBP: + default: + imagewebp($this->_image, $file, $compression); + break; + } + } + // 메모리 해제를 위한 메소드 + final protected function destroy_ImageTrait() + { + imagedestroy($this->_image); + } +}