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