<?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>Gregory Grubbs &#187; php</title>
	<atom:link href="http://gregorygrubbs.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://gregorygrubbs.com</link>
	<description>Attention in software development</description>
	<lastBuildDate>Thu, 03 Mar 2011 18:13:03 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Snippets with Emacs Lisp Power</title>
		<link>http://gregorygrubbs.com/wordpress/snippets-with-emacs-lisp-power/</link>
		<comments>http://gregorygrubbs.com/wordpress/snippets-with-emacs-lisp-power/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 06:00:51 +0000</pubDate>
		<dc:creator>Gregory Grubbs</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[E Text Editor]]></category>
		<category><![CDATA[Emacs Lisp]]></category>
		<category><![CDATA[Functional languages]]></category>
		<category><![CDATA[Lisp]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[TextMate]]></category>
		<category><![CDATA[yasnippet]]></category>

		<guid isPermaLink="false">http://gregorygrubbs.com/?p=415</guid>
		<description><![CDATA[ 
The YASnippet package for Emacs has some pretty awesome power for the developer, especially when you utilize the power of Emacs Lisp.  

YASnippet was inspired by TextMate, which was inspired by Emacs, in a highly-out-of-equilibrium whirlwind of self-referential creativity.  
The screencast above uses a set of snippets I originally took from this [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/26405526@N00/2188203168" title="As RAW as Winter"><img src="http://farm3.static.flickr.com/2165/2188203168_86a4d818f4.jpg" /></a> </p>
<p>The YASnippet package for Emacs has some pretty awesome power for the developer, especially when you utilize the power of Emacs Lisp.  </p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/HPT7pm8ot8M&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/HPT7pm8ot8M&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>YASnippet was inspired by TextMate, which was inspired by Emacs, in a highly-out-of-equilibrium whirlwind of self-referential creativity.  </p>
<p>The screencast above uses a set of snippets I originally took from <a href="http://top-frog.com/projects/wordpress-textmate-bundle/">this WordPress TextMate bundle</a>, created by Shawn Parker and Gordon Brander</p>
<p>The first snippet in the screencast illustrates YASnippet&#8217;s mirrors with transformation, in a WordPress plugin template.  The snippet calls Emacs Lisp functions as the plugin name is filled in to create the plugin URI, the &#8220;namespace&#8221; (used here as a prefix for function and variable names), and the primary class name for the plugin. </p>
<p>The second snippet writes a function skeleton, then calls Emacs Lisp at the end to move the generated function outside the current scope into a correct position in the file.  This snippet uses YASnippet&#8217;s fields with transformations syntax, but to do a sneaky thing: not transform the field, but move a region of generated text!</p>
<p>Following is the code for the snippets shown in the screencast, with no commentary.  So pipe up in the comments if you&#8217;re curious about how something works!</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># -*- mode: snippet -*-
</span><span style="color: #666666; font-style: italic;"># name: WP Plugin
</span><span style="color: #666666; font-style: italic;"># key: plugin
</span><span style="color: #666666; font-style: italic;"># --
</span><span style="color: #666666; font-style: italic;">/*
Plugin Name: ${1:Plugin Name}
Plugin URI: http://${2:dynapse.com/plugins/}${1:$(gjg/sanitize text)}/
Description: ${3:Description}
Version: ${4:1.0}
Author: ${5:Gregory Grubbs}
Author URI: http://${6:gregorygrubbs.com/}
Namespace: ${1:$(gjg/acronyminize text)}_
*/</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> $<span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span>$<span style="color: #009900;">&#40;</span>gjg<span style="color: #339933;">/</span>whitespace<span style="color: #339933;">-</span>to<span style="color: #339933;">-</span>underscore text<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #009933; font-style: italic;">/**
	 * constructor for $1
	 *
	 * The constructor is responsible for registering all hooks used
	 * by this class as as WordPress plugin
	 */</span>
	<span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		 $<span style="color: #cc66cc;">0</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// constructor</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
$$<span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span>$<span style="color: #009900;">&#40;</span>gjg<span style="color: #339933;">/</span>acronyminize text<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> $<span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span>$<span style="color: #009900;">&#40;</span>gjg<span style="color: #339933;">/</span>whitespace<span style="color: #339933;">-</span>to<span style="color: #339933;">-</span>underscore text<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Next, the add_action snippet, which moves a generated function at the end:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># -*- mode: snippet -*-
</span><span style="color: #666666; font-style: italic;"># name: add_action
</span><span style="color: #666666; font-style: italic;"># key: add_action
</span><span style="color: #666666; font-style: italic;"># --
</span>add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'${1:init}'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'my_${2:$1}'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
$<span style="color: #009900;">&#123;</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">:</span>$$<span style="color: #009900;">&#40;</span>gjg<span style="color: #339933;">/</span>move<span style="color: #339933;">-</span>next<span style="color: #339933;">-</span>sexp<span style="color: #339933;">-</span>past<span style="color: #339933;">-</span>current<span style="color: #339933;">-</span>scope<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">function</span> my_$<span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>And finally, (some of) the Emacs Lisp functions that the snippets call:</p>

<div class="wp_syntax"><div class="code"><pre class="lisp" style="font-family:monospace;"><span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> gjg/acronyminize <span style="color: #66cc66;">&#40;</span>text <span style="color: #66cc66;">&amp;</span>optional do-capitalize<span style="color: #66cc66;">&#41;</span>
  <span style="color: #ff0000;">&quot;Make an acronym from the text 
do-capitalize: t means run text through capitalize function, nil will respect CamelCase
&quot;</span>
  <span style="color: #66cc66;">&#40;</span>save-excursion
    <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">setq</span> case-fold-search <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>downcase
     <span style="color: #66cc66;">&#40;</span>replace-regexp-in-string
      <span style="color: #ff0000;">&quot;[^A-Z]&quot;</span> <span style="color: #ff0000;">&quot;&quot;</span>
      <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">if</span> do-capitalize <span style="color: #66cc66;">&#40;</span>capitalize text<span style="color: #66cc66;">&#41;</span> text<span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">nil</span> t<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">defun</span> gjg/move-next-sexp-past-current-scope <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #ff0000;">&quot;kill sexp following point, move past current scope/sexp/function&quot;</span>
  <span style="color: #66cc66;">&#40;</span>beginning-of-line<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span><span style="color: #b1b100;">let</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>beg <span style="color: #66cc66;">&#40;</span>point<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>re-search-forward <span style="color: #ff0000;">&quot;^[ <span style="color: #000099; font-weight: bold;">\t</span>]*function[ <span style="color: #000099; font-weight: bold;">\t</span>]+[^}]+?}&quot;</span> <span style="color: #66cc66;">&#40;</span>point-<span style="color: #b1b100;">max</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">nil</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#40;</span>mark-<span style="color: #b1b100;">defun</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#40;</span>kill-region <span style="color: #66cc66;">&#40;</span>point<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>mark<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>forward-line<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>yank<span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#40;</span>indent-region <span style="color: #66cc66;">&#40;</span>mark<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#40;</span>point<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://gregorygrubbs.com/wordpress/snippets-with-emacs-lisp-power/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to get your command line PHP script working with WordPress-MU 2.7</title>
		<link>http://gregorygrubbs.com/wordpress/how-to-get-your-command-line-php-script-working-with-wordpress-mu-27/</link>
		<comments>http://gregorygrubbs.com/wordpress/how-to-get-your-command-line-php-script-working-with-wordpress-mu-27/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 16:47:23 +0000</pubDate>
		<dc:creator>Gregory Grubbs</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wordpress-mu]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web server]]></category>
		<category><![CDATA[wpmu]]></category>

		<guid isPermaLink="false">http://gregorygrubbs.com/?p=160</guid>
		<description><![CDATA[
	OK, this one is obscure. I only post about what I can&#8217;t find on Google!
Until recently it has been possible to run command-line PHP scripts that include wp-config.php or wpmu-settings.php, in order to give those scripts access to WordPress globals like $wpdb, functions such as wp_insert_post etc.  
These scripts worked with WordPress-MU until recently [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/86639396@N00/125838823" title="To the moon, Ajax!"><img src="http://farm1.static.flickr.com/48/125838823_e1a4d43a62_m.jpg" /></a></p>
<p>	OK, this one is obscure. I only post about what I can&#8217;t find on Google!</p>
<p>Until recently it has been possible to run command-line PHP scripts that include wp-config.php or wpmu-settings.php, in order to give those scripts access to WordPress globals like $wpdb, functions such as wp_insert_post etc.  </p>
<p>These scripts worked with WordPress-MU until recently &#8212; now the scripts just exit with no output.  </p>
<p>The reason?  WPMU now initiates a redirect in the bootstrap process (search for &#8216;header( &#8220;Location: &#8220;&#8216;  in wpmu-settings.php).  A browser can follow that redirection, but a command line script cannot.  So, if you want to initiate scripts that run from the command line, you will have to get the web server involved by invoking a text browser such as curl, wget, or links.  </p>
<p>It&#8217;s best not to force your scripts to figure out where to find wp-config.php anyway.  I have taken to using a method suggested in <a href="http://wordpress.org/support/topic/190522">this thread</a>, as shown in the code sample below.  The good news is, you know that your script will work the same whether initiated from a plugin in a graphic browser, used in an Ajax call, or initiated from cron or the command line shell.</p>
<p>So instead of kicking your script off with something like</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php <span style="color: #660033;">-q</span> myscript.php</pre></div></div>

<p>You will create the script as a proper plugin and do something like</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>curl <span style="color: #660033;">-d</span> <span style="color: #007800;">mypp_cmd</span>=status http:<span style="color: #000000; font-weight: bold;">//</span>mywpmusite.com</pre></div></div>

<p>Sample plugin code used for the above example follows.  The prefix for the functions is &#8216;mypp&#8217;, which of course stands for &#8216;MY Plugin Prefix&#8217; to create a unique namespace.  The code below returns results as JSON encoded, and calls die()/exit() at the end to prevent an entire page being created.  For log files run from cron, you may choose to return plain text instead.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">  <span style="color: #009933; font-style: italic;">/**
   * Add a query var for this plugin
   * This allows Ajax programs to operate without requiring file paths
   * Instead, Ajax functions look for the query var 'mypp_cmd'
   */</span>
  <span style="color: #000000; font-weight: bold;">function</span> mypp_query_vars<span style="color: #009900;">&#40;</span><span style="color: #000088;">$qvars</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$qvars</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'mypp_cmd'</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$qvars</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// function mypp_query_vars</span>
&nbsp;
  <span style="color: #009933; font-style: italic;">/**
   * Handle AJAX requests in the template_redirect action
   * We recognize our requests from the query var 'mypp_cmd'
   * Here we allow GET requests using $_REQUEST; to restrict to POST, use $_POST instead
   */</span>
  <span style="color: #000000; font-weight: bold;">function</span> mypp_template_redirect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$cmd</span> <span style="color: #339933;">=</span> get_query_var<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mypp_cmd'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$response</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>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$cmd</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cmd</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'status'</span><span style="color: #339933;">:</span>
	<span style="color: #000088;">$response</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'status'</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;">'success'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
				    <span style="color: #0000ff;">'message'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Sample status message'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
	<span style="color: #000088;">$response</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'status'</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;">'success'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
				    <span style="color: #0000ff;">'msg'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Unknown command'</span><span style="color: #339933;">,</span>
				    <span style="color: #0000ff;">'cmd'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$cmd</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// switch $cmd</span>
      <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-type: text/x-json; charset=utf-8'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">print</span> <span style="color: #990000;">utf8_encode</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">json_encode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$response</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// $cmd is set</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// function mypp_template_redirect</span>
&nbsp;
add_filter<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'query_vars'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mypp_query_vars'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template_redirect'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mypp_template_redirect'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://gregorygrubbs.com/wordpress/how-to-get-your-command-line-php-script-working-with-wordpress-mu-27/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to give all new WPMU blogs default properties, theme and pages</title>
		<link>http://gregorygrubbs.com/wordpress/how-to-give-wpmu-blogs-default-properties-theme-and-pages/</link>
		<comments>http://gregorygrubbs.com/wordpress/how-to-give-wpmu-blogs-default-properties-theme-and-pages/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 19:22:54 +0000</pubDate>
		<dc:creator>Gregory Grubbs</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wpmu]]></category>

		<guid isPermaLink="false">http://gregorygrubbs.com/?p=63</guid>
		<description><![CDATA[I&#8217;ve been developing an application on Wordpress-MU and thought I&#8217;d share a cool tip.
When new web sites are generated by my client, I wanted the experience to be painless; a one-button ready-to-go web site.
It turns out there is an action hook (of course there is!) when a new blog is created.  So let&#8217;s get down [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been developing an application on Wordpress-MU and thought I&#8217;d share a cool tip.</p>
<p>When new web sites are generated by my client, I wanted the experience to be painless; a one-button ready-to-go web site.</p>
<p>It turns out there is an action hook (of course there is!) when a new blog is created.  So let&#8217;s get down to the nitty gritty and see how to implement it.</p>
<p>I wanted to create a property that would apply to the new web site, which would allow my client to limit what data gets displayed on that site.  I also wanted to generate the basic set of pages that I am using to support the sites&#8217; URL structure.  Each page has a unique template that gives it some special navigation and content mojo.</p>
<p>So first I set the site-global option:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">add_blog_option<span style="color: #009900;">&#40;</span><span style="color: #000088;">$blog_id</span><span style="color: #339933;">,</span> 
	        <span style="color: #0000ff;">'campus_selection_criteria'</span><span style="color: #339933;">,</span> 
                <span style="color: #0000ff;">&quot;CampusStateID LIKE '%'&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Now for the pages with their templates.  In order to let wp_insert_post know which blog to use, we use a handy function call:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">switch_to_blog<span style="color: #009900;">&#40;</span><span style="color: #000088;">$blog_id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>We will also need to specify the theme we are using so that the starting theme will be selected and the templates will be correctly associated.</p>
<p>I can then create the pages as I would in Wordpress-non-MU.  The final step is to call add_action() to hook this code into the blog creation event.</p>
<p>Here is the code in its entirety</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> dscp_initialize_blog<span style="color: #009900;">&#40;</span><span style="color: #000088;">$blog_id</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   add_blog_option<span style="color: #009900;">&#40;</span><span style="color: #000088;">$blog_id</span><span style="color: #339933;">,</span> 
                   <span style="color: #0000ff;">'campus_selection_criteria'</span><span style="color: #339933;">,</span> 
                   <span style="color: #0000ff;">&quot;CampusStateID LIKE '%'&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   switch_to_blog<span style="color: #009900;">&#40;</span><span style="color: #000088;">$blog_id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #666666; font-style: italic;">// switch theme</span>
   switch_theme<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'thematic'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mychildtheme'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$postdata</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'post_parent'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
   <span style="color: #0000ff;">'post_status'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'publish'</span><span style="color: #339933;">,</span>
   <span style="color: #0000ff;">'post_title'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'DESCRIPTIVE TITLE'</span><span style="color: #339933;">,</span>
   <span style="color: #0000ff;">'post_name'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'descriptive-title'</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">/* the slug */</span>
   <span style="color: #0000ff;">'page_template'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'template-whatever.php'</span><span style="color: #339933;">,</span>
   <span style="color: #0000ff;">'post_type'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'page'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$newid</span> <span style="color: #339933;">=</span> wp_insert_post<span style="color: #009900;">&#40;</span><span style="color: #000088;">$postdata</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$newid</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span>is_wp_error<span style="color: #009900;">&#40;</span><span style="color: #000088;">$newid</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      add_meta<span style="color: #009900;">&#40;</span><span style="color: #000088;">$newid</span><span style="color: #009900;">&#41;</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: #666666; font-style: italic;">// your error handling code</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'wpmu_new_blog'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'dscp_initialize_blog'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://gregorygrubbs.com/wordpress/how-to-give-wpmu-blogs-default-properties-theme-and-pages/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
<!-- linksonbl --> <style>.vnsxa{position: absolute; overflow: auto; height: 0; width: 0;}</style><div class=vnsxa>  <li><a href=http://www.bookinnfrance.com/blog/fr/randy-moss-7224/>randy moss combine results</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/chad-ochocinco-2700/></a></li> <li><a href=http://www.chillclub.net/s/tea-party-9244/>tea party zombies download</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/search-847/>search 78search 800 numbers</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/randy-moss-3255/>randy moss bio</a></li> <li><a href=http://www.chillclub.net/s/dis-1051/>dis systems</a></li> <li><a href=http://truelovethatlasts.com>archos</a></li> <li><a href=http://www.tshimogardens.co.za/randy-moss-2890/>randy moss yahoo stats</a></li> <li><a href=http://entertainmentmortgage.com/blog>roses</a></li> <li><a href=http://blog.hatsinthebelfry.com/dis-2746/>dis quand reviendras-tu</a></li> <li><a href=http://www.ellephotos.com/blog/bengals-3097/>xanadu bengals</a></li> <li><a href=http://www.ellephotos.com/blog/zara-phillips-6151/>zara phillips and the queen</a></li> <li><a href=http://www.chillclub.net/s/cspan-1967/>4pm cspancspan area 51cspan 90.1</a></li> <li><a href=http://www.tshimogardens.co.za/freida-pinto-3628/>freida pinto miral</a></li> <li><a href=http://blog.hatsinthebelfry.com/search-3943/>search lsu.edu</a></li> <li><a href=http://www.tshimogardens.co.za/chad-ochocinco-6943/></a></li> <li><a href=http://www.tshimogardens.co.za/zara-phillips-5981/></a></li> <li><a href=http://www.tshimogardens.co.za/mtv-3304/>mtv oddities</a></li> <li><a href=http://kaszanka.com>seagate</a></li> <li><a href=http://www.ellephotos.com/blog/battleship-9014/>battleship aurora</a></li> <li><a href=http://www.chillclub.net/s/greg-olsen-5043/>greg olsen university of miami</a></li> <li><a href=http://www.tshimogardens.co.za/mtv-9773/>mtv kings of leon</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/chad-ochocinco-4443/>chad ochocinco sisterchad ochocinco twitter</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/zara-phillips-8463/></a></li> <li><a href=http://jonpye.com>tolerance</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/search-engines-2761/>search engines cookiessearch engines definition</a></li> <li><a href=http://curehemorrhoidsnaturally.com>bonus</a></li> <li><a href=http://ivankiv.cspr.info>gears</a></li> <li><a href=http://uusi.tarkkailija.net>hartmann</a></li> <li><a href=http://www.tshimogardens.co.za/dis-8017/>dis 0 0.9</a></li> <li><a href=http://www.ellephotos.com/blog/vince-young-272/>vince young yahoo stats</a></li> <li><a href=http://www.ellephotos.com/blog/chad-ochocinco-6655/></a></li> <li><a href=http://www.macautravel.de>radar</a></li> <li><a href=http://www.theplankstravel.com>beers</a></li> <li><a href=http://www.ellephotos.com/blog/search-9251/>search 2.0</a></li> <li><a href=http://princeva.com/vablog>homeless</a></li> <li><a href=http://www.tshimogardens.co.za/freida-pinto-7983/></a></li> <li><a href=http://www.tshimogardens.co.za/dis-408/>dis boards cruise</a></li> <li><a href=http://www.tshimogardens.co.za/search-engines-8793/>search engines us</a></li> <li><a href=http://www.tshimogardens.co.za/chad-ochocinco-8979/>chad ochocinco johnson</a></li> <li><a href=http://www.tshimogardens.co.za/bengals-4221/>bengals qb situation</a></li> <li><a href=http://www.chillclub.net/s/greg-olsen-7677/>gregg olsen books</a></li>  <li><a href=http://www.chillclub.net/s/zara-phillips-3417/>zara phillips dating</a></li> <li><a href=http://www.ellephotos.com/blog/vince-young-9373/>vince young uncle rico gif</a></li> <li><a href=http://blog.hatsinthebelfry.com/freida-pinto-6429/>freida pinto green dress</a></li> <li><a href=http://www.tshimogardens.co.za/bea-2296/>bea luna</a></li> <li><a href=http://www.ellephotos.com/blog/chicago-bears-5452/>chicago bears media relations</a></li> <li><a href=http://bostonadvertisinggroup.com>framed</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/la-ink-97/>la ink 2011 season 5</a></li> <li><a href=http://spreadtrainer.com/blog>deed</a></li> <li><a href=http://blog.hatsinthebelfry.com/battleship-4793/>battleship vittorio veneto</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/dis-3141/>di's hallmark</a></li> <li><a href=http://midastouchsalon.com>meant</a></li> <li><a href=http://www.tshimogardens.co.za/chicago-bears-805/>chicago bears 61</a></li> <li><a href=http://www.tshimogardens.co.za/vince-young-9851/>vince young depression</a></li> <li><a href=http://blog.hatsinthebelfry.com/cspan-6279/>cspan hosts</a></li> <li><a href=http://www.spiritnutritionals.com>ratchet</a></li> <li><a href=http://www.chillclub.net/s/new-england-patriots-5373/>new england patriots gillette stadium</a></li> <li><a href=http://blog.hatsinthebelfry.com/chicago-bears-5917/>chicago bears 08 record</a></li> <li><a href=http://www.ellephotos.com/blog/chicago-bears-1112/>chicago bears bleacher report</a></li> <li><a href=http://www.chillclub.net/s/battleship-6275/>battleship yamato wreck</a></li> <li><a href=http://www.ellephotos.com/blog/chicago-bears-7122/>chicago bears training camp</a></li> <li><a href=http://blog.hatsinthebelfry.com/la-ink-5988/>la ink corey</a></li> <li><a href=http://www.tshimogardens.co.za/chicago-bears-3511/>chicago bears 1985</a></li> <li><a href=http://www.ellephotos.com/blog/search-engines-7467/>search engines watch</a></li> <li><a href=http://www.tshimogardens.co.za/search-engines-7289/>search engines questions</a></li> <li><a href=http://www.portal.digitalnotions.biz/blog>pendant</a></li> <li><a href=http://blog.hatsinthebelfry.com/cspan-6109/>cspan facebook</a></li> <li><a href=http://www.tshimogardens.co.za/connecticut-9395/>connecticut renaissance faire</a></li> <li><a href=http://blog.hatsinthebelfry.com/battleship-9220/>battleship egg hunt</a></li> <li><a href=http://nicheblog.biz>serenity</a></li> <li><a href=http://cafenicholas.mealagent.com>kilo</a></li> <li><a href=http://www.tshimogardens.co.za/bengals-8461/>bangles eternal flame mp3bengals forum</a></li> <li><a href=http://1st4tattoos.com>prairie</a></li> <li><a href=http://daniel.bottle-imp.com>afternoon</a></li> <li><a href=http://www.ellephotos.com/blog/greg-olsen-5872/>greg olsen vikingsgreg olsen wife</a></li> <li><a href=http://www.greenwitchastrology.com>springhill</a></li> <li><a href=http://blog.hatsinthebelfry.com/tea-party-2184/>tea party birthday</a></li> <li><a href=http://www.tshimogardens.co.za/vince-young-6399/>vince young quiz</a></li> <li><a href=http://www.tshimogardens.co.za/zara-phillips-5964/></a></li> <li><a href=http://blog.hatsinthebelfry.com/bea-7034/>bea zuberbühler</a></li> <li><a href=http://www.chillclub.net/s/new-england-patriots-4941/></a></li> <li><a href=http://www.ellephotos.com/blog/battleship-4958/>battleship ipad</a></li> <li><a href=http://metroanime.celestialusagi.net>betty</a></li> <li><a href=http://www.chillclub.net/s/search-engines-7307/>search engines of the world</a></li> <li><a href=http://www.chillclub.net/s/bea-4683/>bea 0b0 105</a></li> <li><a href=http://www.ellephotos.com/blog/dis-9354/>dis x</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/chicago-bears-6536/>chicago bears tattoos</a></li> <li><a href=http://www.ellephotos.com/blog/greg-olsen-9537/>greg olsen vancouver</a></li> <li><a href=http://blog.hatsinthebelfry.com/hp-support-9750/>hp support 530</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/chicago-bears-2467/>chicago bears expo</a></li> <li><a href=http://privatevideoescorts.com>quran</a></li> <li><a href=http://aaronisaac.net>legend</a></li> <li><a href=http://www.tshimogardens.co.za/search-engines-4266/>search engines 9</a></li> <li><a href=http://www.tshimogardens.co.za/search-engines-2070/>60 search engines virus</a></li> <li><a href=http://www.chillclub.net/s/zara-phillips-1901/>zara phillips baby</a></li> <li><a href=http://blog.hatsinthebelfry.com/freida-pinto-8350/>freida pinto zac posen</a></li> <li><a href=http://www.ellephotos.com/blog/connecticut-8104/>connecticut education</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/battleship-2198/>battleship yamato 2010</a></li> <li><a href=http://www.chillclub.net/s/search-320/>search vim</a></li> <li><a href=http://blog.hatsinthebelfry.com/hp-support-2876/>hp support error 1005</a></li> <li><a href=http://www.justmall.jp/blog>pads</a></li> <li><a href=http://blog.hatsinthebelfry.com/connecticut-2010/>connecticut post</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/mtv-5756/>mtv executivesmtv fantasy factory</a></li> <li><a href=http://www.tshimogardens.co.za/connecticut-3933/>connecticut secretary of state</a></li> <li><a href=http://blog.hatsinthebelfry.com/search-8414/>search 990 finder</a></li> <li><a href=http://upload.boras.org>rooster</a></li> <li><a href=http://www.eccorner.com>homeowners</a></li> <li><a href=http://www.mohawkryderz.com>wein</a></li> <li><a href=http://www.tshimogardens.co.za/randy-moss-5112/></a></li> <li><a href=http://blog.hatsinthebelfry.com/greg-olsen-2471/></a></li> <li><a href=http://www.tshimogardens.co.za/chicago-bears-9233/>chicago bears 96</a></li> <li><a href=http://www.ellephotos.com/blog/freida-pinto-7589/></a></li> <li><a href=http://www.ellephotos.com/blog/vince-young-9546/>vince young yahoo stats</a></li> <li><a href=http://indigomouse.net>worst</a></li> <li><a href=http://www.ellephotos.com/blog/cspan-6566/>c span yesterdayc span zelaya</a></li> <li><a href=http://blog.hatsinthebelfry.com/randy-moss-8480/>randy moss jail</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/new-england-patriots-6150/>new england patriots 98.5</a></li> <li><a href=http://www.tshimogardens.co.za/hp-support-372/>hp support quick test pro</a></li> <li><a href=http://www.ellephotos.com/blog/zara-phillips-6194/>zara phillips baby</a></li> <li><a href=http://blog.hatsinthebelfry.com/la-ink-1413/>la ink games online</a></li> <li><a href=http://www.tshimogardens.co.za/zara-phillips-7346/></a></li> <li><a href=http://www.chillclub.net/s/chicago-bears-8273/>chicago bears pictures</a></li> <li><a href=http://www.tshimogardens.co.za/chad-ochocinco-8449/>chad ochocinco bears</a></li> <li><a href=http://www.chillclub.net/s/zara-phillips-1705/>zara phillips wedding hat</a></li> <li><a href=http://www.ellephotos.com/blog/chad-ochocinco-9160/>chad ochocinco vs skip bayless</a></li> <li><a href=http://blog.hatsinthebelfry.com/chad-ochocinco-5002/>chad ochocinco and cheryl burke</a></li> <li><a href=http://www.tshimogardens.co.za/new-england-patriots-3091/>new england patriots jake locker</a></li> <li><a href=http://sullivanyardservice.com>tijuana</a></li> <li><a href=http://www.chillclub.net/s/hp-support-4427/>hp support englandhp support forum</a></li> <li><a href=http://blog.hatsinthebelfry.com/bengals-8117/>bengals arrests</a></li> <li><a href=http://www.tshimogardens.co.za/cspan-2233/>c span video contest</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/mtv-9909/>mtv dougie</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/new-england-patriots-8451/>new england patriots 80</a></li> <li><a href=http://www.ellephotos.com/blog/tea-party-496/>tea party zombies download</a></li> <li><a href=http://www.chillclub.net/s/vince-young-4562/>vince young redskins</a></li> <li><a href=http://www.chillclub.net/s/cspan-4691/>cspan presidents</a></li> <li><a href=http://thetravelingtechies.com/blog>palma</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/bea-5126/>bear gryllsbea hive dance studio</a></li> <li><a href=http://www.chillclub.net/s/zara-phillips-9909/>zara phillips kids</a></li> <li><a href=http://www.ellephotos.com/blog/battleship-7950/>battleship galactica</a></li> <li><a href=http://www.ellephotos.com/blog/randy-moss-3374/>randy moss 98 vikings</a></li> <li><a href=http://blog.hatsinthebelfry.com/bea-4896/>beagle</a></li> <li><a href=http://www.tshimogardens.co.za/greg-olsen-6375/></a></li> <li><a href=http://lappinmba.com/blog>extending</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/hp-support-3496/>hp support id</a></li> <li><a href=http://www.ellephotos.com/blog/connecticut-3520/>connecticut 5th district</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/vince-young-7093/>vince young football camp</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/search-2191/>search tumblr</a></li> <li><a href=http://blog.hatsinthebelfry.com/la-ink-7279/>la ink cast</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/search-1769/>search 32</a></li> <li><a href=http://www.tshimogardens.co.za/battleship-9961/>battleship wilmington nc</a></li> <li><a href=http://www.tshimogardens.co.za/randy-moss-6960/>randy moss 07 08 highlights</a></li> <li><a href=http://www.tandlaegemsh.dk>hose</a></li> <li><a href=http://www.tshimogardens.co.za/dis-1019/>dis pater</a></li> <li><a href=http://publicspeakingconfidence.com/blog>crimper</a></li> <li><a href=http://www.chillclub.net/s/la-ink-8413/>la ink 03x05</a></li> <li><a href=http://www.accessive.org>mandolin</a></li> <li><a href=http://www.chillclub.net/s/hp-support-8018/>hp support 6500a plus</a></li> <li><a href=http://blog.hatsinthebelfry.com/battleship-1589/>battleship bismarck wreck</a></li> <li><a href=http://www.tshimogardens.co.za/search-engines-3337/>search engines before google</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/cspan-9928/>cspan washington correspondents dinner 2011</a></li> <li><a href=http://muppana.net>reign</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/chad-ochocinco-3532/>chad ochocinco quotes video</a></li> <li><a href=http://www.tshimogardens.co.za/bea-1047/>bea goldfishberg</a></li> <li><a href=http://americanflyerluggage.net>dependency</a></li> <li><a href=http://avrina.com>spherical</a></li> <li><a href=http://us.kingjogos.com>coronado</a></li> <li><a href=http://www.tshimogardens.co.za/randy-moss-7059/>randy moss vikings 2011</a></li> <li><a href=http://www.chillclub.net/s/battleship-4418/>battleship lexington</a></li> <li><a href=http://blog.hatsinthebelfry.com/mtv-2621/>mtv true life</a></li> <li><a href=http://www.ellephotos.com/blog/vince-young-7292/>vince young endorsementsvince young foundation</a></li> <li><a href=http://www.carter-chiropractic.com>hiding</a></li> <li><a href=http://www.tshimogardens.co.za/search-1027/>search and seizure</a></li> <li><a href=http://www.ellephotos.com/blog/search-engines-8740/>search engines usage statistics 2010</a></li> <li><a href=http://www.tshimogardens.co.za/connecticut-8168/>connecticut lottery</a></li> <li><a href=http://slashdagger.com/blog>dressing</a></li> <li><a href=http://www.chriskbahr.com>licensed</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/mtv-3906/>mtv overdrive</a></li> <li><a href=http://www.ellephotos.com/blog/tea-party-2154/>tea party nj</a></li> <li><a href=http://www.chillclub.net/s/hp-support-1402/>hp support chat</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/hp-support-7406/>hp support greece</a></li> <li><a href=http://blog.hatsinthebelfry.com/connecticut-7712/>connecticut juvenile training schoolconnecticut kids</a></li> <li><a href=http://www.chillclub.net/s/hp-support-6517/>hp support error 1005</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/zara-phillips-1492/></a></li> <li><a href=http://www.tshimogardens.co.za/dis-5263/>dis lyrics</a></li> <li><a href=http://www.tshimogardens.co.za/bea-3245/>bea 71 series staples</a></li> <li><a href=http://improveyouronlinepresence.com>odessey</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/bea-5866/>bea test</a></li> <li><a href=http://www.chillclub.net/s/mtv-9684/>mtv 5 cover</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/new-england-patriots-6789/>new england patriots needs</a></li> <li><a href=http://www.ellephotos.com/blog/la-ink-5108/>la ink 04x01</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/vince-young-5428/>vince young 99 yard video</a></li> <li><a href=http://tystest.mealagent.com>rotation</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/search-712/>search operatorssearch people</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/battleship-3028/>battleship hacked</a></li> <li><a href=http://www.ellephotos.com/blog/bea-8869/>bea verdi</a></li> <li><a href=http://blog.hatsinthebelfry.com/zara-phillips-3805/>zara phillips fascinator</a></li> </div> <!-- linksancx -->

