preliminary support for a TAL template engine
[mir.git] / templates / admin / FUNCTIONS.template
1 <include "EDITFUNCTIONS.template">
2
3 <function showAbsoluteLinkButton(anUrl, aLabel)>
4     <span class="link-box-div">
5   <a class="link-box" href="${utility.encodeHTML(anUrl)}">${aLabel}</a>
6     </span>
7 </function>
8 <function showButton(anUrl, aLabel)>
9   <call showAbsoluteLinkButton(config.actionRoot+"?"+anUrl, aLabel)>
10 </function>
11 <function showGETButton(anUrl, aLabel)>
12   <call showAbsoluteLinkButton(config.actionRoot+"?"+anUrl, aLabel)>
13 </function>
14 <function showPOSTButton(anUrl, aLabel)>
15   <call showGETButton(anUrl, aLabel)>
16 <comment>
17   <form method="POST" action="${utility.encodeHTML(config.actionRoot+"?"+anUrl)}"><input type="submit" class="majorbutton" value="${aLabel}"></form>
18 </comment>  
19 </function>
20
21
22 <assign TABLE_HEAD_CLASS          "table-head">
23 <assign TABLE_FOOT_CLASS          "table-foot">
24 <assign LIST_ROW_CLASS             "listrow1">
25 <assign LIST_ROW_CLASS_ALTERNATIVE "listrow2">
26
27 <function EntityTable(anEntityList, aDataKeys, aHeaders, aFrom, aTo, aCount, aShowDelete, aShowEdit, aModuleName)>
28   <assign nrColumns="0">
29   <list aHeaders as h>
30     <assign nrColumns=utility.increment(nrColumns)>
31   </list>
32   <if aShowDelete == "1" || aShowEdit == "1" >
33     <assign nrColumns=utility.increment(nrColumns)>
34   </if>
35
36   <table cellspacing="2" border="0">
37     <tr>
38       <list aHeaders as i>
39         <td class="${TABLE_HEAD_CLASS}">
40           <b>${i}</b> 
41         </td>
42       </list>
43       <if aShowDelete == "1" || aShowEdit == "1">
44         <td class="${TABLE_HEAD_CLASS}">
45           &nbsp;
46         </td> 
47       </if>
48     </tr>
49     <assign alternative="0">
50     
51     <list anEntityList as entry>
52       <if alternative=="0">
53         <assign alternative="1">
54         <tr class="${LIST_ROW_CLASS}">
55       <else>
56         <assign alternative="0">
57         <tr class="${LIST_ROW_CLASS_ALTERNATIVE}">
58       </if>
59         
60         <list aDataKeys as i>   
61             <td>
62               ${utility.prettyEncodeHTML(entry[i])}
63             </td>
64         </list>
65         <if aShowDelete == "1" || aShowEdit == "1" >
66           <td>
67             <if aShowDelete>
68             <a class="listcommand" href="${config.actionRoot}?module=${aModuleName}&do=delete&id=${entry.id}">${lang("delete")}</a>
69             </if>
70             <if aShowDelete == "1" && aShowEdit == "1">
71             | 
72             </if>
73             <if aShowEdit == "1">
74               <a class="listcommand" href="${config.actionRoot}?module=${aModuleName}&do=edit&id=${entry.id}">${lang("edit")}</a>
75             </if>
76           </td>
77         </if>
78       </tr>
79     </list>
80     
81     
82     <tr>    
83       <td colspan="${nrColumns}" class="${TABLE_FOOT_CLASS}">
84         ${aCount} ${lang("records")} / ${lang("show_from_to", aFrom, aTo)}
85       </td>
86     </tr>
87   
88   </table>
89 </function>
90
91
92 <comment>extra navigation</comment>
93 <function AddOrBack(module_name, module_jumpback, do_jumpback)>
94     <p>
95       <a class="link-box" href="${config.actionRoot}?module=${module_name}&do=add">[+] ${lang("add")}</a> &nbsp;
96       <a class="link-box" href="${config.actionRoot}?module=${module_jumpback}&do=${do_jumpback}">[&lt;] ${lang("back")} </a> &nbsp;
97       <a class="link-box" href="${config.actionRoot}">[&lt;&lt;&lt;] ${lang("head.start")}</a>
98   </p>
99 </function>
100
101 <function showAddOrBack(anAllowAdd, anAddModule, aBackModule, aBackMethod, )>
102     <p>
103       <if anAllowAdd == "1">
104         <a class="link-box" href="${config.actionRoot}?module=${anAddModule}&do=add">[+] ${lang("add")}</a> &nbsp;
105       </if>
106       <a class="link-box" href="${config.actionRoot}?module=${aBackModule}&do=${aBackMethod}">[&lt;] ${lang("back")} </a> &nbsp;
107 <comment>      <a class="link-box" href="${config.actionRoot}">[&lt;&lt;&lt;] ${lang("head.start")}</a></comment>
108   </p>
109 </function>
110
111 <function showBack(aBackUrl)>
112   <p><a class="link-box" href="${config.actionRoot}?${aBackUrl}">[&lt;] ${lang("back")} </a> &nbsp;</p>
113 </function>
114
115 <function PulldownTableRow (label, fieldname, entrieslist, keyfield, valuefield, value, langprefix)>
116   <tr>
117      <td align="right" class="table-left">
118        <b>${label}:</b>
119      </td>
120      <td class="listrow2">
121        <select name="${fieldname}">
122          <list entrieslist as a>
123            <option value="${a[keyfield]}" <if (a[keyfield] == value)>selected</if>><if langprefix>${lang(langprefix+a[valuefield])}<else>${a[valuefield]}</if></option>
124          </list>
125        </select>
126      </td>
127    </tr>
128 </function>   
129
130
131
132
133
134
135
136
137
138 <function TextInputTableRow (label, size, maxlength, fieldname, fieldcontent)>
139   <tr>
140     <td align="right" class="table-left">
141       <b>${label}:</b>
142     </td>
143     
144     <td class="listrow2">
145       <input type="text" size="${size}" maxlength="${maxlength}" name="${fieldname}" value="${utility.encodeHTML(fieldcontent)}">
146     </td>
147   </tr>
148 </function>
149
150 <function ReadonlyTextTableRow (label, fieldcontent)>
151   <tr>
152     <td align="right" class="table-left">
153       <b>${label}:</b>
154     </td>
155     
156     <td class="listrow2">
157       ${utility.encodeHTML(fieldcontent)}
158     </td>
159   </tr>
160 </function>
161
162 <function PasswordTextInputTableRow (label, size, maxlength, fieldname, fieldcontent)>
163   <tr>
164     <td align="right" class="table-left">
165       <b>${label}:</b>
166     </td>
167     
168     <td class="listrow2">
169       <input type="password" size="${size}" maxlength="${maxlength}" name="${fieldname}" value="${utility.encodeHTML(fieldcontent)}">
170     </td>
171   </tr>
172 </function>
173
174 <function TextInputTableRowLight (label, size, maxlength, fieldname, fieldcontent)>
175   <tr>
176     <td align="right" class="table-left-light">
177       <b>${label}:</b>
178     </td>
179     
180     <td class="listrow1">
181       <input type="text" size="${size}" maxlength="${maxlength}" name="${fieldname}" value="${utility.encodeHTML(fieldcontent)}">
182     </td>
183   </tr>
184 </function>
185
186 <function CheckboxTableRow (label, fieldname, fieldcontent )>
187   <call EditCheckboxNormal(label, fieldname, fieldcontent)>
188 <comment>
189   <tr>
190     <td align="right" valign="top" class="table-left">
191       <b>${label}:</b>
192     </td>
193     
194     <td class="listrow2">
195       <input type="checkbox" name="${fieldname}" value="1"<if fieldcontent=="1"> checked</if>>&nbsp;&nbsp;
196     </td>
197   </tr>
198 </comment>  
199 </function> 
200
201 <function TextAreaTableRow (label, hint, cols, rows, fieldname, fieldcontent )>
202   <tr>
203     <td align="right" valign="top" class="table-left">
204       <b>${label}:</b>
205       <if hint>
206         <br>
207         <span class="small">${hint}</span>      
208       </if>
209     </td>
210     
211     <td class="listrow2">
212       <textarea cols="${cols}" rows="${rows}" name="${fieldname}" wrap="virtual">${utility.encodeHTML(fieldcontent)}</textarea>
213     </td>
214   </tr>
215 </function>
216
217
218 <function TextAreaTableRowLight (label, hint, cols, rows, fieldname, fieldcontent )>
219   <tr>
220     <td align="right" valign="top" class="table-left-light">
221       <b>${label}:</b>
222       <if hint>
223         <br>
224         <span class="small">${hint}</span>      
225       </if>
226     </td>
227     
228     <td class="listrow1">
229       <textarea cols="${cols}" rows="${rows}" name="${fieldname}" wrap="virtual">${utility.encodeHTML(fieldcontent)}</textarea>
230     </td>
231   </tr>
232 </function>
233
234 <comment>complete search-form for contenentries, not sure if it works from everywhere</comment>
235 <function ContentSearch (aLayout)>
236
237       <form method="GET" action="${config.actionRoot}">
238         <input type="hidden" name="module" value="Content">
239         <input type="hidden" name="do" value="search">
240         <if selectarticleurl>
241           <input type="hidden" name="selectarticleurl" value="${utility.encodeHTML(selectarticleurl)}">
242         </if>
243          
244         <table border="0" cellpadding="2" cellspacing="3">
245           <tr <if !aLayout>class="bg-neutral"</if>>
246             <td <if aLayout>class="table-head"<else>class="small bg-neutral"</if> valign="bottom"> ${lang("contentsearch.value")}</td>
247             <td <if aLayout>class="table-head"<else>class="small bg-neutral"</if> valign="bottom"> ${lang("contentsearch.field")}</td>
248             <td <if aLayout>class="table-head"<else>class="small bg-neutral"</if> valign="bottom"> ${lang("contentsearch.publishedstate")}</td>
249             <td <if aLayout>class="table-head"<else>class="small bg-neutral"</if> valign="bottom"> ${lang("contentsearch.articletype")}</td>
250             <td <if aLayout>class="table-head"<else>class="small bg-neutral"</if> valign="bottom"> ${lang("contentsearch.order")}</td>
251       <td <if aLayout>class="table_head"<else>class="small bg_neutral"</if> valign="bottom"> &nbsp;</td>
252           </tr>
253           <tr>
254             <td <if aLayout>class="listrow2"</if>><input type="text" size="10" maxlength="20" name="searchvalue" value="${searchvalue}"></td>
255             <td <if aLayout>class="listrow2"</if>>
256                 <select name="searchfield">
257                   <option value="title"<if searchfield && searchfield=="title"> selected</if>>${lang("contentsearch.field.title")}</option>
258                   <option value="creator"<if searchfield && searchfield=="creator"> selected</if>>${lang("contentsearch.field.creator")}</option>
259                   <option value="contents"<if searchfield && searchfield=="content"> selected</if>>${lang("contentsearch.field.contents")}</option>
260                   <option value="creator_main_url"<if searchfield && searchfield=="creator_main_url"> selected</if>>${lang("contentsearch.field.creator_main_url")}</option>
261                   <option value="creator_email"<if searchfield && searchfield=="creator_email"> selected</if>>${lang("contentsearch.field.creator_email")}</option>
262                 </select>
263             </td>
264             <td <if aLayout>class="listrow2"</if>>
265                 <select name="searchispublished">
266                   <option value="">--</option>
267                   <option value="0" <if searchispublished && searchispublished=="0"> selected</if>>${lang("contentsearch.publishedstate.hidden")}</option>
268                   <option value="1" <if searchispublished && searchispublished=="1"> selected</if>>${lang("contentsearch.publishedstate.published")}</option>
269                 </select>
270             </td>
271             <td <if aLayout>class="listrow2"</if>>
272                 <select name="searcharticletype">
273                   <option value="">--</option>
274                   <list articletypes as at>
275                     <option value="${at.id}" <if searcharticletype && searcharticletype==at.id> selected</if>>${lang("articletypes."+at.name)}</option>
276                   </list>
277                 </select>
278             </td>
279             <td <if aLayout>class="listrow2"</if>>
280                 <select name="searchorder">
281                   <option value="datedesc" <if searchorder && searchorder=="datedesc"> selected</if>>${lang("contentsearch.order.datedesc")}</option>
282                   <option value="dateasc" <if searchorder && searchorder=="dateasc"> selected</if>>${lang("contentsearch.order.dateasc")}</option>
283                   <option value="title" <if searchorder && searchorder=="title"> selected</if>>${lang("contentsearch.order.title")}</option>
284                   <option value="creator" <if searchorder && searchorder=="creator"> selected</if>>${lang("contentsearch.order.creator")}</option>
285                 </select>
286             </td>
287             <td <if aLayout>class="listrow2"</if>>
288                 <input class="majorbutton" type="submit" name="search" value="${lang("contentsearch.searchbutton")}">
289             </td>
290           </tr>
291         </table>
292       </form>
293
294 </function>
295
296 <comment>browse function, only called if necessary</comment>
297 <function PrevNext (align)>
298   <if prevurl || nexturl>      
299     <p align="${align}">
300     <if prevurl>
301       <a class="link-box" href="${config.actionRoot}?${prevurl}"> [ &lt; ] ${lang("list.previous")}</a>&nbsp;&nbsp; 
302     </if>
303     <if nexturl>
304       <a  class="link-box" href="${config.actionRoot}?${nexturl}">   ${lang("list.next")} [ &gt; ]</a>
305     </if>
306     </p>
307   </if>
308 </function>
309
310
311 <comment>previous next links</comment>
312 <function showPrevNextLinks (aPreviousUrl, aNextUrl, anAlignment)>
313   <if aPreviousUrl || aNextUrl>      
314     <p align="${anAlignment}">
315     <if aPreviousUrl>
316       <a class="link-box" href="${config.actionRoot}?${aPreviousUrl}"> [ &lt; ] ${lang("list.previous")}</a>
317     </if>
318     <if aPreviousUrl && aNextUrl>      
319       &nbsp;&nbsp; 
320     </if>
321     <if aNextUrl>
322       <a class="link-box" href="${config.actionRoot}?${aNextUrl}">   ${lang("list.next")} [ &gt; ]</a>
323     </if>
324     </p>
325   </if>
326 </function>
327
328
329 <comment>multifunctional help - popup or not - big or small designs</comment>
330 <function Help (HelpUrl, popup, big )>
331   <if popup>
332     
333     <Script Language="JavaScript">
334       <!-- 
335       function openwindowlink() {
336       newwin = window.open("${HelpUrl}","windowname","height=320,width=320,top=200,left=300, scrollbars,resizable")
337       }
338       // end hiding -->
339     </Script>
340     
341     <a href="JavaScript: openwindowlink()">
342       <if big><span class="link-help"><else><span class="link-help-small"></if>
343         <if big> [ ? ] ${lang("help")}<else>[?]</if>
344       </span>
345     </a>    
346   
347   <else>
348     
349     <if big>
350       <a href="${HelpUrl}" target="_blank"><span class="link-help"> [ ? ] ${lang("help")}</span></a>
351     <else>
352       <a href="${HelpUrl}" target="_blank"><span class="link-help-small">[?]</span></a>   
353     </if>
354   </if>
355 </function>
356
357
358
359 <comment>functions to show media for an article/comment edit page</comment>
360 <function showArticleAttachments(anArticle)>
361   <call showAttachments(1, anArticle)>
362 </function>
363
364 <function showCommentAttachments(aComment)>
365   <call showAttachments(0, aComment)>
366 </function>
367
368 <function showAttachments(anIsArticle, anObject)>
369   <if anIsArticle=="1">
370     <assign objectKey="articleid">
371     <assign objectModule="Content">
372   <else>
373     <assign objectKey="commentid">
374     <assign objectModule="Comment">
375   </if>
376
377   <table cellspacing="2" cellpadding="2">
378     <tr>
379       <td class="table-head" colspan="2">
380         ${lang("content.attachments")}
381       </td>
382     </tr>
383
384     <tr>
385       <td align=right valign=top class="table-left">
386         ${lang("content.images")}: 
387       </td>
388       <td align="left" valign="top" class="listrow2">
389         <a href="${config.actionRoot}?module=Images&do=list&${objectKey}=${anObject.id}">[+] ${lang("content.addimage")}</a> |
390         <a href="${config.actionRoot}?module=Images&do=add&${objectKey}=${anObject.id}">${lang("content.uploadimage")}</a>
391       </td>
392     </tr>
393     <list anObject.to_all_media_images as m>
394       <tr>
395       <td align=right valign=top>
396         <a href="${config.actionRoot}?module=Images&do=edit&id=${m["id"]}"><img src="${config.actionRoot}?module=Images&do=getIcon&id=${m["id"]}" alt="edit" border="0"></a>&nbsp;
397       </td>
398       <td align="left" valign="top">
399         <a href="${config.actionRoot}?module=${objectModule}&do=dettach&${objectKey}=${anObject.id}&mid=${m["id"]}">[-] ${lang("delete")}</a>
400       </td>
401       </tr>
402     </list>
403     
404
405     <tr>
406       <td align=right valign=top class="table-left">
407       ${lang("content.audio")}:
408       </td>
409       <td align="left" valign="top" class="listrow2">
410         <a href="${config.actionRoot}?module=Audio&do=list&${objectKey}=${anObject.id}">[+] ${lang("content.addaudio")}</a> |
411         <a href="${config.actionRoot}?module=Audio&do=add&${objectKey}=${anObject.id}">${lang("content.uploadaudio")}</a>
412       </td>
413     </tr>
414     <list anObject.to_all_media_audio as m>
415       <tr>
416       <td align=right valign=top>
417         <a href="${config.actionRoot}?module=Audio&do=edit&id=${m["id"]}"><img src="${config.docRoot}/img/${m["big_icon"]}" alt="edit" border="0"></a>&nbsp;
418       </td>
419       <td align="left" valign="top">
420         <a href="${config.actionRoot}?module=${objectModule}&do=dettach&${objectKey}=${anObject.id}&mid=${m["id"]}">[-] ${lang("delete")}</a>
421       </td>
422       </tr>
423     </list>
424     
425
426     <tr>
427       <td align=right valign=top class="table-left">
428         ${lang("content.video")}:
429       </td>
430       <td  align="left" valign="top" class="listrow2">
431         <a href="${config.actionRoot}?module=Video&do=list&${objectKey}=${anObject.id}">[+] ${lang("content.addvideo")}</a> |
432         <a href="${config.actionRoot}?module=Video&do=add&${objectKey}=${anObject.id}">${lang("content.uploadvideo")}</a>
433       </td>
434     </tr>
435     <list anObject.to_all_media_video as m>
436       <tr>
437       <td align=right valign=top>
438         <a href="${config.actionRoot}?module=Video&do=edit&id=${m["id"]}"><img src="${config.docRoot}/img/${m["big_icon"]}" alt="edit" border="0"></a>&nbsp;        
439       </td>
440       <td align="left" valign="top">
441         <a href="${config.actionRoot}?module=${objectModule}&do=dettach&${objectKey}=${anObject.id}&mid=${m["id"]}">[-] ${lang("delete")}</a>
442       </td>
443       </tr>
444     </list>
445     
446     <tr>
447       <td align=right valign=top class="table-left">
448         ${lang("content.other")}:
449       </td>
450       <td align="left" valign="top" class="listrow2">
451       <a href="${config.actionRoot}?module=OtherMedia&do=list&${objectKey}=${anObject.id}">[+] ${lang("content.addother")}</a> |
452       <a href="${config.actionRoot}?module=OtherMedia&do=add&${objectKey}=${anObject.id}">${lang("content.uploadother")}</a>
453       </td>
454     </tr>
455     <list anObject.to_all_media_other as m>
456       <tr>
457       <td align=right valign=top">
458       <a href="${config.actionRoot}?module=OtherMedia&do=edit&id=${m["id"]}"><img src="${config.docRoot}/img/${m["big_icon"]}" alt="edit" border="0"></a>&nbsp;  
459       </td>
460       <td align="left" valign="top">
461         <a href="${config.actionRoot}?module=${objectModule}&do=dettach&${objectKey}=${anObject.id}&mid=${m["id"]}">[-] ${lang("delete")}</a>
462       </td>
463       </tr>
464     </list>
465   </table>
466 </function>  
467
468