table}.{$field}]" : ""; break; case self::PARENT: $rule = "required|trim|alpha_numeric"; break; case self::TITLE: case "content": $rule = "required|trim|string"; break; case "type": $rule = "required|in_list[A,AAAA,CNAME,NS,MX,PTR,SPF,TXT,SRV,INFO]"; break; case "ttl": $rule = "if_exist|numeric"; break; case "proxied": $rule = "required|in_list[on,off]"; break; case "proxiable": case "fixed": case "locked": $rule = "if_exist|in_list[on,off]"; break; default: $rule = parent::getFieldRule($action, $field); break; } return $rule; } public function getFormFieldInputOption(string $field, array $options = []): array { switch ($field) { default: $this->orderBy(self::TITLE, 'asc'); $options = parent::getFormFieldInputOption($field, $options); break; } return $options; } public function getEntityByPK(string $uid): null|RecordEntity { $this->where(self::PK, $uid); return $this->getEntity(); } public function getEntityByID(string $id): null|RecordEntity { $this->where(self::TITLE, $id); return $this->getEntity(); } public function getEntitysByParent(ZoneEntity $zone_entity) { $this->where(self::PARENT, $zone_entity->getPK()); return $this->getEntitys(); } //create용 public function create(array $formDatas = []): RecordEntity { return $this->create_process(new RecordEntity(), $formDatas); } //modify용 public function modify(RecordEntity $entity, array $formDatas): RecordEntity { return $this->modify_process($entity, $formDatas); } //도메인이 이미 존재하는지 체크 public function isUniqueHost($zone_uid, string $host, string $content): bool { $this->where(self::PARENT, $zone_uid); $this->where('host', $host); $this->where('content', $content); return is_null($this->first()) ? true : false; } //CDN값 수정 못하는 고정 Record 처리 public function setImmobilized(array $hosts) { if (count($hosts)) { $this->whereIn('host', $hosts)->set(['fixed' => 'on'])->update(); log_message("notice", "-----set fixed Records " . implode(",", $hosts) . "처리 완료-----"); } } //List 검색용 public function setList_WordFilter(string $word, $field = null): void { parent::setList_WordFilter($word, $field); $this->orLike('content', $word, 'both'); } public function setList_OrderBy(string $order = ""): void { //Join을 해서 도메인부터 Sorting하기위함 $this->join(ZoneModel::TABLE, sprintf( "%s.%s=%s.%s", self::TABLE, self::PARENT, ZoneModel::TABLE, ZoneModel::PK )); $this->orderBy(ZoneModel::TABLE . "." . ZoneModel::TITLE . " ASC ," . self::TITLE . " ASC"); parent::setList_OrderBy($order); } }