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