<?xml version="1.0" encoding="iso-8859-1"?><!-- generator="b2evolution/3.3.1" -->
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Potash Valley</title>
		<link>http://www.dotnetguru2.org/sebastienros/index.php</link>
		<atom:link rel="self" type="application/rss+xml" href="http://www.dotnetguru2.org/sebastienros/index.php?tempskin=_rss2" />
		<description>S&#233;bastien Ros' Weblog - Thinking in (.Net) objects</description>
		<language>en-US</language>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<admin:generatorAgent rdf:resource="http://b2evolution.net/?v=3.3.1"/>
		<ttl>60</ttl>
				<item>
			<title>Combining changesets in TortoiseHg (Mercurial GUI)</title>
			<link>http://www.dotnetguru2.org/sebastienros/index.php/2011/06/30/combining-changesets-in-tortoisehg-mercurial-gui</link>
			<pubDate>Thu, 30 Jun 2011 21:21:51 +0000</pubDate>			<dc:creator>S&#233;bastien Ros</dc:creator>
			<category domain="main">Projects</category>
<category domain="alt">Orchard</category>			<guid isPermaLink="false">1365@http://www.dotnetguru2.org/</guid>
						<description>&lt;p&gt;Here is how to &lt;strong&gt;merge/combine/fold&lt;/strong&gt; multiple changesets to one. For instance when you commit some changes, then refactor, then apply review comments, . and at the end you have a set of changesets, and you want to get rid on the whole history, so there is only one left.&lt;/p&gt;  &lt;p&gt;In the example below, I created two fake changesets: Foo and Bar&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image001_2.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;clip_image001&quot; border=&quot;0&quot; alt=&quot;clip_image001&quot; src=&quot;http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image001_thumb.png&quot; width=&quot;244&quot; height=&quot;68&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I want to merge them to one changeset. The idea in Mercurial is to :&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;1- update to a specific revision (5384) which will     &lt;br /&gt;&amp;#160;&amp;#160; a. revert the files' contents to this revision      &lt;br /&gt;&amp;#160;&amp;#160; b. mark this revision as the parent of next commits&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;2- revert the changes to the tip revision (5386), which will recreate the content, &lt;b&gt;without changing the parent of commits&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;3- commit changes &lt;/p&gt;  &lt;p&gt;4- delete old changeset&lt;/p&gt;  &lt;h2&gt;Complete story with screenshots&lt;/h2&gt;  &lt;p&gt;1- Right click on the revision 5384 and click Update, nothing hard here&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image002_2.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;clip_image002&quot; border=&quot;0&quot; alt=&quot;clip_image002&quot; src=&quot;http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image002_thumb.png&quot; width=&quot;244&quot; height=&quot;89&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2- Select the tip revision,    &lt;br /&gt;then in the files list,     &lt;br /&gt;right click on a file,     &lt;br /&gt;click on Revert to Revision    &lt;br /&gt;check 'all files'    &lt;br /&gt;ok, ok, ok, .&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image003_2.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;clip_image003&quot; border=&quot;0&quot; alt=&quot;clip_image003&quot; src=&quot;http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image003_thumb.png&quot; width=&quot;244&quot; height=&quot;220&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3- Go to Working Directory, and you'll see the file system is like at the tip, but the parent revision is the one you wanted, so the diff contains all the changes.&lt;/p&gt;  &lt;p&gt;4- To delete the old changesets, you can use the 'mq' extensions from settings, then 'strip' them like this :&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image004_2.png&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;clip_image004&quot; border=&quot;0&quot; alt=&quot;clip_image004&quot; src=&quot;http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image004_thumb.png&quot; width=&quot;244&quot; height=&quot;115&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://www.dotnetguru2.org/sebastienros/index.php/2011/06/30/combining-changesets-in-tortoisehg-mercurial-gui&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>Here is how to <strong>merge/combine/fold</strong> multiple changesets to one. For instance when you commit some changes, then refactor, then apply review comments, . and at the end you have a set of changesets, and you want to get rid on the whole history, so there is only one left.</p>  <p>In the example below, I created two fake changesets: Foo and Bar</p>  <p><a href="http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image001_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image001_thumb.png" width="244" height="68" /></a></p>  <p>I want to merge them to one changeset. The idea in Mercurial is to :</p>  <ul>   <li>1- update to a specific revision (5384) which will     <br />&#160;&#160; a. revert the files' contents to this revision      <br />&#160;&#160; b. mark this revision as the parent of next commits</li> </ul>  <p>2- revert the changes to the tip revision (5386), which will recreate the content, <b>without changing the parent of commits</b></p>  <p>3- commit changes </p>  <p>4- delete old changeset</p>  <h2>Complete story with screenshots</h2>  <p>1- Right click on the revision 5384 and click Update, nothing hard here</p>  <p><a href="http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image002_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image002_thumb.png" width="244" height="89" /></a></p>  <p>2- Select the tip revision,    <br />then in the files list,     <br />right click on a file,     <br />click on Revert to Revision    <br />check 'all files'    <br />ok, ok, ok, .</p>  <p><a href="http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image003_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image003_thumb.png" width="244" height="220" /></a></p>  <p>3- Go to Working Directory, and you'll see the file system is like at the tip, but the parent revision is the one you wanted, so the diff contains all the changes.</p>  <p>4- To delete the old changesets, you can use the 'mq' extensions from settings, then 'strip' them like this :</p>  <p><a href="http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image004_2.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/combining-changesets-in-tortoisehg-mercu_c948/clip_image004_thumb.png" width="244" height="115" /></a></p><div class="item_footer"><p><small><a href="http://www.dotnetguru2.org/sebastienros/index.php/2011/06/30/combining-changesets-in-tortoisehg-mercurial-gui">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.dotnetguru2.org/sebastienros/index.php/2011/06/30/combining-changesets-in-tortoisehg-mercurial-gui#comments</comments>
			<wfw:commentRss>http://www.dotnetguru2.org/sebastienros/index.php?tempskin=_rss2&#38;disp=comments&#38;p=1365</wfw:commentRss>
		</item>
				<item>
			<title>See you at MIX11</title>
			<link>http://www.dotnetguru2.org/sebastienros/index.php/2011/04/01/see-you-at-mix11</link>
			<pubDate>Fri, 01 Apr 2011 18:48:57 +0000</pubDate>			<dc:creator>S&#233;bastien Ros</dc:creator>
			<category domain="main">Misc</category>
<category domain="alt">.NET</category>			<guid isPermaLink="false">1328@http://www.dotnetguru2.org/</guid>
						<description>&lt;p&gt;&lt;img src=&quot;https://msteched.blob.core.windows.net/media/Default/BlogPost/news/MIX11_BB_SeeYouAt_1.gif&quot; /&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://www.dotnetguru2.org/sebastienros/index.php/2011/04/01/see-you-at-mix11&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p><img src="https://msteched.blob.core.windows.net/media/Default/BlogPost/news/MIX11_BB_SeeYouAt_1.gif" /></p><div class="item_footer"><p><small><a href="http://www.dotnetguru2.org/sebastienros/index.php/2011/04/01/see-you-at-mix11">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.dotnetguru2.org/sebastienros/index.php/2011/04/01/see-you-at-mix11#comments</comments>
			<wfw:commentRss>http://www.dotnetguru2.org/sebastienros/index.php?tempskin=_rss2&#38;disp=comments&#38;p=1328</wfw:commentRss>
		</item>
				<item>
			<title>Placement.info hidden features</title>
			<link>http://www.dotnetguru2.org/sebastienros/index.php/2011/04/01/placement-info-hidden-features</link>
			<pubDate>Fri, 01 Apr 2011 17:57:35 +0000</pubDate>			<dc:creator>S&#233;bastien Ros</dc:creator>
			<category domain="main">Orchard</category>			<guid isPermaLink="false">1327@http://www.dotnetguru2.org/</guid>
						<description>&lt;p&gt;The &lt;strong&gt;placement.info&lt;/strong&gt; file contains information on how to customize the rendering for shapes in a theme. Recently we made some changes to enhance its functionalities, and it's great. However no one is using them, not because it's useless, but because I never documented them. And to be honest, I had to dive into the code to remember it.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Path&lt;/h3&gt;  &lt;p&gt;The first thing we added was to be able to alter the &lt;strong&gt;Match&lt;/strong&gt; clause with the current &lt;strong&gt;Path&lt;/strong&gt;. Thus you can disable the rendering or change the location of a specific shape for a set of pages only.&lt;/p&gt;  &lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;Match&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Path&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;/About&amp;quot;&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;DisplayType&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;Summary&amp;quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;Place&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Parts_RoutableTitle_Summary&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;-&amp;quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;Match&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;This example would simply hide the summary on the /About page only. You can also use trailing stars to define it for a container, like &lt;strong&gt;/myblog/*&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;Switching Shape Type&lt;/h3&gt;

&lt;p&gt;Using the current dev version you can also do crazy stuff, like changing the shape type dynamically. For instance, you are about to render a shape A, but is some cases, it should render B instead. You can do it like this:&lt;/p&gt;

&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;Place&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Parts_RoutableTitle&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;Header:5;shape=Foo&amp;quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;This will substitute the &lt;strong&gt;Parts_RoutableTitle&lt;/strong&gt; by the shape &lt;strong&gt;Foo&lt;/strong&gt;. By doing it, you will also clear all alternates and wrappers associated to the current shape. This can be useful when combined with next presented feature.&lt;/p&gt;

&lt;h3&gt;Adding Alternates and Wrappers&lt;/h3&gt;

&lt;p&gt;Using the same technique as shown previously, you can add new alternates and wrappers to a shape based on the current &lt;strong&gt;Match&lt;/strong&gt;.&lt;/p&gt;

&lt;pre class=&quot;csharpcode&quot;&gt;&lt;span class=&quot;kwrd&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;html&quot;&gt;Place&lt;/span&gt; &lt;span class=&quot;attr&quot;&gt;Parts_RoutableTitle&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;=&amp;quot;Header:5;alternate=foo;alternate=bar;wrapper=baz&amp;quot;&lt;/span&gt;&lt;span class=&quot;kwrd&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;You can repeat &lt;strong&gt;alternate &lt;/strong&gt;and &lt;strong&gt;wrapper&lt;/strong&gt; verbs as you need.&lt;/p&gt;

&lt;p&gt;Placement.info is really a simple and powerful way to solve Theming puzzles, and those new features should help even more in this.&lt;/p&gt;

&lt;h5&gt;Update&lt;/h5&gt;

&lt;p&gt;Those features are only available as of version 1.1. The official documentation can be found at &lt;a href=&quot;http://orchardproject.net/docs/Understanding-placement-info.ashx&quot;&gt;&lt;a href=&quot;http://orchardproject.net/docs/Understanding-placement-info.ashx&quot;&gt;http://orchardproject.net/docs/Understanding-placement-info.ashx&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://www.dotnetguru2.org/sebastienros/index.php/2011/04/01/placement-info-hidden-features&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>The <strong>placement.info</strong> file contains information on how to customize the rendering for shapes in a theme. Recently we made some changes to enhance its functionalities, and it's great. However no one is using them, not because it's useless, but because I never documented them. And to be honest, I had to dive into the code to remember it.</p>  <h3></h3>  <h3>Path</h3>  <p>The first thing we added was to be able to alter the <strong>Match</strong> clause with the current <strong>Path</strong>. Thus you can disable the rendering or change the location of a specific shape for a set of pages only.</p>  <pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">Match</span> <span class="attr">Path</span><span class="kwrd">=&quot;/About&quot;</span> <span class="attr">DisplayType</span><span class="kwrd">=&quot;Summary&quot;</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">Place</span> <span class="attr">Parts_RoutableTitle_Summary</span><span class="kwrd">=&quot;-&quot;</span><span class="kwrd">/&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">Match</span><span class="kwrd">&gt;</span></pre>

<p>This example would simply hide the summary on the /About page only. You can also use trailing stars to define it for a container, like <strong>/myblog/*</strong>.</p>

<h3>Switching Shape Type</h3>

<p>Using the current dev version you can also do crazy stuff, like changing the shape type dynamically. For instance, you are about to render a shape A, but is some cases, it should render B instead. You can do it like this:</p>

<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">Place</span> <span class="attr">Parts_RoutableTitle</span><span class="kwrd">=&quot;Header:5;shape=Foo&quot;</span><span class="kwrd">/&gt;</span></pre>

<p>This will substitute the <strong>Parts_RoutableTitle</strong> by the shape <strong>Foo</strong>. By doing it, you will also clear all alternates and wrappers associated to the current shape. This can be useful when combined with next presented feature.</p>

<h3>Adding Alternates and Wrappers</h3>

<p>Using the same technique as shown previously, you can add new alternates and wrappers to a shape based on the current <strong>Match</strong>.</p>

<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">Place</span> <span class="attr">Parts_RoutableTitle</span><span class="kwrd">=&quot;Header:5;alternate=foo;alternate=bar;wrapper=baz&quot;</span><span class="kwrd">/&gt;</span></pre>

<p>You can repeat <strong>alternate </strong>and <strong>wrapper</strong> verbs as you need.</p>

<p>Placement.info is really a simple and powerful way to solve Theming puzzles, and those new features should help even more in this.</p>

<h5>Update</h5>

<p>Those features are only available as of version 1.1. The official documentation can be found at <a href="http://orchardproject.net/docs/Understanding-placement-info.ashx"><a href="http://orchardproject.net/docs/Understanding-placement-info.ashx">http://orchardproject.net/docs/Understanding-placement-info.ashx</a></a></p><div class="item_footer"><p><small><a href="http://www.dotnetguru2.org/sebastienros/index.php/2011/04/01/placement-info-hidden-features">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.dotnetguru2.org/sebastienros/index.php/2011/04/01/placement-info-hidden-features#comments</comments>
			<wfw:commentRss>http://www.dotnetguru2.org/sebastienros/index.php?tempskin=_rss2&#38;disp=comments&#38;p=1327</wfw:commentRss>
		</item>
				<item>
			<title>Orchard Indexing</title>
			<link>http://www.dotnetguru2.org/sebastienros/index.php/2011/02/17/orchard-indexing-1</link>
			<pubDate>Thu, 17 Feb 2011 05:41:05 +0000</pubDate>			<dc:creator>S&#233;bastien Ros</dc:creator>
			<category domain="main">Orchard</category>			<guid isPermaLink="false">1310@http://www.dotnetguru2.org/</guid>
						<description>&lt;p&gt;There is already an existing documentation section on this exact topic in the official Orchard website, at &lt;a title=&quot;http://www.orchardproject.net/docs/Search-and-indexing.ashx&quot; href=&quot;http://www.orchardproject.net/docs/Search-and-indexing.ashx&quot;&gt;&lt;a href=&quot;http://www.orchardproject.net/docs/Search-and-indexing.ashx&quot;&gt;http://www.orchardproject.net/docs/Search-and-indexing.ashx&lt;/a&gt;&lt;/a&gt;. Though, this only covers the site administrator and user experience, to setup and use the search engine. What it doesn't cover is how it works internally and how developers can reuse it, or customize the search experience. And believe me, it's great!&lt;/p&gt;  &lt;p&gt;This post provides details on the Indexing implementation and usage. Next one will focus on querying the index, and customizing the search experience.&lt;/p&gt;  &lt;h3&gt;Anatomy&lt;/h3&gt;  &lt;p&gt;In order to have a search box in your website, you need to enable the Indexing module, then the Search module and finally the Lucene module. &lt;/p&gt;  &lt;p&gt;Indexing is responsible for adding content to an &lt;strong&gt;IIndexProvider&lt;/strong&gt; implementation as soon as a content item has been modified. There is a background task which is running on a separate thread and consumes &lt;strong&gt;IndexingTask&lt;/strong&gt; records, created by a specific content handler event which creates the indexed document information. This point will be cover in detail later.&lt;/p&gt;  &lt;p&gt;Search is providing a Search Form widget, and also a Search Settings to select what indexed fields should be part of the search.&lt;/p&gt;  &lt;p&gt;Lucene is providing a default implementation of &lt;strong&gt;IIndexProvider&lt;/strong&gt; and is used as a dependency of the Index module to save the indexed documents information in a physical storage. It's also providing an &lt;strong&gt;ISearchBuilder&lt;/strong&gt; implementation which is called to build a search query.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Customizing Indexed Content&lt;/h3&gt;  &lt;p&gt;The Indexing module doesn't know anything about the content in Orchard. Though it has to be able to index anything inside a website, even from new modules, like Products, News, or anything else. For that to happen, modules can create implementations of &lt;strong&gt;ContentHandler&lt;/strong&gt; and explicitly define &lt;strong&gt;OnIndexing&amp;lt;T&amp;gt;()&lt;/strong&gt; in order to provide some information of a specific content part. It it defined as this:&lt;/p&gt;  &lt;p&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/af526fecab4b_12495/image_3.png&quot; width=&quot;679&quot; height=&quot;19&quot; /&gt;&lt;/p&gt;  &lt;p&gt;This means you have to provide a lambda which takes exactly two parameters: an &lt;strong&gt;IndexContentContext&lt;/strong&gt; instance, and the content part you should extract indexed information from. &lt;strong&gt;IndexContentContext&lt;/strong&gt; inherits from &lt;strong&gt;ContentContextBase&lt;/strong&gt;, and provide common information about the current content item:&lt;/p&gt;  &lt;p&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/af526fecab4b_12495/image_ecbf8265-8800-4222-ac3b-79363f8d514a.png&quot; width=&quot;490&quot; height=&quot;150&quot; /&gt;&lt;/p&gt;  &lt;p&gt;It also contains a &lt;strong&gt;DocumentIndex&lt;/strong&gt; property of type &lt;strong&gt;IDocumentIndex&lt;/strong&gt; which looks like this:&lt;/p&gt;  &lt;p&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/af526fecab4b_12495/image_9.png&quot; width=&quot;399&quot; height=&quot;382&quot; /&gt;&lt;/p&gt;  &lt;p&gt;This interface is used to directly provide all the information which has to be indexed. The &lt;strong&gt;Add()&lt;/strong&gt; methods are used to add a named field to the index document, &lt;strong&gt;Analyze()&lt;/strong&gt; just tell the concrete index implementation that the text should be tokenized (to differentiate text content like a title from metadata like an Id or an integral value). For instance, when &lt;strong&gt;OnIndexing()&lt;/strong&gt; is called on the &lt;strong&gt;BodyPart&lt;/strong&gt; (which is what is containing the body of a Page for instance) the following handler is executed:&lt;/p&gt;  &lt;p&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/af526fecab4b_12495/image_9bd2f32b-43d7-4f5a-8e34-d9cba4e2d078.png&quot; width=&quot;494&quot; height=&quot;94&quot; /&gt;&lt;/p&gt;  &lt;p&gt;The text of the body and its inner format are indexed. The text calls &lt;strong&gt;RemoveTags()&lt;/strong&gt; which is used to remove all HTML or XML tags of a content. As our BodyPart will mostly contain HTML, and we don't want a search query on &quot;div&quot; to return all documents, then this method is used on this field. Finally &lt;strong&gt;Analyze()&lt;/strong&gt; is called to be able to search on each different word of the content. The format is save in a separate field, and as it should only contain a mime type like text/html or so, we don't need to analyze its content or to remove tags. Though, we mark this field with a call to &lt;strong&gt;Store()&lt;/strong&gt; in order to be able to retrieve the exact value from a search result, as indexing will generally break the original content. This should be done for any metadata added in the index.&lt;/p&gt;  &lt;p&gt;NB: You can add several values to the same field name, even from different handlers. An example will be provided later.&lt;/p&gt;  &lt;p&gt;This should be enough to understand that any module can provide information about the indexed information of a specific content item. For more examples just take a look at how Tags, Comments or Routable add their own properties in the index.&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://www.dotnetguru2.org/sebastienros/index.php/2011/02/17/orchard-indexing-1&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>There is already an existing documentation section on this exact topic in the official Orchard website, at <a title="http://www.orchardproject.net/docs/Search-and-indexing.ashx" href="http://www.orchardproject.net/docs/Search-and-indexing.ashx"><a href="http://www.orchardproject.net/docs/Search-and-indexing.ashx">http://www.orchardproject.net/docs/Search-and-indexing.ashx</a></a>. Though, this only covers the site administrator and user experience, to setup and use the search engine. What it doesn't cover is how it works internally and how developers can reuse it, or customize the search experience. And believe me, it's great!</p>  <p>This post provides details on the Indexing implementation and usage. Next one will focus on querying the index, and customizing the search experience.</p>  <h3>Anatomy</h3>  <p>In order to have a search box in your website, you need to enable the Indexing module, then the Search module and finally the Lucene module. </p>  <p>Indexing is responsible for adding content to an <strong>IIndexProvider</strong> implementation as soon as a content item has been modified. There is a background task which is running on a separate thread and consumes <strong>IndexingTask</strong> records, created by a specific content handler event which creates the indexed document information. This point will be cover in detail later.</p>  <p>Search is providing a Search Form widget, and also a Search Settings to select what indexed fields should be part of the search.</p>  <p>Lucene is providing a default implementation of <strong>IIndexProvider</strong> and is used as a dependency of the Index module to save the indexed documents information in a physical storage. It's also providing an <strong>ISearchBuilder</strong> implementation which is called to build a search query.</p>  <h3></h3>  <h3>Customizing Indexed Content</h3>  <p>The Indexing module doesn't know anything about the content in Orchard. Though it has to be able to index anything inside a website, even from new modules, like Products, News, or anything else. For that to happen, modules can create implementations of <strong>ContentHandler</strong> and explicitly define <strong>OnIndexing&lt;T&gt;()</strong> in order to provide some information of a specific content part. It it defined as this:</p>  <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/af526fecab4b_12495/image_3.png" width="679" height="19" /></p>  <p>This means you have to provide a lambda which takes exactly two parameters: an <strong>IndexContentContext</strong> instance, and the content part you should extract indexed information from. <strong>IndexContentContext</strong> inherits from <strong>ContentContextBase</strong>, and provide common information about the current content item:</p>  <p><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/af526fecab4b_12495/image_ecbf8265-8800-4222-ac3b-79363f8d514a.png" width="490" height="150" /></p>  <p>It also contains a <strong>DocumentIndex</strong> property of type <strong>IDocumentIndex</strong> which looks like this:</p>  <p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/af526fecab4b_12495/image_9.png" width="399" height="382" /></p>  <p>This interface is used to directly provide all the information which has to be indexed. The <strong>Add()</strong> methods are used to add a named field to the index document, <strong>Analyze()</strong> just tell the concrete index implementation that the text should be tokenized (to differentiate text content like a title from metadata like an Id or an integral value). For instance, when <strong>OnIndexing()</strong> is called on the <strong>BodyPart</strong> (which is what is containing the body of a Page for instance) the following handler is executed:</p>  <p><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/af526fecab4b_12495/image_9bd2f32b-43d7-4f5a-8e34-d9cba4e2d078.png" width="494" height="94" /></p>  <p>The text of the body and its inner format are indexed. The text calls <strong>RemoveTags()</strong> which is used to remove all HTML or XML tags of a content. As our BodyPart will mostly contain HTML, and we don't want a search query on "div" to return all documents, then this method is used on this field. Finally <strong>Analyze()</strong> is called to be able to search on each different word of the content. The format is save in a separate field, and as it should only contain a mime type like text/html or so, we don't need to analyze its content or to remove tags. Though, we mark this field with a call to <strong>Store()</strong> in order to be able to retrieve the exact value from a search result, as indexing will generally break the original content. This should be done for any metadata added in the index.</p>  <p>NB: You can add several values to the same field name, even from different handlers. An example will be provided later.</p>  <p>This should be enough to understand that any module can provide information about the indexed information of a specific content item. For more examples just take a look at how Tags, Comments or Routable add their own properties in the index.</p><div class="item_footer"><p><small><a href="http://www.dotnetguru2.org/sebastienros/index.php/2011/02/17/orchard-indexing-1">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.dotnetguru2.org/sebastienros/index.php/2011/02/17/orchard-indexing-1#comments</comments>
			<wfw:commentRss>http://www.dotnetguru2.org/sebastienros/index.php?tempskin=_rss2&#38;disp=comments&#38;p=1310</wfw:commentRss>
		</item>
				<item>
			<title>Rewrite Module</title>
			<link>http://www.dotnetguru2.org/sebastienros/index.php/2011/02/16/rewrite-module</link>
			<pubDate>Wed, 16 Feb 2011 06:06:14 +0000</pubDate>			<dc:creator>S&#233;bastien Ros</dc:creator>
			<category domain="main">.NET</category>			<guid isPermaLink="false">1308@http://www.dotnetguru2.org/</guid>
						<description>&lt;p&gt;Recently, after the release of the first public version of Orchard, I have created a bunch of modules as external contributions, even though I am in the core team. And actually the whole team has released some contributed modules. &lt;/p&gt;

&lt;p&gt;So far, I have released 12 modules on the gallery, some of them being co-authored with other team members. But the issue is that apart from a link to the source code and a simple name, you don&amp;#8217;t have any hint on what it is supposed to do. There is a documentation page though on &lt;a href=&quot;http://www.codeplex.com&quot;&gt;&lt;a href=&quot;http://www.codeplex.com&lt;&quot;&gt;www.codeplex.com&lt;&lt;/a&gt;/a&gt; for each of them, but I am lazy, so I figured it could be easier to provide at least a blog post to explain the overall goals and usage for those modules.&lt;/p&gt;

&lt;h3&gt;Origins&lt;/h3&gt;

&lt;p&gt;Let&amp;#8217;s talk a little bit about the &lt;a href=&quot;http://www.orchardproject.net/gallery/Packages/Modules/Details/Orchard-Module-Contrib-RewriteRules-0-9&quot;&gt;Rewrite Module&lt;/a&gt;. As for most of the modules I have created, it started on an existing problem that needed a solution. In this case we were about to launch the Orchard Contest website (&lt;a href=&quot;http://www.orchardproject.net/omc&quot;&gt;&lt;a href=&quot;http://www.orchardproject.net/omc&lt;&quot;&gt;www.orchardproject.net/omc&lt;&lt;/a&gt;/a&gt;), and we had a SSL certificate for the &lt;a href=&quot;http://www.orchardproject.net&quot;&gt;www.orchardproject.net&lt;/a&gt; domain. The SSL was working great and it was a breeze to configure IIS in order to use it. But Bradley, a PM on Orchard responsible for this site, discovered that when users were coming using the orchardproject.net domain, without the www subdomain, then the HTTPS security alert was shown in browsers. Normal as the certificate was for a single domain. Too late to order another one, or even better a wildcard one as going through the Verisign process would have been too long for us. So I suggested Bradley we could hack a specific MVC Filter in this application to automatically redirect users to the correct domain, but one idea coming after the other, I ended up creating a more complete module &amp;#8230; typically me!&lt;/p&gt;

&lt;p&gt;The Orchard Contest website is built on Orchard itself. Thus we could leverage the users management, a theme that Jon, a web/UX designer in our team, had already created, and also have another case study for Orchard. So instead of creating a simple hard coded MVC filter, let&amp;#8217;s create a reusable Orchard module. What could have be reused was the simple one rule redirect stuff. And it reminded me how it is done in PHP applications running on Apache with .htaccess files. IIS has simple and yet very powerful tools to handle url rewriting, and it can even parse Apache .htaccess files, but the goal of a CMS is also to have a single configuration point for the whole application, so having a module makes sense as you might not have access to IIS manager when using a shared hosting provider.&lt;/p&gt;

&lt;p&gt;And that&amp;#8217;s it! The Rewrite Module is a .htaccess file handler, which enables a lot of possibilities in you Orchard hosting story. Once installed and enabled, a new settings section is created and looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/93dc4e284db2_11c2d/image_2.png&quot;&gt;&lt;img style=&quot;display: inline&quot; title=&quot;image&quot; alt=&quot;image&quot; src=&quot;http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/93dc4e284db2_11c2d/image_thumb.png&quot; width=&quot;574&quot; height=&quot;162&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;How to use it&lt;/h3&gt;

&lt;p&gt;You might have noticed the little text under the rule editing zone, linking to the current Apache documentation. Why bother creating some documentation that already exists! Another link that I like a lot is &lt;a title=&quot;http://corz.org/serv/tricks/htaccess.php&quot; href=&quot;http://corz.org/serv/tricks/htaccess2.php&quot;&gt;&lt;a href=&quot;http://corz.org/serv/tricks/htaccess2.php&quot;&gt;http://corz.org/serv/tricks/htaccess2.php&lt;/a&gt;&lt;/a&gt;, because it provides a lot of interesting scenarios that can be done with this module, like: 

  &lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;preventing hot linking &lt;/li&gt;

&lt;li&gt;blocking specific IP ranges &lt;/li&gt;

&lt;li&gt;blocking specific browser agents or crawlers &lt;/li&gt;

&lt;li&gt;forcing SSL &lt;/li&gt;

&lt;li&gt;domain redirections &lt;/li&gt;

&lt;li&gt;&amp;#8230;&lt;/li&gt;
&lt;/ul&gt; 
  &lt;p&gt;For instance, in the Orchard Contest website we use this rule to redirect users to the correct domain:&lt;/p&gt;

  &lt;p&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;font size=&quot;2&quot;&gt;RewriteCond %{HTTP_HOST} ^orchardproject.net$ [NC]
        &lt;br /&gt;RewriteRule ^(.*)$ &lt;a href=&quot;http://www.orchardproject.net/$1&quot;&gt;http://www.orchardproject.net/$1&lt;/a&gt; [R=301,NC,L] 

        &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;

  &lt;h3&gt;Implementation details&lt;/h3&gt;

  &lt;p&gt;The implementation is quite simple. First there is a &lt;strong&gt;RedirectSettingsPart&lt;/strong&gt; and the associated record class to store the settings.&lt;/p&gt;

  &lt;p&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;RedirectSettingsPart&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; : &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;ContentPart&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;lt;&lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;RedirectSettingsPartRecord&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;&amp;gt; {&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;string&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; Rules {&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;get&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; { &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; Record.Rules; }&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;set&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; { Record.Rules = &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;value&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;; }&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot; color=&quot;#000000&quot;&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;bool&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; Enabled {&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;get&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; { &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; Record.Enabled; }&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;set&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; { Record.Enabled = &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;value&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;; }&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot; color=&quot;#000000&quot;&gt;} 
          &lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p&gt;Like other settings parts, there is also a driver, handler, migration and template file. But that&amp;#8217;s a common and well documented implementation.&lt;/p&gt;

  &lt;p&gt;The most important part is to handle all requests and trigger specific actions based on the rules in these settings. This is done by implementing &lt;b&gt;IActionFilter&lt;/b&gt; which lets us being called whenever a controller&amp;#8217;s action is executed. In Orchard we also need to inherit from &lt;b&gt;FilterProvider&lt;/b&gt; in order to getting registered.&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;RedirectFilter&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; : &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;FilterProvider&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;, &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;IActionFilter&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; {&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;readonly&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;IOrchardServices&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; _services;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot; color=&quot;#000000&quot;&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; RedirectFilter(&lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;IOrchardServices&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; services) {&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;_services = services;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;Logger = &lt;/font&gt;&lt;/font&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;NullLogger&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;.Instance;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot; color=&quot;#000000&quot;&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;ILogger&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; Logger { &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;get&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;set&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;; }&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot; color=&quot;#000000&quot;&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; OnActionExecuted(&lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;ActionExecutedContext&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; filterContext) { }&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot; color=&quot;#000000&quot;&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; OnActionExecuting(&lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;ActionExecutingContext&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; filterContext) {&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style=&quot;font-family: ; color: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot; color=&quot;#008000&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: ; color: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot; color=&quot;#008000&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // implementation&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&amp;#160;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;}&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&amp;#160;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p&gt;This event can then return specific &lt;b&gt;ActionResult&lt;/b&gt; objects. So after parsing the rewirte rules, and checked a condition is fulfilled, there are actually three different possible results:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
 &lt;b&gt;HttpUnauthorizedResult&lt;/b&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;b&gt;RedirectResult&lt;/b&gt;, when a permanent redirect is requested
&lt;/li&gt;

&lt;li&gt;
&lt;b&gt;TransferResult&lt;/b&gt;, for non permanents redirects, preventing for having the user to send another request
&lt;/li&gt;
&lt;/ul&gt;

  &lt;p&gt;&lt;b&gt;TransferResult&lt;/b&gt; is a simple custom &lt;b&gt;ActionResult&lt;/b&gt; implementation:&lt;/p&gt;


  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;///&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span&gt;&lt;font color=&quot;#008000&quot;&gt; &lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style=&quot;font-size: 9.5pt&quot; color=&quot;#808080&quot;&gt;&amp;lt;summary&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span st&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;///&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font style=&quot;font-size: 9.5pt&quot; color=&quot;#008000&quot;&gt; Transfers execution to the supplied url.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;///&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span&gt;&lt;font color=&quot;#008000&quot;&gt; &lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style=&quot;font-size: 9.5pt&quot; color=&quot;#808080&quot;&gt;&amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span &quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;TransferResult&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; : &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;RedirectResult&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; {&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; TransferResult(&lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;string&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; url)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;: &lt;/font&gt;&lt;/font&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;base&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;(url) {}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot; color=&quot;#000000&quot;&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;override&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; ExecuteResult(&lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;ControllerContext&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; context) {&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; httpContext = &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;HttpContext&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;.Current;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot; color=&quot;#000000&quot;&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;httpContext.RewritePath(Url, &lt;/font&gt;&lt;/font&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;false&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot; color=&quot;#000000&quot;&gt;&amp;#160;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;IHttpHandler&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; httpHandler = &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt; &lt;/font&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;MvcHttpHandler&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;();&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p style=&quot;line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;font-family: &quot;&gt;&lt;font face=&quot;Consolas&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;span style=&quot;mso-spacerun: yes&quot;&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;httpHandler.ProcessRequest(&lt;/font&gt;&lt;/font&gt;&lt;font style=&quot;font-size: 9.5pt&quot;&gt;&lt;span style=&quot;color: &quot;&gt;&lt;font color=&quot;#2b91af&quot;&gt;HttpContext&lt;/font&gt;&lt;/span&gt;&lt;font color=&quot;#000000&quot;&gt;.Current);
            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }

            &lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

  &lt;p&gt;I hope this little story will encourage you into creating reusable modules instead of doing one shot code. And if you happen to use this module someday, let me know.&lt;/p&gt;

&lt;p&gt;As for most modules you can find on the gallery, there is a codeplex project for it, &lt;a href=&quot;http://orchardrewriterules.codeplex.com&quot;&gt;&lt;a href=&quot;http://orchardrewriterules.codeplex.com&quot;&gt;http://orchardrewriterules.codeplex.com&lt;/a&gt;&lt;/a&gt;, where you can submit bugs, get the source code, or read some documentation &amp;#8230; when there will be some.&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://www.dotnetguru2.org/sebastienros/index.php/2011/02/16/rewrite-module&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>Recently, after the release of the first public version of Orchard, I have created a bunch of modules as external contributions, even though I am in the core team. And actually the whole team has released some contributed modules. </p>

<p>So far, I have released 12 modules on the gallery, some of them being co-authored with other team members. But the issue is that apart from a link to the source code and a simple name, you don&#8217;t have any hint on what it is supposed to do. There is a documentation page though on <a href="http://www.codeplex.com"><a href="http://www.codeplex.com<">www.codeplex.com<</a>/a> for each of them, but I am lazy, so I figured it could be easier to provide at least a blog post to explain the overall goals and usage for those modules.</p>

<h3>Origins</h3>

<p>Let&#8217;s talk a little bit about the <a href="http://www.orchardproject.net/gallery/Packages/Modules/Details/Orchard-Module-Contrib-RewriteRules-0-9">Rewrite Module</a>. As for most of the modules I have created, it started on an existing problem that needed a solution. In this case we were about to launch the Orchard Contest website (<a href="http://www.orchardproject.net/omc"><a href="http://www.orchardproject.net/omc<">www.orchardproject.net/omc<</a>/a>), and we had a SSL certificate for the <a href="http://www.orchardproject.net">www.orchardproject.net</a> domain. The SSL was working great and it was a breeze to configure IIS in order to use it. But Bradley, a PM on Orchard responsible for this site, discovered that when users were coming using the orchardproject.net domain, without the www subdomain, then the HTTPS security alert was shown in browsers. Normal as the certificate was for a single domain. Too late to order another one, or even better a wildcard one as going through the Verisign process would have been too long for us. So I suggested Bradley we could hack a specific MVC Filter in this application to automatically redirect users to the correct domain, but one idea coming after the other, I ended up creating a more complete module &#8230; typically me!</p>

<p>The Orchard Contest website is built on Orchard itself. Thus we could leverage the users management, a theme that Jon, a web/UX designer in our team, had already created, and also have another case study for Orchard. So instead of creating a simple hard coded MVC filter, let&#8217;s create a reusable Orchard module. What could have be reused was the simple one rule redirect stuff. And it reminded me how it is done in PHP applications running on Apache with .htaccess files. IIS has simple and yet very powerful tools to handle url rewriting, and it can even parse Apache .htaccess files, but the goal of a CMS is also to have a single configuration point for the whole application, so having a module makes sense as you might not have access to IIS manager when using a shared hosting provider.</p>

<p>And that&#8217;s it! The Rewrite Module is a .htaccess file handler, which enables a lot of possibilities in you Orchard hosting story. Once installed and enabled, a new settings section is created and looks like this:</p>

<p><a href="http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/93dc4e284db2_11c2d/image_2.png"><img style="display: inline" title="image" alt="image" src="http://www.dotnetguru2.org/media/blogs/sebastienros/windows-live-writer/93dc4e284db2_11c2d/image_thumb.png" width="574" height="162" /></a></p>

<h3>How to use it</h3>

<p>You might have noticed the little text under the rule editing zone, linking to the current Apache documentation. Why bother creating some documentation that already exists! Another link that I like a lot is <a title="http://corz.org/serv/tricks/htaccess.php" href="http://corz.org/serv/tricks/htaccess2.php"><a href="http://corz.org/serv/tricks/htaccess2.php">http://corz.org/serv/tricks/htaccess2.php</a></a>, because it provides a lot of interesting scenarios that can be done with this module, like: 

  <br /></p>
<ul>
<li>preventing hot linking </li>

<li>blocking specific IP ranges </li>

<li>blocking specific browser agents or crawlers </li>

<li>forcing SSL </li>

<li>domain redirections </li>

<li>&#8230;</li>
</ul> 
  <p>For instance, in the Orchard Contest website we use this rule to redirect users to the correct domain:</p>

  <p><font face="Courier New"><font size="2">RewriteCond %{HTTP_HOST} ^orchardproject.net$ [NC]
        <br />RewriteRule ^(.*)$ <a href="http://www.orchardproject.net/$1">http://www.orchardproject.net/$1</a> [R=301,NC,L] 

        <br /></font></font></p>

  <h3>Implementation details</h3>

  <p>The implementation is quite simple. First there is a <strong>RedirectSettingsPart</strong> and the associated record class to store the settings.</p>

  <p><font face="Consolas"><span><font color="#0000ff"><font style="font-size: 9.5pt">public</font></font></span><span><font style="font-size: 9.5pt"><font color="#000000"> </font><span style="color: "><font color="#0000ff">class</font></span><font color="#000000"> </font><span style="color: "><font color="#2b91af">RedirectSettingsPart</font></span><font color="#000000"> : </font><span style="color: "><font color="#2b91af">ContentPart</font></span><font color="#000000">&lt;</font><span style="color: "><font color="#2b91af">RedirectSettingsPartRecord</font></span><font color="#000000">&gt; {</font></font></span></font></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">public</font></span><font color="#000000"> </font><span style="color: "><font color="#0000ff">string</font></span><font color="#000000"> Rules {</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">get</font></span><font color="#000000"> { </font><span style="color: "><font color="#0000ff">return</font></span><font color="#000000"> Record.Rules; }</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">set</font></span><font color="#000000"> { Record.Rules = </font><span style="color: "><font color="#0000ff">value</font></span><font color="#000000">; }</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font color="#000000"><span style="mso-spacerun: yes"><font style="font-size: 9.5pt">&#160;&#160;&#160; </font></span><font style="font-size: 9.5pt">}</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font style="font-size: 9.5pt" color="#000000">&#160;</font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">public</font></span><font color="#000000"> </font><span style="color: "><font color="#0000ff">bool</font></span><font color="#000000"> Enabled {</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">get</font></span><font color="#000000"> { </font><span style="color: "><font color="#0000ff">return</font></span><font color="#000000"> Record.Enabled; }</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">set</font></span><font color="#000000"> { Record.Enabled = </font><span style="color: "><font color="#0000ff">value</font></span><font color="#000000">; }</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font color="#000000"><span style="mso-spacerun: yes"><font style="font-size: 9.5pt">&#160;&#160;&#160; </font></span><font style="font-size: 9.5pt">}</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font style="font-size: 9.5pt" color="#000000">} 
          <br /></font></font></span></p>

  <p>Like other settings parts, there is also a driver, handler, migration and template file. But that&#8217;s a common and well documented implementation.</p>

  <p>The most important part is to handle all requests and trigger specific actions based on the rules in these settings. This is done by implementing <b>IActionFilter</b> which lets us being called whenever a controller&#8217;s action is executed. In Orchard we also need to inherit from <b>FilterProvider</b> in order to getting registered.</p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><font face="Consolas"><span><font color="#0000ff"><font style="font-size: 9.5pt">public</font></font></span><span><font style="font-size: 9.5pt"><font color="#000000"> </font><span style="color: "><font color="#0000ff">class</font></span><font color="#000000"> </font><span style="color: "><font color="#2b91af">RedirectFilter</font></span><font color="#000000"> : </font><span style="color: "><font color="#2b91af">FilterProvider</font></span><font color="#000000">, </font><span style="color: "><font color="#2b91af">IActionFilter</font></span><font color="#000000"> {</font></font></span></font></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">private</font></span><font color="#000000"> </font><span style="color: "><font color="#0000ff">readonly</font></span><font color="#000000"> </font><span style="color: "><font color="#2b91af">IOrchardServices</font></span><font color="#000000"> _services;</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font style="font-size: 9.5pt" color="#000000">&#160;</font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">public</font></span><font color="#000000"> RedirectFilter(</font><span style="color: "><font color="#2b91af">IOrchardServices</font></span><font color="#000000"> services) {</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font color="#000000"><span style="mso-spacerun: yes"><font style="font-size: 9.5pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font></span><font style="font-size: 9.5pt">_services = services;</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font color="#000000"><span style="mso-spacerun: yes"><font style="font-size: 9.5pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font></span><font style="font-size: 9.5pt">Logger = </font></font><font style="font-size: 9.5pt"><span style="color: "><font color="#2b91af">NullLogger</font></span><font color="#000000">.Instance;</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font color="#000000"><span style="mso-spacerun: yes"><font style="font-size: 9.5pt">&#160;&#160;&#160; </font></span><font style="font-size: 9.5pt">}</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font style="font-size: 9.5pt" color="#000000">&#160;</font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">public</font></span><font color="#000000"> </font><span style="color: "><font color="#2b91af">ILogger</font></span><font color="#000000"> Logger { </font><span style="color: "><font color="#0000ff">get</font></span><font color="#000000">; </font><span style="color: "><font color="#0000ff">set</font></span><font color="#000000">; }</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font style="font-size: 9.5pt" color="#000000">&#160;</font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">public</font></span><font color="#000000"> </font><span style="color: "><font color="#0000ff">void</font></span><font color="#000000"> OnActionExecuted(</font><span style="color: "><font color="#2b91af">ActionExecutedContext</font></span><font color="#000000"> filterContext) { }</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font style="font-size: 9.5pt" color="#000000">&#160;</font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">public</font></span><font color="#000000"> </font><span style="color: "><font color="#0000ff">void</font></span><font color="#000000"> OnActionExecuting(</font><span style="color: "><font color="#2b91af">ActionExecutingContext</font></span><font color="#000000"> filterContext) {</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt"></font></font></span></font></span><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt"></font></font></span></font></span><span style="font-family: ; color: "><font face="Consolas"><font style="font-size: 9.5pt" color="#008000"></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: ; color: "><font face="Consolas"><font style="font-size: 9.5pt" color="#008000">&#160;&#160;&#160;&#160;&#160;&#160;&#160; // implementation</font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal">&#160;</p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal">&#160;&#160;&#160;&#160;&#160;&#160; }</p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal">}</p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal">&#160;</p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "></span></p>

  <p>This event can then return specific <b>ActionResult</b> objects. So after parsing the rewirte rules, and checked a condition is fulfilled, there are actually three different possible results:</p>
<ul>
<li>
 <b>HttpUnauthorizedResult</b>
</li>

<li>
<b>RedirectResult</b>, when a permanent redirect is requested
</li>

<li>
<b>TransferResult</b>, for non permanents redirects, preventing for having the user to send another request
</li>
</ul>

  <p><b>TransferResult</b> is a simple custom <b>ActionResult</b> implementation:</p>


  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><font face="Consolas"><span><font color="#808080"><font style="font-size: 9.5pt">///</font></font></span><font style="font-size: 9.5pt"><span><font color="#008000"> </font></span></font><span><font style="font-size: 9.5pt" color="#808080">&lt;summary&gt;</font></span></font></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><font face="Consolas"><span st><font color="#808080"><font style="font-size: 9.5pt">///</font></font></span><span><font style="font-size: 9.5pt" color="#008000"> Transfers execution to the supplied url.</font></span></font></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><font face="Consolas"><span><font color="#808080"><font style="font-size: 9.5pt">///</font></font></span><font style="font-size: 9.5pt"><span><font color="#008000"> </font></span></font><span><font style="font-size: 9.5pt" color="#808080">&lt;/summary&gt;</font></span></font></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><font face="Consolas"><span><font color="#0000ff"><font style="font-size: 9.5pt">private</font></font></span><span "><font style="font-size: 9.5pt"><font color="#000000"> </font><span style="color: "><font color="#0000ff">class</font></span><font color="#000000"> </font><span style="color: "><font color="#2b91af">TransferResult</font></span><font color="#000000"> : </font><span style="color: "><font color="#2b91af">RedirectResult</font></span><font color="#000000"> {</font></font></span></font></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">public</font></span><font color="#000000"> TransferResult(</font><span style="color: "><font color="#0000ff">string</font></span><font color="#000000"> url)</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font color="#000000"><span style="mso-spacerun: yes"><font style="font-size: 9.5pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font></span><font style="font-size: 9.5pt">: </font></font><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">base</font></span><font color="#000000">(url) {}</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font style="font-size: 9.5pt" color="#000000">&#160;</font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">public</font></span><font color="#000000"> </font><span style="color: "><font color="#0000ff">override</font></span><font color="#000000"> </font><span style="color: "><font color="#0000ff">void</font></span><font color="#000000"> ExecuteResult(</font><span style="color: "><font color="#2b91af">ControllerContext</font></span><font color="#000000"> context) {</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">var</font></span><font color="#000000"> httpContext = </font><span style="color: "><font color="#2b91af">HttpContext</font></span><font color="#000000">.Current;</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font style="font-size: 9.5pt" color="#000000">&#160;</font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font color="#000000"><span style="mso-spacerun: yes"><font style="font-size: 9.5pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font></span><font style="font-size: 9.5pt">httpContext.RewritePath(Url, </font></font><font style="font-size: 9.5pt"><span style="color: "><font color="#0000ff">false</font></span><font color="#000000">);</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font style="font-size: 9.5pt" color="#000000">&#160;</font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><span style="mso-spacerun: yes"><font color="#000000"><font style="font-size: 9.5pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font></font></span><font style="font-size: 9.5pt"><span style="color: "><font color="#2b91af">IHttpHandler</font></span><font color="#000000"> httpHandler = </font><span style="color: "><font color="#0000ff">new</font></span><font color="#000000"> </font><span style="color: "><font color="#2b91af">MvcHttpHandler</font></span><font color="#000000">();</font></font></font></span></p>

  <p style="line-height: normal; margin: 0in 0in 0pt; text-autospace: ; mso-layout-grid-align: none" class="MsoNormal"><span style="font-family: "><font face="Consolas"><font color="#000000"><span style="mso-spacerun: yes"><font style="font-size: 9.5pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font></span><font style="font-size: 9.5pt">httpHandler.ProcessRequest(</font></font><font style="font-size: 9.5pt"><span style="color: "><font color="#2b91af">HttpContext</font></span><font color="#000000">.Current);
            <br />&#160;&#160;&#160; }

            <br />}</font></font></font></span></p>

  <p>I hope this little story will encourage you into creating reusable modules instead of doing one shot code. And if you happen to use this module someday, let me know.</p>

<p>As for most modules you can find on the gallery, there is a codeplex project for it, <a href="http://orchardrewriterules.codeplex.com"><a href="http://orchardrewriterules.codeplex.com">http://orchardrewriterules.codeplex.com</a></a>, where you can submit bugs, get the source code, or read some documentation &#8230; when there will be some.</p><div class="item_footer"><p><small><a href="http://www.dotnetguru2.org/sebastienros/index.php/2011/02/16/rewrite-module">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.dotnetguru2.org/sebastienros/index.php/2011/02/16/rewrite-module#comments</comments>
			<wfw:commentRss>http://www.dotnetguru2.org/sebastienros/index.php?tempskin=_rss2&#38;disp=comments&#38;p=1308</wfw:commentRss>
		</item>
				<item>
			<title>Half Orchard</title>
			<link>http://www.dotnetguru2.org/sebastienros/index.php/2010/08/03/orchard-alpha</link>
			<pubDate>Tue, 03 Aug 2010 14:16:28 +0000</pubDate>			<dc:creator>S&#233;bastien Ros</dc:creator>
			<category domain="main">Orchard</category>			<guid isPermaLink="false">1253@http://www.dotnetguru2.org/</guid>
						<description>&lt;p&gt;After several months of development, the Orchard team is proud to deliver the first important release of the product. It's still an early version, namely number 0.5, though is now stable enough in terms of API and core functionalities to start relying on it to create modules, and more ...&lt;/p&gt;
&lt;p&gt;You can get it on &lt;a title=&quot;Orchard 0.5 on Codeplex&quot; href=&quot;http://orchard.codeplex.com/releases/view/45076&quot;&gt;Codeplex&lt;/a&gt;, where the code is hosted and which is our main code source repository, so you can see exactly what is done and when.&amp;#160;&amp;#160;&lt;/p&gt;
&lt;p&gt;I have been on the team for almost 4 months, and I'm just very excited by the shape of it, and where it is going. There are still a lot of bugs, and you can't do much with this release as a end user. Though the target with that one is the developer, so that we can rely on a great set of community module early, and we get feedback from the .NET community.&lt;/p&gt;
&lt;p&gt;There are already some web sites and blogs running on Orchard, and people are very happy with the switch so far. Now we will start another round of development tasks to reach the Beta version around October. The next version is targeting the designers, with a first big task for us to completely rebuild the Theme engine.&lt;/p&gt;
&lt;p&gt;The whole team is participating the design of all the modules, though I have been personaly involved in the development of the Azure management, the Search module, and also the Data Migration story, so if you have any remark or question on these modules, feel free to enter the discussion with me. We are also very active on the Forums &lt;a href=&quot;http://social.msdn.microsoft.com/Forums/en-US/orchardsupport/threads&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://social.msdn.microsoft.com/Forums/en-US/orcharddiscussions/threads&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://www.dotnetguru2.org/sebastienros/index.php/2010/08/03/orchard-alpha&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>After several months of development, the Orchard team is proud to deliver the first important release of the product. It's still an early version, namely number 0.5, though is now stable enough in terms of API and core functionalities to start relying on it to create modules, and more ...</p>
<p>You can get it on <a title="Orchard 0.5 on Codeplex" href="http://orchard.codeplex.com/releases/view/45076">Codeplex</a>, where the code is hosted and which is our main code source repository, so you can see exactly what is done and when.&#160;&#160;</p>
<p>I have been on the team for almost 4 months, and I'm just very excited by the shape of it, and where it is going. There are still a lot of bugs, and you can't do much with this release as a end user. Though the target with that one is the developer, so that we can rely on a great set of community module early, and we get feedback from the .NET community.</p>
<p>There are already some web sites and blogs running on Orchard, and people are very happy with the switch so far. Now we will start another round of development tasks to reach the Beta version around October. The next version is targeting the designers, with a first big task for us to completely rebuild the Theme engine.</p>
<p>The whole team is participating the design of all the modules, though I have been personaly involved in the development of the Azure management, the Search module, and also the Data Migration story, so if you have any remark or question on these modules, feel free to enter the discussion with me. We are also very active on the Forums <a href="http://social.msdn.microsoft.com/Forums/en-US/orchardsupport/threads">here</a> and <a href="http://social.msdn.microsoft.com/Forums/en-US/orcharddiscussions/threads">here</a>.</p>
<p>&#160;</p><div class="item_footer"><p><small><a href="http://www.dotnetguru2.org/sebastienros/index.php/2010/08/03/orchard-alpha">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.dotnetguru2.org/sebastienros/index.php/2010/08/03/orchard-alpha#comments</comments>
			<wfw:commentRss>http://www.dotnetguru2.org/sebastienros/index.php?tempskin=_rss2&#38;disp=comments&#38;p=1253</wfw:commentRss>
		</item>
				<item>
			<title>Working at Microsoft</title>
			<link>http://www.dotnetguru2.org/sebastienros/index.php/2010/07/06/working-at-microsoft</link>
			<pubDate>Tue, 06 Jul 2010 16:23:36 +0000</pubDate>			<dc:creator>S&#233;bastien Ros</dc:creator>
			<category domain="main">Personal</category>
<category domain="alt">Orchard</category>			<guid isPermaLink="false">1248@http://www.dotnetguru2.org/</guid>
						<description>&lt;p&gt;I have finally found some time for this blog ;)&lt;/p&gt;
&lt;p&gt;My first day was the 12th of April, so I suppose they had waited for me to launch Visual Studio 2010. First impression is that everything is done so that workers have the best possible environment to work. The facilities are great, people are always here to help, colleagues take time to explain stuff you need to know, you can't feel alone ! From a technical perspective it's also very interesting. People here are really clever and know their stuff. Actually they are even better than the better I had to work before, can you imagine it? :)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;#160;&lt;img title=&quot;Orchard&quot; src=&quot;http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=orchard&amp;amp;DownloadId=91632&amp;amp;Build=16821&quot; alt=&quot;Orchard Logo&quot; /&gt;&lt;/p&gt;
&lt;p&gt;For those who don't know yet I'm working for the &lt;a href=&quot;http://www.orchardproject.net&quot;&gt;Orchard Project&lt;/a&gt;, which is an Open Source Web Content Management system you can compare to Drupal or Wordpress, but built in ASP.NET MVC. The project itself is really great, and the goal is, wow, amazing ! I'm really confident the final result will be great because of the talents in the team and also because of the way we are open to the community feedback. It's not yet stable enough to be used in productive web sites, unless you want to develop the stuff it's lacking currently.&lt;/p&gt;
&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://www.dotnetguru2.org/sebastienros/index.php/2010/07/06/working-at-microsoft&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>I have finally found some time for this blog ;)</p>
<p>My first day was the 12th of April, so I suppose they had waited for me to launch Visual Studio 2010. First impression is that everything is done so that workers have the best possible environment to work. The facilities are great, people are always here to help, colleagues take time to explain stuff you need to know, you can't feel alone ! From a technical perspective it's also very interesting. People here are really clever and know their stuff. Actually they are even better than the better I had to work before, can you imagine it? :)</p>
<p style="text-align: center;">&#160;<img title="Orchard" src="http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=orchard&amp;DownloadId=91632&amp;Build=16821" alt="Orchard Logo" /></p>
<p>For those who don't know yet I'm working for the <a href="http://www.orchardproject.net">Orchard Project</a>, which is an Open Source Web Content Management system you can compare to Drupal or Wordpress, but built in ASP.NET MVC. The project itself is really great, and the goal is, wow, amazing ! I'm really confident the final result will be great because of the talents in the team and also because of the way we are open to the community feedback. It's not yet stable enough to be used in productive web sites, unless you want to develop the stuff it's lacking currently.</p>
<p>&#160;</p><div class="item_footer"><p><small><a href="http://www.dotnetguru2.org/sebastienros/index.php/2010/07/06/working-at-microsoft">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.dotnetguru2.org/sebastienros/index.php/2010/07/06/working-at-microsoft#comments</comments>
			<wfw:commentRss>http://www.dotnetguru2.org/sebastienros/index.php?tempskin=_rss2&#38;disp=comments&#38;p=1248</wfw:commentRss>
		</item>
				<item>
			<title>Don't let me be lonely tonight</title>
			<link>http://www.dotnetguru2.org/sebastienros/index.php/2010/04/01/don-t-let-me-be-lonely-tonight-1</link>
			<pubDate>Thu, 01 Apr 2010 07:28:25 +0000</pubDate>			<dc:creator>S&#233;bastien Ros</dc:creator>
			<category domain="main">.NET</category>
<category domain="alt">Personal</category>			<guid isPermaLink="false">1211@http://www.dotnetguru2.org/</guid>
						<description>&lt;blockquote&gt;Say goodbye and say hello,&lt;br /&gt;Sure enough good to see you, but it's time to go&amp;#160;&lt;/blockquote&gt;
&lt;p&gt;My adventure at Evaluant started with a song from James Taylor (Gaia) and ends with another one. I think I have done everything I could to make it successful, and now it's time to reach new objectives. In two weeks I will be working for Microsoft, first&amp;#160;in Vancouver and later&amp;#160;in Redmond, for the ASP.NET team. It's a completely new life as me and&amp;#160;the whole&amp;#160;family are moving abroad, and also professionaly because the goal is to target maybe millions of potential users.&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://www.dotnetguru2.org/sebastienros/index.php/2010/04/01/don-t-let-me-be-lonely-tonight-1&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<blockquote>Say goodbye and say hello,<br />Sure enough good to see you, but it's time to go&#160;</blockquote>
<p>My adventure at Evaluant started with a song from James Taylor (Gaia) and ends with another one. I think I have done everything I could to make it successful, and now it's time to reach new objectives. In two weeks I will be working for Microsoft, first&#160;in Vancouver and later&#160;in Redmond, for the ASP.NET team. It's a completely new life as me and&#160;the whole&#160;family are moving abroad, and also professionaly because the goal is to target maybe millions of potential users.</p><div class="item_footer"><p><small><a href="http://www.dotnetguru2.org/sebastienros/index.php/2010/04/01/don-t-let-me-be-lonely-tonight-1">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://www.dotnetguru2.org/sebastienros/index.php/2010/04/01/don-t-let-me-be-lonely-tonight-1#comments</comments>
			<wfw:commentRss>http://www.dotnetguru2.org/sebastienros/index.php?tempskin=_rss2&#38;disp=comments&#38;p=1211</wfw:commentRss>
		</item>
			</channel>
</rss>
