*** empty log message ***
[nyc.indymedia.org.git] / etc / producer / producers.xml
1 <!--
2   This XML file defines a set of producers intended for a typical indymedia 
3   site:
4     - a start page
5     - a navigational bar
6     - topic pages
7     - a newswire archive
8     - a feature archive
9     - articles
10     - media
11 -->  
12
13 <producers>
14   <nodedefinition name="Language">
15     <parameters>
16       <string name="languagecondition" defaultvalue="code != 'ot'"/>
17       <string name="bundle" defaultvalue="bundles.producer" />
18       <node name="sub"/>    
19     </parameters>
20
21     <definition>
22       <List key="languages" table="language" selection="${languagecondition}" order="code"/>
23       <Enumerate key="language" table="language" selection="${languagecondition}" order="code">
24         <Resource bundle="${bundle}" key="lang" language="${language.code}"/>
25         <Define key="pathprefix" value="${language.code}" />
26         <Define key="languagepreference" value="${language.code}" />
27         <sub/>
28         <If condition="language.code=='en'">
29           <then>
30             <Define key="pathprefix" value="or" />
31             <Define key="languagepreference" value="" />
32             <sub/>
33           </then>
34         </If>
35       </Enumerate>
36     </definition>
37   </nodedefinition>
38
39 <nodedefinition name="Pull">
40     <parameters>
41       <string name="url"/>
42       <string name="blogname"/>
43       <string name="blogurl"/>
44       <string name="articletype"/>
45     </parameters>
46
47     <definition>
48       <Log message="Pulling 1.0 feed from ${blogname} at ${url}" type="info" />
49       <RSS key="feeditems" url="${url}" encoding="UTF-8" />
50       <Enumerate key="item" list="feeditems['rss:item']" >
51         <Define key="languagecode" value="ot" />
52         <If condition="item['dc:language']">
53           <then>
54             <Set key="languagecode" value="item['dc:language']"/>
55           </then>
56         </If>
57
58         <If condition="item['dc:source']">
59           <then>
60             <Set key="origin" value="item['dc:source']"/>
61           </then>
62           <else>
63             <Set key="origin" value="item.identifier"/>
64           </else>
65         </If>
66         
67         
68
69         <If condition="item['dcterms:hasPart']">
70           <then>
71             <Set key="haspartimg" value="'&lt;img align=&quot;right&quot; src=&quot;'++item['dcterms:hasPart'] ++'&quot; /&gt;' " />
72           </then>
73           <else>
74             <Set key="haspartimg" value="' '" />
75           </else>
76         </If>
77
78         <Set key="present" value="0" />
79         <Enumerate
80           key="article"
81           table="content"
82           selection="source='${utility.escapeJDBCString(origin)}'" limit="1">
83           <Set key="present" value="1" />
84         </Enumerate>
85         <If condition="present==0">
86           <then>
87             <Log message="  new entry from ${blogname}: ${item['rss:title']}" type="info" />
88              <CreateEntity
89                key="article"
90                table="content"
91
92                date="utility.datetime.formatDate(item['dc:date'], 'yyyyMMdd')"
93                publish_path="' '"
94                to_publisher="'0'"
95                is_produced="'0'"
96                is_published="'1'"
97                is_html="'1'"
98
99                source="origin"
100                to_article_type="articletype"
101
102                content_data="item['content:encoded']++' '"
103                creator_main_url="blogurl"
104                description="haspartimg++item['rss:description']++' '"
105                to_language="languageCodeToId(languagecode)"
106                title="item['rss:title']++''"
107                webdb_create="item['dc:date']"
108                creator="blogname"
109                comment="'Taken from ' ++ blogname"
110              />
111           </then>
112         </If>
113       </Enumerate>
114     </definition>
115   </nodedefinition>
116
117
118   <nodedefinition name="RSSChannel">
119     <parameters>
120       <string name="articleSelection"/>
121       <string name="extratables" defaultvalue="none" />
122       <integer name="limit" defaultvalue="15"/>
123       <string name="channelidentifier" defaultvalue=""/>
124       <string name="channelfilename"/>
125       <string name="channeltitle"/>
126       <string name="articleprefix" defaultvalue="${config['Producer.PublicationHost']}/or" />
127       <string name="iconprefix" defaultvalue="${config['Producer.PublicationHost']}/icon" />
128       <string name="channelpublisher" defaultvalue="${config['Mir.Name']}" />
129       <string name="encoding" defaultvalue="UTF-8" />
130       <string name="channeldescription" defaultvalue=""/>
131       <string name="generator" defaultvalue="/RSS.template" />
132     </parameters>
133
134     <definition>
135       <If condition="extratables == 'none' ">
136         <then>
137           <List key="articles" table="content c" selection="${articleSelection}" order = "c.webdb_create desc, c.date desc" limit="limit" />
138         </then>
139         <else>
140           <List key="articles" table="content c" selection="${articleSelection}" order = "c.webdb_create desc, c.date desc" limit="limit" extratables="${extratables}" />
141         </else>
142       </If>
143       <If condition="channeldescription==''">
144         <then>
145           <Define key="channeldescription" value="${channeltitle}"/>
146         </then>
147       </If>
148       <If condition="channelidentifier==''">
149         <then>
150           <Define key="channelidentifier" value="${config['Producer.PublicationHost']}/or/${channelfilename}"/>
151         </then>
152       </If>
153
154       <Generate
155          parameters="${encoding}"
156          generator="${generator}"
157          destination="${config.storageRoot}/${channelfilename}"/>
158     </definition>
159   </nodedefinition>
160
161   <nodedefinition name="RSSChannelBundle">
162     <parameters>
163       <string name="extratables" defaultvalue="none" />
164       <string name="selection" defaultvalue="c.is_published='1'" />  
165       <string name="basefilename" defaultvalue="main" />
166     </parameters>
167     <definition>
168       <!-- newswire -->
169       <RSSChannel
170         articleSelection="(c.to_article_type in (${articletype.newswire}) or (c.to_article_type=${articletype.translation} and c.to_original.to_articletype in (${articletype.newswire}))) and ${selection}"
171         channelfilename="${basefilename}-newswire.rss"
172         channeltitle="${config['Mir.Name']} ${basefilename} newswire"
173         limit="20"
174         extratables="${extratables}"
175       />
176       <RSSChannel
177         articleSelection="(c.to_article_type in (${articletype.newswire}) or (c.to_article_type=${articletype.translation} and c.to_original.to_articletype in (${articletype.newsire}))) and ${selection}"
178         channelfilename="${basefilename}-newswire-content.rss"
179         channeltitle="${config['Mir.Name']} ${basefilename} newswire"
180         limit="20"
181         generator="RSS-full.template"
182         extratables="${extratables}"
183       />    
184       <!-- features -->
185       <RSSChannel
186         articleSelection="(c.to_article_type in (${articletype.feature},${articletype.startspecial},${articletype.topicspecial}) or (c.to_article_type=${articletype.translation} and c.to_original.to_articletype in (${articletype.feature},${articletype.startspecial},${articletype.topicspecial}))) and ${selection}"
187         channelfilename="${basefilename}-features.rss"
188         channeltitle="${config['Mir.Name']} ${basefilename} features"
189         limit="20"
190         extratables="${extratables}"
191       />
192       <RSSChannel
193         articleSelection="(c.to_article_type in (${articletype.feature},${articletype.startspecial},${articletype.topicspecial}) or (c.to_article_type=${articletype.translation} and c.to_original.to_articletype in (${articletype.feature},${articletype.startspecial},${articletype.topicspecial}))) and ${selection}"
194         channelfilename="${basefilename}-features-content.rss"
195         channeltitle="${config['Mir.Name']} ${basefilename} features"
196         limit="20"
197         generator="RSS-full.template"
198         extratables="${extratables}"
199       />
200     </definition>
201   </nodedefinition>
202
203  
204   <producer name="articles">
205     <verbs>
206       <verb name="changed" default="1">
207         <Define key="verbcondition" value="(not is_produced) and to_article_type != ${articletype.static}"/>
208         <Set key="limit" value="10"/>
209       </verb>
210       <verb name="all">
211         <Define key="verbcondition" value="to_article_type != ${articletype.static}"/>
212         <Set key="limit" value="-1"/>
213       </verb>
214
215       <verb name="sample">
216         <Define key="verbcondition" value="to_article_type != ${articletype.static}"/>
217         <Set key="limit" value="10"/>
218       </verb>
219
220       <verb name="test" >
221         <Define key="verbcondition" value="(id&gt;=5000 and id&lt;7500 ) and to_article_type != ${articletype.static}"/>
222         <Set key="limit" value="2500"/>
223       </verb>
224
225
226     </verbs>
227     <body>
228       <Enumerate key="article" table="content" selection="${verbcondition}"
229                   limit="limit" order="webdb_create desc">
230         <Enumerate 
231             key="media" table="image" 
232             selection="exists (select * from content_x_media where media_id=images.id and content_id=${article.id})
233                or      exists (select * from comment_x_media, comment
234                            where comment_id = comment.id and media_id=images.id and comment.to_media=${article.id})"
235             order="id desc">
236             
237            <GenerateMedia key="media" />
238         </Enumerate>
239         <Enumerate 
240             key="media" table="video" 
241             selection="exists (select * from content_x_media where media_id=video.id and content_id=${article.id})
242                or      exists (select * from comment_x_media, comment
243                            where comment_id = comment.id and media_id=video.id and comment.to_media=${article.id})"
244             order="id desc">
245            <GenerateMedia key="media" />
246         </Enumerate>
247         <Enumerate 
248             key="media" table="audio" 
249             selection="exists (select * from content_x_media where media_id=audio.id and content_id=${article.id})
250                or      exists (select * from comment_x_media, comment
251                                        where comment_id = comment.id and media_id=audio.id and comment.to_media=${article.id})"
252             order="id desc">
253             
254            <GenerateMedia key="media" />
255         </Enumerate>
256         
257       
258         <Enumerate 
259             key="media" table="otherMedia" 
260             selection="exists (select * from content_x_media where media_id=other_media.id and content_id=${article.id})
261                or      exists (select * from comment_x_media, comment
262                                        where comment_id = comment.id and media_id=other_media.id and comment.to_media=${article.id})"
263             order="id desc">
264             
265            <GenerateMedia key="media" />
266         </Enumerate>
267
268
269               <List key="topics" table="topic t" extratables="content_x_topic ctx"
270                 selection="ctx.content_id = ${article.id} AND ctx.topic_id = t.id"  />
271                    <If condition="utility.listSize(topics) > 0">
272                    <then>
273                         <Log message="I have a topic list with ${utility.listSize(topics)}" />
274                     </then>
275                    </If>
276         <If condition="article.is_published == '1'">
277           <then>
278             <Language>
279               <Generate 
280                 generator="/article.template" 
281                 destination="${config.storageRoot}/${pathprefix}/${article.date.formatted.yyyy}/${article.date.formatted.MM}/${article.id}.html"/>
282              </Language>
283              <Generate 
284                 generator="/languagebar.template" 
285                 destination="${config.storageRoot}/languagebar/${article.to_original.date.formatted.yyyy}/${article.to_original.date.formatted.MM}/${article.to_original.id}.html"/>    
286              <IndexContent key="article" pathToIndex="${config['IndexPath']}"/>
287           </then>
288           <else>
289             <UnIndexContent key="article" pathToIndex="${config['IndexPath']}"/>
290           </else>
291         </If>
292         <MarkContent key="article"/>            
293       </Enumerate>
294     </body>
295   </producer>  
296
297   <producer name="staticpages">
298     <verbs>
299       <verb name="changed" default="1">
300         <Define key="verbcondition" value="(not is_produced) and to_article_type = ${articletype.static}"/>
301         <Set key="limit" value="10"/>
302       </verb>
303       <verb name="all">
304         <Define key="verbcondition" value="to_article_type = ${articletype.static}"/>
305         <Set key="limit" value="-1"/>
306       </verb>
307     </verbs>
308
309     <body>
310       <Enumerate key="article" table="content" selection="${verbcondition}"
311                   limit="limit" order="webdb_create desc">
312         <Enumerate 
313             key="media" table="image" 
314             selection="exists (select * from content_x_media where media_id=images.id and content_id=${article.id})"
315             order="id desc">
316             
317            <GenerateMedia key="media" />
318         </Enumerate>
319         <Enumerate 
320             key="media" table="video" 
321             selection="exists (select * from content_x_media where media_id=video.id and content_id=${article.id})"
322             order="id desc">
323
324            <GenerateMedia key="media" />
325         </Enumerate>
326         <Enumerate 
327             key="media" table="audio" 
328             selection="exists (select * from content_x_media where media_id=audio.id and content_id=${article.id})"
329             order="id desc">
330             
331            <GenerateMedia key="media" />
332         </Enumerate>
333         <Enumerate 
334             key="media" table="otherMedia" 
335             selection="exists (select * from content_x_media where media_id=other_media.id and content_id=${article.id})"
336
337             order="id desc">
338             
339            <GenerateMedia key="media" />
340         </Enumerate>
341         <List key="topics" table="topic t" extratables="content_x_topic ctx"
342                 selection="ctx.content_id = ${article.id} AND ctx.topic_id = t.id"  />
343
344         <If condition="article.is_published == '1'">
345           <then>
346             <Language>
347               <Generate 
348                 generator="/article.template" 
349                 destination="${config.storageRoot}/${pathprefix}/static/${article.edittitle}.html"/>
350              </Language>
351
352              <Generate 
353                 generator="/languagebar.template" 
354                 destination="${config.storageRoot}/languagebar/${article.to_original.date.formatted.yyyy}/${article.to_original.date.formatted.MM}/${article.to_original.id}.html"/>    
355              <IndexContent key="article" pathToIndex="${config['IndexPath']}"/>
356           </then>
357           <else>
358             <UnIndexContent key="article" pathToIndex="${config['IndexPath']}"/>
359           </else>
360         </If>
361         <MarkContent key="article"/>            
362       </Enumerate>
363     </body>
364   </producer>
365
366   <producer name="navigation">
367     <verbs>
368       <verb name="generate" default="1" description="generates the left column"/>
369     </verbs>
370     <body>
371       <Language>
372         <Generate 
373             generator="/navigation.template" 
374             destination="${config.storageRoot}/${pathprefix}/navigation.html"/>
375       </Language>
376     </body>
377   </producer>
378   
379   <producer name="staticimages">
380     <verbs>
381       <verb name="generate" default="1" description="copies all the static image files into place"/>
382     </verbs>
383     <body>
384       <CopyDir destination="img" source="etc/producer/images"/>
385     </body>
386   </producer>
387   
388   <producer name="newswirearchive">
389     <verbs>
390       <verb name="new">
391         <Set key="pages" value="3"/>
392       </verb>
393       <verb name="all">
394         <Set key="pages" value="-1"/>
395       </verb>
396     </verbs>
397     <body>
398         <Define key="docSuffix" value=".html"/>
399         <Define key="storageSuffix" value=".html"/>
400
401         <Batch key="articles" infokey="batch" table="content"
402                process="pages" batchsize="20" minbatchsize="10"
403                selection="is_published='1' and to_article_type = ${articletype.newswire}"
404                order="webdb_create asc">
405           <batches>
406             <Language>
407               <Define key="pagePrefix" value="${pathprefix}/newswire/archive"/>
408               <Define key="storagePrefix" value="${config[&quot;Producer.StorageRoot&quot;]}/${pagePrefix}"/>
409               <Define key="docPrefix" value="${config[&quot;Producer.DocRoot&quot;]}/${pagePrefix}"/>
410
411               <Generate
412                   generator="newswirearchive.template"
413                   destination="${storagePrefix}${batch.current.identifier}${storageSuffix}"/>
414
415             </Language>
416           </batches>
417           <batchlist>
418             <Language>
419               <Define key="pagePrefix" value="${pathprefix}/newswire/archive"/>
420               <Define key="storagePrefix" value="${config[&quot;Producer.StorageRoot&quot;]}/${pagePrefix}"/>
421               <Define key="docPrefix" value="${config[&quot;Producer.DocRoot&quot;]}/${pagePrefix}"/>
422               <Generate
423                   generator="batchnav.template"
424                   destination="${storagePrefix}nav${storageSuffix}"/>
425             </Language>
426           </batchlist>
427         </Batch>
428     </body>
429   </producer>
430
431   <producer name="featurearchive">
432     <verbs>
433       <verb name="new">
434         <Set key="pages" value="3"/>
435       </verb>
436       <verb name="all">
437         <Set key="pages" value="-1"/>
438       </verb> 
439     </verbs>
440     <body>
441         <Define key="docSuffix" value=".html"/>
442         <Define key="storageSuffix" value=".html"/>
443         
444         <Batch key="articles" infokey="batch" table="content" 
445                process="pages" batchsize="20" minbatchsize="10"
446                selection="is_published='1' and to_article_type in (${articletype.feature}, ${articletype.startspecial})"
447                order="webdb_create asc">
448           <batches>
449             <Language>
450               <Define key="pagePrefix" value="${pathprefix}/feature/archive"/>
451               <Define key="storagePrefix" value="${config[&quot;Producer.StorageRoot&quot;]}/${pagePrefix}"/>
452               <Define key="docPrefix" value="${config[&quot;Producer.DocRoot&quot;]}/${pagePrefix}"/>
453
454               <Generate 
455                   generator="featurearchive.template" 
456                   destination="${storagePrefix}${batch.current.identifier}${storageSuffix}"/>
457
458             </Language>
459           </batches>
460           <batchlist>
461             <Language>
462               <Define key="pagePrefix" value="${pathprefix}/feature/archive"/>
463               <Define key="storagePrefix" value="${config[&quot;Producer.StorageRoot&quot;]}/${pagePrefix}"/>
464               <Define key="docPrefix" value="${config[&quot;Producer.DocRoot&quot;]}/${pagePrefix}"/>
465               <Generate 
466                   generator="batchnav.template" 
467                   destination="${storagePrefix}nav${storageSuffix}"/>
468             </Language>
469           </batchlist>
470         </Batch>
471     </body>
472   </producer>
473
474   <producer name="topicpages">
475     <verbs>
476       <verb name="new">
477         <Set key="_topics" value="-1"/>
478         <Set key="pages" value="3"/>
479       </verb>
480       <verb name="all">
481         <Set key="_topics" value="-1"/>
482         <Set key="pages" value="-1"/>
483       </verb> 
484       <verb name="sample">
485         <Set key="_topics" value="2"/>
486         <Set key="pages" value="4"/>
487       </verb> 
488     </verbs>
489     <body>
490       <Enumerate key="topic" table="topic">
491         <Define key="docSuffix" value=".html"/>
492         <Define key="storageSuffix" value=".html"/>
493         
494         <Log message="topic = ${topic.title}" />
495         <List key="special" table="content c" 
496           selection="c.is_published='1' and c.to_article_type = ${articletype.topicspecial} and c.id=cxt.content_id and cxt.topic_id = ${topic.id}"
497           order = "webdb_create desc" limit="1"
498           extratables="content_x_topic cxt"/>
499       
500         <Batch key="articles" infokey="batch" table="content c" 
501                process="pages" batchsize="20" minbatchsize="10"
502                selection="c.is_published='1' and c.to_article_type in (${articletype.newswire}, ${articletype.feature}) and c.id=cxt.content_id and cxt.topic_id = ${topic.id}"
503                order="webdb_create asc" extratables="content_x_topic cxt">
504           <batches>
505             <Language>
506               <Define key="pagePrefix" value="${pathprefix}/${topic.filename}/archive"/>
507               <Define key="storagePrefix" value="${config[&quot;Producer.StorageRoot&quot;]}/${pagePrefix}"/>
508               <Define key="docPrefix" value="${config[&quot;Producer.DocRoot&quot;]}/${pagePrefix}"/>
509                   <Log message="topic now = ${topic.title}" />
510
511               <Generate 
512                   generator="topicpage.template" 
513                   destination="${storagePrefix}${batch.current.identifier}${storageSuffix}"/>
514
515             </Language>
516           </batches>
517           <batchlist>
518             <Language>
519               <Define key="pagePrefix" value="${pathprefix}/${topic.filename}/archive"/>
520               <Define key="storagePrefix" value="${config[&quot;Producer.StorageRoot&quot;]}/${pagePrefix}"/>
521               <Define key="docPrefix" value="${config[&quot;Producer.DocRoot&quot;]}/${pagePrefix}"/>
522               <Generate 
523                   generator="batchnav.template" 
524                   destination="${storagePrefix}nav${storageSuffix}"/>
525             </Language>
526           </batchlist>
527         </Batch>
528       </Enumerate>
529     </body>
530   </producer>
531
532
533   <producer name="opnewswireinclude">
534     <verbs>
535       <verb name="generate" default="1" description="Generates the op newswire"/>
536     </verbs>
537 <body>
538 <Set key="whichnewswire" value="Open Publishing News" />
539       <List key="newswire" table="content" limit="20"
540         selection="is_published=true and to_article_type=${articletype.newswire}"
541         order="webdb_create desc"/>
542       <Language>
543         <Generate 
544             generator="/newswireinclude.template" 
545             destination="${config.storageRoot}/${pathprefix}/newswireinclude.html"/>
546       </Language>
547
548
549 </body>
550 </producer>
551
552   <producer name="rssnewswireinclude">
553     <verbs>
554       <verb name="generate" default="1" description="Generates the rss newswire"/>
555     </verbs>
556 <body>
557 <Set key="whichnewswire" value="RSS Publishing News" />
558       <List key="newswire" table="content" limit="20"
559         selection="is_published=true and to_article_type=${articletype.communityrssarticle}"
560         order="webdb_create desc"/>
561       <Language>
562         <Generate 
563             generator="/newswireinclude.template" 
564             destination="${config.storageRoot}/${pathprefix}/rssnewswireinclude.html"/>
565       </Language>
566
567
568 </body>
569 </producer>
570
571
572   
573   <producer name="startpage">
574     <verbs>
575       <verb name="generate" default="1" description="Generates the startpage"/>
576     </verbs>
577
578     <body>
579       <List key="startspecial" table="content" limit="1"
580         selection="is_published=true and to_article_type=${articletype.startspecial}"
581         order="webdb_create desc"/>
582                                         
583       <List key="features" table="content" limit="5" 
584         selection="is_published=true and to_article_type in (${articletype.feature},${articletype.promotedcommunityarticle},${articletype.promotednewswire})"
585         order="webdb_create desc"/>
586
587       <List key="communityrssarticles" table="content" limit="10" 
588         selection="is_published=true and to_article_type in (${articletype.communityrssarticle},${articletype.promotedcommunityarticle})"
589         order="webdb_create desc"/>
590
591       <List key="newswire" table="content" limit="20"
592         selection="is_published=true and to_article_type=${articletype.newswire}"
593         order="webdb_create desc"/>
594         
595       <List key="mostcomments"
596                   table="content c"
597                   extratables="comment cm"
598                   selection="c.webdb_create > NOW()-'2 years'::interval and c.is_published=true and c.id=cm.to_media group by c.id,c.title,
599                                          c.subtitle,c.edittitle,c.date,c.creator,c.creator_main_url,c.creator_email,c.creator_address,c.creator_phone,c.description,
600                                          c.comment,c.source,c.is_published,c.is_produced,c.to_publisher,c.to_language,c.to_rights,c.webdb_create,c.webdb_lastchange,
601                                          c.content_data,c.is_html,c.to_article_type,c.to_content,c.keywords,c.to_locking_user"
602                           order="count(cm.id) desc"
603                           limit="3"
604                     />    
605                 
606         
607       <List key="breakingnews" table="breakingNews" limit="10"
608          order="webdb_create desc"/>
609         
610       <Language>
611         <Generate 
612             generator="/startpage.template" 
613             destination="${config.storageRoot}/${pathprefix}/index.html"/>
614       </Language>
615     </body>
616   </producer>  
617   
618   <producer name="synchronization">
619     <verbs>
620       <verb name="run" default="1" description="Synchronizes the publication site with the production site"/>
621     </verbs>
622
623     <body>
624       <If condition="config['Rsync'] in ('1', 'y', 'yes', 'Y')">
625         <then>
626           <Execute command="${config['Rsync.Script.Path']}"/>
627         </then>
628       </If>
629     </body>
630   </producer>  
631   
632   
633   <producer name="media">
634     <verbs>
635       <verb name="new" default="1">
636         <Define key="verbcondition" value="(not is_produced)"/>
637         <Set key="limit" value="10"/>
638       </verb>
639       <verb name="all">
640         <Define key="verbcondition" value=""/>
641         <Set key="limit" value="-1"/>
642       </verb>
643
644       <verb name="sample">
645         <Define key="verbcondition" value=""/>
646         <Set key="limit" value="10"/>
647       </verb>
648     </verbs>
649     <body>
650       <Enumerate 
651           key="media" table="image" 
652           selection="${verbcondition}"
653           limit="limit" 
654           order="webdb_create desc">
655           
656          <GenerateMedia key="media" />
657       </Enumerate>
658       <Enumerate 
659           key="media" table="video" 
660           selection="${verbcondition}"
661           limit="limit" 
662           order="webdb_create desc">
663           
664          <GenerateMedia key="media" />
665       </Enumerate>
666       <Enumerate 
667           key="media" table="audio" 
668           selection="${verbcondition}"
669           limit="limit" 
670           order="webdb_create desc">
671           
672          <GenerateMedia key="media" />
673       </Enumerate>
674       <Enumerate 
675           key="media" table="otherMedia" 
676           selection="${verbcondition}"
677           limit="limit" 
678           order="webdb_create desc">
679           
680          <GenerateMedia key="media" />
681       </Enumerate>
682     </body>
683   </producer>  
684
685   <producer name="syndication">
686     <verbs>
687       <verb name="generate" />
688     </verbs>
689     <body>
690       <!-- the main features and newswire -->
691       <RSSChannelBundle />
692       
693       <!-- the topic features and newswires -->
694       <Enumerate key="topic" table="topic">
695         <RSSChannelBundle
696           basefilename="${topic.filename}"
697           selection="c.id=cxt.content_id and cxt.topic_id = ${topic.id}"
698           extratables="content_x_topic cxt"
699         />
700       </Enumerate>
701       
702       
703
704     </body>
705
706   </producer>
707
708   <producer name="radicalendar">
709     <verbs>
710       <verb name="pull" />
711     </verbs>
712     <body>
713       <!-- groupname you will see as the value of "group" in the url for your radicalendar page, -->
714       <!--      gmtoffset is in minutes                                                          -->
715       <Radicalendar key="calendar" groupname="_imc" gmtoffset="60"  />
716       <Generate 
717         generator="/radicalendar.template" 
718         destination="${config.storageRoot}/calendarinclude.html"/>
719
720
721     </body>
722   </producer>
723
724
725   <producer name="update">
726     <verbs>
727       <verb name="templates" description="updates templates and bundles">
728         <Define key="command" value="/usr/bin/rsync -rb --include=*/ --include=*.template  /var/lib/mir/nyc/mir/etc/ /var/lib/mir/nyc/mir/bin/mir/WEB-INF/etc/"/>
729       </verb>
730     </verbs>
731
732     <body>
733       <Execute command="${command}"/>
734     </body>
735   </producer>
736
737
738
739
740
741  <producer name="generatefpincludes">
742    <verbs>
743      <verb name="doit" />
744    </verbs>
745    <body>
746
747         <Set key="counter" value="1"/>
748       <Enumerate key="fpimage" table="image" selection="to_media_folder=8 and is_published=true" >
749         <Log message="generating include for image id: ${fpimage.id}" type="info" />
750
751           <Generate
752                 generator="/fpinclude.template"
753                 destination="${config.storageRoot}/fpincludes/${fpimage.id}.inc" />
754        <Set key="counter" value="counter+1" />
755       </Enumerate>
756
757
758            <List key="fpincludes" table="image" selection="to_media_folder=8 and is_published=true" />
759                 <Generate
760                         generator="/fpmapping.template"
761                         destination="${config.storageRoot}/fpincludes/map.txt" />
762
763     </body>
764   </producer>
765
766
767
768
769  <!-- generates a count for each topic -->
770  
771  <!-- TODO: add date limit when we actually are going live with this -->        
772  <producer name="generateTopicCounts"> 
773  <verbs>
774         <verb name="doit" />
775  </verbs>
776  <body>
777         <FreeQuery key="topicCounts" query=" SELECT count(x.content_id) as count, t.title, t.filename FROM topic as t LEFT OUTER JOIN content_x_topic 
778                                                                                  as x ON (t.id=x.topic_id) LEFT OUTER JOIN content as c ON (c.id=x.content_id) 
779                                                                                  WHERE c.webdb_create > NOW()-'1 day'::interval AND  t.archiv_url = 'Category' GROUP BY t.title , t.filename ORDER BY t.title"
780                    type="set"/>
781         <Language>          
782         <Generate generator="/topiccount.template"
783                 destination="${config.storageRoot}/${pathprefix}/topiccount.html" />
784         </Language>
785   </body>
786   </producer>
787                 
788
789
790  <producer name="generateRandomTopics">
791   <verbs>
792     <verb name="doit" />
793   </verbs>
794   <body>
795         <Set key="counter" value="1"/>
796         
797         <Enumerate key="category" table="topic t" extratables="topic t2"
798                 selection="t.id=t2.id AND t.archiv_url = 'Subcategory' AND (SELECT count(*) from content_x_topic where topic_id = t.id) > 0" order="RANDOM()" limit="10">
799         
800         <Log message="Getting Last 5 articles for category: ${category.title} - counter: ${counter}" />
801         <Define key="topictitle" value="${category.title}" />
802         <Define key="topicfile" value="${category.filename}" /> 
803         
804         <List key="randomarticles" table="content"
805                 selection ="id in (select content_id from content_x_topic where topic_id = ${category.id})" order="date DESC"
806                 limit="3" />
807         <Language>      
808         <Generate
809                 generator="/randomcategory.template"
810                 destination="${config.storageRoot}/${pathprefix}/randomcats/random${counter}.html" />        
811         </Language>
812         
813         <Set key="counter" value="counter+1" />
814     </Enumerate>
815   </body>
816  </producer>
817                           
818  <producer name="getlocalblogs">
819    <verbs>
820      <verb name="doit" />
821    </verbs>
822    <body>
823       <Enumerate key="article" table="content" selection="to_article_type in(${articletype.communityrssfeed}) and is_published=true"  order="webdb_create desc">
824         <Log message="Pulling 1.0 feed from ${article.title} at ${article.source}" type="info" />
825         <Pull
826           url="${article.source}"
827           articletype="${articletype.communityrssarticle}"
828           blogurl="${article.creator_main_url}"
829           blogname="${article.title}"
830         />
831       </Enumerate>
832     </body>
833   </producer>
834
835   <producer name="footer">
836     <verbs>
837       <verb name="generate" default="1" description="generates the default footer"/>
838     </verbs>
839     <body>
840       <Language>
841         <Generate
842             generator="/footer.template"
843             destination="${config.storageRoot}/${pathprefix}/footer.html"/>
844       </Language>
845     </body>
846   </producer>
847
848
849   <producer name="headArticle">
850     <verbs>
851       <verb name="generate" default="1" description="generates the article html head"/>
852     </verbs>
853     <body>
854       <Language>
855         <Generate
856             generator="/head.article.template"
857             destination="${config.storageRoot}/${pathprefix}/head.article.html"/>
858       </Language>
859     </body>
860   </producer>
861   
862 </producers>
863
864