contributions.tcl

Display the site contributions If user_id set it will be limited by that user otherwise all users. If limit set then only limit items will be displayed. If root_node_id exists then only return things under root node.

Location:
/packages/categories/lib/contributions.tcl

Related Files

[ hide source ] | [ make this the default ]

File Contents

ad_include_contract {
    Display the site contributions
    If user_id set it will be limited by that user otherwise all users.
    If limit set then only limit items will be displayed.
    If root_node_id exists then only return things under root node.
} {
    {user_id:integer ""}
    {category:integer ""}
    {suppress:multiple ""}
    {limit:naturalnum ""}
    {format:token table}
}

set root_node_id [ad_conn node_id]

foreach key $suppress {
    set hide($key) 1
}

if {$limit ne ""} {
    set limit " limit $limit"
}

set packages [subsite::util::packages -node_id $root_node_id]

lappend elements object_title {
    label {Title}
    display_template {<a href="/o/@content.object_id@">@content.title@</a>}
}

if {![info exists hide(pretty_name)]} { 
    lappend elements pretty_name {
        label {Type}
        display_template {<a href="/o/@content.object_id@">@content.object_type@</a>}
    }
}

lappend elements last_modified {
    label {Last update}
    display_template "@content.last_modified;noquote@"
    html {align right}
}

# lappend elements new {
#    label {New}
#    display_template "@content.new;noquote@"
#    html {align right}
#}

if {$user_id eq ""} {
    lappend elements name {
        label {Created by}
        display_template {<a href="@content.user_url@" title="Member page">@content.name@</a>}
    }
}

template::list::create \
    -name content \
    -multirow content \
    -key object_id \
    -elements $elements \
    -selected_format $format \
    -filters {
        user_id {}
    } \
    -formats {
        table { 
            label Table
            layout table
        }
        list { 
            label List
            layout list
            template {
                <div style="padding: 0 0 1em 0;"><listelement name="object_title"> \[<listelement name="pretty_name">\] - <listelement name="new"><br>
                <span style="color: \#ccc;">by <listelement name="name">, <listelement name="last_modified"></span></div>
            }
        } 
    } \
    -orderby {
        object_title {
            orderby lower(o.title)
        }
        pretty_name {
            orderby lower(t.pretty_name)
        }
        last_modified {
            orderby_asc {o.last_modified desc}
            orderby_desc {o.last_modified asc}
        }
        name {
            orderby_asc "lower(u.last_name),lower(u.first_names)"
            orderby_desc "lower(u.last_name) desc,lower(u.first_names) desc"
        }
    }

set now [lc_clock_to_ansi [clock seconds]]

set restrict {}

if {$user_id ne ""} {
    append restrict "\nand o.creation_user = :user_id"
}

if {$category ne ""} {
    append restrict "\nand exists (select 1 from category_object_map c where c.object_id = o.object_id and c.category_id = :category)"
}

if {$packages ne ""} {
    append restrict "\nand o.package_id in ([ns_dbquotelist $packages])"
}

# JCDXXX: TODO: need to get the dimension to display, need to find the right CoP, permissions
db_multirow -extend {url_one user_url new} content content "
    SELECT o.title, o.object_id, o.title, t.pretty_name as object_type, to_char(o.last_modified,'YYYY-MM-DD HH24:MI:SS') as last_modified, u.user_id, u.first_names || ' ' || u.last_name as name
      FROM acs_object_types t, acs_objects o
           left outer join cr_items i on (o.object_id = i.item_id)
           left outer join acs_users_all u on (u.user_id = o.creation_user)
     WHERE t.object_type = case when o.object_type = 'content_item' then i.content_type else o.object_type end
       and o.object_type in ('content_item','pinds_blog_entry','forums_forum','forums_message',
           'cal_item','bt_bug','bt_patch', 'news', 'faq', 'faq_q_and_a', 'bookshelf_book', 'job_posting','survey')
       and (o.object_type != 'content_item' or i.content_type in ('content_extlink','file_storage_object','pa_album','pa_photo','static_page','news','job', 'content_revision'))
       $restrict
   [template::list::orderby_clause -orderby -name "content"]$limit" {

       # TODO: JCDXXX - make this work in general.
       if {($object_id % 3) == 0} {
           set new {<span class="new" style="color: red">NEW</span>}
       } else { 
           set new {}
       }

       # TODO: JCDXXX - make this work in general.
       regsub {/www/cop1/static} $title {} title

       set last_modified [regsub -all { } [util::age_pretty -hours_limit 0 -mode_2_fmt "%X %a" -mode_3_fmt "%x" -timestamp_ansi $last_modified -sysdate_ansi $now] {\&nbsp;}]
       set user_url [acs_community_member_url -user_id $user_id]
       if {[catch {set url_one [acs_sc::invoke -error -contract FtsContentProvider -operation url -call_args [list $object_id] -impl $object_type]} errMsg]} {
           global errorCode
           set url_one $errorCode
       }
   }
# Local variables:
#    mode: tcl
#    tcl-indent-level: 4
#    indent-tabs-mode: nil
# End: