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="" />
45 <nodedefinition name="Pull">
48 <string name="blogname"/>
49 <string name="blogurl"/>
50 <string name="articletype"/>
54 <Log message="Pulling 1.0 feed from ${blogname} at ${url}" type="info" />
55 <RSS key="feeditems" url="${url}" encoding="UTF-8" />
56 <Enumerate key="item" list="feeditems['rss:item']" >
57 <Define key="languagecode" value="ot" />
58 <If condition="item['dc:language']">
60 <Set key="languagecode" value="item['dc:language']"/>
64 <If condition="item['dc:source']">
66 <Set key="origin" value="item['dc:source']"/>
69 <Set key="origin" value="item.identifier"/>
73 <If condition="item['dcterms:hasPart']">
75 <Set key="haspartimg" value="'<img align="right" src="'++item['dcterms:hasPart'] ++'" />' " />
78 <Set key="haspartimg" value="' '" />
82 <Set key="present" value="0" />
86 selection="source='${utility.escapeJDBCString(origin)}'" limit="1">
87 <Set key="present" value="1" />
89 <If condition="present==0">
91 <Log message=" new entry from ${blogname}: ${item['rss:title']}" type="info" />
96 date="config.now.formatted.yyyymmdd"
104 to_article_type="articletype"
106 content_data="item['content:encoded']++' '"
107 creator_main_url="blogurl"
108 description="haspartimg++item['rss:description']++' '"
109 to_language="languageCodeToId(languagecode)"
110 title="item['rss:title']++''"
111 webdb_create="config.now"
113 comment="'Taken from ' ++ blogname"
122 <nodedefinition name="RSSChannel">
124 <string name="articleSelection"/>
125 <string name="extratables" defaultvalue="none" />
126 <integer name="limit" defaultvalue="15"/>
127 <string name="channelidentifier" defaultvalue=""/>
128 <string name="channelfilename"/>
129 <string name="channeltitle"/>
130 <string name="articleprefix" defaultvalue="${config['Producer.PublicationHost']}/or" />
131 <string name="iconprefix" defaultvalue="${config['Producer.PublicationHost']}/icon" />
132 <string name="channelpublisher" defaultvalue="${config['Mir.Name']}" />
133 <string name="encoding" defaultvalue="UTF-8" />
134 <string name="channeldescription" defaultvalue=""/>
135 <string name="generator" defaultvalue="/RSS.template" />
139 <If condition="extratables == 'none' ">
141 <List key="articles" table="content c" selection="${articleSelection}" order = "c.webdb_create desc, c.date desc" limit="limit" />
144 <List key="articles" table="content c" selection="${articleSelection}" order = "c.webdb_create desc, c.date desc" limit="limit" extratables="${extratables}" />
147 <If condition="channeldescription==''">
149 <Define key="channeldescription" value="${channeltitle}"/>
152 <If condition="channelidentifier==''">
154 <Define key="channelidentifier" value="${config['Producer.PublicationHost']}/or/${channelfilename}"/>
159 parameters="${encoding}"
160 generator="${generator}"
161 destination="${config.storageRoot}/${channelfilename}"/>
165 <nodedefinition name="RSSChannelBundle">
167 <string name="extratables" defaultvalue="none" />
168 <string name="selection" defaultvalue="c.is_published='1'" />
169 <string name="basefilename" defaultvalue="main" />
174 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}"
175 channelfilename="${basefilename}-newswire.rss"
176 channeltitle="${config['Mir.Name']} ${basefilename} newswire"
178 extratables="${extratables}"
181 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}"
182 channelfilename="${basefilename}-newswire-content.rss"
183 channeltitle="${config['Mir.Name']} ${basefilename} newswire"
185 generator="RSS-full.template"
186 extratables="${extratables}"
190 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}"
191 channelfilename="${basefilename}-features.rss"
192 channeltitle="${config['Mir.Name']} ${basefilename} features"
194 extratables="${extratables}"
197 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}"
198 channelfilename="${basefilename}-features-content.rss"
199 channeltitle="${config['Mir.Name']} ${basefilename} features"
201 generator="RSS-full.template"
202 extratables="${extratables}"
208 <producer name="articles">
210 <verb name="changed" default="1">
211 <Define key="verbcondition" value="(not is_produced)"/>
212 <Set key="limit" value="10"/>
215 <Define key="verbcondition" value=""/>
216 <Set key="limit" value="-1"/>
220 <Define key="verbcondition" value=""/>
221 <Set key="limit" value="10"/>
225 <Enumerate key="article" table="content" selection="${verbcondition}"
226 limit="limit" order="webdb_create desc">
228 key="media" table="image"
229 selection="exists (select * from content_x_media where media_id=images.id and content_id=${article.id})
230 or exists (select * from comment_x_media, comment
231 where comment_id = comment.id and media_id=images.id and comment.to_media=${article.id})"
234 <GenerateMedia key="media" />
237 key="media" table="video"
238 selection="exists (select * from content_x_media where media_id=video.id and content_id=${article.id})
239 or exists (select * from comment_x_media, comment
240 where comment_id = comment.id and media_id=video.id and comment.to_media=${article.id})"
242 <GenerateMedia key="media" />
245 key="media" table="audio"
246 selection="exists (select * from content_x_media where media_id=audio.id and content_id=${article.id})
247 or exists (select * from comment_x_media, comment
248 where comment_id = comment.id and media_id=audio.id and comment.to_media=${article.id})"
251 <GenerateMedia key="media" />
254 key="media" table="otherMedia"
255 selection="exists (select * from content_x_media where media_id=other_media.id and content_id=${article.id})
256 or exists (select * from comment_x_media, comment
257 where comment_id = comment.id and media_id=other_media.id and comment.to_media=${article.id})"
260 <GenerateMedia key="media" />
263 <If condition="article.is_published == '1'">
267 generator="/article.template"
268 destination="${config.storageRoot}/${pathprefix}/${article.date.formatted.yyyy}/${article.date.formatted.MM}/${article.id}.shtml"/>
271 generator="/languagebar.template"
272 destination="${config.storageRoot}/languagebar/${article.to_original.date.formatted.yyyy}/${article.to_original.date.formatted.MM}/${article.to_original.id}.shtml"/>
273 <IndexContent key="article" pathToIndex="${config['IndexPath']}"/>
276 <UnIndexContent key="article" pathToIndex="${config['IndexPath']}"/>
279 <MarkContent key="article"/>
284 <producer name="staticpages">
286 <verb name="changed" default="1">
287 <Define key="verbcondition" value="(not is_produced)"/>
288 <Set key="limit" value="10"/>
291 <Define key="verbcondition" value=""/>
292 <Set key="limit" value="-1"/>
297 <Enumerate key="article" table="content" selection="${verbcondition} and to_article_type = ${articletype.static}"
298 limit="limit" order="webdb_create desc">
300 key="media" table="image"
301 selection="exists (select * from content_x_media where media_id=images.id and content_id=${article.id})"
304 <GenerateMedia key="media" />
307 key="media" table="video"
308 selection="exists (select * from content_x_media where media_id=video.id and content_id=${article.id})"
311 <GenerateMedia key="media" />
314 key="media" table="audio"
315 selection="exists (select * from content_x_media where media_id=audio.id and content_id=${article.id})"
318 <GenerateMedia key="media" />
321 key="media" table="otherMedia"
322 selection="exists (select * from content_x_media where media_id=other_media.id and content_id=${article.id})"
326 <GenerateMedia key="media" />
329 <If condition="article.is_published == '1'">
333 generator="/article.template"
334 destination="${config.storageRoot}/${pathprefix}/static/${article.edittitle}.shtml"/>
337 generator="/languagebar.template"
338 destination="${config.storageRoot}/languagebar/${article.to_original.date.formatted.yyyy}/${article.to_original.date.formatted.MM}/${article.to_original.id}.shtml"/>
339 <IndexContent key="article" pathToIndex="${config['IndexPath']}"/>
342 <UnIndexContent key="article" pathToIndex="${config['IndexPath']}"/>
345 <MarkContent key="article"/>
350 <producer name="navigation">
352 <verb name="generate" default="1" description="generates the left column"/>
357 generator="/navigation.template"
358 destination="${config.storageRoot}/${pathprefix}/navigation.inc"/>
363 <producer name="staticimages">
365 <verb name="generate" default="1" description="copies all the static image files into place"/>
368 <CopyDir destination="img" source="etc/producer/images"/>
372 <producer name="newswirearchive">
375 <Set key="pages" value="3"/>
378 <Set key="pages" value="-1"/>
382 <Define key="docSuffix" value=".shtml"/>
383 <Define key="storageSuffix" value=".shtml"/>
385 <Batch key="articles" infokey="batch" table="content"
386 process="pages" batchsize="20" minbatchsize="10"
387 selection="is_published='1' and to_article_type = ${articletype.newswire}"
388 order="webdb_create asc">
391 <Define key="pagePrefix" value="${pathprefix}/newswire/archive"/>
392 <Define key="storagePrefix" value="${config["Producer.StorageRoot"]}/${pagePrefix}"/>
393 <Define key="docPrefix" value="${config["Producer.DocRoot"]}/${pagePrefix}"/>
396 generator="newswirearchive.template"
397 destination="${storagePrefix}${batch.current.identifier}${storageSuffix}"/>
403 <Define key="pagePrefix" value="${pathprefix}/newswire/archive"/>
404 <Define key="storagePrefix" value="${config["Producer.StorageRoot"]}/${pagePrefix}"/>
405 <Define key="docPrefix" value="${config["Producer.DocRoot"]}/${pagePrefix}"/>
407 generator="batchnav.template"
408 destination="${storagePrefix}nav${storageSuffix}"/>
415 <producer name="featurearchive">
418 <Set key="pages" value="3"/>
421 <Set key="pages" value="-1"/>
425 <Define key="docSuffix" value=".shtml"/>
426 <Define key="storageSuffix" value=".shtml"/>
428 <Batch key="articles" infokey="batch" table="content"
429 process="pages" batchsize="20" minbatchsize="10"
430 selection="is_published='1' and to_article_type in (${articletype.feature}, ${articletype.startspecial})"
431 order="webdb_create asc">
434 <Define key="pagePrefix" value="${pathprefix}/feature/archive"/>
435 <Define key="storagePrefix" value="${config["Producer.StorageRoot"]}/${pagePrefix}"/>
436 <Define key="docPrefix" value="${config["Producer.DocRoot"]}/${pagePrefix}"/>
439 generator="featurearchive.template"
440 destination="${storagePrefix}${batch.current.identifier}${storageSuffix}"/>
446 <Define key="pagePrefix" value="${pathprefix}/feature/archive"/>
447 <Define key="storagePrefix" value="${config["Producer.StorageRoot"]}/${pagePrefix}"/>
448 <Define key="docPrefix" value="${config["Producer.DocRoot"]}/${pagePrefix}"/>
450 generator="batchnav.template"
451 destination="${storagePrefix}nav${storageSuffix}"/>
458 <producer name="topicpages">
461 <Set key="_topics" value="-1"/>
462 <Set key="pages" value="3"/>
465 <Set key="_topics" value="-1"/>
466 <Set key="pages" value="-1"/>
469 <Set key="_topics" value="2"/>
470 <Set key="pages" value="4"/>
474 <Enumerate key="topic" table="topic" limit="_topics">
475 <Define key="docSuffix" value=".shtml"/>
476 <Define key="storageSuffix" value=".shtml"/>
478 <List key="special" table="content c"
479 selection="c.is_published='1' and c.to_article_type = ${articletype.topicspecial} and c.id=cxt.content_id and cxt.topic_id = ${topic.id}"
480 order = "webdb_create desc" limit="1"
481 extratables="content_x_topic cxt"/>
483 <Batch key="articles" infokey="batch" table="content c"
484 process="pages" batchsize="20" minbatchsize="10"
485 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}"
486 order="webdb_create asc" extratables="content_x_topic cxt">
489 <Define key="pagePrefix" value="${pathprefix}/${topic.filename}/archive"/>
490 <Define key="storagePrefix" value="${config["Producer.StorageRoot"]}/${pagePrefix}"/>
491 <Define key="docPrefix" value="${config["Producer.DocRoot"]}/${pagePrefix}"/>
494 generator="topicpage.template"
495 destination="${storagePrefix}${batch.current.identifier}${storageSuffix}"/>
501 <Define key="pagePrefix" value="${pathprefix}/${topic.filename}/archive"/>
502 <Define key="storagePrefix" value="${config["Producer.StorageRoot"]}/${pagePrefix}"/>
503 <Define key="docPrefix" value="${config["Producer.DocRoot"]}/${pagePrefix}"/>
505 generator="batchnav.template"
506 destination="${storagePrefix}nav${storageSuffix}"/>
515 <producer name="opnewswireinclude">
517 <verb name="generate" default="1" description="Generates the op newswire"/>
520 <Set key="whichnewswire" value="Open Publishing News" />
521 <List key="newswire" table="content" limit="30"
522 selection="is_published=true and to_article_type=${articletype.newswire}"
523 order="webdb_create desc"/>
526 generator="/newswireinclude.template"
527 destination="${config.storageRoot}/${pathprefix}/newswireinclude.shtml"/>
534 <producer name="rssnewswireinclude">
536 <verb name="generate" default="1" description="Generates the rss newswire"/>
539 <Set key="whichnewswire" value="RSS Publishing News" />
540 <List key="newswire" table="content" limit="30"
541 selection="is_published=true and to_article_type=${articletype.communityrssarticle}"
542 order="webdb_create desc"/>
545 generator="/newswireinclude.template"
546 destination="${config.storageRoot}/${pathprefix}/rssnewswireinclude.shtml"/>
555 <producer name="startpage">
557 <verb name="generate" default="1" description="Generates the startpage"/>
561 <List key="startspecial" table="content" limit="2"
562 selection="is_published=true and to_article_type=${articletype.startspecial}"
563 order="webdb_create desc"/>
565 <List key="features" table="content" limit="10"
566 selection="is_published=true and to_article_type in (${articletype.feature},${articletype.promotedcommunityarticle},${articletype.promotednewswire})"
567 order="webdb_create desc"/>
569 <List key="communityrssarticles" table="content" limit="10"
570 selection="is_published=true and to_article_type in (${articletype.communityrssarticle},${articletype.promotedcommunityarticle})"
571 order="webdb_create desc"/>
573 <List key="newswire" table="content" limit="30"
574 selection="is_published=true and to_article_type=${articletype.newswire}"
575 order="webdb_create desc"/>
577 <List key="breakingnews" table="breakingNews" limit="10"
578 order="webdb_create desc"/>
582 generator="/startpage.template"
583 destination="${config.storageRoot}/${pathprefix}/index.shtml"/>
588 <producer name="synchronization">
590 <verb name="run" default="1" description="Synchronizes the publication site with the production site"/>
594 <If condition="config['Rsync'] in ('1', 'y', 'yes', 'Y')">
596 <Execute command="${config['Rsync.Script.Path']}"/>
603 <producer name="media">
605 <verb name="new" default="1">
606 <Define key="verbcondition" value="(not is_produced)"/>
607 <Set key="limit" value="10"/>
610 <Define key="verbcondition" value=""/>
611 <Set key="limit" value="-1"/>
615 <Define key="verbcondition" value=""/>
616 <Set key="limit" value="10"/>
621 key="media" table="image"
622 selection="${verbcondition}"
624 order="webdb_create desc">
626 <GenerateMedia key="media" />
629 key="media" table="video"
630 selection="${verbcondition}"
632 order="webdb_create desc">
634 <GenerateMedia key="media" />
637 key="media" table="audio"
638 selection="${verbcondition}"
640 order="webdb_create desc">
642 <GenerateMedia key="media" />
645 key="media" table="otherMedia"
646 selection="${verbcondition}"
648 order="webdb_create desc">
650 <GenerateMedia key="media" />
655 <producer name="syndication">
657 <verb name="generate" />
660 <!-- the main features and newswire -->
663 <!-- the topic features and newswires -->
664 <Enumerate key="topic" table="topic">
666 basefilename="${topic.filename}"
667 selection="c.id=cxt.content_id and cxt.topic_id = ${topic.id}"
668 extratables="content_x_topic cxt"
678 <producer name="radicalendar">
683 <!-- groupname you will see as the value of "group" in the url for your radicalendar page, -->
684 <!-- gmtoffset is in minutes -->
685 <Radicalendar key="calendar" groupname="_imc" gmtoffset="60" />
687 generator="/radicalendar.template"
688 destination="${config.storageRoot}/calendarinclude.shtml"/>
695 <producer name="update">
697 <verb name="templates" description="updates templates and bundles">
698 <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/"/>
703 <Execute command="${command}"/>
710 <producer name="generatefpincludes">
715 <Enumerate key="fpimage" table="image" selection="to_media_folder=8 and is_published=true" >
716 <Log message="generating include for image id: ${fpimage.id}" type="info" />
717 <Define key="id" value="${fpimage.id}" />
718 <Define key="server" value="${fpimage.publish_server}" />
719 <Define key="path" value="${fpimage.publish_path}" />
720 <Define key="author" value="${fpimage.creator}" />
721 <Define key="description" value="${fpimage.description}" />
724 generator="/fpinclude.template"
725 destination="${config.storageRoot}/fpincludes/${fpimage.id}.inc" />
731 <producer name="getlocalblogs">
736 <Enumerate key="article" table="content" selection="to_article_type in(${articletype.communityrssfeed}) and is_published=true" order="webdb_create desc">
737 <Log message="Pulling 1.0 feed from ${article.title} at ${article.source}" type="info" />
742 url="${article.source}"
743 articletype="${articletype.communityrssarticle}"
744 blogurl="${article.creator_main_url}"
745 blogname="${article.title}"