예제 #1
0
            d3forum_sync_post_votes($mydirname, $post_id, false);
        }
        d3forum_sync_topic_votes($mydirname, $topic_id, false);
        d3forum_sync_topic($mydirname, $topic_id, false);
    }
    $_SESSION[$mydirname . '_synctopics_start'] = $synctopics_start + $synctopics_num;
    $_SESSION[$mydirname . '_synctopics_num'] = $synctopics_num;
    redirect_header(XOOPS_URL . "/modules/{$mydirname}/admin/index.php?page=advanced_admin", 3, sprintf(_MD_A_D3FORUM_FMT_SYNCTOPICSDONE, $topic_counter));
    exit;
}
if (!empty($_POST['do_syncforums'])) {
    set_time_limit(0);
    // sync all forums
    $result = $db->query("SELECT forum_id FROM " . $db->prefix($mydirname . "_forums"));
    while (list($forum_id) = $db->fetchRow($result)) {
        d3forum_sync_forum($mydirname, $forum_id, false);
    }
    redirect_header(XOOPS_URL . "/modules/{$mydirname}/admin/index.php?page=advanced_admin", 3, _MD_A_D3FORUM_MSG_SYNCTABLESDONE);
    exit;
}
if (!empty($_POST['do_synccategories'])) {
    set_time_limit(0);
    // rebuild category's tree
    d3forum_sync_cattree($mydirname);
    // sync all categories
    $result = $db->query("SELECT cat_id FROM " . $db->prefix($mydirname . "_categories") . " ORDER BY cat_order_in_tree DESC");
    while (list($cat_id) = $db->fetchRow($result)) {
        d3forum_sync_category($mydirname, $cat_id);
    }
    redirect_header(XOOPS_URL . "/modules/{$mydirname}/admin/index.php?page=advanced_admin", 3, _MD_A_D3FORUM_MSG_SYNCTABLESDONE);
    exit;
function d3forum_update_topic_from_post($mydirname, $topic_id, $forum_id, $forum_permissions, $isadmin)
{
    global $myts;
    $db =& Database::getInstance();
    $sql4set = '';
    $topic_id = intval($topic_id);
    $new_forum_id = intval(@$_POST['forum_id']);
    // prefetch for forum
    list($new_forum_external_link_format) = $db->fetchRow($db->query("SELECT forum_external_link_format FROM " . $db->prefix($mydirname . "_forums") . " WHERE forum_id={$new_forum_id}"));
    // check the user is destined forum's admin or mod
    if (!$isadmin && !$forum_permissions[$new_forum_id]['is_moderator']) {
        die(_MD_D3FORUM_ERR_CUTPASTENOTADMINOFDESTINATION);
    }
    $topic_title4sql = addslashes($myts->stripSlashesGPC(@$_POST['topic_title']));
    $topic_sticky = intval(@$_POST['topic_sticky']);
    $topic_locked = intval(@$_POST['topic_locked']);
    $topic_invisible = intval(@$_POST['topic_invisible']);
    $topic_solved = intval(@$_POST['topic_solved']);
    $external_link_id = $myts->stripSlashesGPC(@$_POST['topic_external_link_id']);
    // do update
    if (!$db->query("UPDATE " . $db->prefix($mydirname . "_topics") . " SET {$sql4set} topic_title='{$topic_title4sql}', forum_id='{$new_forum_id}', topic_sticky='{$topic_sticky}', topic_locked='{$topic_locked}', topic_invisible='{$topic_invisible}', topic_solved='{$topic_solved}', topic_external_link_id='" . addslashes($external_link_id) . "' WHERE topic_id={$topic_id}")) {
        die("DB ERROR IN UPDATE topic" . __LINE__);
    }
    // clear topic_external_link_id if the new forum has no external_link_fmt
    if ($new_forum_external_link_format == '') {
        if (!$db->query("UPDATE " . $db->prefix($mydirname . "_topics") . " SET topic_external_link_id='' WHERE topic_id={$topic_id}")) {
            die("DB ERROR in UPDATE topic" . __LINE__);
        }
    }
    // call back to the target of comment
    if (!empty($external_link_format) && !empty($external_link_id)) {
        $d3com =& d3forum_main_get_comment_object($mydirname, $external_link_format);
        if (is_object(@$d3com)) {
            $d3com->onUpdate('update', $external_link_id, $forum_id, $topic_id);
        }
    }
    d3forum_sync_forum($mydirname, $forum_id);
    d3forum_sync_forum($mydirname, $new_forum_id);
}
function d3forum_export_topic_to_d3forum($mydirname, $export_mid, $export_forum_id, $forum_id, $topic_id, $is_move = false)
{
    $db =& Database::getInstance();
    $module_handler =& xoops_gethandler('module');
    $to_module =& $module_handler->get($export_mid);
    $export_mydirname = $to_module->getVar('dirname');
    // topics table
    $table_name = 'topics';
    $from_table = $db->prefix($mydirname . '_' . $table_name);
    $to_table = $db->prefix($export_mydirname . '_' . $table_name);
    $columns = array_diff($GLOBALS['d3forum_tables'][$table_name], array('topic_id', 'forum_id'));
    $columns4sql = implode(',', $columns);
    $sql = "INSERT INTO `{$to_table}` ({$columns4sql},`forum_id`) SELECT {$columns4sql},{$export_forum_id} FROM `{$from_table}` WHERE topic_id={$topic_id}";
    $ers = $db->query($sql);
    $export_topic_id = $db->getInsertId();
    if ($is_move) {
        $db->query("DELETE FROM `{$from_table}` WHERE topic_id={$topic_id}");
    }
    // users2topics table
    $table_name = 'users2topics';
    $from_table = $db->prefix($mydirname . '_' . $table_name);
    $to_table = $db->prefix($export_mydirname . '_' . $table_name);
    $columns = array_diff($GLOBALS['d3forum_tables'][$table_name], array('topic_id'));
    $columns4sql = implode(',', $columns);
    $sql = "INSERT INTO `{$to_table}` ({$columns4sql},`topic_id`) SELECT {$columns4sql},{$export_topic_id} FROM `{$from_table}` WHERE topic_id={$topic_id}";
    $ers = $db->query($sql);
    if ($is_move) {
        $db->query("DELETE FROM `{$from_table}` WHERE topic_id={$topic_id}");
    }
    // posts table
    $table_name = 'posts';
    $from_table = $db->prefix($mydirname . '_' . $table_name);
    $to_table = $db->prefix($export_mydirname . '_' . $table_name);
    $columns = array_diff($GLOBALS['d3forum_tables'][$table_name], array('post_id', 'topic_id'));
    $columns4sql = implode(',', $columns);
    $prs = $db->query("SELECT post_id FROM `{$from_table}` WHERE topic_id={$topic_id} ORDER BY post_id");
    $post_conversions = array();
    while (list($post_id) = $db->fetchRow($prs)) {
        $sql = "INSERT INTO `{$to_table}` ({$columns4sql},`topic_id`) SELECT {$columns4sql},{$export_topic_id} FROM `{$from_table}` WHERE post_id={$post_id}";
        $ers = $db->query($sql);
        $post_conversions[$post_id] = $db->getInsertId();
        if ($is_move) {
            $db->query("DELETE FROM `{$from_table}` WHERE post_id={$post_id}");
        }
    }
    // update pid of posts table
    foreach ($post_conversions as $post_id => $export_post_id) {
        $sql = "UPDATE `{$to_table}` SET pid={$export_post_id} WHERE pid={$post_id} AND topic_id={$export_topic_id}";
        $ers = $db->query($sql);
    }
    // post_votes table
    $table_name = 'post_votes';
    $from_table = $db->prefix($mydirname . '_' . $table_name);
    $to_table = $db->prefix($export_mydirname . '_' . $table_name);
    $columns = array_diff($GLOBALS['d3forum_tables'][$table_name], array('post_id'));
    $columns4sql = implode(',', $columns);
    foreach ($post_conversions as $post_id => $export_post_id) {
        $sql = "INSERT INTO `{$to_table}` ({$columns4sql},`post_id`) SELECT {$columns4sql},{$export_post_id} FROM `{$from_table}` WHERE post_id={$post_id}";
        $ers = $db->query($sql);
        if ($is_move) {
            $db->query("DELETE FROM `{$from_table}` WHERE post_id={$post_id}");
        }
    }
    // sync topic, forum, category
    d3forum_sync_topic($export_mydirname, $export_topic_id);
    if ($is_move) {
        d3forum_sync_forum($mydirname, $forum_id);
    }
}