diff --git a/app/Controllers/AbstractCRUDController.php b/app/Controllers/AbstractCRUDController.php
index 9b5062f..d9ac0ec 100644
--- a/app/Controllers/AbstractCRUDController.php
+++ b/app/Controllers/AbstractCRUDController.php
@@ -38,7 +38,7 @@ abstract class AbstractCRUDController extends AbstractWebController
$this->action_init_process($action, $formDatas);
$this->addViewDatas('formDatas', $formDatas);
return $this->create_form_result_process($action);
- } catch (\Exception $e) {
+ } catch (\Throwable $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성폼 오류:" . $e->getMessage());
}
}
@@ -68,9 +68,7 @@ abstract class AbstractCRUDController extends AbstractWebController
throw new RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 {$entityClass}만 가능");
}
return $this->create_result_process($entity);
- } catch (ValidationException $e) {
- return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성 검증오류:" . $e->getMessage());
- } catch (\Exception $e) {
+ } catch (\Throwable $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 생성 오류:" . $e->getMessage());
}
}
@@ -104,10 +102,10 @@ abstract class AbstractCRUDController extends AbstractWebController
}
$this->addViewDatas('entity', $entity);
$action = __FUNCTION__;
- $this->action_init_process($action);
+ $this->action_init_process($action, $entity->toArray());
return $this->modify_form_result_process($action);
- } catch (\Exception $e) {
- return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정폼 오류:" . $e->getMessage());
+ } catch (\Throwable $e) {
+ return $this->action_redirect_process('error', "{$this->getTitle()}에서 수정폼 오류:" . $e->getMessage());
}
}
@@ -137,10 +135,8 @@ abstract class AbstractCRUDController extends AbstractWebController
}
$this->addViewDatas('entity', $entity);
return $this->modify_result_process($entity);
- } catch (ValidationException $e) {
- return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정 검증오류:" . $e->getMessage());
- } catch (\Exception $e) {
- return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정 오류:" . $e->getMessage());
+ } catch (\Throwable $e) {
+ return $this->action_redirect_process('error', "{$this->getTitle()}에서 수정 오류:" . $e->getMessage());
}
}
@@ -153,7 +149,7 @@ abstract class AbstractCRUDController extends AbstractWebController
protected function delete_result_process(CommonEntity $entity): string|RedirectResponse
{
- return $this->action_redirect_process('info', "{$this->getTitle()}에서 {$entity->getTitle()} 삭제가 완료되었습니다.");
+ return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$entity->getTitle()} 삭제가 완료되었습니다.");
}
final public function delete($uid): RedirectResponse
{
@@ -165,8 +161,8 @@ abstract class AbstractCRUDController extends AbstractWebController
throw new RuntimeException(__METHOD__ . "에서 오류발생:Return Type은 {$entityClass}만 가능");
}
return $this->delete_result_process($entity);
- } catch (\Exception $e) {
- return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 삭제 오류:" . $e->getMessage());
+ } catch (\Throwable $e) {
+ return $this->action_redirect_process('error', "{$this->getTitle()}에서 삭제 오류:" . $e->getMessage());
}
}
@@ -202,8 +198,8 @@ abstract class AbstractCRUDController extends AbstractWebController
}
$this->addViewDatas('entity', $entity);
return $this->view_result_process($action);
- } catch (\Exception $e) {
- return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 상세보기 오류:" . $e->getMessage());
+ } catch (\Throwable $e) {
+ return $this->action_redirect_process('error', "{$this->getTitle()}에서 상세보기 오류:" . $e->getMessage());
}
}
}
diff --git a/app/Controllers/AbstractWebController.php b/app/Controllers/AbstractWebController.php
index 52cef09..9aa9d3c 100644
--- a/app/Controllers/AbstractWebController.php
+++ b/app/Controllers/AbstractWebController.php
@@ -94,10 +94,12 @@ abstract class AbstractWebController extends Controller
case 'critical':
case 'alert':
case 'emergency':
+ log_message($type, $message);
+ $result = redirect()->back()->withInput()->with('message', $message);
+ break;
case 'debug':
case 'info':
case 'notice':
- log_message($type, $message);
default:
$redirect_url = $redirect_url ?? $this->getAuthContext()->popPreviousUrl() ?? implode(DIRECTORY_SEPARATOR, $this->getActionPaths());
$result = redirect()->to($redirect_url)->with('message', $message);
diff --git a/app/Controllers/Admin/Customer/ClientController.php b/app/Controllers/Admin/Customer/ClientController.php
index b9bcf33..1abf754 100644
--- a/app/Controllers/Admin/Customer/ClientController.php
+++ b/app/Controllers/Admin/Customer/ClientController.php
@@ -50,7 +50,7 @@ class ClientController extends CustomerController
$this->addViewDatas('entity', $entity);
helper(['form']);
return $this->action_render_process($action, $this->getViewDatas(), $this->request->getVar('ActionTemplate') ?? 'client');
- } catch (\Exception $e) {
+ } catch (\Throwable $e) {
return $e->getMessage();
// return $this->action_redirect_process('error', "{$this->getTitle()}에서 {$uid} 수정폼 오류:" . $e->getMessage());
}
@@ -60,11 +60,13 @@ class ClientController extends CustomerController
{
try {
$action = __FUNCTION__;
- $this->action_init_process($action);
- $this->addViewDatas('entity', $this->service->modify($uid, $this->request->getPost()));
+ $fields = ['history'];
+ $this->service->getFormService()->setFormFields($fields);
+ $this->service->getFormService()->setFormRules($action, $fields);
+ $this->addViewDatas('entity', $this->service->modify($uid, $this->service->createDTO($this->request->getPost())));
return $this->action_redirect_process('error', "{$this->getTitle()}에서 비고설정이 완료되었습니다.");
- } catch (\Exception $e) {
- return $e->getMessage();
+ } catch (\Throwable $e) {
+ return $this->action_redirect_process('error', "{$this->getTitle()}에서 비고 오류:" . $e->getMessage());
}
}
}
diff --git a/app/Controllers/Admin/Customer/ServiceController.php b/app/Controllers/Admin/Customer/ServiceController.php
index 9637694..774a6e4 100644
--- a/app/Controllers/Admin/Customer/ServiceController.php
+++ b/app/Controllers/Admin/Customer/ServiceController.php
@@ -3,6 +3,7 @@
namespace App\Controllers\Admin\Customer;
use App\Entities\Customer\ServiceEntity;
+use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
@@ -35,4 +36,24 @@ class ServiceController extends CustomerController
$formDatas['status'] = STATUS['AVAILABLE'];
return $formDatas;
}
+ protected function index_process(string $action): void
+ {
+ //서비스별 미납 Count
+ $this->addViewDatas('unPaids', service('paymentservice')->getUnPaids('serviceinfo_uid'));
+ parent::index_process($action);
+ }
+
+ public function history(int $uid): RedirectResponse|string
+ {
+ try {
+ $action = __FUNCTION__;
+ $fields = ['history'];
+ $this->service->getFormService()->setFormFields($fields);
+ $this->service->getFormService()->setFormRules($action, $fields);
+ $this->addViewDatas('entity', $this->service->modify($uid, $this->service->createDTO($this->request->getPost())));
+ return $this->action_redirect_process('error', "{$this->getTitle()}에서 비고설정이 완료되었습니다.");
+ } catch (\Throwable $e) {
+ return $this->action_redirect_process('error', "{$this->getTitle()}에서 비고 오류:" . $e->getMessage());
+ }
+ }
}
diff --git a/app/Controllers/Admin/Equipment/ServerController.php b/app/Controllers/Admin/Equipment/ServerController.php
index 1327838..3cc43ad 100644
--- a/app/Controllers/Admin/Equipment/ServerController.php
+++ b/app/Controllers/Admin/Equipment/ServerController.php
@@ -3,6 +3,7 @@
namespace App\Controllers\Admin\Equipment;
use App\Entities\Equipment\ServerEntity;
+use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
@@ -29,4 +30,9 @@ class ServerController extends EquipmentController
$formDatas['code'] = sprintf("%d%dXX-M%d", date("y"), ceil((int)date("m") / 3), $this->service->getNextPK());
return $formDatas;
}
+
+ protected function modify_form_result_process(string $action): string|RedirectResponse
+ {
+ return $this->action_render_process($action, $this->getViewDatas(), $this->request->getVar('ActionTemplate') ?? 'server');
+ }
}
diff --git a/app/Controllers/Admin/Equipment/ServerPartController.php b/app/Controllers/Admin/Equipment/ServerPartController.php
index 7c8304a..dcd6cd3 100644
--- a/app/Controllers/Admin/Equipment/ServerPartController.php
+++ b/app/Controllers/Admin/Equipment/ServerPartController.php
@@ -29,12 +29,16 @@ class ServerPartController extends EquipmentController
$formDatas = parent::create_form_process($formDatas);
$formDatas['serverinfo_uid'] = $this->request->getVar('serverinfo_uid') ?? throw new \Exception("ServerPart는 반드시 서버정보가 필요합니다.");
$formDatas['type'] = $this->request->getVar('type') ?? throw new \Exception("ServerPart는 반드시 파트형식 필요합니다.");
+ $formDatas['cnt'] = 1;
//type : CS,IP이면 월비용 기본처리
switch ($formDatas['type']) {
case 'CS':
case 'IP':
$formDatas['billing'] = PAYMENT['BILLING']['MONTH'];
break;
+ default:
+ $formDatas['billing'] = PAYMENT['BILLING']['ONETIME'];
+ break;
}
return $formDatas;
}
diff --git a/app/Controllers/Auth/AuthController.php b/app/Controllers/Auth/AuthController.php
index b2a8e62..e9ff15b 100644
--- a/app/Controllers/Auth/AuthController.php
+++ b/app/Controllers/Auth/AuthController.php
@@ -7,7 +7,6 @@ use App\Entities\UserEntity;
use CodeIgniter\HTTP\RedirectResponse;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
-use CodeIgniter\Validation\Exceptions\ValidationException;
use Psr\Log\LoggerInterface;
abstract class AuthController extends AbstractWebController
@@ -21,7 +20,7 @@ abstract class AuthController extends AbstractWebController
{
return 'auth';
}
- protected function action_init_process(string $action): void
+ protected function action_init_process(string $action, array $formDatas = []): void
{
$this->service->action_init_process($action);
parent::action_init_process($action);
@@ -39,7 +38,7 @@ abstract class AuthController extends AbstractWebController
try {
//초기화
$this->action_init_process($action);
- } catch (\Exception $e) {
+ } catch (\Throwable $e) {
log_message('error', $e->getMessage());
session()->setFlashdata('message', $e->getMessage());
}
@@ -62,7 +61,7 @@ abstract class AuthController extends AbstractWebController
// 홈페이지로 리다이렉트
$redirect_url = $this->getAuthContext()->popPreviousUrl() ?? "/";
return redirect()->route($redirect_url)->with('message', MESSAGES['LOGOUT']);
- } catch (\Exception $e) {
+ } catch (\Throwable $e) {
log_message("error", $e->getMessage());
return redirect()->back()->withInput()->with('message', "로그아웃 중 오류가 발생했습니다.");
}
diff --git a/app/Controllers/CLI/Collector.php b/app/Controllers/CLI/Collector.php
index 5120fde..0f0cd60 100644
--- a/app/Controllers/CLI/Collector.php
+++ b/app/Controllers/CLI/Collector.php
@@ -41,17 +41,14 @@ class Collector extends BaseController
$success++;
$message = "{$trafficEntity->getServerIP()} 트래픽 수집데이터 저장 완료 In: {$entity->getIn()} Kb/s / Out: {$entity->getOut()} Kb/s";
log_message('info', $message);
- } catch (ValidationException $e) {
- $error++;
- log_message('error', "{$trafficEntity->getServerIP()} 트래픽 수집데이터 검증오류:{$e->getMessage()}");
- } catch (\Exception $e) {
+ } catch (\Throwable $e) {
$error++;
log_message('error', "{$trafficEntity->getServerIP()} 트래픽 수집데이터 저장 실패:{$e->getMessage()}");
}
$total++;
}
log_message('info', sprintf("성공:%s , 실패:%s , 총:%s 트래픽 수집 작업완료", $success, $error, $total));
- } catch (\Exception $e) {
+ } catch (\Throwable $e) {
log_message('error', "트래픽 수집 작업오류:{$e->getMessage()}");
}
}
diff --git a/app/Controllers/CommonController.php b/app/Controllers/CommonController.php
index f34b403..96f961f 100644
--- a/app/Controllers/CommonController.php
+++ b/app/Controllers/CommonController.php
@@ -73,17 +73,14 @@ abstract class CommonController extends AbstractCRUDController
foreach ($uids as $uid) {
try {
$entities[] = $this->batchjob_process($uid, $formDatas);
- } catch (ValidationException $e) {
- log_message('error', "{$this->getTitle()}에서 {$uid} 수정 검증오류:" . $e->getMessage());
- $errors[] = $e->getMessage();
- } catch (\Exception $e) {
+ } catch (\Throwable $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 수정 오류:" . $e->getMessage());
$errors[] = $e->getMessage();
}
}
return $this->batchjob_result_process($uids, $entities, $errors);
- } catch (\Exception $e) {
- return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄작업처리 오류:" . $e->getMessage());
+ } catch (\Throwable $e) {
+ return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄수정 오류:" . $e->getMessage());
}
}
// --- 일괄 삭제 (Batch Job Delete) ---
@@ -127,13 +124,13 @@ abstract class CommonController extends AbstractCRUDController
foreach ($uids as $uid) {
try {
$entities[] = $this->batchjob_delete_process($uid);
- } catch (\Exception $e) {
+ } catch (\Throwable $e) {
log_message('error', "{$this->getTitle()}에서 {$uid} 삭제 오류:" . $e->getMessage());
$errors[] = $e->getMessage();
}
}
return $this->batchjob_delete_result_process($uids, $entities, $errors);
- } catch (\Exception $e) {
+ } catch (\Throwable $e) {
return $this->action_redirect_process('error', "{$this->getTitle()}에서 일괄삭제 오류:" . $e->getMessage());
}
}
@@ -230,7 +227,6 @@ abstract class CommonController extends AbstractCRUDController
// 현재 URL을 이전 URL 스택에 저장
$this->getAuthContext()->pushCurrentUrl($this->request->getUri()->getPath() . ($this->request->getUri()->getQuery() ? "?" . $this->request->getUri()->getQuery() : ""));
$this->addViewDatas('uri', $this->request->getUri());
-
// Paging 설정
$page = (int) $this->request->getVar('page') ?: 1;
$perpage = (int) $this->request->getVar('perpage') ?: intval(DEFAULTS['INDEX_PERPAGE'] ?? 10);
@@ -240,7 +236,6 @@ abstract class CommonController extends AbstractCRUDController
$this->index_condition_process($action);
$index_totalcount = $this->service->getTotalCount();
$this->addViewDatas('index_totalcount', $index_totalcount);
-
// Pagination 설정
$this->addViewDatas('index_pagination', $this->pagenation_process($index_totalcount, $page, $perpage));
$this->addViewDatas('index_pagination_options', $this->pagenation_options_process($index_totalcount, $perpage));
@@ -248,7 +243,6 @@ abstract class CommonController extends AbstractCRUDController
$this->index_condition_process($action); // 조건절을 다시 호출하여 필터/검색어 유지
$this->service->setLimit($perpage);
$this->service->setOffset(($page - 1) * $perpage);
-
// Entities 처리
$this->addViewDatas('entities', $this->index_entities_process());
helper(['form']);
@@ -263,9 +257,7 @@ abstract class CommonController extends AbstractCRUDController
return $this->index_result_process($action);
}
-
// --- 문서 다운로드 (Download) ---
-
protected function downloadByDocumentType(string $document_type, mixed $loaded_data): array
{
$full_path = WRITEPATH . DIRECTORY_SEPARATOR . "download";
@@ -329,8 +321,8 @@ abstract class CommonController extends AbstractCRUDController
$action = __FUNCTION__;
$this->action_init_process($action);
return $this->download_process($action, $output_type, $uid);
- } catch (\Exception $e) {
- return $this->action_redirect_process('error', "{$this->getTitle()}에서 오류:" . $e->getMessage());
+ } catch (\Throwable $e) {
+ return $this->action_redirect_process('error', "{$this->getTitle()}에서 Download 오류:" . $e->getMessage());
}
}
}
diff --git a/app/Forms/Equipment/ServerForm.php b/app/Forms/Equipment/ServerForm.php
index a3c7d60..c935659 100644
--- a/app/Forms/Equipment/ServerForm.php
+++ b/app/Forms/Equipment/ServerForm.php
@@ -11,6 +11,10 @@ class ServerForm extends EquipmentForm
public function getFormRule(string $action, string $field): string
{
switch ($field) {
+ case "switchinfo_uid":
+ $rule = "permit_empty|numeric";
+ $rule .= in_array($action, ["create", "create_form"]) ? "|is_unique[{$this->getAttribute('table')}.{$field}]" : "";
+ break;
case "code":
case "title":
$rule = "required|trim|string";
@@ -22,13 +26,6 @@ class ServerForm extends EquipmentForm
case "status":
$rule = "required|trim|string";
break;
- case "manufactur_at":
- $rule = "required|valid_date";
- break;
- case "switch":
- $rule = "permit_empty|trim|string";
- $rule .= in_array($action, ["create", "create_form"]) ? "|is_unique[{$this->getAttribute('table')}.{$field}]" : "";
- break;
case "ip":
$rule = "permit_empty|trim|valid_ip[both]"; //ipv4 , ipv6 , both(ipv4,ipv6)
$rule .= in_array($action, ["create", "create_form"]) ? "|is_unique[{$this->getAttribute('table')}.{$field}]" : "";
@@ -36,6 +33,9 @@ class ServerForm extends EquipmentForm
case "os":
$rule = "permit_empty|trim|string";
break;
+ case "manufactur_at":
+ $rule = "required|valid_date";
+ break;
case "format_at":
$rule = "permit_empty|valid_date";
break;
@@ -89,6 +89,11 @@ class ServerForm extends EquipmentForm
$tempOptions[$tempEntity->getTitle()] = $tempEntity->getTitle();
// $options['attributes'][$tempEntity->getPK()] = ['data-role' => implode(DEFAULTS['DELIMITER_ROLE'], $tempEntity->getRole())];
}
+ if (array_key_exists($field, $formDatas) && $formDatas[$field]) {
+ if (!array_key_exists($formDatas[$field], $tempOptions)) {
+ $tempOptions[$formDatas[$field]] = $formDatas[$field];
+ }
+ }
$options['options'] = $tempOptions;
break;
default:
diff --git a/app/Helpers/Customer/ServiceHelper.php b/app/Helpers/Customer/ServiceHelper.php
index 6544d9e..31c857c 100644
--- a/app/Helpers/Customer/ServiceHelper.php
+++ b/app/Helpers/Customer/ServiceHelper.php
@@ -41,8 +41,6 @@ class ServiceHelper extends CustomerHelper
'serviceEntity' => $viewDatas['entity'],
'template' => 'servicelist',
]);
- // $value = $viewDatas['formOptions'][$field]['options'][$value];
- // $value = "📋{$value}";
break;
case 'amount':
case 'sale':
diff --git a/app/Helpers/Equipment/ServerHelper.php b/app/Helpers/Equipment/ServerHelper.php
index 5bc0242..59e4e0b 100644
--- a/app/Helpers/Equipment/ServerHelper.php
+++ b/app/Helpers/Equipment/ServerHelper.php
@@ -51,7 +51,7 @@ class ServerHelper extends EquipmentHelper
case 'part':
$value = view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
'serverinfo_uid' => $viewDatas['entity']->getPK(),
- 'types' => SERVERPART['SERVER_PARTTYPES'],
+ 'types' => SERVERPART['ALL_PARTTYPES'],
'template' => 'serverlist',
]);
break;
diff --git a/app/Views/admin/server/modify_form.php b/app/Views/admin/server/modify_form.php
new file mode 100644
index 0000000..2e3f08a
--- /dev/null
+++ b/app/Views/admin/server/modify_form.php
@@ -0,0 +1,37 @@
+= $this->extend($viewDatas['layout']['layout']) ?>
+= $this->section('content') ?>
+= session('message') ? $viewDatas['helper']->alertTrait(session('message')) : ""; ?>
+
+
= $this->include("{$viewDatas['layout']['template']}/form_content_top"); ?>
+ = form_open(current_url(), $viewDatas['forms']['attributes'], $viewDatas['forms']['hiddens']) ?>
+
+
+ | 서버정보[= $viewDatas['entity']->getCode() ?>] |
+ 추가정보 |
+
+
+
+ $label): ?>
+
+ | = $viewDatas['helper']->getFieldLabel($field, $label, $viewDatas) ?> |
+
+ = $viewDatas['helper']->getFieldForm($field, old($field) ?? ($viewDatas['entity']->$field ?? null), $viewDatas) ?>
+ = validation_show_error($field); ?>
+ |
+
+
+
+ = form_submit('', '수정', array("class" => "btn btn-outline btn-primary")); ?>
+ = form_close(); ?>
+ |
+
+ = view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
+ 'serverinfo_uid' => $viewDatas['entity']->getPK(),
+ 'types' => SERVERPART['ALL_PARTTYPES']
+ ]) ?>
+ |
+
+
+
= $this->include("{$viewDatas['layout']['template']}/form_content_bottom"); ?>
+
+= $this->endSection() ?>
\ No newline at end of file
diff --git a/app/Views/cells/server/servicelist.php b/app/Views/cells/server/servicelist.php
index d10dccf..ed49f17 100644
--- a/app/Views/cells/server/servicelist.php
+++ b/app/Views/cells/server/servicelist.php
@@ -1,13 +1,20 @@
-
- getCustomTitle(),
- $serverCellDatas['helper']->getFieldView('switchinfo_uid', $entity->getSwitchInfoUID(), $serverCellDatas),
- $entity->getIP(),
- $entity->getOS()
- ) ?>
- 📋{$value}" ?>
+ getCustomTitle();;
+ $serverinfos = [];
+ $serverinfos[] = $serverCellDatas['helper']->getFieldView('switchinfo_uid', $entity->getSwitchInfoUID(), $serverCellDatas);
+ $serverinfos[] = $serverCellDatas['helper']->getFieldView('ip', $entity->getIP(), $serverCellDatas);
+ $serverinfos[] = $serverCellDatas['helper']->getFieldView('os', $entity->getOS(), $serverCellDatas);
+ $serverinfos[] = view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
+ 'serverinfo_uid' => $entity->getPK(),
+ 'types' => SERVERPART['SERVICE_PARTTYPES'],
+ 'template' => 'servicelist',
+ ]);
+ $text = $title . " / " . implode(" / ", $serverinfos);
+ $html = $serverCellDatas['serverPartHelper']->getFieldView('SERVER', "", ['serverEntity' => $entity]) . " / " . implode(" / ", $serverinfos);
+ ?>
+ 📋{$html}" ?>
= implode("
", $temps) ?>
\ No newline at end of file
diff --git a/app/Views/cells/serverpart/serverlist.php b/app/Views/cells/serverpart/serverlist.php
index 470f1e7..ccf01e7 100644
--- a/app/Views/cells/serverpart/serverlist.php
+++ b/app/Views/cells/serverpart/serverlist.php
@@ -10,10 +10,9 @@
-
- $datas): ?>
-
-📋
$datas): ?>
-= implode("/", $view_htmls) ?>
\ No newline at end of file
+
+ $datas): ?>
+
+📋= implode(" / ", $view_htmls) ?>
\ No newline at end of file
diff --git a/app/Views/cells/serverpart/servicelist.php b/app/Views/cells/serverpart/servicelist.php
new file mode 100644
index 0000000..838b24f
--- /dev/null
+++ b/app/Views/cells/serverpart/servicelist.php
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ getFieldView($type, $entity->getPK(), $serverPartCellDatas, ['return' => 'onlyText']) ?>
+
+
+
+
+ $datas): ?>
+= implode(" / ", $view_texts) ?>
\ No newline at end of file
diff --git a/app/Views/templates/admin/form_content_bottom.php b/app/Views/templates/admin/form_content_bottom.php
index e69de29..d2ddc67 100644
--- a/app/Views/templates/admin/form_content_bottom.php
+++ b/app/Views/templates/admin/form_content_bottom.php
@@ -0,0 +1 @@
+ = $this->include("templates/common/" . (isset($viewDatas['modal_type']) ? $viewDatas['modal_type'] : 'modal_iframe')); ?>
\ No newline at end of file