| rev | 
   line source | 
| 
bsw/jbe@0
 | 
     1 local issue
 | 
| 
bsw/jbe@0
 | 
     2 local area
 | 
| 
bsw/jbe@0
 | 
     3 
 | 
| 
bsw/jbe@0
 | 
     4 local issue_id = param.get("issue_id", atom.integer)
 | 
| 
bsw/jbe@0
 | 
     5 if issue_id then
 | 
| 
bsw/jbe@0
 | 
     6   issue = Issue:new_selector():add_where{"id=?",issue_id}:single_object_mode():exec()
 | 
| 
bsw/jbe@0
 | 
     7   area = issue.area
 | 
| 
bsw/jbe@0
 | 
     8 
 | 
| 
bsw/jbe@0
 | 
     9 else
 | 
| 
bsw/jbe@0
 | 
    10   local area_id = param.get("area_id", atom.integer)
 | 
| 
bsw/jbe@0
 | 
    11   area = Area:new_selector():add_where{"id=?",area_id}:single_object_mode():exec()
 | 
| 
bsw/jbe@0
 | 
    12 end
 | 
| 
bsw/jbe@0
 | 
    13 
 | 
| 
bsw@904
 | 
    14 local polling = param.get("polling", atom.boolean)
 | 
| 
bsw@904
 | 
    15 
 | 
| 
bsw@901
 | 
    16 local policy_id = param.get("policy_id", atom.integer)
 | 
| 
bsw@901
 | 
    17 local policy
 | 
| 
bsw@901
 | 
    18 
 | 
| 
bsw@901
 | 
    19 if policy_id then
 | 
| 
bsw@901
 | 
    20   policy = Policy:by_id(policy_id)
 | 
| 
bsw@901
 | 
    21 end
 | 
| 
bsw@901
 | 
    22 
 | 
| 
bsw/jbe@0
 | 
    23 if issue_id then
 | 
| 
bsw@564
 | 
    24   ui.title(_"Add alternative initiative to issue")
 | 
| 
bsw/jbe@0
 | 
    25 else
 | 
| 
bsw@564
 | 
    26   ui.title(_"Create new issue")
 | 
| 
bsw/jbe@0
 | 
    27 end
 | 
| 
bsw/jbe@0
 | 
    28 
 | 
| 
bsw@903
 | 
    29 local preview = param.get("preview")
 | 
| 
bsw@903
 | 
    30 
 | 
| 
bsw@903
 | 
    31 if not preview and not issue_id and app.session.member:has_polling_right_for_unit_id(area.unit_id) then
 | 
| 
bsw@901
 | 
    32   ui.actions(function()
 | 
| 
bsw@903
 | 
    33     ui.link{ 
 | 
| 
bsw@903
 | 
    34       text = _"Standard policies",
 | 
| 
bsw@903
 | 
    35       module = "initiative", view = "new", params = {
 | 
| 
bsw@903
 | 
    36         area_id = area.id
 | 
| 
bsw@903
 | 
    37       }
 | 
| 
bsw@903
 | 
    38     }
 | 
| 
bsw@901
 | 
    39     for i, policy in ipairs(area.allowed_policies) do
 | 
| 
bsw@901
 | 
    40       if policy.polling  then
 | 
| 
bsw@903
 | 
    41         slot.put(" · ")
 | 
| 
bsw@901
 | 
    42         ui.link{ 
 | 
| 
bsw@901
 | 
    43           text = policy.name,
 | 
| 
bsw@901
 | 
    44           module = "initiative", view = "new", params = {
 | 
| 
bsw@901
 | 
    45             area_id = area.id, policy_id = policy.id        
 | 
| 
bsw@901
 | 
    46           }
 | 
| 
bsw@901
 | 
    47         }
 | 
| 
bsw@901
 | 
    48       end
 | 
| 
bsw@901
 | 
    49     end
 | 
| 
bsw@901
 | 
    50   end)
 | 
| 
bsw@901
 | 
    51 end
 | 
| 
bsw@901
 | 
    52 
 | 
| 
bsw/jbe@0
 | 
    53 ui.form{
 | 
| 
bsw/jbe@0
 | 
    54   module = "initiative",
 | 
| 
bsw/jbe@0
 | 
    55   action = "create",
 | 
| 
bsw/jbe@0
 | 
    56   params = {
 | 
| 
bsw/jbe@0
 | 
    57     area_id = area.id,
 | 
| 
bsw/jbe@0
 | 
    58     issue_id = issue and issue.id or nil
 | 
| 
bsw/jbe@0
 | 
    59   },
 | 
| 
bsw/jbe@0
 | 
    60   attr = { class = "vertical" },
 | 
| 
bsw/jbe@0
 | 
    61   content = function()
 | 
| 
bsw@278
 | 
    62     ui.field.text{ label = _"Unit",  value = area.unit.name }
 | 
| 
bsw/jbe@0
 | 
    63     ui.field.text{ label = _"Area",  value = area.name }
 | 
| 
bsw/jbe@52
 | 
    64     slot.put("<br />")
 | 
| 
bsw/jbe@0
 | 
    65     if issue_id then
 | 
| 
bsw/jbe@0
 | 
    66       ui.field.text{ label = _"Issue",  value = issue_id }
 | 
| 
bsw@904
 | 
    67     elseif policy then
 | 
| 
bsw@901
 | 
    68       ui.field.hidden{ name = "policy_id", value = policy.id }
 | 
| 
bsw@901
 | 
    69       ui.field.text{ label = _"Policy",  value = policy.name }
 | 
| 
bsw@901
 | 
    70       if policy.free_timeable then
 | 
| 
bsw@901
 | 
    71         local available_timings
 | 
| 
bsw@901
 | 
    72         if config.free_timing and config.free_timing.available_func then
 | 
| 
bsw@901
 | 
    73           available_timings = config.free_timing.available_func(policy)
 | 
| 
bsw@901
 | 
    74           if available_timings == false then
 | 
| 
bsw@901
 | 
    75             error("error in free timing config")
 | 
| 
bsw@901
 | 
    76           end
 | 
| 
bsw@901
 | 
    77         end
 | 
| 
bsw@901
 | 
    78         if available_timings then
 | 
| 
bsw@901
 | 
    79           ui.field.select{
 | 
| 
bsw@901
 | 
    80             label = _"Free timing",
 | 
| 
bsw@907
 | 
    81             name = "free_timing",
 | 
| 
bsw@901
 | 
    82             foreign_records = available_timings,
 | 
| 
bsw@901
 | 
    83             foreign_id = "id",
 | 
| 
bsw@903
 | 
    84             foreign_name = "name",
 | 
| 
bsw@903
 | 
    85             value = param.get("free_timing")
 | 
| 
bsw@901
 | 
    86           }
 | 
| 
bsw@901
 | 
    87         else
 | 
| 
bsw@903
 | 
    88           ui.field.text{ label = _"Free timing", name = "free_timing", value = param.get("free_timing") }
 | 
| 
bsw@901
 | 
    89         end
 | 
| 
bsw@901
 | 
    90       end
 | 
| 
bsw/jbe@0
 | 
    91     else
 | 
| 
bsw@10
 | 
    92       tmp = { { id = -1, name = _"Please choose a policy" } }
 | 
| 
bsw@10
 | 
    93       for i, allowed_policy in ipairs(area.allowed_policies) do
 | 
| 
bsw@904
 | 
    94         if not allowed_policy.polling then
 | 
| 
bsw@898
 | 
    95           tmp[#tmp+1] = allowed_policy
 | 
| 
bsw@898
 | 
    96         end
 | 
| 
bsw@10
 | 
    97       end
 | 
| 
bsw/jbe@0
 | 
    98       ui.field.select{
 | 
| 
bsw/jbe@0
 | 
    99         label = _"Policy",
 | 
| 
bsw/jbe@0
 | 
   100         name = "policy_id",
 | 
| 
bsw@10
 | 
   101         foreign_records = tmp,
 | 
| 
bsw/jbe@0
 | 
   102         foreign_id = "id",
 | 
| 
bsw@7
 | 
   103         foreign_name = "name",
 | 
| 
bsw@578
 | 
   104         value = param.get("policy_id", atom.integer) or area.default_policy and area.default_policy.id
 | 
| 
bsw/jbe@0
 | 
   105       }
 | 
| 
bsw@64
 | 
   106       ui.tag{
 | 
| 
bsw@64
 | 
   107         tag = "div",
 | 
| 
bsw@64
 | 
   108         content = function()
 | 
| 
bsw@64
 | 
   109           ui.tag{
 | 
| 
bsw@64
 | 
   110             tag = "label",
 | 
| 
bsw@64
 | 
   111             attr = { class = "ui_field_label" },
 | 
| 
bsw@64
 | 
   112             content = function() slot.put(" ") end,
 | 
| 
bsw@64
 | 
   113           }
 | 
| 
bsw@64
 | 
   114           ui.tag{
 | 
| 
bsw@64
 | 
   115             content = function()
 | 
| 
bsw@64
 | 
   116               ui.link{
 | 
| 
bsw@64
 | 
   117                 text = _"Information about the available policies",
 | 
| 
bsw@64
 | 
   118                 module = "policy",
 | 
| 
bsw@64
 | 
   119                 view = "list"
 | 
| 
bsw@64
 | 
   120               }
 | 
| 
bsw@64
 | 
   121               slot.put(" ")
 | 
| 
bsw@64
 | 
   122               ui.link{
 | 
| 
bsw@64
 | 
   123                 attr = { target = "_blank" },
 | 
| 
bsw@64
 | 
   124                 text = _"(new window)",
 | 
| 
bsw@64
 | 
   125                 module = "policy",
 | 
| 
bsw@64
 | 
   126                 view = "list"
 | 
| 
bsw@64
 | 
   127               }
 | 
| 
bsw@64
 | 
   128             end
 | 
| 
bsw@64
 | 
   129           }
 | 
| 
bsw@64
 | 
   130         end
 | 
| 
bsw@64
 | 
   131       }
 | 
| 
bsw/jbe@0
 | 
   132     end
 | 
| 
bsw@95
 | 
   133     
 | 
| 
bsw@898
 | 
   134     if issue and issue.policy.polling and app.session.member:has_polling_right_for_unit_id(area.unit_id) then
 | 
| 
bsw@907
 | 
   135       ui.field.boolean{ name = "polling", label = _"No admission needed", value = polling }
 | 
| 
bsw@898
 | 
   136     end
 | 
| 
bsw@898
 | 
   137     
 | 
| 
bsw@903
 | 
   138     if preview then
 | 
| 
bsw@95
 | 
   139       ui.heading{ level = 1, content = encode.html(param.get("name")) }
 | 
| 
bsw@95
 | 
   140       local discussion_url = param.get("discussion_url")
 | 
| 
bsw@95
 | 
   141       ui.container{
 | 
| 
bsw@95
 | 
   142         attr = { class = "ui_field_label" },
 | 
| 
bsw@95
 | 
   143         content = _"Discussion with initiators"
 | 
| 
bsw@95
 | 
   144       }
 | 
| 
bsw@95
 | 
   145       ui.tag{
 | 
| 
bsw@95
 | 
   146         tag = "span",
 | 
| 
bsw@95
 | 
   147         content = function()
 | 
| 
bsw@95
 | 
   148           if discussion_url:find("^https?://") then
 | 
| 
bsw@95
 | 
   149             if discussion_url and #discussion_url > 0 then
 | 
| 
bsw@95
 | 
   150               ui.link{
 | 
| 
bsw@95
 | 
   151                 attr = {
 | 
| 
bsw@95
 | 
   152                   class = "actions",
 | 
| 
bsw@95
 | 
   153                   target = "_blank",
 | 
| 
bsw@95
 | 
   154                   title = discussion_url
 | 
| 
bsw@95
 | 
   155                 },
 | 
| 
bsw@95
 | 
   156                 content = discussion_url,
 | 
| 
bsw@95
 | 
   157                 external = discussion_url
 | 
| 
bsw@95
 | 
   158               }
 | 
| 
bsw@95
 | 
   159             end
 | 
| 
bsw@95
 | 
   160           else
 | 
| 
bsw@95
 | 
   161             slot.put(encode.html(discussion_url))
 | 
| 
bsw@95
 | 
   162           end
 | 
| 
bsw@95
 | 
   163         end
 | 
| 
bsw@95
 | 
   164       }
 | 
| 
bsw@95
 | 
   165       ui.container{
 | 
| 
bsw@95
 | 
   166         attr = { class = "draft_content wiki" },
 | 
| 
bsw@95
 | 
   167         content = function()
 | 
| 
bsw@95
 | 
   168           slot.put(format.wiki_text(param.get("draft"), param.get("formatting_engine")))
 | 
| 
bsw@95
 | 
   169         end
 | 
| 
bsw@95
 | 
   170       }
 | 
| 
bsw@95
 | 
   171       slot.put("<br />")
 | 
| 
bsw@95
 | 
   172       ui.submit{ text = _"Save" }
 | 
| 
bsw@95
 | 
   173       slot.put("<br />")
 | 
| 
bsw@95
 | 
   174       slot.put("<br />")
 | 
| 
bsw@95
 | 
   175     end
 | 
| 
bsw/jbe@52
 | 
   176     slot.put("<br />")
 | 
| 
bsw@95
 | 
   177 
 | 
| 
bsw@95
 | 
   178     ui.field.text{
 | 
| 
bsw@95
 | 
   179       label = _"Title of initiative",
 | 
| 
bsw@95
 | 
   180       name  = "name",
 | 
| 
bsw@95
 | 
   181       value = param.get("name")
 | 
| 
bsw@95
 | 
   182     }
 | 
| 
bsw@95
 | 
   183     ui.field.text{
 | 
| 
bsw@95
 | 
   184       label = _"Discussion URL",
 | 
| 
bsw@95
 | 
   185       name = "discussion_url",
 | 
| 
bsw@95
 | 
   186       value = param.get("discussion_url")
 | 
| 
bsw@95
 | 
   187     }
 | 
| 
bsw/jbe@4
 | 
   188     ui.field.select{
 | 
| 
bsw/jbe@4
 | 
   189       label = _"Wiki engine",
 | 
| 
bsw/jbe@4
 | 
   190       name = "formatting_engine",
 | 
| 
bsw/jbe@4
 | 
   191       foreign_records = {
 | 
| 
bsw/jbe@4
 | 
   192         { id = "rocketwiki", name = "RocketWiki" },
 | 
| 
bsw/jbe@4
 | 
   193         { id = "compat", name = _"Traditional wiki syntax" }
 | 
| 
bsw/jbe@4
 | 
   194       },
 | 
| 
poelzi@133
 | 
   195       attr = {id = "formatting_engine"},
 | 
| 
bsw/jbe@4
 | 
   196       foreign_id = "id",
 | 
| 
bsw@95
 | 
   197       foreign_name = "name",
 | 
| 
bsw@95
 | 
   198       value = param.get("formatting_engine")
 | 
| 
bsw/jbe@4
 | 
   199     }
 | 
| 
poelzi@133
 | 
   200     ui.tag{
 | 
| 
poelzi@133
 | 
   201         tag = "div",
 | 
| 
poelzi@133
 | 
   202         content = function()
 | 
| 
poelzi@133
 | 
   203           ui.tag{
 | 
| 
poelzi@133
 | 
   204             tag = "label",
 | 
| 
poelzi@133
 | 
   205             attr = { class = "ui_field_label" },
 | 
| 
poelzi@133
 | 
   206             content = function() slot.put(" ") end,
 | 
| 
poelzi@133
 | 
   207           }
 | 
| 
poelzi@133
 | 
   208           ui.tag{
 | 
| 
poelzi@133
 | 
   209             content = function()
 | 
| 
poelzi@133
 | 
   210               ui.link{
 | 
| 
poelzi@133
 | 
   211                 text = _"Syntax help",
 | 
| 
poelzi@133
 | 
   212                 module = "help",
 | 
| 
poelzi@133
 | 
   213                 view = "show",
 | 
| 
poelzi@133
 | 
   214                 id = "wikisyntax",
 | 
| 
poelzi@133
 | 
   215                 attr = {onClick="this.href=this.href.replace(/wikisyntax[^.]*/g, 'wikisyntax_'+getElementById('formatting_engine').value)"}
 | 
| 
poelzi@133
 | 
   216               }
 | 
| 
poelzi@133
 | 
   217               slot.put(" ")
 | 
| 
poelzi@133
 | 
   218               ui.link{
 | 
| 
poelzi@133
 | 
   219                 text = _"(new window)",
 | 
| 
poelzi@133
 | 
   220                 module = "help",
 | 
| 
poelzi@133
 | 
   221                 view = "show",
 | 
| 
poelzi@133
 | 
   222                 id = "wikisyntax",
 | 
| 
poelzi@133
 | 
   223                 attr = {target = "_blank", onClick="this.href=this.href.replace(/wikisyntax[^.]*/g, 'wikisyntax_'+getElementById('formatting_engine').value)"}
 | 
| 
poelzi@133
 | 
   224               }
 | 
| 
poelzi@133
 | 
   225             end
 | 
| 
poelzi@133
 | 
   226           }
 | 
| 
poelzi@133
 | 
   227         end
 | 
| 
poelzi@133
 | 
   228       }
 | 
| 
bsw@95
 | 
   229     ui.field.text{
 | 
| 
bsw@95
 | 
   230       label = _"Draft",
 | 
| 
bsw@95
 | 
   231       name = "draft",
 | 
| 
bsw@95
 | 
   232       multiline = true, 
 | 
| 
bsw@95
 | 
   233       attr = { style = "height: 50ex;" },
 | 
| 
bsw@95
 | 
   234       value = param.get("draft")
 | 
| 
bsw@95
 | 
   235     }
 | 
| 
bsw@95
 | 
   236     ui.submit{ name = "preview", text = _"Preview" }
 | 
| 
bsw/jbe@0
 | 
   237     ui.submit{ text = _"Save" }
 | 
| 
bsw/jbe@0
 | 
   238   end
 | 
| 
bsw@907
 | 
   239 }
 |