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