dbmsv2 init...1
This commit is contained in:
parent
08f19e95ae
commit
5369def63f
@ -30,21 +30,22 @@ class ServerPartCell extends EquipmentCell
|
||||
$this->getService()->setFormFilters();
|
||||
$this->getService()->setFormRules();
|
||||
$this->getService()->setFormOptions();
|
||||
$entities = [];
|
||||
$serverEntity = null;
|
||||
if (array_key_exists('serverinfo_uid', $params)) {
|
||||
if (!array_key_exists('serverinfo_uid', $params)) {
|
||||
return "서버정보를 정의하셔야합니다.";
|
||||
}
|
||||
if (!array_key_exists('types', $params)) {
|
||||
return "부품정보 형태(Types) 리스트를 정의하셔야합니다.";
|
||||
}
|
||||
//서버정보
|
||||
$serverEntity = $this->getServerService()->getEntity($params['serverinfo_uid']);
|
||||
if ($serverEntity instanceof ServerEntity) {
|
||||
//서버파트정보
|
||||
$serverPartEntities = $this->getService()->getEntities(['serverinfo_uid' => $serverEntity->getPK(),]);
|
||||
foreach ($serverPartEntities as $entity) {
|
||||
if (!array_key_exists($entity->getType(), $entities)) {
|
||||
$entities[$entity->getType()] = [];
|
||||
}
|
||||
$entities[$entity->getType()][] = $entity;
|
||||
}
|
||||
if (!$serverEntity instanceof ServerEntity) {
|
||||
return "[{$params['serverinfo_uid']}]의 서버정보를 확인할수없습니다..";
|
||||
}
|
||||
//PartType별 Entities
|
||||
$entities = [];
|
||||
foreach ($params['types'] as $type) {
|
||||
$entities[$type] = [];
|
||||
$entities[$type][] = $this->getService()->getEntities(['serverinfo_uid' => $serverEntity->getPK(), 'type' => $type]);
|
||||
}
|
||||
$template = array_key_exists('template', $params) ? $params['template'] : __FUNCTION__;
|
||||
return view('cells/serverpart/' . $template, [
|
||||
@ -52,9 +53,9 @@ class ServerPartCell extends EquipmentCell
|
||||
'control' => $this->getService()->getControlDatas(),
|
||||
'service' => $this->getService(),
|
||||
'serverinfo_uid' => $params['serverinfo_uid'],
|
||||
'entities' => $entities,
|
||||
'serverEntity' => $serverEntity,
|
||||
'types' => $params['types'],
|
||||
'serverEntity' => $serverEntity,
|
||||
'entities' => $entities,
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
@ -396,7 +396,7 @@ define("SERVERPART", [
|
||||
"CNT_RANGE" => array_combine(range(1, 10), range(1, 10)),
|
||||
"SERVER_PARTTYPES" => ['CPU', 'RAM', 'DISK'],
|
||||
"SERVICE_PARTTYPES" => ['SWITCH', 'IP', 'OS', 'SOFTWARE', 'CS'],
|
||||
"PARTTYPES" => ['CPU', 'RAM', 'DISK', 'OS', 'DB', 'SOFTWARE', 'SWITCH', 'IP', 'CS'],
|
||||
"ALL_PARTTYPES" => ['CPU', 'RAM', 'DISK', 'OS', 'DB', 'SOFTWARE', 'SWITCH', 'IP', 'CS'],
|
||||
]);
|
||||
//결제 관련
|
||||
define("PAYMENT", [
|
||||
|
||||
@ -520,8 +520,7 @@ abstract class CommonController extends BaseController
|
||||
$this->entities = $this->index_process();
|
||||
return $this->getResultSuccess();
|
||||
} catch (\Exception $e) {
|
||||
return $e->getMessage();
|
||||
// return $this->getResultFail($e->getMessage());
|
||||
return $this->getResultFail($e->getMessage());
|
||||
}
|
||||
}
|
||||
//OUPUT Document 관련
|
||||
|
||||
@ -17,14 +17,6 @@ class ServerPartEntity extends EquipmentEntity
|
||||
{
|
||||
return $this->attributes['partEntity'] ?? null;
|
||||
}
|
||||
public function getTitle(): string
|
||||
{
|
||||
return $this->getPartEntity() !== null ? sprintf(
|
||||
"%s%s",
|
||||
$this->getBilling() === "" ? "" : ($this->getBilling() === PAYMENT['BILLING']["ONETIME"] ? ICONS['ONETIME'] : ($this->getBilling() === PAYMENT['BILLING']["MONTH"] ? ICONS['MONTH'] : "")),
|
||||
$this->getPartEntity()->getTitle()
|
||||
) : "";
|
||||
}
|
||||
public function getPrice(): int
|
||||
{
|
||||
return $this->getPartEntity() !== null ? $this->getPartEntity()->getPrice() : 0;
|
||||
|
||||
@ -323,7 +323,7 @@ class CommonHelper
|
||||
case 'role':
|
||||
$roles = [];
|
||||
foreach (explode(DEFAULTS["DELIMITER_ROLE"], $value) as $key) {
|
||||
$roles[] = $viewDatas['control']['field_optons'][$field][$key]->getTitle() ?? "";
|
||||
$roles[] = $viewDatas['control']['field_optons'][$field][$key] ?? "";
|
||||
}
|
||||
$value = implode(" , ", $roles);
|
||||
break;
|
||||
@ -362,14 +362,13 @@ class CommonHelper
|
||||
);
|
||||
$value = $this->getFieldForm($field, $value, $viewDatas, $extras);
|
||||
} else {
|
||||
$value = array_key_exists($value, $viewDatas['control']['field_optons'][$field]) ? $viewDatas['control']['field_optons'][$field][$value]->getTitle() : "";
|
||||
$value = array_key_exists($value, $viewDatas['control']['field_optons'][$field]) ? $viewDatas['control']['field_optons'][$field][$value] : "";
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다";
|
||||
exit;
|
||||
throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다");
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
@ -21,8 +21,7 @@ class AccountHelper extends CustomerHelper
|
||||
break;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다";
|
||||
exit;
|
||||
throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다");
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
@ -65,8 +65,7 @@ class ClientHelper extends CustomerHelper
|
||||
break;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다";
|
||||
exit;
|
||||
throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다");
|
||||
}
|
||||
return $value;
|
||||
} //
|
||||
|
||||
@ -21,8 +21,7 @@ class CouponHelper extends CustomerHelper
|
||||
break;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다";
|
||||
exit;
|
||||
throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다");
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
@ -32,8 +32,7 @@ class PaymentHelper extends CustomerHelper
|
||||
break;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다";
|
||||
exit;
|
||||
throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다");
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
@ -22,8 +22,7 @@ class PointHelper extends CustomerHelper
|
||||
break;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다";
|
||||
exit;
|
||||
throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다");
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
@ -55,8 +55,7 @@ class ServiceHelper extends CustomerHelper
|
||||
break;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다";
|
||||
exit;
|
||||
throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다");
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
@ -49,8 +49,7 @@ class ServerHelper extends EquipmentHelper
|
||||
break;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다";
|
||||
exit;
|
||||
throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다");
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
@ -25,11 +25,29 @@ class ServerPartHelper extends EquipmentHelper
|
||||
case 'DB':
|
||||
case 'OS':
|
||||
case 'SOFTWARE':
|
||||
foreach ($viewDatas['control']['field_optons'][$field] as $option_key => $option_value) {
|
||||
$isSelected = $option_key == $value ? ' selected' : '';
|
||||
$isDisabled = "";
|
||||
$attribute = "";
|
||||
$label = "";
|
||||
if ($option_value instanceof CommonEntity) {
|
||||
if (in_array($viewDatas['control']['action'], ['create_form', 'index'])) {
|
||||
if ($option_value->getStatus() != $option_value::DEFAULT_STATUS)
|
||||
$html = " disabled";
|
||||
}
|
||||
$label = $option_value->getStatus() != $option_value::DEFAULT_STATUS ? "X." : "";
|
||||
$label .= $option_value->getCustomTitle();
|
||||
} else {
|
||||
$label = $option_value;
|
||||
}
|
||||
$html .= sprintf("<option value=\"%s\"%s%s%s>%s</option>", $option_key, $isSelected, $isDisabled, $attribute, $label);
|
||||
}
|
||||
break;
|
||||
case 'part_uid':
|
||||
// dd($viewDatas['control']);
|
||||
$type = array_key_exists('type', $viewDatas['control']['form_datas']) ? $viewDatas['control']['form_datas']['type'] : 'CPU';
|
||||
// dd($viewDatas['control']['field_optons'][$field]);
|
||||
foreach ($viewDatas['control']['field_optons'][$field][$type] as $option_key => $option_value) {
|
||||
if (!array_key_exists('type', $viewDatas['control']['form_datas']) || !$viewDatas['control']['form_datas']['type']) {
|
||||
throw new \Exception(__METHOD__ . "에서 오류발생: Type가 정의되지 않았습니다.");
|
||||
}
|
||||
foreach ($viewDatas['control']['field_optons'][$field][$viewDatas['control']['form_datas']['type']] as $option_key => $option_value) {
|
||||
$isSelected = $option_key == $value ? ' selected' : '';
|
||||
$isDisabled = "";
|
||||
$attribute = "";
|
||||
@ -65,10 +83,6 @@ class ServerPartHelper extends EquipmentHelper
|
||||
case 'DB':
|
||||
case 'OS':
|
||||
case 'SOFTWARE':
|
||||
case 'part_uid':
|
||||
// if ($value === null && array_key_exists('entity', $viewDatas)) {
|
||||
// $value = $viewDatas['entity']->getServerEntity()->getPK();
|
||||
// }
|
||||
$extras['class'] = array_key_exists('class', $extras) ? $extras['class'] . ' select-field' : 'select-field';
|
||||
$extras['onChange'] = "document.querySelector('input[name=\'amount\']').value = this.options[this.selectedIndex].getAttribute('data-price')";
|
||||
$attributes = ['data-type' => 'getType', 'data-price' => 'getPrice'];
|
||||
@ -92,40 +106,33 @@ class ServerPartHelper extends EquipmentHelper
|
||||
case 'SWITCH':
|
||||
case 'IP':
|
||||
case 'CS':
|
||||
case 'part_uid':
|
||||
if (!array_key_exists($field, $viewDatas['entities'])) {
|
||||
return "";
|
||||
}
|
||||
$temps = [];
|
||||
foreach ($viewDatas['entities'][$field] as $entity) {
|
||||
$title = $entity->getTitle();
|
||||
$title .= $entity->getCnt() > 1 ? "*" . $entity->getCnt() . "개" : "";
|
||||
$title .= $entity->getExtra() !== "" ? "/" . $entity->getExtra() : "";
|
||||
if (array_key_exists('return_type', $extras) && $extras['return_type'] === 'text') {
|
||||
$temps[] = $title;
|
||||
//파트 Entity
|
||||
$title = $viewDatas['entity']->getPartEntity()->getTitle();
|
||||
$title .= $viewDatas['entity']->getCnt() > 1 ? "*" . $viewDatas['entity']->getCnt() . "개" : "";
|
||||
$title .= $viewDatas['entity']->getExtra() !== "" ? "[" . $viewDatas['entity']->getExtra() . "]" : "";
|
||||
if (array_key_exists('return', $extras) && $extras['return'] == 'onlyText') {
|
||||
$value = $title;
|
||||
} else {
|
||||
$temps[] = form_label(
|
||||
$title,
|
||||
$billing = $viewDatas['entity']->getBilling() === "" ? "" : ($viewDatas['entity']->getBilling() === PAYMENT['BILLING']["ONETIME"] ? ICONS['ONETIME'] : ($viewDatas['entity']->getBilling() === PAYMENT['BILLING']["MONTH"] ? ICONS['MONTH'] : ""));
|
||||
$value = form_label(
|
||||
$billing . $title,
|
||||
$field,
|
||||
[
|
||||
"data-src" => "/admin/equipment/serverpart/modify/{$entity->getPK()}?type={$entity->getType()}&ActionTemplate=popup",
|
||||
"data-src" => "/admin/equipment/serverpart/modify/{$viewDatas['entity']->getPK()}?type={$viewDatas['entity']->getType()}&ActionTemplate=popup",
|
||||
"data-bs-toggle" => "modal",
|
||||
"data-bs-target" => "#index_action_form",
|
||||
"class" => "btn btn-sm btn-outline btn-circle",
|
||||
"target" => "_self"
|
||||
"target" => "_self",
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
$value = implode(",", $temps);
|
||||
break;
|
||||
default:
|
||||
$value = parent::getFieldView($field, $value, $viewDatas, $extras);
|
||||
break;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다";
|
||||
exit;
|
||||
throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다");
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
@ -19,7 +19,7 @@ class SwitchHelper extends EquipmentHelper
|
||||
if (!$this->getMyAuth()->isAccessRole(['security'])) {
|
||||
$action = $viewDatas['entity']->getCode();
|
||||
} else {
|
||||
$action = parent::getListButton($action, $label ? $label : $viewDatas['entity']->getCode(), $viewDatas, $extras);
|
||||
$action = parent::getListButton($action, $viewDatas['entity']->getCode(), $viewDatas, $extras);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
||||
@ -26,8 +26,7 @@ class HomeHelper extends CommonHelper
|
||||
break;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다";
|
||||
exit;
|
||||
throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다");
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
@ -28,8 +28,7 @@ class MyLogHelper extends CommonHelper
|
||||
break;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
echo __METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다";
|
||||
exit;
|
||||
throw new \Exception(__METHOD__ . "에서 오류: {$field}의 값이 Array형태입니다");
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
@ -123,7 +123,7 @@ class ServerPartService extends EquipmentService
|
||||
switch ($field) {
|
||||
case 'part_uid':
|
||||
$partOptions = [];
|
||||
foreach (SERVERPART['PARTTYPES'] as $partType) {
|
||||
foreach (SERVERPART['ALL_PARTTYPES'] as $partType) {
|
||||
switch ($partType) {
|
||||
case 'CPU':
|
||||
case 'RAM':
|
||||
|
||||
@ -42,7 +42,9 @@
|
||||
<?= $viewDatas['service']->getHelper()->getListLabel('type', lang("{$viewDatas['class_path']}.label.type"), $viewDatas) ?>/
|
||||
<?= $viewDatas['service']->getHelper()->getListLabel('title', lang("{$viewDatas['class_path']}.label.title"), $viewDatas) ?>
|
||||
</th>
|
||||
<th class="index_head_short_column">부품정보</th>
|
||||
<th class="index_head_short_column">
|
||||
부품정보<div class="float-end rounded border border-primary" style="cursor:pointer;" onclick="copyServerPartsToClipboard()">All COPY</div>
|
||||
</th>
|
||||
<th class="index_head_short_column">
|
||||
<?= $viewDatas['service']->getHelper()->getListLabel('price', lang("{$viewDatas['class_path']}.label.price"), $viewDatas) ?>
|
||||
</th>
|
||||
@ -76,7 +78,7 @@
|
||||
<?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
|
||||
'serverinfo_uid' => $entity->getPK(),
|
||||
'types' => SERVERPART['SERVER_PARTTYPES'],
|
||||
'template' => 'part_server'
|
||||
'template' => 'partlist_server'
|
||||
]) ?>
|
||||
</td>
|
||||
<td nowrap>
|
||||
@ -110,4 +112,5 @@
|
||||
</table>
|
||||
<!-- Layout Middle End -->
|
||||
<div class="layout_bottom"><?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/bottom'); ?></div>
|
||||
<script src="/js/admin/clipboard.js"></script>
|
||||
<?= $this->endSection() ?>
|
||||
@ -26,7 +26,7 @@
|
||||
</td>
|
||||
<td><?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
|
||||
'serverinfo_uid' => $viewDatas['entity']->getPK(),
|
||||
'types' => SERVERPART['PARTTYPES']
|
||||
'types' => SERVERPART['ALL_PARTTYPES']
|
||||
]) ?></td>>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@ -86,7 +86,7 @@
|
||||
<?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
|
||||
'serverinfo_uid' => $entity->getServerEntity()->getPK(),
|
||||
'types' => SERVERPART['SERVICE_PARTTYPES'],
|
||||
'template' => 'part_service'
|
||||
'template' => 'partlist_service'
|
||||
]) ?>
|
||||
</td>
|
||||
<td nowrap>
|
||||
@ -120,36 +120,5 @@
|
||||
</table>
|
||||
<!-- Layout Middle End -->
|
||||
<div class="layout_bottom"><?= $this->include(LAYOUTS[$viewDatas['layout']]['path'] . '/bottom'); ?></div>
|
||||
<script>
|
||||
function copyServerPartToClipboard(text) {
|
||||
try {
|
||||
if (navigator.clipboard && navigator.clipboard.writeText) {
|
||||
// HTTPS 환경
|
||||
navigator.clipboard.writeText(text)
|
||||
.then(() => alert(text + "\n 복사되었습니다."))
|
||||
.catch(err => alert("실패: " + err));
|
||||
} else {
|
||||
// HTTP 환경 fallback
|
||||
const temp = document.createElement("textarea");
|
||||
temp.value = text;
|
||||
document.body.appendChild(temp);
|
||||
temp.select();
|
||||
document.execCommand("copy");
|
||||
document.body.removeChild(temp);
|
||||
alert(text + "\n 복사되었습니다.");
|
||||
}
|
||||
} catch (err) {
|
||||
alert("복사 실패: " + err);
|
||||
}
|
||||
}
|
||||
|
||||
function copyServerPartsToClipboard() {
|
||||
// 모든 .serverparts div에서 text-data 속성값 수집
|
||||
const elements = document.querySelectorAll(".serverparts");
|
||||
const texts = Array.from(elements).map(el => el.getAttribute("text-data") || "");
|
||||
// console.log(texts);
|
||||
const combined = texts.join("\n");
|
||||
copyServerPartToClipboard(combined);
|
||||
}
|
||||
</script>
|
||||
<script src="/js/admin/clipboard.js"></script>
|
||||
<?= $this->endSection() ?>
|
||||
@ -24,7 +24,7 @@
|
||||
</td>
|
||||
<td><?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
|
||||
'serverinfo_uid' => $viewDatas['entity']->getServerEntity()->getPK(),
|
||||
'types' => SERVERPART['PARTTYPES']
|
||||
'types' => SERVERPART['ALL_PARTTYPES']
|
||||
]) ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@ -14,8 +14,10 @@
|
||||
<th>서비스코드</th>
|
||||
<th>업체명</th>
|
||||
<th>구분</th>
|
||||
<th>장비번호</th>
|
||||
<th>스위치정보 / IP정보 / CS정보</th>
|
||||
<th>
|
||||
장비번호 / 스위치정보 / IP정보 / CS정보
|
||||
<div class="float-end rounded border border-primary" style="cursor:pointer;" onclick="copyServerPartsToClipboard()">All COPY</div>
|
||||
</th>
|
||||
<th>등록자</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -26,11 +28,10 @@
|
||||
<td><?= $entity->getCode() ?></td>
|
||||
<td><?= $viewDatas['service']->getHelper()->getFieldView('clientinfo_uid', $entity->getClientInfoUID(), $viewDatas) ?></td>
|
||||
<td><?= $viewDatas['service']->getHelper()->getFieldView('type', $entity->getType(), $viewDatas) ?></td>
|
||||
<td><?= $viewDatas['service']->getHelper()->getFieldView('serveripinfo_uid', $entity->getServerEntity()->getCode(), $viewDatas) ?></td>
|
||||
<td><?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
|
||||
'serverinfo_uid' => $entity->getServerEntity()->getPK(),
|
||||
'types' => SERVERPART['SERVICE_PARTTYPES'],
|
||||
'template' => 'part_service'
|
||||
'template' => 'partlist_service'
|
||||
]) ?></td>
|
||||
<td><?= $viewDatas['service']->getHelper()->getFieldView('user_uid', $entity->getUserUID(), $viewDatas) ?></td>
|
||||
</tr>
|
||||
@ -39,3 +40,4 @@
|
||||
</table>
|
||||
</div>
|
||||
<div class="layout_footer"></div>
|
||||
<script src="/js/admin/clipboard.js"></script>
|
||||
@ -1,11 +1,40 @@
|
||||
<td>
|
||||
<div><?= $serverPartCellDatas['service']->getHelper()->getFieldView('CPU', "", $serverPartCellDatas) ?></div>
|
||||
<div><?= $serverPartCellDatas['service']->getHelper()->getFieldView('RAM', "", $serverPartCellDatas) ?></div>
|
||||
<div><?= $serverPartCellDatas['service']->getHelper()->getFieldView('DISK', "", $serverPartCellDatas) ?></div>
|
||||
<?php foreach (['CPU', 'RAM', 'DISK'] as $type): ?>
|
||||
<?php foreach ($serverPartCellDatas['entities'][$type] as $entities): ?>
|
||||
<?php foreach ($entities as $entity): ?>
|
||||
<?php $serverPartCellDatas['entity'] = $entity ?>
|
||||
<div><?= $serverPartCellDatas['service']->getHelper()->getFieldView($type, $entity->getPK(), $serverPartCellDatas) ?></div>
|
||||
<?php endforeach ?>
|
||||
<?php endforeach ?>
|
||||
<?php endforeach ?>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
<div><?= $serverPartCellDatas['service']->getHelper()->getFieldView('OS', "", $serverPartCellDatas) ?></div>
|
||||
<div><?= $serverPartCellDatas['service']->getHelper()->getFieldView('SOFTWARE', "", $serverPartCellDatas) ?></div>
|
||||
<?php foreach (['OS', 'SOFTWARE'] as $type): ?>
|
||||
<?php foreach ($serverPartCellDatas['entities'][$type] as $entities): ?>
|
||||
<?php foreach ($entities as $entity): ?>
|
||||
<?php $serverPartCellDatas['entity'] = $entity ?>
|
||||
<div><?= $serverPartCellDatas['service']->getHelper()->getFieldView($type, $entity->getPK(), $serverPartCellDatas) ?></div>
|
||||
<?php endforeach ?>
|
||||
<?php endforeach ?>
|
||||
<?php endforeach ?>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
<?php foreach ($serverPartCellDatas['entities']['IP'] as $entities): ?>
|
||||
<?php foreach ($entities as $entity): ?>
|
||||
<?php $serverPartCellDatas['entity'] = $entity ?>
|
||||
<div><?= $serverPartCellDatas['service']->getHelper()->getFieldView('IP', $entity->getPK(), $serverPartCellDatas) ?></div>
|
||||
<?php endforeach ?>
|
||||
<?php endforeach ?>
|
||||
|
||||
</td>
|
||||
<td>
|
||||
<?php foreach ($serverPartCellDatas['entities']['CS'] as $entities): ?>
|
||||
<?php foreach ($entities as $entity): ?>
|
||||
<?php $serverPartCellDatas['entity'] = $entity ?>
|
||||
<div><?= $serverPartCellDatas['service']->getHelper()->getFieldView('CS', $entity->getPK(), $serverPartCellDatas) ?></div>
|
||||
<?php endforeach ?>
|
||||
<?php endforeach ?>
|
||||
|
||||
</td>
|
||||
<td><?= $serverPartCellDatas['service']->getHelper()->getFieldView('IP', "", $serverPartCellDatas) ?></td>
|
||||
<td><?= $serverPartCellDatas['service']->getHelper()->getFieldView('CS', "", $serverPartCellDatas) ?></td>
|
||||
@ -1,5 +0,0 @@
|
||||
<?php $temps = [] ?>
|
||||
<?php foreach ($serverPartCellDatas['types'] as $type): ?>
|
||||
<?php $temps[] = $serverPartCellDatas['service']->getHelper()->getListButton($type, '', $serverPartCellDatas) . $serverPartCellDatas['service']->getHelper()->getFieldView($type, "", $serverPartCellDatas) ?>
|
||||
<?php endforeach ?>
|
||||
<?= implode("/", $temps) ?>
|
||||
@ -1,9 +0,0 @@
|
||||
<?php $htmls = $texts = [!$serverPartCellDatas['serverEntity'] ? "" : $serverPartCellDatas['serverEntity']->getCode()] ?>
|
||||
<?php foreach (['SWITCH', 'IP', 'OS'] as $type): ?>
|
||||
<?php $texts[] = $serverPartCellDatas['service']->getHelper()->getFieldView($type, '', $serverPartCellDatas, ['return_type' => 'text']); ?>
|
||||
<?php $button = $serverPartCellDatas['service']->getHelper()->getListButton($type, '', $serverPartCellDatas) ?>
|
||||
<?php $htmls[] = $button . $serverPartCellDatas['service']->getHelper()->getFieldView($type, '', $serverPartCellDatas) ?>
|
||||
<?php endforeach ?>
|
||||
<?= implode(" /", $htmls) ?>
|
||||
<?php $text = implode('/', $texts) ?>
|
||||
<div class="serverparts float-end rounded border border-primary" style="cursor:pointer;" onclick="copyServerPartToClipboard('<?= $text ?>')" text-data="<?= $text ?>">COPY</div>
|
||||
23
app/Views/cells/serverpart/partlist_server.php
Normal file
23
app/Views/cells/serverpart/partlist_server.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php $htmls = $texts = [] ?>
|
||||
<?php foreach ($serverPartCellDatas['types'] as $type): ?>
|
||||
<?php $htmls[$type] = [] ?>
|
||||
<?php $texts[$type] = []; ?>
|
||||
<?php foreach ($serverPartCellDatas['entities'][$type] as $entities): ?>
|
||||
<?php foreach ($entities as $entity): ?>
|
||||
<?php $serverPartCellDatas['entity'] = $entity ?>
|
||||
<?php $htmls[$type][] = $serverPartCellDatas['service']->getHelper()->getFieldView($type, $entity->getPK(), $serverPartCellDatas) ?>
|
||||
<?php $texts[$type][] = $serverPartCellDatas['service']->getHelper()->getFieldView($type, $entity->getPK(), $serverPartCellDatas, ['return' => 'onlyText']) ?>
|
||||
<?php endforeach ?>
|
||||
<?php endforeach ?>
|
||||
<?php endforeach ?>
|
||||
<?php $view_htmls = [] ?>
|
||||
<?php foreach ($htmls as $type => $datas): ?>
|
||||
<?php $view_htmls[] = $serverPartCellDatas['service']->getHelper()->getListButton($type, '', $serverPartCellDatas) . implode(",", $datas) ?>
|
||||
<?php endforeach ?>
|
||||
<?= implode(" / ", $view_htmls) ?>
|
||||
<?php $view_texts = [] ?>
|
||||
<?php foreach ($htmls as $type => $datas): ?>
|
||||
<?php $view_texts[] = implode(',', $texts[$type]) ?>
|
||||
<?php endforeach ?>
|
||||
<?php $text = implode(" / ", $view_texts) ?>
|
||||
<div class="serverparts float-end rounded border border-primary" style="cursor:pointer;" onClick="copyServerPartToClipboard('<?= $text ?>')" text-data="<?= $text ?>">COPY</div>
|
||||
23
app/Views/cells/serverpart/partlist_service.php
Normal file
23
app/Views/cells/serverpart/partlist_service.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php $htmls = $texts = [] ?>
|
||||
<?php foreach ($serverPartCellDatas['types'] as $type): ?>
|
||||
<?php $htmls[$type] = [] ?>
|
||||
<?php $texts[$type] = []; ?>
|
||||
<?php foreach ($serverPartCellDatas['entities'][$type] as $entities): ?>
|
||||
<?php foreach ($entities as $entity): ?>
|
||||
<?php $serverPartCellDatas['entity'] = $entity ?>
|
||||
<?php $htmls[$type][] = $serverPartCellDatas['service']->getHelper()->getFieldView($type, $entity->getPK(), $serverPartCellDatas) ?>
|
||||
<?php $texts[$type][] = $serverPartCellDatas['service']->getHelper()->getFieldView($type, $entity->getPK(), $serverPartCellDatas, ['return' => 'onlyText']) ?>
|
||||
<?php endforeach ?>
|
||||
<?php endforeach ?>
|
||||
<?php endforeach ?>
|
||||
<?php $view_htmls = [!$serverPartCellDatas['serverEntity'] ? "" : $serverPartCellDatas['serverEntity']->getCode()] ?>
|
||||
<?php foreach ($htmls as $type => $datas): ?>
|
||||
<?php $view_htmls[] = $serverPartCellDatas['service']->getHelper()->getListButton($type, '', $serverPartCellDatas) . implode(",", $datas) ?>
|
||||
<?php endforeach ?>
|
||||
<?= implode(" / ", $view_htmls) ?>
|
||||
<?php $view_texts = [!$serverPartCellDatas['serverEntity'] ? "" : $serverPartCellDatas['serverEntity']->getCode()] ?>
|
||||
<?php foreach ($htmls as $type => $datas): ?>
|
||||
<?php $view_texts[] = implode(',', $texts[$type]) ?>
|
||||
<?php endforeach ?>
|
||||
<?php $text = implode(" / ", $view_texts) ?>
|
||||
<div class="serverparts float-end rounded border border-primary" style="cursor:pointer;" onClick="copyServerPartToClipboard('<?= $text ?>')" text-data="<?= $text ?>">COPY</div>
|
||||
@ -32,7 +32,7 @@
|
||||
</td>
|
||||
<?= view_cell("\App\Cells\Equipment\ServerPartCell::parttable", [
|
||||
'serverinfo_uid' => $entity->getServerEntity()->getPK(),
|
||||
'types' => SERVERPART['SERVICE_PARTTYPES'],
|
||||
'types' => SERVERPART['ALL_PARTTYPES'],
|
||||
'template' => 'part_detail'
|
||||
]) ?>
|
||||
<td>
|
||||
|
||||
30
public/js/admin/clipboard.js
Normal file
30
public/js/admin/clipboard.js
Normal file
@ -0,0 +1,30 @@
|
||||
function copyServerPartToClipboard(text) {
|
||||
try {
|
||||
if (navigator.clipboard && navigator.clipboard.writeText) {
|
||||
// HTTPS 환경
|
||||
navigator.clipboard.writeText(text)
|
||||
.then(() => alert(text + "\n 복사되었습니다."))
|
||||
.catch(err => alert("실패: " + err));
|
||||
} else {
|
||||
// HTTP 환경 fallback
|
||||
const temp = document.createElement("textarea");
|
||||
temp.value = text;
|
||||
document.body.appendChild(temp);
|
||||
temp.select();
|
||||
document.execCommand("copy");
|
||||
document.body.removeChild(temp);
|
||||
alert(text + "\n 복사되었습니다.");
|
||||
}
|
||||
} catch (err) {
|
||||
alert("복사 실패: " + err);
|
||||
}
|
||||
}
|
||||
|
||||
function copyServerPartsToClipboard() {
|
||||
// 모든 .serverparts div에서 text-data 속성값 수집
|
||||
const elements = document.querySelectorAll(".serverparts");
|
||||
const texts = Array.from(elements).map(el => el.getAttribute("text-data") || "");
|
||||
// console.log(texts);
|
||||
const combined = texts.join("\n");
|
||||
copyServerPartToClipboard(combined);
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user