예제 #1
0
function sitemap_forum_get_threads($forum_fid)
{
    if (!($db = db::get())) {
        return false;
    }
    // If there are any problems with the function arguments we bail out.
    if (!is_numeric($forum_fid)) {
        return false;
    }
    // Constant for Guest access.
    $user_perm_guest_access = USER_PERM_GUEST_ACCESS;
    // Get the table prefix from the forum fid
    if (!($table_prefix = forum_get_table_prefix($forum_fid))) {
        return false;
    }
    $sql = "SELECT THREAD.TID, UNIX_TIMESTAMP(THREAD.MODIFIED) AS MODIFIED ";
    $sql .= "FROM `{$table_prefix}THREAD` THREAD ";
    $sql .= "INNER JOIN `{$table_prefix}FOLDER` FOLDER ";
    $sql .= "ON (FOLDER.FID = THREAD.FID) ";
    $sql .= "WHERE FOLDER.PERM & {$user_perm_guest_access} > 0 ";
    $sql .= "ORDER BY THREAD.TID";
    if (!($result = $db->query($sql))) {
        return false;
    }
    if ($result->num_rows == 0) {
        return false;
    }
    return $result;
}
예제 #2
0
 public static function get_perm_array($uid, $forum_fid)
 {
     $user_perm_array = array();
     if (!is_numeric($uid)) {
         return $user_perm_array;
     }
     if (!is_numeric($forum_fid)) {
         return $user_perm_array;
     }
     if ($table_prefix = forum_get_table_prefix($forum_fid)) {
         $sql = "SELECT FID, PERM, IF (PERM IS NULL, 0, 1) AS FOLDER_PERM_COUNT ";
         $sql .= "FROM `{$table_prefix}FOLDER`";
         if (!($result = session::$db->query($sql))) {
             return $user_perm_array;
         }
         if ($result->num_rows == 0) {
             return $user_perm_array;
         }
         while (($permission_data = $result->fetch_assoc()) !== null) {
             if ($permission_data['FOLDER_PERM_COUNT'] > 0) {
                 $user_perm_array[$forum_fid][$permission_data['FID']] = (double) $permission_data['PERM'];
             }
         }
     }
     $sql = "SELECT FORUM, FID, BIT_OR(PERM) AS PERM FROM ((SELECT GROUPS.FORUM, ";
     $sql .= "GROUP_PERMS.FID, BIT_OR(GROUP_PERMS.PERM) AS PERM, COUNT(GROUP_PERMS.GID) AS PERM_COUNT ";
     $sql .= "FROM GROUPS INNER JOIN GROUP_PERMS ON (GROUP_PERMS.GID = GROUPS.GID) ";
     $sql .= "INNER JOIN GROUP_USERS ON (GROUP_USERS.GID = GROUPS.GID) WHERE GROUP_USERS.UID = '{$uid}' ";
     $sql .= "AND GROUPS.FORUM = {$forum_fid} GROUP BY GROUPS.FORUM, GROUP_PERMS.FID HAVING PERM_COUNT > 0) ";
     $sql .= "UNION ALL (SELECT USER_PERM.FORUM, USER_PERM.FID, BIT_OR(USER_PERM.PERM) AS PERM, ";
     $sql .= "COUNT(USER_PERM.UID) AS PERM_COUNT FROM USER_PERM WHERE USER_PERM.UID = '{$uid}' ";
     $sql .= "AND USER_PERM.FORUM IN (0, {$forum_fid}) GROUP BY USER_PERM.FORUM, USER_PERM.FID ";
     $sql .= "HAVING PERM_COUNT > 0)) AS USER_GROUP_PERMS GROUP BY FORUM, FID";
     if (!($result = session::$db->query($sql))) {
         return $user_perm_array;
     }
     if ($result->num_rows == 0) {
         return $user_perm_array;
     }
     while (($permission_data = $result->fetch_assoc()) !== null) {
         if (isset($user_perm_array[$permission_data['FORUM']][$permission_data['FID']])) {
             if (($user_perm_array[$permission_data['FORUM']][$permission_data['FID']] & USER_PERM_THREAD_MOVE) > 0) {
                 $permission_data['PERM'] = (double) $permission_data['PERM'] | USER_PERM_THREAD_MOVE;
             }
         }
         $user_perm_array[$permission_data['FORUM']][$permission_data['FID']] = (double) $permission_data['PERM'];
     }
     return $user_perm_array;
 }
예제 #3
0
 public static function get_perm_array($uid, $forum_fid)
 {
     $user_perm_array = array();
     if (!is_numeric($uid)) {
         return $user_perm_array;
     }
     if (!is_numeric($forum_fid)) {
         return $user_perm_array;
     }
     if (!($table_prefix = forum_get_table_prefix($forum_fid))) {
         return $user_perm_array;
     }
     $sql = "SELECT FID, PERM, IF (PERM IS NULL, 0, 1) AS FOLDER_PERM_COUNT ";
     $sql .= "FROM `{$table_prefix}FOLDER`";
     if (!($result = session::$db->query($sql))) {
         return $user_perm_array;
     }
     if ($result->num_rows == 0) {
         return $user_perm_array;
     }
     while ($permission_data = $result->fetch_assoc()) {
         if ($permission_data['FOLDER_PERM_COUNT'] > 0) {
             $user_perm_array[$forum_fid][$permission_data['FID']] = (double) $permission_data['PERM'];
         }
     }
     $sql = "SELECT GROUP_PERMS.GID, GROUP_PERMS.FORUM, GROUP_PERMS.FID, ";
     $sql .= "BIT_OR(GROUP_PERMS.PERM) AS PERM, COUNT(GROUP_PERMS.GID) AS USER_PERM_COUNT ";
     $sql .= "FROM GROUP_USERS INNER JOIN GROUP_PERMS USING (GID) ";
     $sql .= "WHERE GROUP_USERS.UID = '{$uid}' AND GROUP_PERMS.FORUM IN (0, {$forum_fid}) ";
     $sql .= "GROUP BY GROUP_PERMS.FORUM, GROUP_PERMS.FID";
     if (!($result = session::$db->query($sql))) {
         return $user_perm_array;
     }
     if ($result->num_rows == 0) {
         return $user_perm_array;
     }
     while ($permission_data = $result->fetch_assoc()) {
         if ($permission_data['USER_PERM_COUNT'] > 0) {
             if (isset($user_perm_array[$permission_data['FORUM']][$permission_data['FID']])) {
                 if (($user_perm_array[$permission_data['FORUM']][$permission_data['FID']] & USER_PERM_THREAD_MOVE) > 0) {
                     $permission_data['PERM'] = (double) $permission_data['PERM'] | USER_PERM_THREAD_MOVE;
                 }
             }
             $user_perm_array[$permission_data['FORUM']][$permission_data['FID']] = (double) $permission_data['PERM'];
         }
     }
     return $user_perm_array;
 }
예제 #4
0
function admin_forum_get_post_count($fid)
{
    if (!($db = db::get())) {
        return false;
    }
    if (!is_numeric($fid)) {
        return false;
    }
    if (!($table_prefix = forum_get_table_prefix($fid))) {
        return false;
    }
    $sql = "SELECT COUNT(PID) FROM `{$table_prefix}POST`";
    if (!($result = $db->query($sql))) {
        return false;
    }
    list($post_count) = $result->fetch_row();
    return $post_count;
}