<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jeremy Massel&#039;s Blog &#187; Uncategorized</title>
	<atom:link href="http://masseltech.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://masseltech.com</link>
	<description>Because sometimes I have good ideas too</description>
	<lastBuildDate>Wed, 11 Aug 2010 17:16:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>No lol&#8217;ing allowed</title>
		<link>http://masseltech.com/2010/05/no-loling-allowed/</link>
		<comments>http://masseltech.com/2010/05/no-loling-allowed/#comments</comments>
		<pubDate>Tue, 11 May 2010 20:37:57 +0000</pubDate>
		<dc:creator>jeremy.massel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://masseltech.com/?p=180</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://masseltech.com/wp-content/uploads/2010/05/dont-lol.png"><img src="http://masseltech.com/wp-content/uploads/2010/05/dont-lol-300x187.png" alt="" title="don&#039;t lol" width="300" height="187" class="alignleft size-medium wp-image-181" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://masseltech.com/2010/05/no-loling-allowed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Humility</title>
		<link>http://masseltech.com/2009/08/humility/</link>
		<comments>http://masseltech.com/2009/08/humility/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 21:16:50 +0000</pubDate>
		<dc:creator>jeremy.massel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://masseltech.com/?p=93</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://masseltech.com/wp-content/uploads/2009/08/Screen-shot-2009-08-18-at-3.15.51-PM.png"><img class="alignleft size-full wp-image-94" title="Screen shot 2009-08-18 at 3.15.51 PM" src="http://masseltech.com/wp-content/uploads/2009/08/Screen-shot-2009-08-18-at-3.15.51-PM.png" alt="Screen shot 2009-08-18 at 3.15.51 PM" width="473" height="141" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://masseltech.com/2009/08/humility/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WordPress inline field validation for plugins</title>
		<link>http://masseltech.com/2009/04/wordpress-inline-field-validation-for-plugins/</link>
		<comments>http://masseltech.com/2009/04/wordpress-inline-field-validation-for-plugins/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 01:17:36 +0000</pubDate>
		<dc:creator>jeremy.massel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://masseltech.com/?p=29</guid>
		<description><![CDATA[On a recent plugin, I&#8217;ve been looking for a way to have powerful form field validation, while being really user-friendly. Using AJAX to do run a PHP server-side check from a form (to ensure that somebody can&#8217;t have duplicates) is the best way I&#8217;ve found. This is basically the same as what you&#8217;ll find on [...]]]></description>
			<content:encoded><![CDATA[<p>On a recent plugin, I&#8217;ve been looking for a way to have powerful form field validation, while being really user-friendly. Using AJAX to do run a PHP server-side check from a form (to ensure that somebody can&#8217;t have duplicates) is the best way I&#8217;ve found. This is basically the same as what you&#8217;ll find on the WordPress.org Codex, but shorter, and more specific for this application.</p>
<p>Code:</p>
<p>1. Add an action on the init() action to call the sack JS script (deals with AJAX in WP)</p>
<p><span><span> </span></span>wp_enqueue_script<span> </span><span>(</span><span> </span><span>&#8216;sack&#8217;</span><span> </span><span>);</span></p>
<p><span>2. Create an instance of the sack object, and create variables to pass into the PHP side.</span></p>
<p><span><span>function</span> doesCalendarExist<span>(</span>wpurl<span>,</span> <span>confirmationFieldName</span><span>,</span> calendarNameFieldID<span>,</span> submitButtonID<span>)</span> <span>{</span></p>
<p><span> </span><span>var</span> ajaxObject <span>=</span> <span>new</span> sack<span>(</span>wpurl <span>+</span> <span>&#8216;/wp-admin/admin-ajax.php&#8217;</span><span>);</span></p>
<p><span> </span></p>
<p><span> </span>ajaxObject<span>.</span>execute <span>=</span> <span>1</span><span>;</span></p>
<p><span> </span>ajaxObject<span>.</span>method <span>=</span> <span>&#8216;POST&#8217;</span><span>;</span></p>
<p><span><span> </span>ajaxObject</span><span>.</span><span>setVar</span><span>(</span><span> </span>&#8220;action&#8221;<span>,</span><span> </span>&#8220;doesCalendarExist&#8221;<span> </span><span>);</span></p>
<p><span> </span>ajaxObject<span>.</span>setVar<span>(</span> <span>&#8220;confirmationField&#8221;</span><span>,</span> confirmationFieldName<span>);</span></p>
<p><span> </span>ajaxObject<span>.</span>setVar<span>(</span> <span>&#8220;calendarName&#8221;</span><span>,</span> document<span>.</span>getElementById<span>(</span>calendarNameFieldID<span>).</span>value<span>);</span></p>
<p><span> </span>ajaxObject<span>.</span>setVar<span>(</span> <span>&#8220;submitButton&#8221;</span><span>,</span> submitButtonID<span>);</span></p>
<p><span> </span>ajaxObject<span>.</span>onError <span>=</span> <span>function</span><span>(){</span> alert<span>(</span><span>&#8216;Ajax error&#8217;</span><span>)};</span></p>
<p><span> </span></p>
<p><span> </span>ajaxObject<span>.</span>runAJAX<span>();</span></p>
<p><span> </span></p>
<p><span> </span></p>
<p><span><span> </span></span>return<span> </span><span>true</span><span>;</span><span><span> </span></span></p>
<p><span> </span></p>
<p>}</p>
<div>3. Create an input field that can call javascript functions to populate the data, and a span that will hold the error message</div>
<div>
<p><span>&lt;</span><span>input</span><span> </span><span>name</span><span>=</span><span>&#8220;calendarName&#8221;</span><span> </span><span>type</span><span>=</span><span>&#8220;text&#8221;</span><span> </span><span>id</span><span>=</span><span>&#8220;calendarName&#8221; </span><span> </span><span>onblur</span><span>=&#8221;doesCalendarExist</span><span>(</span>&#8216;<span>&lt;</span>?<span>ph</span>p <span>ech</span>o <span>bloginf</span>o(&#8216;<span>url</span>&#8216;); ?&gt;&#8217;<span>,</span><span> </span>&#8216;span1&#8242;<span>,</span><span> </span>&#8216;calendarName&#8217;<span>,</span><span> </span>&#8216;submitCalendarAdd&#8217;<span>);</span><span>&#8220;</span><span>/&gt;</span></p>
<p>&lt;<span>span</span><span> </span><span>id</span><span>=</span>&#8220;span1&#8243; class=&#8221;formError&#8221;&gt;&lt;/<span>span</span>&gt;<span><span> </span></span></p>
<p><span>4. Create a PHP function that will read the data passed from the ajaxObject. Die() statements will pass JavaScript back to the page. The dieString variable is super useful to be able to add lots of different DOM changes.</span></p>
<p><span><span>function</span><span> </span>wec_ajax_doesCalendarExist<span>(){</span></p>
<p><span> </span></p>
<p><span> </span></p>
<p><span><span> </span></span><span>$confirmationField</span><span> </span><span>=</span><span> </span><span>$_POST</span><span>[</span>'confirmationField'<span>];</span></p>
<p><span><span> </span></span><span>$calendarName</span><span> </span><span>=</span><span> </span><span>$_POST</span><span>[</span>'calendarName'<span>];</span></p>
<p><span><span> </span></span><span>$submitButton</span><span> </span><span>=</span><span> </span><span>$_POST</span><span>[</span>'submitButton'<span>];</span></p>
<p><span> </span></p>
<p><span> </span></p>
<p><span> </span></p>
<p><span><span> </span></span>$calendars<span> </span><span>=</span><span> </span>calendarDA<span>::</span>getAllcalendars<span>();</span></p>
<p><span><span> </span></span>$exists<span> </span><span>=</span><span> </span><span>false</span><span>;</span></p>
<p><span> </span></p>
<p><span> </span></p>
<p><span><span> </span></span><span>foreach</span><span>(</span>$calendars<span> </span><span>as</span><span> </span>$calendar<span>){</span></p>
<p><span><span> </span></span><span>if</span><span>(</span><span>strcasecmp</span><span>(</span>$calendar<span>[</span><span>'calendarName'</span><span>],</span><span> </span>$calendarName<span>)</span><span> </span><span>==</span><span> </span><span>0</span><span>){</span></p>
<p><span><span> </span></span>$exists<span> </span><span>=</span><span> </span><span>true</span><span>;</span></p>
<p><span> </span><span>}</span></p>
<p><span> </span><span>}</span></p>
<p><span> </span></p>
<p><span> </span></p>
<p><span><span> </span></span><span>if</span><span>(</span>$exists<span>){</span></p>
<p><span> </span></p>
<p><span><span> </span></span><span>$dieString</span><span> </span><span>=</span><span> </span>&#8220;document.getElementById(&#8216;&#8221;<span>.</span><span> </span><span>$confirmationField</span><span> </span><span>.</span>&#8220;&#8216;).innerHTML=&#8217;This calendar already exists!&#8217;;&#8221;<span>;</span></p>
<p><span><span> </span></span><span>$dieString</span><span> </span><span>.=</span><span> </span>&#8220;document.getElementById(&#8216;&#8221;<span>.</span><span> </span><span>$submitButton</span><span> </span><span>.</span>&#8220;&#8216;).disabled = true;&#8221;<span>;</span></p>
<p><span> </span></p>
<p><span><span> </span></span><span>die</span><span>(</span>$dieString<span>);</span></p>
<p><span> </span><span>}</span></p>
<p><span><span> </span></span>else<span>{</span></p>
<p><span> </span></p>
<p><span><span> </span></span><span>$dieString</span><span> </span><span>=</span><span> </span>&#8220;document.getElementById(&#8216;&#8221;<span>.</span><span> </span><span>$confirmationField</span><span> </span><span>.</span>&#8220;&#8216;).innerHTML=&#8221;;&#8221;<span>;</span></p>
<p><span><span> </span></span><span>$dieString</span><span> </span><span>.=</span><span> </span>&#8220;document.getElementById(&#8216;&#8221;<span>.</span><span> </span><span>$submitButton</span><span> </span><span>.</span>&#8220;&#8216;).disabled = false;&#8221;<span>;</span></p>
<p><span> </span></p>
<p><span><span> </span></span><span>die</span><span>(</span>$dieString<span>);</span></p>
<p><span> </span><span>}</span></p>
<p><span> </span><span>}</span></p>
<p><span>5. Add a WordPress Action to the init() that maps the sack action to the PHP function. you have to add &#8220;wp_ajax_&#8221; to the beginning of your action name from sack. the second argument is the name of your function that this action will call</span></p>
<p><span><span>add_action</span><span>(</span>&#8216;wp_ajax_doesCalendarExist&#8217;<span>,</span><span> </span>&#8216;wec_ajax_doesCalendarExist&#8217;<span> </span><span>);</span></p>
<p></span></p>
<p><span><br />
</span></p>
<p></span></p>
<p><span><br />
</span></div>
<p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://masseltech.com/2009/04/wordpress-inline-field-validation-for-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Old iPhone</title>
		<link>http://masseltech.com/1988/06/old-iphone/</link>
		<comments>http://masseltech.com/1988/06/old-iphone/#comments</comments>
		<pubDate>Wed, 29 Jun 1988 21:19:33 +0000</pubDate>
		<dc:creator>jeremy.massel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://masseltech.com/?p=200</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[
<a href='http://masseltech.com/1988/06/old-iphone/photo-1/' title='photo 1'><img width="150" height="150" src="http://masseltech.com/wp-content/uploads/2010/06/photo-1-150x150.jpg" class="attachment-thumbnail" alt="photo 1" title="photo 1" /></a>
<a href='http://masseltech.com/1988/06/old-iphone/photo-2/' title='photo 2'><img width="150" height="150" src="http://masseltech.com/wp-content/uploads/2010/06/photo-2-150x150.jpg" class="attachment-thumbnail" alt="photo 2" title="photo 2" /></a>
<a href='http://masseltech.com/1988/06/old-iphone/photo-3/' title='photo 3'><img width="150" height="150" src="http://masseltech.com/wp-content/uploads/2010/06/photo-3-150x150.jpg" class="attachment-thumbnail" alt="photo 3" title="photo 3" /></a>

]]></content:encoded>
			<wfw:commentRss>http://masseltech.com/1988/06/old-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
