liquid_feedback_frontend

diff app/main/event/_list.lua @ 414:699b9fa7bc36

Integrated new event system, splitted issues in open/closed, changed navigation
author bsw
date Sat Mar 10 16:57:49 2012 +0100 (2012-03-10)
parents
children 977c5374a120
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/app/main/event/_list.lua	Sat Mar 10 16:57:49 2012 +0100
     1.3 @@ -0,0 +1,174 @@
     1.4 +local global = param.get("global", atom.boolean)
     1.5 +local for_member = param.get("for_member", "table")
     1.6 +local for_unit = param.get("for_unit", "table")
     1.7 +local for_area = param.get("for_area", "table")
     1.8 +
     1.9 +local event_selector = Event:new_selector()
    1.10 +  :add_order_by("event.id DESC")
    1.11 +  :limit(25)
    1.12 +  :join("issue", nil, "issue.id = event.issue_id")
    1.13 +
    1.14 +if for_member then
    1.15 +  event_selector:add_where{ "event.member_id = ?", for_member.id }
    1.16 +elseif for_unit then
    1.17 +  event_selector:join("area", nil, "area.id = issue.area_id")
    1.18 +  event_selector:add_where{ "area.unit_id = ?", for_unit.id }
    1.19 +elseif for_area then
    1.20 +  event_selector:add_where{ "issue.area_id = ?", for_area.id }
    1.21 +elseif not global then
    1.22 +  event_selector:join("event_seen_by_member", nil, { "event_seen_by_member.id = event.id AND event_seen_by_member.seen_by_member_id = ?", app.session.member_id })
    1.23 +end
    1.24 +  
    1.25 +if app.session.member_id then
    1.26 +  event_selector
    1.27 +    :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", app.session.member.id } )
    1.28 +    :add_field("(_interest.member_id NOTNULL)", "is_interested")
    1.29 +    :left_join("delegating_interest_snapshot", "_delegating_interest", { "_delegating_interest.issue_id = issue.id AND _delegating_interest.member_id = ? AND _delegating_interest.event = issue.latest_snapshot_event", app.session.member.id } )
    1.30 +    :add_field("_delegating_interest.delegate_member_ids[1]", "is_interested_by_delegation_to_member_id")
    1.31 +    :add_field("_delegating_interest.delegate_member_ids[array_upper(_delegating_interest.delegate_member_ids, 1)]", "is_interested_via_member_id")
    1.32 +    :add_field("array_length(_delegating_interest.delegate_member_ids, 1)", "delegation_chain_length")
    1.33 +end
    1.34 +
    1.35 +--local filters = execute.load_chunk{module="issue", chunk="_filters.lua", params = { member = app.session.member }}
    1.36 +
    1.37 +--filters.content = function()
    1.38 +    
    1.39 +  ui.container{ attr = { class = "issues events" }, content = function()
    1.40 +
    1.41 +    local last_event_date
    1.42 +    for i, event in ipairs(event_selector:exec()) do
    1.43 +      if event.occurrence.date ~= last_event_date then
    1.44 +        ui.container{ attr = { class = "date" }, content = format.date(event.occurrence.date) }
    1.45 +        last_event_date = event.occurrence.date
    1.46 +      end
    1.47 +      local class = "issue"
    1.48 +      if event.is_interested then
    1.49 +        class = class .. " interested"
    1.50 +      elseif event.is_interested_by_delegation_to_member_id then
    1.51 +        class = class .. " interested_by_delegation"
    1.52 +      end
    1.53 +      ui.container{ attr = { class = class }, content = function()
    1.54 +
    1.55 +        ui.container { attr = { class = "issue_info" }, content = function()
    1.56 +        
    1.57 +          ui.container{ content = function()
    1.58 +            ui.link{
    1.59 +              attr = { class = "issue_id" },
    1.60 +              text = _("Issue ##{id}", { id = tostring(event.issue_id) }),
    1.61 +              module = "issue",
    1.62 +              view = "show",
    1.63 +              id = event.issue_id
    1.64 +            }
    1.65 +
    1.66 +            slot.put(" · ")
    1.67 +            ui.tag{ content = event.issue.area.name }
    1.68 +            slot.put(" · ")
    1.69 +            ui.tag{ content = event.issue.area.unit.name }
    1.70 +            slot.put(" · ")
    1.71 +            ui.tag{ content = event.issue.policy.name }
    1.72 +          end }
    1.73 +
    1.74 +          ui.container{ attr = { class = "issue_policy_info" }, content = function()
    1.75 +            if event.member_id then
    1.76 +              ui.link{
    1.77 +                content = function()
    1.78 +                  execute.view{
    1.79 +                    module = "member_image",
    1.80 +                    view = "_show",
    1.81 +                    params = {
    1.82 +                      member = event.member,
    1.83 +                      image_type = "avatar",
    1.84 +                      show_dummy = true,
    1.85 +                      class = "micro_avatar",
    1.86 +                      popup_text = text
    1.87 +                    }
    1.88 +                  }
    1.89 +                end,
    1.90 +                module = "member", view = "show", id = event.member_id
    1.91 +              }
    1.92 +              slot.put(" ")
    1.93 +              ui.link{
    1.94 +                text = event.member.name,
    1.95 +                module = "member", view = "show", id = event.member_id
    1.96 +              }
    1.97 +              slot.put(" · ") 
    1.98 +            end
    1.99 +            local event_name = event.event_name
   1.100 +            local event_image
   1.101 +            if event.event == "issue_state_changed" then
   1.102 +              if event.state == "discussion" then
   1.103 +                event_name = _"Discussion started"
   1.104 +                event_image = "new.png"
   1.105 +              elseif event.state == "verification" then
   1.106 +                event_name = _"Verification started"
   1.107 +                event_image = "lock.png"
   1.108 +              elseif event.state == "voting" then
   1.109 +                event_name = _"Voting started"
   1.110 +                event_image = "email_open.png"
   1.111 +              else
   1.112 +                event_name = event.state_name
   1.113 +              end
   1.114 +              if event_image then
   1.115 +                ui.image{ static = "icons/16/" .. event_image }
   1.116 +              end
   1.117 +            end
   1.118 +            ui.tag{ attr = { class = "event_name" }, content = event_name }
   1.119 +            slot.put(" · ") 
   1.120 +            ui.tag{ attr = { class = "time" }, content = format.time(event.occurrence) }
   1.121 +          end }
   1.122 +
   1.123 +        end }
   1.124 +        
   1.125 +        if event.suggestion_id then
   1.126 +          ui.container{ attr = { class = "suggestion" }, content = function()
   1.127 +            ui.link{
   1.128 +              text = event.suggestion.name,
   1.129 +              module = "suggestion", view = "show", id = event.suggestion_id
   1.130 +            }
   1.131 +          end }   
   1.132 +        end
   1.133 +
   1.134 +        ui.container{ attr = { class = "initiative_list" }, content = function()
   1.135 +          if not event.initiative_id then
   1.136 +            local initiatives_selector = Initiative:new_selector()
   1.137 +              :add_where{ "initiative.issue_id = ?", event.issue_id }
   1.138 +              :add_order_by("initiative.rank, initiative.supporter_count")
   1.139 +            execute.view{ module = "initiative", view = "_list", params = { 
   1.140 +              issue = event.issue,
   1.141 +              initiatives_selector = initiatives_selector,
   1.142 +              no_sort = true,
   1.143 +              limit = 3
   1.144 +            } }
   1.145 +          else
   1.146 +          local initiatives_selector = Initiative:new_selector()
   1.147 +            :add_where{ "initiative.id = ?", event.initiative_id }
   1.148 +            execute.view{ module = "initiative", view = "_list", params = { 
   1.149 +              issue = event.issue,
   1.150 +              initiatives_selector = initiatives_selector,
   1.151 +              no_sort = true,
   1.152 +              limit = 1
   1.153 +            } }
   1.154 +          end
   1.155 +        end }
   1.156 +
   1.157 +        --[[      
   1.158 +        if event.initiative_id then
   1.159 +          ui.container{ attr = { class = "initiative_id" }, content = event.initiative_id }
   1.160 +        end
   1.161 +        if event.draft_id then
   1.162 +          ui.container{ attr = { class = "draft_id" }, content = event.draft_id }
   1.163 +        end
   1.164 +        if event.suggestion_id then
   1.165 +          ui.container{ attr = { class = "suggestion_id" }, content = event.suggestion_id }
   1.166 +        end
   1.167 +  --]]
   1.168 +        
   1.169 +      end }
   1.170 +    end
   1.171 +
   1.172 +  end }
   1.173 +
   1.174 +--end
   1.175 +  
   1.176 +--filters.selector = event_selector
   1.177 +--ui.filters(filters)
   1.178 \ No newline at end of file

Impressum / About Us