threads-chunk.tcl

one forum view

Location:
/packages/forums/lib/message/threads-chunk.tcl
Author:
Ben Adida <ben@openforce.net>
Created:
2002-05-24
CVS ID:
$Id: threads-chunk.tcl,v 1.32.2.3 2023/03/20 13:28:49 antoniop Exp $

Related Files

[ hide source ] | [ make this the default ]

File Contents

ad_include_contract {
    one forum view

    @author Ben Adida (ben@openforce.net)
    @creation-date 2002-05-24
    @cvs-id $Id: threads-chunk.tcl,v 1.32.2.3 2023/03/20 13:28:49 antoniop Exp $
} {
    forum_id:object_type(forums_forum),notnull
    {orderby:token,notnull "last_child_post,desc"}
    {flush_p:boolean,notnull 0}
    {page_size:naturalnum,notnull 30}
    {base_url ""}
}

set package_id [ad_conn package_id]
set user_id [ad_conn user_id]
# Get forum data

forum::get -forum_id $forum_id -array forum

set useReadingInfo [forum::use_ReadingInfo_p]
if { $useReadingInfo } {
    set unread_or_new_query_clause [db_map unread_query]
    set unread_join [db_map unread_join]
} else {
    set unread_or_new_query_clause [db_map new_query]
    set unread_join ""
}

if {$moderate_p} {
    set replies reply_count
} else {
    set replies approved_reply_count
}

set actions [list]

# new postings are allowed if
# 0. The user has post-permissions
# 1. Users can create new threads or user is a moderator

if { $permissions(post_p) } {
    if { $permissions(moderate_p) || $forum(new_questions_allowed_p) } {
    lappend actions [_ forums.Post_a_New_Message] \
    [export_vars -base "${base_url}message-post" { forum_id }] [_ forums.Post_a_New_Message]
  }
}

if { $permissions(admin_p) && $package_id == $forum(package_id) } {
    lappend actions [_ forums.Administer] \
    [export_vars -base "${base_url}admin/forum-edit" {forum_id {return_url [ad_return_url]}}] [_ forums.Administer]
}

if { $permissions(moderate_p) && $forum(posting_policy) eq "moderated" } {
    lappend actions [_ forums.ManageModerate] \
    [export_vars -base "${base_url}moderate/forum" { forum_id }] [_ forums.ManageModerate]
}

if { $useReadingInfo } {
    lappend actions [_ forums.mark_all_as_read] \
    [export_vars -base "${base_url}mark-all-read" { forum_id }] {}
}

template::list::create \
    -name messages \
    -multirow messages \
    -page_size $page_size \
    -page_flush_p $flush_p \
    -page_query_name messages_select_paginate \
    -pass_properties {moderate_p useReadingInfo} \
    -actions $actions \
    -elements {
        subject {
            label "#forums.Subject#"
            display_template {
                <h2 class="forum-heading">
        <a href="@messages.message_url@" title="#forums.goto_thread_subject#">
                  <if @useReadingInfo;literal@ true>
                   <if @messages.unread_p;literal@ true>
                    <b>@messages.subject@</b>
                   </if>
                   <else>@messages.subject@</else>
                  </if>
                  <else>
                   <if @messages.new_p;literal@ true>
                    <b>@messages.subject@</b>
                   </if>
                   <else>@messages.subject@</else>
                  </else>
                 </a>
                </h2>
            }
        }
        state_pretty {
            label "\#forums.Moderate\#"
            hide_p {[expr {$moderate_p ne 1}]}
        }
        user_name {
            label "#forums.Author#"
            link_url_col user_url
        link_html {title "\#forums.show_history_user_name\#"}
        }
        n_messages {
            label "#forums.Replies#"
            display_col n_messages_pretty
            html {align right}
        }
        posting_date {
            label "#forums.First_Post#"
            display_col posting_date_pretty
        }
        last_child_post {
            label "#forums.Last_Post#"
            display_col last_child_post_pretty
        }
    } -orderby {
        posting_date {
            label "#forums.First_Post#"
            orderby posting_date
            default_direction desc
        }
        last_child_post {
            label "#forums.Last_Post#"
            orderby last_child_post
            default_direction desc
        }
        subject {
            label "#forums.Subject#"
            orderby upper(subject)
        }
        user_name {
            label "#forums.Author#"
            orderby {(select first_names || last_name
                      from persons where person_id = fm.user_id)}
            default_direction asc
        }
        n_messages {
            label "#forums.Replies#"
            orderby_asc {n_messages asc, posting_date desc}
            orderby_desc {n_messages desc, posting_date desc}
        }
    } -filters {
        forum_id {}
    }

set useScreenNameP [parameter::get -parameter "UseScreenNameP" -default 0]

db_multirow -extend {
    user_name
    screen_name
    last_child_post_pretty
    posting_date_pretty
    message_url
    user_url
    n_messages_pretty
    state_pretty
} messages messages_select {} {
    set screen_name [acs_user::get_user_info -user_id $user_id -element screen_name]
    set user_name   [person::name -person_id $user_id]

    if {[acs_user::registered_user_p -user_id $user_id]} {
        set user_url [export_vars -base "${base_url}user-history" { user_id }]
    }
    
    set last_child_post_ansi [lc_time_system_to_conn $last_child_post_ansi]
    set last_child_post_pretty [lc_time_fmt $last_child_post_ansi "%x %X"]
    #set last_child_post_pretty [lc_time_fmt $last_child_post_ansi "%Q %X"]

    set posting_date_ansi [lc_time_system_to_conn $posting_date_ansi]
    set posting_date_pretty [lc_time_fmt $posting_date_ansi "%x %X"]
    #set posting_date_pretty [lc_time_fmt $posting_date_ansi "%Q %X"]

    set message_url [export_vars -base "${base_url}message-view" { message_id }]
    if { $useScreenNameP } {
    set user_name $screen_name
    set user_url ""
    }
    set n_messages_pretty [lc_numeric $n_messages]

    switch -- $state {
        pending {
            set state_pretty [_ forums.Pending]
        }
        rejected {
            set state_pretty [_ forums.Rejected]
        }
        default {
            set state_pretty {}
        }
    }
}

if {[info exists alt_template] && $alt_template ne ""} {
    ad_return_template $alt_template
}

# Local variables:
#    mode: tcl
#    tcl-indent-level: 4
#    indent-tabs-mode: nil
# End: