<?xml version="1.0" encoding="utf-8"?>
			
			<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://web.resource.org/cc/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">

			<channel>
			<title>Matthew Williams - CFDev (and admin!) - FarCry</title>
			<link>http://www.geodesicgrafx.com/blog/index.cfm</link>
			<description>Who knows what lurks in the minds of men</description>
			<language>en-us</language>
			<pubDate>Tue, 07 Sep 2010 10:20:28 -0500</pubDate>
			<lastBuildDate>Sat, 11 Jul 2009 00:38:00 -0500</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>webmaster@geodesicgrafx.com</managingEditor>
			<webMaster>webmaster@geodesicgrafx.com</webMaster>
			<itunes:subtitle></itunes:subtitle>
			<itunes:summary></itunes:summary>
			<itunes:category text="Technology" />
			<itunes:category text="Technology">
				<itunes:category text="Podcasting" />
			</itunes:category>
			<itunes:category text="Technology">
				<itunes:category text="Tech News" />
			</itunes:category>
			<itunes:keywords></itunes:keywords>
			<itunes:author></itunes:author>
			<itunes:owner>
				<itunes:email>webmaster@geodesicgrafx.com</itunes:email>
				<itunes:name></itunes:name>
			</itunes:owner>
			<itunes:image href="" />
			<image>
				<url></url>
				<title>Matthew Williams - CFDev (and admin!)</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm</link>
			</image>
			<itunes:explicit>no</itunes:explicit>
			
			
			
			
			
			<item>
				<title>FarCry 5.2 + Railo 3.1.0.16 + Resin + Apache + MySQL + CentOS - Addendum 1</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2009/7/11/FarCry-52--Railo-31016--Resin--Apache--MySQL--CentOS--Addendum-1</link>
				<description>
				
				I had an &quot;Ah HA!&quot; moment when I got home tonight.  I copied in my FarCry core folder from my known good Ubuntu Railo/FarCry install over to my CentOS install and still had issues.  I tried several iterations of this, and then I had a think.  I pulled up the Railo admin on my Ubuntu install, and noticed I had it at .012.  And then it hit me... I was actually in a discussion about this with others on the google groups.  I thought I had tried it at 3.1.0.016, but I think I did not complete the upgrade step.  

So, I copied the .012 install of Railo over to the CentOS box and it worked!  Huzzah!  So, it appears that .012 remains the most supported version at this point in time.  I&apos;m hosting a copy of this file on my site, but please be gentle!  I don&apos;t want to hear it from my host that ya&apos;ll are killing my server.  You can grab the file &lt;a href=&quot;/files/railo-3.1.0.012-resin-3.1.2-without-jre.tar?phpMyAdmin=6ffe8b831e4bded08a42997de2b6eeaa&quot;&gt;here&lt;/a&gt;.
				
				</description>
						
				
				<category>FarCry</category>				
				
				<category>Railo</category>				
				
				<category>ColdFusion 8.x</category>				
				
				<pubDate>Sat, 11 Jul 2009 00:38:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2009/7/11/FarCry-52--Railo-31016--Resin--Apache--MySQL--CentOS--Addendum-1</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>FarCry 5.2 + Railo 3.1.0.16 + Resin + Apache + MySQL + CentOS - Part 3</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2009/7/10/FarCry-52--Railo-31016--Resin--Apache--MySQL--CentOS--Part-3</link>
				<description>
				
				In this installment we&apos;re going to be installing FarCry, and tweaking our Apache settings a bit.  To let ya&apos;ll know upfront, there&apos;s still a few issues with FarCry and functions that are named the same as internal Railo functions.  I know these changes were placed into trunk at one point, but it doesn&apos;t seem like they migrated over to the 5.1.6 release.  That&apos;s OK, I&apos;ve got a fairly stable pull of the core trunk files from a few weeks back that I&apos;ll be linking on the site this evening.  I&apos;ll verify that this fixes the odd &quot;function cannot be named&quot; stuff going on.  The current trunk files are not allowing the overview page to come up, but then again this is trunk we&apos;re talking about... life on the bleeding edge sometimes leads to a paper cut ;).
				 [More]
				</description>
						
				
				<category>FarCry</category>				
				
				<category>Railo</category>				
				
				<category>ColdFusion 8.x</category>				
				
				<pubDate>Fri, 10 Jul 2009 14:52:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2009/7/10/FarCry-52--Railo-31016--Resin--Apache--MySQL--CentOS--Part-3</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>FarCry 5.2 + Railo 3.1.0.16 + Resin + Apache + MySQL + CentOS - Part 2</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2009/7/10/FarCry-52--Railo-31016--Resin--Apache--MySQL--CentOS--Part-2</link>
				<description>
				
				Right... part 2.  We&apos;re going to install Railo in this section.  It&apos;s going to be a much smaller ride than part 1 ;).  But first, some knowledge.

I&apos;ve learned that:
&lt;ul&gt;
&lt;li&gt;I&apos;m not a fan of CentOS.  I prefer the debian distros.  Why?  I&apos;ve not really ever had a need to play with SELinux, or IPTables.  Why does that matter?  Both of these things have caused me grief whilst putting this together as both are enabled by default in both the _64 and i386 builds of 5.3.
&lt;/li&gt;
&lt;li&gt;You must turn off IPTables on each boot of the system.  I&apos;m sure there&apos;s a way to make this automatic, but I really haven&apos;t tracked it down yet.  Yes, it would not be an issue if I just set it up... surely this will be a blog posting down the line, but I don&apos;t require it for now.
&lt;/li&gt;
&lt;li&gt;I had originally done the write up for part 1 with an _64 build.  Everything was great until I got to the point where I needed to build mod_caucho.  I could not find a way to successfully build that, and it appeared to be an issue with apsx.  I didn&apos;t really want to spend my entire day chasing down rabit holes, so I switched to the i386 build.  It&apos;s at this point that I learned that SELinux was preventing Apache from talking to Caucho.  Again, not wanting to chase my tail endlessly, I just disabled SELinux for now.
&lt;/li&gt;
&lt;li&gt;Use PUTTY!  I can never get copy/paste to play nice between my VM command line screen and windows.  So, I&apos;ll just minimize the VM and use PUTTY to terminal (over SSH) into virtual box.  In this way, you can also keep several screens up at one time.
&lt;/li&gt;
&lt;/ul&gt;
				 [More]
				</description>
						
				
				<category>FarCry</category>				
				
				<category>Railo</category>				
				
				<category>ColdFusion 8.x</category>				
				
				<pubDate>Fri, 10 Jul 2009 01:55:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2009/7/10/FarCry-52--Railo-31016--Resin--Apache--MySQL--CentOS--Part-2</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>FarCry 5.2 + Railo 3.1.0.16 + Resin + Apache + MySQL + CentOS - Part 1</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2009/7/8/FarCry-516--Railo-31016--Resin--Apache--MySQL--CentOS</link>
				<description>
				
				Woah... not such a catchy title, but it&apos;s descriptive, non?

This all began as a quest to be able to provide a VPS solution to the lowest bidder situation.  Their host provides CentOS machines at a fairly reasonable price, but that price would not include the cost of a ColdFusion license.  My framework of choice is FarCry, and lately the Daemonites have taken great strides in keeping the framework compatible with Railo.  This is the thorny path towards creating a Linux virtual machine with FarCry, MySQL, Railo, and Apache (oh... and SES URLs).

We&apos;ll start by just getting the basics of the system running and in place.

&lt;ul&gt;
&lt;li&gt;Everything I&apos;m doing is as the root user... yes, not cool, but this just development.  Typically, you should really use sudo to do all of this.&lt;/li&gt;
  &lt;li&gt;Grab a VMware image of CentOS 5.2. You can find one here: http://www.vmware.com/appliances/directory/1309. VMplayer can be found here: http://www.vmware.com/download/player/&lt;/li&gt;
  &lt;li&gt;Turn off IPTABLES for testing... yes, not the best idea for production, but this is development.  I could not figure out why the heck Apache wasn&apos;t serving pages outside the local install, and it was the firewall blocking it.  In production, you should really turn this feature on.  I&apos;m not addressing how to do so for this excercise.
    &lt;ul&gt;
&lt;li&gt;
      &lt;code&gt;
/etc/init.d/iptables save
/etc/init.d/iptables stop
&lt;/code&gt;
&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Enable RPMforge packages.  This will allow us to install phpMyAdmin through yum.
    &lt;ul&gt;
      &lt;li&gt;http://wiki.centos.org/AdditionalResources/Repositories/RPMForge (source)&lt;/li&gt;
      &lt;li&gt;Download either i386 or _64 RPM dependant on your OS type version
        &lt;ul&gt;
          &lt;li&gt;http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm&lt;/li&gt;
          &lt;li&gt;http://apt.sw.be/redhat/el5/en/x86_64/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;Import GPG key
        &lt;code&gt;rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt &lt;/code&gt;
      &lt;/li&gt;
      &lt;li&gt;Install it (replace the RPM with the name)
&lt;code&gt;rpm -i rpmforge-release-0.3.6-1.el5.rf.*.rpm&lt;/code&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;li&gt;We need to install apache (well, not NEED, but we&apos;re not using Tomcat here)
    &lt;ul&gt;
      &lt;li&gt;http://www.railo.ch/blog/index.cfm/2008/11/12/Installing-ResinRailo-on-CentOS
      (source)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;yum install httpd httpd-devel openssl-devel&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;li&gt;We need to install MySQL
    &lt;ul&gt;
      &lt;li&gt;http://www.ozzu.com/unix-linux-forum/centos-and-apache-php-mysql-t69484.html (source)&lt;/li&gt;
      &lt;li&gt;&lt;code&gt;vi /etc/yum.repos.d/CentOS-Base.repo&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;change enable=1 for centosplus&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;code&gt;yum install mysql-server mysql&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;li&gt;I installed PHP/PHPmyadmin - just for DB administration
    &lt;ul&gt;
      &lt;code&gt;yum install php php-mysql phpmyadmin
      cd /usr/share/phpmyadmin/
      vi config.inc.php
&lt;/code&gt;
      &lt;li&gt;enter a value in $cfg[&apos;blowfish_secret&apos;] = &apos;&amp;lt;something&amp;gt;&apos;;&lt;/li&gt;
      &lt;li&gt;&lt;code&gt;vi /etc/httpd/conf.d/phpmyadmin.conf&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;change the allow line to (yes, yes... but this is a test environ) to Allow from all&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;We need to install a JVM... this part just sucks. Unlike other distros, no precompiled version really meets our needs.
  &lt;/li&gt;
  &lt;ul&gt;
    &lt;li&gt;http://j2eeinaction.blogspot.com/2009/02/install-java-6-on-centos-52.html (source)&lt;/li&gt;
    &lt;li&gt;Go to http://java.sun.com/javase/downloads/index.jsp (grab the JDK!). You can browse to a download link and post that into your VM as something like the following&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;wget http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/VerifyItem-Start/jdk-6u14-linux-x64-rpm.bin?BundledLineItemUUID=CXFIBe.pePAAAAEioR0Hk1t8&amp;amp;OrderID=CgtIBe.pcWUAAAEilh0Hk1t8&amp;amp;ProductID=tPxIBe.oz2IAAAEhmh0zLjfT&amp;amp;FileName=/jdk-6u14-linux-x64-rpm.bin&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;rename that long ugly file to jdk.rpm.bin&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;mv &amp;lt;stupid long name&amp;gt; jdk.rpm.bin&lt;/code&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;code&gt;chmod 700 jdk.rpm.bin
./jdk.rpm.bin
/usr/sbin/alternatives --config java&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;li&gt;Start Apache and MySQL at reboot
    &lt;ul&gt;
      &lt;code&gt;/sbin/chkconfig httpd --level 2345 on
      /sbin/chkconfig mysqld --level 2345 on&lt;/code&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;/ul&gt;

And that&apos;s it.  You have Apache serving pages at http://yoursite/ and phpMyAdmin at http://yoursite/phpmyadmin.  Next up on the chopping block, adding Railo into the mix.
				
				</description>
						
				
				<category>FarCry</category>				
				
				<category>Railo</category>				
				
				<category>ColdFusion 8.x</category>				
				
				<pubDate>Wed, 08 Jul 2009 16:39:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2009/7/8/FarCry-516--Railo-31016--Resin--Apache--MySQL--CentOS</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Addendum to FarCry and IONIC rewriting</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2009/7/1/Addendum-to-FarCry-and-IONIC-rewriting</link>
				<description>
				
				I tried to use IONIC and FarCry.  I really did.  I spent several days/weeks (eh, I have 5 kids man... I&apos;ve rather lost track of the exact time) trying to make this filter work the new friendly URLs created by FarCry.  The previous blog posting appeared to work, except... several areas of the admin became unworkable.  Mostly areas like the library picker.  Also, I ran into the odd issue where you&apos;d want to append URL variables not working.  Jeff Coughlin and I also posted to the IONIC boards hoping for some assistance (guidance?) but in the end, it&apos;s still just broken.  Heck, I even tried various version of the filter.  In any case, it just never worked 100% and I&apos;ve since given up.

So, where does that leave us?  You can either switch to Apache.  Or, you can start using the Helicon rewriting filter.  There IS a free version of this filter, BUT... the downside is you&apos;re limited to either one website or ALL websites.  The per server license for the full blown suite is about $99, but I hate having to pay for this filter for some reason.  I&apos;m just cheap, I suppose.  Or, maybe it&apos;s due to everyone thinking the &quot;ColdFusion&quot; types are already pricey to begin with?  At any rate, the free version works for me.  Failing that I&apos;m planning to switch to Apache for those cases where I need multiple site support.
				
				</description>
						
				
				<category>FarCry</category>				
				
				<pubDate>Wed, 01 Jul 2009 16:27:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2009/7/1/Addendum-to-FarCry-and-IONIC-rewriting</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Add bulk file uploads to FarCry 5.x</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2009/5/4/Add-bulk-file-uploads-to-FarCry-5x</link>
				<description>
				
				If you look in the content administration section of the FarCry admin, you&apos;ll find a handy little flex tool for uploading multiple images.  Sadly, there is no matching tool for uploading bulk documents.

Have no fear, as the source will set you free!  The flex UI component that pulls off the Image uploads is also available from the Daemonites at http://svn1.cvsdude.com/modius/farcry/flexUI/multipleImageUploader/trunk/.  It is, however, a tad out of date.  And unless you know flex... it&apos;s a bit of a pain as well to get it up and running.  However, I&apos;ve included a handy little zip that contains a complete working flex project if you should so choose.

So, I changed the flex UI piece to be named &quot;Multiple Files Upload&quot; and also changed the default CFM files being called (you can pass values in) to the correct file upload pieces.  The files you&apos;ll need are:

&lt;code&gt;
farcry\core\webtop\admin\bulkfileUpload.cfm
farcry\core\webtop\admin\multipleFilesUploader.cfm
farcry\core\webtop\admin\ui\swf\multipleUploaderFile.swf
&lt;/code&gt;

You&apos;ll also need to add a link to the webtop in your customadmin\customadmin.xml like (this goes into the current &quot;content&quot; section):

&lt;code&gt;
&lt;subsection id=&quot;contentpublishing&quot; sequence=&quot;10&quot; label=&quot;Content Publishing&quot;&gt;
			&lt;menu id=&quot;MediaLibraryContent&quot; sequence=&quot;20&quot; label=&quot;Media Assets&quot;&gt;
				&lt;menuitem id=&quot;bulkfileupload&quot; sequence=&quot;31&quot; label=&quot;Bulk File Upload&quot; link=&quot;/admin/multipleFilesUploader.cfm&quot; /&gt;
			&lt;/menu&gt;
		&lt;/subsection&gt;
&lt;/code&gt;

Reload your application, and that&apos;s it.  You should now have the ability to upload multiple flies (.pdf, .doc, .zip only... you can modify the flex/swf to accept other attachments as well).

UPDATE:
I added a new URL param, fileList and extension.  You can now control the file list through the multipleFilesUploader.cfm.  Updated the zip to reflect this.

&lt;a href=&quot;/blog/files/multiUpload.zip?phpMyAdmin=6ffe8b831e4bded08a42997de2b6eeaa&quot;&gt;Files&lt;/a&gt;
				
				</description>
						
				
				<category>FarCry</category>				
				
				<category>ColdFusion 8.x</category>				
				
				<pubDate>Mon, 04 May 2009 13:05:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2009/5/4/Add-bulk-file-uploads-to-FarCry-5x</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>FarCry 5.1 and the Ionic ISAPI rewrite filter for friendly URLs</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2009/2/19/FarCry-51-and-the-Ionic-ISAPI-rewrite-filter-for-friendly-URLs</link>
				<description>
				
				The 5.1 version of the framework got a big &apos;ol kick in the pants (especially for a point release) with the entire friendly URL engine undergoing a rewrite (hah).  I upgraded one my works in progress for &lt;a href=&quot;http://www.meteorsite.com&quot;&gt;Meteorsite&lt;/a&gt; from the 5.02 to 5.1 recently and noticed that my older friendly URLs were no longer being built by the buildlink tag, but they still worked when called with the older /go/ syntax.  Hmm... time to investigate.

It turns out, you no longer need to prefix the friendly URL with a search term any longer.  No more /go/ or /this/ or /something/ is required.  Now,  mysite.com/lets-start-this-party will work.  Hey, I think it&apos;s cool at least, and the VP of marketing at my last job would have loved not having to prefix everything with a /go/.

The magic behind all of this some rather nifty REGEX string to manipulate the URL, and a new piece in the framework that verifies that friendly URLs are working (which broke my current FUs).  Once you manage to pass the FU check (http://yoursite.com/pingFU returns a success), your FUs will work as desired.  The REGEX and setup instructions can  be found on the FarCry &lt;a href=&quot;http://http://docs.farcrycms.org/display/FCDEV50/Friendly+URLs&quot;&gt; WIKI&lt;/a&gt;.  

Everything was all good until... well, we&apos;re on windows, and not running Apache or the the Helicon rewrite filter.  Instead, we&apos;re running the Ionic filter, and it seems the rewrite rule just doesn&apos;t work all that well based on what&apos;s in the docs.  So began my quest to make that #@$#$ rewrite rule work for the Ionic filter.  So, let&apos;s first run through how to install the Ionic filter.

&lt;strong&gt;Installing the Ionic filter&lt;/strong&gt;
&lt;ol&gt;
&lt;li&gt;
If you just want to test with a single website, grab the IONIC 1.2.15.  If you want to use this on multiple sites on the same machine, grab 2.0a.  It really doesn&apos;t matter as the script works on
both.
&lt;/li&gt;
&lt;li&gt;
Inside the zip, you&apos;ll find a lib folder.  The two different code branches have diffrerent DLLs names and INI names.
  &lt;ul&gt;
  &lt;li&gt;
  1.2.15:  Doesn&apos;t matter where you put it, just not in the
webroot.  Put the IsapiRewrite4.dll and IsapiRewrite4.ini file in a separate folder (good to only have them in there by themselves).
  &lt;/li&gt;
  &lt;li&gt;
  2.0a:  Again, put it where you want, but not in the
webroot (for 2 of 3 files).  Put the IirfGlobal.ini and Iirf.dll in the same folder.  Place a Iirf.ini in your webroot.
  &lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
The script I send should be used in either case for either
Iirf.ini, or IsapiRewrite4.ini.  Don&apos;t touch the IirfGlobal.ini, it only takes the options already in the file.
&lt;/li&gt;
&lt;li&gt;
Windows permissions seem to be the biggest gotcha here.  The files all seem to need, at minimum, IIS_WPG and IUSER_.  Mine also have Users, SYSTEM, and Administrators if it just the first two don&apos;t work for you.
&lt;/li&gt;
&lt;li&gt;
Open up the IIS Admin tool.
&lt;/li&gt;
&lt;li&gt;
Click on web service extensions, and add a new extension for &quot;Ionic Rewriter&quot; (doesn&apos;t matter, but I think you need to be consistant here) and choose the appropriate DLL (depending on 1.2.15, 2.0a).  Be sure to check the box to set for allowed.
&lt;/li&gt;
&lt;li&gt;
Depending on the level you want to filter at (all sites, just one site) right click and get properties.  Click on the ISAPI Filters tab and add the appropriate DLL and click apply or OK (doesn&apos;t matter).
&lt;/li&gt;
&lt;li&gt;
Restart the IIS admin (should restart all of the various
services too).
&lt;/li&gt;
&lt;/ol&gt;

&lt;strong&gt;My current rewrite script - constantly evolving&lt;/strong&gt;
&lt;code&gt;
# Firstly, let&apos;s make sure that the URL is not an admin
# function.  The &quot;!&quot; does not work here
# So it was removed.  Added [L] to stop processing other
# rules for recursion issues. If you have .xxx files that 
# take a URL param, add it here
RewriteCond %{HTTP_URL} (^/farcry|^/webtop|^/flex2gateway|^/flashserviReces|^/cfide|\.cfm|\.swf|\.xml)($|/)
RewriteRule ^(.*)$ $1 [L]

# Next, if it doesn&apos;t match the above, let&apos;s to see if
# there&apos;s a &quot;?&quot; in the string and rewrite it to be
# a &quot;&amp;&quot;.  This is to catch cases like 
# /something/?this=here.  We stop processing here to
# prevent going all circular in our logic by using the &quot;[L]&quot;.
RewriteCond %{HTTP_URL} (.*)(\?)(.*) 
RewriteRule (.*)(\?)(.*) /index.cfm?furl=$1&amp;$3 [L]

# This was junked as the first rule replaced it, but 
# leaving it here just in case commented out
#RewriteCond %{HTTP_URL} (^\.index.cfm)
#RewriteRule ^(.*)$ $1

# Last, failing all else, rewrite the string to the 
# normal furl sequence.  Removed the checking
# for a space from the WIKI sequence as it breaks for IONIC.
RewriteRule ^([a-zA-Z0-9\/\-\%:\[\]\{\}\|\;\&lt;\&gt;\?\,\*\!\@\#\$\(\)\^_`~]*)$ /index.cfm?furl=$1
&lt;/code&gt;

Be sure to follow all of the directions in that WIKI entry, in addition to what I&apos;ve provided here.  At this point, it works for everything that I&apos;ve thrown at it.  Going to /cfide, or /farcry works.  Going to the normal .cfm files works, and my flash players all work.  I&apos;ve run into the odd issue where I&apos;ve tried to reference the application.url.conjurer URL, but I&apos;ve since switched to buildlink to replace calls to that variable.  The other odd issue is that the first condition was having case sensitivity issues.
				
				</description>
						
				
				<category>FarCry</category>				
				
				<pubDate>Thu, 19 Feb 2009 01:05:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2009/2/19/FarCry-51-and-the-Ionic-ISAPI-rewrite-filter-for-friendly-URLs</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Cool FarCry 5.1 feature you may have missed</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2009/2/12/Cool-FarCry-51-feature-you-may-have-missed</link>
				<description>
				
				I&apos;m not even sure when I noticed this, but there&apos;s a now a Country and State formtool type (fttype).  The &lt;a href=&quot;http://meteorsite.com/&quot;&gt;Meteorsite&lt;/a&gt; project needed a tours page that includes state information.  I&apos;m fairly sure that it&apos;s going to just be North America for now, but we can always hash that out later.  

The Country type is pretty well defined out of the box, but the State type only includes information relevant to the Auzzie&apos;s (which makes sense, really).  So, let&apos;s extend our new state type and include the provinces from Canada, and the US states.

Copy the /farcry/core/packages/formtools/state.cfc to your local /farcry/projects/packages/formtools/state.cfc.  You&apos;ll need to change the extend to farcry.core.packages.formtools.state in the state.cfc.  The following is the additions to the getState function.

&lt;code&gt;
&lt;!--- North America - USA ---&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;AL&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;ALABAMA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;AK&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;ALASKA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;	
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;AS&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;AMERICAN SAMOA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;AZ&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;ARIZONA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;AR&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;ARKANSAS&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;CA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;CALIFORNIA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;CO&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;COLORADO&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;CT&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;CONNECTICUT&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;DE&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;DELAWARE&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;DC&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;DISTRICT OF COLUMBIA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;FM&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;FEDERATED STATES OF MICRONESIA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;FL&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;FLORIDA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;GA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;GEORGIA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;GU&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;GUAM&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;HI&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;HAWAII&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;ID&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;IDAHO&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;IL&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;ILLINOIS&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;IN&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;INDIANA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;IA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;IOWA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;KS&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;KANSAS&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;KY&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;KENTUCKY&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;LA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;LOUISIANA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;ME&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;MAINE&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt; 
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;MH&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;MARSHALL ISLANDS&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;MD&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;MARYLAND&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;MA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;MASSACHUSETTS&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt; 
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;MI&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;MICHIGAN&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;MN&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;MINNESOTA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;MS&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;MISSISSIPPI&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;MO&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;MISSOURI&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;MT&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;MONTANA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;NE&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;NEBRASKA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;NV&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;NEVADA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;NH&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;NEW HAMPSHIRE&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;NJ&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;NEW JERSEY&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;NM&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;NEW MEXICO&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;NY&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;NEW YORK&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;NC&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;NORTH CAROLINA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;ND&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;NORTH DAKOTA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;MP&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;NORTHERN MARIANA ISLANDS&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;OH&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;OHIO&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt; 
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;OK&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;OKLAHOMA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;OR&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;OREGON&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;PW&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;PALAU&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;PA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;PENNSYLVANIA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt; 
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;PR&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;PUERTO RICO&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt; 
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;RI&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;RHODE ISLAND&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;SC&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;SOUTH CAROLINA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;SD&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;SOUTH DAKOTA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;TN&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;TENNESSEE&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;TX&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;TEXAS&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;UT&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;UTAH&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;VT&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;VERMONT&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;VI&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;VIRGIN ISLANDS&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;VA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;VIRGINIA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;WA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;WASHINGTON&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;WV&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;WEST VIRGINIA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;WI&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;WISCONSIN&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;WY&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;WYOMING&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;US&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;United States of America&quot;) /&gt;
			
			&lt;!--- North America - Canada---&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;AB&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;Alberta&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;CA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;Canada&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;BC&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;British Columbia&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;CA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;Canada&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;MB&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;Manitoba&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;CA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;Canada&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;NB&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;New Brunswick&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;CA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;Canada&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;NL&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;Newfoundland and Labrador&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;CA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;Canada&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;NT&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;Northwest Territories&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;CA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;Canada&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;NS&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;Nova Scotia&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;CA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;Canada&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;NU&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;Nunavut&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;CA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;Canada&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;ON&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;Ontario&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;CA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;Canada&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;PE&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;Prince Edward Island&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;CA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;Canada&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;QC&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;Quebec&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;CA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;Canada&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;SK&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;Saskatchewan&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;CA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;Canada&quot;) /&gt;
			&lt;cfset queryaddrow(q) /&gt;&lt;cfset querysetcell(q,&quot;code&quot;,&quot;YT&quot;) /&gt;&lt;cfset querysetcell(q,&quot;name&quot;,&quot;Yukon&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countrycode&quot;,&quot;CA&quot;) /&gt;&lt;cfset querysetcell(q,&quot;countryname&quot;,&quot;Canada&quot;) /&gt;
			
&lt;/code&gt;

And, there you go.  Ready made dropdowns to capture state information.  You&apos;d set the cfproperty to call this like the example below.  You can specify a delimited list of country codes in ftCountries to grab from, or leave the property blank to grab all states in the getStates funtion.

&lt;code&gt;
&lt;cfproperty ftseq=&quot;7&quot; ftfieldset=&quot;Tour Event Overview&quot; ftwizardStep=&quot;General Details&quot; name=&quot;state&quot; type=&quot;string&quot; hint=&quot;State.&quot; fttype=&quot;state&quot; ftCountries=&quot;US,CA&quot; required=&quot;no&quot; default=&quot;&quot; ftLabel=&quot;State&quot;  /&gt;
&lt;/code&gt;
				
				</description>
						
				
				<category>FarCry</category>				
				
				<pubDate>Thu, 12 Feb 2009 12:07:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2009/2/12/Cool-FarCry-51-feature-you-may-have-missed</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Error when entering lots of text view the body tag of a FarCry content item</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2009/1/27/Error-when-entering-lots-of-text-view-the-body-tag-of-a-FarCry-content-item</link>
				<description>
				
				I forgot that I&apos;ve seen this before, but I had a client trying to enter text (quite a bit, in fact) and it kept failing.  After finally getting all of the information on the incident, it turns out that the following error was being generated:

&lt;code&gt;
ErrorContext WDDX packet parse error at line 1, column 32001.
   Message WDDX packet parse error at line 1, column 32001. XML
   document structures must start and end within the same entity..
   StackTrace coldfusion.wddx.WddxDeserializationException: WDDX
   packet parse error at line 1, column 32001. XML document
   structures must start and end within the same entity
&lt;/code&gt;

I google&apos;d around a bit before I found the answer.  We&apos;re storing the body field as a CLOB (at least, I&apos;m pretty sure that&apos;s what it is).  The default buffer size for this in the ColdFusion administrator is 32k.  My text input went beyond that.  Whoops.  So, I made sure to check the box for CLOB (and turned on BLOB for good measure) and set the size to 128k.  Problem solved, and now they can enter a very long string of text into the database.  Just throwing this out there in case anyone else stumbles upon this issue.
				
				</description>
						
				
				<category>ColdFusion 6.x</category>				
				
				<category>ColdFusion 7.x</category>				
				
				<category>FarCry</category>				
				
				<category>ColdFusion 8.x</category>				
				
				<pubDate>Tue, 27 Jan 2009 14:27:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2009/1/27/Error-when-entering-lots-of-text-view-the-body-tag-of-a-FarCry-content-item</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>So, I hacked my FarCry core tonight... but the result is pretty cool.</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2009/1/27/So-I-hacked-my-FarCry-core-tonight-but-the-result-is-pretty-cool</link>
				<description>
				
				I have a client request to add filtering by category in the Open Library picker.  In fact, really thinking on this, it seems odd that this ability isn&apos;t there anyway.  What the heck good is categorizing all of your images if you can&apos;t find an easy way to filter them out?

So, it&apos;s with that in mind, I set out trying to get this functionality in place.  I had to hack up /farcry/core/webtop/facade/library.cfm to do this, so it&apos;s an at your own risk operation.  The problem I run into is that the formtools tag and the wizard tag call this library picker.  Unless you extend every object that uses these tags (because you can&apos;t extend a tag that I see), I&apos;m kind of stuck editing this one file.  Mayhap Mat Bryant is following along and can offer up some advice?

At any rate, here is what I did to add a drop down category list to filter results by.

First, you need to add a new cfparam at the top of the file.  This ensures that our field is defined, in case it&apos;s blank.
&lt;code&gt;
&lt;cfparam name=&quot;session.stLibraryFilter[&apos;#request.ftJoin#&apos;].category&quot; default=&quot;&quot; /&gt;
&lt;/code&gt;

Next, add the following into the ft:processForm action=&quot;search&quot;.  This catches our new form field.
&lt;code&gt;
&lt;cfset session.stLibraryFilter[&apos;#request.ftJoin#&apos;].category = lCase(form.filtercat)&gt;
&lt;/code&gt;

Add this to processForm action=&quot;Refresh&quot;.  This clears out the category value when the Refresh button is clicked.
&lt;code&gt;
&lt;cfset session.stLibraryFilter[request.ftJoin].category = &quot;&quot; /&gt;
&lt;/code&gt;

Next, add this block below the cfif block that catches the presence of the .criteria value.  This will create a query to return our filtered data.
&lt;code&gt;
&lt;cfif len(session.stLibraryFilter[request.ftJoin].category)&gt;
	&lt;cfset oCat = createObject(&quot;component&quot;, &quot;farcry.core.packages.types.category&quot;) /&gt;
	&lt;cfset qSearchResults2 = oCat.getDataQuery(lCategoryIDs=&quot;#session.stLibraryFilter[request.ftJoin].category#&quot;
		,typename=&quot;#request.ftJoin#&quot;
		,maxRows=&quot;100&quot;
		,bMatchAll=&quot;0&quot;
		,sqlOrderBy=&quot;label ASC&quot;,
		lFields=&quot;label&quot;
		) /&gt;
	
	&lt;cfset filterCriteria = session.stLibraryFilter[request.ftJoin].Criteria /&gt;
	&lt;cfif NOT qSearchResults2.RecordCount&gt;
		&lt;cfoutput&gt;&lt;h3&gt;No Results matched search. All records have been returned&lt;/h3&gt;&lt;/cfoutput&gt;
		&lt;cfset session.stLibraryFilter[&apos;#request.ftJoin#&apos;].qResults = queryNew(&quot;objectid,label&quot;) /&gt;
		
	&lt;cfelse&gt;
		&lt;cfif qSearchResults2.RecordCount GT 100&gt;
			&lt;cfoutput&gt;&lt;h3&gt;#qSearchResults2.RecordCount# results matched search. Results have been limited to 100.&lt;/h3&gt;&lt;/cfoutput&gt;
			
			&lt;cfquery dbtype=&quot;query&quot; name=&quot;qSearchResults_inside&quot; maxrows=&quot;100&quot;&gt;
			SELECT objectid as key, label FROM qSearchResults2
			&lt;cfif len(filterCriteria)&gt;
				WHERE label like &apos;%#filterCriteria#%&apos;
			&lt;/cfif&gt;
			&lt;/cfquery&gt;
		&lt;cfelse&gt;
			&lt;cfquery dbtype=&quot;query&quot; name=&quot;qSearchResults_inside&quot; &gt;
			SELECT objectid as [key], label FROM qSearchResults2
			&lt;cfif len(filterCriteria)&gt;
				WHERE LOWER(label) like &apos;%#filterCriteria#%&apos;
			&lt;/cfif&gt;
			&lt;/cfquery&gt;	
		&lt;/cfif&gt;
		&lt;cfset session.stLibraryFilter[&apos;#request.ftJoin#&apos;].qResults = qSearchResults_inside /&gt;
	&lt;/cfif&gt;
			
	
&lt;/cfif&gt;
&lt;/code&gt;

Last, we need to modify the form.  Add this select into the last cell (or create one).  This populates the select list from all of the categories in the system.
&lt;code&gt;
&lt;cfset oCategory = createObject(&quot;component&quot;,&apos;farcry.core.packages.farcry.category&apos;)&gt;
		&lt;cfset rootID = application.catid[&apos;root&apos;] &gt;
		&lt;cfset qCategory = oCategory.getAllCategories() /&gt;
		
		&lt;cfoutput&gt;&lt;select id=&quot;filtercat&quot; name=&quot;filtercat&quot;&gt;
				&lt;option&gt;&lt;/option&gt;
		&lt;/cfoutput&gt;
		&lt;cfloop query=qCategory&gt;
			&lt;cfoutput&gt;&lt;option value=&quot;#objectid#&quot; &lt;cfif objectid EQ session.stLibraryFilter[request.ftJoin].category&gt;selected&lt;/cfif&gt;&gt;#objectname#&lt;/option&gt;&lt;/cfoutput&gt;
		&lt;/cfloop&gt;
		&lt;cfoutput&gt;&lt;/select&gt;&lt;/cfoutput&gt;
&lt;/code&gt;

And, it&apos;s done.  The only issue I&apos;m seeing is that the category seems to stick around, where the text filter does not.  I&apos;m still working on why that would be, and I cannot find the variables used for the storage of those values anywhere else.  However, it&apos;s a small price to pay.

&lt;strong&gt;I need to clarify where that first param needs to be.  There&apos;s a line that set&apos;s request.ftJoin = url.ftJoin.  The param must be below this cfset!  I&apos;m not sure if this is new, but this tripped me up today.&lt;/strong&gt;

To answer Jeff&apos;s question, see the screenshots attached.

Unfiltered content:&lt;br&gt;
&lt;a href=&quot;/blog/filterby/unfiltered.jpg?phpMyAdmin=6ffe8b831e4bded08a42997de2b6eeaa&quot;&gt;&lt;img src=&quot;/blog/filterby/thunfiltered.jpg&quot; border=&quot;0&quot;&gt;&lt;/a&gt;

Filter by keyword:&lt;br&gt;
&lt;a href=&quot;/blog/filterby/filterbykeyword.jpg?phpMyAdmin=6ffe8b831e4bded08a42997de2b6eeaa&quot;&gt;&lt;img src=&quot;/blog/filterby/thfilterbykeyword.jpg&quot; border=&quot;0&quot;&gt;&lt;/a&gt;

Filter by category:&lt;br&gt;
&lt;a href=&quot;/blog/filterby/filterbycategory.jpg?phpMyAdmin=6ffe8b831e4bded08a42997de2b6eeaa&quot;&gt;&lt;img src=&quot;/blog/filterby/thfilterbycategory.jpg&quot; border=&quot;0&quot;&gt;&lt;/a&gt;

Filter by category and keyword:&lt;br&gt;
&lt;a href=&quot;/blog/filterby/filterbykeywordcategory.jpg?phpMyAdmin=6ffe8b831e4bded08a42997de2b6eeaa&quot;&gt;&lt;img src=&quot;/blog/filterby/thfilterbykeywordcategory.jpg&quot; border=&quot;0&quot;&gt;&lt;/a&gt;
				
				</description>
						
				
				<category>FarCry</category>				
				
				<pubDate>Tue, 27 Jan 2009 01:52:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2009/1/27/So-I-hacked-my-FarCry-core-tonight-but-the-result-is-pretty-cool</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>New register feature in FarCry 5</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2009/1/19/New-register-feature-in-FarCry-5</link>
				<description>
				
				I&apos;ve been wanting to write this up for a few weeks, and tonight appears to be the night.  My most recent project has a members area that&apos;s integral to the site.  Now, what&apos;s nice about FarCry is it already has a user management system.  

Now, I usually create a custom login for each project, as most people want all the aspects of the site to match their look and feel.  Silly, right ;).  Anyway, I&apos;m poking around in the default login template, and I came across this:

&lt;code&gt;
&lt;ft:farcryButtonPanel&gt;					
					&lt;cfoutput&gt;&lt;ul class=&quot;loginForgot&quot;&gt;&lt;/cfoutput&gt;
						&lt;sec:CheckPermission webskinpermission=&quot;forgotPassword&quot; type=&quot;farUser&quot;&gt;
							&lt;cfoutput&gt; 
								&lt;li&gt;&lt;skin:buildLink type=&quot;farUser&quot; view=&quot;forgotPassword&quot;&gt;Forgot Password&lt;/skin:buildLink&gt;&lt;/li&gt;&lt;/cfoutput&gt;
						&lt;/sec:CheckPermission&gt;
						&lt;sec:CheckPermission webskinpermission=&quot;forgotUserID&quot; type=&quot;farUser&quot;&gt;
							&lt;cfoutput&gt; 
								&lt;li&gt;&lt;skin:buildLink type=&quot;farUser&quot; view=&quot;forgotUserID&quot;&gt;Forgot UserID&lt;/skin:buildLink&gt;&lt;/li&gt;&lt;/cfoutput&gt;						
							&lt;cfoutput&gt; 
								&lt;li&gt;&lt;skin:buildLink type=&quot;farUser&quot; view=&quot;registerNewUser&quot;&gt;Register New User&lt;/skin:buildLink&gt;&lt;/li&gt;&lt;/cfoutput&gt;
						&lt;/sec:CheckPermission&gt;
					&lt;cfoutput&gt;&lt;/ul&gt;&lt;/cfoutput&gt;

				&lt;/ft:farcryButtonPanel&gt;
&lt;/code&gt;

I&apos;m thinking, &quot;Wow, that&apos;s cool.  Looks like they have a forgotten username/password templates there, that&apos;s new&quot;.  But then I hit that last one, the registerNewUser template.  And my mind found a happy place... a really really happy place.  I know that the register user one wasn&apos;t there in the 4.0 builds, I wonder if it works?  It turns out that it does, and it works really very well.  So, here&apos;s how you enable self user registration.

By default, anonymous cannot view the templates required to create a user.  There&apos;s several templates involved here, and they reside in the dmProfile/farUser webskin folders.  I spent the better part of two hours trying to figure out WHY I couldn&apos;t see the bloody template.  And here&apos;s why I couldn&apos;t.  You need log into the webtop and enable access to the correct templates.

So, log into the webtop and browser to the &quot;Admin&quot; tab, and then on the left hand navigation choose the &quot;Roles&quot; link.  When the roles load into the main content section, choose to edit the anonymous role.  Now, I spent forever looking in permissions, but it&apos;s actually the Webskin link which needs to be addressed.  You need to double click on the following to give Anonymous access to view them:

farUser.registerConfirmation
farUser.registerConfirmationAccepted
farUser.registerConfirmationEmail
farUser.registerEditNewUser
farUser.registerNewUser
dmProfile.registerEditNewProfile

And, that&apos;s it.  You can now allow users to self register.  Well, Ok, that&apos;s not quite the end.  You need to style the above pages to match your look and feel.  You&apos;ll likely also want to flesh out the basic information sent in the confirmation email template to suite your tastes.  Did I ever mention how much I like FarCry ;).
				
				</description>
						
				
				<category>FarCry</category>				
				
				<pubDate>Mon, 19 Jan 2009 00:21:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2009/1/19/New-register-feature-in-FarCry-5</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>FarCry 5 maintain state using browser cookies</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2009/1/18/FarCry-5-maintain-state-using-browser-cookies</link>
				<description>
				
				So, I&apos;ve got a new site rolling out that we&apos;re using FarCry 5.0 (soon to be 5.1, when it&apos;s no longer beta).  This particular site has a members area that&apos;s styled like facebook/myspace.  In keeping with the vein of keeping the users happy, it&apos;s become apparent that most people don&apos;t want log into their social sites every time they visit them.  Hmm... that&apos;s not currently built into FarCry, so it&apos;s time to dive in and play!

First up, let&apos;s extend the FarCryUD to include our new method for cookie detection.  You need to make a copy of /farcry/core/packages/security/FarcryUD.cfc and copy it to /farcry/projects/{myproject}/packages/security/FarcryUD.cfc.  You&apos;ll want to change the top line of the file to the following (the extends being the most important):

&lt;code&gt;
&lt;cfcomponent displayname=&quot;My User Directory&quot; hint=&quot;Provides the interface for the FarCry user directory&quot; extends=&quot;farcry.core.packages.security.FarcryUD&quot; output=&quot;false&quot; key=&quot;CLIENTUD&quot; bEncrypted=&quot;false&quot;&gt;
&lt;/code&gt;

Next, let&apos;s add the new cookie code detection.  This adds a cfelseif into the mix.  This is in the authenticate function.

&lt;code&gt;
&lt;cfif structkeyexists(form,&quot;userlogin&quot;) and structkeyexists(form,&quot;password&quot;)&gt;
			&lt;!--- If password encryption is enabled, hash the password ---&gt;
			&lt;cfif this.bEncrypted&gt;
				&lt;cfset form.password = hash(form.password) /&gt;
			&lt;/cfif&gt;
			
			&lt;!--- Find the user ---&gt;
			&lt;cfquery datasource=&quot;#application.dsn#&quot; name=&quot;qUser&quot;&gt;
				select	*
				from	#application.dbowner#farUser
				where	userid=&lt;cfqueryparam cfsqltype=&quot;cf_sql_varchar&quot; value=&quot;#form.userlogin#&quot; /&gt;
						and password=&lt;cfqueryparam cfsqltype=&quot;cf_sql_varchar&quot; value=&quot;#form.password#&quot; /&gt;
			&lt;/cfquery&gt;
			&lt;cfset stResult.userid = form.userlogin /&gt;
		&lt;cfelseif isdefined(&quot;cookie.my_memberid&quot;) AND isdefined(&quot;cookie.my_password&quot;)&gt;
		
			&lt;!--- Find the user ---&gt;
			&lt;cfquery datasource=&quot;#application.dsn#&quot; name=&quot;qUser&quot;&gt;
				select	*
				from	#application.dbowner#farUser
				where	userid=&lt;cfqueryparam cfsqltype=&quot;cf_sql_varchar&quot; value=&quot;#cookie.my_memberid#&quot; /&gt;
						and password=&lt;cfqueryparam cfsqltype=&quot;cf_sql_varchar&quot; value=&quot;#decrypt(cookie.my_password,&apos;saltmebaby&apos;)#&quot; /&gt;
			&lt;/cfquery&gt;
			&lt;cfset stResult.userid = cookie.burton_memberid /&gt;
		&lt;cfelse&gt;
			&lt;ft:processform&gt;
				&lt;ft:processformObjects typename=&quot;#getLoginForm()#&quot;&gt;
					&lt;!--- If password encryption is enabled, hash the password ---&gt;
					&lt;cfif this.bEncrypted&gt;
						&lt;cfset stProperties.password = hash(stLogin.password) /&gt;
					&lt;/cfif&gt;
					
					&lt;!--- Find the user ---&gt;
					&lt;cfquery datasource=&quot;#application.dsn#&quot; name=&quot;qUser&quot;&gt;
						select	*
						from	#application.dbowner#farUser
						where	userid=&lt;cfqueryparam cfsqltype=&quot;cf_sql_varchar&quot; value=&quot;#stProperties.username#&quot; /&gt;
								and password=&lt;cfqueryparam cfsqltype=&quot;cf_sql_varchar&quot; value=&quot;#stProperties.password#&quot; /&gt;
					&lt;/cfquery&gt;
					
					&lt;cfset stResult.userid = stProperties.username /&gt;
				&lt;/ft:processformObjects&gt;
			&lt;/ft:processform&gt;
		&lt;/cfif&gt;
&lt;/code&gt;

Lastly, we need to modify our login process to create a cookie when the user logs in... only if there isn&apos;t already a cookie set.  You would want to create a custom login for this, so copy /farcry/core/webtop/login.cfm to /farcry/projects/{myproject}/customadmin/login/login.cfm.  You&apos;ll want to change the block of code that&apos;s in the final cfelse that relocates the user based on a successful login.

&lt;code&gt;
&lt;cfelse&gt;
		&lt;!--- relocate to original location ---&gt;
		&lt;cfif not isdefined(&quot;cookie.my_memberid&quot;)&gt;
			&lt;cfset stUser = createObject(&quot;component&quot;, application.stcoapi[&quot;farUser&quot;].packagePath).getByUserID(listfirst(application.security.getCurrentUserID(),&quot;_&quot;)) /&gt;
			&lt;cfcookie name=&quot;my_memberid&quot; value=&quot;#stUser.userid#&quot; expires=&quot;30&quot; &gt;
			&lt;cfcookie name=&quot;my_password&quot; value=&quot;#encrypt(stUser.password,&apos;saltmebaby&apos;)#&quot; expires=&quot;30&quot;&gt;
		&lt;/cfif&gt;
		&lt;cflocation url=&quot;#stResult.returnUrl#&quot; addtoken=&quot;No&quot;&gt;
		&lt;cfabort&gt;
	&lt;/cfif&gt;
&lt;/code&gt;
				
				</description>
						
				
				<category>FarCry</category>				
				
				<pubDate>Sun, 18 Jan 2009 19:41:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2009/1/18/FarCry-5-maintain-state-using-browser-cookies</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>FarCry 4 formtools issues</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2007/3/2/FarCry-4-formtools-issues</link>
				<description>
				
				Here&apos;s a strange one that I came across yesterday.  I was working on making a new site available for some community type work (www.fouroakskidskampus.com), when I found an issue with the default FarCrycms plugin.  I&apos;ll post the code, see if you can spot the error.

&lt;code&gt;
&lt;!--- wiz: General Details ---&gt;
&lt;cfproperty ftseq=&quot;1&quot; ftfieldset=&quot;Event Overview&quot; ftwizardStep=&quot;General Details&quot; name=&quot;title&quot; type=&quot;string&quot; hint=&quot;Title of object.&quot; required=&quot;no&quot; default=&quot;&quot; ftLabel=&quot;Title&quot; ftvalidation=&quot;required&quot; /&gt;
&lt;cfproperty ftseq=&quot;2&quot; ftfieldset=&quot;Event Overview&quot; ftwizardStep=&quot;General Details&quot; name=&quot;startDate&quot; type=&quot;date&quot; hint=&quot;The start date of the event&quot; required=&quot;no&quot; default=&quot;&quot;ftDefaultType=&quot;Evaluate&quot; ftDefault=&quot;now()&quot; ftType=&quot;datetime&quot; ftDateFormatMask=&quot;dd mmm yyyy&quot; ftTimeFormatMask=&quot;hh:mm tt&quot; ftToggleOffDateTime=&quot;false&quot; ftlabel=&quot;Start Date&quot; /&gt;
&lt;cfproperty ftseq=&quot;3&quot; ftfieldset=&quot;Event Overview&quot; ftwizardStep=&quot;General Details&quot; name=&quot;endDate&quot; type=&quot;date&quot; hint=&quot;The end date of the event&quot; required=&quot;no&quot; default=&quot;&quot;ftDefaultType=&quot;Evaluate&quot; ftDefault=&quot;DateAdd(&apos;d&apos;, 5, now())&quot; ftType=&quot;datetime&quot; ftDateFormatMask=&quot;dd mmm yyyy&quot; ftTimeFormatMask=&quot;hh:mm tt&quot; ftToggleOffDateTime=&quot;false&quot; ftlabel=&quot;End Date&quot; /&gt;
&lt;cfproperty ftseq=&quot;5&quot; ftfieldset=&quot;Event Overview&quot; ftwizardStep=&quot;General Details&quot; name=&quot;displayMethod&quot; type=&quot;string&quot; hint=&quot;Display method to render.&quot; required=&quot;yes&quot; default=&quot;display&quot; fttype=&quot;webskin&quot; ftprefix=&quot;displayPage&quot; ftlabel=&quot;Content Template&quot; /&gt;

&lt;/code&gt;

The above was pulled from plugins/farcrycms/packages/types/dmEvent.cfc.  It was not displaying any webskins, even though they were in the correct path.  Placing new webskins in the project folder failed as well.  It&apos;s only when the webskins existed in the core folders that you actually were able to see them.

&lt;code&gt;
&lt;cfproperty ftseq=&quot;1&quot; ftfieldset=&quot;General Details&quot; ftwizardStep=&quot;General Details&quot; name=&quot;title&quot; type=&quot;string&quot; hint=&quot;News title.&quot; required=&quot;no&quot; default=&quot;&quot; ftlabel=&quot;Title&quot; ftvalidation=&quot;required&quot; /&gt;
&lt;cfproperty ftseq=&quot;2&quot; ftfieldset=&quot;General Details&quot; ftwizardStep=&quot;General Details&quot; name=&quot;source&quot; type=&quot;string&quot; hint=&quot;source of the information contained in the content&quot; required=&quot;no&quot; default=&quot;&quot; ftlabel=&quot;Source&quot; /&gt;
&lt;cfproperty ftseq=&quot;3&quot; ftfieldset=&quot;General Details&quot; ftwizardStep=&quot;General Details&quot; name=&quot;displayMethod&quot; type=&quot;string&quot; hint=&quot;Display method to render.&quot; required=&quot;yes&quot; default=&quot;display&quot; fttype=&quot;webskin&quot; ftprefix=&quot;displayPage&quot; ftlabel=&quot;Content Template&quot; /&gt;
&lt;cfproperty ftseq=&quot;4&quot; ftfieldset=&quot;Categorisation&quot; ftwizardStep=&quot;General Details&quot; name=&quot;catNews&quot; type=&quot;string&quot; hint=&quot;News categorisation.&quot; required=&quot;no&quot; default=&quot;&quot; fttype=&quot;category&quot; ftalias=&quot;dmnews&quot; ftlabel=&quot;News Category&quot; /&gt;
&lt;/code&gt;

This next was pulled from plugins/farcrycms/packages/types/dmNews.cfc.  Did you see it?  It&apos;s not real blatant.  Alright, this is where it&apos;s at, if you notice that ftseq in dmNews does not skip a sequence.  The sequence in dmEvent DOES have a gap.  Odd, but that&apos;s what seemed to break it.  Renaming &quot;ftseq=5&quot; to &quot;ftseq=4&quot; fixed the issue.  Groovy, baby.
				
				</description>
						
				
				<category>ColdFusion 7.x</category>				
				
				<category>FarCry</category>				
				
				<pubDate>Fri, 02 Mar 2007 12:58:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2007/3/2/FarCry-4-formtools-issues</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>Good bye LLC, we hardly knew ye</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2007/2/27/Good-bye-LLC-we-hardly-knew-ye</link>
				<description>
				
				Tis a sad, sad day.  I&apos;ve been informed by the banker lady that in order to not exceed financial limits placed on a mortgage I&apos;m seeking, I&apos;m going to be required to dissolve my LLC.  Bugger.  

However, on a happier note, our house hunting is over.  An offer has been made, and if it&apos;s accepted, we&apos;ll be moving in somewhere in March.  At the very least with the weather being what it is in NC, it should be fairly mild, if not downright pleasant.  

So, on to work.  I&apos;m thinking my next post is going to be about creating *. CERTs and using them in IIS, or maybe the start of my next FarCry library.  I&apos;m thinking of doing a webstore and seeing how that flies.  Should be fun!  I&apos;m also preparing to take my CF exam to become &quot;Certified&quot; and all that.
				
				</description>
						
				
				<category>Other</category>				
				
				<category>FarCry</category>				
				
				<pubDate>Tue, 27 Feb 2007 13:56:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2007/2/27/Good-bye-LLC-we-hardly-knew-ye</guid>
				
			</item>
			
		 	
			
			
			<item>
				<title>FarCry plugin breakdown - Part III</title>
				<link>http://www.geodesicgrafx.com/blog/index.cfm/2007/2/23/FarCry-plugin-breakdown--Part-III</link>
				<description>
				
				&lt;p&gt;Let&apos;s finish this up with Part 3. We only have two things to look at yet, and that&apos;s our Rule and webskin.&lt;/p&gt;
&lt;h2&gt;The Rule  &lt;/h2&gt;
&lt;code&gt;
&lt;cfcomponent displayname=&quot;Mass Mailer Rule&quot; extends=&quot;farcry.core.packages.rules.rules&quot; hint=&quot;Allows you to select a list for user to sign up for&quot;&gt;
	&lt;cfproperty ftSeq=&quot;1&quot; ftFieldSet=&quot;List&quot; name=&quot;intro&quot; type=&quot;longchar&quot; hint=&quot;Introduction HTML for list.&quot; ftLabel=&quot;Intro&quot; ftType=&quot;longchar&quot; /&gt;
	&lt;cfproperty ftSeq=&quot;2&quot; ftFieldSet=&quot;List&quot; name=&quot;ListID&quot; type=&quot;UUID&quot; hint=&quot;ID of the List to be displayed&quot; ftLabel=&quot;List&quot; ftType=&quot;UUID&quot; ftJoin=&quot;massMailerList&quot; /&gt;
	&lt;cfproperty ftseq=&quot;3&quot; ftFieldset=&quot;List&quot; name=&quot;displayMethod&quot; type=&quot;string&quot; hint=&quot;Display method to render.&quot; required=&quot;yes&quot; default=&quot;display&quot; fttype=&quot;webskin&quot; ftprefix=&quot;displayList&quot; ftTypename=&quot;massMailerList&quot; ftlabel=&quot;Content Template&quot; /&gt;
	
&lt;cffunction name=&quot;execute&quot; hint=&quot;Displays the text rule on the page.&quot; output=&quot;true&quot; returntype=&quot;void&quot; access=&quot;public&quot;&gt;
	&lt;cfargument name=&quot;objectID&quot; required=&quot;Yes&quot; type=&quot;uuid&quot; default=&quot;&quot;&gt;
	
	&lt;cfset var stObj = getData(arguments.objectid) /&gt;
	&lt;cfset var oList = createObject(&quot;component&quot;,&quot;farcry.plugins.massMailer.packages.types.massMailerList&quot;) /&gt;
	&lt;cfset var stData = oList.getData(stObj.ListID) /&gt; 
	&lt;cfset var stInvoke = structNew() /&gt;	
	&lt;cfscript&gt;
		if (len(stobj.intro))
			arrayAppend(request.aInvocations,stobj.intro);
		stInvoke.objectID = stData.ObjectID;
		stInvoke.typename = application.types.massMailerList.typepath;
		stInvoke.method = stObj.displayMethod;
		arrayAppend(request.aInvocations,stInvoke);
	&lt;/cfscript&gt;
&lt;/cffunction&gt;
&lt;/cfcomponent&gt;
&lt;/code&gt;
&lt;p&gt;Not too complicated, and once again, formtools comes to our rescue! To get a real breadth of what can be done with rules, you really should take a look at the existing core and farcrycms rules. Some of them have much more functionality than what was required for this rule. &lt;/p&gt;
&lt;p&gt;Basically, if you want to have something displayed on the screen, you need to make a cfproperty for it. The usual formtools ideas apply. The items I required were the ID of the list, and the name of the webskin to display it. Formtools can grab this list of webskins for you with the fttype=&amp;quot;webskin&amp;quot;.&lt;/p&gt;
&lt;p&gt;The real magic is in the execute fucntion. It will create our stObj (which the webskin will use), and also invoke the webskin to be used. To be frank, I&apos;ve not dug into the internals much within rules. This one will get the job done, but I don&apos;t have the greatest of knowledge of this piece of FarCry.&lt;/p&gt;
&lt;h2&gt;The webskin  &lt;/h2&gt;
&lt;p&gt;The essence of the skin is to display two form fields, name and address, and submit this information as a aObjectID into the massMailerList. The nifty drag-n-drop display does this for us, so I simply &amp;quot;borrowed&amp;quot; those pieces to pull this of. &lt;/p&gt;
&lt;code&gt;
&lt;cfsetting enablecfoutputonly=&quot;true&quot;&gt;
&lt;!--- @@displayname: Display Mass Mailer Signup Form ---&gt;
&lt;!--- @@author: Matthew Williams ---&gt;
&lt;cfif isdefined(&apos;form.FARCRYFORMSUBMITBUTTON&apos;)&gt;

&lt;cfimport taglib=&quot;/farcry/core/tags/formtools/&quot; prefix=&quot;ft&quot; &gt;
&lt;cfinclude template=&quot;/farcry/core/admin/includes/utilityFunctions.cfm&quot;&gt;

&lt;cfparam name=&quot;form.primaryObjectID&quot; default=&quot;&quot;&gt;
&lt;cfparam name=&quot;form.primaryTypeName&quot; default=&quot;&quot;&gt;
&lt;cfparam name=&quot;form.primaryFieldName&quot; default=&quot;&quot;&gt;
&lt;cfparam name=&quot;form.primaryFormFieldName&quot; default=&quot;&quot;&gt;
&lt;cfparam name=&quot;form.ftJoin&quot; default=&quot;&quot;&gt;
&lt;cfparam name=&quot;form.wizardID&quot; default=&quot;&quot;&gt;
&lt;cfparam name=&quot;form.LibraryType&quot; default=&quot;array&quot;&gt;
&lt;cfparam name=&quot;form.ftLibraryAddNewWebskin&quot; default=&quot;libraryAdd&quot;&gt;&lt;!--- Method to Add New Object ---&gt;
&lt;cfparam name=&quot;form.ftLibraryPickWebskin&quot; default=&quot;libraryPick&quot;&gt;&lt;!--- Method to Pick Existing Objects ---&gt;
&lt;cfparam name=&quot;form.ftLibraryPickListClass&quot; default=&quot;thumbNailsWrap&quot;&gt;
&lt;cfparam name=&quot;form.ftLibraryPickListStyle&quot; default=&quot;&quot;&gt;
&lt;cfparam name=&quot;form.ftLibrarySelectedWebskin&quot; default=&quot;librarySelected&quot;&gt;&lt;!--- Method to Pick Existing Objects ---&gt;
&lt;cfparam name=&quot;form.ftLibrarySelectedListClass&quot; default=&quot;thumbNailsWrap&quot;&gt;
&lt;cfparam name=&quot;form.ftLibrarySelectedListStyle&quot; default=&quot;&quot;&gt;
&lt;cfparam name=&quot;form.ftAllowLibraryAddNew&quot; default=&quot;&quot;&gt;&lt;!--- Method to Add New Object ---&gt;
&lt;cfparam name=&quot;form.ftAllowLibraryEdit&quot; default=&quot;&quot;&gt;&lt;!--- Method to Edit Object ---&gt;
&lt;cfparam name=&quot;form.PackageType&quot; default=&quot;types&quot;&gt;&lt;!--- Could be types or rules.. ---&gt;
&lt;cfparam name=&quot;form.currentpage&quot; default=&quot;1&quot;&gt;


	
&lt;cfif form.PackageType EQ &quot;rules&quot;&gt;
	&lt;cfset PrimaryPackage = application.rules[form.primaryTypeName] /&gt;
	&lt;cfset PrimaryPackagePath = application.rules[form.primaryTypeName].rulepath /&gt;
&lt;cfelse&gt;
	&lt;cfset PrimaryPackage = application.types[form.primaryTypeName] /&gt;
	&lt;cfset PrimaryPackagePath = application.types[form.primaryTypeName].typepath /&gt;
&lt;/cfif&gt;

&lt;!--- TODO: dynamically determine the typename to join. ---&gt;
&lt;cfset request.ftJoin = listFirst(form.ftJoin) /&gt;
&lt;cfif NOT listContainsNoCase(PrimaryPackage.stProps[form.primaryFieldname].metadata.ftJoin,request.ftJoin)&gt;
	&lt;cfset request.ftJoin = listFirst(PrimaryPackage.stProps[form.primaryFieldname].metadata.ftJoin) /&gt;
&lt;/cfif&gt;


&lt;ft:processForm action=&quot;Attach,Attach &amp; Add Another&quot;&gt;	
	&lt;ft:processFormObjects typename=&quot;#request.ftJoin#&quot; /&gt;&lt;!--- Returns variables.lSavedObjectIDs ---&gt;
	&lt;cfset oPrimary = createObject(&quot;component&quot;,PrimaryPackagePath)&gt;
	&lt;cfset oData = createObject(&quot;component&quot;,application.types[request.ftJoin].typepath)&gt;
	&lt;cfloop list=&quot;#lSavedObjectIDs#&quot; index=&quot;DataObjectID&quot;&gt;
		&lt;cfif len(form.wizardID)&gt;					
			&lt;cfset owizard = createObject(&quot;component&quot;,application.types[&apos;dmWizard&apos;].typepath)&gt;
			&lt;cfset stwizard = owizard.Read(wizardID=form.wizardID)&gt;
			
			&lt;cfif form.LibraryType EQ &quot;UUID&quot;&gt;
				&lt;cfset stwizard.Data[form.PrimaryObjectID][form.PrimaryFieldname] = DataObjectID&gt;
			&lt;cfelse&gt;&lt;!--- Array ---&gt;
				&lt;cfset arrayAppend(stwizard.Data[form.PrimaryObjectID][form.PrimaryFieldname],DataObjectID)&gt;	
				&lt;cfset variables.tableMetadata = createobject(&apos;component&apos;,&apos;farcry.core.packages.fourq.TableMetadata&apos;).init() /&gt;
				&lt;cfset tableMetadata.parseMetadata(md=getMetadata(oPrimary)) /&gt;		
				&lt;cfset stFields = variables.tableMetadata.getTableDefinition() /&gt;
				&lt;cfset o = createObject(&quot;component&quot;,&quot;farcry.core.packages.fourq.gateway.dbGateway&quot;).init(dsn=application.dsn,dbowner=&quot;&quot;)&gt;
				&lt;cfset aProps = o.createArrayTableData(tableName=form.PrimaryTypename &amp; &quot;_&quot; &amp; form.PrimaryFieldName,objectid=form.PrimaryObjectID,tabledef=stFields[PrimaryFieldName].Fields,aprops=stwizard.Data[PrimaryObjectID][form.PrimaryFieldname])&gt;
				&lt;cfset stwizard.Data[form.PrimaryObjectID][form.PrimaryFieldname] = aProps&gt;
			&lt;/cfif&gt;
			
			&lt;cfset stwizard = owizard.Write(ObjectID=form.wizardID,Data=stwizard.Data)&gt;
			&lt;cfset st = stwizard.Data[form.PrimaryObjectID]&gt;
		&lt;cfelse&gt;
			&lt;cfset stPrimary = oPrimary.getData(objectid=form.PrimaryObjectID)&gt;
			
			&lt;cfif form.LibraryType EQ &quot;UUID&quot;&gt;
				&lt;cfset stPrimary[form.PrimaryFieldname] = DataObjectID&gt;		
			&lt;cfelse&gt;&lt;!--- Array ---&gt;
				&lt;cfset arrayAppend(stPrimary[form.PrimaryFieldname],DataObjectID)&gt;						
			&lt;/cfif&gt;		
			
			&lt;cfparam name=&quot;session.dmSec.authentication.userlogin&quot; default=&quot;anonymous&quot; /&gt;
			&lt;cfset oPrimary.setData(objectID=stPrimary.ObjectID,stProperties=&quot;#stPrimary#&quot;,user=&quot;#session.dmSec.authentication.userlogin#&quot;)&gt;
			
		&lt;/cfif&gt;
	&lt;/cfloop&gt;
	
&lt;/ft:processForm&gt;
&lt;/cfif&gt;

&lt;cfscript&gt;
	formObj.primaryHash = stObj.objectid;
	formObj.primaryNoHash = replace(formObj.primaryHash,&apos;-&apos;,&apos;&apos;,&apos;all&apos;);
	formObj.userObjHash = createuuid();
	formObj.userObjNoHash = replace(formObj.userObjHash,&apos;-&apos;,&apos;&apos;,&apos;all&apos;);
&lt;/cfscript&gt;

&lt;cfoutput&gt;
&lt;cfif isdefined(&apos;form.FARCRYFORMSUBMITBUTTON&apos;)&gt;
	&lt;p&gt;Your email address has been added to the list!&lt;/p&gt;
&lt;/cfif&gt;
&lt;form action=&quot;&quot; method=&quot;post&quot; id=&quot;farcryForm936443538&quot; name=&quot;farcryForm936443538&quot; target=&quot;&quot; enctype=&quot;multipart/form-data&quot; onsubmit=&quot;&quot; class=&quot;formtool&quot;  style=&quot;&quot;&gt;&lt;input type=&quot;hidden&quot; name=&quot;phpMyAdmin&quot; value=&quot;6ffe8b831e4bded08a42997de2b6eeaa&quot; /&gt;
	&lt;p&gt;Name: &lt;input type=&quot;Text&quot; name=&quot;#formObj.userObjHash#Title&quot; id=&quot;#formObj.userObjHash#Title&quot; value=&quot;&quot; class=&quot;&quot; style=&quot;&quot; /&gt;&lt;/p&gt;
	&lt;p&gt;Email:&lt;input type=&quot;Text&quot; name=&quot;#formObj.userObjHash#Email&quot; id=&quot;#formObj.userObjHash#Email&quot; value=&quot;&quot; class=&quot;&quot; style=&quot;&quot; /&gt;&lt;/p&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;#formObj.userObjHash#DateAddedinclude&quot; id=&quot;#formObj.userObjHash#DateAddedinclude&quot; value=&quot;1&quot;&gt;
    &lt;input type=&quot;hidden&quot; name=&quot;#formObj.userObjHash#DateAdded&quot; id=&quot;#formObj.userObjHash#DateAdded&quot; value=&quot;#now()#&quot; style=&quot;&quot; /&gt;&lt;/p&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;#formObj.userObjHash#ObjectID&quot; value=&quot;#formObj.userObjHash#&quot;&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;#formObj.userObjHash#Typename&quot; value=&quot;massMailerUser&quot;&gt;
	&lt;input type=&quot;submit&quot; name=&quot;FarcryFormSubmitButton&quot; value=&quot;Attach&quot; onclick=&quot;;$(&apos;FarcryFormSubmitButtonClickedfarcryForm936443538&apos;).value = &apos;Attach&apos;;;return realeasyvalidation.validate();&quot; class=&quot;formButton &quot; style=&quot;&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;FarcryFormPrefixes&quot; id=&quot;FarcryFormPrefixes&quot; value=&quot;#formObj.userObjHash#&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;FarcryFormSubmitButton&quot; id=&quot;FarcryFormSubmitButton&quot; value=&quot;&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;FarcryFormSubmitButtonClickedfarcryForm936443538&quot; id=&quot;FarcryFormSubmitButtonClickedfarcryForm936443538&quot; value=&quot;&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;FarcryFormSubmitted&quot; id=&quot;FarcryFormSubmitted&quot; value=&quot;farcryForm936443538&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;SelectedObjectID&quot; id=&quot;SelectedObjectIDfarcryForm936443538&quot; value=&quot;&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;PRIMARYFORMFIELDNAME&quot; value=&quot;#formObj.primaryNoHash#aObjectIDs&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;FTALLOWLIBRARYADDNEW&quot; value=&quot;massMailerUser&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;CURRENTPAGE&quot; value=&quot;1&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;FTLIBRARYPICKLISTSTYLE&quot; value=&quot;&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;FTLIBRARYSELECTEDLISTCLASS&quot; value=&quot;arrayDetail&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;FTLIBRARYADDNEWWEBSKIN&quot; value=&quot;libraryAdd&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;FTLIBRARYPICKWEBSKIN&quot; value=&quot;libraryPick&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;FTLIBRARYSELECTEDWEBSKIN&quot; value=&quot;LibrarySelected&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;PACKAGETYPE&quot; value=&quot;types&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;PRIMARYOBJECTID&quot; value=&quot;#formObj.primaryHash#&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;FTALLOWLIBRARYEDIT&quot; value=&quot;massMailerUser&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;WIZARDID&quot; value=&quot;&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;LIBRARYTYPE&quot; value=&quot;array&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;PRIMARYTYPENAME&quot; value=&quot;massMailerList&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;FTLIBRARYPICKLISTCLASS&quot; value=&quot;thumbNailsWrap&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;PRIMARYFIELDNAME&quot; value=&quot;aObjectIDs&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;FTJOIN&quot; value=&quot;massMailerUser&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;FTLIBRARYSELECTEDLISTSTYLE&quot; value=&quot;&quot; /&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;librarySection&quot; value=&quot;addnew&quot; /&gt;
&lt;/form&gt;
		
		
			&lt;script type=&quot;text/javascript&quot;&gt;
				var realeasyvalidation = new Validation(&apos;farcryForm936443538&apos;, {onSubmit:false});
			&lt;/script&gt;
&lt;/cfoutput&gt;
&lt;cfsetting enablecfoutputonly=&quot;false&quot;&gt;
&lt;/code&gt;
&lt;p&gt;What we have is a call to formtools, supplied with our main object (massMailerList) and our attachment (massMailerUser). This code was wrought from within library.cfm. If you haven&apos;t already looked, it would be a great place to learn more about how the open library function works. I don&apos;t have any validation for the email field, yet. That&apos;s comming down the line. &lt;/p&gt;
&lt;p&gt;Hopefully this makes this a little bit clearer. Or, at the very least, steers someone in the right direction. &lt;/p&gt;
				
				</description>
						
				
				<category>ColdFusion 7.x</category>				
				
				<category>FarCry</category>				
				
				<pubDate>Fri, 23 Feb 2007 16:35:00 -0500</pubDate>
				<guid>http://www.geodesicgrafx.com/blog/index.cfm/2007/2/23/FarCry-plugin-breakdown--Part-III</guid>
				
			</item>
			
		 	
			</channel></rss>