public static function fork($nid) { $dbm = \CADB\DBM::instance(); $que = "SELECT * FROM {guide} WHERE nid = " . $nid; $guide = $dbm->getFetchArray($que); if (!$guide) { self::setErrorMsg("존재하지 않는 모범단협입니다."); return -1; } $que = "INSERT INTO {guide} ("; $que2 = ") VALUES ("; $array1 = 'array("'; $array2 = ""; $c = 0; foreach ($guide as $k => $v) { if ($k == 'nid' || $k == 'vid') { continue; } if ($k == 'created') { continue; } $que .= ($c ? ", " : "") . "`" . $k . "`"; $que2 .= ($c ? ", " : "") . "?"; if (is_numeric($v)) { $array1 .= 'd'; } else { $guide[$k] = stripslashes($v); $array1 .= 's'; } if ($k == 'current') { $guide[$k] = 0; } $array2 .= ($c ? ", " : "") . '$' . 'guide[' . $k . ']'; $c++; } $que .= ", `created`"; $que2 .= ", ?)"; $que = $que . $que2; $array1 .= 'd",'; $array2 .= ", time())"; $eval_str = '$' . "q_args = " . $array1 . $array2 . ";"; eval($eval_str); if ($dbm->execute($que, $q_args) < 1) { self::setErrorMsg($que . "가 DB에 반영되지 않았습니다."); return -1; } $insert_nid = $dbm->getLastInsertId(); $que = "UPDATE {guide} SET vid = ? WHERE nid = ?"; if ($dbm->execute($que, array("dd", $insert_nid, $insert_nid)) < 1) { self::setErrorMsg($que . " 가 DB에 반영되지 않았습니다."); self::rollback($insert_nid); return -1; } self::$log = "모범단협: " . $nid . " 을 복사하여 새모범단협: " . $insert_nid . " 으로 복사했습니다.\n"; $clause = array(); $que = "SELECT * FROM {guide_clause} WHERE nid = " . $nid . " ORDER BY parent ASC, idx ASC"; while ($row = $dbm->getFetchArray($que)) { $clause[] = $row; } if (is_array($clause)) { foreach ($clause as $cl) { if (self::forkClause($cl, $insert_nid) < 0) { self::rollback($insert_nid); return -1; } } } self::$log .= "모범단협: " . $nid . " 의 모든 세부조항을 복사하여 새모범단협: " . $insert_nid . " 의 세부조항으로 복사했습니다.\n"; \CADB\Log::guideLog('fork', $insert_nid, $insert_nid, 0, self::$log); return $insert_nid; }