Ejemplo n.º 1
0
/**
 * 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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}