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