/** * Delete all objects from SubClass * * @param int SubClassID */ function SubClassClear($SubClassID) { global $nc_core, $db, $MODULE_FOLDER; // full info about this subclass $SubClassID = intval($SubClassID); $res = $db->get_row("SELECT `Catalogue_ID`, `Subdivision_ID`, `Class_ID` FROM `Sub_Class` WHERE `Sub_Class_ID` = '" . $SubClassID . "'", ARRAY_A); if (nc_module_check_by_keyword("comments")) { include_once $MODULE_FOLDER . "comments/function.inc.php"; // delete comment rules nc_comments::dropRuleSubClass($db, $SubClassID); // delete comments nc_comments::dropComments($db, $SubClassID, "Sub_Class"); } DeleteSubClassFiles($SubClassID, $res['Class_ID']); // delete from message $messages_id = $db->get_col("SELECT `Message_ID` FROM `Message" . $res['Class_ID'] . "` WHERE `Subdivision_ID` = '" . $res['Subdivision_ID'] . "' AND `Sub_Class_ID` = '" . $SubClassID . "'"); if (!empty($messages_id)) { if ($db->query("SELECT * FROM `Message" . $res['Class_ID'] . "` WHERE `Message_ID` IN (" . join(", ", $messages_id) . ")")) { $messages_data = array_combine($db->get_col(NULL, 0), $db->get_results(NULL)); } // execute core action $nc_core->event->execute("dropMessagePrep", $res['Catalogue_ID'], $res['Subdivision_ID'], $SubClassID, $res['Class_ID'], $messages_id, $messages_data); $db->query("DELETE FROM `Message" . $res['Class_ID'] . "` WHERE `Message_ID` IN (" . join(", ", $messages_id) . ")"); // execute core action $nc_core->event->execute("dropMessage", $res['Catalogue_ID'], $res['Subdivision_ID'], $SubClassID, $res['Class_ID'], $messages_id, $messages_data); } return; }
function DeleteFromSubClass($subdivisionId) { global $nc_core, $db, $MODULE_FOLDER; $res = $nc_core->sub_class->get_by_subdivision_id($subdivisionId); $catalogueId = null; $subClassToDelete = array(); $classIds = array(); foreach ((array) $res as $subClass) { if (!$catalogueId) { $catalogueId = $subClass['Catalogue_ID']; } $subClassToDelete[] = (int) $subClass['Sub_Class_ID']; $classIds[$subClass['Sub_Class_ID']] = (int) $subClass['Class_ID']; } if (count($subClassToDelete) > 0) { $nc_core->event->execute("dropSubClassPrep", $catalogueId, $subdivisionId, $subClassToDelete); foreach ($subClassToDelete as $subClass) { DeleteSubClassFiles($subClass, $classIds[$subClass]); if (nc_module_check_by_keyword("comments")) { include_once $MODULE_FOLDER . "comments/function.inc.php"; // delete comment rules nc_comments::dropRuleSubClass($db, $subClass); // delete comments nc_comments::dropComments($db, $subClass, "Sub_Class"); } $db->query("DELETE FROM `Sub_Class` WHERE `Sub_Class_ID` = {$subClass}"); } $nc_core->event->execute("dropSubClass", $catalogueId, $subdivisionId, $subClassToDelete); } return; }
function CascadeDeleteClass($ClassID) { global $nc_core, $db; global $UI_CONFIG, $INCLUDE_FOLDER; $ClassID = intval($ClassID); $File_Mode = nc_get_file_mode('Class', $ClassID); if ($File_Mode) { $class_editor = new nc_class_editor($nc_core->CLASS_TEMPLATE_FOLDER, $nc_core->db); $class_editor->load($ClassID); $class_editor->delete_template(); } // удаление шаблонов $template_ids = $db->get_col("SELECT Class_ID FROM Class WHERE ClassTemplate = '" . $ClassID . "'"); if (!empty($template_ids)) { foreach ($template_ids as $v) { CascadeDeleteClassTemplate($v); } } $ClassGroup = $db->get_var("SELECT `Class_Group` FROM `Class` WHERE `Class_ID` = '" . $ClassID . "'"); $isMoreClasses = $db->get_var("SELECT COUNT(*) - 1 FROM `Class` WHERE `Class_Group` = '" . $ClassGroup . "'"); //$LockTables = "LOCK TABLES `Class` WRITE, `Field` WRITE,"; //$LockTables.= "`Message".$ClassID."` WRITE,"; //$LockTables.= "`Sub_Class` WRITE"; //$LockResult = $db->query($LockTables.$AddLockTables); // get ids $messages = $db->get_results("SELECT sc.`Catalogue_ID`, m.`Subdivision_ID`, m.`Sub_Class_ID`, m.`Message_ID`, m.*\n FROM `Message" . $ClassID . "` AS m\n LEFT JOIN `Sub_Class` AS sc ON sc.`Sub_Class_ID` = m.`Sub_Class_ID`\n ORDER BY sc.`Catalogue_ID`, m.`Subdivision_ID`, m.`Sub_Class_ID`", OBJECT); if ($messages) { $messages_data = array_combine($db->get_col(NULL, 3), $db->get_results(NULL)); } //костыль, для $messages_data нужен массив объектов $messages = $db->get_results("SELECT sc.`Catalogue_ID`, m.`Subdivision_ID`, m.`Sub_Class_ID`, m.`Message_ID`, m.*\n FROM `Message" . $ClassID . "` AS m\n LEFT JOIN `Sub_Class` AS sc ON sc.`Sub_Class_ID` = m.`Sub_Class_ID`\n ORDER BY sc.`Catalogue_ID`, m.`Subdivision_ID`, m.`Sub_Class_ID`", ARRAY_N); $nc_core->event->execute("dropMessagePrep", $messages); // delete messages $db->query("DROP TABLE `Message" . $ClassID . "`"); // call event if (!empty($messages)) { $catalogue = $messages[0][0]; $sub = $messages[0][1]; $cc = $messages[0][2]; $messages_arr = array($messages[0][3]); $messages_data_arr = array($messages_data[$messages[0][3]]); foreach ($messages as $value) { if ($value[0] != $catalogue || $value[1] != $sub || $value[2] != $cc) { // execute core action $nc_core->event->execute("dropMessage", $catalogue, $sub, $cc, $ClassID, $messages_arr, $messages_data_arr); $catalogue = $value[0]; $sub = $value[1]; $cc = $value[2]; $messages_arr = array($value[3]); $messages_data_arr = array($messages_data[$value[3]]); } else { $messages_arr[] = $value[3]; $messages_data_arr[] = $messages_data[$value[3]]; } } } // delete fields $db->query("DELETE FROM `Field` WHERE `Class_ID` = '" . $ClassID . "'"); $subclasses = $db->get_results("SELECT `Catalogue_ID`, `Subdivision_ID`, `Sub_Class_ID`, `Class_ID` FROM `Sub_Class`\n WHERE `Class_ID` = '" . $ClassID . "'", ARRAY_N); // delete subclasses if (!empty($subclasses)) { foreach ($subclasses as $subclass) { // execute core action $nc_core->event->execute("dropSubClassPrep", $subclass[0], $subclass[1], $subclass[2]); // delete related files require_once $INCLUDE_FOLDER . "s_files.inc.php"; DeleteSubClassFiles($subclass[2], $subclass[3]); $db->query("DELETE FROM `Sub_Class` WHERE `Sub_Class_ID` = '" . $subclass[2] . "'"); // execute core action $nc_core->event->execute("dropSubClass", $subclass[0], $subclass[1], $subclass[2]); } } // execute core action $nc_core->event->execute("dropClassPrep", $ClassID); $db->query("DELETE FROM `Class` WHERE `Class_ID` = '" . $ClassID . "'"); // execute core action $nc_core->event->execute("dropClass", $ClassID); //$UnlockResult = $db->query("UNLOCK TABLES"); if (!$isMoreClasses) { $UI_CONFIG->treeChanges['deleteNode'][] = "group-" . md5($ClassGroup); } else { $UI_CONFIG->treeChanges['deleteNode'][] = "dataclass-" . $ClassID; } return $isMoreClasses; }