<?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>Delaware Web Designers - Inclind, Inc Internet Professionals &#187; PHP</title>
	<atom:link href="http://www.delawarewebdesigner.com/category/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.delawarewebdesigner.com</link>
	<description>Inclind, Inc - Delaware Web Designers - Professional Delaware Web Design Since 1999</description>
	<lastBuildDate>Wed, 12 May 2010 16:21:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Looking to start a business? Go to Delaware LLC!</title>
		<link>http://www.delawarewebdesigner.com/websites/looking-to-start-a-business-go-to-delaware-llc.htm</link>
		<comments>http://www.delawarewebdesigner.com/websites/looking-to-start-a-business-go-to-delaware-llc.htm#comments</comments>
		<pubDate>Fri, 22 Jan 2010 21:11:18 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Custom Website Design]]></category>
		<category><![CDATA[Delaware Web Designer]]></category>
		<category><![CDATA[Delaware Web Developer]]></category>
		<category><![CDATA[Drupal 6.x]]></category>
		<category><![CDATA[Drupal Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Search Engine Optimization]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[drupal modules]]></category>
		<category><![CDATA[create an llc in delaware]]></category>
		<category><![CDATA[delaware llc]]></category>
		<category><![CDATA[form an llc in delaware]]></category>
		<category><![CDATA[franchise tax]]></category>
		<category><![CDATA[harvard business services]]></category>
		<category><![CDATA[make an llc in delaware]]></category>
		<category><![CDATA[start a business in delaware]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/?p=522</guid>
		<description><![CDATA[Are you interested in starting a business in 2010? Why not! Start an LLC, it&#8217;s easy, and Rick Bell and the folks at Harvard Business Services can get you jumpstarted into forming your own LLC right away at Delaware LLC (http://www.delawarellc.com).

What is an LLC?
A limited liability company or a company with limited liability (abbreviated L.L.C. [...]]]></description>
			<content:encoded><![CDATA[<p>Are you interested in starting a business in 2010? Why not! Start an LLC, <a href="http://www.delawarellc.com" target="_blank">it&#8217;s easy</a>, and Rick Bell and the folks at Harvard Business Services can get you jumpstarted into <a href="http://www.delawarellc.com" target="_blank">forming your own LLC</a> right away at <a href="http://www.delawarellc.com" target="_blank">Delaware LLC (http://www.delawarellc.com)</a>.</p>
<p><a href="http://www.delawarellc.com" target="_blank"><img src="http://www.delawarewebdesigner.com/wp-content/delawareinc.jpg" alt="" title="delawareinc" width="550" height="339" class="aligncenter size-full wp-image-532" /></a></p>
<p>What is an <a href="http://en.wikipedia.org/wiki/Limited_liability_company" target="_blank">LLC</a>?</p>
<p><em>A limited liability company or a company with limited liability (abbreviated L.L.C. or LLC or W.L.L) in the law of the vast majority of United States jurisdictions is a legal form of business company that provides limited liability to its owners. Often incorrectly called a &#8220;limited liability corporation&#8221; (instead of company), it is a hybrid business entity having certain characteristics of both a corporation and a partnership or sole proprietorship (depending on how many owners there are). An LLC, although a business entity, is a type of unincorporated association and is not a corporation. The primary characteristic an LLC shares with a corporation is limited liability, and the primary characteristic it shares with a partnership is the availability of pass-through income taxation. It is often more flexible than a corporation and it is well-suited for companies with a single owner.</em></p>
<p><a href="http://www.delawarellc.com" target="_blank">Delaware LLC</a> is built on our custom Drupal CMS package. It was designed from the ground up by Creative Director Kevin Howett, and put together in a collaborative effort between newcomer Matt Oseland, Kevin Howett and Bryan Cordrey. Efforts were focused on a pleasing, business-minded design, effective search engine optimization, and funneling/encouraging customers to begin the process of <a href="http://www.delawarellc.com" target="_blank">forming an LLC in Delaware</a>.</p>
<p>As Rick&#8217;s customers go to him and Harvard Business Services for their LLC/incorporation expertise, Rick came to <a href="http://www.inclind.com" target="_blank">Inclind</a> for our expertise in clean, effective websites and powerful web application development under Drupal and our deep knowledge of content management systems such as Drupal. We also got to flex our system integration skills with Drupal, PHP and Coldfusion.</p>
<p><strong>About Delaware LLC &#038; Harvard Business Services</strong></p>
<p>With more than 25 years of experience, over 20,000 clients worldwide, and offices in both the United States and Europe, Harvard Business Services, Inc. is the premier provider of registered agent and business formation solutions. </p>
<p>Rick Bell formed Harvard Business Services, Inc. in March, 1981. Competitors then were big and well established. But Rick conducted business with a philosophy that allowed Harvard not just to survive but to thrive, emerging over time to become an acknowledged leader in the business formation industry.</p>
<p>His philosophy focused on a highly personalized style of customer service, understanding that beyond the mechanics of forming a business there were dreams and aspirations. A customer’s individual questions and concerns were important and special, and that’s how they were treated.</p>
<p>Rick also decided that a customer’s business formation costs should be fixed, predictable, affordable, and customers should get a lot of value for their money.</p>
<p>After almost 30 years and tens of thousands of business formations later, that same approach is still the signature of our culture and way of doing business: speed, efficiency, expertise and affordability, all delivered with the Harvard legacy of personal service.</p>
<p>Headquartered in Lewes, DE, Harvard Business Services, Inc. today is the leading provider of business formation services. Along with the Harvard Business Services brand of fast, personalized service, customers soon discover a number of other traits that set Harvard Business Services, Inc. far apart from the rest.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>If you have any questions regarding content management systems, Drupal, Coldfusion or systems integration, we are here to help. Give us a call at 302-856-2802, send us a tweet <a href="http://twitter.com/inclindinc" target="_blank">@inclindinc</a>, or stop by our office. We have been the leading web development firm in the area for over 10 years running and have fourty years of combined web experience under one roof.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/websites/looking-to-start-a-business-go-to-delaware-llc.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sync Files in Drupal Using Services and xmlrpc()</title>
		<link>http://www.delawarewebdesigner.com/how-tos/sync-files-in-drupal-using-services-and-xmlrpc.htm</link>
		<comments>http://www.delawarewebdesigner.com/how-tos/sync-files-in-drupal-using-services-and-xmlrpc.htm#comments</comments>
		<pubDate>Tue, 05 Jan 2010 14:24:08 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Custom Website Design]]></category>
		<category><![CDATA[Drupal Development]]></category>
		<category><![CDATA[How To's]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[drupal modules]]></category>
		<category><![CDATA[content distributing in drupal]]></category>
		<category><![CDATA[sync files with drupal xmlrpc]]></category>
		<category><![CDATA[using drupal xmlrpc]]></category>
		<category><![CDATA[using Services module in drupal]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/?p=486</guid>
		<description><![CDATA[In a previous entry we explored content syncing/distributing using the Services module and XMLRPC in Drupal. We learned how to create a method, its callback, how to invoke it through xmlrpc from another server, and how to create or update a node based on that data.
Lets take a look at how you bring in files [...]]]></description>
			<content:encoded><![CDATA[<p>In a <a href="http://www.delawarewebdesigner.com/tech-stuff/sync-drupal-content-using-services-and-xmlrpc.htm">previous entry</a> we explored content syncing/distributing using the <a href="http://www.drupal.org/project/services" target="_blank">Services</a> module and XMLRPC in Drupal. We learned how to create a method, its callback, how to invoke it through xmlrpc from another server, and how to create or update a node based on that data.</p>
<p>Lets take a look at how you bring in files as part of that node as well. From the previous example, before calling node_save($node), I call another function to process files. Name it however you wish. My module is called homes_sync, so my hooks and functions begin with that as per Drupal standards.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">homes_sync_get_files<span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nid</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sessid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// save the node object</span>
node_save<span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>homes_sync_get_files() is passed the $node object and will return it after adding (or removing) data. To have a reliable file sync, we need to only update files if they are newer, and remove them if they no longer exist.</p>
<p>In this specific example, the project I am working on has two CCK file fields. One is for a floorplan (a PDF) and the other is an image field. In a node, there is only 1 floorplan, but can be up to 2 dozen images. If you had a more generic node that just has a CCK filefield of &#8216;client_files&#8217; for example, your code would be slightly different.</p>
<p>Before we add any files to the node, the first thing we should do is compare the list of files from the remote site to the local site. We start that off by getting $files via xmlrpc, and loading the node object if $node->nid is present. If any are found on the local site, and not the remote site, we can safely remove them from the node object. The two arrays are iterated over and remove files if necessary.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> homes_sync_get_files<span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nid</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sessid</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000088;">$files</span> <span style="color: #339933;">=</span> xmlrpc<span style="color: #009900;">&#40;</span>REMOTE_SERVICES_URL<span style="color: #339933;">,</span> <span style="color: #0000ff;">'file.getHomeFiles'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sessid</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// first, compare list of files from parent server with local files</span>
	<span style="color: #666666; font-style: italic;">// if our local files has something the parent server doesnt have</span>
	<span style="color: #666666; font-style: italic;">// it was probably deleted. so we need to unset it from the node object</span>
	<span style="color: #666666; font-style: italic;">// when it gets passed back through node_save, cck should delete it proper</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nid</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #000088;">$current_files</span> <span style="color: #339933;">=</span> node_load<span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$current_files</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #000088;">$files</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// we have files locally, but none on the parent server. 	</span>
			<span style="color: #666666; font-style: italic;">// remove all</span>
			<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_floorplan</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_image</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'homes_sync'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Remote copy of @node no longer has files. Removing all local files for @node.'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@node'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> WATCHDOG_NOTICE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$current_files</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$files</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// build comparison arrays</span>
&nbsp;
			<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$files</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$remote_file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$remote_files</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$remote_file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>	
			<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$current_files</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_floorplan</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$local_floorplan_file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$local_files</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$local_floorplan_file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$current_files</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_image</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$local_image_file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$local_files</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$local_image_file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// now lets see whats missing</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$local_files</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$remote_files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
				<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$local_files</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$local_file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$local_file</span><span style="color: #339933;">,</span> <span style="color: #000088;">$remote_files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
						<span style="color: #666666; font-style: italic;">// parent site does not have this file in the node anymore</span>
						<span style="color: #000088;">$files_to_delete</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$local_file</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
				<span style="color: #009900;">&#125;</span>
&nbsp;
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$files_to_delete</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$files_to_delete</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$files_to_delete</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$file_to_delete</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
						<span style="color: #666666; font-style: italic;">// CCK field arrays exist in node objects even if they have no data</span>
						<span style="color: #666666; font-style: italic;">// we can assume if the first record is NULL, there is no data</span>
&nbsp;
						<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_floorplan</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #009900; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
							<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_floorplan</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$file_key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$floorplan</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
								<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$file_to_delete</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$floorplan</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
									watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'homes_sync'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@file file does not exist on parent server anymore for @node. Removing.'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@file'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$floorplan</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@node'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> WATCHDOG_NOTICE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
									<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_floorplan</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$file_key</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
								<span style="color: #009900;">&#125;</span>
							<span style="color: #009900;">&#125;</span>
						<span style="color: #009900;">&#125;</span>
&nbsp;
						<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_image</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #009900; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
							<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_image</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$image_key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$image</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
								<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$file_to_delete</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$image</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
									watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'homes_sync'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@image image does not exist on parent server anymore for @node. Removing.'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@image'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$image</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@node'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> WATCHDOG_NOTICE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
									<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_image</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$image_key</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
								<span style="color: #009900;">&#125;</span>
							<span style="color: #009900;">&#125;</span>
						<span style="color: #009900;">&#125;</span>
						<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$floorplan</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
						<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$image</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
				<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$remote_files</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$local_files</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Now that we are through with our deletion process, we can begin processing the remote files. For each file id ($fid) we call xmlrpc and get all the data and the file itself and bring it down to our local site. Based on the file extension, we begin building a query so we can look to see if this file exists locally, and what its last timestamp was. We do this so we know if a file should be replaced or not. For example, if you have MyHome.PDF on your local site, and a new version is uploaded on the remote site, simply comparing file names is not good enough. With a filename and a timestamp comparison, you are certain that it should be processed.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$files</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$files</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$fid</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$remote_file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> xmlrpc<span style="color: #009900;">&#40;</span>REMOTE_SERVICES_URL<span style="color: #339933;">,</span> <span style="color: #0000ff;">'file.get'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sessid</span><span style="color: #339933;">,</span> <span style="color: #000088;">$fid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #666666; font-style: italic;">// set filepath to save to</span>
				<span style="color: #666666; font-style: italic;">// decode our content file</span>
&nbsp;
				<span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filepath'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> file_directory_path<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">.</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$file_data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">base64_decode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'file'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// set content type db table, and field to search on.</span>
				<span style="color: #666666; font-style: italic;">// Load up the CCK field</span>
&nbsp;
				<span style="color: #000088;">$filetype</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'.'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$filetype</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'pdf'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #000088;">$content_table</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'content_type_homes'</span><span style="color: #339933;">;</span>
					<span style="color: #000088;">$fid_field</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'field_floorplan_fid'</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #000088;">$content_table</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'content_field_image'</span><span style="color: #339933;">;</span>
					<span style="color: #000088;">$fid_field</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'field_image_fid'</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
&nbsp;
				<span style="color: #000088;">$file_details</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// check if it's the same file coming over</span>
				<span style="color: #666666; font-style: italic;">// only applies if the node exists in the first place. otherwise its a new import on a new home</span>
				<span style="color: #666666; font-style: italic;">// if there is a file match we dont want to do anything but skip the creation</span>
				<span style="color: #666666; font-style: italic;">// i think if you dont keep the node-&gt;file field prefilled, and returns those fields empty, it causes the file deletion on the server</span>
&nbsp;
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nid</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
					<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> db_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT f.filename, f.fid, f.filepath, f.timestamp FROM {files} f
											INNER JOIN {<span style="color: #009933; font-weight: bold;">%s</span>} ctype ON f.fid = ctype.<span style="color: #009933; font-weight: bold;">%s</span>
										WHERE f.filename = '<span style="color: #009933; font-weight: bold;">%s</span>'&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$content_table</span><span style="color: #339933;">,</span> <span style="color: #000088;">$fid_field</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
&nbsp;
					<span style="color: #000088;">$file_details</span> <span style="color: #339933;">=</span> db_fetch_array<span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
&nbsp;
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$file_details</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$file_details</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'timestamp'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'timestamp'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
					<span style="color: #666666; font-style: italic;">// if file exists and has not changed remotely, skip it</span>
&nbsp;
					watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'homes_sync'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@file already exists for @home. Skipping.'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@file'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$file_details</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@home'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> WATCHDOG_NOTICE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> 
&nbsp;
					<span style="color: #666666; font-style: italic;">// save file</span>
					<span style="color: #666666; font-style: italic;">// REPLACE because we can be certain we will not have duplicate files</span>
					<span style="color: #666666; font-style: italic;">// so we will only ever receive unique ones here</span>
&nbsp;
					file_save_data<span style="color: #009900;">&#40;</span><span style="color: #000088;">$file_data</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filepath'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> FILE_EXISTS_REPLACE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #666666; font-style: italic;">//write record in files table</span>
					drupal_write_record<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'files'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> db_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT fid,filepath FROM {files} WHERE filename = '<span style="color: #009933; font-weight: bold;">%s</span>'&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #000088;">$file_details</span> <span style="color: #339933;">=</span> db_fetch_object<span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #000088;">$file_data</span> <span style="color: #339933;">=</span> field_file_load<span style="color: #009900;">&#40;</span><span style="color: #000088;">$file_details</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
					watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'homes_sync'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Uploaded @file into @home.'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@file'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$full_file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@home'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> WATCHDOG_NOTICE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$file_data</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
						<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$filetype</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'pdf'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
							<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_floorplan</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$file_data</span><span style="color: #339933;">;</span>
						<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
							<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_image</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$file_data</span><span style="color: #339933;">;</span>
						<span style="color: #009900;">&#125;</span>
&nbsp;
					<span style="color: #009900;">&#125;</span>
&nbsp;
				<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$node</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>After the file is saved to the file system and database, <a href="http://api.lullabot.com/field_file_load" target="_blank">field_file_load()</a> is called to load the file data. With a populated array now, we can add that to our node object by simply putting $node->field_floorplan[] = $file_data or $node->field_image[] = $file_data to append the existing array with data. The $node object is returned, and node_save($node) is immediately called, and our node data and file data are saved. Just like that, we have a simple content distribution system from one parent site to potentially many remote sites.</p>
<p>This is just a simple example, your mileage may vary. We are utilizing this technology to hook companies together under different Drupal installations on different servers. Using <a href="http://www.drupal.org/project/services" target="_blank">Services</a> you could also distribute <a href="http://www.drupal.org/project/views" target="_blank">Views</a> configurations, users, and system settings.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/how-tos/sync-files-in-drupal-using-services-and-xmlrpc.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Choose Drupal, Not Proprietary</title>
		<link>http://www.delawarewebdesigner.com/web-applications/choose-drupal-not-proprietary.htm</link>
		<comments>http://www.delawarewebdesigner.com/web-applications/choose-drupal-not-proprietary.htm#comments</comments>
		<pubDate>Sat, 02 Jan 2010 21:10:30 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Drupal Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[Web Standards]]></category>
		<category><![CDATA[drupal modules]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[open source cms]]></category>
		<category><![CDATA[proprietary cms are bad]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/?p=463</guid>
		<description><![CDATA[Near the end of 2008, Shaun and I sat down and made the collective decision to change direction in how we develop solutions for clients. It was becoming more obvious as the economy started going downhill, we needed to find a way to decrease development costs and increase efficiency to stay relevant. To do this, [...]]]></description>
			<content:encoded><![CDATA[<p>Near the end of 2008, Shaun and I sat down and made the collective decision to change direction in how we develop solutions for clients. It was becoming more obvious as the economy started going downhill, we needed to find a way to decrease development costs and increase efficiency to stay relevant. To do this, we knew we had to find a way to get things done faster and to stop reinventing the wheel.</p>
<p>Up to that point, we had done every project in Coldfusion hosted on Windows (and eventually Linux). There is a price tag that came with that though, whether it be hosting, Coldfusion licensing/upgrading, or development costs. As people were let go due to the economy, we also realized that it is difficult to support proprietary code for a proprietary solution someone else wrote. Why? Because that person is <strong>the only person</strong> in the world who knows why they made the application/code that way. When something goes wrong, you spend hours trying to find the issue, and even more time coming up with a tested reliable solution.</p>
<p>Proprietary solutions are sold as the best thing since sliced bread, but what customers don&#8217;t know is that they are getting locked in to that company. You can&#8217;t easily cut ties with a firm and take your site someplace else. Proprietary applications are the brainchild of whoever developed it. Therefore, when you need support, you won&#8217;t get it. That developer is long gone, but you are stuck with their code. These firms put you in a box and want to keep you there- that is the whole point of proprietary systems. Why do you think you can&#8217;t install OSX on a PC? Why do you think video games are built only for Windows, and not Linux or Mac? It&#8217;s all about client retention.</p>
<p>With that, we decided to start fresh and drop our proprietary Coldfusion CMS and Ecommerce platforms. Everyday we were tied up in fixing Inclind Commerce, or trying to meet the needs of each client for Inclind CMS. Pete and I went as fast as we could, but we pretty much knew there was no way to compete with the rest of the world. We turned to open source solutions to provide us a solid base to build off of, instead of starting each project from scratch (which all essentially had the same core functionality as it were). Developing Coldfusion in Fusebox framework is/was an absolute nightmare and probably still is. It is a disjointed unauthentic implementation of MVC style framework despite what they say, and requires you to hold its hand every step of the development process.</p>
<p>We knew Wordpress would not be a solution at all. At best, it is a blogging platform and nothing more. You may read lots of articles that say how awesome Wordpress is and is a CMS, but <strong>it is not a CMS</strong>. You&#8217;ll also see that those articles are written by designers too, not developers. It&#8217;s a pain in the ass to develop for, it has patches every other week, plugins are prone to XSS attacks or theme hacking, and cannot sustain the level of development we perform. It is not a prime-time application for websites.</p>
<p>We also tried Joomla. Knowing it was based around Mambo, my expectations were low for it based on the experience I had working with Mambo. Even 5 years later, it had an ugly backend, scattered developer community, and little support. The developer area is full of confusing rules, practices and jargon. Take this for example, from the Joomla extensions page:</p>
<blockquote><ul>
<li>Component &#8211; Mini-application to render the main page body.</li>
<li>Module &#8211; Renders small html blocks on any page.</li>
<li>Plugin &#8211; Changes code behavior dynamically.</li>
<li>Language &#8211; Provides language translation.</li>
<li>Ext. Specific Addon &#8211; Specific addon that requires another ext. to operate.</li>
<li>Tool &#8211; External application that helps with creating or managing Joomla! site.</li>
</ul>
</blockquote>
<p>What the hell is the difference? All 6 bullet points say the same thing, yet they are 6 different kinds of extensions for Joomla. We couldn&#8217;t see ourselves training clients around the confusing backend or having lowered development time with their overly complicated extension system and scary licensing rules.</p>
<p>We came to Drupal. I had heard about this one on and off in various circles, generally more good than bad. After a week of successful proof of concepts for different kinds of websites, we decided Drupal was the best solution for us in terms of what we needed to accomplish.</p>
<p>Out of the box, Drupal provides:</p>
<ul>
<li>Database abstraction</li>
<li>Auto-discovery of custom modules</li>
<li>Managed workflow</li>
<li>Robust Development API</li>
<li>Experienced and organized developer community</li>
<li>Intuitive administrative backend</li>
<li>Easy integration of custom modules through the hook system</li>
</ul>
<p>There is a solution for just about any scenario in the Drupal world. They have a very good approval process for modules. For example, if a module has security loopholes or bad coding practices, it will not be accepted until those are corrected (I don&#8217;t see this happening in other projects). If someone is trying to submit a module that already exists in some form, they are encouraged to merge efforts so the community isn&#8217;t littered with duplicate modules with the same functionality. It is differences like these that make Drupal the most widely used, highly regarded, best open source CMS bar none.</p>
<p>Our choice was the right one, proving vital in our relevance to custom web development and is a reason why we are still here and still the top choice for web design / web development / website building on the peninsula. We are able to deploy websites with a consistent codebase and backend in rapid succession. Clients are pleased with the added functionality and easier administrative UI. We&#8217;re at the point now where we can take Drupal and make it do anything we need it to do, big or small. We&#8217;ve been able to provide scalable solutions from the collaboration of many people providing a solid product. Instead of a couple of people making an in-house solution, we&#8217;re working with hundreds on a more polished result. We changed our entire development process so we could have a streamlined workflow and tighter communication between ourselves and the client with great results.</p>
<p>We have some pretty cool projects in the pipeline for 2010 utilizing Drupal and hope to have some things to show off in the next few months. iPhones, region-free real estate integration, content distribution, big boy stuff. Lookout.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/web-applications/choose-drupal-not-proprietary.htm/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Module Compatibility Issue(s) with Drupal Installation Profiles</title>
		<link>http://www.delawarewebdesigner.com/web-applications/make-a-drupal-module-compatible-with-install-profiles.htm</link>
		<comments>http://www.delawarewebdesigner.com/web-applications/make-a-drupal-module-compatible-with-install-profiles.htm#comments</comments>
		<pubDate>Mon, 30 Nov 2009 21:39:18 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Custom Website Design]]></category>
		<category><![CDATA[Delaware Website Design]]></category>
		<category><![CDATA[Drupal Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[drupal modules]]></category>
		<category><![CDATA[bug in drupal module?]]></category>
		<category><![CDATA[drupal install profile]]></category>
		<category><![CDATA[drupal install profile help]]></category>
		<category><![CDATA[drupal install profiles]]></category>
		<category><![CDATA[drupal installation profile]]></category>
		<category><![CDATA[program a drupal module]]></category>
		<category><![CDATA[write a drupal module]]></category>
		<category><![CDATA[writing install profile for drupal]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/?p=404</guid>
		<description><![CDATA[Drupal ships with a powerful method of packaging and redistributing your platform configuration called Install Profiles. It is similar to how Linux distro&#8217;s work, where you have the same core operating system, but extensive customization results in a different experience (Fedora, Ubuntu, Debian, etc). This allows us to employ rapid application development (RAD) after finalizing [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.drupal.org" target="_blank">Drupal</a> ships with a powerful method of packaging and redistributing your platform configuration called Install Profiles. It is similar to how Linux distro&#8217;s work, where you have the same core operating system, but extensive customization results in a different experience (Fedora, Ubuntu, Debian, etc). This allows us to employ rapid application development (RAD) after finalizing a build of a customized <a href="http://www.drupal.org" target="_blank">Drupal application</a>.</p>
<p>There are some &#8216;gotchas&#8217; though if you develop custom <a href="http://www.drupal.org" target="_blank">Drupal</a> modules like we do. During the install process, <a href="http://www.drupal.org" target="_blank">Drupal</a> only bootstraps the bare minimum to get the job done. I&#8217;ve noticed that if a module&#8217;s install routine calls functions outside of the .install file, the expected result tends to fail because files other than .install are not included during this loading process. It seems there is a special case for the file to be included, or you have to specify in your install profile to explicitly include the file (which takes a lot of time to do). To be specific, I have seen this happen with <a href="http://www.drupal.org/project/boost" target="_blank">Drupal Boost</a>, <a href="http://www.drupal.org/project/gallery_assist" target="_blank">Drupal Gallery Assist</a>, and our custom module <a href="http://www.delawarewebdesigner.com/web-applications/billboard-management-now-available.htm">Billboard</a>, which tipped me off to this problem. The issue has since been fixed in <a href="http://www.drupal.org/project/boost" target="_blank">Boost</a> (and <a href="http://www.delawarewebdesigner.com/web-applications/billboard-management-now-available.htm">Billboard</a>).</p>
<p>For us, the issue was creating custom <a href="http://www.drupal.org/project/imagecache" target="_blank">ImageCache</a> presets during a module&#8217;s install routine. This worked perfectly if you were going to the <a href="http://www.drupal.org" target="_blank">Drupal</a> Modules page and enabling <a href="http://www.delawarewebdesigner.com/web-applications/billboard-management-now-available.htm">Billboard</a>. What happens was the hook_install() function fired, included a definition file, and created presets based on that file. This fails during a <a href="http://www.drupal.org" target="_blank">Drupal</a> install profile, where you use a script to install and configure <a href="http://www.drupal.org" target="_blank">Drupal</a> automatically. This same issue occurs in <a href="http://www.drupal.org/project/gallery_assist" target="_blank">Gallery Assist</a>, and here is how I got around it:</p>
<p>It was pretty apparent that the code needed to come out of the install function. However, I needed to be sure that where I put the code would be compatible to the module loading process, and I&#8217;d need to be sure <a href="http://www.drupal.org/project/imagecache" target="_blank">ImageCache</a> was both installed and loaded before running the following code. Otherwise it would error out, and no <a href="http://www.drupal.org/project/imagecache" target="_blank">ImageCache</a> presets would be created.</p>
<p><a href="http://www.drupal.org" target="_blank">Drupal</a> has a crucial hook for modules. hook_init() allows you to perform tasks every time the module is loaded. In this case, I wanted to tell it to run a function and check for two default <a href="http://www.drupal.org/project/imagecache" target="_blank">ImageCache</a> presets. If they didn&#8217;t exist, create them. This approach solves three issues:</p>
<ol>
<li>Getting around install profile limitations</li>
<li>Provide default <a href="http://www.drupal.org/project/imagecache" target="_blank">ImageCache</a> presets for Billboard module when it is enabled</li>
<li>Recreate the <a href="http://www.drupal.org/project/imagecache" target="_blank">ImageCache</a> presets if they are accidentally deleted by the user (or developer <img src='http://www.delawarewebdesigner.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</li>
</ol>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> mymodule_init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    mymodule_create_default_imagecache_presets<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> mymodule_create_default_imagecache_presets<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000088;">$default_size</span> <span style="color: #339933;">=</span> imagecache_preset_by_name<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mymodule-default'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$thumb_size</span> <span style="color: #339933;">=</span> imagecache_preset_by_name<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mymodule-thumb'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$default_size</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$thumb_size</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$default_size</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
            <span style="color: #000088;">$mymodule_default_size</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;600&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$mymodule_thumbnail_size</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;80&quot;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000088;">$presets</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// Default size.</span>
            <span style="color: #000088;">$presets</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
            <span style="color: #0000ff;">'presetname'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'mymodule-default'</span><span style="color: #339933;">,</span>
            <span style="color: #0000ff;">'actions'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
&nbsp;
                  <span style="color: #0000ff;">'weight'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'0'</span><span style="color: #339933;">,</span>
                  <span style="color: #0000ff;">'module'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'mymodule'</span><span style="color: #339933;">,</span>
                  <span style="color: #0000ff;">'action'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'imagecache_scale'</span><span style="color: #339933;">,</span>
                  <span style="color: #0000ff;">'data'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
                    <span style="color: #0000ff;">'width'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$mymodule_default_size</span><span style="color: #339933;">,</span>
                    <span style="color: #0000ff;">'height'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span>
                    <span style="color: #0000ff;">'upscale'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
                  <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
&nbsp;
              <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            imagecache_preset_save<span style="color: #009900;">&#40;</span><span style="color: #000088;">$presets</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$presets</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'actions'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'presetid'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> db_last_insert_id<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'imagecache_preset'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'presetid'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            imagecache_action_save<span style="color: #009900;">&#40;</span><span style="color: #000088;">$presets</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'actions'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            imagecache_preset_flush<span style="color: #009900;">&#40;</span><span style="color: #000088;">$presets</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'default'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            imagecache_presets<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$default_size</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
            <span style="color: #000088;">$presets</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'thumb'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
            <span style="color: #0000ff;">'presetname'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'mymodule-thumb'</span><span style="color: #339933;">,</span>
            <span style="color: #0000ff;">'actions'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
&nbsp;
                  <span style="color: #0000ff;">'weight'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'0'</span><span style="color: #339933;">,</span>
                  <span style="color: #0000ff;">'module'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'mymodule'</span><span style="color: #339933;">,</span>
                  <span style="color: #0000ff;">'action'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'imagecache_resize'</span><span style="color: #339933;">,</span>
                  <span style="color: #0000ff;">'data'</span> <span style="color: #339933;">=&gt;</span> 
                    <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
                      <span style="color: #0000ff;">'width'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$mymodule_thumbnail_size</span><span style="color: #339933;">,</span>
                      <span style="color: #0000ff;">'height'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$mymodule_thumbnail_size</span><span style="color: #339933;">,</span>
                      <span style="color: #0000ff;">'upscale'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
                  <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
&nbsp;
              <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
            <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            imagecache_preset_save<span style="color: #009900;">&#40;</span><span style="color: #000088;">$presets</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'thumb'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$presets</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'thumb'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'actions'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'presetid'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> db_last_insert_id<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'imagecache_preset'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'presetid'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            imagecache_action_save<span style="color: #009900;">&#40;</span><span style="color: #000088;">$presets</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'thumb'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'actions'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            imagecache_preset_flush<span style="color: #009900;">&#40;</span><span style="color: #000088;">$presets</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'thumb'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            imagecache_presets<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>What that says basically is &#8216;hey, do our default <a href="http://www.drupal.org/project/imagecache" target="_blank">ImageCache</a> presets exist?&#8217; if not, it will create them at runtime.</p>
<p>I have tested this a handful of times with positive results, and, it works with install profiles since hook_init() is called after <a href="http://www.drupal.org" target="_blank">Drupal</a> loads. Food for thought for all you <a href="http://www.drupal.org" target="_blank">Drupal</a> developers out there. If there is a better way to achieve this feel free to leave a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/web-applications/make-a-drupal-module-compatible-with-install-profiles.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Whitehouse.gov re-launches on Drupal</title>
		<link>http://www.delawarewebdesigner.com/blurbs/whitehouse-gov-re-launches-on-drupal.htm</link>
		<comments>http://www.delawarewebdesigner.com/blurbs/whitehouse-gov-re-launches-on-drupal.htm#comments</comments>
		<pubDate>Thu, 19 Nov 2009 14:51:55 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Blurbs]]></category>
		<category><![CDATA[Delaware Web Design]]></category>
		<category><![CDATA[Delaware Web Designer]]></category>
		<category><![CDATA[Delaware Web Developer]]></category>
		<category><![CDATA[Delaware Web Development]]></category>
		<category><![CDATA[Drupal Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Search Engine Optimization]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Showcase]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[drupal modules]]></category>
		<category><![CDATA[drupal cms]]></category>
		<category><![CDATA[drupal is the best cms]]></category>
		<category><![CDATA[government using drupal]]></category>
		<category><![CDATA[whitehouse launched on drupal]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/?p=396</guid>
		<description><![CDATA[Well ain&#8217;t that cool. Drupal CMS was chosen to be the base of which the new whitehouse.gov was relaunched on.
Earlier this month, the Executive Office of the President of the United States of America relaunched their website, Whitehouse.gov, using Drupal. This week three members of the White House new media team presented at the Washington, [...]]]></description>
			<content:encoded><![CDATA[<p>Well ain&#8217;t that cool. Drupal CMS was chosen to be the base of which the new <a href="http://www.whitehouse.gov" target="_blank">whitehouse.gov</a> was relaunched on.</p>
<blockquote><p><em>Earlier this month, the Executive Office of the President of the United States of America relaunched their website, Whitehouse.gov, using Drupal. This week three members of the White House new media team presented at the Washington, DC Drupal users group. New media director Macon Phillips, deputy director of technology David Cole, and creative director Nik Lo Bue talked about their use of Drupal.</em></p></blockquote>
<p>Watch the screencast here: <a href="http://vimeo.com/7669508" target="_blank">http://vimeo.com/7669508</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/blurbs/whitehouse-gov-re-launches-on-drupal.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drupal Wins Best Open Source CMS for 2009</title>
		<link>http://www.delawarewebdesigner.com/web-applications/drupal-wins-best-open-source-cms-for-2009.htm</link>
		<comments>http://www.delawarewebdesigner.com/web-applications/drupal-wins-best-open-source-cms-for-2009.htm#comments</comments>
		<pubDate>Wed, 11 Nov 2009 22:17:53 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Custom Website Design]]></category>
		<category><![CDATA[Delaware Web Design]]></category>
		<category><![CDATA[Delaware Web Designer]]></category>
		<category><![CDATA[Delaware Web Developer]]></category>
		<category><![CDATA[Delaware Web Development]]></category>
		<category><![CDATA[Drupal Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Showcase]]></category>
		<category><![CDATA[Ubercart Development]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[Web Standards]]></category>
		<category><![CDATA[drupal modules]]></category>
		<category><![CDATA[drupal awarded best cms]]></category>
		<category><![CDATA[drupal best cms]]></category>
		<category><![CDATA[drupal best open source cms]]></category>
		<category><![CDATA[drupal custom development]]></category>
		<category><![CDATA[drupal integration]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/?p=370</guid>
		<description><![CDATA[Drupal has won best open source PHP Content Management System for the second year in a row in the Packt Publishing 2009 Open Source CMS Awards. Drupal won by popular vote and a critical selection by a panel of judges. This award reflects the strong support of the Drupal community and the Drupal associations focus [...]]]></description>
			<content:encoded><![CDATA[<p>Drupal has won <strong>best open source PHP Content Management System</strong> for the <strong>second year in a row</strong> in the Packt Publishing 2009 Open Source CMS Awards. Drupal won by popular vote and a critical selection by a panel of judges. This award reflects the strong support of the Drupal community and the Drupal associations focus on quality which leads to critical acclaim and rapid adoption for large, high quality projects. Drupal won <strong>best overall open source CMS</strong> in 2007 and 2008.</p>
<p>From the <a href="http://www.packtpub.com/award" target="_blank">award announcement</a>,</p>
<p><em>We are pleased to announce that Drupal has won the Best Open Source PHP CMS Category in the 2009 Open Source CMS Award. This category featured a very close contest between the top three, Drupal, WordPress, and Joomla! in which Drupal ended up as the overall choice for the judges and the public.</em></p>
<p>This is the highest award that Drupal was eligible for in 2009. Drupal previously won for <strong>Best Overall CMS in 2007 and 2008</strong> has been placed in the Hall of Fame. The winners of the Hall of Fame Drupal awards for best Drupal theme and best Drupal contributed module will be awarded Thursday, November 12th, 2009. The themes and modules nominated were selected both for the most used and for a diverse set of nominees.</p>
<p>We use Drupal exclusively for building customized, scalable high end web applications. It&#8217;s no surprise developers, designers and users keep voting Drupal as Best CMS for years in a row. There is nothing you cannot do with Drupal. Being a CMF (content management framework), it is not pigeonholed into any one particular niche like Wordpress (strictly blogging applications).</p>
<p>What has <a href="http://www.inclind.com" target="_blank">Inclind</a> done with Drupal?</p>
<ul>
<li>Integration with Microsoft Dynamics SOP System into Ubercart for product importing and inventory management</li>
<li>Integration with Ubercart and Drupal into UPS Worldship for rock solid quoting</li>
<li>Integration with UPS Worldship for automatic label printing for commerce orders</li>
<li>Integration with Amazon S3 services for synced failsafe CDN (Content Distribution Network) support</li>
<li>Integration with Windows LDAP Protocol support</li>
<li>Integration with Invision Power Board Forum for external authentication of users through Drupal</li>
<li>Integrated Ubercart as a management application of customers with interval based shipping orders (drop shipment / bulk ordering)</li>
<li>Built routing algorithms to track and route best delivery methods for truck drivers on to Google Maps</li>
<li>Built over 100 custom modules to meet the needs of individual clients</li>
<li>&#8230; with more to come</li>
</ul>
<p>Who else uses Drupal? Check it out!</p>
<ul>
<li>AOL</li>
<li>The White House</li>
<li>Yahoo</li>
<li>IBM</li>
<li>Bob Dylan</li>
<li>The Onion</li>
<li>CNN</li>
<li>Metallica</li>
<li>United Nations</li>
<li>jQuery</li>
<li>Sony BMG</li>
<li>Michael Jackson</li>
<li>Ozzy Osbourne</li>
<li>EA Games</li>
<li>Star Trek Online</li>
<li>Mastodon</li>
<li>Warner Bros</li>
<li>CKY</li>
<li>MTV</li>
<li>MTV2</li>
<li>SpreadFirefox</li>
<li>SpreadThunderbird</li>
<li>Computer World</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/web-applications/drupal-wins-best-open-source-cms-for-2009.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Carver City Album Art</title>
		<link>http://www.delawarewebdesigner.com/music/carver-city-album-art.htm</link>
		<comments>http://www.delawarewebdesigner.com/music/carver-city-album-art.htm#comments</comments>
		<pubDate>Mon, 02 Mar 2009 03:39:18 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Music]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Showcase]]></category>
		<category><![CDATA[iPhone / iPod Touch]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/music/carver-city-album-art.htm</guid>
		<description><![CDATA[This Tuesday, March 3rd, CKY will be unveiling the artwork for their upcoming album, “Carver City”, set to release May 19th 2009. The art was done by Travis Smith, who did a fantastic job on it. I already have it as my phone wallpaper and have requested a higher resolution image so it can be [...]]]></description>
			<content:encoded><![CDATA[<p>This Tuesday, March 3rd, CKY will be unveiling the artwork for their upcoming album, “Carver City”, set to release May 19th 2009. The art was done by Travis Smith, who did a fantastic job on it. I already have it as my phone wallpaper and have requested a higher resolution image so it can be printed and framed.I will be posting it to inclind.com, ckyalliance.com and it will probably fall on MTV2 and Fuse somewhere for sure.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/music/carver-city-album-art.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DJ Hook Website Launches</title>
		<link>http://www.delawarewebdesigner.com/web-applications/dj-hook-website-launches.htm</link>
		<comments>http://www.delawarewebdesigner.com/web-applications/dj-hook-website-launches.htm#comments</comments>
		<pubDate>Thu, 04 Sep 2008 14:28:49 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Blog Design]]></category>
		<category><![CDATA[Blog Hosting]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Custom Website Design]]></category>
		<category><![CDATA[Delaware Website Design]]></category>
		<category><![CDATA[Graphic Design]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Showcase]]></category>
		<category><![CDATA[Teamwork]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/web-applications/dj-hook-website-launches.htm</guid>
		<description><![CDATA[
Regional web development company Inclind Inc announces the launch of a brand new website this week for DJ Hook of Hook Productions of Bethany Beach, Delaware.Randy Vanderhook (DJ Hook) grew up with an ear for music. He joined the school band in elementary school on drums and continued with them on up through high school [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto" align="center"><a href="http://www.hookproductions.net/" title="hook.jpg"><img src="http://www.delawarewebdesigner.com/wp-content/hook.jpg" alt="hook.jpg" style="border-width: 1px; border-color: #eeeeee; border-style: solid; padding: 3px" /></a></p>
<p>Regional web development company <a href="http://www.inclind.com" target="_blank">Inclind Inc</a> announces the launch of a brand new website this week for <a href="http://www.hookproductions.net" target="_blank">DJ Hook</a> of <a href="http://www.hookproductions.net" target="_blank">Hook Productions</a> of Bethany Beach, Delaware.Randy Vanderhook (<a href="http://www.hookproductions.net" target="_blank">DJ Hook</a>) grew up with an ear for music. He joined the school band in elementary school on drums and continued with them on up through high school marching band for Indian River High School. When he had a chance to guest DJ he jumped at the opportunity and has enjoyed every minute of it since then, and <a href="http://www.hookproductions.net" target="_blank">Hook Productions</a> was born.
<p>With a huge library of thousands and thousands of songs (over 60,000!), <a href="http://www.hookproductions.net" target="_blank">DJ Hook</a> prides himself on being one of the best DJ’s on Delmarva. Most DJ’s quit learning after figuring out how to hook up their system to a PA (public address speaker system) and still carry around bags and bags of CDs and large heavy rack based rigs. <a href="http://www.hookproductions.net" target="_blank">DJ Hook</a> is constantly researching new techniques and using the most cutting edge hardware available, such as a computer based setup with a digital catalogue (making his setup far more compact and smaller than competitors).</p>
<p><a href="http://www.hookproductions.net" target="_blank">DJ Hook</a> has played numerous places in the Newark, DE area including Klondike Kate’s, Kid Shellie’s and East End. He has also performed at many popular hang outs in the beach area including Harpoon Hanna&#8217;s, the Chalkboard, Mackey&#8217;s, Fagers Island, High Stakes, Mickey’s Family Crab House, Brew River, Magnolia&#8217;s, Lifeguard competitions and many other private events such as weddings, anniversaries, birthday parties, corporate events and much more.Their new website (<a href="http://www.hookproductions.net" target="_blank">www.hookproductions.net</a>) running on Inclind’s content management system allows <a href="http://www.hookproductions.net" target="_blank">Hook Productions</a> to easily update the public on availability with their event calendar and lay out the booking process in detail. The calendar also shows public appearances <a href="http://www.hookproductions.net" target="_blank">DJ Hook</a> makes, so you can attend events he will be DJ’ing at like Harpoon Hanna’s famous deck parties in the summer.</p>
<p>To learn more about how <a href="http://www.hookproductions.net" target="_blank">DJ Hook</a> can cater your next event, please visit their website at www.hookproductions.net or call (302)-757-HOOK (4665). For more information on custom website development, please contact <a href="http://www.inclind.com" target="_blank">Inclind Inc</a>. at (302) 856-2802 or online at <a href="http://www.inclind.com" target="_blank">www.inclind.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/web-applications/dj-hook-website-launches.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dolly Parton&#8217;s Imagination Library Website Launches</title>
		<link>http://www.delawarewebdesigner.com/tech-stuff/dolly-partons-imagination-library-website-launches.htm</link>
		<comments>http://www.delawarewebdesigner.com/tech-stuff/dolly-partons-imagination-library-website-launches.htm#comments</comments>
		<pubDate>Tue, 02 Sep 2008 15:01:31 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Coldfusion Development]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Custom Website Design]]></category>
		<category><![CDATA[Delaware Web Design]]></category>
		<category><![CDATA[Delaware Website Design]]></category>
		<category><![CDATA[Graphic Design]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Search Engine Optimization]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Tech Stuff]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/tech-stuff/dolly-partons-imagination-library-website-launches.htm</guid>
		<description><![CDATA[
Inclind Inc has launched Dolly Parton&#8217;s Imagination Library website. Utilizing our powerful content management system (CMS) publishing platform, managing their website is quick and painless and allows them to get their important message out. Their objective is to supply a book a month to children aged 12 months to 5 years to promote literacy at [...]]]></description>
			<content:encoded><![CDATA[<p style="margin: 5px auto" align="center"><a href="http://www.imaginationlibraryde.org/" rel="attachment" title="dolly.jpg" border="none" target="_blank"><img src="http://www.delawarewebdesigner.com/wp-content/dolly.jpg" alt="dolly.jpg" style="border: 1px solid #eeeeee; padding: 3px" border="0" /></a></p>
<p>Inclind Inc has launched <a href="http://www.imaginationlibraryde.org/" target="_blank">Dolly Parton&#8217;s Imagination Library</a> website. Utilizing our powerful content management system (CMS) publishing platform, managing their website is quick and painless and allows them to get their important message out. Their objective is to supply a book a month to children aged 12 months to 5 years to promote literacy at a crucial time in the development of young minds. Opportunity and education are cornerstones of our country and its great that foundations like this exist to help future generations get a head start.</p>
<h3>How Dolly Parton&#8217;s Imagination Library Started</h3>
<p>Dolly Parton started this program in 1996 in her home county of Sevier, Tennessee, as a way to give back to her community and to promote literacy. She personally paid for each newborn child to receive a new board book, “The Little Engine that Could” by Watty Piper. Those children were also sent one new hard back book each month until they were five years old. On their fifth birthday, they received their last book, “Look Out, Kindergarten, Here I Come” a diploma, and a personal letter from Dolly for completing the program.</p>
<h3>Here&#8217;s How it Works</h3>
<p>A community must make the program accessible to all preschool children in their area. The community pays for the books and mailing, promotes the program, registers the children, and enters the information into the database. From there The Dollywood Foundation takes over and manages the system to deliver the books to the home.</p>
<p>Since 2001, the Dollywood Foundation has helped individual communities provide millions of books to children across America. The Imagination Library now provides books to children in over 700 communities, nearly all 50 states and two other countries including Canada and the UK.</p>
<h3>About the Books</h3>
<p>Penguin Group USA is the exclusive supplier of all of the books for the program. The free books are carefully selected to help develop a child&#8217;s literacy and vocabulary skills through age appropriate, developmental reading materials. There is a national committee of individuals who meet each year to review the Library. The committee is composed of representatives from Parents as Teachers National Center, the International Reading Association, the University of Tennessee, Rutgers University, and the teaching profession. New titles are introduced each year so younger siblings will not receive the exact same books as their older siblings.</p>
<p><a href="http://www.imaginationlibraryde.org/" target="_blank">Visit Dolly Parton&#8217;s Imagination Library Website »</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/tech-stuff/dolly-partons-imagination-library-website-launches.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Should You Use Gmail (Google Mail)?</title>
		<link>http://www.delawarewebdesigner.com/how-tos/why-should-you-use-gmail-google-mail.htm</link>
		<comments>http://www.delawarewebdesigner.com/how-tos/why-should-you-use-gmail-google-mail.htm#comments</comments>
		<pubDate>Tue, 19 Aug 2008 01:11:07 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[How To's]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Search Engine Optimization]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Applications]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/how-tos/why-should-you-use-gmail-google-mail.htm</guid>
		<description><![CDATA[I&#8217;ve been using Google Mail since around 2004 when it was invite-only. After the first few emails, I was hooked. I killed my existing Hotmail, Yahoo! and other random accounts laying around. They simply provided few features, and demanded money for features that are basically standard in any mail client like Outlook. I email pretty [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using Google Mail since around 2004 when it was invite-only. After the first few emails, I was hooked. I killed my existing Hotmail, Yahoo! and other random accounts laying around. They simply provided few features, and demanded money for features that are basically standard in any mail client like Outlook. I email pretty frequently, so it is important that I have a feature rich service available to me anytime, anywhere.</p>
<p>So why Gmail? For starters, its really simple to import existing contacts into your system from your other accounts. Gmail also supports POP3 and IMAP- <strong>for free</strong>. This means that you can use any email client like Mozilla Thunderbird (also free) from any desktop and connect to your email. Last time I checked, Hotmail and Yahoo! both charged an annual fee to do this which is ridiculous. It isolates customers who don&#8217;t want to be tied to a web interface all the time. My storage cap at that time was like 250 MB, a ridiculously small amount. So it was no contest to switch to Gmail, who offer 6 GB to 8 GB per account, almost enough to last a lifetime (I have 7000 email conversations in my inbox).</p>
<p>Included with Gmail is Google Docs, Google&#8217;s online alternative to Microsoft Office. It is a lightweight application for basic word processing or spreadsheet creation. You can also share access with other Gmail clients (coworkers, friends, employees) by putting in their email address into the access list. They can then access the files and make revisions without ever having to connect to a server or downloading / uploading files, its all done from the web interface. And if that isn&#8217;t enough, Google Talk is embedded into the mailbox sections loaded with your contact list. If they also use Gmail, you can IM directly through Gmail instantly through the power of <a href="http://en.wikipedia.org/wiki/AJAX" target="_blank">AJAX</a>.</p>
<p>For those that are tech savvy like me and own an iPhone or iPod Touch, Gmail is supported fully either through Safari or the device&#8217;s Mail application- which to me is even more addictive than the Blackberry (Crackberry).</p>
<p>All of these reasons alone are enough to cut ties with other email services and sign up with Google. If that wasn&#8217;t enough, check out this article detailing <strong><a href="http://justcreativedesign.com/2008/08/18/what-is-the-best-free-email-account-googles-gmail/" target="_blank">10 Reasons To Switch To Gmail</a>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/how-tos/why-should-you-use-gmail-google-mail.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
