3 This XML file defines a set of producers intended for a typical indymedia
15 <nodedefinition name="Language">
17 <string name="languagecondition" defaultvalue="code != 'ot'"/>
18 <string name="bundle" defaultvalue="bundles.producer" />
23 <List key="languages" table="language" selection="${languagecondition}" order="code"/>
24 <Enumerate key="language" table="language" selection="${languagecondition}" order="code">
25 <Resource bundle="${bundle}" key="lang" language="${language.code}"/>
26 <Define key="pathprefix" value="${language.code}" />
27 <Define key="languagepreference" value="${language.code}" />
29 <If condition="language.code=='en'">
31 <Define key="pathprefix" value="or" />
32 <Define key="languagepreference" value="" />
40 <nodedefinition name="Pull">
43 <string name="blogname"/>
44 <string name="blogurl"/>
45 <string name="articletype"/>
49 <Log message="Pulling 1.0 feed from ${blogname} at ${url}" type="info" />
50 <RSS key="feeditems" url="${url}" encoding="UTF-8" />
51 <Enumerate key="item" list="feeditems['rss:item']" >
52 <Define key="languagecode" value="ot" />
53 <If condition="item['dc:language']">
55 <Set key="languagecode" value="item['dc:language']"/>
59 <If condition="item['dc:source']">
61 <Set key="origin" value="item['dc:source']"/>
64 <Set key="origin" value="item.identifier"/>
68 <If condition="item['dcterms:hasPart']">
70 <Set key="haspartimg" value="'<img align="right" src="'++item['dcterms:hasPart'] ++'" />' " />
73 <Set key="haspartimg" value="' '" />
77 <Set key="present" value="0" />
81 selection="source='${utility.escapeJDBCString(origin)}'" limit="1">
82 <Set key="present" value="1" />
84 <If condition="present==0">
86 <Log message=" new entry from ${blogname}: ${item['rss:title']}" type="info" />
91 date="config.now.formatted.yyyymmdd"
99 to_article_type="articletype"
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="config.now"
108 comment="'Taken from ' ++ blogname"
117 <nodedefinition name="RSSChannel">
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" />
134 <If condition="extratables == 'none' ">
136 <List key="articles" table="content c" selection="${articleSelection}" order = "c.webdb_create desc, c.date desc" limit="limit" />
139 <List key="articles" table="content c" selection="${articleSelection}" order = "c.webdb_create desc, c.date desc" limit="limit" extratables="${extratables}" />
142 <If condition="channeldescription==''">
144 <Define key="channeldescription" value="${channeltitle}"/>
147 <If condition="channelidentifier==''">
149 <Define key="channelidentifier" value="${config['Producer.PublicationHost']}/or/${channelfilename}"/>
154 parameters="${encoding}"
155 generator="${generator}"
156 destination="${config.storageRoot}/${channelfilename}"/>
160 <nodedefinition name="RSSChannelBundle">
162 <string name="extratables" defaultvalue="none" />
163 <string name="selection" defaultvalue="c.is_published='1'" />
164 <string name="basefilename" defaultvalue="main" />
169 articleSelection="(c.to_article_type in (${articletype.newswire}) or (c.to_article_type=${articletype.translation} and c.to_original.to_articletype in (${articletype.newswire}))) and ${selection}"
170 channelfilename="${basefilename}-newswire.rss"
171 channeltitle="${config['Mir.Name']} ${basefilename} newswire"
173 extratables="${extratables}"
176 articleSelection="(c.to_article_type in (${articletype.newswire}) or (c.to_article_type=${articletype.translation} and c.to_original.to_articletype in (${articletype.newsire}))) and ${selection}"
177 channelfilename="${basefilename}-newswire-content.rss"
178 channeltitle="${config['Mir.Name']} ${basefilename} newswire"
180 generator="RSS-full.template"
181 extratables="${extratables}"
185 articleSelection="(c.to_article_type in (${articletype.feature},${articletype.startspecial},${articletype.topicspecial}) or (c.to_article_type=${articletype.translation} and c.to_original.to_articletype in (${articletype.feature},${articletype.startspecial},${articletype.topicspecial}))) and ${selection}"
186 channelfilename="${basefilename}-features.rss"
187 channeltitle="${config['Mir.Name']} ${basefilename} features"
189 extratables="${extratables}"
192 articleSelection="(c.to_article_type in (${articletype.feature},${articletype.startspecial},${articletype.topicspecial}) or (c.to_article_type=${articletype.translation} and c.to_original.to_articletype in (${articletype.feature},${articletype.startspecial},${articletype.topicspecial}))) and ${selection}"
193 channelfilename="${basefilename}-features-content.rss"
194 channeltitle="${config['Mir.Name']} ${basefilename} features"
196 generator="RSS-full.template"
197 extratables="${extratables}"
203 <producer name="articles">
205 <verb name="changed" default="1">
206 <Define key="verbcondition" value="(not is_produced)"/>
207 <Set key="limit" value="10"/>
210 <Define key="verbcondition" value=""/>
211 <Set key="limit" value="-1"/>
215 <Define key="verbcondition" value=""/>
216 <Set key="limit" value="10"/>
220 <Enumerate key="article" table="content" selection="${verbcondition}"
221 limit="limit" order="webdb_create desc">
223 key="media" table="image"
224 selection="exists (select * from content_x_media where media_id=images.id and content_id=${article.id})
225 or exists (select * from comment_x_media, comment
226 where comment_id = comment.id and media_id=images.id and comment.to_media=${article.id})"
229 <GenerateMedia key="media" />
232 key="media" table="video"
233 selection="exists (select * from content_x_media where media_id=video.id and content_id=${article.id})
234 or exists (select * from comment_x_media, comment
235 where comment_id = comment.id and media_id=video.id and comment.to_media=${article.id})"
237 <GenerateMedia key="media" />
240 key="media" table="audio"
241 selection="exists (select * from content_x_media where media_id=audio.id and content_id=${article.id})
242 or exists (select * from comment_x_media, comment
243 where comment_id = comment.id and media_id=audio.id and comment.to_media=${article.id})"
246 <GenerateMedia key="media" />
249 key="media" table="otherMedia"
250 selection="exists (select * from content_x_media where media_id=other_media.id and content_id=${article.id})
251 or exists (select * from comment_x_media, comment
252 where comment_id = comment.id and media_id=other_media.id and comment.to_media=${article.id})"
255 <GenerateMedia key="media" />
258 <If condition="article.is_published == '1'">
262 generator="/article.template"
263 destination="${config.storageRoot}/${pathprefix}/${article.date.formatted.yyyy}/${article.date.formatted.MM}/${article.id}.shtml"/>
266 generator="/languagebar.template"
267 destination="${config.storageRoot}/languagebar/${article.to_original.date.formatted.yyyy}/${article.to_original.date.formatted.MM}/${article.to_original.id}.shtml"/>
268 <IndexContent key="article" pathToIndex="${config['IndexPath']}"/>
271 <UnIndexContent key="article" pathToIndex="${config['IndexPath']}"/>
274 <MarkContent key="article"/>
279 <producer name="staticpages">
281 <verb name="changed" default="1">
282 <Define key="verbcondition" value="(not is_produced)"/>
283 <Set key="limit" value="10"/>
286 <Define key="verbcondition" value=""/>
287 <Set key="limit" value="-1"/>
292 <Enumerate key="article" table="content" selection="${verbcondition} and to_article_type = ${articletype.static}"
293 limit="limit" order="webdb_create desc">
295 key="media" table="image"
296 selection="exists (select * from content_x_media where media_id=images.id and content_id=${article.id})"
299 <GenerateMedia key="media" />
302 key="media" table="video"
303 selection="exists (select * from content_x_media where media_id=video.id and content_id=${article.id})"
306 <GenerateMedia key="media" />
309 key="media" table="audio"
310 selection="exists (select * from content_x_media where media_id=audio.id and content_id=${article.id})"
313 <GenerateMedia key="media" />
316 key="media" table="otherMedia"
317 selection="exists (select * from content_x_media where media_id=other_media.id and content_id=${article.id})"
321 <GenerateMedia key="media" />
324 <If condition="article.is_published == '1'">
328 generator="/article.template"
329 destination="${config.storageRoot}/${pathprefix}/static/${article.edittitle}.shtml"/>
332 generator="/languagebar.template"
333 destination="${config.storageRoot}/languagebar/${article.to_original.date.formatted.yyyy}/${article.to_original.date.formatted.MM}/${article.to_original.id}.shtml"/>
334 <IndexContent key="article" pathToIndex="${config['IndexPath']}"/>
337 <UnIndexContent key="article" pathToIndex="${config['IndexPath']}"/>
340 <MarkContent key="article"/>
345 <producer name="navigation">
347 <verb name="generate" default="1" description="generates the left column"/>
352 generator="/navigation.template"
353 destination="${config.storageRoot}/${pathprefix}/navigation.inc"/>
358 <producer name="staticimages">
360 <verb name="generate" default="1" description="copies all the static image files into place"/>
363 <CopyDir destination="img" source="etc/producer/images"/>
367 <producer name="newswirearchive">
370 <Set key="pages" value="3"/>
373 <Set key="pages" value="-1"/>
377 <Define key="docSuffix" value=".shtml"/>
378 <Define key="storageSuffix" value=".shtml"/>
380 <Batch key="articles" infokey="batch" table="content"
381 process="pages" batchsize="20" minbatchsize="10"
382 selection="is_published='1' and to_article_type = ${articletype.newswire}"
383 order="webdb_create asc">
386 <Define key="pagePrefix" value="${pathprefix}/newswire/archive"/>
387 <Define key="storagePrefix" value="${config["Producer.StorageRoot"]}/${pagePrefix}"/>
388 <Define key="docPrefix" value="${config["Producer.DocRoot"]}/${pagePrefix}"/>
391 generator="newswirearchive.template"
392 destination="${storagePrefix}${batch.current.identifier}${storageSuffix}"/>
398 <Define key="pagePrefix" value="${pathprefix}/newswire/archive"/>
399 <Define key="storagePrefix" value="${config["Producer.StorageRoot"]}/${pagePrefix}"/>
400 <Define key="docPrefix" value="${config["Producer.DocRoot"]}/${pagePrefix}"/>
402 generator="batchnav.template"
403 destination="${storagePrefix}nav${storageSuffix}"/>
410 <producer name="featurearchive">
413 <Set key="pages" value="3"/>
416 <Set key="pages" value="-1"/>
420 <Define key="docSuffix" value=".shtml"/>
421 <Define key="storageSuffix" value=".shtml"/>
423 <Batch key="articles" infokey="batch" table="content"
424 process="pages" batchsize="20" minbatchsize="10"
425 selection="is_published='1' and to_article_type in (${articletype.feature}, ${articletype.startspecial})"
426 order="webdb_create asc">
429 <Define key="pagePrefix" value="${pathprefix}/feature/archive"/>
430 <Define key="storagePrefix" value="${config["Producer.StorageRoot"]}/${pagePrefix}"/>
431 <Define key="docPrefix" value="${config["Producer.DocRoot"]}/${pagePrefix}"/>
434 generator="featurearchive.template"
435 destination="${storagePrefix}${batch.current.identifier}${storageSuffix}"/>
441 <Define key="pagePrefix" value="${pathprefix}/feature/archive"/>
442 <Define key="storagePrefix" value="${config["Producer.StorageRoot"]}/${pagePrefix}"/>
443 <Define key="docPrefix" value="${config["Producer.DocRoot"]}/${pagePrefix}"/>
445 generator="batchnav.template"
446 destination="${storagePrefix}nav${storageSuffix}"/>
453 <producer name="topicpages">
456 <Set key="_topics" value="-1"/>
457 <Set key="pages" value="3"/>
460 <Set key="_topics" value="-1"/>
461 <Set key="pages" value="-1"/>
464 <Set key="_topics" value="2"/>
465 <Set key="pages" value="4"/>
469 <Enumerate key="topic" table="topic" limit="_topics">
470 <Define key="docSuffix" value=".shtml"/>
471 <Define key="storageSuffix" value=".shtml"/>
473 <List key="special" table="content c"
474 selection="c.is_published='1' and c.to_article_type = ${articletype.topicspecial} and c.id=cxt.content_id and cxt.topic_id = ${topic.id}"
475 order = "webdb_create desc" limit="1"
476 extratables="content_x_topic cxt"/>
478 <Batch key="articles" infokey="batch" table="content c"
479 process="pages" batchsize="20" minbatchsize="10"
480 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}"
481 order="webdb_create asc" extratables="content_x_topic cxt">
484 <Define key="pagePrefix" value="${pathprefix}/${topic.filename}/archive"/>
485 <Define key="storagePrefix" value="${config["Producer.StorageRoot"]}/${pagePrefix}"/>
486 <Define key="docPrefix" value="${config["Producer.DocRoot"]}/${pagePrefix}"/>
489 generator="topicpage.template"
490 destination="${storagePrefix}${batch.current.identifier}${storageSuffix}"/>
496 <Define key="pagePrefix" value="${pathprefix}/${topic.filename}/archive"/>
497 <Define key="storagePrefix" value="${config["Producer.StorageRoot"]}/${pagePrefix}"/>
498 <Define key="docPrefix" value="${config["Producer.DocRoot"]}/${pagePrefix}"/>
500 generator="batchnav.template"
501 destination="${storagePrefix}nav${storageSuffix}"/>
510 <producer name="opnewswireinclude">
512 <verb name="generate" default="1" description="Generates the op newswire"/>
515 <Set key="whichnewswire" value="Open Publishing News" />
516 <List key="newswire" table="content" limit="30"
517 selection="is_published=true and to_article_type=${articletype.newswire}"
518 order="webdb_create desc"/>
521 generator="/newswireinclude.template"
522 destination="${config.storageRoot}/${pathprefix}/newswireinclude.shtml"/>
529 <producer name="rssnewswireinclude">
531 <verb name="generate" default="1" description="Generates the rss newswire"/>
534 <Set key="whichnewswire" value="RSS Publishing News" />
535 <List key="newswire" table="content" limit="30"
536 selection="is_published=true and to_article_type=${articletype.communityrssarticle}"
537 order="webdb_create desc"/>
540 generator="/newswireinclude.template"
541 destination="${config.storageRoot}/${pathprefix}/rssnewswireinclude.shtml"/>
550 <producer name="startpage">
552 <verb name="generate" default="1" description="Generates the startpage"/>
556 <List key="startspecial" table="content" limit="2"
557 selection="is_published=true and to_article_type=${articletype.startspecial}"
558 order="webdb_create desc"/>
560 <List key="features" table="content" limit="10"
561 selection="is_published=true and to_article_type in (${articletype.feature},${articletype.promotedcommunityarticle},${articletype.promotednewswire})"
562 order="webdb_create desc"/>
564 <List key="communityrssarticles" table="content" limit="10"
565 selection="is_published=true and to_article_type in (${articletype.communityrssarticle},${articletype.promotedcommunityarticle})"
566 order="webdb_create desc"/>
568 <List key="newswire" table="content" limit="30"
569 selection="is_published=true and to_article_type=${articletype.newswire}"
570 order="webdb_create desc"/>
572 <List key="breakingnews" table="breakingNews" limit="10"
573 order="webdb_create desc"/>
577 generator="/startpage.template"
578 destination="${config.storageRoot}/${pathprefix}/index.shtml"/>
583 <producer name="synchronization">
585 <verb name="run" default="1" description="Synchronizes the publication site with the production site"/>
589 <If condition="config['Rsync'] in ('1', 'y', 'yes', 'Y')">
591 <Execute command="${config['Rsync.Script.Path']}"/>
598 <producer name="media">
600 <verb name="new" default="1">
601 <Define key="verbcondition" value="(not is_produced)"/>
602 <Set key="limit" value="10"/>
605 <Define key="verbcondition" value=""/>
606 <Set key="limit" value="-1"/>
610 <Define key="verbcondition" value=""/>
611 <Set key="limit" value="10"/>
616 key="media" table="image"
617 selection="${verbcondition}"
619 order="webdb_create desc">
621 <GenerateMedia key="media" />
624 key="media" table="video"
625 selection="${verbcondition}"
627 order="webdb_create desc">
629 <GenerateMedia key="media" />
632 key="media" table="audio"
633 selection="${verbcondition}"
635 order="webdb_create desc">
637 <GenerateMedia key="media" />
640 key="media" table="otherMedia"
641 selection="${verbcondition}"
643 order="webdb_create desc">
645 <GenerateMedia key="media" />
650 <producer name="syndication">
652 <verb name="generate" />
655 <!-- the main features and newswire -->
658 <!-- the topic features and newswires -->
659 <Enumerate key="topic" table="topic">
661 basefilename="${topic.filename}"
662 selection="c.id=cxt.content_id and cxt.topic_id = ${topic.id}"
663 extratables="content_x_topic cxt"
673 <producer name="radicalendar">
678 <!-- groupname you will see as the value of "group" in the url for your radicalendar page, -->
679 <!-- gmtoffset is in minutes -->
680 <Radicalendar key="calendar" groupname="_imc" gmtoffset="60" />
682 generator="/radicalendar.template"
683 destination="${config.storageRoot}/calendarinclude.shtml"/>
690 <producer name="update">
692 <verb name="templates" description="updates templates and bundles">
693 <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/"/>
698 <Execute command="${command}"/>
702 <producer name="getlocalblogs">
707 <Enumerate key="article" table="content" selection="to_article_type in(${articletype.communityrssfeed}) and is_published=true" order="webdb_create desc">
708 <Log message="Pulling 1.0 feed from ${article.title} at ${article.source}" type="info" />
710 url="${article.source}"
711 articletype="${articletype.communityrssarticle}"
712 blogurl="${article.creator_main_url}"
713 blogname="${article.title}"