*** 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)"/>
208         <Set key="limit" value="10"/>
209       </verb>
210       <verb name="all">
211         <Define key="verbcondition" value=""/>
212         <Set key="limit" value="-1"/>
213       </verb>
214
215       <verb name="sample">
216         <Define key="verbcondition" value=""/>
217         <Set key="limit" value="10"/>
218       </verb>
219     </verbs>
220     <body>
221       <Enumerate key="article" table="content" selection="${verbcondition}"
222                   limit="limit" order="webdb_create desc">
223         <Enumerate 
224             key="media" table="image" 
225             selection="exists (select * from content_x_media where media_id=images.id and content_id=${article.id})
226                or      exists (select * from comment_x_media, comment
227                            where comment_id = comment.id and media_id=images.id and comment.to_media=${article.id})"
228             order="id desc">
229             
230            <GenerateMedia key="media" />
231         </Enumerate>
232         <Enumerate 
233             key="media" table="video" 
234             selection="exists (select * from content_x_media where media_id=video.id and content_id=${article.id})
235                or      exists (select * from comment_x_media, comment
236                            where comment_id = comment.id and media_id=video.id and comment.to_media=${article.id})"
237             order="id desc">
238            <GenerateMedia key="media" />
239         </Enumerate>
240         <Enumerate 
241             key="media" table="audio" 
242             selection="exists (select * from content_x_media where media_id=audio.id and content_id=${article.id})
243                or      exists (select * from comment_x_media, comment
244                                        where comment_id = comment.id and media_id=audio.id and comment.to_media=${article.id})"
245             order="id desc">
246             
247            <GenerateMedia key="media" />
248         </Enumerate>
249         
250       
251         <Enumerate 
252             key="media" table="otherMedia" 
253             selection="exists (select * from content_x_media where media_id=other_media.id and content_id=${article.id})
254                or      exists (select * from comment_x_media, comment
255                                        where comment_id = comment.id and media_id=other_media.id and comment.to_media=${article.id})"
256             order="id desc">
257             
258            <GenerateMedia key="media" />
259         </Enumerate>
260
261
262               <List key="topics" table="topic t" extratables="content_x_topic ctx"
263                 selection="ctx.content_id = ${article.id} AND ctx.topic_id = t.id"  />
264                    <If condition="utility.listSize(topics) > 0">
265                    <then>
266                         <Log message="I have a topic list with ${utility.listSize(topics)}" />
267                     </then>
268                    </If>
269         <If condition="article.is_published == '1'">
270           <then>
271             <Language>
272               <Generate 
273                 generator="/article.template" 
274                 destination="${config.storageRoot}/${pathprefix}/${article.date.formatted.yyyy}/${article.date.formatted.MM}/${article.id}.html"/>
275              </Language>
276              <Generate 
277                 generator="/languagebar.template" 
278                 destination="${config.storageRoot}/languagebar/${article.to_original.date.formatted.yyyy}/${article.to_original.date.formatted.MM}/${article.to_original.id}.html"/>    
279              <IndexContent key="article" pathToIndex="${config['IndexPath']}"/>
280           </then>
281           <else>
282             <UnIndexContent key="article" pathToIndex="${config['IndexPath']}"/>
283           </else>
284         </If>
285         <MarkContent key="article"/>            
286       </Enumerate>
287     </body>
288   </producer>  
289
290   <producer name="staticpages">
291     <verbs>
292       <verb name="changed" default="1">
293         <Define key="verbcondition" value="(not is_produced)"/>
294         <Set key="limit" value="10"/>
295       </verb>
296       <verb name="all">
297         <Define key="verbcondition" value=""/>
298         <Set key="limit" value="-1"/>
299       </verb>
300     </verbs>
301
302     <body>
303       <Enumerate key="article" table="content" selection="${verbcondition}  and to_article_type = ${articletype.static}"
304                   limit="limit" order="webdb_create desc">
305         <Enumerate 
306             key="media" table="image" 
307             selection="exists (select * from content_x_media where media_id=images.id and content_id=${article.id})"
308             order="id desc">
309             
310            <GenerateMedia key="media" />
311         </Enumerate>
312         <Enumerate 
313             key="media" table="video" 
314             selection="exists (select * from content_x_media where media_id=video.id and content_id=${article.id})"
315             order="id desc">
316
317            <GenerateMedia key="media" />
318         </Enumerate>
319         <Enumerate 
320             key="media" table="audio" 
321             selection="exists (select * from content_x_media where media_id=audio.id and content_id=${article.id})"
322             order="id desc">
323             
324            <GenerateMedia key="media" />
325         </Enumerate>
326         <Enumerate 
327             key="media" table="otherMedia" 
328             selection="exists (select * from content_x_media where media_id=other_media.id and content_id=${article.id})"
329
330             order="id desc">
331             
332            <GenerateMedia key="media" />
333         </Enumerate>
334
335         <If condition="article.is_published == '1'">
336           <then>
337             <Language>
338               <Generate 
339                 generator="/article.template" 
340                 destination="${config.storageRoot}/${pathprefix}/static/${article.edittitle}.html"/>
341              </Language>
342              <Generate 
343                 generator="/languagebar.template" 
344                 destination="${config.storageRoot}/languagebar/${article.to_original.date.formatted.yyyy}/${article.to_original.date.formatted.MM}/${article.to_original.id}.html"/>    
345              <IndexContent key="article" pathToIndex="${config['IndexPath']}"/>
346           </then>
347           <else>
348             <UnIndexContent key="article" pathToIndex="${config['IndexPath']}"/>
349           </else>
350         </If>
351         <MarkContent key="article"/>            
352       </Enumerate>
353     </body>
354   </producer>
355
356   <producer name="navigation">
357     <verbs>
358       <verb name="generate" default="1" description="generates the left column"/>
359     </verbs>
360     <body>
361       <Language>
362         <Generate 
363             generator="/navigation.template" 
364             destination="${config.storageRoot}/${pathprefix}/navigation.html"/>
365       </Language>
366     </body>
367   </producer>
368   
369   <producer name="staticimages">
370     <verbs>
371       <verb name="generate" default="1" description="copies all the static image files into place"/>
372     </verbs>
373     <body>
374       <CopyDir destination="img" source="etc/producer/images"/>
375     </body>
376   </producer>
377   
378   <producer name="newswirearchive">
379     <verbs>
380       <verb name="new">
381         <Set key="pages" value="3"/>
382       </verb>
383       <verb name="all">
384         <Set key="pages" value="-1"/>
385       </verb>
386     </verbs>
387     <body>
388         <Define key="docSuffix" value=".html"/>
389         <Define key="storageSuffix" value=".html"/>
390
391         <Batch key="articles" infokey="batch" table="content"
392                process="pages" batchsize="20" minbatchsize="10"
393                selection="is_published='1' and to_article_type = ${articletype.newswire}"
394                order="webdb_create asc">
395           <batches>
396             <Language>
397               <Define key="pagePrefix" value="${pathprefix}/newswire/archive"/>
398               <Define key="storagePrefix" value="${config[&quot;Producer.StorageRoot&quot;]}/${pagePrefix}"/>
399               <Define key="docPrefix" value="${config[&quot;Producer.DocRoot&quot;]}/${pagePrefix}"/>
400
401               <Generate
402                   generator="newswirearchive.template"
403                   destination="${storagePrefix}${batch.current.identifier}${storageSuffix}"/>
404
405             </Language>
406           </batches>
407           <batchlist>
408             <Language>
409               <Define key="pagePrefix" value="${pathprefix}/newswire/archive"/>
410               <Define key="storagePrefix" value="${config[&quot;Producer.StorageRoot&quot;]}/${pagePrefix}"/>
411               <Define key="docPrefix" value="${config[&quot;Producer.DocRoot&quot;]}/${pagePrefix}"/>
412               <Generate
413                   generator="batchnav.template"
414                   destination="${storagePrefix}nav${storageSuffix}"/>
415             </Language>
416           </batchlist>
417         </Batch>
418     </body>
419   </producer>
420
421   <producer name="featurearchive">
422     <verbs>
423       <verb name="new">
424         <Set key="pages" value="3"/>
425       </verb>
426       <verb name="all">
427         <Set key="pages" value="-1"/>
428       </verb> 
429     </verbs>
430     <body>
431         <Define key="docSuffix" value=".html"/>
432         <Define key="storageSuffix" value=".html"/>
433         
434         <Batch key="articles" infokey="batch" table="content" 
435                process="pages" batchsize="20" minbatchsize="10"
436                selection="is_published='1' and to_article_type in (${articletype.feature}, ${articletype.startspecial})"
437                order="webdb_create asc">
438           <batches>
439             <Language>
440               <Define key="pagePrefix" value="${pathprefix}/feature/archive"/>
441               <Define key="storagePrefix" value="${config[&quot;Producer.StorageRoot&quot;]}/${pagePrefix}"/>
442               <Define key="docPrefix" value="${config[&quot;Producer.DocRoot&quot;]}/${pagePrefix}"/>
443
444               <Generate 
445                   generator="featurearchive.template" 
446                   destination="${storagePrefix}${batch.current.identifier}${storageSuffix}"/>
447
448             </Language>
449           </batches>
450           <batchlist>
451             <Language>
452               <Define key="pagePrefix" value="${pathprefix}/feature/archive"/>
453               <Define key="storagePrefix" value="${config[&quot;Producer.StorageRoot&quot;]}/${pagePrefix}"/>
454               <Define key="docPrefix" value="${config[&quot;Producer.DocRoot&quot;]}/${pagePrefix}"/>
455               <Generate 
456                   generator="batchnav.template" 
457                   destination="${storagePrefix}nav${storageSuffix}"/>
458             </Language>
459           </batchlist>
460         </Batch>
461     </body>
462   </producer>
463
464   <producer name="topicpages">
465     <verbs>
466       <verb name="new">
467         <Set key="_topics" value="-1"/>
468         <Set key="pages" value="3"/>
469       </verb>
470       <verb name="all">
471         <Set key="_topics" value="-1"/>
472         <Set key="pages" value="-1"/>
473       </verb> 
474       <verb name="sample">
475         <Set key="_topics" value="2"/>
476         <Set key="pages" value="4"/>
477       </verb> 
478     </verbs>
479     <body>
480       <Enumerate key="topic" table="topic">
481         <Define key="docSuffix" value=".html"/>
482         <Define key="storageSuffix" value=".html"/>
483         
484         <Log message="topic = ${topic.title}" />
485         <List key="special" table="content c" 
486           selection="c.is_published='1' and c.to_article_type = ${articletype.topicspecial} and c.id=cxt.content_id and cxt.topic_id = ${topic.id}"
487           order = "webdb_create desc" limit="1"
488           extratables="content_x_topic cxt"/>
489       
490         <Batch key="articles" infokey="batch" table="content c" 
491                process="pages" batchsize="20" minbatchsize="10"
492                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}"
493                order="webdb_create asc" extratables="content_x_topic cxt">
494           <batches>
495             <Language>
496               <Define key="pagePrefix" value="${pathprefix}/${topic.filename}/archive"/>
497               <Define key="storagePrefix" value="${config[&quot;Producer.StorageRoot&quot;]}/${pagePrefix}"/>
498               <Define key="docPrefix" value="${config[&quot;Producer.DocRoot&quot;]}/${pagePrefix}"/>
499                   <Log message="topic now = ${topic.title}" />
500
501               <Generate 
502                   generator="topicpage.template" 
503                   destination="${storagePrefix}${batch.current.identifier}${storageSuffix}"/>
504
505             </Language>
506           </batches>
507           <batchlist>
508             <Language>
509               <Define key="pagePrefix" value="${pathprefix}/${topic.filename}/archive"/>
510               <Define key="storagePrefix" value="${config[&quot;Producer.StorageRoot&quot;]}/${pagePrefix}"/>
511               <Define key="docPrefix" value="${config[&quot;Producer.DocRoot&quot;]}/${pagePrefix}"/>
512               <Generate 
513                   generator="batchnav.template" 
514                   destination="${storagePrefix}nav${storageSuffix}"/>
515             </Language>
516           </batchlist>
517         </Batch>
518       </Enumerate>
519     </body>
520   </producer>
521
522
523   <producer name="opnewswireinclude">
524     <verbs>
525       <verb name="generate" default="1" description="Generates the op newswire"/>
526     </verbs>
527 <body>
528 <Set key="whichnewswire" value="Open Publishing News" />
529       <List key="newswire" table="content" limit="20"
530         selection="is_published=true and to_article_type=${articletype.newswire}"
531         order="webdb_create desc"/>
532       <Language>
533         <Generate 
534             generator="/newswireinclude.template" 
535             destination="${config.storageRoot}/${pathprefix}/newswireinclude.html"/>
536       </Language>
537
538
539 </body>
540 </producer>
541
542   <producer name="rssnewswireinclude">
543     <verbs>
544       <verb name="generate" default="1" description="Generates the rss newswire"/>
545     </verbs>
546 <body>
547 <Set key="whichnewswire" value="RSS Publishing News" />
548       <List key="newswire" table="content" limit="20"
549         selection="is_published=true and to_article_type=${articletype.communityrssarticle}"
550         order="webdb_create desc"/>
551       <Language>
552         <Generate 
553             generator="/newswireinclude.template" 
554             destination="${config.storageRoot}/${pathprefix}/rssnewswireinclude.html"/>
555       </Language>
556
557
558 </body>
559 </producer>
560
561
562   
563   <producer name="startpage">
564     <verbs>
565       <verb name="generate" default="1" description="Generates the startpage"/>
566     </verbs>
567
568     <body>
569       <List key="startspecial" table="content" limit="1"
570         selection="is_published=true and to_article_type=${articletype.startspecial}"
571         order="webdb_create desc"/>
572                                         
573       <List key="features" table="content" limit="4" 
574         selection="is_published=true and to_article_type in (${articletype.feature},${articletype.promotedcommunityarticle},${articletype.promotednewswire})"
575         order="webdb_create desc"/>
576
577       <List key="communityrssarticles" table="content" limit="10" 
578         selection="is_published=true and to_article_type in (${articletype.communityrssarticle},${articletype.promotedcommunityarticle})"
579         order="webdb_create desc"/>
580
581       <List key="newswire" table="content" limit="20"
582         selection="is_published=true and to_article_type=${articletype.newswire}"
583         order="webdb_create desc"/>
584         
585       <List key="mostcomments"
586                   table="content c"
587                   extratables="comment cm"
588                   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,
589                                          c.subtitle,c.edittitle,c.date,c.creator,c.creator_main_url,c.creator_email,c.creator_address,c.creator_phone,c.description,
590                                          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,
591                                          c.content_data,c.is_html,c.to_article_type,c.to_content,c.keywords,c.to_locking_user"
592                           order="count(cm.id) desc"
593                           limit="3"
594                     />    
595                 
596         
597       <List key="breakingnews" table="breakingNews" limit="10"
598          order="webdb_create desc"/>
599         
600       <Language>
601         <Generate 
602             generator="/startpage.template" 
603             destination="${config.storageRoot}/${pathprefix}/index.html"/>
604       </Language>
605     </body>
606   </producer>  
607   
608   <producer name="synchronization">
609     <verbs>
610       <verb name="run" default="1" description="Synchronizes the publication site with the production site"/>
611     </verbs>
612
613     <body>
614       <If condition="config['Rsync'] in ('1', 'y', 'yes', 'Y')">
615         <then>
616           <Execute command="${config['Rsync.Script.Path']}"/>
617         </then>
618       </If>
619     </body>
620   </producer>  
621   
622   
623   <producer name="media">
624     <verbs>
625       <verb name="new" default="1">
626         <Define key="verbcondition" value="(not is_produced)"/>
627         <Set key="limit" value="10"/>
628       </verb>
629       <verb name="all">
630         <Define key="verbcondition" value=""/>
631         <Set key="limit" value="-1"/>
632       </verb>
633
634       <verb name="sample">
635         <Define key="verbcondition" value=""/>
636         <Set key="limit" value="10"/>
637       </verb>
638     </verbs>
639     <body>
640       <Enumerate 
641           key="media" table="image" 
642           selection="${verbcondition}"
643           limit="limit" 
644           order="webdb_create desc">
645           
646          <GenerateMedia key="media" />
647       </Enumerate>
648       <Enumerate 
649           key="media" table="video" 
650           selection="${verbcondition}"
651           limit="limit" 
652           order="webdb_create desc">
653           
654          <GenerateMedia key="media" />
655       </Enumerate>
656       <Enumerate 
657           key="media" table="audio" 
658           selection="${verbcondition}"
659           limit="limit" 
660           order="webdb_create desc">
661           
662          <GenerateMedia key="media" />
663       </Enumerate>
664       <Enumerate 
665           key="media" table="otherMedia" 
666           selection="${verbcondition}"
667           limit="limit" 
668           order="webdb_create desc">
669           
670          <GenerateMedia key="media" />
671       </Enumerate>
672     </body>
673   </producer>  
674
675   <producer name="syndication">
676     <verbs>
677       <verb name="generate" />
678     </verbs>
679     <body>
680       <!-- the main features and newswire -->
681       <RSSChannelBundle />
682       
683       <!-- the topic features and newswires -->
684       <Enumerate key="topic" table="topic">
685         <RSSChannelBundle
686           basefilename="${topic.filename}"
687           selection="c.id=cxt.content_id and cxt.topic_id = ${topic.id}"
688           extratables="content_x_topic cxt"
689         />
690       </Enumerate>
691       
692       
693
694     </body>
695
696   </producer>
697
698   <producer name="radicalendar">
699     <verbs>
700       <verb name="pull" />
701     </verbs>
702     <body>
703       <!-- groupname you will see as the value of "group" in the url for your radicalendar page, -->
704       <!--      gmtoffset is in minutes                                                          -->
705       <Radicalendar key="calendar" groupname="_imc" gmtoffset="60"  />
706       <Generate 
707         generator="/radicalendar.template" 
708         destination="${config.storageRoot}/calendarinclude.html"/>
709
710
711     </body>
712   </producer>
713
714
715   <producer name="update">
716     <verbs>
717       <verb name="templates" description="updates templates and bundles">
718         <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/"/>
719       </verb>
720     </verbs>
721
722     <body>
723       <Execute command="${command}"/>
724     </body>
725   </producer>
726
727
728
729
730
731  <producer name="generatefpincludes">
732    <verbs>
733      <verb name="doit" />
734    </verbs>
735    <body>
736
737         <Set key="counter" value="1"/>
738       <Enumerate key="fpimage" table="image" selection="to_media_folder=8 and is_published=true" >
739         <Log message="generating include for image id: ${fpimage.id}" type="info" />
740
741           <Generate
742                 generator="/fpinclude.template"
743                 destination="${config.storageRoot}/fpincludes/${fpimage.id}.inc" />
744        <Set key="counter" value="counter+1" />
745       </Enumerate>
746
747
748            <List key="fpincludes" table="image" selection="to_media_folder=8 and is_published=true" />
749                 <Generate
750                         generator="/fpmapping.template"
751                         destination="${config.storageRoot}/fpincludes/map.txt" />
752
753     </body>
754   </producer>
755
756
757
758
759  <!-- generates a count for each topic -->
760  
761  <!-- TODO: add date limit when we actually are going live with this -->        
762  <producer name="generateTopicCounts"> 
763  <verbs>
764         <verb name="doit" />
765  </verbs>
766  <body>
767         <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 
768                                                                                  as x ON (t.id=x.topic_id) LEFT OUTER JOIN content as c ON (c.id=x.content_id) 
769                                                                                  WHERE c.webdb_create > NOW()-'1 day'::interval AND  t.archiv_url = 'Category' GROUP BY t.title , t.filename ORDER BY t.title"
770                    type="set"/>
771         <Language>          
772         <Generate generator="/topiccount.template"
773                 destination="${config.storageRoot}/${pathprefix}/topiccount.html" />
774         </Language>
775   </body>
776   </producer>
777                 
778
779
780  <producer name="generateRandomTopics">
781   <verbs>
782     <verb name="doit" />
783   </verbs>
784   <body>
785         <Set key="counter" value="1"/>
786         
787         <Enumerate key="category" table="topic t" extratables="topic t2"
788                 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">
789         
790         <Log message="Getting Last 5 articles for category: ${category.title} - counter: ${counter}" />
791         <Define key="topictitle" value="${category.title}" />
792         <Define key="topicfile" value="${category.filename}" /> 
793         
794         <List key="randomarticles" table="content"
795                 selection ="id in (select content_id from content_x_topic where topic_id = ${category.id})" order="date DESC"
796                 limit="3" />
797         <Language>      
798         <Generate
799                 generator="/randomcategory.template"
800                 destination="${config.storageRoot}/${pathprefix}/randomcats/random${counter}.html" />        
801         </Language>
802         
803         <Set key="counter" value="counter+1" />
804     </Enumerate>
805   </body>
806  </producer>
807                           
808  <producer name="getlocalblogs">
809    <verbs>
810      <verb name="doit" />
811    </verbs>
812    <body>
813       <Enumerate key="article" table="content" selection="to_article_type in(${articletype.communityrssfeed}) and is_published=true"  order="webdb_create desc">
814         <Log message="Pulling 1.0 feed from ${article.title} at ${article.source}" type="info" />
815         <Pull
816           url="${article.source}"
817           articletype="${articletype.communityrssarticle}"
818           blogurl="${article.creator_main_url}"
819           blogname="${article.title}"
820         />
821       </Enumerate>
822     </body>
823   </producer>
824
825   <producer name="footer">
826     <verbs>
827       <verb name="generate" default="1" description="generates the default footer"/>
828     </verbs>
829     <body>
830       <Language>
831         <Generate
832             generator="/footer.template"
833             destination="${config.storageRoot}/${pathprefix}/footer.html"/>
834       </Language>
835     </body>
836   </producer>
837
838
839   <producer name="headArticle">
840     <verbs>
841       <verb name="generate" default="1" description="generates the article html head"/>
842     </verbs>
843     <body>
844       <Language>
845         <Generate
846             generator="/head.article.template"
847             destination="${config.storageRoot}/${pathprefix}/head.article.html"/>
848       </Language>
849     </body>
850   </producer>
851   
852 </producers>
853
854